From 6d9587b463e2dfcba7e17f6b78aa77dc1c82265c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Wed, 27 Dec 2023 15:53:35 -0800 Subject: [PATCH 01/35] Doesn't build script - Update buildscript/gradlew and bump flywheel version --- build.gradle | 97 ++++++++++------------- gradle.properties | 12 +-- gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 62076 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 11 +-- settings.gradle | 17 ++++ 6 files changed, 72 insertions(+), 67 deletions(-) diff --git a/build.gradle b/build.gradle index ae5d883dde..b2acfbc94e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,33 +1,24 @@ -buildscript { - repositories { - maven { url = 'https://maven.minecraftforge.net' } - mavenCentral() - jcenter() - maven { url = 'https://repo.spongepowered.org/repository/maven-public' } - maven { url = 'https://maven.parchmentmc.org' } - } - dependencies { - classpath "net.minecraftforge.gradle:ForgeGradle:${forgegradle_version}" - classpath "org.spongepowered:mixingradle:${mixingradle_version}" - classpath "org.parchmentmc:librarian:${librarian_version}" - } -} - plugins { + id 'eclipse' + id 'idea' + id 'maven-publish' + id 'net.minecraftforge.gradle' version "${forgegradle_version}" + id 'org.parchmentmc.librarian.forgegradle' version "${librarian_version}" + id 'org.spongepowered.mixin' version "${mixingradle_version}" id 'com.matthewprenger.cursegradle' version "${cursegradle_version}" } -apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'org.parchmentmc.librarian.forgegradle' -apply plugin: 'eclipse' -apply plugin: 'maven-publish' -apply plugin: 'org.spongepowered.mixin' jarJar.enable() boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equals('false'); // jozu: I use a gradle workspace with both projects. // The project is named Flywheel-Forge, but sub-projects are named by folder. -boolean inWorkspace = findProject(':Flywheel') != null +Project flywheelProject = findProject(':Flywheel') +boolean flywheelInWorkspace = flywheelProject != null + +if (flywheelInWorkspace) { + println('Workspace detected, using Flywheel sibling project') +} ext.buildNumber = System.getenv('BUILD_NUMBER') @@ -39,8 +30,19 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17) println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + ' (' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) +mixin { + add sourceSets.main, 'create.refmap.json' + + config 'flywheel.mixins.json' + config 'flywheel.sodium.mixins.json' + config 'create.mixins.json' + + debug.verbose = true + debug.export = true +} + minecraft { - if (Boolean.parseBoolean(project.use_parchment)) { + if (Boolean.parseBoolean(use_parchment)) { mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" } else { mappings channel: 'official', version: "${minecraft_version}" @@ -49,19 +51,26 @@ minecraft { accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') runs { - client { - workingDirectory project.file('run') - arg '-mixin.config=create.mixins.json' - //jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling + configureEach { + property 'forge.logging.markers', '' property 'forge.logging.console.level', 'info' + + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + mods { create { source sourceSets.main } + } + } - if (inWorkspace) { + client { + workingDirectory project.file('run') + mods { + if (flywheelInWorkspace) { flywheel { - source project(":Flywheel").sourceSets.main + source flywheelProject.sourceSets.main } } } @@ -69,29 +78,17 @@ minecraft { server { workingDirectory project.file('run/server') - arg '-mixin.config=create.mixins.json' - property 'forge.logging.console.level', 'info' - mods { - create { - source sourceSets.main - } - } } data { workingDirectory project.file('run') - arg '-mixin.config=create.mixins.json' property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' property 'forge.logging.console.level', 'debug' args '--mod', 'create', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources') mods { - create { - source sourceSets.main - } - - if (inWorkspace) { + if (flywheelInWorkspace) { flywheel { - source project(":Flywheel").sourceSets.main + source flywheelProject.sourceSets.main } } } @@ -99,13 +96,6 @@ minecraft { gameTestServer { workingDirectory project.file('run/gametest') - arg '-mixin.config=create.mixins.json' - property 'forge.logging.console.level', 'info' - mods { - create { - source sourceSets.main - } - } // setForceExit false <- FIXME 1.20 } } @@ -156,6 +146,7 @@ repositories { } } + mavenCentral() mavenLocal() flatDir { dirs 'libs' @@ -174,8 +165,8 @@ dependencies { implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") - if (inWorkspace) { - implementation project(':Flywheel') + if (flywheelInWorkspace) { + implementation flywheelProject } else { implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") } @@ -223,10 +214,6 @@ sourceSets.main.resources { exclude '.cache/' } -mixin { - add sourceSets.main, 'create.refmap.json' -} - // Workaround for SpongePowered/MixinGradle#38 afterEvaluate { tasks.configureReobfTaskForReobfJar.mustRunAfter(tasks.compileJava) diff --git a/gradle.properties b/gradle.properties index e20117fbc1..c52cd825a4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,22 +8,22 @@ mod_version = 0.5.1.f artifact_minecraft_version = 1.20.1 minecraft_version = 1.20.1 -forge_version = 47.1.43 +forge_version = 47.2.6 # build dependency versions -forgegradle_version = 6.0.6 -mixingradle_version = 0.7-SNAPSHOT +forgegradle_version = [6.0.16,6.2) +mixingradle_version = 0.7.+ mixin_version = 0.8.5 librarian_version = 1.+ cursegradle_version = 1.4.0 -parchment_version = 2023.06.26 +parchment_version = 2023.09.03 use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 -flywheel_minecraft_version = 1.20.1 -flywheel_version = 0.6.10-7 +flywheel_minecraft_version = 1.20 +flywheel_version = 1.0.0-alpha-2 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..c1962a79e29d3e0ab67b14947c167a862655af9b 100644 GIT binary patch delta 13895 zcmZ8|Wmp``)-~=Hdu)0n3Y-8OvyK$p9^s9MM|Aj$miotNhy-{udLczZyd9uWtD)X_{|!LhIEF9y8(e*Z zW>^w$u&x|i9OjL=#6Nl~*ERulzX>8C-}o;iSMRYdfCU5d`~U{V4>HCg0HG4Xg2uP;fn!>S9+>LbuWbc0bETMQfo9~h}yI*TSv;Oikl~t-+xqI-`P$Rj@yi{mr2zC~s1snMT3!OPBdJ%IDnPXq+pl*Z>=+?qo${lkCSKmwTlVjfb3thU6B8yFjr!tphOs*G6 zwL`RyVAUXj4p=9&@PpWK)m+REuvHaq838TEhY^7W+JAp$ zZ^y;8`Z*@VqJ{sFFj?<|7SKS@G`$Yi)gx%nOi@Lr zCv0IJlFz0bP(eDIW(uWNq?;8zEAb+uGgnkLk;y!4XhA6=Eoa<`+|;6mOq>z`%ir@z$4)Mkd3 zF=hFo zyd{*bRQ4YUe^bU*Y`__)Uhu5NIjVJ~a}{lHp-_7wI?#EB11XcqmdY>pk`JJ) zW9Rt!tK=N>fZ!UDomwMnb`0EOvTjcNl=yW@$c!OAg*=l()GjZwSyJ+o^;Zi#I5*uP z$6qeih8&g8E(pNSneK>93A(8*%gvwv!0V|SqGcj55Y7`=N*@pJx_ig3uVuf-G~LJbm`7nxNcZ>Jgqy(LTHu_C2e>STp^Pm{}f&^)XU}vzuU`UV&>e& zqsXNXSs;Wri|?NhCq0vXC5$>9Cag$adyWz^x@NCiy2${9Dc)Y;J8k1Z933W$3$H}g zCQFU1XwzGm_WUheXvnDisH_%BdzMgNwk2^mHcQu*x>U%iN*B^8U(eVz1~(%`kV1Vb z=9T0xmN?bQMyrrd?u}jer}zV&sCK6zSm!zV8A8dP6THF=4*V{_K*E*K<)I(Q^(eV!m!vu##-2g|G z{RB;{gJB_X-w{ANq?ft_n!@=O8_gj6FxW&zO$7L3@NjWt@R{NxMbpHLk6;=2$0P5P=kKc1_85inX z#s$&s0zhV1cz>nRb#|D#N8Z-=Tphm)sGH>9cz3K3I)6XpimJW0(6$GtLzN(YPu9%R zdFXG9|30AZME4r@joC0IdvBBe08mF@+5Dd97p$h=n|pi80Cn2n{ev!S$llPGLqHva zZ3*OmW%!Qj>C$F!Ffafl7#I_1(gz!aa)b{ebU*=yH%^kr=~N?|2&2Df2o9X=2B?U!#R#+Cj45=f@=EcQx+9J z=X3~A=zbX29Fqn23m3dm}0Voj^Q9BjI=MiG+NZ)YCYn@r^qv(xE3=)&i z=(ML301=rNTptvUt2tnsPb1~G*DWFWoZfv)wV|uNW%?!)jju`jN(K-0$JYi!ofNup z9K%_ucHwutbZsl~vDQ!Jtj8uI6WA6K--@?8+_=t>g|kgUeC=w`IP9m&*fuoO3#A;t z&3@=3;J0>yjM89?h5MG$S`wW+=vyYOWQGhIP`^vScM8^JL{mGan5uTJPvAg$0z}8; z zhMi+S${H#^wF;eU-0UHJDo$QwXDjm{ns>^ltubKXtd>6Bq-=ByF%bHu>2&e&uZj2X zgWIq(l^;Ab7#I@h%#j1AtBIkB`GO*y!i;1K+_SZ-p}4jmP7#%E-=>{ zK(3*ObyAgDLnbBLObTWJWNO7<60SK6*!dD~_7JOWTB*}(*X)ox0{lq5ac$ABkcL~0 z9qCHT8^`QIe_4-BW&mIe*&0VT6w|oJ9hnOO&oZUe!rP+gStQ)h5ZPhBprHZI;So+g5}&;adp<|7#r@DG!wXmtwdwy=7i>a`x1D4 z_N$0`Q)>zTVUU%@RzlG=4Nk1hE=_klWj|6aj`KJ@S`y^%bifkdX`s!A#|mpM-x;SF zg;bju5cA0?a}%hk=3AL^#2B>5X(TSne6PDWY5gRVvn6nKl;vg?SIbv^Uz=+4aPUft z-$}QR)+_U?eX*p)V0%#0@S46_6c($OJL^bPj0Ij}up8}In#GQa&Cp<#%ZPjx(^97{ z8AfEgrNRTg-l9WJrNJzHx1EkI<|n(P3VIwFlTvMxfe=V&NL)4MubdHqZF)&Eq4`+% z7z;>s(sjUsebUfFF;~)_%@3BDl8i085o$H!*yBv%Z27d~)|jfg4DhJ&nMb((B#4hOfeBhL)g+r)f%2be?s2ox zT3j0k+Va^9`gqO)FoUV@F|((*vGxN>?5IlvC!BzW-8cyCy_)Fl8W+eg<&Lz^s>dJx zkly@2Xzzi9Uf%|1pF_Nz-3SgOx*+ShK(x=XUlP?;EfoDqAkkwyR*yjIcD#7-@=|Um z{T+V}q`6)wnSO#*N#Hp8QT7^>6R+H^_o4LBc}$aD^@(1!+Y54YF3@A|Cupsfz@Wt8 z!KwmSb9}3l)u^Y+V6W6(bL3hk;XTY4FNy3hKhID#Ep#xLM88?`xT=lw3xsgN;gKK@ zqpElV*j#e;{w`OPYcb1_szKUtRLygjq2ldhGJ$8ksyH(hF%^w`&FH|zlDK`DfuZ_g zs}!{hMk^~48&b=jWqG2*^m8?ERreHIw8dgR`Ugj*t4Uo`^U*56MmU<^ zNxcuRh+Kc2>W~lzD8S6}Xho3s9f}{o4@tIc)G;lKXi(HJhZV{qSH1-xj>P2$NHEK2 z)TjOy%>(9Ot_zPO)^tp@AsSNd+`R?}_2Vd>=eT{G&TfITkeW@p{F+FTJf(n87##z& z!%w+6-!NJ*?9Z(hbZv^BG$Y1`BOo~*k7jaZ)9%@;H6F+W!Q%IV4qSM85; z0%xWZi_wc=CCc>2rd3Rk3C79_rJH1uG?yFIm4f6Fdmts<41T*;3ek&p z3(NaDK3iIDa)MaUD{_;~fMV6obrT6_K$c+eeRBJ7jd)c%0jldoJX`EWz8M$b1s|DS z)cr6)em!+P%GjM6uQb6CQ!FvUb%_>qbKn=gHl=@K-Z*6_VaD=;!?P9pr$Z?6NrB%a zb_G4M-UkkhI>H@+kP;eS4p->q_f+&(R^7hyRsS9Xl94vA^AYlM%tdNdHQz zFQu?Rau!C@&&Dn;i5iEhn3`y>{O-m^_*h+Jp6C?D+5yn9Vq5XVQoUe#BP3}lqvHa} z@x~UctaNE9PwnRg6+15NJ5k(PC0dETm#QxXY6&uTqupm)GVrsvKC9o)&*mLo9?$Ot z!SFjh+!mr{kYE5A#urFIBv?<(6-HtqfprK#3H4dylz5j`Uc)Hz@1}A9OXe=4gf3_- z$P|^SpeQ89xlL`pftC^4tO3N)JXTqmkbruGAsraU5Y$fyMd~L3r3t8-SfkX{n4<`@ zhBKAeBP_1Rd8q`<3^dio2W9^9iYW?#m-!IKDO7ge{vC%1Y>dWLslyLNrm-!*YU3Dy ze|qm9gwdCJKZlwcvaoV%S_%X-k_?QIf2zuAG&32WtJ6NDr0i+<{w;CG_St&I_7HtR zTiR;!)_1iw&#FKwAGFuBze6(_%DLu?>|K(H5bf{br_f5|#qa zNOuJQhSU1PGQ+dltC{ik3sA?PcKcDJg;_^-LCcLGo+|3VsWx0vMNOpKz3*U1wGG0{Z@O=3gt1Ay|67ZJC zGe%Q2bP}rYtE^Lc+ybPES@Snxwlh7Ydq$c{H?d&8e>!Dvt=dFxeS0fvt=u3$KHuU; zKHr9fCbGGQBeJ~@{wdgJi6Ah40fcT>yGRWEe)%=j!AaG~XDaHNdzsU6*ZJ2XC5>lv z=IT$K4yEi0xt7i<^=rn-$1nOKKRQZ$7df4uU#`?ddlH+Oo~+H_Zq!-}6VK;|?PGiI zhbt$ffNJ|--Bn6(L{pZ#!&ykjgBXEs%hmxg3vB~;GMKcAfeq~#2~f9vw7{>?pTu{T zcxLiHNCP}pJ_fYl3^gBy_}h~U`lx1^?)q|U1cti6s?Nt*RvSgF6WD8U%3uk zwC7lEPg``Bjt5YXNFE!^nq zJC-z}n^zNvd{jVhiv9aKNd}lH0$n97EBjb`Fh+7~amqAtrK{@Sn3QZO3BBiUIo^n$ zsiS{+L+8B0e&`mFnEqM!LCLnzlclx?UwZ(L6!FZ$b53#xA2caP^zn&!GVtipn{W`U zvN9yG-?@6)3`HYt>E;wO*N_UGd``TDMJ+e<*WUe$SGeaBU)dJHbvUp$J?}caKfP>U znZQtJY@$~+#6FOn9R6m86Sq3iiaaWa3kiz1k>ntIk2*6R+6gchFxKLcBi9EMRVQrl zP~vO=WAFX7o6BB76*mwH?R^-5HX?KAu`a^Eplkmc zSXpmBvQ4t(kVfyQIR#|Wi7PYcy+x;(5j|LOp3()IiR>2j9**}<*nO2NiED?Z;)iGh&PH4nB*kN{VVt!lYX*(jAlnZkabB{Fa7)iF?pBFk(T+)xyg(Y5TUd;DX&MX&_}`_=Z_KcQ9;Ok=&YEqPyVul9sRG%P!*byO8nRS# zGwOm?IyLaeqMf=7AGF{L7v%GKmeM+;#U;vPs0=0R1WAo2JIq8N`PGDe}Q zt6VP!Fqln^U#5ZJFp?b?d*Q}Ynd3Q)jTU;{RwiqDncXA=DXTWhkWhiR{XF9aobJH{ zEYYt-`Hdwp@ZQ5$_i&f`=DA1D>lgJ>_PkLE6#)L#3R1Giq@XA zCLtGAgOI35<3Y-&55pCx#&@_R?w|x@%3$Q-X|@=Zhuo`C@cOG0@M*&sW@uXQJz-M; z=ZcUIw+bXwCV+k?WF;Ugyrm6gy8KjZmaobl;Omt^`!m*(!@&}j)uCT=+}RbLo7WiC zM*7VJG5hnkugII&>R-Jyx<}$pNBtEizA`Gn{GbTy^WPi*o!^5_gH8ME&+{<}nBbSA*p<6A z{c--0SNgk{iH@g2s&K3L#wl5fR-H5$YrMAEA$gwfPC&GdtAb=bUk$?Md6^mdF&^vj z+iAp=tz8ZK>*?)QgEVBG?CnAb`($wf9*1w->8@)hg(hpH^%IFjGqTs7<*jz0J-*C! zs)=j2cA@=KgS0+*LX^Qe*))69yFm;(i`r6`?_p2Dfi!AQh43;ix#Kv8_*W|IsGg;f zJ=0%L||IPz~u^1P?ZkuO7VD7>GEfT=K*2JP!?hLF1f0rSkXpoIojW`}iLv zt$qt5Kd$Ty5UwS~N|w!IW4-TDG6g9!ecEoE+JUM(=T{d4yASY8>tlDG_XdEUinvXN zl>XB_*;iM^53IG90-1uxg#z{ov9M-y`(|4~g#J?dVQ&7tJ+a=N9npjr(_lb@G$v24 zPeA4UfgSFXLSe$Ghn!^hh)2|+YuV|~a}U+Y9iy?b*TKn*`y{ADmlq%d|HzJn0mW<0 z5McIquX})(09`s?@%4OLy)I^TdiKP=%}XfT`s{oX5eauP0FS#ZH3$bT&E#E)1%_v48Kc&JbnK@KR+fCJ+WWg`;cXecj9ij8zP$MV%S9InmL z#D$p6%KIKx&U;|#5fPg~KlH~fC7Sh-(Ut}5+tSSriumK>DDF&sl2pa_A|~tu_*8aY z(*Ud4=(+k5;ke&7V(y`$@j|FGqk0(WA5Wc(N${j@=7U}Xs^XNgK(<|>qug3-b1T3( z0=#Hgj}+TLlDhVm<>&!j$jvWXm6SLkMW&2k+;_u9Tq#<8uKtToJ3Q^==VQ0eV{+r6 zQn5p9xfHk@%P_FbqYM3DFnxUSXF^sk#Ms{)T4quYP`fK;T+Tj&gRl6sm|74UbHHrF z7h!QzEST^cpRO6L8_~zXNp!niGl&79$k_8RSj0W{xMrR)D4`>~tNrK~*s0gkO-PC^ zu^*~aOBQF>qG>`%KGd+7W{nGqd5lc0%E_*&rn?MObfYvgPvJ%vawv{il#Km=$-hF* z1V^<{OA_t~X|u>{5ljynGhf844dJ#q31&xuibhPgP;6z{C2qw67U617_1*$=(_{mu z@T$|cK0GIz9sS4`1VcT=#Rqfsfiwbly-A61ih$VWK@T{K(t%VCA4=VJ4(eT` zLP`DnbAKO!X02C>qoh6kk2SEE|nQ8^J~0S)XyHMI1`BA+8Q-{{y-|Sc=j6N9xVnV z3^giq-U}tR!`_$ty{geQQ}xVo!CwzlXx}-}k2&VU3u7n@(1G0xP$36j1GKVJtLydS zm|^pz&9wE!Q>OWGMLY+Y?=$lIM$IKdF`8Pw)uhzhmFGtIyWl(qh0C@9BbzwDR>rEa z2gc62w3u1cW+De8tCw(3SQ8EK+t9l|ef|)GLRlRJz>SleVh^o zSq>XS(iJr>IQL-5^9LMn-MBxnO*FN{K2{7JVUpW5nZ{sz&_Z(dXDW?G7lmn%1nU|B zqC_R`=83Y=g^uel37AnfplTx)W_%O1pY@^^#~MgJg`0^G07b7RHOA>7K6Vzom_M3= zbD)3(BXXoqR6UFGHM9a3uK)SxX-0%jvKG23)#s6{vbq>#o$1tZMI5hU1c`fGME7#Ij+u%*rdsnO7yaltUc zz)OZMW*a=_Q|k2CFQ+lR%Md1Kd~``A8LX7vMtOupY7HV^E*;7o5$|Yq;EZjl%s-BLWa)nM| zOY1bfH5&%ed5t0h_`z*>GNiXhoMBw9+W7 z4U!O;)Tz3n;x64wHcYoivoslIkj9IN05|H7X~GWEx-k619Z-KjWv%8@$1wbIvAFfI z0=AQoH{3yl1z|`pSg$(!>x0)nU|wT@4i`lCchm_nrU@Y;XR$D^5wA!Ftl}*9OwXFZ zai&Zh_YNnlz=LEccY_eUXOEY1;q&Pd;dLtf$RffP4%P#4ZyIjV&0;_13^ zIVGMUzx+5jLyq55_Qz0jPBx~-{DfuUW)hKduk1gv0et-e(ZN8;IIdhtV$3N9Bg((Q zw5eHG)FFs=ewUwfdHfvHb$&&i=h{#epIdWr+=YE9)%453DlIOHLFX;%dv2LDNMrMZ zEWU|CvEYY*(2SE$Y{jAd$QU-wd*Hbe5yO+Lu6Ux|(Y>L}E_jNPR+TX@Ch(#orbP8g zv+Z(oKz1gylHHGKB*FbdpSh7VBM2KVmx2oj>?q8|s72`}5s)jT=s4;lbRw$cKh+N{ zVTxW`s~QW~rRB;e|7pxFoJ_Vm^eVjcddUh0Xp(NhCBZ@Uya;(x_wkvyH*^ds{2_H? zs*PV?33(>MyJC_<)JC=|9II5@I`QnNGgZr z5AfQVuy5}nzXlGQGV~eESn9UcL_U$gw(QjDVEW4b-o=BQGBT*a$1Fk+4bm2n^6m6w z_hn7X46IDL7iQZ8s+_(8yX!fXqM9htq_Ts}08b%snTZMmP}{6(anfizqhpR1cR61k z=sfzRN*!0HP{Z76PDg%PUY)rjwhuy71^5D3f^bR;(fQe>3U#zrWwe0OSYjHZ-eSJV zuKnE7`~*u%-HShx%*b9ZPU~(Rg=`lQI$;iBY#2k^6{Ef6e9D&EK^irorXEpE!h=>^ zVxH#pyrndMgk)Ff-ke*RFsPY@B3AM_;Kj`PIJU@EH^QsIUo1wdl_wfqd48O^9?06@ zt*>img{+gG%WiGU+&V)`jeJUPSDDLhd#nVrUr~dURh(&O#gMnA0dEg-#?fg0Wnp#P z;4QjL{Fv?Unq!!)POdN%ZI&vU*Ww};bqd3@5fb_<7mIa_w@U?X&ed5f1FCQ@57aR@ z)TUphLPht{?j%;+T}Sfla?uiG26R^?7=x!#CUXw+$_TQx_%vLhgg8LVJz@{QVxH;M zGcV^6&Z%`yWalhb>$VS`{^Ex`w@cldtZ8t!!exC zu+Msuk)M-ylAjAz8{yA&TjgR`O%H1H0T&$<*+K{2-<~=1E0~C+w@CzUg>GyIegmx$ z$vp-I6CygcS8Jm9rR{Wt@W?<)IdIk##3DUE741Dg@lQ~Lskm-7=|2%)&XCF_8|780 z9d-AgO*4e1uf}M3*FGo&%&eG;OB^Vm_x8i73V3P?d^qdJMvO&{H(jgc?n6UYZ>-FU zeO%|qJ%xvB;o+$e+CHm+Ot1UgzOrX7_G!pZrt%?TaOs9ZPg>i>-gg^Vuu6p>LEd99 zGlCZbE5(oNfEP{~x>KfOZv6XWA8zfk0@R+{;r7WV?(wWFRaGkg&mR3j$wJa7CBWz= znwfnWiE^@dC=n6jrAY4vvH*;b5{E#wK8AoUW`vT3W+8gyt9<*hPl1ID>F3bkLniI?`*u@J2zcd_cAH2?L5O|qzu1jQs$J^g9=beD zYoEgyA^AIv!P%D3;3T_C#zm7j6=+ACjtf5->)lXATb2p>g%qD7L1EbTMh(z$4oMY) zSZft;+pfN?a7x#%4}(P3Q)Gvt1F^8eu9}_PDW&}_2hhqjF#&SGUnz^`=V(U{;B;`G zt7FmRinElmq%KVXaBZL$+hD> zLe`*wO^B_i5W9q8#>l8J4;5{XbZg#@Z9|D|{gN8}jF1XBNzpi*9R3+-F)w8EbJ~In zEdim4jC?)`IzcZ1_`5oBWd#yPJNc%ajkte>^q1KY$#LzK)`jz_7$%1`N1_tdhr^wG zp92GvW>iDG)!1`I3*Y3;C)Jz7**nV;DaO_d19A_8qX%OCf-KY-GEZ#Nv;2CZQ*ht5 zY`vXc7yAb|?h#Z_dEKDC)Wp}g7hJDlI>P+ctKoq`U4!4az+ECGUSGmfHRpW&m_%7? z(o7gajY+w(Le-L(_Al|yQIvl1gk&lX-5BMZn=+~n-N}$`J#2x5x&B1EG{drVp+i;- zucW)%=6bqw%wNB|=k!-_k($v{gQB1ZX`dn0tu@(Z7b0$g5k88nHYIEE zT{wBh?|8X1yS1ITl!hS_>>{cobd%i3<#)=amBnHn>p;m6f%!T!BSP{_9DL_Wmv{PtyL9hoTep$i_uAr>^@7u^a($-HJh2k0xNsYVmt|v+kCWusAE%8~f zgZeq1{C!DL z7|_)gsX-J$DBwOYs|TpK6>I&l2*#dm_B%7y(JCJ?jaOVZJg!;eleEd~bT^pJkrk>q zB4)r!XRL!mow*tX6z6JA){(LgKapsISwxE@P|Hy&;*5I17ktf2EQSu$>0G&bDc^|D zoB?VpoqIQzg72DO!zOL#jXEsFWVZoyX*Q+>cyNC5+bi$(-R z2PXnAH)~j-X7q#KV*r7K0Tj#Pt=_Ix!xQizqfxG}vfg*swPul)E%ElLW)2B0BOb4U z$5{w|1BT44k;f7uS&T@0UH_mBvgr?Q_m;tun8!5sqbDu3_a@H76e`xzggnje$~Vo7 za$jN9vO%&+?c(NFBWd(HH(c*Tf3txzhrnp4X1859WXnbk!aVPy#xl`hJYOb;9$6q{ zkbx6NHJ;r$;+CoL5@BT|)P$#Nd4mLhJ?! z#V8L2#1$FDnc_k5#=YeMy9&SHkG_wJOT1g%-w$u1eta|QD44f{Y&WqiWW218tS?qy z$ZDkAwNCgrzLY?-u2WO8%SB`AO_vLdwg{s)2>YT(Vp}$u)h6yDPl(o)wFGQ6GTv9!92`>rC_Xgn9)BKfMk>B0lFK$_ux zk^my^G@g^?|Ds?LnEwzyJ7qzahke+uzE$SE-IhBwTL zCnKg33>Lk_tsV;Q?3Nd07IG)>PA43Q@@bD_XViZuJnF+-SR9eSm-b^YbLCU7PG6GQ zJKkO|*b;^O^%Ehg6e-0+bze&Un{k(1?Aom@b7Sm z?b{}WJ!Zfj23oRMKPiLEh^qy6lZ(sff1?M#aP;~C;P0@AuUam$iHH$i(Zc-_8++)) zGiB*fRHaTE_*K_lAl+<$IklN{WiruTjZ?Ir>rocinb-6%~rZb)Z@l>WsZ%cVnF`u(k z3MC-R0(^u8vlUE{9TX~VYef_B+y~v-T`n!_ zJXHL4N_pJy{bQGCGEJ2vO`^5M=(MU>=QoaiN4n$ZmlEhRRC09~b|CV#QExkR{!cxv z-Ih(Yq);JB({7Iv5SqD14A&CD>{9d#mQfp_-1nX*824hiHi&jI!rbzk3^mafyBi2I zXwJzh@J~^n^Qq+Rev`}V%T)Pds`2QDUxGv4pkJOaJP+l=87o}7L-RV1V*p70%Q?kQJ!b+v(*=vXQsHF z#w&NkJNb4_Kvu6hrx0e1Q_pLru87EM%Rez`mTlk~vCAr;IKZqQ$#>gK{ZQNJ$F@r9 z17m<_yD6oKG?O@e`O;WsIhdWwE)Z7*SyABxHvKJ!x|y(wVq*Eg`D2Q%Q#&zSm8c_X zY`zJhB88q%6!2%9%}+RQMhWH=sbw#8{a(embAwu zeRHhkOtBY=U&ubKu7vS#2DPzJ+WbaUn%Eu`p1cjDEU*&qFGKE(o%RZ13w1x?o_-#{ zj3y3uOaJI8nlJ`Rt11>dUer4~gzlg1qwk_n+`w_Q&I230F}#e<84l6$Ub}ga5BLCy z$uT-aXsHnb5x(Q2(qiSxMHMrLS5E#p#t6L)COeA@Vy#t82W3I7zxNN*jGG$^^A3V~ zTr=^dD(liTi!S&uFU(~grGKHPJ3#7Wm91!jh!*X-6-6}Q?cA`2ld(6Q{A_nw+16`p zBq**{Pk_!LEyI8)FurdbBN-IqyhFR52Y9f)rE-#p}V=M?A%c$M#J3kjR;+GEA#vBv7ig$61YKjN2FsuXxl6YE;g-oLfc3d7ixb z(~0wjUXzRlz7@}MhgnS+FRey=b`F|l<3w;qodOa{(-yU^k{7Owq0>0sq7~my3O9?# z;MqUiGm}Q%_f`tMUWXlWG>uF0_?>-d_6ru!DNoiMD&X~fg!7a0H9Z%=3kwQs-Q1{g zxIsDbEXG9ly4o5M4LODy_vvf8k1Dey9QW4T^up55&l zkpg05cG;FhOyo7R#xy!3{&xPzXTpzSZpRkB&$uR(?99to5LDHD?ak+~^R*OGg2wFv zUjX`1J0_eHXV^8UJXLSFxSNPlDSRKCJ@A^Jrtp08!98KQXBT1L%avWTv-8l?va+Jq zHqd)|JwByFcmK%afGyJ=rb@ELtB7tehaH#)iRz5v6?C;mDxZj)`upc|y>)S)VveGb zj?RG?$-D;ms{Mi9UTajprUthRTIksl=OfjZ8iD{zhh{YOLQV$~PKQE~HHn!A-`+on zR*Vi4Qpbff5whUZ9dr@0UMy^6)_zH48Tiz-RM+T2vk9}rr*_Wy-CfoxGjcedo-{zF zI=^!G@*UT_@;VTiU+I>Ht{NTo^Dj&T`?{QK>&9s}PXt=TxQbmKUDW->h6Eh)@|}uY zfxqy8(^9cw%+k#m9NNz`x+UB*DrrBVuFm%-eo5kp!74OI^qtOcOgmD z8KADRYxrHr>DeRsuJG&}MumPmOimcRYf)HcNZ@n+9Z>VwI;H|{kuzD-~H{S8;hQ?c2 zjtv0GZ}PmMOMCz*ca!f8t!=)0eIWsWjJ71-P|23{TZz8yg7Kf_uYY%rfKs-#-mI6~ zWDtv=K%3NLAnu*Falh$e$sp$0L0w!lpwgZ9QTM+QD_m~`Hwd`>zEy>8mki>B7c|Ao z1M1j$C*t3TL;k-)g!W*N|5no|$$~>*LSlkyga9DKJp_ntp?@6S+sqXOyh(8W{uKnw zfCBb--`KW2G6-skzsABWLHJMO%+dg)|G1h+znMw@zb^du$snNhKu5aNu>aTVhA9Aa zypI5ZZuUl#f&d5a@?81@G6)V!kn(}ZTjkqZ1;HA0Zp8~i*?9jK@7DzF5Cwb{M0EJJ zdFQYCg$>j{ouh%B3M1Qs3=ZGV(U(Iq2#NQ~M^NV>2IYUw?*FKE|8LZ9$ASPj2hfxc z)|-fz^uOHyRf8gcfie7#JF3$^?wBCp5zhlK2f^T{`>T=fi_P#-dNmI zGKjp)zxq`<#rm&d{*P?xe});I^_TmbiV9SEit=9}|1ST-{Qv(9yx`vu!D0;he=gX+ z0@?prp8cP``iuSvME>_G8=t*R-p;@1^t1OXT=hnT^!!D1c2WH6hj~s0Vcqu+jSSK~ ze?K{$!~Z?8YDWJup9~X#I?msx!{h`2w0@2N(KYpMNVp(=<47*ZAV}x_uET;%E(l>n J*WbtZ{{Z#P!zlm& delta 13442 zcmY*=Wk4Lu)-CStgS)!~5AMM=xVr|o3>Mr6cNpB=LvVsyAXspBcgQ1o=R5aaest|x zYp|Ud;3g1aLn46!*8mAJI&Z-nf(`=#0paw?iVYg# zKUs^o|DOcGK$5&gPV0aMK}b!cw=e}1HdMgiC8Pg8*>1^32Z5FfsER!G3mZ%qKjJOpfesiQ2!1wa9roW6I&DK_t$shg|m=c2cE{QdM|NtSH0rXoXzvmNP+5U2LV{^QbB?sv0VKm95!eQeL4~+?=ho^^MZI zi4QY0fsKBbqrOh39Z!#mM!z2}i6F-BHKbV_Q&qzRsaF`l1Vjpm1sC-ZseEjRhHlco zfXoyCv0NC5K}!1s)zB(Gd8sKQIBYyB)bFK(2G2GM&K4S`>_HR&4tr1?iRab0FsEbp z*Jv*zm^-fRK+ctLcyDjn-afw<1S1jM(4q5ykfHQzL_}qIFL}{AIQ>4(4ufTO5LOPw z_jW{#M|)nyUycekv0yq3ALu*Gjx4MO>bHe*!#3>nE^vCCDgcN>sA^k$Zux742g7MRGS5YWh9J!2T zS<0JF@`%w;58G&U(_V6*RvcGc?)SP#I!b=^l;;8|2L56hb1X6;bd2imS_1e~0c%T; z1T8HGf8HR3ELFmM^n?Su6+Q7D+$t^=tIK-pWi`W;i!lHwI+jG7m{1RRjBU0~dzp zhN*kX9bAON4=>l-DWvYo*J$Q4Xp~|yYTaabShU@ns@lubZE3xU%6MYv&e|3AuK8?k zu?#J5JQ%%TJ7Bb$Gs;&*)*UAk%Oo-5q=+2(Jm zIuppiu)ZJ9p`Q{Ox6P5{rbDkZk#-Qv`%KHjq9XiNOUl8kb7aZj*E~>vv^dbHH4oOd zczWr1LJT!^o_(O*2>j}6lOtE3Z)Pht?L5pyzPpntJ|r!%j z5uggS6oZWkpVt^698p3fEKA&|+deWq)ldqZGKG?a|~=1V2xdW$8-mayFlC zJWmagu;BBJC#|ZHrUXfE&`4P20AGgWC5=H0HjYm~^E~OwgAnMps?;#CY=ahb7%?H$ ziejQ`%0Proz9+myGwpEQf^)-=KkUK?uyDVM9dcP_xwRPl?asXN_w$2*H zua=Dr(GFqiFLl870&u+1P>>n@QI(3gk(rj0%e8Ar$G7fdFyGel0{sZrPuEX12l`k< z5>lA+*xaiLY{Vo_72dq>E!s&D_ z0I)&YzOCXkxi;^DvcHbfU{x!;>3?+f!px_0&rPIW~iPmIG@n7rmiC;XiLC?f3vTJUz`Gg=p9 zK8)mv-V6dl|9;(R_$VaJ&lBtE0aw!=g-iJ(;|-J>nsF(42in0{Gp)Wy}WNr3llis^vYk0y2t{zC9G7SQW8GEvz>ZPi09E9wH*yE=+9`RdARy$??) z&b{^h_aIn=A*FNBQ7ATjvh&tjsQ~1FV3r;lW1~f8kh24Aagu#Jxb89ZAs>t(Qw(FD zS|S=1m#oMS;Dwi>0@KkG0*-OHaJb4?~;#3j^WrKgCx}3YozM}uF#0{&QFMled>Mo$+hUe%lY}nvK|5GwA1fTy@ z(^KJxKj6OT*`H=XLgP=vBF+Dn0wO;EGz7>+V7(zo`X~r*4Zb>n+<&CFW^ zx;O-Yo^0{nqPJTC5S<;>8>L{^1C9Ql@|#RETigaBa*_pJOL-@W8p+w%^}Gv*)l3j& zWma|3USri z5Z(cKy3rMvzZlR?nR7E6wO%( zDf&3(AqN7_lQ~96t?KD<`i5K_pH$aIxYeiWm}ICd!1&&$NJHxywzKXt0v0W~ZuFwG z5rq7KRa$-&A|tYU(+b&T6VxMx2Qmg$O$VM!XY^ciTE+)P^vMMLl^U-ySP1P83$*2u zNcQ@)+ok4pN7x{9Z?XBZPr*Vr7wr91_FvBH=xc%RZ4TH$W+0R#VWB0Ua`8O;-2Pnqo5QG!{#(=RmvtM({fuA>4ai&IW$2`P<|D!v-qs^RSsZ z2+y{qc6(Io-Ywwf<$c?(7ay7Q&wZ)JAdk<#iTYCy`PaXy(4aeKd-6d}u}-UT9jad< zPB+QbuZWqQGTG)@?W;;TDUqxD9Q+ao``pz(B`&cPTFR3|P6fz8&WRjU<4 zKLyJI>Cm{uI!saN=y6~Pp0Yiw`YLo6*z$^aOS8b)G@I&C3g&BsS$8cSG8QK(iy>kZ`195!*f-ndgPIM}p9?J=GYwFDqRYmdSymmgW9=>uiSN z{#DAsx#ke6UQ;6!o#~HR_BN1VnmUn=c$;LY0ajlu+#0J~E8a8UlvxiJ7^)K-FrJE% z<2gebNA1Z==jc$B(7~TXXM6&Q)3pToSPkWWSOl$HC)oA zgNe5(5xkR+BQco*Qiy6ns0vv|LP>(bx@_3vrzwIU;zwexl)cvpL>(yu=LHEOokp5L zRA9~H_ysBBuJrkjur_&)92IMj*o{ClU=^%$`6*Q~>ISJTt7*aljn)-ljW+BK3w>s| zLN#{_x{$hhj7jvX2)Uy)P$0MUVAnPRgU&7jijQ%_?AODC$j+(yrkEJnuiw`IZ7!R2 zPB4GAo_x+e`MWBlrj}-+i-p zjlo(;u36|+c@du3o(ChHTb!CNG1uvA!k!ACwEt{gFz)!#yl79^=yNgIS(ucgbSZVj zR+{Nqx!hUAVk>-}*j$=WTI$Wgh61lQum5C;c&WKWY;gwydc@?bv+*)FqXm13fAnj~ z7*E%gV-~u|mTx|mAw-ZO`Bi*+jS3ZWr4V0~ zh0jG$(j(1RVT&D>u$wVNqIc}P&MlcPYg z_5|^fraxyhG$cMGT+&0SEe)_*oGW>KQZ~0~Rq(Ly?T1~r;_P(>cUwlKd0k}|K>BjD zPqf(ox&pVUNt_0FAu<5Ry?hfTydm-bPTF3CYZH!1pu(4}QAR&!8!uXdc*_CBC>{%1 zA#ZnKhO=T2`m_g!lt@+#fsRc8DFky1Glal5Y`)UPr+ffyzIo=U{^j>S8)Iva%|F%A zGycyWb;bAUPc@wa68+gwA19vu!9Z~EZ_QRl-&-LDp`8Ih-Pu$4|EZ)baFvDzZ+qHA zEC>in&_*!{DEABjn62&YhoepMyX%-^)Evr&KA*^%h@n}5{G)gq78)|*fHeX)qcQ9U*FEo?pAZ2&Lq&Gb-n;6#E_Xu)r30J;4{Oxf#|W(TISTm37EaLAz)5( zb1#?ZZ;q%NG(z8!JPil?M!oqa`W!eDy}m>{b|!``@2#VCMt(D7+2Uyh$(<&;@EQ{J z9;IF1P;>@bd{rIHJhxo+R-ifU(Mvyf==AfYG4+z6+4Q1Ar=nOHUA`Ok!e3Kj@w~@yTV|fh zG~45!>b!@cwCpXeD#8WQ?o1;`s8Gotuz$`fbvPoAP1e|d71`QPX&ZV+oBm-u;`HE@ zym&N?*)l!sMsiRqUCH=ki3ME&qFxMUJEEzrkRkAmSMOkwUCrLg(Ig%_Sr!ztKfZ&I&V|;hkBz1&x)60kft|N;0kXv~YbhB+EPM4N&!QS#}gP3tLBgQpm6pCr<>GQPu|KzFkk@ zOl|mn?>(D2)rZDbhsv1rnmK?{HP{lsAt^U^B+7vBxyOSavbz-KuGLmVO-nU=o z6S)#sswKHb>egmHw;{EM^SRV1M`pAk%gw4o7vPVDDKws)dfEG=5Opk4ayvRjWd%MK zXYcoEj?$jD=(Zg5!X+}wY2~0gxnC&q#zc-9wV0VW_PZP2tztcR_L@_n9AKCBu2fRHnbjeyv<*yJx~og`}k@A0HvO@R|K|$hBMLQ=WrVx>{$Ar3jVpsHmuC z$t3qeB>3$4EYSl>!zj&+H1r&FyDogkkYpysdb~}}mQ$u9=gVLTQ=Ns$4fWH&Gy=E_ z%CR%}(Hu1zm@)A~It;A3Re$W4q#uP;pyBCK6ta|7RTit)0mWh==&(r2UnTNDxk6om zmC>MJQS((G-uhP&ZPN^6Ry(Rrvz$XAhg$K8((*`87J)?Ujsv1THp9U~zMz*LJ2W|s(*ZTJ+2yv_eH*%dgVNuT(K!EpdvA^glL-!ujzY3Y z`KD{RAk{+dBc8b1NkgVVuh7c{#ta>ikwf9R&>BXBG@;6@!IJ8s!{^!TOSnoiXhJKq z?$^tc4t>w-N4X8((semr5<}q8VoD}!Pl|ZIk^JZ=leGyf(d(I2BU2>tl34u@7+jql z4N!&y&O_{Zbr!2bT8oPEH#c3eTM8Y6ab=2t-SM_`QpwW~PL!U-RtbW$9TA_Y9`}KQ zIm#;}*G*)&@z!0tS3P?A^WhYQLr zSy4ZZ5rI9~P9E!9?O~2mtyH;!ESE4k4@kzyhIRzCqRn~`#JT5k1Y*8$8zo4k?H~CF z=kwf&U*-m^wM5Lnx-bI|b%lcR0g5_8HsTc`$CD9QTdkZjx~{mG+?Fmpm=>yMB=5rp z!d|Ru`@?G2Kpu)ttD7#&4(`giOjCpi@DuC0ftdE2HAgVQY!X#HSTvYwSZIlvIXwJQ z8|!>2H#uIGlyv;@QWAKhAIV;3HzHTWzLYdyz@Rn3$xF(}6y`f2O2*-W=5m1`Ts3JXDuiYr z6d`uOh7w_AtN~-(cK;qFotu@Cr2}!C4)Mmfbmo~F$bUPd9bZU7p8bTd6>_dmBH53< z4^|H}aUq*qgxnNnJ?$CS$bK(GbLfnWmY8&GM)SB4&z#XOi3IpYi84+{|@ngymx$~Rj(n;X6$p3B%0|6q}h`vw| z5P-LTue1EUBRM<61|}yNC}WG^gs$1N7_|QquUfm;ERxkj(nHF?7$A@fr^X(L0Yd+JlyIbivAQ_WnVN+;*y|^d-o0gj@Sj0@Ll9H0=1@hE$Hta zR2PzZH0j!kKBea;ePh?Jrz9Ko7nOq28iGI}i($3?7&Jc!m;GLB*io;%#<2JUVUyNS z!x!dd5#uN<(@nza%(Q+QY+5y16l%qlK@t)s6jyvV^GzU}5{h^k#n=pC00#k<0GqHun4N7jH*p5NKxwY-`-poyrq98zAIn(Pqelhp@wBZS z;VPUpIZzh2>BSRb$Z?b~p?EPDjb#@KnB}){l5^=Naz&X^lrUaq`pipVbPx&kM1xpN z6F(xQqnZQL23bVMsk6$`?ca%u_*|N#<8zPrmThWVf6KSa&6A2d5O?dgv*@;Cgjp*B zq9km)rsQ-BmlK{>#^X~h*KOtJG(cw&oGPG2kQwhrr;VYA)J|^_Tgrrk@v%jYPrQtt zNfNI58EA5j9B%W{vgy!n`D;ueZJM60hba*peuxnK?;^EQuvlBbfq($AfL4p?fFBY4 zH0I_+=o&hQ&ljK|L&sGS&1sHDVe%tu)bbFl9j zT><}db*{&yjtx=~fNtE&hISi_2$bbgHKcne3!$?U8jyO9f`8uLE93M`HT*Vz6ZRT1~`1F?D!-$WNc;<&((Ib08Ag&yg|t zgjctZts}}?Z4*NkMIsVgJ|ZmJJcPXWHXI8k&Q;t;h5YLKm8n%R?^nsGhnP=8*y={8CBq{b z{Z1z2l0k`Rey6&pI09&?tw5cO;>4>RN@eM;5S9L+n!_|Sv1%ql{6v*EAj?yZ53f0e zGuz;q!pFarb_lP-92?X@yK2iBQ;9w_7OK&>_`#l?oq;sGg&;vunv(hKK&)jBGjxwu z@Kdut>cI;O;%x00?ndE2=bbq|pIxuF6kh^vxsjCt#~RjYlIH>zABUiYp4!%AA4{6OoRsk@aiB5-scca{ zgAc*xCz9H^EL)%*w$84D!Nm3-fZNkzve)G0*kYJ`?d zIpjut2dLm)=AZ34RwGb!v*GfMJf3||p%&~r!JRCSvmq2}EZT|TU?LW<#WEpSedEKH z9rtUHv@iE7LQ_c-f8H1-Znqi5p#pMe90Z!{VAf*dI)stltyRxJvofFk(yti0 zx|9WUkxLZkVJ0Wam1udF5}C2ce5Qug{)O+Ie*AF8Rv1#EQjKet91DYB#y(b#(fqxD z=vSK6#ca?)n&qt?EibeHleq-0r6&V>JLM+Sw|sprhxy8nA5LOrEOzx@et+=rHfShJ zXBp4>%&;4QGXd`*jU>amD8M9P-G!n1X*1*#@TeB03U;X2eat>Nze&YfGYg@L?*?Yu(P`DMIR42wH#Yo+>sAW0hA$p6f!s92m}jI%+zHV@~WpCT;m8=%^DqO zW|QW@yFWsIEu5wBkt~^=L1}fQ&MWCTUWZ%^n+FxEYE&eo_{k&hvMGy1Ca`awgh#=pynJdeU{rREf6`K z((@f%xEN&nCFyJP#M;K$;j{2-z>T|#ZvC_xM`?+X1vDf{lyKwxeBPPRdLkF-l{ z&(J5~U}ZMBvu8z(iVsZBPqjeE3+mAUt{@d`Hbpx#TlcruF$Zq(v+_Gz*1q%Cg0J$b zMWqv)I_|9_JwTh7s6NVxU@S6fZ5rP*(b;?P6W#M|Q{E%HF!*3aq8ZM8My=ByJRL_H zIB|FJLP+-G0rGRa%}pH--cJA`MaG=)el2nma18yxjp$ePRo^pqHhNFtN}b#Yu-G|j zWV6RBb9UZ16LPOPM<0hNk_U1n)~-O>v$k)+5iV1a3$HQSx&#Nahs319%u@A(zX5fD zSVdp$R9X)pb`6ayC_94ho$fEO{b`m?`*5v73IQ%*^kBH6Af!-`iXg>&@Ti`J!j!CN zqZ=tqJ5I;-t+5^@=@Nk)boU~N=edVvmmizr$_7cy*AqEy`naa4JCM)h0g`Batz z0j|PMD9#>RO=h(8sRzt1$QxCWuK5yEEk0YzBLc*B8CA_|tF=SP-u)Du$}6+$f{C~* zYylAlW#yhgHyzX7HR9N!Egb}*7{*O&+yw|Xt1d<%7LsW`dD@@74_EH5Kn7D(jhyKR ztLMrI5&Z5r*J_k>D73H^;gT!1`&99L?U`qv0JX&t)xEWFsTEV@i260l6x2!x_s>cx ziZADsDqDN*uO#2{u1torx59SQ8WH8~Hp^ryB8iiR!+Snt6CWS5B?UWNNYc|k>`BD{ zYp%%pIdp~ixk4jVw^H3+fmGirFLK>JfB9W`WprPYwrcV-Rp8qQaQ1=cGYL(V8K7uZ z?>ThBDUxb!^P3g3P@%`n16g9n@3O0J_ZHc|Sx$3=765keIKkMTW?fE`?l(j>Q(D}8 zQeP{s1fLD^F80G9W}~+%!&E+771NZeI!*9j#63ozC6Cq{T4Y>PkO61fyoOnrTT}-v zSoG#e@#Eu}MUm9d2MyH=&hpcJ%DzrGwM2r8sOqYyKfE#eabL&ktLQo`!@2;cd(xWh zT21{``ca`~=^|5c0}5Ee+#QZCT2T+zi`WXMPq1hKjYA9vn+#WnXU(^~L0GU&@Ke$; zuTt~8$=y3*MW{$X4^_dI9c3Z@s!?)NF4{|P7ITA@HNmcI8oHsVU7EylK>KEm78ma) zzv=g=vvQ9L2@^f9$dhf5kDAN))XgGt=_S~1uW`j{fa{a>hB?roaklqoO^aeS$|15X zLS2;v%Q5}uW{+H!rYDB1Wv=w3f7W!H_)^wjm%UP9D}{n?@+r64IwvOlE1ZG(sx8 zxP0lDg_&q3k5(_$>3AH4sMfaF!*3Qd9t0-HH}GiCxS9Ovett?pgkD5~Jr9ZE_b~^# z@@px>rOE}(h6WKV{1nvaZ8{*FHdl4yLh$n<_Wajh@-}ws^C?X0{-QP*|;bR&Co=D@zEYi&qyMo2H@C8da2rC z<@+vZn_uzIsT&C$g9%}5R|&KL7ArBuumo$#kTltOM#2?LO==v=9-(-pJiebc&}?(k z9t6WY7a?z(Lk{pcnht7Ix`EcCdu?XDw`B0#G12gftNye$S~LKY0hNgAlLarMO=Ehx z`1I;djAMh-67)+g@uy&|bh}bWe0Q0?Z&vUVv>>J8Yz=WqQlzPp1Fn8I%+*V4eBAE? zusO)vcoH|M(>vwgf~qA&;OuG&DyBc9Ipspa@;(A>ioPZpEy=tV2bq8mrVVHArq5^U z{R@**&ZwMh2Hq3aX}jDDEk$fg2@(l1*)Wd>qPW^Hj)T>0-Wvp`t7X#q2X@I8=19_N zDN}0Z_+Yi^6TDyldcxyD$l_tj=Vm5u7>$nZ z^<)jSSGVaVI!{W~yjC+okMRu{T;rFWkeYJgpw||gr{RuJ0;^l6C%Pt&voP(cJ#rer zN0`58?^on)hG`iEC+jch$#)#US-(T{S(W8AnPcEicN_$zI`%m7daOnY-xs&sY;}FC)Yyrd6u9s{NWom+mGt2+hV(rC8#Pz zcYNK#5?|CF-@ia`@=hIGOQ^U6KdAxRLAODx1`Awqja1}EbJiu&TRiP=4n-ZXe~43c z857Upg}*5HqFOb64SYa2*QwA4-&&6!-w3^fVC^IMs^&E{tKt%1$$rk>oVValmdxEY zLUgBo@R_j#n``I0Hm_N^>3Px-#P}GMsK!)hE+bh_!N*{{;r?U6WR%UQgCtYjOyUR-fm)Fz1#Q`O$cqA*CQrT4pC-M84+$g04 z$Z<%t#eKQ1(`*GDHvBjAim5>_l;j6PjDe`&FV`43)CWJzn`-jIG)QszRz7u0{hPy{df+b|8lfD)Sq!8;aufj=wu-HojGV53sOYStR| zGb+>GH29hTC&2uply=Fl<31%9N5lD|+wU&~m|sS}yTg)=aW`r=gpT{*9mUnB(&AywS|~%d z(l3)6kI6A#-P*IiYE$@9UHv#IPWEqXFN>S7PP}_G)SXp8r7*v0s=X0dm|B*wdiTXI z%-Tw)^LTL`-G^?m#~g;q8=p<}t0%rr&}x*;zg#GJ zqU~g9JQLJctDdT0VDZ!>q!Jll75s@26bpqw@MqXZQkB~or|urqc7dE6bz>lXRA86} zI~Y#-(bq8WD@NIc=f~QgiIbi%e*OTmtrBVQ4&m3lXp zi(BY@`7@P!13s^Uy1twfSI%{+sfIyBlBT*yeZ*xxTff{{`@IEPz)uB7e%>0oxT9DF z{qRQoI=@wt;QEmY<7?hp-x%rXBZOvN6``+)be&QS=UoA-6L5NnTCWL)q29gC% zd%M(1&m*zE0vYWt86O)s+tNJw+Ez=TVqSaIS78%`9xBw@;k+=;J~Owq#|dm-qw}sa zizvtY1~d<2nvST4eRX z7Oz!)7EL6Pf&bdPq*f2rwwoWet_^TNJx{~JT5%O_>T33*I#laoFmX?+L~9sEtGS?Htoj->OE7d51ez z?s43UVib0q_tavOp?pr3+FrX6LM<_U{S62Ck2kQp;*Z-evTy5;o6m7T=FNEkGQ0pZ zOpe{Y`4d2$Z{gas%pZ>e-5li~=l&mqpV1n{TNJn^_D_FdjrgAkY5mRm_cupko#`!d zTGxI%CLjYq>+8IK832f5L-?PZkPW)GsB**b?TEZ-{dRQQ{1YqS0zk)`f3hm@03eAi zfw$;_7ywG$5_*ePNC2RdE#6J#qRuhOJS80 zkhqHkRlo__pr-<{?fw~q>Mj*j9uH_^mjRT!`)3dvd;sLP*9HFm6b2T7)^|nUP>MY& zs3yU`X-<3iZ@{TA0F<|f1XVBm7i4{p06&7VUY%a#`ck*E~Nf~Py5twAo&3m6qDQ=Knco|gZo$P_6ASrfhhFp|AoH4 zLCa=u5G6>({6AM9XaxWX9wI^gwgkx>iocx^-3Ea2pFz!9gK7@{Ox?vH6;ZM6|9@@6 z>XV7Ny#<@Qn~go&|Bd8rsxbinr-Q(NI1!t-1!W!)ft-&1yndlz2LQz#Awi;pGLG12 z|MR{7b$UX+Jq?0}fMEMq4gpaZIPD0^@56nw4B~(koe)6e$8i58`yXrJ|Hyti|05&( zcjQ6GR8V3bf8o^=1W=X-!oQS)=iA~rMuMXD{FerL(*8@Y_yRzBCrD6DzW>q~et>`J zDIfs!^^GnA{zK!ujr2GX075xMf*MHtS3?fM`&Y990)Xt^=qAu#I{K9MP1A5n1=X4H z7eLSa&xNC%Q9%V{|Al4GaQ|!g|KsZUpW)l){7wIwgUTg9ZNmCL9O;d!f1Zy^)lttY-EmuCD*Ls0=TtpgKnWo-FO+&mW7kxx<=g>fwml$x0zy4h1{{yI$%}4+M diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d3f0..309b4e18db 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68d65..aeb74cbb43 100755 --- a/gradlew +++ b/gradlew @@ -85,9 +85,6 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit -# 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 @@ -144,7 +141,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +149,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,6 +194,10 @@ if "$cygwin" || "$msys" ; then done fi + +# 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"' + # 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 diff --git a/settings.gradle b/settings.gradle index ecc4e71820..c339a6321c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,18 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven { + name = 'MinecraftForge' + url = 'https://maven.minecraftforge.net/' + } + maven { url = 'https://repo.spongepowered.org/repository/maven-public' } + maven { url = 'https://maven.parchmentmc.org' } + } +} + +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0' +} + rootProject.name = 'Create' From 5451a9afc780779f3bf8de6a75e25de301fe5649 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Mon, 1 Jan 2024 17:05:13 -0800 Subject: [PATCH 02/35] Less than 400 errors - Lots of work on updating instances - Pulled in some old utility classes from flywheel that were removed --- gradle.properties | 4 +- .../simibubi/create/AllBlockEntityTypes.java | 12 +- .../com/simibubi/create/AllPartialModels.java | 8 +- .../com/simibubi/create/CreateClient.java | 3 +- .../compat/jei/GhostIngredientHandler.java | 7 +- .../animations/AnimatedBlazeBurner.java | 2 +- .../category/animations/AnimatedCrafter.java | 4 +- .../category/animations/AnimatedKinetics.java | 4 +- .../ControlledContraptionEntity.java | 10 +- .../DirectionalExtenderScrollOptionSlot.java | 4 +- .../OrientedContraptionEntity.java | 12 +- .../ContraptionControlsBlockEntity.java | 4 +- .../ContraptionControlsMovement.java | 2 +- .../ContraptionControlsRenderer.java | 8 +- .../{ActorData.java => ActorInstance.java} | 38 +- .../actors/flwdata/ActorType.java | 55 ++- .../actors/flwdata/UnsafeActorWriter.java | 47 +- .../harvester/HarvesterActorInstance.java | 25 +- .../harvester/HarvesterMovementBehaviour.java | 6 +- .../actors/harvester/HarvesterRenderer.java | 2 +- .../contraptions/actors/psi/PIInstance.java | 30 +- .../actors/psi/PSIActorInstance.java | 6 +- .../contraptions/actors/psi/PSIInstance.java | 24 +- .../psi/PortableStorageInterfaceMovement.java | 6 +- .../psi/PortableStorageInterfaceRenderer.java | 12 +- .../actors/roller/RollerActorInstance.java | 25 +- .../actors/roller/RollerBlockEntity.java | 6 +- .../roller/RollerMovementBehaviour.java | 10 +- .../actors/roller/RollerRenderer.java | 2 +- .../ControlsMovementBehaviour.java | 4 +- .../trainControls/ControlsRenderer.java | 14 +- .../contraptions/bearing/AnchoredLighter.java | 6 +- .../contraptions/bearing/BearingInstance.java | 29 +- .../contraptions/bearing/BearingRenderer.java | 6 +- .../bearing/StabilizedBearingInstance.java | 24 +- .../StabilizedBearingMovementBehaviour.java | 10 +- .../behaviour/MovementBehaviour.java | 14 +- .../chassis/StickerBlockEntity.java | 6 +- .../contraptions/chassis/StickerInstance.java | 27 +- .../contraptions/chassis/StickerRenderer.java | 8 +- .../elevator/ElevatorPulleyInstance.java | 13 +- .../elevator/ElevatorPulleyRenderer.java | 14 +- .../gantry/GantryCarriageInstance.java | 32 +- .../gantry/GantryCarriageRenderer.java | 8 +- .../minecart/CouplingRenderer.java | 6 +- .../contraptions/piston/PistonLighter.java | 6 +- .../pulley/AbstractPulleyInstance.java | 89 ++-- .../pulley/AbstractPulleyRenderer.java | 6 +- .../pulley/HosePulleyInstance.java | 36 +- .../contraptions/pulley/PulleyLighter.java | 8 +- .../contraptions/pulley/PulleyRenderer.java | 6 +- .../pulley/RopePulleyInstance.java | 31 +- .../contraptions/render/ActorInstance.java | 10 +- .../contraptions/render/ContraptionGroup.java | 26 - .../render/ContraptionInstanceManager.java | 84 ---- .../render/ContraptionLighter.java | 34 +- .../render/ContraptionProgram.java | 19 +- .../render/ContraptionRenderDispatcher.java | 56 +-- .../render/ContraptionRenderInfo.java | 4 +- .../render/ContraptionRenderingWorld.java | 10 +- .../contraptions/render/EmptyLighter.java | 6 +- .../contraptions/render/FlwContraption.java | 221 ++++----- .../render/FlwContraptionManager.java | 99 ++-- .../render/NonStationaryLighter.java | 12 +- .../render/SBBContraptionManager.java | 6 +- .../decoration/placard/PlacardRenderer.java | 6 +- .../slidingDoor/SlidingDoorRenderer.java | 2 +- .../steamWhistle/WhistleRenderer.java | 6 +- .../equipment/armor/BacktankArmorLayer.java | 6 +- .../equipment/armor/BacktankInstance.java | 13 +- .../equipment/armor/BacktankRenderer.java | 10 +- .../bell/AbstractBellBlockEntity.java | 6 +- .../bell/CustomRotationParticle.java | 2 +- .../bell/HauntedBellBlockEntity.java | 4 +- .../bell/PeculiarBellBlockEntity.java | 2 +- .../blueprint/BlueprintRenderer.java | 8 +- .../extendoGrip/ExtendoGripItemRenderer.java | 6 +- .../extendoGrip/ExtendoGripRenderHandler.java | 6 +- .../PotatoCannonItemRenderer.java | 6 +- .../PotatoCannonRenderHandler.java | 6 +- .../PotatoProjectileRenderMode.java | 12 +- .../SymmetryWandItemRenderer.java | 2 +- .../symmetryWand/mirror/CrossPlaneMirror.java | 10 +- .../symmetryWand/mirror/EmptyMirror.java | 2 +- .../symmetryWand/mirror/PlaneMirror.java | 10 +- .../symmetryWand/mirror/SymmetryMirror.java | 2 +- .../mirror/TriplePlaneMirror.java | 2 +- .../equipment/toolbox/RadialToolboxMenu.java | 4 +- .../equipment/toolbox/ToolBoxInstance.java | 53 +- .../equipment/toolbox/ToolboxRenderer.java | 8 +- .../equipment/toolbox/ToolboxScreen.java | 6 +- .../equipment/wrench/WrenchItemRenderer.java | 2 +- .../WorldshaperItemRenderer.java | 4 +- .../fluids/drain/ItemDrainRenderer.java | 4 +- .../fluids/hosePulley/HosePulleyRenderer.java | 2 +- .../pipes/SmartFluidPipeBlockEntity.java | 4 +- .../pipes/valve/FluidValveInstance.java | 33 +- .../pipes/valve/FluidValveRenderer.java | 8 +- .../content/fluids/pump/PumpCogInstance.java | 24 +- .../content/fluids/spout/SpoutRenderer.java | 2 +- .../fluids/tank/FluidTankRenderer.java | 8 +- .../kinetics/base/BackHalfShaftInstance.java | 4 +- .../kinetics/base/CutoutRotatingInstance.java | 13 +- .../kinetics/base/HalfShaftInstance.java | 17 +- .../base/HorizontalHalfShaftInstance.java | 4 +- .../kinetics/base/KineticBlockEntity.java | 10 +- .../base/KineticBlockEntityInstance.java | 35 +- .../base/KineticBlockEntityRenderer.java | 4 +- .../content/kinetics/base/ShaftInstance.java | 4 +- .../kinetics/base/SingleRotatingInstance.java | 31 +- .../{BeltData.java => BeltInstance.java} | 18 +- .../kinetics/base/flwdata/BeltType.java | 84 ++-- .../kinetics/base/flwdata/BeltWriter.java | 23 + .../base/flwdata/BeltWriterUnsafe.java | 29 -- ...{KineticData.java => KineticInstance.java} | 28 +- .../kinetics/base/flwdata/KineticWriter.java | 17 + .../base/flwdata/KineticWriterUnsafe.java | 24 - ...otatingData.java => RotatingInstance.java} | 16 +- .../kinetics/base/flwdata/RotatingType.java | 72 ++- .../kinetics/base/flwdata/RotatingWriter.java | 15 + .../base/flwdata/RotatingWriterUnsafe.java | 21 - .../kinetics/belt/BeltBlockEntity.java | 28 +- .../content/kinetics/belt/BeltRenderer.java | 22 +- .../{BeltInstance.java => BeltVisual.java} | 58 +-- .../kinetics/clock/CuckooClockRenderer.java | 2 +- .../crafter/MechanicalCrafterRenderer.java | 10 +- .../crafter/ShaftlessCogwheelInstance.java | 26 +- .../kinetics/crank/HandCrankBlockEntity.java | 9 +- .../kinetics/crank/HandCrankInstance.java | 26 +- .../kinetics/crank/HandCrankRenderer.java | 4 +- .../crank/ValveHandleBlockEntity.java | 11 +- .../deployer/DeployerActorInstance.java | 59 ++- .../deployer/DeployerBlockEntity.java | 2 +- .../kinetics/deployer/DeployerFilterSlot.java | 6 +- .../kinetics/deployer/DeployerInstance.java | 41 +- .../deployer/DeployerMovementBehaviour.java | 6 +- .../kinetics/deployer/DeployerRenderer.java | 18 +- .../kinetics/drill/DrillActorInstance.java | 25 +- .../content/kinetics/drill/DrillInstance.java | 19 +- .../drill/DrillMovementBehaviour.java | 6 +- .../content/kinetics/drill/DrillRenderer.java | 6 +- .../kinetics/fan/EncasedFanRenderer.java | 4 +- .../content/kinetics/fan/FanInstance.java | 18 +- .../kinetics/flywheel/FlywheelInstance.java | 43 +- .../kinetics/flywheel/FlywheelRenderer.java | 4 +- .../content/kinetics/gauge/GaugeInstance.java | 72 +-- .../content/kinetics/gauge/GaugeRenderer.java | 6 +- .../kinetics/gearbox/GearboxInstance.java | 37 +- .../kinetics/gearbox/GearboxRenderer.java | 4 +- .../mechanicalArm/ArmBlockEntity.java | 4 +- .../kinetics/mechanicalArm/ArmInstance.java | 85 ++-- .../kinetics/mechanicalArm/ArmRenderer.java | 16 +- .../millstone/MillstoneCogInstance.java | 16 +- .../mixer/MechanicalMixerRenderer.java | 4 +- .../content/kinetics/mixer/MixerInstance.java | 48 +- .../motor/CreativeMotorBlockEntity.java | 4 +- .../press/MechanicalPressRenderer.java | 4 +- .../content/kinetics/press/PressInstance.java | 22 +- .../content/kinetics/saw/SawFilterSlot.java | 4 +- .../content/kinetics/saw/SawInstance.java | 19 +- .../content/kinetics/saw/SawRenderer.java | 12 +- .../BracketedKineticBlockEntityInstance.java | 44 +- .../BracketedKineticBlockEntityRenderer.java | 4 +- .../encased/EncasedCogInstance.java | 56 ++- .../encased/EncasedCogRenderer.java | 4 +- .../SpeedControllerRenderer.java | 2 +- .../steamEngine/SteamEngineInstance.java | 53 +- .../steamEngine/SteamEngineRenderer.java | 18 +- .../steamEngine/SteamEngineValueBox.java | 4 +- .../transmission/SplitShaftInstance.java | 14 +- .../transmission/SplitShaftRenderer.java | 4 +- .../waterwheel/WaterWheelInstance.java | 14 +- .../waterwheel/WaterWheelRenderer.java | 4 +- .../logistics/chute/ChuteRenderer.java | 6 +- .../crate/CreativeCrateBlockEntity.java | 4 +- .../logistics/depot/DepotRenderer.java | 6 +- .../logistics/depot/EjectorBlockEntity.java | 4 +- .../logistics/depot/EjectorInstance.java | 14 +- .../logistics/depot/EjectorRenderer.java | 20 +- .../content/logistics/flwdata/FlapData.java | 22 +- .../content/logistics/flwdata/FlapType.java | 62 +-- .../content/logistics/flwdata/FlapWriter.java | 28 ++ .../logistics/flwdata/UnsafeFlapWriter.java | 33 -- .../logistics/funnel/FunnelBlockEntity.java | 10 +- .../funnel/FunnelFilterSlotPositioning.java | 8 +- .../logistics/funnel/FunnelInstance.java | 18 +- .../logistics/funnel/FunnelRenderer.java | 12 +- .../tunnel/BeltTunnelBlockEntity.java | 4 +- .../logistics/tunnel/BeltTunnelInstance.java | 18 +- .../logistics/tunnel/BeltTunnelRenderer.java | 12 +- .../processing/basin/BasinRenderer.java | 8 +- .../burner/BlazeBurnerRenderer.java | 6 +- .../redstone/FilteredDetectorFilterSlot.java | 4 +- .../analogLever/AnalogLeverInstance.java | 18 +- .../analogLever/AnalogLeverRenderer.java | 2 +- .../redstone/diodes/BrassDiodeInstance.java | 12 +- .../redstone/diodes/BrassDiodeScrollSlot.java | 6 +- .../displayLink/DisplayLinkRenderer.java | 8 +- .../displayLink/DisplayLinkScreen.java | 4 +- .../link/RedstoneLinkFrequencySlot.java | 4 +- .../controller/LecternControllerRenderer.java | 4 +- .../LinkedControllerItemRenderer.java | 6 +- .../redstone/nixieTube/NixieTubeRenderer.java | 18 +- .../cannon/SchematicannonInstance.java | 18 +- .../cannon/SchematicannonRenderer.java | 2 +- .../client/SchematicTransformation.java | 8 +- .../schematics/client/tools/DeployTool.java | 4 +- .../trains/bogey/BackupBogeyRenderer.java | 3 +- .../content/trains/bogey/BogeyInstance.java | 8 +- .../content/trains/bogey/BogeyRenderer.java | 31 +- .../content/trains/bogey/BogeyStyle.java | 16 +- .../trains/bogey/StandardBogeyRenderer.java | 26 +- .../trains/display/FlapDisplayRenderer.java | 8 +- .../content/trains/entity/CarriageBogey.java | 4 +- .../CarriageContraptionEntityRenderer.java | 6 +- .../entity/CarriageContraptionInstance.java | 30 +- .../content/trains/entity/Navigation.java | 9 +- .../content/trains/graph/DiscoveredPath.java | 4 +- .../observer/TrackObserverBlockEntity.java | 6 +- .../observer/TrackObserverRenderer.java | 4 +- .../trains/schedule/ScheduleRuntime.java | 15 +- .../trains/schedule/ScheduleScreen.java | 4 +- .../trains/schedule/TrainHatArmorLayer.java | 4 +- .../content/trains/signal/SignalRenderer.java | 4 +- .../trains/station/AbstractStationScreen.java | 6 +- .../trains/station/AssemblyScreen.java | 2 +- .../trains/station/StationBlockEntity.java | 9 +- .../trains/station/StationRenderer.java | 16 +- .../content/trains/station/StationScreen.java | 4 +- .../content/trains/track/AllPortalTracks.java | 1 - .../trains/track/BezierConnection.java | 10 +- .../content/trains/track/ITrackBlock.java | 2 +- .../content/trains/track/TrackBlock.java | 16 +- .../trains/track/TrackBlockEntity.java | 4 +- .../trains/track/TrackBlockOutline.java | 6 +- .../content/trains/track/TrackInstance.java | 105 ++-- .../content/trains/track/TrackMaterial.java | 2 +- .../trains/track/TrackMaterialFactory.java | 2 +- .../content/trains/track/TrackPlacement.java | 2 +- .../content/trains/track/TrackRenderer.java | 2 +- .../trains/track/TrackTargetingBehaviour.java | 2 +- .../trains/track/TrackTargetingClient.java | 4 +- .../block/render/SpriteShiftEntry.java | 2 +- .../behaviour/ValueBoxRenderer.java | 6 +- .../behaviour/ValueBoxTransform.java | 6 +- .../ColoredOverlayBlockEntityRenderer.java | 2 +- .../data/CreateBlockEntityBuilder.java | 18 +- .../foundation/data/CreateEntityBuilder.java | 18 +- .../foundation/fluid/FluidRenderer.java | 10 +- .../gui/element/GuiGameElement.java | 5 +- .../foundation/outliner/ItemOutline.java | 4 +- .../create/foundation/outliner/Outline.java | 4 +- .../create/foundation/ponder/PonderScene.java | 8 +- .../ponder/element/AnimatedSceneElement.java | 4 +- .../ponder/element/MinecartElement.java | 4 +- .../ponder/element/ParrotElement.java | 6 +- .../ponder/element/WorldSectionElement.java | 8 +- ...ceFormats.java => AllInstanceLayouts.java} | 6 +- ...gramSpecs.java => AllInstanceShaders.java} | 2 +- ...terialSpecs.java => AllInstanceTypes.java} | 18 +- .../render/BakedModelRenderHelper.java | 2 - .../render/BlockEntityRenderHelper.java | 4 +- .../foundation/render/CachedBufferer.java | 16 +- .../render/ConditionalInstance.java | 61 +++ .../foundation/render/CreateContexts.java | 19 - .../foundation/render/ForcedDiffuseState.java | 2 +- .../foundation/render/GroupInstance.java | 84 ++++ .../render/RainbowDebugStateProvider.java | 21 - .../foundation/render/SelectInstance.java | 62 +++ .../foundation/render/StitchedSprite.java | 57 +++ .../foundation/render/SuperByteBuffer.java | 54 +- .../foundation/render/VirtualChunk.java | 239 +++++++++ .../render/VirtualChunkSection.java | 42 ++ .../foundation/render/VirtualChunkSource.java | 65 +++ .../render/VirtualEmptyBlockGetter.java | 145 ++++++ .../render/VirtualLevelEntityGetter.java | 40 ++ .../foundation/render/VirtualRenderWorld.java | 460 ++++++++++++++++++ .../foundation/utility/outliner/Outline.java | 4 +- .../debugInfo/DebugInformation.java | 4 +- .../gui/CreateMainMenuScreen.java | 6 +- 280 files changed, 3236 insertions(+), 2231 deletions(-) rename src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/{ActorData.java => ActorInstance.java} (61%) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionGroup.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionInstanceManager.java rename src/main/java/com/simibubi/create/content/kinetics/base/flwdata/{BeltData.java => BeltInstance.java} (67%) create mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriterUnsafe.java rename src/main/java/com/simibubi/create/content/kinetics/base/flwdata/{KineticData.java => KineticInstance.java} (55%) create mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriterUnsafe.java rename src/main/java/com/simibubi/create/content/kinetics/base/flwdata/{RotatingData.java => RotatingInstance.java} (52%) create mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriterUnsafe.java rename src/main/java/com/simibubi/create/content/kinetics/belt/{BeltInstance.java => BeltVisual.java} (74%) create mode 100644 src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/flwdata/UnsafeFlapWriter.java rename src/main/java/com/simibubi/create/foundation/render/{AllInstanceFormats.java => AllInstanceLayouts.java} (87%) rename src/main/java/com/simibubi/create/foundation/render/{AllProgramSpecs.java => AllInstanceShaders.java} (92%) rename src/main/java/com/simibubi/create/foundation/render/{AllMaterialSpecs.java => AllInstanceTypes.java} (68%) create mode 100644 src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/GroupInstance.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/RainbowDebugStateProvider.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/SelectInstance.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/StitchedSprite.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualChunk.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java diff --git a/gradle.properties b/gradle.properties index c52cd825a4..5e1edc80fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,8 +22,8 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 -flywheel_minecraft_version = 1.20 -flywheel_version = 1.0.0-alpha-2 +flywheel_minecraft_version = 1.20.1 +flywheel_version = 1.0.0-alpha-3 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index 8ff7849e6d..58d393a008 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -80,7 +80,7 @@ import com.simibubi.create.content.kinetics.base.ShaftInstance; import com.simibubi.create.content.kinetics.base.ShaftRenderer; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; import com.simibubi.create.content.kinetics.belt.BeltBlockEntity; -import com.simibubi.create.content.kinetics.belt.BeltInstance; +import com.simibubi.create.content.kinetics.belt.BeltVisual; import com.simibubi.create.content.kinetics.belt.BeltRenderer; import com.simibubi.create.content.kinetics.chainDrive.ChainGearshiftBlockEntity; import com.simibubi.create.content.kinetics.clock.CuckooClockBlockEntity; @@ -322,7 +322,7 @@ public class AllBlockEntityTypes { .validBlocks(AllBlocks.HAND_CRANK) .renderer(() -> HandCrankRenderer::new) .register(); - + public static final BlockEntityEntry VALVE_HANDLE = REGISTRATE .blockEntity("valve_handle", ValveHandleBlockEntity::new) .instance(() -> HandCrankInstance::new) @@ -421,7 +421,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry BELT = REGISTRATE .blockEntity("belt", BeltBlockEntity::new) - .instance(() -> BeltInstance::new, BeltBlockEntity::shouldRenderNormally) + .instance(() -> BeltVisual::new, BeltBlockEntity::shouldRenderNormally) .validBlocks(AllBlocks.BELT) .renderer(() -> BeltRenderer::new) .register(); @@ -708,7 +708,7 @@ public class AllBlockEntityTypes { .validBlocks(AllBlocks.ANALOG_LEVER) .renderer(() -> AnalogLeverRenderer::new) .register(); - + public static final BlockEntityEntry PLACARD = REGISTRATE .blockEntity("placard", PlacardBlockEntity::new) .validBlocks(AllBlocks.PLACARD) @@ -835,7 +835,7 @@ public class AllBlockEntityTypes { .validBlocksDeferred(TrackMaterial::allBlocks) .renderer(() -> TrackRenderer::new) .register(); - + public static final BlockEntityEntry FAKE_TRACK = REGISTRATE .blockEntity("fake_track", FakeTrackBlockEntity::new) .validBlocks(AllBlocks.FAKE_TRACK) @@ -883,7 +883,7 @@ public class AllBlockEntityTypes { .renderer(() -> TrackObserverRenderer::new) .validBlocks(AllBlocks.TRACK_OBSERVER) .register(); - + public static final BlockEntityEntry CLIPBOARD = REGISTRATE .blockEntity("clipboard", ClipboardBlockEntity::new) .validBlocks(AllBlocks.CLIPBOARD) diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index 8fde351369..e3c774b36a 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.content.fluids.FluidTransportBehaviour; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; @@ -58,7 +58,7 @@ public class AllPartialModels { ANALOG_LEVER_INDICATOR = block("analog_lever/indicator"), FUNNEL_FLAP = block("funnel/flap"), BELT_FUNNEL_FLAP = block("belt_funnel/flap"), BELT_TUNNEL_FLAP = block("belt_tunnel/flap"), FLEXPEATER_INDICATOR = block("diodes/indicator"), - + ROLLER_WHEEL = block("mechanical_roller/wheel"), ROLLER_FRAME = block("mechanical_roller/frame"), @@ -67,7 +67,7 @@ public class AllPartialModels { CUCKOO_PIG = block("cuckoo_clock/pig"), CUCKOO_CREEPER = block("cuckoo_clock/creeper"), GANTRY_COGS = block("gantry_carriage/wheels"), - + ROPE_COIL = block("rope_pulley/rope_coil"), ROPE_HALF = block("rope_pulley/rope_half"), ROPE_HALF_MAGNET = block("rope_pulley/rope_half_magnet"), @@ -208,7 +208,7 @@ public class AllPartialModels { METAL_GIRDER_BRACKETS.put(d, block("metal_girder/bracket_" + Lang.asId(d.name()))); for (int i = 0; i < 8; i++) CONTRAPTION_CONTROLS_INDICATOR.add(block("contraption_controls/indicator_" + i)); - + putFoldingDoor("andesite_door"); putFoldingDoor("copper_door"); } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 0b2fe21be7..c205d5bc18 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -63,7 +63,8 @@ public class CreateClient { modEventBus.addListener(CreateClient::clientInit); modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(CreateContexts::flwInit); - modEventBus.addListener(ContraptionRenderDispatcher::gatherContext); + + MODEL_SWAPPER.registerListeners(modEventBus); diff --git a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java index 0424ccf85c..ed4098fc38 100644 --- a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java +++ b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java @@ -18,6 +18,7 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.client.renderer.Rect2i; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.accesstransformer.Target; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault @@ -29,20 +30,20 @@ public class GhostIngredientHandler> boolean doStart) { boolean isAttributeFilter = gui instanceof AttributeFilterScreen; List> targets = new LinkedList<>(); - + if (ingredient.getType() == VanillaTypes.ITEM_STACK) { for (int i = 36; i < gui.getMenu().slots.size(); i++) { if (gui.getMenu().slots.get(i) .isActive()) targets.add(new GhostTarget<>(gui, i - 36, isAttributeFilter)); - + // Only accept items in 1st slot. 2nd is used for functionality, don't wanna // override that one if (isAttributeFilter) break; } } - + return targets; } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index f25074fe48..e030986bf6 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index 9fbf5186db..c36112f887 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.AllGuiTextures; @@ -17,7 +17,7 @@ public class AnimatedCrafter extends AnimatedKinetics { AllGuiTextures.JEI_SHADOW.render(graphics, -16, 13); matrixStack.translate(3, 16, 0); - TransformStack.cast(matrixStack) + TransformStack.of(matrixStack) .rotateX(-12.5f) .rotateY(-22.5f); int scale = 22; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java index 3b7d9ce1dc..7d3bb36b29 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.gui.CustomLightingSettings; @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; public abstract class AnimatedKinetics implements IDrawable { - + public int offset = 0; public static final ILightingSettings DEFAULT_LIGHTING = CustomLightingSettings.builder() diff --git a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java index 6ce543d157..a3d2a321c7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions; import static com.simibubi.create.foundation.utility.AngleHelper.angleLerp; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.bearing.BearingContraption; @@ -51,7 +51,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { entity.setContraption(contraption); return entity; } - + @Override public void setPos(double x, double y, double z) { super.setPos(x, y, z); @@ -246,10 +246,10 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { float angle = getAngle(partialTicks); Axis axis = getRotationAxis(); - TransformStack.cast(matrixStack) + TransformStack.of(matrixStack) .nudge(getId()) - .centre() + .center() .rotate(angle, axis) - .unCentre(); + .uncenter(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java index 27b58da19e..c44c17dd65 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions; import java.util.function.BiPredicate; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; @@ -27,7 +27,7 @@ public class DirectionalExtenderScrollOptionSlot extends CenteredSideValueBoxTra @Override public void rotate(BlockState state, PoseStack ms) { if (!getSide().getAxis().isHorizontal()) - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) + 180); super.rotate(state, ms); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java index 150affe772..0f741e0327 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java @@ -7,7 +7,7 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.bearing.StabilizedContraption; @@ -496,7 +496,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { Vec3 anchorVec = super.getAnchorVec(); return anchorVec.subtract(.5, 0, .5); } - + @Override public Vec3 getPrevAnchorVec() { Vec3 prevAnchorVec = super.getPrevAnchorVec(); @@ -538,13 +538,13 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { repositionOnContraption(matrixStack, partialTicks, ridingEntity); } - TransformStack.cast(matrixStack) + TransformStack.of(matrixStack) .nudge(getId()) - .centre() + .center() .rotateY(angleYaw) .rotateZ(anglePitch) .rotateY(angleInitialYaw) - .unCentre(); + .uncenter(); } @OnlyIn(Dist.CLIENT) @@ -571,7 +571,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { Vec3 passengerPosition = parent.getPassengerPosition(this, partialTicks); if (passengerPosition == null) return Vec3.ZERO; - + double x = passengerPosition.x - Mth.lerp(partialTicks, this.xOld, this.getX()); double y = passengerPosition.y - Mth.lerp(partialTicks, this.yOld, this.getY()); double z = passengerPosition.z - Mth.lerp(partialTicks, this.zOld, this.getZ()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java index bcfca357b8..3a63354854 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; import java.util.List; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.contraptions.actors.trainControls.ControlsBlock; @@ -135,7 +135,7 @@ public class ContraptionControlsBlockEntity extends SmartBlockEntity { public void rotate(BlockState state, PoseStack ms) { Direction facing = state.getValue(ControlsBlock.FACING); float yRot = AngleHelper.horizontalAngle(facing); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot + 180) .rotateX(67.5f); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java index b3e9536ecf..e902ab4f3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.elevator.ElevatorContraption; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.IntAttached; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java index 66548a08f2..7071258241 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java @@ -2,8 +2,7 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; import java.util.Random; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; @@ -14,6 +13,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.redstone.nixieTube.NixieTubeRenderer; import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Color; @@ -93,7 +93,7 @@ public class ContraptionControlsRenderer extends SmartBlockEntityRenderer type, InstanceHandle handle) { + super(type, handle); + } + + public ActorInstance setPosition(BlockPos pos) { this.x = pos.getX(); this.y = pos.getY(); this.z = pos.getZ(); - markDirty(); return this; } - public ActorData setBlockLight(int blockLight) { + public ActorInstance setBlockLight(int blockLight) { this.blockLight = (byte) ((blockLight & 0xF) << 4); - markDirty(); return this; } - public ActorData setSkyLight(int skyLight) { + public ActorInstance setSkyLight(int skyLight) { this.skyLight = (byte) ((skyLight & 0xF) << 4); - markDirty(); return this; } - public ActorData setRotationOffset(float rotationOffset) { + public ActorInstance setRotationOffset(float rotationOffset) { this.rotationOffset = rotationOffset; - markDirty(); return this; } - public ActorData setSpeed(float speed) { + public ActorInstance setSpeed(float speed) { this.speed = speed; - markDirty(); return this; } - public ActorData setRotationAxis(Vector3f axis) { + public ActorInstance setRotationAxis(Vector3f axis) { setRotationAxis(axis.x(), axis.y(), axis.z()); return this; } - public ActorData setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) { + public ActorInstance setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) { this.rotationAxisX = (byte) (rotationAxisX * 127); this.rotationAxisY = (byte) (rotationAxisY * 127); this.rotationAxisZ = (byte) (rotationAxisZ * 127); - markDirty(); return this; } - public ActorData setRotationCenter(Vector3f axis) { + public ActorInstance setRotationCenter(Vector3f axis) { setRotationCenter(axis.x(), axis.y(), axis.z()); return this; } - public ActorData setRotationCenter(float rotationCenterX, float rotationCenterY, float rotationCenterZ) { + public ActorInstance setRotationCenter(float rotationCenterX, float rotationCenterY, float rotationCenterZ) { this.rotationCenterX = (byte) (rotationCenterX * 127); this.rotationCenterY = (byte) (rotationCenterY * 127); this.rotationCenterZ = (byte) (rotationCenterZ * 127); - markDirty(); return this; } - public ActorData setLocalRotation(Quaternionf q) { + public ActorInstance setLocalRotation(Quaternionf q) { this.qX = q.x(); this.qY = q.y(); this.qZ = q.z(); this.qW = q.w(); - markDirty(); return this; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java index 90dfffb870..752f9c497f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java @@ -1,39 +1,48 @@ package com.simibubi.create.content.contraptions.actors.flwdata; -import com.jozufozu.flywheel.api.struct.Batched; -import com.jozufozu.flywheel.api.struct.Instanced; -import com.jozufozu.flywheel.api.struct.StructWriter; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.core.layout.BufferLayout; -import com.jozufozu.flywheel.core.model.ModelTransformer; -import com.simibubi.create.foundation.render.AllInstanceFormats; -import com.simibubi.create.foundation.render.AllProgramSpecs; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.api.instance.InstanceWriter; +import com.jozufozu.flywheel.api.layout.Layout; +import com.jozufozu.flywheel.lib.layout.BufferLayout; +import com.simibubi.create.foundation.render.AllInstanceLayouts; +import com.simibubi.create.foundation.render.AllInstanceShaders; import net.minecraft.resources.ResourceLocation; -public class ActorType implements Instanced, Batched { +public class ActorType implements InstanceType { @Override - public ActorData create() { - return new ActorData(); + public ActorInstance create(InstanceHandle instanceHandle) { + return new ActorInstance(this, instanceHandle); + } + + @Override + public Layout layout() { + return null; + } + + @Override + public InstanceWriter getWriter() { + return UnsafeActorWriter.INSTANCE; + } + + @Override + public ResourceLocation vertexShader() { + return null; + } + + @Override + public ResourceLocation cullShader() { + return null; } @Override public BufferLayout getLayout() { - return AllInstanceFormats.ACTOR; - } - - @Override - public StructWriter getWriter(VecBuffer backing) { - return new UnsafeActorWriter(backing, this); + return AllInstanceLayouts.ACTOR; } @Override public ResourceLocation getProgramSpec() { - return AllProgramSpecs.ACTOR; - } - - @Override - public void transform(ActorData d, ModelTransformer.Params b) { - + return AllInstanceShaders.ACTOR; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java index c54b11db1a..96a36a1c52 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java @@ -2,34 +2,29 @@ package com.simibubi.create.content.contraptions.actors.flwdata; import org.lwjgl.system.MemoryUtil; -import com.jozufozu.flywheel.api.struct.StructType; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.backend.struct.UnsafeBufferWriter; +import com.jozufozu.flywheel.api.instance.InstanceWriter; -public class UnsafeActorWriter extends UnsafeBufferWriter { - public UnsafeActorWriter(VecBuffer backingBuffer, StructType vertexType) { - super(backingBuffer, vertexType); - } +public class UnsafeActorWriter implements InstanceWriter { + public static final UnsafeActorWriter INSTANCE = new UnsafeActorWriter(); @Override - protected void writeInternal(ActorData d) { - long addr = writePointer; - MemoryUtil.memPutFloat(addr, d.x); - MemoryUtil.memPutFloat(addr + 4, d.y); - MemoryUtil.memPutFloat(addr + 8, d.z); - MemoryUtil.memPutByte(addr + 12, d.blockLight); - MemoryUtil.memPutByte(addr + 13, d.skyLight); - MemoryUtil.memPutFloat(addr + 14, d.rotationOffset); - MemoryUtil.memPutByte(addr + 18, d.rotationAxisX); - MemoryUtil.memPutByte(addr + 19, d.rotationAxisY); - MemoryUtil.memPutByte(addr + 20, d.rotationAxisZ); - MemoryUtil.memPutFloat(addr + 21, d.qX); - MemoryUtil.memPutFloat(addr + 25, d.qY); - MemoryUtil.memPutFloat(addr + 29, d.qZ); - MemoryUtil.memPutFloat(addr + 33, d.qW); - MemoryUtil.memPutByte(addr + 37, d.rotationCenterX); - MemoryUtil.memPutByte(addr + 38, d.rotationCenterY); - MemoryUtil.memPutByte(addr + 39, d.rotationCenterZ); - MemoryUtil.memPutFloat(addr + 40, d.speed); + public void write(long ptr, ActorInstance d) { + MemoryUtil.memPutFloat(ptr, d.x); + MemoryUtil.memPutFloat(ptr + 4, d.y); + MemoryUtil.memPutFloat(ptr + 8, d.z); + MemoryUtil.memPutByte(ptr + 12, d.blockLight); + MemoryUtil.memPutByte(ptr + 13, d.skyLight); + MemoryUtil.memPutFloat(ptr + 14, d.rotationOffset); + MemoryUtil.memPutByte(ptr + 18, d.rotationAxisX); + MemoryUtil.memPutByte(ptr + 19, d.rotationAxisY); + MemoryUtil.memPutByte(ptr + 20, d.rotationAxisZ); + MemoryUtil.memPutFloat(ptr + 21, d.qX); + MemoryUtil.memPutFloat(ptr + 25, d.qY); + MemoryUtil.memPutFloat(ptr + 29, d.qZ); + MemoryUtil.memPutFloat(ptr + 33, d.qW); + MemoryUtil.memPutByte(ptr + 37, d.rotationCenterX); + MemoryUtil.memPutByte(ptr + 38, d.rotationCenterY); + MemoryUtil.memPutByte(ptr + 39, d.rotationCenterZ); + MemoryUtil.memPutFloat(ptr + 40, d.speed); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java index a9baf2f65d..10f0a21dbe 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java @@ -1,14 +1,12 @@ package com.simibubi.create.content.contraptions.actors.harvester; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.materials.model.ModelData; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; @@ -17,12 +15,13 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.client.model.data.ModelData; public class HarvesterActorInstance extends ActorInstance { static float originOffset = 1 / 16f; static Vec3 rotOffset = new Vec3(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f); - protected ModelData harvester; + protected TransformedInstance harvester; private Direction facing; protected float horizontalAngle; @@ -30,11 +29,11 @@ public class HarvesterActorInstance extends ActorInstance { private double rotation; private double previousRotation; - public HarvesterActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { + public HarvesterActorInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { super(materialManager, simulationWorld, context); Material material = materialManager.defaultCutout() - .material(Materials.TRANSFORMED); + .material(InstanceTypes.TRANSFORMED); BlockState state = context.state; @@ -50,11 +49,11 @@ public class HarvesterActorInstance extends ActorInstance { protected PartialModel getRollingPartial() { return AllPartialModels.HARVESTER_BLADE; } - + protected Vec3 getRotationOffset() { return rotOffset; } - + protected double getRadius() { return 6.5; } @@ -86,9 +85,9 @@ public class HarvesterActorInstance extends ActorInstance { public void beginFrame() { harvester.loadIdentity() .translate(context.localPos) - .centre() + .center() .rotateY(horizontalAngle) - .unCentre() + .uncenter() .translate(getRotationOffset()) .rotateX(getRotation()) .translateBack(getRotationOffset()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java index 3f7c7cb7d9..01361dddc8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java @@ -4,14 +4,14 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableBoolean; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.infrastructure.config.AllConfigs; @@ -52,7 +52,7 @@ public class HarvesterMovementBehaviour implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, + public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return new HarvesterActorInstance(materialManager, simulationWorld, context); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java index 9b99a16eba..2c15d17ca8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.actors.harvester; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -11,6 +10,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatch import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index 087c79b0c8..72edc7a42b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -1,26 +1,26 @@ package com.simibubi.create.content.contraptions.actors.psi; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.simibubi.create.foundation.utility.AngleHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.data.ModelData; public class PIInstance { - private final MaterialManager materialManager; + private final VisualizationContext materialManager; private final BlockState blockState; private final BlockPos instancePos; private final float angleX; private final float angleY; private boolean lit; - ModelData middle; - ModelData top; + TransformedInstance middle; + TransformedInstance top; - public PIInstance(MaterialManager materialManager, BlockState blockState, BlockPos instancePos) { + public PIInstance(VisualizationContext materialManager, BlockState blockState, BlockPos instancePos) { this.materialManager = materialManager; this.blockState = blockState; this.instancePos = instancePos; @@ -32,29 +32,27 @@ public class PIInstance { public void init(boolean lit) { this.lit = lit; middle = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) + .material(InstanceTypes.TRANSFORMED) .getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit), blockState) .createInstance(); - top = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(PortableStorageInterfaceRenderer.getTopForState(blockState), blockState) + top = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.block(PortableStorageInterfaceRenderer.getTopForState(blockState), RenderStage.AFTER_BLOCK_ENTITIES), blockState) .createInstance(); } public void beginFrame(float progress) { middle.loadIdentity() .translate(instancePos) - .centre() + .center() .rotateY(angleY) .rotateX(angleX) - .unCentre(); + .uncenter(); top.loadIdentity() .translate(instancePos) - .centre() + .center() .rotateY(angleY) .rotateX(angleX) - .unCentre(); + .uncenter(); middle.translate(0, progress * 0.5f + 0.375f, 0); top.translate(0, progress, 0); @@ -65,7 +63,7 @@ public class PIInstance { if (this.lit != lit) { this.lit = lit; materialManager.defaultSolid() - .material(Materials.TRANSFORMED) + .material(InstanceTypes.TRANSFORMED) .getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit), blockState) .stealInstance(middle); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java index 9cee93e997..011525436e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.contraptions.actors.psi; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; @@ -11,7 +11,7 @@ public class PSIActorInstance extends ActorInstance { private final PIInstance instance; - public PSIActorInstance(MaterialManager materialManager, VirtualRenderWorld world, MovementContext context) { + public PSIActorInstance(VisualizationContext materialManager, VirtualRenderWorld world, MovementContext context) { super(materialManager, world, context); instance = new PIInstance(materialManager, context.state, context.localPos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java index 4fa1020412..69dbb6218c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java @@ -1,33 +1,35 @@ package com.simibubi.create.content.contraptions.actors.psi; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.api.instance.TickableInstance; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.VisualTickContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PSIInstance extends BlockEntityInstance implements DynamicInstance, TickableInstance { +public class PSIInstance extends AbstractBlockEntityVisual implements DynamicVisual, TickableVisual { private final PIInstance instance; - public PSIInstance(MaterialManager materialManager, PortableStorageInterfaceBlockEntity blockEntity) { + public PSIInstance(VisualizationContext materialManager, PortableStorageInterfaceBlockEntity blockEntity) { super(materialManager, blockEntity); - instance = new PIInstance(materialManager, blockState, getInstancePosition()); + instance = new PIInstance(materialManager, blockState, getVisualPosition()); } @Override - public void init() { + public void init(float pt) { instance.init(isLit()); } @Override - public void tick() { + public void tick(VisualTickContext ctx) { instance.tick(isLit()); } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { instance.beginFrame(blockEntity.getExtensionDistance(AnimationTickHolder.getPartialTicks())); } @@ -37,7 +39,7 @@ public class PSIInstance extends BlockEntityInstance material = materialManager.defaultCutout() - .material(Materials.TRANSFORMED); + .material(InstanceTypes.TRANSFORMED); frame = material.getModel(AllPartialModels.ROLLER_FRAME, context.state) .createInstance(); frame.setBlockLight(localBlockLight()); @@ -31,9 +30,9 @@ public class RollerActorInstance extends HarvesterActorInstance { public void beginFrame() { harvester.loadIdentity() .translate(context.localPos) - .centre() + .center() .rotateY(horizontalAngle) - .unCentre() + .uncenter() .translate(0, -.25, 17 / 16f) .rotateX(getRotation()) .translate(0, -.5, .5) @@ -41,9 +40,9 @@ public class RollerActorInstance extends HarvesterActorInstance { frame.loadIdentity() .translate(context.localPos) - .centre() + .center() .rotateY(horizontalAngle + 180) - .unCentre(); + .uncenter(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java index 69fb55bc1d..ff3de1c7c1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.actors.roller; import java.util.List; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; @@ -182,11 +182,11 @@ public class RollerBlockEntity extends SmartBlockEntity { public void rotate(BlockState state, PoseStack ms) { Direction facing = state.getValue(RollerBlock.FACING); float yRot = AngleHelper.horizontalAngle(facing) + 180; - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot) .rotateX(90); } - + @Override public boolean testHit(BlockState state, Vec3 localHit) { Vec3 offset = getLocalOffset(state); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java index 4c46b3664d..b65f6a46ca 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java @@ -9,8 +9,7 @@ import java.util.function.BiConsumer; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.actors.roller.RollerBlockEntity.RollingMode; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -32,6 +31,7 @@ import com.simibubi.create.content.trains.graph.TrackEdge; import com.simibubi.create.content.trains.graph.TrackGraph; import com.simibubi.create.foundation.damageTypes.CreateDamageSources; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; @@ -76,7 +76,7 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { @Nullable @Override - public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, + public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return new RollerActorInstance(materialManager, simulationWorld, context); } @@ -195,7 +195,7 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { int startingY = 1; if (!getStateToPaveWith(context).isAir()) { FilterItemStack filter = context.getFilterFromBE(); - if (!ItemHelper + if (!ItemHelper .extract(context.contraption.getSharedInventory(), stack -> filter.test(context.world, stack), 1, true) .isEmpty()) @@ -306,7 +306,7 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { BlockState stateToPaveWith = getStateToPaveWith(context); BlockState stateToPaveWithAsSlab = getStateToPaveWithAsSlab(context); RollingMode mode = getMode(context); - + if (mode != RollingMode.TUNNEL_PAVE && stateToPaveWith.isAir()) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java index ec3cab40e4..47f6705781 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.actors.roller; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterRenderer; @@ -12,6 +11,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatch import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java index bc85048924..7fa7af9fcd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java @@ -2,12 +2,12 @@ package com.simibubi.create.content.contraptions.actors.trainControls; import java.util.Collection; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; @@ -32,7 +32,7 @@ public class ControlsMovementBehaviour implements MovementBehaviour { public ItemStack canBeDisabledVia(MovementContext context) { return null; } - + @Override public void stopMoving(MovementContext context) { context.contraption.entity.stopControlling(context.localPos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java index b4c71c2de0..70c489a367 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.contraptions.actors.trainControls; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -9,6 +8,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -29,9 +29,9 @@ public class ControlsRenderer { float hAngle = 180 + AngleHelper.horizontalAngle(facing); PoseStack ms = matrices.getModel(); cover.transform(ms) - .centre() + .center() .rotateY(hAngle) - .unCentre() + .uncenter() .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); @@ -41,14 +41,14 @@ public class ControlsRenderer { float vAngle = (float) Mth.clamp(first ? firstLever * 70 - 25 : secondLever * 15, -45, 45); SuperByteBuffer lever = CachedBufferer.partial(AllPartialModels.TRAIN_CONTROLS_LEVER, state); ms.pushPose(); - TransformStack.cast(ms) - .centre() + TransformStack.of(ms) + .center() .rotateY(hAngle) .translate(0, 0, 4 / 16f) .rotateX(vAngle - 45) .translate(0, yOffset, 0) .rotateX(45) - .unCentre() + .uncenter() .translate(0, -2 / 16f, -3 / 16f) .translate(first ? 0 : 6 / 16f, 0, 0); lever.transform(ms) diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java index 43788e2239..25b7e17ae9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.bearing; -import com.jozufozu.flywheel.util.box.GridAlignedBB; +import com.jozufozu.flywheel.lib.box.MutableBox; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.render.ContraptionLighter; @@ -11,8 +11,8 @@ public class AnchoredLighter extends ContraptionLighter { } @Override - public GridAlignedBB getContraptionBounds() { - GridAlignedBB bb = GridAlignedBB.from(contraption.bounds); + public MutableBox getContraptionBounds() { + MutableBox bb = MutableBox.from(contraption.bounds); bb.translate(contraption.anchor); return bb; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java index e79787850e..7479cc9772 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java @@ -2,10 +2,14 @@ package com.simibubi.create.content.contraptions.bearing; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.materials.oriented.OrientedData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.BackHalfShaftInstance; @@ -16,13 +20,13 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class BearingInstance extends BackHalfShaftInstance implements DynamicInstance { - final OrientedData topInstance; +public class BearingInstance extends BackHalfShaftInstance implements DynamicVisual { + final OrientedInstance topInstance; final Axis rotationAxis; final Quaternionf blockOrientation; - public BearingInstance(MaterialManager materialManager, B blockEntity) { + public BearingInstance(VisualizationContext materialManager, B blockEntity) { super(materialManager, blockEntity); Direction facing = blockState.getValue(BlockStateProperties.FACING); @@ -33,13 +37,14 @@ public class BearingInstance PartialModel top = blockEntity.isWoodenTop() ? AllPartialModels.BEARING_TOP_WOODEN : AllPartialModels.BEARING_TOP; - topInstance = getOrientedMaterial().getModel(top, blockState).createInstance(); + topInstance = instancerProvider.instancerr(InstanceTypes.ORIENTED, Models.partial(top), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); - topInstance.setPosition(getInstancePosition()).setRotation(blockOrientation); + topInstance.setPosition(getVisualPosition()).setRotation(blockOrientation); } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { float interpolatedAngle = blockEntity.getInterpolatedAngle(AnimationTickHolder.getPartialTicks() - 1); Quaternionf rot = rotationAxis.rotationDegrees(interpolatedAngle); @@ -55,8 +60,8 @@ public class BearingInstance } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); topInstance.delete(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java index c7a4921c23..1c678c797c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.bearing; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -27,7 +27,7 @@ public class BearingRenderer protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) return; + if (VisualizationManager.supportsVisualization(be.getLevel())) return; super.renderSafe(be, partialTicks, ms, buffer, light, overlay); diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java index 68e2689d90..27e21c286e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java @@ -2,16 +2,16 @@ package com.simibubi.create.content.contraptions.bearing; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.materials.oriented.OrientedData; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; -import com.simibubi.create.foundation.render.AllMaterialSpecs; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; @@ -20,14 +20,14 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class StabilizedBearingInstance extends ActorInstance { - final OrientedData topInstance; - final RotatingData shaft; + final OrientedInstance topInstance; + final RotatingInstance shaft; final Direction facing; final Axis rotationAxis; final Quaternionf blockOrientation; - public StabilizedBearingInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { + public StabilizedBearingInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { super(materialManager, simulationWorld, context); BlockState blockState = context.state; @@ -37,9 +37,7 @@ public class StabilizedBearingInstance extends ActorInstance { blockOrientation = BearingInstance.getBlockStateOrientation(facing); - topInstance = materialManager.defaultSolid() - .material(Materials.ORIENTED) - .getModel(AllPartialModels.BEARING_TOP, blockState) + topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.BEARING_TOP), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); int blockLight = localBlockLight(); @@ -48,7 +46,7 @@ public class StabilizedBearingInstance extends ActorInstance { .setBlockLight(blockLight); shaft = materialManager.defaultSolid() - .material(AllMaterialSpecs.ROTATING) + .material(AllInstanceTypes.ROTATING) .getModel(AllPartialModels.SHAFT_HALF, blockState, blockState.getValue(BlockStateProperties.FACING).getOpposite()) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java index 2d3800b4ef..2b94e098f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java @@ -4,9 +4,8 @@ import javax.annotation.Nullable; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -19,6 +18,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.renderer.MultiBufferSource; @@ -35,7 +35,7 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { public ItemStack canBeDisabledVia(MovementContext context) { return null; } - + @Override @OnlyIn(Dist.CLIENT) public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, @@ -78,7 +78,7 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, + public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return new StabilizedBearingInstance(materialManager, simulationWorld, context); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java index 3cf7dd7a6b..5d85b2347b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.behaviour; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; import net.minecraft.client.renderer.MultiBufferSource; @@ -41,11 +41,11 @@ public interface MovementBehaviour { return null; return new ItemStack(block); } - + default void onDisabledByControls(MovementContext context) { cancelStall(context); } - + default boolean mustTickWhileDisabled() { return false; } @@ -63,7 +63,7 @@ public interface MovementBehaviour { Vec3 vec = context.position; if (vec == null) return; - + ItemEntity itemEntity = new ItemEntity(context.world, vec.x, vec.y, vec.z, remainder); itemEntity.setDeltaMovement(context.motion.add(0, 0.5f, 0) .scale(context.world.random.nextFloat() * .3f)); @@ -73,7 +73,7 @@ public interface MovementBehaviour { default void onSpeedChanged(MovementContext context, Vec3 oldMotion, Vec3 motion) {} default void stopMoving(MovementContext context) {} - + default void cancelStall(MovementContext context) { context.stall = false; } @@ -94,7 +94,7 @@ public interface MovementBehaviour { @OnlyIn(Dist.CLIENT) @Nullable - default ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, + default ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java index 8b4454bea0..7e3022db3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.List; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; @@ -70,7 +70,7 @@ public class StickerBlockEntity extends SmartBlockEntity { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> playSound(false)); piston.chase(target, .4f, Chaser.LINEAR); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); } public boolean isAttachedToBlock() { @@ -85,7 +85,7 @@ public class StickerBlockEntity extends SmartBlockEntity { protected void write(CompoundTag tag, boolean clientPacket) { super.write(tag, clientPacket); } - + @Override protected void read(CompoundTag compound, boolean clientPacket) { super.read(compound, clientPacket); diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java index 4b4c4a262b..e482740d53 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java @@ -1,9 +1,12 @@ package com.simibubi.create.content.contraptions.chassis; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; -import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -12,19 +15,19 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class StickerInstance extends BlockEntityInstance implements DynamicInstance { +public class StickerInstance extends AbstractBlockEntityVisual implements DynamicVisual { float lastOffset = Float.NaN; final Direction facing; final boolean fakeWorld; final int offset; - private final ModelData head; + private final TransformedInstance head; - public StickerInstance(MaterialManager materialManager, StickerBlockEntity blockEntity) { + public StickerInstance(VisualizationContext materialManager, StickerBlockEntity blockEntity) { super(materialManager, blockEntity); - head = getTransformMaterial().getModel(AllPartialModels.STICKER_HEAD, blockState).createInstance(); + head = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.STICKER_HEAD), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); fakeWorld = blockEntity.getLevel() != Minecraft.getInstance().level; facing = blockState.getValue(StickerBlock.FACING); @@ -50,12 +53,12 @@ public class StickerInstance extends BlockEntityInstance imp private void animateHead(float offset) { head.loadIdentity() - .translate(getInstancePosition()) + .translate(getVisualPosition()) .nudge(blockEntity.hashCode()) - .centre() + .center() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing) + 90) - .unCentre() + .uncenter() .translate(0, (offset * offset) * 4 / 16f, 0); } @@ -65,7 +68,7 @@ public class StickerInstance extends BlockEntityInstance imp } @Override - public void remove() { + protected void _delete() { head.delete(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java index 846663029a..c94bd2089b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.chassis; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; @@ -25,7 +25,7 @@ public class StickerRenderer extends SafeBlockEntityRenderer protected void renderSafe(StickerBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) return; + if (VisualizationManager.supportsVisualization(be.getLevel())) return; BlockState state = be.getBlockState(); SuperByteBuffer head = CachedBufferer.partial(AllPartialModels.STICKER_HEAD, state); @@ -36,10 +36,10 @@ public class StickerRenderer extends SafeBlockEntityRenderer Direction facing = state.getValue(StickerBlock.FACING); head.nudge(be.hashCode()) - .centre() + .center() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing) + 90) - .unCentre() + .uncenter() .translate(0, (offset * offset) * 4 / 16f, 0); head.light(light) diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyInstance.java index ac5e07f786..b62076fb4c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyInstance.java @@ -1,14 +1,15 @@ package com.simibubi.create.content.contraptions.elevator; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.light.TickingLightListener; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.light.TickingLightListener; import com.simibubi.create.content.kinetics.base.ShaftInstance; // TODO -public class ElevatorPulleyInstance extends ShaftInstance implements DynamicInstance, TickingLightListener { +public class ElevatorPulleyInstance extends ShaftInstance implements DynamicVisual, TickingLightListener { - public ElevatorPulleyInstance(MaterialManager materialManager, ElevatorPulleyBlockEntity blockEntity) { + public ElevatorPulleyInstance(VisualizationContext materialManager, ElevatorPulleyBlockEntity blockEntity) { super(materialManager, blockEntity); } @@ -18,7 +19,7 @@ public class ElevatorPulleyInstance extends ShaftInstance .75f) { - halfRope.centre() + halfRope.center() .rotateY(blockStateAngle) - .unCentre(); + .uncenter(); AbstractPulleyRenderer.renderAt(world, halfRope.shiftUVScrolling(beltShift, (float) beltScroll * spriteSize), f > .75f ? f - 1 : f, pos, ms, vb); @@ -95,9 +95,9 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer implements DynamicInstance { +public class GantryCarriageInstance extends ShaftInstance implements DynamicVisual { - private final ModelData gantryCogs; + private final TransformedInstance gantryCogs; final Direction facing; final Boolean alongFirst; @@ -25,11 +30,10 @@ public class GantryCarriageInstance extends ShaftInstance { CartEndpoint cartTransform = transforms.get(isFirst); @@ -201,7 +201,7 @@ public class CouplingRenderer { } public void apply(PoseStack ms, Vec3 camera) { - TransformStack.cast(ms) + TransformStack.of(ms) .translate(camera.scale(-1) .add(x, y, z)) .rotateY(yaw) diff --git a/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java b/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java index b21c795059..f3a1013a8e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.piston; -import com.jozufozu.flywheel.util.box.GridAlignedBB; +import com.jozufozu.flywheel.lib.box.MutableBox; import com.simibubi.create.content.contraptions.render.ContraptionLighter; import net.minecraft.core.Vec3i; @@ -11,8 +11,8 @@ public class PistonLighter extends ContraptionLighter { } @Override - public GridAlignedBB getContraptionBounds() { - GridAlignedBB bounds = GridAlignedBB.from(contraption.bounds); + public MutableBox getContraptionBounds() { + MutableBox bounds = MutableBox.from(contraption.bounds); bounds.translate(contraption.anchor); int length = contraption.extensionLength; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java index 522b81c2ae..67b17ede52 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java @@ -1,47 +1,49 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.core.instancing.ConditionalInstance; -import com.jozufozu.flywheel.core.instancing.GroupInstance; -import com.jozufozu.flywheel.core.instancing.SelectInstance; -import com.jozufozu.flywheel.core.materials.oriented.OrientedData; -import com.jozufozu.flywheel.light.LightPacking; -import com.jozufozu.flywheel.light.LightVolume; -import com.jozufozu.flywheel.light.TickingLightListener; -import com.jozufozu.flywheel.util.box.GridAlignedBB; -import com.jozufozu.flywheel.util.box.ImmutableBox; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.box.Box; +import com.jozufozu.flywheel.lib.box.MutableBox; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.light.LightPacking; +import com.jozufozu.flywheel.lib.light.LightVolume; +import com.jozufozu.flywheel.lib.light.TickingLightListener; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.foundation.render.ConditionalInstance; +import com.simibubi.create.foundation.render.GroupInstance; +import com.simibubi.create.foundation.render.SelectInstance; import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; import net.minecraft.util.Mth; import net.minecraft.world.level.LightLayer; -public abstract class AbstractPulleyInstance extends ShaftInstance implements DynamicInstance, TickingLightListener { +public abstract class AbstractPulleyInstance extends ShaftInstance implements DynamicVisual, TickingLightListener { - final OrientedData coil; - final SelectInstance magnet; - final GroupInstance rope; - final ConditionalInstance halfRope; + final OrientedInstance coil; + final SelectInstance magnet; + final GroupInstance rope; + final ConditionalInstance halfRope; protected float offset; protected final Direction rotatingAbout; protected final Axis rotationAxis; - private final GridAlignedBB volume = new GridAlignedBB(); + private final MutableBox volume = new MutableBox(); private final LightVolume light; - public AbstractPulleyInstance(MaterialManager dispatcher, T blockEntity) { + public AbstractPulleyInstance(VisualizationContext dispatcher, T blockEntity) { super(dispatcher, blockEntity); rotatingAbout = Direction.get(Direction.AxisDirection.POSITIVE, axis); rotationAxis = Axis.of(rotatingAbout.step()); coil = getCoilModel().createInstance() - .setPosition(getInstancePosition()); + .setPosition(getVisualPosition()); magnet = new SelectInstance<>(this::getMagnetModelIndex); magnet.addModel(getMagnetModel()) @@ -53,12 +55,12 @@ public abstract class AbstractPulleyInstance exten updateOffset(); updateVolume(); - light = new LightVolume(world, volume); + light = new LightVolume(level, volume); light.initialize(); } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { updateOffset(); coil.setRotation(rotationAxis.rotationDegrees(offset * 180)); @@ -70,8 +72,8 @@ public abstract class AbstractPulleyInstance exten .ifPresent(data -> { int i = Math.max(0, Mth.floor(offset)); short packed = light.getPackedLight(pos.getX(), pos.getY() - i, pos.getZ()); - data.setPosition(getInstancePosition()) - .nudge(0, -offset, 0) + data.setPosition(getVisualPosition()) + .nudgePosition(0, -offset, 0) .setBlockLight(LightPacking.getBlock(packed)) .setSkyLight(LightPacking.getSky(packed)); }); @@ -83,8 +85,8 @@ public abstract class AbstractPulleyInstance exten float halfRopeNudge = f > .75f ? f - 1 : f; short packed = light.getPackedLight(pos.getX(), pos.getY(), pos.getZ()); - rope1.setPosition(getInstancePosition()) - .nudge(0, -halfRopeNudge, 0) + rope1.setPosition(getVisualPosition()) + .nudgePosition(0, -halfRopeNudge, 0) .setBlockLight(LightPacking.getBlock(packed)) .setSkyLight(LightPacking.getSky(packed)); }); @@ -96,8 +98,8 @@ public abstract class AbstractPulleyInstance exten short packed = light.getPackedLight(pos.getX(), bottomY + i, pos.getZ()); rope.get(i) - .setPosition(getInstancePosition()) - .nudge(0, -offset + i + 1, 0) + .setPosition(getVisualPosition()) + .nudgePosition(0, -offset + i + 1, 0) .setBlockLight(LightPacking.getBlock(packed)) .setSkyLight(LightPacking.getSky(packed)); } @@ -113,8 +115,8 @@ public abstract class AbstractPulleyInstance exten } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); coil.delete(); magnet.delete(); rope.clear(); @@ -122,15 +124,15 @@ public abstract class AbstractPulleyInstance exten light.delete(); } - protected abstract Instancer getRopeModel(); + protected abstract Instancer getRopeModel(); - protected abstract Instancer getMagnetModel(); + protected abstract Instancer getMagnetModel(); - protected abstract Instancer getHalfMagnetModel(); + protected abstract Instancer getHalfMagnetModel(); - protected abstract Instancer getCoilModel(); + protected abstract Instancer getCoilModel(); - protected abstract Instancer getHalfRopeModel(); + protected abstract Instancer getHalfRopeModel(); protected abstract float getOffset(); @@ -149,8 +151,8 @@ public abstract class AbstractPulleyInstance exten int length = Mth.ceil(offset) + 2; if (volume.sizeY() < length) { - volume.assign(pos.below(length), pos) - .fixMinMax(); + volume.assign(pos.below(length), pos); + volume.fixMinMax(); return true; } return false; @@ -178,18 +180,13 @@ public abstract class AbstractPulleyInstance exten } @Override - public boolean decreaseFramerateWithDistance() { - return false; - } - - @Override - public ImmutableBox getVolume() { + public Box getVolume() { return volume; } @Override - public void onLightUpdate(LightLayer type, ImmutableBox changed) { - super.onLightUpdate(type, changed); - light.onLightUpdate(type, changed); + public void onLightUpdate(LightLayer type, SectionPos pos) { + super.onLightUpdate(type, pos); + light.onLightUpdate(type, pos); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java index 7983fd0eed..76cf2bbee7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.kinetics.base.IRotate; @@ -44,7 +44,7 @@ public abstract class AbstractPulleyRenderer exten protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) + if (VisualizationManager.supportsVisualization(be.getLevel())) return; super.renderSafe(be, partialTicks, ms, buffer, light, overlay); diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java index 862954199b..4808cb2f7a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java @@ -1,41 +1,39 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.materials.oriented.OrientedData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; import com.simibubi.create.foundation.utility.AnimationTickHolder; public class HosePulleyInstance extends AbstractPulleyInstance { - public HosePulleyInstance(MaterialManager dispatcher, HosePulleyBlockEntity blockEntity) { + public HosePulleyInstance(VisualizationContext dispatcher, HosePulleyBlockEntity blockEntity) { super(dispatcher, blockEntity); } - protected Instancer getRopeModel() { - return getOrientedMaterial().getModel(AllPartialModels.HOSE, blockState); + protected Instancer getRopeModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getMagnetModel() { - return materialManager.defaultCutout() - .material(Materials.ORIENTED) - .getModel(AllPartialModels.HOSE_MAGNET, blockState); + protected Instancer getMagnetModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getHalfMagnetModel() { - return materialManager.defaultCutout() - .material(Materials.ORIENTED) - .getModel(AllPartialModels.HOSE_HALF_MAGNET, blockState); + protected Instancer getHalfMagnetModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getCoilModel() { - return getOrientedMaterial().getModel(AllPartialModels.HOSE_COIL, blockState, rotatingAbout); + protected Instancer getCoilModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_COIL, rotatingAbout), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getHalfRopeModel() { - return getOrientedMaterial().getModel(AllPartialModels.HOSE_HALF, blockState); + protected Instancer getHalfRopeModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF), RenderStage.AFTER_BLOCK_ENTITIES); } protected float getOffset() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java index b9a5a13e97..82d400161e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.util.box.GridAlignedBB; +import com.jozufozu.flywheel.lib.box.MutableBox; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.render.ContraptionLighter; @@ -13,14 +13,14 @@ public class PulleyLighter extends ContraptionLighter { } @Override - public GridAlignedBB getContraptionBounds() { + public MutableBox getContraptionBounds() { - GridAlignedBB bounds = GridAlignedBB.from(contraption.bounds); + MutableBox bounds = MutableBox.from(contraption.bounds); Level world = contraption.entity.level(); BlockPos.MutableBlockPos pos = contraption.anchor.mutable(); - while (!AllBlocks.ROPE_PULLEY.has(world.getBlockState(pos)) && pos.getY() < world.getMaxBuildHeight()) + while (!AllBlocks.ROPE_PULLEY.has(world.getBlockState(pos)) && pos.getY() < world.getMaxBuildHeight()) pos.move(0, 1, 0); bounds.translate(pos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java index 0be9e3c42a..bc53bd81e8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -64,10 +64,10 @@ public class PulleyRenderer extends AbstractPulleyRenderer { return offset; } - + @Override public int getViewDistance() { return 128; } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java index 70ce307ff7..83de1c34c2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java @@ -1,36 +1,39 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.materials.oriented.OrientedData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AnimationTickHolder; public class RopePulleyInstance extends AbstractPulleyInstance { - public RopePulleyInstance(MaterialManager materialManager, PulleyBlockEntity blockEntity) { + public RopePulleyInstance(VisualizationContext materialManager, PulleyBlockEntity blockEntity) { super(materialManager, blockEntity); } - protected Instancer getRopeModel() { - return getOrientedMaterial().getModel(AllBlocks.ROPE.getDefaultState()); + protected Instancer getRopeModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.block(AllBlocks.ROPE.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getMagnetModel() { - return getOrientedMaterial().getModel(AllBlocks.PULLEY_MAGNET.getDefaultState()); + protected Instancer getMagnetModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.block(AllBlocks.PULLEY_MAGNET.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getHalfMagnetModel() { - return getOrientedMaterial().getModel(AllPartialModels.ROPE_HALF_MAGNET, blockState); + protected Instancer getHalfMagnetModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getCoilModel() { - return getOrientedMaterial().getModel(AllPartialModels.ROPE_COIL, blockState, rotatingAbout); + protected Instancer getCoilModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_COIL, rotatingAbout), RenderStage.AFTER_BLOCK_ENTITIES); } - protected Instancer getHalfRopeModel() { - return getOrientedMaterial().getModel(AllPartialModels.ROPE_HALF, blockState); + protected Instancer getHalfRopeModel() { + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF), RenderStage.AFTER_BLOCK_ENTITIES); } protected float getOffset() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java index ff37307d89..a5cafc1e1b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java @@ -1,17 +1,17 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; public abstract class ActorInstance { - protected final MaterialManager materialManager; - protected final VirtualRenderWorld simulationWorld; + protected final VisualizationContext materialManager; + protected final BlockAndTintGetter simulationWorld; protected final MovementContext context; - public ActorInstance(MaterialManager materialManager, VirtualRenderWorld world, MovementContext context) { + public ActorInstance(VisualizationContext materialManager, BlockAndTintGetter world, MovementContext context) { this.materialManager = materialManager; this.simulationWorld = world; this.context = context; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionGroup.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionGroup.java deleted file mode 100644 index 17a92c8800..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionGroup.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import com.jozufozu.flywheel.backend.instancing.instancing.InstancedMaterialGroup; -import com.jozufozu.flywheel.backend.instancing.instancing.InstancingEngine; - -import net.minecraft.client.renderer.RenderType; - -public class ContraptionGroup

extends InstancedMaterialGroup

{ - - private final FlwContraption contraption; - - public ContraptionGroup(FlwContraption contraption, InstancingEngine

owner, RenderType type) { - super(owner, type); - - this.contraption = contraption; - } - - @Override - protected void setup(P program) { - contraption.setup(program); - } - - public static

InstancingEngine.GroupFactory

forContraption(FlwContraption c) { - return (materialManager, type) -> new ContraptionGroup<>(c, materialManager, type); - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionInstanceManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionInstanceManager.java deleted file mode 100644 index b38ab41cd0..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionInstanceManager.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import java.util.ArrayList; - -import javax.annotation.Nullable; - -import org.apache.commons.lang3.tuple.Pair; - -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.backend.instancing.TaskEngine; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstanceManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.simibubi.create.AllMovementBehaviours; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; -import com.simibubi.create.content.contraptions.behaviour.MovementContext; - -import net.minecraft.client.Camera; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; - -public class ContraptionInstanceManager extends BlockEntityInstanceManager { - - protected ArrayList actors = new ArrayList<>(); - - private final VirtualRenderWorld renderWorld; - - private Contraption contraption; - - ContraptionInstanceManager(MaterialManager materialManager, VirtualRenderWorld renderWorld, Contraption contraption) { - super(materialManager); - this.renderWorld = renderWorld; - this.contraption = contraption; - } - - public void tick() { - actors.forEach(ActorInstance::tick); - } - - @Override - protected boolean canCreateInstance(BlockEntity blockEntity) { - return !contraption.isHiddenInPortal(blockEntity.getBlockPos()); - } - - @Override - public void beginFrame(TaskEngine taskEngine, Camera info) { - super.beginFrame(taskEngine, info); - - actors.forEach(ActorInstance::beginFrame); - } - - @Override - protected void updateInstance(DynamicInstance dyn, float lookX, float lookY, float lookZ, int cX, int cY, int cZ) { - dyn.beginFrame(); - } - - @Nullable - public ActorInstance createActor(Pair actor) { - StructureBlockInfo blockInfo = actor.getLeft(); - MovementContext context = actor.getRight(); - - if (contraption.isHiddenInPortal(context.localPos)) - return null; - - MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); - - if (movementBehaviour != null && movementBehaviour.hasSpecialInstancedRendering()) { - ActorInstance instance = movementBehaviour.createInstance(materialManager, renderWorld, context); - - actors.add(instance); - - return instance; - } - - return null; - } - - @Override - public void detachLightListeners() { - // noop, no light updater for contraption levels - } -} - diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java index e917aeb631..8f319d4a65 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java @@ -1,12 +1,13 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.light.GPULightVolume; -import com.jozufozu.flywheel.light.LightListener; -import com.jozufozu.flywheel.light.LightUpdater; -import com.jozufozu.flywheel.util.box.GridAlignedBB; -import com.jozufozu.flywheel.util.box.ImmutableBox; +import com.jozufozu.flywheel.lib.box.Box; +import com.jozufozu.flywheel.lib.box.MutableBox; +import com.jozufozu.flywheel.lib.light.GPULightVolume; +import com.jozufozu.flywheel.lib.light.LightListener; +import com.jozufozu.flywheel.lib.light.LightUpdater; import com.simibubi.create.content.contraptions.Contraption; +import net.minecraft.core.SectionPos; import net.minecraft.world.level.LightLayer; public abstract class ContraptionLighter implements LightListener { @@ -14,7 +15,7 @@ public abstract class ContraptionLighter implements Light public final GPULightVolume lightVolume; protected final LightUpdater lightUpdater; - protected final GridAlignedBB bounds; + protected final MutableBox bounds; protected boolean scheduleRebuild; @@ -33,30 +34,25 @@ public abstract class ContraptionLighter implements Light lightUpdater.addListener(this); } - public abstract GridAlignedBB getContraptionBounds(); + public abstract MutableBox getContraptionBounds(); @Override - public boolean isListenerInvalid() { - return lightVolume.isListenerInvalid(); + public boolean isInvalid() { + return lightVolume.isInvalid(); } @Override - public void onLightUpdate(LightLayer type, ImmutableBox changed) { - lightVolume.onLightUpdate(type, changed); - } + public void onLightUpdate(LightLayer type, SectionPos pos) { + lightVolume.onLightUpdate(type, pos); + } - @Override - public void onLightPacket(int chunkX, int chunkZ) { - lightVolume.onLightPacket(chunkX, chunkZ); - } - - protected static void growBoundsForEdgeData(GridAlignedBB bounds) { + protected static void growBoundsForEdgeData(MutableBox bounds) { // so we have at least enough data on the edges to avoid artifacts and have smooth lighting bounds.grow(2); } @Override - public ImmutableBox getVolume() { + public Box getVolume() { return bounds; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java index c1eb10ad26..9bc438ea97 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java @@ -3,12 +3,12 @@ package com.simibubi.create.content.contraptions.render; import org.joml.Matrix4f; import org.lwjgl.opengl.GL20; -import com.jozufozu.flywheel.core.shader.WorldProgram; +import com.jozufozu.flywheel.gl.shader.GlProgram; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.AABB; -public class ContraptionProgram extends WorldProgram { +public class ContraptionProgram extends GlProgram { protected final int uLightBoxSize; protected final int uLightBoxMin; protected final int uModel; @@ -16,17 +16,18 @@ public class ContraptionProgram extends WorldProgram { protected int uLightVolume; public ContraptionProgram(ResourceLocation name, int handle) { - super(name, handle); + //super(name, handle); + super(handle); uLightBoxSize = getUniformLocation("uLightBoxSize"); uLightBoxMin = getUniformLocation("uLightBoxMin"); uModel = getUniformLocation("uModel"); } - @Override - protected void registerSamplers() { - super.registerSamplers(); - uLightVolume = setSamplerBinding("uLightVolume", 4); - } +// @Override +// protected void registerSamplers() { +// super.registerSamplers(); +// uLightVolume = setSamplerBinding("uLightVolume", 4); +// } public void bind(Matrix4f model, AABB lightVolume) { double sizeX = lightVolume.maxX - lightVolume.minX; @@ -34,6 +35,6 @@ public class ContraptionProgram extends WorldProgram { double sizeZ = lightVolume.maxZ - lightVolume.minZ; GL20.glUniform3f(uLightBoxSize, (float) sizeX, (float) sizeY, (float) sizeZ); GL20.glUniform3f(uLightBoxMin, (float) lightVolume.minX, (float) lightVolume.minY, (float) lightVolume.minZ); - uploadMatrixUniform(uModel, model); + // uploadMatrixUniform(uModel, model); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java index eb41e43f58..bb82dd94d4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java @@ -4,18 +4,14 @@ import java.util.Collection; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.gl.error.GlError; -import com.jozufozu.flywheel.config.BackendType; -import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; -import com.jozufozu.flywheel.core.model.WorldModelBuilder; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.event.BeginFrameEvent; -import com.jozufozu.flywheel.event.GatherContextEvent; -import com.jozufozu.flywheel.event.ReloadRenderersEvent; -import com.jozufozu.flywheel.event.RenderLayerEvent; -import com.jozufozu.flywheel.util.WorldAttached; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.event.BeginFrameEvent; +import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent; +import com.jozufozu.flywheel.api.event.RenderStageEvent; +import com.jozufozu.flywheel.gl.error.GlError; +import com.jozufozu.flywheel.lib.model.baked.BlockModelBuilder; +import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; +import com.jozufozu.flywheel.lib.model.baked.TessellatedModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -25,6 +21,8 @@ import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.foundation.render.BlockEntityRenderHelper; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; +import com.simibubi.create.foundation.utility.WorldAttached; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; @@ -70,24 +68,21 @@ public class ContraptionRenderDispatcher { @SubscribeEvent public static void beginFrame(BeginFrameEvent event) { - WORLDS.get(event.getWorld()) + WORLDS.get(event.getContext() + .level()) .beginFrame(event); } @SubscribeEvent - public static void renderLayer(RenderLayerEvent event) { - WORLDS.get(event.getWorld()) + public static void renderLayer(RenderStageEvent event) { + WORLDS.get(event.getLevel()) .renderLayer(event); - GlError.pollAndThrow(() -> "contraption layer: " + event.getLayer()); + GlError.pollAndThrow(() -> "contraption layer: " + event.getStage()); } @SubscribeEvent - public static void onRendererReload(ReloadRenderersEvent event) { - reset(); - } - - public static void gatherContext(GatherContextEvent e) { + public static void onRendererReload(ReloadLevelRendererEvent event) { reset(); } @@ -121,7 +116,7 @@ public class ContraptionRenderDispatcher { int height = contraptionWorld.getHeight(); VirtualRenderWorld renderWorld = new VirtualRenderWorld(world, minBuildHeight, height, origin) { @Override - public boolean supportsFlywheel() { + public boolean supportsVisualization() { return canInstance(); } }; @@ -160,7 +155,7 @@ public class ContraptionRenderDispatcher { if (c.isHiddenInPortal(blockInfo.pos())) continue; m.pushPose(); - TransformStack.cast(m) + TransformStack.of(m) .translate(blockInfo.pos()); movementBehaviour.renderInContraption(context, renderWorld, matrices, buffer); m.popPose(); @@ -171,9 +166,8 @@ public class ContraptionRenderDispatcher { public static SuperByteBuffer buildStructureBuffer(VirtualRenderWorld renderWorld, Contraption c, RenderType layer) { Collection values = c.getRenderedBlocks(); - ShadeSeparatedBufferedData data = new WorldModelBuilder(layer).withRenderWorld(renderWorld) - .withBlocks(values) - .withModelData(c.modelData) + var build = new MultiBlockModelBuilder(values).renderWorld(renderWorld) + .modelDataMap(c.modelData) .build(); SuperByteBuffer sbb = new SuperByteBuffer(data); data.release(); @@ -203,14 +197,14 @@ public class ContraptionRenderDispatcher { public static void reset() { WORLDS.empty(ContraptionRenderingWorld::delete); - if (Backend.isOn()) { - WORLDS = new WorldAttached<>(FlwContraptionManager::new); - } else { +// if (Backend.isOn()) { +// WORLDS = new WorldAttached<>(FlwContraptionManager::new); +// } else { WORLDS = new WorldAttached<>(SBBContraptionManager::new); - } +// } } public static boolean canInstance() { - return Backend.getBackendType() == BackendType.INSTANCING; + return false; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index ff3ebf3e3c..dcf4e658c5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.event.BeginFrameEvent; +import com.jozufozu.flywheel.api.event.BeginFrameEvent; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.util.Mth; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java index de71b0d941..5a4e16008c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import com.jozufozu.flywheel.event.BeginFrameEvent; -import com.jozufozu.flywheel.event.RenderLayerEvent; +import com.jozufozu.flywheel.api.event.BeginFrameEvent; +import com.jozufozu.flywheel.api.event.RenderStageEvent; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.ContraptionHandler; @@ -43,9 +43,11 @@ public abstract class ContraptionRenderingWorld return false; } - public void renderLayer(RenderLayerEvent event) { + public void renderLayer(RenderStageEvent event) { + var position = event.getCamera() + .getPosition(); for (C c : visible) { - c.setupMatrices(event.stack, event.camX, event.camY, event.camZ); + c.setupMatrices(event.getStack(), position.x, position.y, position.z); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java index 6ff1e1bd8e..0b4e02b5d3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.util.box.GridAlignedBB; +import com.jozufozu.flywheel.lib.box.MutableBox; import com.simibubi.create.content.contraptions.Contraption; // so other contraptions don't crash before they have a lighter @@ -10,7 +10,7 @@ public class EmptyLighter extends ContraptionLighter { } @Override - public GridAlignedBB getContraptionBounds() { - return new GridAlignedBB(0, 0, 0, 1, 1, 1); + public MutableBox getContraptionBounds() { + return new MutableBox(0, 0, 0, 1, 1, 1); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java index 07dbd512cb..50e2f9ae31 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java @@ -1,44 +1,25 @@ package com.simibubi.create.content.contraptions.render; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.joml.Matrix4f; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.gl.GlStateTracker; -import com.jozufozu.flywheel.backend.instancing.Engine; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderRegistry; -import com.jozufozu.flywheel.backend.instancing.SerialTaskEngine; -import com.jozufozu.flywheel.backend.instancing.batching.BatchingEngine; -import com.jozufozu.flywheel.backend.instancing.instancing.InstancingEngine; -import com.jozufozu.flywheel.backend.model.ArrayModelRenderer; -import com.jozufozu.flywheel.core.model.Model; -import com.jozufozu.flywheel.core.model.WorldModelBuilder; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.event.BeginFrameEvent; -import com.jozufozu.flywheel.event.RenderLayerEvent; +import com.jozufozu.flywheel.api.event.BeginFrameEvent; +import com.jozufozu.flywheel.api.event.RenderStageEvent; +import com.jozufozu.flywheel.gl.GlStateTracker; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.foundation.render.CreateContexts; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; public class FlwContraption extends ContraptionRenderInfo { private final ContraptionLighter lighter; - private final Map renderLayers = new HashMap<>(); + // private final Map renderLayers = new HashMap<>(); private final Matrix4f modelViewPartial = new Matrix4f(); private final ContraptionInstanceWorld instanceWorld; @@ -65,43 +46,43 @@ public class FlwContraption extends ContraptionRenderInfo { return lighter; } - public void renderStructureLayer(RenderType layer, ContraptionProgram shader) { - ArrayModelRenderer structure = renderLayers.get(layer); - if (structure != null) { - setup(shader); - structure.draw(); - } - } +// public void renderStructureLayer(RenderType layer, ContraptionProgram shader) { +// ArrayModelRenderer structure = renderLayers.get(layer); +// if (structure != null) { +// setup(shader); +// structure.draw(); +// } +// } - public void renderInstanceLayer(RenderLayerEvent event) { + public void renderInstanceLayer(RenderStageEvent event) { - event.stack.pushPose(); - float partialTicks = AnimationTickHolder.getPartialTicks(); - AbstractContraptionEntity entity = contraption.entity; - double x = Mth.lerp(partialTicks, entity.xOld, entity.getX()); - double y = Mth.lerp(partialTicks, entity.yOld, entity.getY()); - double z = Mth.lerp(partialTicks, entity.zOld, entity.getZ()); - event.stack.translate(x - event.camX, y - event.camY, z - event.camZ); - ContraptionMatrices.transform(event.stack, getMatrices().getModel()); - instanceWorld.engine.render(SerialTaskEngine.INSTANCE, event); - - event.stack.popPose(); +// event.stack.pushPose(); +// float partialTicks = AnimationTickHolder.getPartialTicks(); +// AbstractContraptionEntity entity = contraption.entity; +// double x = Mth.lerp(partialTicks, entity.xOld, entity.getX()); +// double y = Mth.lerp(partialTicks, entity.yOld, entity.getY()); +// double z = Mth.lerp(partialTicks, entity.zOld, entity.getZ()); +// event.stack.translate(x - event.camX, y - event.camY, z - event.camZ); +// ContraptionMatrices.transform(event.stack, getMatrices().getModel()); +// instanceWorld.engine.render(SerialTaskEngine.INSTANCE, event); +// +// event.stack.popPose(); } public void beginFrame(BeginFrameEvent event) { - super.beginFrame(event); - - modelViewPartial.identity(); - modelViewPartialReady = false; - - if (!isVisible()) return; - - instanceWorld.blockEntityInstanceManager.beginFrame(SerialTaskEngine.INSTANCE, event.getCamera()); - - Vec3 cameraPos = event.getCameraPos(); - - lightBox = lighter.lightVolume.toAABB() - .move(-cameraPos.x, -cameraPos.y, -cameraPos.z); +// super.beginFrame(event); +// +// modelViewPartial.identity(); +// modelViewPartialReady = false; +// +// if (!isVisible()) return; +// +// instanceWorld.blockEntityInstanceManager.beginFrame(SerialTaskEngine.INSTANCE, event.getCamera()); +// +// Vec3 cameraPos = event.getCameraPos(); +// +// lightBox = lighter.lightVolume.toAABB() +// .move(-cameraPos.x, -cameraPos.y, -cameraPos.z); } @Override @@ -114,59 +95,59 @@ public class FlwContraption extends ContraptionRenderInfo { } } - void setup(ContraptionProgram shader) { - if (!modelViewPartialReady || lightBox == null) return; - shader.bind(modelViewPartial, lightBox); - lighter.lightVolume.bind(); - } +// void setup(ContraptionProgram shader) { +// if (!modelViewPartialReady || lightBox == null) return; +// shader.bind(modelViewPartial, lightBox); +// lighter.lightVolume.bind(); +// } public void invalidate() { - for (ArrayModelRenderer renderer : renderLayers.values()) { - renderer.delete(); - renderer.getModel().delete(); - } - renderLayers.clear(); - - lighter.delete(); - - instanceWorld.delete(); +// for (ArrayModelRenderer renderer : renderLayers.values()) { +// renderer.delete(); +// renderer.getModel().delete(); +// } +// renderLayers.clear(); +// +// lighter.delete(); +// +// instanceWorld.delete(); } private void buildLayers() { - for (ArrayModelRenderer renderer : renderLayers.values()) { - renderer.delete(); - renderer.getModel().delete(); - } - - renderLayers.clear(); - - List blockLayers = RenderType.chunkBufferLayers(); - Collection renderedBlocks = contraption.getRenderedBlocks(); - - for (RenderType layer : blockLayers) { - Model layerModel = new WorldModelBuilder(layer).withRenderWorld(renderWorld) - .withModelData(contraption.modelData) - .withBlocks(renderedBlocks) - .toModel(layer + "_" + contraption.entity.getId()); - renderLayers.put(layer, new ArrayModelRenderer(layerModel)); - } +// for (ArrayModelRenderer renderer : renderLayers.values()) { +// renderer.delete(); +// renderer.getModel().delete(); +// } +// +// renderLayers.clear(); +// +// List blockLayers = RenderType.chunkBufferLayers(); +// Collection renderedBlocks = contraption.getRenderedBlocks(); +// +// for (RenderType layer : blockLayers) { +// Model layerModel = new WorldModelBuilder(layer).withRenderWorld(renderWorld) +// .withModelData(contraption.modelData) +// .withBlocks(renderedBlocks) +// .toModel(layer + "_" + contraption.entity.getId()); +// renderLayers.put(layer, new ArrayModelRenderer(layerModel)); +// } } private void buildInstancedBlockEntities() { - for (BlockEntity be : contraption.maybeInstancedBlockEntities) { - if (!InstancedRenderRegistry.canInstance(be.getType())) { - continue; - } - - Level world = be.getLevel(); - be.setLevel(renderWorld); - instanceWorld.blockEntityInstanceManager.add(be); - be.setLevel(world); - } +// for (BlockEntity be : contraption.maybeInstancedBlockEntities) { +// if (!InstancedRenderRegistry.canInstance(be.getType())) { +// continue; +// } +// +// Level world = be.getLevel(); +// be.setLevel(renderWorld); +// instanceWorld.blockEntityInstanceManager.add(be); +// be.setLevel(world); +// } } private void buildActors() { - contraption.getActors().forEach(instanceWorld.blockEntityInstanceManager::createActor); +// contraption.getActors().forEach(instanceWorld.blockEntityInstanceManager::createActor); } public static void setupModelViewPartial(Matrix4f matrix, Matrix4f modelMatrix, AbstractContraptionEntity entity, double camX, double camY, double camZ, float pt) { @@ -178,37 +159,37 @@ public class FlwContraption extends ContraptionRenderInfo { } public void tick() { - instanceWorld.blockEntityInstanceManager.tick(); +// instanceWorld.blockEntityInstanceManager.tick(); } public static class ContraptionInstanceWorld { - private final Engine engine; - private final ContraptionInstanceManager blockEntityInstanceManager; +// private final Engine engine; +// private final ContraptionInstanceManager blockEntityInstanceManager; public ContraptionInstanceWorld(FlwContraption parent) { - switch (Backend.getBackendType()) { - case INSTANCING -> { - InstancingEngine engine = InstancingEngine.builder(CreateContexts.CWORLD) - .setGroupFactory(ContraptionGroup.forContraption(parent)) - .setIgnoreOriginCoordinate(true) - .build(); - blockEntityInstanceManager = new ContraptionInstanceManager(engine, parent.renderWorld, parent.contraption); - engine.addListener(blockEntityInstanceManager); - - this.engine = engine; - } - case BATCHING -> { - engine = new BatchingEngine(); - blockEntityInstanceManager = new ContraptionInstanceManager(engine, parent.renderWorld, parent.contraption); - } - default -> throw new IllegalArgumentException("Unknown engine type"); - } +// switch (Backend.getBackendType()) { +// case INSTANCING -> { +// InstancingEngine engine = InstancingEngine.builder(CreateContexts.CWORLD) +// .setGroupFactory(ContraptionGroup.forContraption(parent)) +// .setIgnoreOriginCoordinate(true) +// .build(); +// blockEntityInstanceManager = new ContraptionInstanceManager(engine, parent.renderWorld, parent.contraption); +// engine.addListener(blockEntityInstanceManager); +// +// this.engine = engine; +// } +// case BATCHING -> { +// engine = new BatchingEngine(); +// blockEntityInstanceManager = new ContraptionInstanceManager(engine, parent.renderWorld, parent.contraption); +// } +// default -> throw new IllegalArgumentException("Unknown engine type"); +// } } public void delete() { - engine.delete(); - blockEntityInstanceManager.invalidate(); +// engine.delete(); +// blockEntityInstanceManager.invalidate(); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java index 47a58f3802..9b2d3139ef 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java @@ -1,21 +1,7 @@ package com.simibubi.create.content.contraptions.render; -import static org.lwjgl.opengl.GL11.glBindTexture; -import static org.lwjgl.opengl.GL12.GL_TEXTURE_3D; - -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.RenderLayer; -import com.jozufozu.flywheel.backend.gl.GlStateTracker; -import com.jozufozu.flywheel.backend.gl.GlTextureUnit; -import com.jozufozu.flywheel.config.BackendType; -import com.jozufozu.flywheel.core.Formats; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.compile.ProgramContext; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.event.RenderLayerEvent; -import com.jozufozu.flywheel.util.Textures; +import com.jozufozu.flywheel.api.event.RenderStageEvent; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.foundation.render.CreateContexts; import net.minecraft.world.level.LevelAccessor; @@ -35,54 +21,55 @@ public class FlwContraptionManager extends ContraptionRenderingWorld extends ContraptionLigh if (getVolume().volume() > AllConfigs.client().maxContraptionLightVolume.get()) return false; - ImmutableBox contraptionBounds = getContraptionBounds(); + Box contraptionBounds = getContraptionBounds(); if (bounds.sameAs(contraptionBounds, 2)) { return false; @@ -30,8 +30,8 @@ public class NonStationaryLighter extends ContraptionLigh } @Override - public GridAlignedBB getContraptionBounds() { - GridAlignedBB bb = GridAlignedBB.from(contraption.bounds); + public MutableBox getContraptionBounds() { + MutableBox bb = MutableBox.from(contraption.bounds); bb.translate(contraption.entity.blockPosition()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java index 2a779d7aa1..2972ab03b8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.event.RenderLayerEvent; +import com.jozufozu.flywheel.api.event.RenderStageEvent; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.Pair; import net.minecraft.client.renderer.RenderType; @@ -20,7 +20,7 @@ public class SBBContraptionManager extends ContraptionRenderingWorld .isGui3d(); ms.pushPose(); - TransformStack.cast(ms) - .centre() + TransformStack.of(ms) + .center() .rotate(Direction.UP, (face == AttachFace.CEILING ? Mth.PI : 0) + AngleHelper.rad(180 + AngleHelper.horizontalAngle(facing))) .rotate(Direction.EAST, diff --git a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java index 5d1338066d..5c6e10a068 100644 --- a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.decoration.slidingDoor; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java b/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java index 78e9ea9c5e..7a301b0644 100644 --- a/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.decoration.steamWhistle; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.decoration.steamWhistle.WhistleBlock.WhistleSize; @@ -40,9 +40,9 @@ public class WhistleRenderer extends SafeBlockEntityRenderer } CachedBufferer.partial(mouth, blockState) - .centre() + .center() .rotateY(AngleHelper.horizontalAngle(direction)) - .unCentre() + .uncenter() .translate(0, offset * 4 / 16f, 0) .light(light) .renderInto(ms, buffer.getBuffer(RenderType.solid())); diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java index 11bc6e2dd1..d6992b2401 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java @@ -59,9 +59,9 @@ public class BacktankArmorLayer .light(light) .renderInto(ms, buffer.getBuffer(renderType)); - cogs.centre() + cogs.center() .rotateY(180) - .unCentre() + .uncenter() .translate(0, 6.5f / 16, 11f / 16) .rotate(Direction.EAST, AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360)) .translate(0, -6.5f / 16, -11f / 16); @@ -90,5 +90,5 @@ public class BacktankArmorLayer BacktankArmorLayer layer = new BacktankArmorLayer<>(livingRenderer); livingRenderer.addLayer((BacktankArmorLayer) layer); } - + } diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java index c382e3ff5c..cd885751fe 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java @@ -1,19 +1,18 @@ package com.simibubi.create.content.equipment.armor; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; public class BacktankInstance extends SingleRotatingInstance { - public BacktankInstance(MaterialManager materialManager, BacktankBlockEntity blockEntity) { + public BacktankInstance(VisualizationContext materialManager, BacktankBlockEntity blockEntity) { super(materialManager, blockEntity); } @Override - protected Instancer getModel() { - return getRotatingMaterial().getModel(BacktankRenderer.getShaftModel(blockState), blockState); + protected Model model() { + return Models.partial(BacktankRenderer.getShaftModel(blockState)); } - } diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java index 11f52aab59..5f027d0223 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.armor; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; @@ -28,12 +28,12 @@ public class BacktankRenderer extends KineticBlockEntityRenderer { } int itemLight = Mth.floor(sl + .5) << 20 | (Mth.floor(bl + .5) & 0xf) << 4; - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(vertical ? 0 : -yaw) .rotateX(fakeNormalXRotation); Matrix3f copy = new Matrix3f(ms.last() @@ -69,7 +69,7 @@ public class BlueprintRenderer extends EntityRenderer { ms.popPose(); ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(-yaw) .rotateX(entity.getXRot()) .translate(0, 0, 1 / 32f + .001); diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java index 72d638afd7..85ca959171 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.equipment.extendoGrip; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.Create; @@ -30,7 +30,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { @Override protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - TransformStack stacker = TransformStack.cast(ms); + TransformStack stacker = TransformStack.of(ms); float animation = 0.25f; boolean leftHand = transformType == ItemDisplayContext.FIRST_PERSON_LEFT_HAND; boolean rightHand = transformType == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND; diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java index 150c32019e..cf35ea80f2 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.equipment.extendoGrip; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; @@ -65,7 +65,7 @@ public class ExtendoGripRenderHandler { return; PoseStack ms = event.getPoseStack(); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); AbstractClientPlayer abstractclientplayerentity = mc.player; RenderSystem.setShaderTexture(0, abstractclientplayerentity.getSkinTextureLocation()); diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java index 76a309f036..b0ff771ebd 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.equipment.potatoCannon; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; @@ -59,7 +59,7 @@ public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer { PoseStack localMs = new PoseStack(); localMs.translate(-1 / 4f, -1 / 4f, 1); localMs.scale(.5f, .5f, .5f); - TransformStack.cast(localMs) + TransformStack.of(localMs) .rotateY(-34); itemRenderer.renderStatic(ammo, ItemDisplayContext.GUI, light, OverlayTexture.NO_OVERLAY, localMs, buffer, mc.level, 0); diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java index 4e437fdab5..f2b6ff72fa 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.potatoCannon; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; import com.simibubi.create.content.equipment.zapper.ShootableGadgetRenderHandler; @@ -49,14 +49,14 @@ public class PotatoCannonRenderHandler extends ShootableGadgetRenderHandler { protected void transformTool(PoseStack ms, float flip, float equipProgress, float recoil, float pt) { ms.translate(flip * -.1f, 0, .14f); ms.scale(.75f, .75f, .75f); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(recoil * 80); } @Override protected void transformHand(PoseStack ms, float flip, float equipProgress, float recoil, float pt) { ms.translate(flip * -.09, -.275, -.25); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateZ(flip * -10); } diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java index 99d301c532..dea6bd37ef 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.equipment.potatoCannon; import static com.simibubi.create.content.equipment.potatoCannon.PotatoProjectileRenderMode.entityRandom; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.AngleHelper; @@ -32,7 +32,7 @@ public interface PotatoProjectileRenderMode { .getCenter() .subtract(p1); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(AngleHelper.deg(Mth.atan2(diff.x, diff.z)) + 180) .rotateX(AngleHelper.deg(Mth.atan2(diff.y, Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); } @@ -47,7 +47,7 @@ public interface PotatoProjectileRenderMode { @OnlyIn(Dist.CLIENT) public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { super.transform(ms, entity, pt); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateZ((entity.tickCount + pt) * 2 * entityRandom(entity, 16)) .rotateX((entity.tickCount + pt) * entityRandom(entity, 32)); } @@ -68,11 +68,11 @@ public interface PotatoProjectileRenderMode { @OnlyIn(Dist.CLIENT) public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { Vec3 diff = entity.getDeltaMovement(); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(AngleHelper.deg(Mth.atan2(diff.x, diff.z))) .rotateX(270 + AngleHelper.deg(Mth.atan2(diff.y, -Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY((entity.tickCount + pt) * 20 * spin + entityRandom(entity, 360)) .rotateZ(-spriteAngleOffset); } @@ -90,7 +90,7 @@ public interface PotatoProjectileRenderMode { @Override @OnlyIn(Dist.CLIENT) public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { - TransformStack.cast(ms).rotateY(AngleHelper.deg(Mth.atan2(offset.x, offset.z))); + TransformStack.of(ms).rotateY(AngleHelper.deg(Mth.atan2(offset.x, offset.z))); } } diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java index 2379f2a3e6..82866bb22c 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.symmetryWand; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java index 9a9172cca1..87b8c55be8 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; @@ -97,10 +97,10 @@ public class CrossPlaneMirror extends SymmetryMirror { @Override public void applyModelTransform(PoseStack ms) { super.applyModelTransform(ms); - TransformStack.cast(ms) - .centre() + TransformStack.of(ms) + .center() .rotateY(((Align) orientation) == Align.Y ? 0 : 45) - .unCentre(); + .uncenter(); } @Override diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java index cf30a04fdb..512d17e05c 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java index b68cda9e76..192b15c2d4 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; @@ -93,10 +93,10 @@ public class PlaneMirror extends SymmetryMirror { @Override public void applyModelTransform(PoseStack ms) { super.applyModelTransform(ms); - TransformStack.cast(ms) - .centre() + TransformStack.of(ms) + .center() .rotateY(((Align) orientation) == Align.XY ? 0 : 90) - .unCentre(); + .uncenter(); } @Override diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java index a61430c791..9b70ad0e87 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java index 73ea306f43..d668639632 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java index 612651fe58..fdee489ca0 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java @@ -6,7 +6,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; @@ -126,7 +126,7 @@ public class RadialToolboxMenu extends AbstractSimiScreen { for (int slot = 0; slot < 8; slot++) { ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateZ(slot * 45 - 45) .translate(0, -40 + (10 * (1 - fade) * (1 - fade)), 0) .rotateZ(-slot * 45 + 45); diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java index 375c63cf0c..891abe61da 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java @@ -1,25 +1,28 @@ package com.simibubi.create.content.equipment.toolbox; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.data.ModelData; -public class ToolBoxInstance extends BlockEntityInstance implements DynamicInstance { +public class ToolBoxInstance extends AbstractBlockEntityVisual implements DynamicVisual { private final Direction facing; - private ModelData lid; - private ModelData[] drawers; + private TransformedInstance lid; + private TransformedInstance[] drawers; - public ToolBoxInstance(MaterialManager materialManager, ToolboxBlockEntity blockEntity) { + public ToolBoxInstance(VisualizationContext materialManager, ToolboxBlockEntity blockEntity) { super(materialManager, blockEntity); facing = blockState.getValue(ToolboxBlock.FACING) @@ -27,26 +30,20 @@ public class ToolBoxInstance extends BlockEntityInstance imp } @Override - public void init() { - BlockState blockState = blockEntity.getBlockState(); + public void init(float pt) { + Instancer drawerModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_DRAWER), RenderStage.AFTER_BLOCK_ENTITIES); - Instancer drawerModel = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.TOOLBOX_DRAWER, blockState); - - drawers = new ModelData[]{drawerModel.createInstance(), drawerModel.createInstance()}; - lid = materialManager.defaultCutout() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor()), blockState) + drawers = new TransformedInstance[]{drawerModel.createInstance(), drawerModel.createInstance()}; + lid = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor())), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); } @Override - public void remove() { + protected void _delete() { lid.delete(); - for (ModelData drawer : drawers) { + for (var drawer : drawers) { drawer.delete(); } } @@ -60,20 +57,20 @@ public class ToolBoxInstance extends BlockEntityInstance imp float drawerOffset = blockEntity.drawers.getValue(partialTicks); lid.loadIdentity() - .translate(instancePos) - .centre() + .translate(getVisualPosition()) + .center() .rotateY(-facing.toYRot()) - .unCentre() + .uncenter() .translate(0, 6 / 16f, 12 / 16f) .rotateX(135 * lidAngle) .translateBack(0, 6 / 16f, 12 / 16f); for (int offset : Iterate.zeroAndOne) { drawers[offset].loadIdentity() - .translate(instancePos) - .centre() + .translate(getVisualPosition()) + .center() .rotateY(-facing.toYRot()) - .unCentre() + .uncenter() .translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)); } } diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java index df2a4cf680..1683e63cc6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java @@ -35,9 +35,9 @@ public class ToolboxRenderer extends SmartBlockEntityRenderer { private void renderToolbox(GuiGraphics graphics, int x, int y, float partialTicks) { PoseStack ms = graphics.pose(); - TransformStack.cast(ms) + TransformStack.of(ms) .pushPose() .translate(x, y, 100) .scale(50) @@ -140,7 +140,7 @@ public class ToolboxScreen extends AbstractSimiContainerScreen { .getDefaultState()) .render(graphics); - TransformStack.cast(ms) + TransformStack.of(ms) .pushPose() .translate(0, -6 / 16f, 12 / 16f) .rotateX(-105 * menu.contentHolder.lid.getValue(partialTicks)) diff --git a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java index c988b45ce6..36d9a016cb 100644 --- a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.wrench; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java index ce66cee736..6bc50a75ba 100644 --- a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.equipment.zapper.terrainzapper; import static java.lang.Math.max; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; @@ -44,7 +44,7 @@ public class WorldshaperItemRenderer extends ZapperItemRenderer { // Core glows float multiplier; - if (mainHand || offHand) + if (mainHand || offHand) multiplier = animation; else multiplier = Mth.sin(worldTime * 5); diff --git a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java index 39781051be..34b40d21c4 100644 --- a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.fluids.drain; import java.util.Random; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.content.fluids.transfer.GenericItemEmptying; @@ -47,7 +47,7 @@ public class ItemDrainRenderer extends SmartBlockEntityRenderer implements DynamicInstance { +public class FluidValveInstance extends ShaftInstance implements DynamicVisual { - protected ModelData pointer; + protected TransformedInstance pointer; protected boolean settled; protected final double xRot; protected final double yRot; protected final int pointerRotationOffset; - public FluidValveInstance(MaterialManager dispatcher, FluidValveBlockEntity blockEntity) { + public FluidValveInstance(VisualizationContext dispatcher, FluidValveBlockEntity blockEntity) { super(dispatcher, blockEntity); Direction facing = blockState.getValue(FluidValveBlock.FACING); @@ -37,15 +40,13 @@ public class FluidValveInstance extends ShaftInstance imp pointerRotationOffset = twist ? 90 : 0; settled = false; - pointer = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.FLUID_VALVE_POINTER, blockState).createInstance(); + pointer = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); transformPointer(); } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { if (blockEntity.pointer.settled() && settled) return; @@ -58,12 +59,12 @@ public class FluidValveInstance extends ShaftInstance imp settled = (value == 0 || value == 1) && blockEntity.pointer.settled(); pointer.loadIdentity() - .translate(getInstancePosition()) - .centre() + .translate(getVisualPosition()) + .center() .rotateY(yRot) .rotateX(xRot) .rotateY(pointerRotationOffset + pointerRotation) - .unCentre(); + .uncenter(); } @Override @@ -73,8 +74,8 @@ public class FluidValveInstance extends ShaftInstance imp } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); pointer.delete(); } } diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java index 70e0735735..a9a2c94819 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.pipes.valve; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -26,7 +26,7 @@ public class FluidValveRenderer extends KineticBlockEntityRenderer implements DynamicInstance { +public class PumpCogInstance extends SingleRotatingInstance implements DynamicVisual { - public PumpCogInstance(MaterialManager materialManager, PumpBlockEntity blockEntity) { + public PumpCogInstance(VisualizationContext materialManager, PumpBlockEntity blockEntity) { super(materialManager, blockEntity); } - - @Override - public void beginFrame() {} @Override - protected Instancer getModel() { + public void beginFrame(VisualFrameContext ctx) {} + + @Override + protected Model model() { BlockState referenceState = blockEntity.getBlockState(); Direction facing = referenceState.getValue(BlockStateProperties.FACING); - return getRotatingMaterial().getModel(AllPartialModels.MECHANICAL_PUMP_COG, referenceState, facing); + return Models.partial(AllPartialModels.MECHANICAL_PUMP_COG, facing); } - } diff --git a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java index 9c103dd94a..d13012a9bc 100644 --- a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.spout; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour; diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java index e1acc93ad6..74115fb2dc 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.tank; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -82,7 +82,7 @@ public class FluidTankRenderer extends SafeBlockEntityRenderer extends HalfShaftInstance { - public BackHalfShaftInstance(MaterialManager materialManager, T blockEntity) { + public BackHalfShaftInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java index 72b3767bea..471c381381 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java @@ -1,18 +1,9 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.api.MaterialManager; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; -import com.simibubi.create.foundation.render.AllMaterialSpecs; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; public class CutoutRotatingInstance extends SingleRotatingInstance { - public CutoutRotatingInstance(MaterialManager materialManager, T blockEntity) { + public CutoutRotatingInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); } - - @Override - protected Material getRotatingMaterial() { - return materialManager.defaultCutout() - .material(AllMaterialSpecs.ROTATING); - } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java index ce0b1f33df..4ba90b7de5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java @@ -1,25 +1,24 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class HalfShaftInstance extends SingleRotatingInstance { - public HalfShaftInstance(MaterialManager materialManager, T blockEntity) { + public HalfShaftInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); } - @Override - protected Instancer getModel() { - Direction dir = getShaftDirection(); - return getRotatingMaterial().getModel(AllPartialModels.SHAFT_HALF, blockState, dir); + @Override + protected Model model() { + return Models.partial(AllPartialModels.SHAFT_HALF, getShaftDirection()); } - protected Direction getShaftDirection() { + protected Direction getShaftDirection() { return blockState.getValue(BlockStateProperties.FACING); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java index 297807d337..6f8a41f342 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java @@ -1,13 +1,13 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class HorizontalHalfShaftInstance extends HalfShaftInstance { - public HorizontalHalfShaftInstance(MaterialManager materialManager, T blockEntity) { + public HorizontalHalfShaftInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java index 09fe0c834d..ccd5d9946c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java @@ -7,7 +7,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.Create; import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; import com.simibubi.create.content.equipment.goggles.IHaveHoveringInformation; @@ -68,7 +68,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI private int validationCountdown; protected float lastStressApplied; protected float lastCapacityProvided; - + public SequenceContext sequenceContext; public KineticBlockEntity(BlockEntityType typeIn, BlockPos pos, BlockState state) { @@ -265,7 +265,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI effects.triggerOverStressedEffect(); if (clientPacket) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); } public float getGeneratedSpeed() { @@ -578,7 +578,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI public void requestModelDataUpdate() { super.requestModelDataUpdate(); if (!this.remove) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); } @OnlyIn(Dist.CLIENT) @@ -603,7 +603,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI public int getRotationAngleOffset(Axis axis) { return 0; } - + protected boolean syncSequenceContext() { return false; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java index 0cec4b1eca..3f63c92e4a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java @@ -1,64 +1,62 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel; import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; -import com.simibubi.create.foundation.render.AllMaterialSpecs; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; -public abstract class KineticBlockEntityInstance extends BlockEntityInstance { +public abstract class KineticBlockEntityInstance extends AbstractBlockEntityVisual { protected final Direction.Axis axis; - public KineticBlockEntityInstance(MaterialManager materialManager, T blockEntity) { + public KineticBlockEntityInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); axis = (blockState.getBlock() instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y; } - protected final void updateRotation(RotatingData instance) { + protected final void updateRotation(RotatingInstance instance) { updateRotation(instance, getRotationAxis(), getBlockEntitySpeed()); } - protected final void updateRotation(RotatingData instance, Direction.Axis axis) { + protected final void updateRotation(RotatingInstance instance, Direction.Axis axis) { updateRotation(instance, axis, getBlockEntitySpeed()); } - protected final void updateRotation(RotatingData instance, float speed) { + protected final void updateRotation(RotatingInstance instance, float speed) { updateRotation(instance, getRotationAxis(), speed); } - protected final void updateRotation(RotatingData instance, Direction.Axis axis, float speed) { + protected final void updateRotation(RotatingInstance instance, Direction.Axis axis, float speed) { instance.setRotationAxis(axis) .setRotationOffset(getRotationOffset(axis)) .setRotationalSpeed(speed) .setColor(blockEntity); } - protected final RotatingData setup(RotatingData key) { + protected final RotatingInstance setup(RotatingInstance key) { return setup(key, getRotationAxis(), getBlockEntitySpeed()); } - protected final RotatingData setup(RotatingData key, Direction.Axis axis) { + protected final RotatingInstance setup(RotatingInstance key, Direction.Axis axis) { return setup(key, axis, getBlockEntitySpeed()); } - protected final RotatingData setup(RotatingData key, float speed) { + protected final RotatingInstance setup(RotatingInstance key, float speed) { return setup(key, getRotationAxis(), speed); } - protected final RotatingData setup(RotatingData key, Direction.Axis axis, float speed) { + protected final RotatingInstance setup(RotatingInstance key, Direction.Axis axis, float speed) { key.setRotationAxis(axis) .setRotationalSpeed(speed) .setRotationOffset(getRotationOffset(axis)) .setColor(blockEntity) - .setPosition(getInstancePosition()); + .setPosition(getVisualPosition()); return key; } @@ -85,11 +83,6 @@ public abstract class KineticBlockEntityInstance e return shaft(getRotationAxis()); } - protected Material getRotatingMaterial() { - return materialManager.defaultSolid() - .material(AllMaterialSpecs.ROTATING); - } - public static BlockState shaft(Direction.Axis axis) { return AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, axis); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java index b5d8b9196b..e3cfc07fc9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.base; import org.apache.commons.lang3.ArrayUtils; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; @@ -46,7 +46,7 @@ public class KineticBlockEntityRenderer extends Sa @Override protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) return; + if (VisualizationManager.supportsVisualization(be.getLevel())) return; BlockState state = getRenderedBlockState(be); RenderType type = getRenderType(be, state); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java index 6649249bb3..8f38a49812 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import net.minecraft.world.level.block.state.BlockState; public class ShaftInstance extends SingleRotatingInstance { - public ShaftInstance(MaterialManager materialManager, T blockEntity) { + public ShaftInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java index 1a38e762a7..4f373d73e6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java @@ -1,26 +1,31 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; import net.minecraft.world.level.block.state.BlockState; public class SingleRotatingInstance extends KineticBlockEntityInstance { - protected RotatingData rotatingModel; + protected RotatingInstance rotatingModel; - public SingleRotatingInstance(MaterialManager materialManager, T blockEntity) { + public SingleRotatingInstance(VisualizationContext materialManager, T blockEntity) { super(materialManager, blockEntity); } @Override - public void init() { - rotatingModel = setup(getModel().createInstance()); + public void init(float pt) { + var instance = getModel().createInstance(); + rotatingModel = setup(instance); } @Override - public void update() { + public void update(float pt) { updateRotation(rotatingModel); } @@ -30,7 +35,7 @@ public class SingleRotatingInstance extends Kineti } @Override - public void remove() { + protected void _delete() { rotatingModel.delete(); } @@ -38,7 +43,11 @@ public class SingleRotatingInstance extends Kineti return blockState; } - protected Instancer getModel() { - return getRotatingMaterial().getModel(getRenderedBlockState()); + protected Instancer getModel() { + return instancerProvider.instancerr(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES); + } + + protected Model model() { + return Models.block(getRenderedBlockState()); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltData.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltInstance.java similarity index 67% rename from src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltData.java rename to src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltInstance.java index e00e96fe7f..42133eda52 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltData.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltInstance.java @@ -2,11 +2,13 @@ package com.simibubi.create.content.kinetics.base.flwdata; import org.joml.Quaternionf; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -public class BeltData extends KineticData { +public class BeltInstance extends KineticInstance { float qX; float qY; float qZ; @@ -19,16 +21,19 @@ public class BeltData extends KineticData { float maxV; byte scrollMult; - public BeltData setRotation(Quaternionf q) { + protected BeltInstance(InstanceType type, InstanceHandle handle) { + super(type, handle); + } + + public BeltInstance setRotation(Quaternionf q) { this.qX = q.x(); this.qY = q.y(); this.qZ = q.z(); this.qW = q.w(); - markDirty(); return this; } - public BeltData setScrollTexture(SpriteShiftEntry spriteShift) { + public BeltInstance setScrollTexture(SpriteShiftEntry spriteShift) { TextureAtlasSprite source = spriteShift.getOriginal(); TextureAtlasSprite target = spriteShift.getTarget(); @@ -38,15 +43,12 @@ public class BeltData extends KineticData { this.minV = target.getV0(); this.maxU = target.getU1(); this.maxV = target.getV1(); - markDirty(); return this; } - public BeltData setScrollMult(float scrollMult) { + public BeltInstance setScrollMult(float scrollMult) { this.scrollMult = (byte) (scrollMult * 127); - markDirty(); return this; } - } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java index 6be331b8c3..bbb4c31299 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java @@ -1,63 +1,53 @@ package com.simibubi.create.content.kinetics.base.flwdata; -import org.joml.Quaternionf; - -import com.jozufozu.flywheel.api.struct.Batched; -import com.jozufozu.flywheel.api.struct.Instanced; -import com.jozufozu.flywheel.api.struct.StructWriter; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.core.layout.BufferLayout; -import com.jozufozu.flywheel.core.model.ModelTransformer; -import com.jozufozu.flywheel.util.RenderMath; -import com.simibubi.create.content.kinetics.KineticDebugger; -import com.simibubi.create.foundation.render.AllInstanceFormats; -import com.simibubi.create.foundation.render.AllProgramSpecs; -import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.api.instance.InstanceWriter; +import com.jozufozu.flywheel.api.layout.Layout; +import com.jozufozu.flywheel.lib.layout.BufferLayout; +import com.simibubi.create.foundation.render.AllInstanceLayouts; +import com.simibubi.create.foundation.render.AllInstanceShaders; import net.minecraft.resources.ResourceLocation; -public class BeltType implements Instanced, Batched { +public class BeltType implements InstanceType { @Override - public BeltData create() { - return new BeltData(); + public BeltInstance create(InstanceHandle instanceHandle) { + return new BeltInstance(this, instanceHandle); + } + + @Override + public Layout layout() { + return null; + } + + @Override + public InstanceWriter getWriter() { + return BeltWriter.INSTANCE; + } + + @Override + public ResourceLocation vertexShader() { + return null; + } + + @Override + public ResourceLocation cullShader() { + return null; + } + + @Override + public BeltInstance create() { + return new BeltInstance(); } @Override public BufferLayout getLayout() { - return AllInstanceFormats.BELT; - } - - @Override - public StructWriter getWriter(VecBuffer backing) { - return new BeltWriterUnsafe(backing, this); + return AllInstanceLayouts.BELT; } @Override public ResourceLocation getProgramSpec() { - return AllProgramSpecs.BELT; - } - - @Override - public void transform(BeltData d, ModelTransformer.Params b) { - float spriteHeight = d.maxV - d.minV; - double scroll = d.rotationalSpeed * AnimationTickHolder.getRenderTime() / (31.5 * 16) + d.rotationOffset; - scroll = scroll - Math.floor(scroll); - scroll = scroll * spriteHeight * RenderMath.f(d.scrollMult); - - float finalScroll = (float) scroll; - b.shiftUV((builder, u, v) -> { - float targetU = u - d.sourceU + d.minU; - float targetV = v - d.sourceV + d.minV - + finalScroll; - builder.uv(targetU, targetV); - }); - - b.translate(d.x + 0.5, d.y + 0.5, d.z + 0.5) - .multiply(new Quaternionf(d.qX, d.qY, d.qZ, d.qW)) - .unCentre() - .light(d.getPackedLight()); - if (KineticDebugger.isActive()) { - b.color(d.r, d.g, d.b, d.a); - } + return AllInstanceShaders.BELT; } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java new file mode 100644 index 0000000000..1666b7b592 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java @@ -0,0 +1,23 @@ +package com.simibubi.create.content.kinetics.base.flwdata; + +import org.lwjgl.system.MemoryUtil; + +public class BeltWriter extends KineticWriter { + public static final BeltWriter INSTANCE = new BeltWriter(); + + @Override + public void write(long ptr, BeltInstance d) { + super.write(ptr, d); + MemoryUtil.memPutFloat(ptr + 26, d.qX); + MemoryUtil.memPutFloat(ptr + 30, d.qY); + MemoryUtil.memPutFloat(ptr + 34, d.qZ); + MemoryUtil.memPutFloat(ptr + 38, d.qW); + MemoryUtil.memPutFloat(ptr + 42, d.sourceU); + MemoryUtil.memPutFloat(ptr + 46, d.sourceV); + MemoryUtil.memPutFloat(ptr + 50, d.minU); + MemoryUtil.memPutFloat(ptr + 54, d.minV); + MemoryUtil.memPutFloat(ptr + 58, d.maxU); + MemoryUtil.memPutFloat(ptr + 62, d.maxV); + MemoryUtil.memPutByte(ptr + 66, d.scrollMult); + } +} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriterUnsafe.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriterUnsafe.java deleted file mode 100644 index 002e25e3ab..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriterUnsafe.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.api.struct.StructType; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; - -public class BeltWriterUnsafe extends KineticWriterUnsafe { - public BeltWriterUnsafe(VecBuffer backingBuffer, StructType vertexType) { - super(backingBuffer, vertexType); - } - - @Override - protected void writeInternal(BeltData d) { - super.writeInternal(d); - long addr = writePointer; - MemoryUtil.memPutFloat(addr + 26, d.qX); - MemoryUtil.memPutFloat(addr + 30, d.qY); - MemoryUtil.memPutFloat(addr + 34, d.qZ); - MemoryUtil.memPutFloat(addr + 38, d.qW); - MemoryUtil.memPutFloat(addr + 42, d.sourceU); - MemoryUtil.memPutFloat(addr + 46, d.sourceV); - MemoryUtil.memPutFloat(addr + 50, d.minU); - MemoryUtil.memPutFloat(addr + 54, d.minV); - MemoryUtil.memPutFloat(addr + 58, d.maxU); - MemoryUtil.memPutFloat(addr + 62, d.maxV); - MemoryUtil.memPutByte(addr + 66, d.scrollMult); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticData.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticInstance.java similarity index 55% rename from src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticData.java rename to src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticInstance.java index d305fffd69..680ca660b4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticData.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticInstance.java @@ -2,44 +2,48 @@ package com.simibubi.create.content.kinetics.base.flwdata; import org.joml.Vector3f; -import com.jozufozu.flywheel.core.materials.BasicData; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.lib.instance.ColoredLitInstance; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.foundation.utility.Color; import net.minecraft.core.BlockPos; -public class KineticData extends BasicData { +public class KineticInstance extends ColoredLitInstance { float x; float y; float z; float rotationalSpeed; float rotationOffset; - public KineticData setPosition(BlockPos pos) { + protected KineticInstance(InstanceType type, InstanceHandle handle) { + super(type, handle); + } + + public KineticInstance setPosition(BlockPos pos) { return setPosition(pos.getX(), pos.getY(), pos.getZ()); } - public KineticData setPosition(Vector3f pos) { + public KineticInstance setPosition(Vector3f pos) { return setPosition(pos.x(), pos.y(), pos.z()); } - public KineticData setPosition(float x, float y, float z) { + public KineticInstance setPosition(float x, float y, float z) { this.x = x; this.y = y; this.z = z; - markDirty(); return this; } - public KineticData nudge(float x, float y, float z) { + public KineticInstance nudge(float x, float y, float z) { this.x += x; this.y += y; this.z += z; - markDirty(); return this; } - public KineticData setColor(KineticBlockEntity blockEntity) { + public KineticInstance setColor(KineticBlockEntity blockEntity) { if (blockEntity.hasNetwork()) { setColor(Color.generateFromLong(blockEntity.network)); }else { @@ -48,17 +52,17 @@ public class KineticData extends BasicData { return this; } - public KineticData setColor(Color c) { + public KineticInstance setColor(Color c) { setColor(c.getRed(), c.getGreen(), c.getBlue()); return this; } - public KineticData setRotationalSpeed(float rotationalSpeed) { + public KineticInstance setRotationalSpeed(float rotationalSpeed) { this.rotationalSpeed = rotationalSpeed; return this; } - public KineticData setRotationOffset(float rotationOffset) { + public KineticInstance setRotationOffset(float rotationOffset) { this.rotationOffset = rotationOffset; return this; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java new file mode 100644 index 0000000000..85578c7899 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java @@ -0,0 +1,17 @@ +package com.simibubi.create.content.kinetics.base.flwdata; + +import org.lwjgl.system.MemoryUtil; + +import com.jozufozu.flywheel.lib.instance.ColoredLitWriter; + +public abstract class KineticWriter extends ColoredLitWriter { + @Override + public void write(long ptr, D d) { + super.write(ptr, d); + MemoryUtil.memPutFloat(ptr + 6, d.x); + MemoryUtil.memPutFloat(ptr + 10, d.y); + MemoryUtil.memPutFloat(ptr + 14, d.z); + MemoryUtil.memPutFloat(ptr + 18, d.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 22, d.rotationOffset); + } +} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriterUnsafe.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriterUnsafe.java deleted file mode 100644 index 3787e73d79..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriterUnsafe.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.api.struct.StructType; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.core.materials.BasicWriterUnsafe; - -public abstract class KineticWriterUnsafe extends BasicWriterUnsafe { - public KineticWriterUnsafe(VecBuffer backingBuffer, StructType vertexType) { - super(backingBuffer, vertexType); - } - - @Override - protected void writeInternal(D d) { - super.writeInternal(d); - long addr = writePointer; - MemoryUtil.memPutFloat(addr + 6, d.x); - MemoryUtil.memPutFloat(addr + 10, d.y); - MemoryUtil.memPutFloat(addr + 14, d.z); - MemoryUtil.memPutFloat(addr + 18, d.rotationalSpeed); - MemoryUtil.memPutFloat(addr + 22, d.rotationOffset); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingData.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingInstance.java similarity index 52% rename from src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingData.java rename to src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingInstance.java index 5d1db80701..e1a1dedf6c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingData.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingInstance.java @@ -2,27 +2,33 @@ package com.simibubi.create.content.kinetics.base.flwdata; import org.joml.Vector3f; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; + import net.minecraft.core.Direction; -public class RotatingData extends KineticData { +public class RotatingInstance extends KineticInstance { byte rotationAxisX; byte rotationAxisY; byte rotationAxisZ; - public RotatingData setRotationAxis(Direction.Axis axis) { + protected RotatingInstance(InstanceType type, InstanceHandle handle) { + super(type, handle); + } + + public RotatingInstance setRotationAxis(Direction.Axis axis) { Direction orientation = Direction.get(Direction.AxisDirection.POSITIVE, axis); return setRotationAxis(orientation.step()); } - public RotatingData setRotationAxis(Vector3f axis) { + public RotatingInstance setRotationAxis(Vector3f axis) { return setRotationAxis(axis.x(), axis.y(), axis.z()); } - public RotatingData setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) { + public RotatingInstance setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) { this.rotationAxisX = (byte) (rotationAxisX * 127); this.rotationAxisY = (byte) (rotationAxisY * 127); this.rotationAxisZ = (byte) (rotationAxisZ * 127); - markDirty(); return this; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java index c0d444c2e9..4a5a54498d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java @@ -1,55 +1,49 @@ package com.simibubi.create.content.kinetics.base.flwdata; -import org.joml.Vector3f; - -import com.jozufozu.flywheel.api.struct.Batched; -import com.jozufozu.flywheel.api.struct.Instanced; -import com.jozufozu.flywheel.api.struct.StructWriter; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.core.layout.BufferLayout; -import com.jozufozu.flywheel.core.model.ModelTransformer; -import com.jozufozu.flywheel.util.RenderMath; -import com.mojang.math.Axis; -import com.simibubi.create.content.kinetics.KineticDebugger; -import com.simibubi.create.foundation.render.AllInstanceFormats; -import com.simibubi.create.foundation.render.AllProgramSpecs; -import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.api.instance.InstanceWriter; +import com.jozufozu.flywheel.api.layout.Layout; +import com.jozufozu.flywheel.lib.layout.BufferLayout; +import com.simibubi.create.foundation.render.AllInstanceLayouts; +import com.simibubi.create.foundation.render.AllInstanceShaders; import net.minecraft.resources.ResourceLocation; -public class RotatingType implements Instanced, Batched { +public class RotatingType implements InstanceType { + @Override - public RotatingData create() { - return new RotatingData(); + public RotatingInstance create(InstanceHandle instanceHandle) { + return new RotatingInstance(this, instanceHandle); + } + + @Override + public Layout layout() { + return null; + } + + @Override + public InstanceWriter getWriter() { + return RotatingWriter.INSTANCE; + } + + @Override + public ResourceLocation vertexShader() { + return null; + } + + @Override + public ResourceLocation cullShader() { + return null; } @Override public BufferLayout getLayout() { - return AllInstanceFormats.ROTATING; - } - - @Override - public StructWriter getWriter(VecBuffer backing) { - return new RotatingWriterUnsafe(backing, this); + return AllInstanceLayouts.ROTATING; } @Override public ResourceLocation getProgramSpec() { - return AllProgramSpecs.ROTATING; - } - - @Override - public void transform(RotatingData d, ModelTransformer.Params b) { - float angle = ((AnimationTickHolder.getRenderTime() * d.rotationalSpeed * 3f / 10 + d.rotationOffset) % 360); - - Axis axis = Axis.of(new Vector3f(RenderMath.f(d.rotationAxisX), RenderMath.f(d.rotationAxisY), RenderMath.f(d.rotationAxisZ))); - b.light(d.getPackedLight()) - .translate(d.x + 0.5, d.y + 0.5, d.z + 0.5) - .multiply(axis.rotationDegrees(angle)) - .unCentre(); - - if (KineticDebugger.isActive()) { - b.color(d.r, d.g, d.b, d.a); - } + return AllInstanceShaders.ROTATING; } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java new file mode 100644 index 0000000000..34ebfd86d1 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java @@ -0,0 +1,15 @@ +package com.simibubi.create.content.kinetics.base.flwdata; + +import org.lwjgl.system.MemoryUtil; + +public class RotatingWriter extends KineticWriter { + public static final RotatingWriter INSTANCE = new RotatingWriter(); + + @Override + public void write(long ptr, RotatingInstance d) { + super.write(ptr, d); + MemoryUtil.memPutByte(ptr + 26, d.rotationAxisX); + MemoryUtil.memPutByte(ptr + 27, d.rotationAxisY); + MemoryUtil.memPutByte(ptr + 28, d.rotationAxisZ); + } +} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriterUnsafe.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriterUnsafe.java deleted file mode 100644 index 8b043be7a4..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriterUnsafe.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.api.struct.StructType; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; - -public class RotatingWriterUnsafe extends KineticWriterUnsafe { - public RotatingWriterUnsafe(VecBuffer backingBuffer, StructType vertexType) { - super(backingBuffer, vertexType); - } - - @Override - protected void writeInternal(RotatingData d) { - super.writeInternal(d); - long addr = writePointer; - MemoryUtil.memPutByte(addr + 26, d.rotationAxisX); - MemoryUtil.memPutByte(addr + 27, d.rotationAxisY); - MemoryUtil.memPutByte(addr + 28, d.rotationAxisZ); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java index 9b71db8673..7e4c5f77cd 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java @@ -12,10 +12,10 @@ import java.util.Map; import java.util.Optional; import java.util.function.Function; -import com.jozufozu.flywheel.light.LightListener; -import com.jozufozu.flywheel.light.LightUpdater; -import com.jozufozu.flywheel.util.box.GridAlignedBB; -import com.jozufozu.flywheel.util.box.ImmutableBox; +import com.jozufozu.flywheel.lib.box.Box; +import com.jozufozu.flywheel.lib.box.MutableBox; +import com.jozufozu.flywheel.lib.light.LightListener; +import com.jozufozu.flywheel.lib.light.LightUpdater; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -195,7 +195,7 @@ public class BeltBlockEntity extends KineticBlockEntity { if (isController()) getInventory().ejectAll(); } - + @Override public void invalidate() { super.invalidate(); @@ -282,7 +282,7 @@ public class BeltBlockEntity extends KineticBlockEntity { return false; if (level.isClientSide()) return true; - + for (BlockPos blockPos : BeltBlock.getBeltChain(level, getController())) { BeltBlockEntity belt = BeltHelper.getSegmentBE(level, blockPos); if (belt == null) @@ -291,7 +291,7 @@ public class BeltBlockEntity extends KineticBlockEntity { belt.setChanged(); belt.sendData(); } - + return true; } @@ -430,7 +430,7 @@ public class BeltBlockEntity extends KineticBlockEntity { public void setCasingType(CasingType type) { if (casing == type) return; - + BlockState blockState = getBlockState(); boolean shouldBlockHaveCasing = type != CasingType.NONE; @@ -441,7 +441,7 @@ public class BeltBlockEntity extends KineticBlockEntity { level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 16); return; } - + if (casing != CasingType.NONE) level.levelEvent(2001, worldPosition, Block.getId(casing == CasingType.ANDESITE ? AllBlocks.ANDESITE_CASING.getDefaultState() @@ -463,7 +463,7 @@ public class BeltBlockEntity extends KineticBlockEntity { return false; return getMovementFacing() != side.getOpposite(); } - + private boolean isOccupied(Direction side) { BeltBlockEntity nextBeltController = getControllerBE(); if (nextBeltController == null) @@ -605,9 +605,9 @@ public class BeltBlockEntity extends KineticBlockEntity { } @Override - public GridAlignedBB getVolume() { + public Box getVolume() { BlockPos endPos = BeltHelper.getPositionForOffset(BeltBlockEntity.this, beltLength - 1); - GridAlignedBB bb = GridAlignedBB.from(worldPosition, endPos); + var bb = MutableBox.from(worldPosition, endPos); bb.fixMinMax(); return bb; } @@ -618,13 +618,13 @@ public class BeltBlockEntity extends KineticBlockEntity { } @Override - public void onLightUpdate(LightLayer type, ImmutableBox changed) { + public void onLightUpdate(LightLayer type, Box changed) { if (remove) return; if (level == null) return; - GridAlignedBB beltVolume = getVolume(); + Box beltVolume = getVolume(); if (beltVolume.intersects(changed)) { if (type == LightLayer.BLOCK) diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index 83e490f0ee..4ad90f585a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.kinetics.belt; import java.util.Random; import java.util.function.Supplier; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -53,7 +53,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { protected void renderSafe(BeltBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (!Backend.canUseInstancing(be.getLevel())) { + if (!VisualizationManager.supportsVisualization(be.getLevel())) { BlockState blockState = be.getBlockState(); if (!AllBlocks.BELT.has(blockState)) return; @@ -72,15 +72,15 @@ public class BeltRenderer extends SafeBlockEntityRenderer { boolean alongX = facing.getAxis() == Direction.Axis.X; PoseStack localTransforms = new PoseStack(); - TransformStack msr = TransformStack.cast(localTransforms); + TransformStack msr = TransformStack.of(localTransforms); VertexConsumer vb = buffer.getBuffer(RenderType.solid()); float renderTick = AnimationTickHolder.getRenderTime(be.getLevel()); - msr.centre() + msr.center() .rotateY(AngleHelper.horizontalAngle(facing) + (upward ? 180 : 0) + (sideways ? 270 : 0)) .rotateZ(sideways ? 90 : 0) .rotateX(!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) - .unCentre(); + .uncenter(); if (downward || beltSlope == BeltSlope.VERTICAL && axisDirection == AxisDirection.POSITIVE) { boolean b = start; @@ -130,12 +130,12 @@ public class BeltRenderer extends SafeBlockEntityRenderer { Supplier matrixStackSupplier = () -> { PoseStack stack = new PoseStack(); - TransformStack stacker = TransformStack.cast(stack); - stacker.centre(); + TransformStack stacker = TransformStack.of(stack); + stacker.center(); if (dir.getAxis() == Direction.Axis.X) stacker.rotateY(90); if (dir.getAxis() == Direction.Axis.Y) stacker.rotateX(90); stacker.rotateX(90); - stacker.unCentre(); + stacker.uncenter(); return stack; }; @@ -198,7 +198,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { for (TransportedItemStack transported : be.getInventory() .getTransportedItems()) { ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .nudge(transported.angle); float offset; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java similarity index 74% rename from src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index f241e25bab..b0bcb14cc4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -5,19 +5,19 @@ import java.util.function.Supplier; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.BeltData; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.BeltInstance; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; -import com.simibubi.create.foundation.render.AllMaterialSpecs; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; @@ -25,7 +25,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.LightLayer; -public class BeltInstance extends KineticBlockEntityInstance { +public class BeltVisual extends KineticBlockEntityInstance { boolean upward; boolean diagonal; @@ -35,10 +35,10 @@ public class BeltInstance extends KineticBlockEntityInstance { boolean alongZ; BeltSlope beltSlope; Direction facing; - protected ArrayList keys; - protected RotatingData pulleyKey; + protected ArrayList keys; + protected RotatingInstance pulleyKey; - public BeltInstance(MaterialManager materialManager, BeltBlockEntity blockEntity) { + public BeltVisual(VisualizationContext materialManager, BeltBlockEntity blockEntity) { super(materialManager, blockEntity); if (!AllBlocks.BELT.has(blockState)) @@ -64,9 +64,7 @@ public class BeltInstance extends KineticBlockEntityInstance { PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom); SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - Instancer beltModel = materialManager.defaultSolid() - .material(AllMaterialSpecs.BELTS) - .getModel(beltPartial, blockState); + Instancer beltModel = instancerProvider.instancer(AllInstanceTypes.BELTS, Models.partial(beltPartial), RenderStage.AFTER_BLOCK_ENTITIES); keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); @@ -74,18 +72,18 @@ public class BeltInstance extends KineticBlockEntityInstance { } if (blockEntity.hasPulley()) { - Instancer pulleyModel = getPulleyModel(); + Instancer pulleyModel = getPulleyModel(); pulleyKey = setup(pulleyModel.createInstance()); } } @Override - public void update() { + public void update(float pt) { DyeColor color = blockEntity.color.orElse(null); boolean bottom = true; - for (BeltData key : keys) { + for (BeltInstance key : keys) { SpriteShiftEntry spriteShiftEntry = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); key.setScrollTexture(spriteShiftEntry) @@ -107,8 +105,8 @@ public class BeltInstance extends KineticBlockEntityInstance { } @Override - public void remove() { - keys.forEach(InstanceData::delete); + protected void _delete() { + keys.forEach(AbstractInstance::delete); keys.clear(); if (pulleyKey != null) pulleyKey.delete(); pulleyKey = null; @@ -126,26 +124,28 @@ public class BeltInstance extends KineticBlockEntityInstance { return speed; } - private Instancer getPulleyModel() { + private Instancer getPulleyModel() { Direction dir = getOrientation(); Direction.Axis axis = dir.getAxis(); Supplier ms = () -> { PoseStack modelTransform = new PoseStack(); - TransformStack msr = TransformStack.cast(modelTransform); - msr.centre(); + TransformStack msr = TransformStack.of(modelTransform); + msr.center(); if (axis == Direction.Axis.X) msr.rotateY(90); if (axis == Direction.Axis.Y) msr.rotateX(90); msr.rotateX(90); - msr.unCentre(); + msr.uncenter(); return modelTransform; }; - return getRotatingMaterial().getModel(AllPartialModels.BELT_PULLEY, blockState, dir, ms); + return materialManager.defaultSolid() + .material(AllInstanceTypes.ROTATING) + .getModel(AllPartialModels.BELT_PULLEY, blockState, dir, ms); } private Direction getOrientation() { @@ -157,7 +157,7 @@ public class BeltInstance extends KineticBlockEntityInstance { return dir; } - private BeltData setup(BeltData key, boolean bottom, SpriteShiftEntry spriteShift) { + private BeltInstance setup(BeltInstance key, boolean bottom, SpriteShiftEntry spriteShift) { boolean downward = beltSlope == BeltSlope.DOWNWARD; float rotX = (!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) + (downward ? 180 : 0) + (sideways ? 90 : 0) + (vertical && alongZ ? 180 : 0); float rotY = facing.toYRot() + ((diagonal ^ alongX) && !downward ? 180 : 0) + (sideways && alongZ ? 180 : 0) + (vertical && alongX ? 90 : 0); @@ -171,9 +171,9 @@ public class BeltInstance extends KineticBlockEntityInstance { .setRotationalSpeed(getScrollSpeed()) .setRotationOffset(bottom ? 0.5f : 0f) .setColor(blockEntity) - .setPosition(getInstancePosition()) - .setBlockLight(world.getBrightness(LightLayer.BLOCK, pos)) - .setSkyLight(world.getBrightness(LightLayer.SKY, pos)); + .setPosition(getVisualPosition()) + .setBlockLight(level.getBrightness(LightLayer.BLOCK, pos)) + .setSkyLight(level.getBrightness(LightLayer.SKY, pos)); return key; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java index 65dbffb310..d74a2c23d6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.clock; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java index 1bedf7bad0..6941886212 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.kinetics.crafter; import static com.simibubi.create.content.kinetics.base.HorizontalKineticBlock.HORIZONTAL_FACING; import static com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer.standardKineticRotationTransform; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -122,7 +122,7 @@ public class MechanicalCrafterRenderer extends SafeBlockEntityRenderer { - public ShaftlessCogwheelInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) { + public ShaftlessCogwheelInstance(VisualizationContext materialManager, KineticBlockEntity blockEntity) { super(materialManager, blockEntity); } - @Override - protected Instancer getModel() { - Direction facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); + @Override + protected Model model() { + Direction facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); - return getRotatingMaterial().getModel(AllPartialModels.SHAFTLESS_COGWHEEL, blockState, facing, rotateToFace(facing)); - } + return getModel(AllPartialModels.SHAFTLESS_COGWHEEL, blockState, facing, rotateToFace(facing)); + } private Supplier rotateToFace(Direction facing) { return () -> { PoseStack stack = new PoseStack(); - TransformStack stacker = TransformStack.cast(stack) - .centre(); + TransformStack stacker = TransformStack.of(stack) + .center(); if (facing.getAxis() == Direction.Axis.X) stacker.rotateZ(90); else if (facing.getAxis() == Direction.Axis.Z) stacker.rotateX(90); - stacker.unCentre(); + stacker.uncenter(); return stack; }; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java index e4c3f902a1..566f6e546c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java @@ -1,8 +1,7 @@ package com.simibubi.create.content.kinetics.crank; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllSoundEvents; @@ -102,11 +101,11 @@ public class HandCrankBlockEntity extends GeneratingKineticBlockEntity { } @OnlyIn(Dist.CLIENT) - public Instancer getRenderedHandleInstance(Material material) { + public Model getRenderedHandleInstance() { BlockState blockState = getBlockState(); Direction facing = blockState.getOptionalValue(HandCrankBlock.FACING) .orElse(Direction.UP); - return material.getModel(AllPartialModels.HAND_CRANK_HANDLE, blockState, facing.getOpposite()); + return Models.partial(AllPartialModels.HAND_CRANK_HANDLE, facing.getOpposite()); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java index 93b9c83aee..803b0bdfc0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java @@ -1,24 +1,24 @@ package com.simibubi.create.content.kinetics.crank; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HandCrankInstance extends SingleRotatingInstance implements DynamicInstance { +public class HandCrankInstance extends SingleRotatingInstance implements DynamicVisual { - private ModelData crank; + private TransformedInstance crank; private Direction facing; - public HandCrankInstance(MaterialManager modelManager, HandCrankBlockEntity blockEntity) { + public HandCrankInstance(VisualizationContext modelManager, HandCrankBlockEntity blockEntity) { super(modelManager, blockEntity); facing = blockState.getValue(BlockStateProperties.FACING); - Instancer model = blockEntity.getRenderedHandleInstance(getTransformMaterial()); + Model model = blockEntity.getRenderedHandleInstance(); crank = model.createInstance(); rotateCrank(); } @@ -36,10 +36,10 @@ public class HandCrankInstance extends SingleRotatingInstance getRenderedHandleInstance(Material material) { - return material.getModel(getBlockState()); + public Model getRenderedHandleInstance() { + return Models.block(getBlockState()); } @Override @@ -215,7 +214,7 @@ public class ValveHandleBlockEntity extends HandCrankBlockEntity { protected Vec3 getSouthLocation() { return VecHelper.voxelSpace(8, 8, 4.5); } - + @Override public boolean testHit(BlockState state, Vec3 localHit) { Vec3 offset = getLocalOffset(state); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java index d7f10491e1..98c1cb5b80 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java @@ -3,21 +3,22 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.materials.model.ModelData; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; -import com.simibubi.create.foundation.render.AllMaterialSpecs; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.NBTHelper; @@ -39,16 +40,12 @@ public class DeployerActorInstance extends ActorInstance { float xRot; float zRot; - ModelData pole; - ModelData hand; - RotatingData shaft; + TransformedInstance pole; + TransformedInstance hand; + RotatingInstance shaft; - public DeployerActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { + public DeployerActorInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { super(materialManager, simulationWorld, context); - - Material mat = materialManager.defaultSolid() - .material(Materials.TRANSFORMED); - BlockState state = context.state; DeployerBlockEntity.Mode mode = NBTHelper.readEnum(context.blockEntityData, "Mode", DeployerBlockEntity.Mode.class); PartialModel handPose = DeployerRenderer.getHandPose(mode); @@ -61,13 +58,13 @@ public class DeployerActorInstance extends ActorInstance { xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = mat.getModel(AllPartialModels.DEPLOYER_POLE, state).createInstance(); - hand = mat.getModel(handPose, state).createInstance(); + var instancerProvider = materialManager.instancerProvider(); + + pole = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.DEPLOYER_POLE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + hand = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(handPose), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); - shaft = materialManager.defaultSolid() - .material(AllMaterialSpecs.ROTATING) - .getModel(KineticBlockEntityInstance.shaft(axis)) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.block(KineticBlockEntityInstance.shaft(axis)), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); int blockLight = localBlockLight(); @@ -97,7 +94,7 @@ public class DeployerActorInstance extends ActorInstance { Vec3 offset = Vec3.atLowerCornerOf(facing.getNormal()).scale(factor); - TransformStack tstack = TransformStack.cast(stack); + TransformStack tstack = TransformStack.of(stack); stack.setIdentity(); tstack.translate(context.localPos) .translate(offset); @@ -105,20 +102,20 @@ public class DeployerActorInstance extends ActorInstance { transformModel(stack, pole, hand, yRot, xRot, zRot); } - static void transformModel(PoseStack stack, ModelData pole, ModelData hand, float yRot, float xRot, float zRot) { - TransformStack tstack = TransformStack.cast(stack); + static void transformModel(PoseStack stack, TransformedInstance pole, TransformedInstance hand, float yRot, float xRot, float zRot) { + TransformStack tstack = TransformStack.of(stack); - tstack.centre(); - tstack.rotate(Direction.UP, (float) ((yRot) / 180 * Math.PI)); - tstack.rotate(Direction.EAST, (float) ((xRot) / 180 * Math.PI)); + tstack.center(); + tstack.rotate((float) ((yRot) / 180 * Math.PI), Direction.UP); + tstack.rotate((float) ((xRot) / 180 * Math.PI), Direction.EAST); stack.pushPose(); - tstack.rotate(Direction.SOUTH, (float) ((zRot) / 180 * Math.PI)); - tstack.unCentre(); + tstack.rotate((float) ((zRot) / 180 * Math.PI), Direction.SOUTH); + tstack.uncenter(); pole.setTransform(stack); stack.popPose(); - tstack.unCentre(); + tstack.uncenter(); hand.setTransform(stack); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java index 25c028fa61..93c62bcc4f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java @@ -9,7 +9,7 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllRecipeTypes; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java index 758d14d8a2..ea8a51aa1a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.deployer; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; @@ -43,10 +43,10 @@ public class DeployerFilterSlot extends ValueBoxTransform.Sided { float yRot = AngleHelper.horizontalAngle(facing) + 180; if (facing.getAxis() == Axis.Y) - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(180 + AngleHelper.horizontalAngle(state.getValue(DeployerBlock.FACING))); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot) .rotateX(xRot); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java index 99cd1728e8..2dcc287feb 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java @@ -5,11 +5,16 @@ import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock. import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.api.instance.TickableInstance; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.materials.oriented.OrientedData; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.VisualTickContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftInstance; @@ -21,21 +26,21 @@ import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; -public class DeployerInstance extends ShaftInstance implements DynamicInstance, TickableInstance { +public class DeployerInstance extends ShaftInstance implements DynamicVisual, TickableVisual { final Direction facing; final float yRot; final float xRot; final float zRot; - protected final OrientedData pole; + protected final OrientedInstance pole; - protected OrientedData hand; + protected OrientedInstance hand; PartialModel currentHand; float progress; - public DeployerInstance(MaterialManager materialManager, DeployerBlockEntity blockEntity) { + public DeployerInstance(VisualizationContext materialManager, DeployerBlockEntity blockEntity) { super(materialManager, blockEntity); facing = blockState.getValue(FACING); @@ -46,11 +51,11 @@ public class DeployerInstance extends ShaftInstance impleme xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = getOrientedMaterial().getModel(AllPartialModels.DEPLOYER_POLE, blockState).createInstance(); + pole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.DEPLOYER_POLE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); currentHand = this.blockEntity.getHandPose(); - hand = getOrientedMaterial().getModel(currentHand, blockState).createInstance(); + hand = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); progress = getProgress(AnimationTickHolder.getPartialTicks()); updateRotation(pole, hand, yRot, xRot, zRot); @@ -58,18 +63,18 @@ public class DeployerInstance extends ShaftInstance impleme } @Override - public void tick() { + public void tick(VisualTickContext ctx) { PartialModel handPose = blockEntity.getHandPose(); if (currentHand != handPose) { currentHand = handPose; - getOrientedMaterial().getModel(currentHand, blockState) + instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand), RenderStage.AFTER_BLOCK_ENTITIES) .stealInstance(hand); } } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { float newProgress = getProgress(AnimationTickHolder.getPartialTicks()); @@ -87,8 +92,8 @@ public class DeployerInstance extends ShaftInstance impleme } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); hand.delete(); pole.delete(); } @@ -110,7 +115,7 @@ public class DeployerInstance extends ShaftInstance impleme : currentHand == AllPartialModels.DEPLOYER_HAND_HOLDING ? 4 / 16f : 3 / 16f; float distance = Math.min(Mth.clamp(progress, 0, 1) * (blockEntity.reach + handLength), 21 / 16f); Vec3i facingVec = facing.getNormal(); - BlockPos blockPos = getInstancePosition(); + BlockPos blockPos = getVisualPosition(); float x = blockPos.getX() + ((float) facingVec.getX()) * distance; float y = blockPos.getY() + ((float) facingVec.getY()) * distance; @@ -120,7 +125,7 @@ public class DeployerInstance extends ShaftInstance impleme hand.setPosition(x, y, z); } - static void updateRotation(OrientedData pole, OrientedData hand, float yRot, float xRot, float zRot) { + static void updateRotation(OrientedInstance pole, OrientedInstance hand, float yRot, float xRot, float zRot) { Quaternionf q = Axis.YP.rotationDegrees(yRot); q.mul(Axis.XP.rotationDegrees(xRot)); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java index deb476581b..27f37c3891 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java @@ -8,8 +8,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -30,6 +29,7 @@ import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -295,7 +295,7 @@ public class DeployerMovementBehaviour implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, + public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return new DeployerActorInstance(materialManager, simulationWorld, context); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java index cbc75aeef2..adad021247 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java @@ -3,10 +3,9 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -23,6 +22,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringR import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.NBTHelper; @@ -53,7 +53,7 @@ public class DeployerRenderer extends SafeBlockEntityRenderer material = materialManager.defaultSolid() - .material(AllMaterialSpecs.ACTORS); - BlockState state = context.state; facing = state.getValue(DrillBlock.FACING); @@ -41,7 +38,9 @@ public class DrillActorInstance extends ActorInstance { else eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0); - drillHead = material.getModel(AllPartialModels.DRILL_HEAD, state).createInstance(); + drillHead = materialManager.instancerProvider() + .instancer(AllInstanceTypes.ACTORS, Models.partial(AllPartialModels.DRILL_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); drillHead.setPosition(context.localPos) .setBlockLight(localBlockLight()) diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java index 8112622bf8..6d468e8cc7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java @@ -1,25 +1,24 @@ package com.simibubi.create.content.kinetics.drill; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; import net.minecraft.core.Direction; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class DrillInstance extends SingleRotatingInstance { - public DrillInstance(MaterialManager materialManager, DrillBlockEntity blockEntity) { + public DrillInstance(VisualizationContext materialManager, DrillBlockEntity blockEntity) { super(materialManager, blockEntity); } - @Override - protected Instancer getModel() { - BlockState referenceState = blockEntity.getBlockState(); - Direction facing = referenceState.getValue(BlockStateProperties.FACING); - return getRotatingMaterial().getModel(AllPartialModels.DRILL_HEAD, referenceState, facing); + @Override + protected Model model() { + Direction facing = blockEntity.getBlockState() + .getValue(BlockStateProperties.FACING); + return Models.partial(AllPartialModels.DRILL_HEAD, facing); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java index b7bfc73ec8..13e911027f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java @@ -2,8 +2,7 @@ package com.simibubi.create.content.kinetics.drill; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; @@ -11,6 +10,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; import com.simibubi.create.foundation.damageTypes.CreateDamageSources; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.renderer.MultiBufferSource; @@ -52,7 +52,7 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour { @Nullable @Override - public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { + public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return new DrillActorInstance(materialManager, simulationWorld, context); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillRenderer.java index d3efdbe6ea..799d8f8598 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.kinetics.drill; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; @@ -8,6 +7,7 @@ import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatch import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; @@ -43,11 +43,11 @@ public class DrillRenderer extends KineticBlockEntityRenderer superBuffer .transform(matrices.getModel()) - .centre() + .center() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)) .rotateZ(angle) - .unCentre() + .uncenter() .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java index ca0c31d99a..aa69dbd656 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.fan; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -27,7 +27,7 @@ public class EncasedFanRenderer extends KineticBlockEntityRenderer { - protected final RotatingData shaft; - protected final RotatingData fan; + protected final RotatingInstance shaft; + protected final RotatingInstance fan; final Direction direction; private final Direction opposite; - public FanInstance(MaterialManager materialManager, EncasedFanBlockEntity blockEntity) { + public FanInstance(VisualizationContext materialManager, EncasedFanBlockEntity blockEntity) { super(materialManager, blockEntity); direction = blockState.getValue(FACING); opposite = direction.getOpposite(); - shaft = getRotatingMaterial().getModel(AllPartialModels.SHAFT_HALF, blockState, opposite).createInstance(); - fan = materialManager.defaultCutout() - .material(AllMaterialSpecs.ROTATING) - .getModel(AllPartialModels.ENCASED_FAN_INNER, blockState, opposite) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, opposite), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + fan = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER, opposite), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); setup(shaft); diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java index 4f97923d9d..ed6604f3a6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java @@ -1,36 +1,41 @@ package com.simibubi.create.content.kinetics.flywheel; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.core.materials.model.ModelData; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class FlywheelInstance extends KineticBlockEntityInstance implements DynamicInstance { +public class FlywheelInstance extends KineticBlockEntityInstance implements DynamicVisual { - protected final RotatingData shaft; - protected final ModelData wheel; + protected final RotatingInstance shaft; + protected final TransformedInstance wheel; protected float lastAngle = Float.NaN; - public FlywheelInstance(MaterialManager materialManager, FlywheelBlockEntity blockEntity) { + public FlywheelInstance(VisualizationContext materialManager, FlywheelBlockEntity blockEntity) { super(materialManager, blockEntity); - shaft = setup(getRotatingMaterial().getModel(shaft()) + shaft = setup(instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.block(shaft()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance()); - wheel = getTransformMaterial().getModel(blockState) + wheel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.block(blockState), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); animate(blockEntity.angle); } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { float partialTicks = AnimationTickHolder.getPartialTicks(); @@ -47,18 +52,18 @@ public class FlywheelInstance extends KineticBlockEntityInstance implements DynamicInstance { +public abstract class GaugeInstance extends ShaftInstance implements DynamicVisual { protected final ArrayList faces; protected PoseStack ms; - protected GaugeInstance(MaterialManager materialManager, GaugeBlockEntity blockEntity) { + protected GaugeInstance(VisualizationContext materialManager, GaugeBlockEntity blockEntity) { super(materialManager, blockEntity); faces = new ArrayList<>(2); GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); - Instancer dialModel = getTransformMaterial().getModel(AllPartialModels.GAUGE_DIAL, blockState); - Instancer headModel = getHeadModel(); + Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer headModel = getHeadModel(); ms = new PoseStack(); - TransformStack msr = TransformStack.cast(ms); - msr.translate(getInstancePosition()); + TransformStack msr = TransformStack.of(ms); + msr.translate(getVisualPosition()); float progress = Mth.lerp(AnimationTickHolder.getPartialTicks(), blockEntity.prevDialState, blockEntity.dialState); for (Direction facing : Iterate.directions) { - if (!gaugeBlock.shouldRenderHeadOnFace(world, pos, blockState, facing)) + if (!gaugeBlock.shouldRenderHeadOnFace(level, pos, blockState, facing)) continue; DialFace face = makeFace(facing, dialModel, headModel); @@ -51,20 +55,18 @@ public abstract class GaugeInstance extends ShaftInstance impl } } - private DialFace makeFace(Direction face, Instancer dialModel, Instancer headModel) { + private DialFace makeFace(Direction face, Instancer dialModel, Instancer headModel) { return new DialFace(face, dialModel.createInstance(), headModel.createInstance()); } @Override - public void beginFrame() { - GaugeBlockEntity gaugeBlockEntity = (GaugeBlockEntity) blockEntity; - - if (Mth.equal(gaugeBlockEntity.prevDialState, gaugeBlockEntity.dialState)) + public void beginFrame(VisualFrameContext ctx) { + if (Mth.equal(blockEntity.prevDialState, blockEntity.dialState)) return; - float progress = Mth.lerp(AnimationTickHolder.getPartialTicks(), gaugeBlockEntity.prevDialState, gaugeBlockEntity.dialState); + float progress = Mth.lerp(ctx.partialTick(), blockEntity.prevDialState, blockEntity.dialState); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); for (DialFace faceEntry : faces) { faceEntry.updateTransform(msr, progress); @@ -80,19 +82,19 @@ public abstract class GaugeInstance extends ShaftInstance impl } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); faces.forEach(DialFace::delete); } - protected abstract Instancer getHeadModel(); + protected abstract Instancer getHeadModel(); - private class DialFace extends Couple { + protected class DialFace extends Couple { Direction face; - public DialFace(Direction face, ModelData first, ModelData second) { + public DialFace(Direction face, TransformedInstance first, TransformedInstance second) { super(first, second); this.face = face; } @@ -106,7 +108,7 @@ public abstract class GaugeInstance extends ShaftInstance impl getSecond().setTransform(ms); msr.translate(0, dialPivot, dialPivot) - .rotate(Direction.EAST, (float) (Math.PI / 2 * -progress)) + .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) .translate(0, -dialPivot, -dialPivot); getFirst().setTransform(ms); @@ -121,7 +123,7 @@ public abstract class GaugeInstance extends ShaftInstance impl rotateToFace(msr) .translate(0, dialPivot, dialPivot) - .rotate(Direction.EAST, (float) (Math.PI / 2 * -progress)) + .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) .translate(0, -dialPivot, -dialPivot); getFirst().setTransform(ms); @@ -130,9 +132,9 @@ public abstract class GaugeInstance extends ShaftInstance impl } protected TransformStack rotateToFace(TransformStack msr) { - return msr.centre() - .rotate(Direction.UP, (float) ((-face.toYRot() - 90) / 180 * Math.PI)) - .unCentre(); + return msr.center() + .rotate((float) ((-face.toYRot() - 90) / 180 * Math.PI), Direction.UP) + .uncenter(); } private void delete() { @@ -142,24 +144,24 @@ public abstract class GaugeInstance extends ShaftInstance impl } public static class Speed extends GaugeInstance { - public Speed(MaterialManager materialManager, GaugeBlockEntity blockEntity) { + public Speed(VisualizationContext materialManager, GaugeBlockEntity blockEntity) { super(materialManager, blockEntity); } @Override - protected Instancer getHeadModel() { - return getTransformMaterial().getModel(AllPartialModels.GAUGE_HEAD_SPEED, blockState); + protected Instancer getHeadModel() { + return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED), RenderStage.AFTER_BLOCK_ENTITIES); } } public static class Stress extends GaugeInstance { - public Stress(MaterialManager materialManager, GaugeBlockEntity blockEntity) { + public Stress(VisualizationContext materialManager, GaugeBlockEntity blockEntity) { super(materialManager, blockEntity); } @Override - protected Instancer getHeadModel() { - return getTransformMaterial().getModel(AllPartialModels.GAUGE_HEAD_STRESS, blockState); + protected Instancer getHeadModel() { + return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS), RenderStage.AFTER_BLOCK_ENTITIES); } } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java index 404454fe88..ed00a063a7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.gauge; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -38,7 +38,7 @@ public class GaugeRenderer extends ShaftRenderer { @Override protected void renderSafe(GaugeBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) return; + if (VisualizationManager.supportsVisualization(be.getLevel())) return; super.renderSafe(be, partialTicks, ms, buffer, light, overlay); diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java index 03ce8bd046..fd9e51ff81 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java @@ -3,13 +3,15 @@ package com.simibubi.create.content.kinetics.gearbox; import java.util.EnumMap; import java.util.Map; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; @@ -19,35 +21,32 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class GearboxInstance extends KineticBlockEntityInstance { - protected final EnumMap keys; + protected final EnumMap keys; protected Direction sourceFacing; - public GearboxInstance(MaterialManager materialManager, GearboxBlockEntity blockEntity) { + public GearboxInstance(VisualizationContext materialManager, GearboxBlockEntity blockEntity) { super(materialManager, blockEntity); keys = new EnumMap<>(Direction.class); final Direction.Axis boxAxis = blockState.getValue(BlockStateProperties.AXIS); - int blockLight = world.getBrightness(LightLayer.BLOCK, pos); - int skyLight = world.getBrightness(LightLayer.SKY, pos); + int blockLight = level.getBrightness(LightLayer.BLOCK, pos); + int skyLight = level.getBrightness(LightLayer.SKY, pos); updateSourceFacing(); - Material rotatingMaterial = getRotatingMaterial(); - for (Direction direction : Iterate.directions) { final Direction.Axis axis = direction.getAxis(); if (boxAxis == axis) continue; - Instancer shaft = rotatingMaterial.getModel(AllPartialModels.SHAFT_HALF, blockState, direction); - - RotatingData key = shaft.createInstance(); + RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); key.setRotationAxis(Direction.get(Direction.AxisDirection.POSITIVE, axis).step()) .setRotationalSpeed(getSpeed(direction)) .setRotationOffset(getRotationOffset(axis)).setColor(blockEntity) - .setPosition(getInstancePosition()) + .setPosition(getVisualPosition()) .setBlockLight(blockLight) .setSkyLight(skyLight); @@ -77,9 +76,9 @@ public class GearboxInstance extends KineticBlockEntityInstance key : keys.entrySet()) { + for (Map.Entry key : keys.entrySet()) { Direction direction = key.getKey(); Direction.Axis axis = direction.getAxis(); @@ -93,8 +92,8 @@ public class GearboxInstance extends KineticBlockEntityInstance () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); boolean ceiling = isOnCeiling(); if (interactionPointTagBefore == null || interactionPointTagBefore.size() != interactionPointTag.size()) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java index 889620fe81..7c1bbf9b63 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java @@ -3,17 +3,19 @@ package com.simibubi.create.content.kinetics.mechanicalArm; import java.util.ArrayList; import com.google.common.collect.Lists; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.Material; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.core.materials.model.ModelData; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Iterate; @@ -24,16 +26,15 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -public class ArmInstance extends SingleRotatingInstance implements DynamicInstance { +public class ArmInstance extends SingleRotatingInstance implements DynamicVisual { - final ModelData base; - final ModelData lowerBody; - final ModelData upperBody; - ModelData claw; + final TransformedInstance base; + final TransformedInstance lowerBody; + final TransformedInstance upperBody; + TransformedInstance claw; - private final ArrayList clawGrips; - - private final ArrayList models; + private final ArrayList clawGrips; + private final ArrayList models; private final Boolean ceiling; private boolean firstRender = true; @@ -43,25 +44,21 @@ public class ArmInstance extends SingleRotatingInstance implemen private float upperArmAngle = Float.NaN; private float headAngle = Float.NaN; - public ArmInstance(MaterialManager materialManager, ArmBlockEntity blockEntity) { + public ArmInstance(VisualizationContext materialManager, ArmBlockEntity blockEntity) { super(materialManager, blockEntity); - Material mat = getTransformMaterial(); - - base = mat.getModel(AllPartialModels.ARM_BASE, blockState) + base = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - lowerBody = mat.getModel(AllPartialModels.ARM_LOWER_BODY, blockState) + lowerBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_LOWER_BODY), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - upperBody = mat.getModel(AllPartialModels.ARM_UPPER_BODY, blockState) + upperBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_UPPER_BODY), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - claw = mat - .getModel(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE, - blockState) + claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - ModelData clawGrip1 = mat.getModel(AllPartialModels.ARM_CLAW_GRIP_UPPER, blockState) + TransformedInstance clawGrip1 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_UPPER), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - ModelData clawGrip2 = mat.getModel(AllPartialModels.ARM_CLAW_GRIP_LOWER, blockState) + TransformedInstance clawGrip2 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_LOWER), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); clawGrips = Lists.newArrayList(clawGrip1, clawGrip2); @@ -72,7 +69,7 @@ public class ArmInstance extends SingleRotatingInstance implemen } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { if (blockEntity.phase == ArmBlockEntity.Phase.DANCING && blockEntity.getSpeed() != 0) { animateArm(true); firstRender = true; @@ -126,9 +123,9 @@ public class ArmInstance extends SingleRotatingInstance implemen } PoseStack msLocal = new PoseStack(); - TransformStack msr = TransformStack.cast(msLocal); - msr.translate(getInstancePosition()); - msr.centre(); + TransformStack msr = TransformStack.of(msLocal); + msr.translate(getVisualPosition()); + msr.center(); if (ceiling) msr.rotateX(180); @@ -145,12 +142,12 @@ public class ArmInstance extends SingleRotatingInstance implemen .setColor(color); ArmRenderer.transformHead(msr, headAngle); - + if (ceiling && blockEntity.goggles) msr.rotateZ(180); - + claw.setTransform(msLocal); - + if (ceiling && blockEntity.goggles) msr.rotateZ(180); @@ -173,14 +170,12 @@ public class ArmInstance extends SingleRotatingInstance implemen } @Override - public void update() { - super.update(); + public void update(float pt) { + super.update(pt); models.remove(claw); claw.delete(); - claw = getTransformMaterial() - .getModel(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE, - blockState) - .createInstance(); + claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); models.add(claw); updateLight(); animateArm(false); @@ -194,14 +189,14 @@ public class ArmInstance extends SingleRotatingInstance implemen } @Override - protected Instancer getModel() { - return getRotatingMaterial().getModel(AllPartialModels.ARM_COG, blockEntity.getBlockState()); + protected Model model() { + return Models.partial(AllPartialModels.ARM_COG); } @Override - public void remove() { - super.remove(); - models.forEach(InstanceData::delete); + protected void _delete() { + super._delete(); + models.forEach(AbstractInstance::delete); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java index 65563c180e..1cb4ac4ea4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.mechanicalArm; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -37,7 +37,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer { ItemStack item = be.heldItem; boolean hasItem = !item.isEmpty(); - boolean usingFlywheel = Backend.canUseInstancing(be.getLevel()); + boolean usingFlywheel = VisualizationManager.supportsVisualization(be.getLevel()); if (usingFlywheel && !hasItem) return; @@ -53,7 +53,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer { BlockState blockState = be.getBlockState(); PoseStack msLocal = new PoseStack(); - TransformStack msr = TransformStack.cast(msLocal); + TransformStack msr = TransformStack.of(msLocal); float baseAngle; float lowerArmAngle; @@ -79,7 +79,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer { color = 0xFFFFFF; } - msr.centre(); + msr.center(); if (inverted) msr.rotateX(180); @@ -141,13 +141,13 @@ public class ArmRenderer extends KineticBlockEntityRenderer { .renderInto(ms, builder); transformHead(msr, headAngle); - + if (inverted) msr.rotateZ(180); - + claw.transform(msLocal) .renderInto(ms, builder); - + if (inverted) msr.rotateZ(180); diff --git a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java index 545ebe8d20..6e7791fa46 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java @@ -1,19 +1,19 @@ package com.simibubi.create.content.kinetics.millstone; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; public class MillstoneCogInstance extends SingleRotatingInstance { - public MillstoneCogInstance(MaterialManager materialManager, MillstoneBlockEntity blockEntity) { + public MillstoneCogInstance(VisualizationContext materialManager, MillstoneBlockEntity blockEntity) { super(materialManager, blockEntity); } - @Override - protected Instancer getModel() { - return getRotatingMaterial().getModel(AllPartialModels.MILLSTONE_COG, blockEntity.getBlockState()); - } + @Override + protected Model model() { + return Models.partial(AllPartialModels.MILLSTONE_COG); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java index c5ebf0c3df..06ef773618 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.mixer; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -30,7 +30,7 @@ public class MechanicalMixerRenderer extends KineticBlockEntityRenderer getCogModel() { + protected Instancer getCogModel() { return materialManager.defaultSolid() - .material(AllMaterialSpecs.ROTATING) + .material(AllInstanceTypes.ROTATING) .getModel(AllPartialModels.SHAFTLESS_COGWHEEL, blockEntity.getBlockState()); } @Override - public void beginFrame() { - + public void beginFrame(VisualFrameContext ctx) { float renderedHeadOffset = getRenderedHeadOffset(); transformPole(renderedHeadOffset); @@ -59,14 +59,14 @@ public class MixerInstance extends EncasedCogInstance implements DynamicInstance private void transformHead(float renderedHeadOffset) { float speed = mixer.getRenderedHeadRotationSpeed(AnimationTickHolder.getPartialTicks()); - mixerHead.setPosition(getInstancePosition()) + mixerHead.setPosition(getVisualPosition()) .nudge(0, -renderedHeadOffset, 0) .setRotationalSpeed(speed * 2); } private void transformPole(float renderedHeadOffset) { - mixerPole.setPosition(getInstancePosition()) - .nudge(0, -renderedHeadOffset, 0); + mixerPole.setPosition(getVisualPosition()) + .nudgePosition(0, -renderedHeadOffset, 0); } private float getRenderedHeadOffset() { @@ -82,8 +82,8 @@ public class MixerInstance extends EncasedCogInstance implements DynamicInstance } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); mixerHead.delete(); mixerPole.delete(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java index b18cf5257a..e3372a0625 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.motor; import java.util.List; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; @@ -79,7 +79,7 @@ public class CreativeMotorBlockEntity extends GeneratingKineticBlockEntity { return; if (getSide() != Direction.UP) return; - TransformStack.cast(ms) + TransformStack.of(ms) .rotateZ(-AngleHelper.horizontalAngle(facing) + 180); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java index e6f1ef4ab3..aefc127df4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.press; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -30,7 +30,7 @@ public class MechanicalPressRenderer extends KineticBlockEntityRenderer implements DynamicInstance { +public class PressInstance extends ShaftInstance implements DynamicVisual { - private final OrientedData pressHead; + private final OrientedInstance pressHead; - public PressInstance(MaterialManager materialManager, MechanicalPressBlockEntity blockEntity) { + public PressInstance(VisualizationContext materialManager, MechanicalPressBlockEntity blockEntity) { super(materialManager, blockEntity); - pressHead = materialManager.defaultSolid() - .material(Materials.ORIENTED) - .getModel(AllPartialModels.MECHANICAL_PRESS_HEAD, blockState) + pressHead = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); Quaternionf q = Axis.YP @@ -40,7 +38,7 @@ public class PressInstance extends ShaftInstance imp private void transformModels() { float renderedHeadOffset = getRenderedHeadOffset(blockEntity); - pressHead.setPosition(getInstancePosition()) + pressHead.setPosition(getVisualPosition()) .nudge(0, -renderedHeadOffset, 0); } @@ -58,8 +56,8 @@ public class PressInstance extends ShaftInstance imp } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); pressHead.delete(); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java index ceb9495d3c..3554170d0c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.saw; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.VecHelper; @@ -25,7 +25,7 @@ public class SawFilterSlot extends ValueBoxTransform { public void rotate(BlockState state, PoseStack ms) { int yRot = (state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0) + (state.getValue(SawBlock.FLIPPED) ? 0 : 180); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot) .rotateX(90); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java index 9f0662d192..82d7c68de2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java @@ -1,10 +1,11 @@ package com.simibubi.create.content.kinetics.saw; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Rotation; @@ -13,20 +14,20 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class SawInstance extends SingleRotatingInstance { - public SawInstance(MaterialManager materialManager, SawBlockEntity blockEntity) { + public SawInstance(VisualizationContext materialManager, SawBlockEntity blockEntity) { super(materialManager, blockEntity); } @Override - protected Instancer getModel() { + protected Model model() { if (blockState.getValue(BlockStateProperties.FACING) - .getAxis() - .isHorizontal()) { + .getAxis() + .isHorizontal()) { BlockState referenceState = blockState.rotate(blockEntity.getLevel(), blockEntity.getBlockPos(), Rotation.CLOCKWISE_180); Direction facing = referenceState.getValue(BlockStateProperties.FACING); - return getRotatingMaterial().getModel(AllPartialModels.SHAFT_HALF, referenceState, facing); + return Models.partial(AllPartialModels.SHAFT_HALF, facing); } else { - return getRotatingMaterial().getModel(shaft()); + return Models.block(shaft()); } } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java index c00a53d92f..7962e970ef 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java @@ -2,9 +2,8 @@ package com.simibubi.create.content.kinetics.saw; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; @@ -17,6 +16,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringR import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -46,7 +46,7 @@ public class SawRenderer extends SafeBlockEntityRenderer { renderItems(be, partialTicks, ms, buffer, light, overlay); FilteringRenderer.renderOnBlockEntity(be, partialTicks, ms, buffer, light, overlay); - if (Backend.canUseInstancing(be.getLevel())) + if (VisualizationManager.supportsVisualization(be.getLevel())) return; renderShaft(be, ms, buffer, light, overlay); @@ -189,7 +189,7 @@ public class SawRenderer extends SafeBlockEntityRenderer { } superBuffer.transform(matrices.getModel()) - .centre() + .center() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)); @@ -197,7 +197,7 @@ public class SawRenderer extends SafeBlockEntityRenderer { superBuffer.rotateZ(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0); } - superBuffer.unCentre() + superBuffer.uncenter() .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java index 7d2b580f80..7486d5cf62 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java @@ -1,14 +1,16 @@ package com.simibubi.create.content.kinetics.simpleRelays; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -16,15 +18,15 @@ import net.minecraft.core.Direction.AxisDirection; public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance { - protected RotatingData additionalShaft; + protected RotatingInstance additionalShaft; - public BracketedKineticBlockEntityInstance(MaterialManager materialManager, BracketedKineticBlockEntity blockEntity) { + public BracketedKineticBlockEntityInstance(VisualizationContext materialManager, BracketedKineticBlockEntity blockEntity) { super(materialManager, blockEntity); } @Override - public void init() { - super.init(); + public void init(float pt) { + super.init(pt); if (!ICogWheel.isLargeCog(blockEntity.getBlockState())) return; @@ -36,7 +38,9 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< BlockPos pos = blockEntity.getBlockPos(); float offset = BracketedKineticBlockEntityRenderer.getShaftAngleOffset(axis, pos); Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - Instancer half = getRotatingMaterial().getModel(AllPartialModels.COGWHEEL_SHAFT, blockState, + Instancer half = materialManager.defaultSolid() + .material(AllInstanceTypes.ROTATING) + .getModel(AllPartialModels.COGWHEEL_SHAFT, blockState, facing, () -> this.rotateToAxis(axis)); additionalShaft = setup(half.createInstance(), speed); @@ -44,30 +48,30 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< } @Override - protected Instancer getModel() { + protected Model model() { if (!ICogWheel.isLargeCog(blockEntity.getBlockState())) - return super.getModel(); + return super.model(); Direction.Axis axis = KineticBlockEntityRenderer.getRotationAxisOf(blockEntity); Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - return getRotatingMaterial().getModel(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, blockState, facing, - () -> this.rotateToAxis(axis)); + return model(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, blockState, facing, + () -> this.rotateToAxis(axis)); } private PoseStack rotateToAxis(Direction.Axis axis) { Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); PoseStack poseStack = new PoseStack(); - TransformStack.cast(poseStack) - .centre() + TransformStack.of(poseStack) + .center() .rotateToFace(facing) .multiply(Axis.XN.rotationDegrees(-90)) - .unCentre(); + .uncenter(); return poseStack; } @Override - public void update() { - super.update(); + public void update(float pt) { + super.update(pt); if (additionalShaft != null) { updateRotation(additionalShaft); additionalShaft.setRotationOffset(BracketedKineticBlockEntityRenderer.getShaftAngleOffset(axis, pos)); @@ -82,8 +86,8 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); if (additionalShaft != null) additionalShaft.delete(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java index cf67639507..114d746960 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.simpleRelays; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; @@ -27,7 +27,7 @@ public class BracketedKineticBlockEntityRenderer extends KineticBlockEntityRende protected void renderSafe(BracketedKineticBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) + if (VisualizationManager.supportsVisualization(be.getLevel())) return; if (!AllBlocks.LARGE_COGWHEEL.has(be.getBlockState())) { diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java index f6633776e4..4d5c992fa1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java @@ -2,19 +2,22 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; import java.util.Optional; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntityRenderer; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; @@ -27,19 +30,19 @@ public class EncasedCogInstance extends KineticBlockEntityInstance rotatingTopShaft; - protected Optional rotatingBottomShaft; + protected RotatingInstance rotatingModel; + protected Optional rotatingTopShaft; + protected Optional rotatingBottomShaft; - public static EncasedCogInstance small(MaterialManager modelManager, KineticBlockEntity blockEntity) { + public static EncasedCogInstance small(VisualizationContext modelManager, KineticBlockEntity blockEntity) { return new EncasedCogInstance(modelManager, blockEntity, false); } - public static EncasedCogInstance large(MaterialManager modelManager, KineticBlockEntity blockEntity) { + public static EncasedCogInstance large(VisualizationContext modelManager, KineticBlockEntity blockEntity) { return new EncasedCogInstance(modelManager, blockEntity, true); } - public EncasedCogInstance(MaterialManager modelManager, KineticBlockEntity blockEntity, boolean large) { + public EncasedCogInstance(VisualizationContext modelManager, KineticBlockEntity blockEntity, boolean large) { super(modelManager, blockEntity); this.large = large; } @@ -49,17 +52,16 @@ public class EncasedCogInstance extends KineticBlockEntityInstance getCogModel() { + protected Instancer getCogModel() { BlockState referenceState = blockEntity.getBlockState(); Direction facing = Direction.fromAxisAndDirection(referenceState.getValue(BlockStateProperties.AXIS), AxisDirection.POSITIVE); PartialModel partial = large ? AllPartialModels.SHAFTLESS_LARGE_COGWHEEL : AllPartialModels.SHAFTLESS_COGWHEEL; - return getRotatingMaterial().getModel(partial, referenceState, facing, () -> { + return materialManager.defaultSolid() + .material(AllInstanceTypes.ROTATING) + .getModel(partial, referenceState, facing, () -> { PoseStack poseStack = new PoseStack(); - TransformStack.cast(poseStack) - .centre() + TransformStack.of(poseStack) + .center() .rotateToFace(facing) - .multiply(Axis.XN.rotationDegrees(90)) - .unCentre(); + .rotate(Axis.XN.rotationDegrees(90)) + .uncenter(); return poseStack; }); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java index 8a03236a86..35478d325c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; @@ -42,7 +42,7 @@ public class EncasedCogRenderer extends KineticBlockEntityRenderer implements DynamicInstance { +public class SteamEngineInstance extends AbstractBlockEntityVisual implements DynamicVisual { - protected final ModelData piston; - protected final ModelData linkage; - protected final ModelData connector; + protected final TransformedInstance piston; + protected final TransformedInstance linkage; + protected final TransformedInstance connector; - public SteamEngineInstance(MaterialManager materialManager, SteamEngineBlockEntity blockEntity) { + public SteamEngineInstance(VisualizationContext materialManager, SteamEngineBlockEntity blockEntity) { super(materialManager, blockEntity); - piston = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.ENGINE_PISTON, blockState) + piston = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ENGINE_PISTON), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - linkage = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.ENGINE_LINKAGE, blockState) + linkage = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ENGINE_LINKAGE), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - connector = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.ENGINE_CONNECTOR, blockState) + connector = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ENGINE_CONNECTOR), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); } @@ -63,9 +60,9 @@ public class SteamEngineInstance extends BlockEntityInstance { - protected final ArrayList keys; + protected final ArrayList keys; - public SplitShaftInstance(MaterialManager modelManager, SplitShaftBlockEntity blockEntity) { + public SplitShaftInstance(VisualizationContext modelManager, SplitShaftBlockEntity blockEntity) { super(modelManager, blockEntity); keys = new ArrayList<>(2); float speed = blockEntity.getSpeed(); - Material rotatingMaterial = getRotatingMaterial(); + Material rotatingMaterial = materialManager.defaultSolid() + .material(AllInstanceTypes.ROTATING); for (Direction dir : Iterate.directionsInAxis(getRotationAxis())) { - Instancer half = rotatingMaterial.getModel(AllPartialModels.SHAFT_HALF, blockState, dir); + Instancer half = rotatingMaterial.getModel(AllPartialModels.SHAFT_HALF, blockState, dir); float splitSpeed = speed * blockEntity.getRotationSpeedModifier(dir); @@ -57,7 +59,7 @@ public class SplitShaftInstance extends KineticBlockEntityInstance extends CutoutR protected final boolean large; protected final WaterWheelModelKey key; - public WaterWheelInstance(MaterialManager materialManager, T blockEntity, boolean large) { + public WaterWheelInstance(VisualizationContext materialManager, T blockEntity, boolean large) { super(materialManager, blockEntity); this.large = large; key = new WaterWheelModelKey(large, getRenderedBlockState(), blockEntity.material); } - public static WaterWheelInstance standard(MaterialManager materialManager, T blockEntity) { + public static WaterWheelInstance standard(VisualizationContext materialManager, T blockEntity) { return new WaterWheelInstance<>(materialManager, blockEntity, false); } - public static WaterWheelInstance large(MaterialManager materialManager, T blockEntity) { + public static WaterWheelInstance large(VisualizationContext materialManager, T blockEntity) { return new WaterWheelInstance<>(materialManager, blockEntity, true); } @@ -38,8 +38,8 @@ public class WaterWheelInstance extends CutoutR } @Override - protected Instancer getModel() { - return getRotatingMaterial().model(key, () -> { + protected Model model() { + return model(key, () -> { BakedModel model = WaterWheelRenderer.generateModel(key); BlockState state = key.state(); Direction dir; diff --git a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelRenderer.java index 47106d1cd5..cb98124845 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelRenderer.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import com.jozufozu.flywheel.core.StitchedSprite; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.CreateClient; @@ -12,6 +11,7 @@ import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.foundation.model.BakedModelHelper; import com.simibubi.create.foundation.render.BakedModelRenderHelper; import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.StitchedSprite; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache.Compartment; import com.simibubi.create.foundation.utility.RegisteredObjects; @@ -100,7 +100,7 @@ public class WaterWheelRenderer extends Kinetic String namespace = id.getNamespace(); String wood = path.substring(0, path.length() - 7); BlockState logBlockState = getLogBlockState(namespace, wood); - + Map map = new Reference2ReferenceOpenHashMap<>(); map.put(OAK_PLANKS_TEMPLATE.get(), getSpriteOnSide(planksBlockState, Direction.UP)); map.put(OAK_LOG_TEMPLATE.get(), getSpriteOnSide(logBlockState, Direction.SOUTH)); diff --git a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java index b14838fd87..954a3672e8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.chute; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.logistics.chute.ChuteBlock.Shape; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; @@ -36,9 +36,9 @@ public class ChuteRenderer extends SafeBlockEntityRenderer { int light, int overlay) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); ms.pushPose(); - msr.centre(); + msr.center(); float itemScale = .5f; float itemPosition = be.itemPosition.getValue(partialTicks); ms.translate(0, -.5 + itemPosition, 0); diff --git a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java index fe2351061a..eae05059df 100644 --- a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.logistics.crate; import java.util.List; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; @@ -56,7 +56,7 @@ public class CreativeCrateBlockEntity extends CrateBlockEntity { @Override public void rotate(BlockState state, PoseStack ms) { - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(90); } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java index 5a239842f4..16dba7f1c0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.logistics.depot; import java.util.Random; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.belt.BeltHelper; @@ -38,7 +38,7 @@ public class DepotRenderer extends SafeBlockEntityRenderer { int light, int overlay, DepotBehaviour depotBehaviour) { TransportedItemStack transported = depotBehaviour.heldItem; - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); Vec3 itemPosition = VecHelper.getCenterOf(be.getBlockPos()); ms.pushPose(); @@ -102,7 +102,7 @@ public class DepotRenderer extends SafeBlockEntityRenderer { int angle, Random r, Vec3 itemPosition) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); int count = (int) (Mth.log2((int) (itemStack.getCount()))) / 2; boolean renderUpright = BeltHelper.isItemUpright(itemStack); boolean blockItem = itemRenderer.getModel(itemStack, null, null, 0) diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java index ad9a86236e..b008db682b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java @@ -6,7 +6,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; @@ -630,7 +630,7 @@ public class EjectorBlockEntity extends KineticBlockEntity { super.rotate(state, ms); return; } - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(angle(state)) .rotateX(90); } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java index 10b0b4d5dc..7208953ec4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.logistics.depot; import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; +import com.jozufozu.flywheel.api.instance.DynamicVisual; import com.jozufozu.flywheel.core.materials.model.ModelData; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftInstance; @@ -9,16 +9,16 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.util.Mth; -public class EjectorInstance extends ShaftInstance implements DynamicInstance { +public class EjectorInstance extends ShaftInstance implements DynamicVisual { protected final ModelData plate; private float lastProgress = Float.NaN; - public EjectorInstance(MaterialManager dispatcher, EjectorBlockEntity blockEntity) { + public EjectorInstance(VisualizationContext dispatcher, EjectorBlockEntity blockEntity) { super(dispatcher, blockEntity); - plate = getTransformMaterial().getModel(AllPartialModels.EJECTOR_TOP, blockState).createInstance(); + plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); pivotPlate(); } @@ -40,8 +40,8 @@ public class EjectorInstance extends ShaftInstance implement } @Override - public void remove() { - super.remove(); + protected void _delete() { + super._delete(); plate.delete(); } @@ -56,6 +56,6 @@ public class EjectorInstance extends ShaftInstance implement private void pivotPlate(float lidProgress) { float angle = lidProgress * 70; - EjectorRenderer.applyLidAngle(blockEntity, angle, plate.loadIdentity().translate(getInstancePosition())); + EjectorRenderer.applyLidAngle(blockEntity, angle, plate.loadIdentity().translate(getVisualPosition())); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java index ccb33d9dd3..f31624c0e5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.logistics.depot; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.util.transform.Rotate; -import com.jozufozu.flywheel.util.transform.TransformStack; -import com.jozufozu.flywheel.util.transform.Translate; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.transform.Rotate; +import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.Translate; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -45,14 +45,14 @@ public class EjectorRenderer extends ShaftRenderer { float lidProgress = be.getLidProgress(partialTicks); float angle = lidProgress * 70; - if (!Backend.canUseInstancing(be.getLevel())) { + if (!VisualizationManager.supportsVisualization(be.getLevel())) { SuperByteBuffer model = CachedBufferer.partial(AllPartialModels.EJECTOR_TOP, be.getBlockState()); applyLidAngle(be, angle, model); model.light(light) .renderInto(ms, vertexBuilder); } - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); float maxTime = (float) (be.earlyTarget != null ? be.earlyTargetTime : be.launcher.getTotalFlyingTicks()); @@ -81,10 +81,10 @@ public class EjectorRenderer extends ShaftRenderer { ms.pushPose(); applyLidAngle(be, angle, msr); - msr.centre() + msr.center() .rotateY(-180 - AngleHelper.horizontalAngle(be.getBlockState() .getValue(EjectorBlock.HORIZONTAL_FACING))) - .unCentre(); + .uncenter(); DepotRenderer.renderItemsOf(be, partialTicks, ms, buffer, light, overlay, behaviour); ms.popPose(); } @@ -94,10 +94,10 @@ public class EjectorRenderer extends ShaftRenderer { } static & Rotate> void applyLidAngle(KineticBlockEntity be, Vec3 rotationOffset, float angle, T tr) { - tr.centre() + tr.center() .rotateY(180 + AngleHelper.horizontalAngle(be.getBlockState() .getValue(EjectorBlock.HORIZONTAL_FACING))) - .unCentre() + .uncenter() .translate(rotationOffset) .rotateX(-angle) .translateBack(rotationOffset); diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java index 453c109a78..142cb039e8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java @@ -2,13 +2,15 @@ package com.simibubi.create.content.logistics.flwdata; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.core.materials.FlatLit; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.instance.FlatLit; import net.minecraft.client.renderer.LightTexture; import net.minecraft.core.BlockPos; -public class FlapData extends InstanceData implements FlatLit { +public class FlapData extends AbstractInstance implements FlatLit { float x; float y; @@ -26,6 +28,11 @@ public class FlapData extends InstanceData implements FlatLit { float flapScale; float flapness; + protected FlapData(InstanceType type, InstanceHandle handle) { + super(type, handle); + } + + public FlapData setPosition(BlockPos pos) { return setPosition(pos.getX(), pos.getY(), pos.getZ()); } @@ -38,21 +45,18 @@ public class FlapData extends InstanceData implements FlatLit { this.x = x; this.y = y; this.z = z; - markDirty(); return this; } @Override public FlapData setBlockLight(int blockLight) { this.blockLight = (byte) (blockLight & 0xF); - markDirty(); return this; } @Override public FlapData setSkyLight(int skyLight) { this.skyLight = (byte) (skyLight & 0xF); - markDirty(); return this; } @@ -65,31 +69,26 @@ public class FlapData extends InstanceData implements FlatLit { this.segmentOffsetX = x; this.segmentOffsetY = y; this.segmentOffsetZ = z; - markDirty(); return this; } public FlapData setIntensity(float intensity) { this.intensity = intensity; - markDirty(); return this; } public FlapData setHorizontalAngle(float horizontalAngle) { this.horizontalAngle = horizontalAngle; - markDirty(); return this; } public FlapData setFlapScale(float flapScale) { this.flapScale = flapScale; - markDirty(); return this; } public FlapData setFlapness(float flapness) { this.flapness = flapness; - markDirty(); return this; } @@ -97,7 +96,6 @@ public class FlapData extends InstanceData implements FlatLit { pivotX = x / 16f; pivotY = y / 16f; pivotZ = z / 16f; - markDirty(); return this; } diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java index 42adae76ed..f00da1e8fe 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java @@ -1,49 +1,51 @@ package com.simibubi.create.content.logistics.flwdata; -import com.jozufozu.flywheel.api.struct.Batched; -import com.jozufozu.flywheel.api.struct.Instanced; -import com.jozufozu.flywheel.api.struct.StructWriter; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.core.layout.BufferLayout; -import com.jozufozu.flywheel.core.model.ModelTransformer; -import com.simibubi.create.foundation.render.AllInstanceFormats; -import com.simibubi.create.foundation.render.AllProgramSpecs; +import com.jozufozu.flywheel.api.instance.InstanceHandle; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.api.instance.InstanceWriter; +import com.jozufozu.flywheel.api.layout.Layout; +import com.jozufozu.flywheel.lib.layout.BufferLayout; +import com.simibubi.create.foundation.render.AllInstanceLayouts; +import com.simibubi.create.foundation.render.AllInstanceShaders; import net.minecraft.resources.ResourceLocation; -public class FlapType implements Instanced, Batched { +public class FlapType implements InstanceType { @Override - public FlapData create() { - return new FlapData(); + public FlapData create(InstanceHandle instanceHandle) { + return new FlapData(this, instanceHandle); + } + + @Override + public Layout layout() { + return null; + } + + @Override + public InstanceWriter getWriter() { + return FlapWriter.INSTANCE; + } + + @Override + public ResourceLocation vertexShader() { + return null; + } + + @Override + public ResourceLocation cullShader() { + return null; } @Override public BufferLayout getLayout() { - return AllInstanceFormats.FLAP; - } - - @Override - public StructWriter getWriter(VecBuffer backing) { - return new UnsafeFlapWriter(backing, this); + return AllInstanceLayouts.FLAP; } @Override public ResourceLocation getProgramSpec() { - return AllProgramSpecs.FLAPS; + return AllInstanceShaders.FLAPS; } - @Override - public void transform(FlapData d, ModelTransformer.Params b) { - b.translate(d.x, d.y, d.z) - .centre() - .rotateY(-d.horizontalAngle) - .unCentre() - .translate(d.pivotX, d.pivotY, d.pivotZ) - .rotateX(getFlapAngle(d.flapness, d.intensity, d.flapScale)) - .translateBack(d.pivotX, d.pivotY, d.pivotZ) - .translate(d.segmentOffsetX, d.segmentOffsetY, d.segmentOffsetZ) - .light(d.getPackedLight()); - } private static float getFlapAngle(float flapness, float intensity, float scale) { float absFlap = Math.abs(flapness); diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java new file mode 100644 index 0000000000..e26b3d844f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java @@ -0,0 +1,28 @@ +package com.simibubi.create.content.logistics.flwdata; + +import org.lwjgl.system.MemoryUtil; + +import com.jozufozu.flywheel.api.instance.InstanceWriter; + +public class FlapWriter implements InstanceWriter { + public static final FlapWriter INSTANCE = new FlapWriter(); + + @Override + public void write(long ptr, FlapData d) { + MemoryUtil.memPutFloat(ptr, d.x); + MemoryUtil.memPutFloat(ptr + 4, d.y); + MemoryUtil.memPutFloat(ptr + 8, d.z); + MemoryUtil.memPutByte(ptr + 12, (byte) (d.blockLight << 4)); + MemoryUtil.memPutByte(ptr + 13, (byte) (d.skyLight << 4)); + MemoryUtil.memPutFloat(ptr + 14, d.segmentOffsetX); + MemoryUtil.memPutFloat(ptr + 18, d.segmentOffsetY); + MemoryUtil.memPutFloat(ptr + 22, d.segmentOffsetZ); + MemoryUtil.memPutFloat(ptr + 26, d.pivotX); + MemoryUtil.memPutFloat(ptr + 30, d.pivotY); + MemoryUtil.memPutFloat(ptr + 34, d.pivotZ); + MemoryUtil.memPutFloat(ptr + 38, d.horizontalAngle); + MemoryUtil.memPutFloat(ptr + 42, d.intensity); + MemoryUtil.memPutFloat(ptr + 46, d.flapScale); + MemoryUtil.memPutFloat(ptr + 50, d.flapness); + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/UnsafeFlapWriter.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/UnsafeFlapWriter.java deleted file mode 100644 index 4ca7961d5d..0000000000 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/UnsafeFlapWriter.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.simibubi.create.content.logistics.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.api.struct.StructType; -import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; -import com.jozufozu.flywheel.backend.struct.UnsafeBufferWriter; - -public class UnsafeFlapWriter extends UnsafeBufferWriter { - public UnsafeFlapWriter(VecBuffer backingBuffer, StructType vertexType) { - super(backingBuffer, vertexType); - } - - @Override - protected void writeInternal(FlapData d) { - long addr = writePointer; - MemoryUtil.memPutFloat(addr, d.x); - MemoryUtil.memPutFloat(addr + 4, d.y); - MemoryUtil.memPutFloat(addr + 8, d.z); - MemoryUtil.memPutByte(addr + 12, (byte) (d.blockLight << 4)); - MemoryUtil.memPutByte(addr + 13, (byte) (d.skyLight << 4)); - MemoryUtil.memPutFloat(addr + 14, d.segmentOffsetX); - MemoryUtil.memPutFloat(addr + 18, d.segmentOffsetY); - MemoryUtil.memPutFloat(addr + 22, d.segmentOffsetZ); - MemoryUtil.memPutFloat(addr + 26, d.pivotX); - MemoryUtil.memPutFloat(addr + 30, d.pivotY); - MemoryUtil.memPutFloat(addr + 34, d.pivotZ); - MemoryUtil.memPutFloat(addr + 38, d.horizontalAngle); - MemoryUtil.memPutFloat(addr + 42, d.intensity); - MemoryUtil.memPutFloat(addr + 46, d.flapScale); - MemoryUtil.memPutFloat(addr + 50, d.flapness); - } -} diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java index 00474106b5..83ebe10e06 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java @@ -5,7 +5,7 @@ import java.util.List; import org.apache.commons.lang3.mutable.MutableBoolean; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllSoundEvents; @@ -117,7 +117,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering private void activateExtractor() { if (invVersionTracker.stillWaiting(invManipulation)) return; - + BlockState blockState = getBlockState(); Direction facing = AbstractFunnelBlock.getFunnelFacing(blockState); @@ -259,7 +259,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering new InvManipulationBehaviour(this, (w, p, s) -> new BlockFace(p, AbstractFunnelBlock.getFunnelFacing(s) .getOpposite())); behaviours.add(invManipulation); - + behaviours.add(invVersionTracker = new VersionedInventoryTrackerBehaviour(this)); filtering = new FilteringBehaviour(this, new FunnelFilterSlotPositioning()); @@ -267,7 +267,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering filtering.onlyActiveWhen(this::supportsFiltering); filtering.withCallback($ -> invVersionTracker.reset()); behaviours.add(filtering); - + behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput) .setInsertionHandler(this::handleDirectBeltInput)); registerAwardables(behaviours, AllAdvancements.FUNNEL); @@ -363,7 +363,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering extractionCooldown = compound.getInt("TransferCooldown"); if (clientPacket) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); } public void onTransfer(ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java index 8de1dd63d1..9757f9360c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.funnel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.logistics.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; @@ -59,21 +59,21 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { Shape shape = state.getValue(BeltFunnelBlock.SHAPE); super.rotate(state, ms); if (shape == Shape.PULLING || shape == Shape.PUSHING) - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(-22.5f); return; } if (state.getBlock() instanceof FunnelBlock) { super.rotate(state, ms); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(-22.5f); return; } float yRot = AngleHelper.horizontalAngle(AbstractFunnelBlock.getFunnelFacing(state)) + (facing == Direction.DOWN ? 180 : 0); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot) .rotateX(facing == Direction.DOWN ? -90 : 90); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java index c386dc75d7..50af356467 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java @@ -5,22 +5,22 @@ import java.util.ArrayList; import com.jozufozu.flywheel.api.InstanceData; import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; +import com.jozufozu.flywheel.api.instance.DynamicVisual; import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapData; -import com.simibubi.create.foundation.render.AllMaterialSpecs; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class FunnelInstance extends BlockEntityInstance implements DynamicInstance { +public class FunnelInstance extends BlockEntityInstance implements DynamicVisual { private final ArrayList flaps; - public FunnelInstance(MaterialManager materialManager, FunnelBlockEntity blockEntity) { + public FunnelInstance(VisualizationContext materialManager, FunnelBlockEntity blockEntity) { super(materialManager, blockEntity); flaps = new ArrayList<>(4); @@ -29,9 +29,7 @@ public class FunnelInstance extends BlockEntityInstance imple PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllPartialModels.FUNNEL_FLAP : AllPartialModels.BELT_FUNNEL_FLAP); - Instancer model = materialManager.defaultSolid() - .material(AllMaterialSpecs.FLAPS) - .getModel(flapPartial, blockState); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial), RenderStage.AFTER_BLOCK_ENTITIES); int blockLight = world.getBrightness(LightLayer.BLOCK, pos); int skyLight = world.getBrightness(LightLayer.SKY, pos); @@ -47,7 +45,7 @@ public class FunnelInstance extends BlockEntityInstance imple FlapData key = model.createInstance(); - key.setPosition(getInstancePosition()) + key.setPosition(getVisualPosition()) .setSegmentOffset(segmentOffset, 0, -blockEntity.getFlapOffset()) .setBlockLight(blockLight) .setSkyLight(skyLight) @@ -82,6 +80,6 @@ public class FunnelInstance extends BlockEntityInstance imple public void remove() { if (flaps == null) return; - flaps.forEach(InstanceData::delete); + flaps.forEach(AbstractInstance::delete); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java index 65105f1d49..b8ef29fd64 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.logistics.funnel; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -30,7 +30,7 @@ public class FunnelRenderer extends SmartBlockEntityRenderer int light, int overlay) { super.renderSafe(be, partialTicks, ms, buffer, light, overlay); - if (!be.hasFlap() || Backend.canUseInstancing(be.getLevel())) + if (!be.hasFlap() || VisualizationManager.supportsVisualization(be.getLevel())) return; BlockState blockState = be.getBlockState(); @@ -39,16 +39,16 @@ public class FunnelRenderer extends SmartBlockEntityRenderer : AllPartialModels.BELT_FUNNEL_FLAP); SuperByteBuffer flapBuffer = CachedBufferer.partial(partialModel, blockState); Vec3 pivot = VecHelper.voxelSpace(0, 10, 9.5f); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); float horizontalAngle = AngleHelper.horizontalAngle(FunnelBlock.getFunnelFacing(blockState) .getOpposite()); float f = be.flap.getValue(partialTicks); ms.pushPose(); - msr.centre() + msr.center() .rotateY(horizontalAngle) - .unCentre(); + .uncenter(); ms.translate(0.075f / 16f, 0, -be.getFlapOffset()); for (int segment = 0; segment <= 3; segment++) { diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java index 4120501568..86507b2db3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java @@ -9,7 +9,7 @@ import java.util.Set; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.content.logistics.funnel.BeltFunnelBlock; @@ -109,7 +109,7 @@ public class BeltTunnelBlockEntity extends SmartBlockEntity { sides.addAll(flaps.keySet()); super.read(compound, clientPacket); if (clientPacket) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); } private LerpedFloat createChasingFlap() { diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java index ccbd7d4a07..4d855d2a3c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java @@ -8,29 +8,27 @@ import java.util.Map; import com.jozufozu.flywheel.api.InstanceData; import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; +import com.jozufozu.flywheel.api.instance.DynamicVisual; import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapData; -import com.simibubi.create.foundation.render.AllMaterialSpecs; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class BeltTunnelInstance extends BlockEntityInstance implements DynamicInstance { +public class BeltTunnelInstance extends BlockEntityInstance implements DynamicVisual { private final Map> tunnelFlaps; - public BeltTunnelInstance(MaterialManager materialManager, BeltTunnelBlockEntity blockEntity) { + public BeltTunnelInstance(VisualizationContext materialManager, BeltTunnelBlockEntity blockEntity) { super(materialManager, blockEntity); tunnelFlaps = new EnumMap<>(Direction.class); - Instancer model = materialManager.defaultSolid() - .material(AllMaterialSpecs.FLAPS) - .getModel(AllPartialModels.BELT_TUNNEL_FLAP, blockState); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP), RenderStage.AFTER_BLOCK_ENTITIES); int blockLight = world.getBrightness(LightLayer.BLOCK, pos); int skyLight = world.getBrightness(LightLayer.SKY, pos); @@ -51,7 +49,7 @@ public class BeltTunnelInstance extends BlockEntityInstance { LerpedFloat lerpedFloat = blockEntity.flaps.get(direction); - if (lerpedFloat == null) + if (lerpedFloat == null) return; float flapness = lerpedFloat.getValue(AnimationTickHolder.getPartialTicks()); @@ -97,6 +95,6 @@ public class BeltTunnelInstance extends BlockEntityInstance { BlockPos pos = basin.getBlockPos(); ms.translate(.5, .2f, .5); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(basin.ingredientRotation.getValue(partialTicks)); RandomSource r = RandomSource.create(pos.hashCode()); @@ -79,7 +79,7 @@ public class BasinRenderer extends SmartBlockEntityRenderer { Vec3 itemPosition = VecHelper.rotate(baseVector, anglePartition * itemCount, Axis.Y); ms.translate(itemPosition.x, itemPosition.y, itemPosition.z); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(anglePartition * itemCount + 35) .rotateX(65); @@ -121,7 +121,7 @@ public class BasinRenderer extends SmartBlockEntityRenderer { continue; ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(outVec) .translate(new Vec3(0, Math.max(-.55f, -(progress * progress * 2)), 0)) .translate(directionVec.scale(progress * .5f)) diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java index 976db1a60f..e896467888 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.processing.burner; import javax.annotation.Nullable; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -158,9 +158,9 @@ public class BlazeBurnerRenderer extends SafeBlockEntityRenderer implements DynamicInstance { +public class AnalogLeverInstance extends BlockEntityInstance implements DynamicVisual { protected final ModelData handle; protected final ModelData indicator; @@ -23,10 +23,10 @@ public class AnalogLeverInstance extends BlockEntityInstance mat = getTransformMaterial(); + Material mat = materialManager.defaultSolid().material(InstanceTypes.TRANSFORMED); handle = mat.getModel(AllPartialModels.ANALOG_LEVER_HANDLE, blockState) .createInstance(); @@ -71,10 +71,10 @@ public class AnalogLeverInstance extends BlockEntityInstance & Rotate> T transform(T msr) { - return msr.translate(getInstancePosition()) - .centre() + return msr.translate(getVisualPosition()) + .center() .rotate(Direction.UP, (float) (rY / 180 * Math.PI)) .rotate(Direction.EAST, (float) (rX / 180 * Math.PI)) - .unCentre(); + .uncenter(); } } diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java index 89a6150c16..9d5c431f24 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java @@ -26,7 +26,7 @@ public class AnalogLeverRenderer extends SafeBlockEntityRenderer implements TickableInstance { +public class BrassDiodeInstance extends BlockEntityInstance implements TickableVisual { protected final ModelData indicator; protected int previousState; - public BrassDiodeInstance(MaterialManager materialManager, BrassDiodeBlockEntity blockEntity) { + public BrassDiodeInstance(VisualizationContext materialManager, BrassDiodeBlockEntity blockEntity) { super(materialManager, blockEntity); - indicator = materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(AllPartialModels.FLEXPEATER_INDICATOR, blockState).createInstance(); + indicator = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLEXPEATER_INDICATOR), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); indicator.loadIdentity() - .translate(getInstancePosition()) + .translate(getVisualPosition()) .setColor(getColor()); previousState = blockEntity.state; diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java index c492cae703..0d875f90c4 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.diodes; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; @@ -20,7 +20,7 @@ public class BrassDiodeScrollSlot extends ValueBoxTransform { @Override public void rotate(BlockState state, PoseStack ms) { float yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)) + 180; - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot) .rotateX(90); } @@ -29,5 +29,5 @@ public class BrassDiodeScrollSlot extends ValueBoxTransform { public int getOverrideColor() { return 0x592424; } - + } diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java index c53bb68e8d..af4a5107f3 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.displayLink; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; @@ -33,7 +33,7 @@ public class DisplayLinkRenderer extends SafeBlockEntityRenderer implements DynamicInstance { +public class SchematicannonInstance extends BlockEntityInstance implements DynamicVisual { private final ModelData connector; private final ModelData pipe; - public SchematicannonInstance(MaterialManager materialManager, SchematicannonBlockEntity blockEntity) { + public SchematicannonInstance(VisualizationContext materialManager, SchematicannonBlockEntity blockEntity) { super(materialManager, blockEntity); - Material mat = getTransformMaterial(); + Material mat = materialManager.defaultSolid().material(InstanceTypes.TRANSFORMED); connector = mat.getModel(AllPartialModels.SCHEMATICANNON_CONNECTOR, blockState).createInstance(); pipe = mat.getModel(AllPartialModels.SCHEMATICANNON_PIPE, blockState).createInstance(); @@ -38,14 +38,14 @@ public class SchematicannonInstance extends BlockEntityInstance commonRenderer; public BogeyInstance(CarriageBogey bogey, BogeyStyle style, BogeySizes.BogeySize size, - MaterialManager materialManager) { + VisualizationContext materialManager) { this.bogey = bogey; this.size = size; this.style = style; @@ -60,6 +60,6 @@ public final class BogeyInstance { @FunctionalInterface interface BogeyInstanceFactory { - BogeyInstance create(CarriageBogey bogey, BogeySizes.BogeySize size, MaterialManager materialManager); + BogeyInstance create(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext materialManager); } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java index 3bb782c6fa..55d201a15d 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java @@ -11,11 +11,9 @@ import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.materials.model.ModelData; -import com.jozufozu.flywheel.util.transform.Transform; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.Transform; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.trains.entity.CarriageBogey; @@ -27,6 +25,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.model.data.ModelData; /** * This is a port of the bogey api from Extended Bogeys, If you are looking to implement your own bogeys you can find some helpful resources below: @@ -182,7 +181,7 @@ public abstract class BogeyRenderer { * @param carriageBogey The bogey to create data for */ @OnlyIn(Dist.CLIENT) - public abstract void initialiseContraptionModelData(MaterialManager materialManager, CarriageBogey carriageBogey); + public abstract void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey); /** * Creates instances of models for in-world rendering to a set length from a provided partial model @@ -191,11 +190,9 @@ public abstract class BogeyRenderer { * @param model Partial model to be instanced * @param count Amount of models neeeded */ - public void createModelInstance(MaterialManager materialManager, PartialModel model, int count) { + public void createModelInstance(VisualizationContext materialManager, PartialModel model, int count) { BogeyModelData[] modelData = IntStream.range(0, count) - .mapToObj(i -> materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(model).createInstance()) + .mapToObj(i -> instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.block(model).createInstance()), RenderStage.AFTER_BLOCK_ENTITIES) .map(BogeyModelData::new) .toArray(BogeyModelData[]::new); contraptionModelData.put(keyFromModel(model), modelData); @@ -208,11 +205,9 @@ public abstract class BogeyRenderer { * @param state Blockstate of the model to be created * @param count Amount of models needed */ - public void createModelInstance(MaterialManager materialManager, BlockState state, int count) { + public void createModelInstance(VisualizationContext materialManager, BlockState state, int count) { BogeyModelData[] modelData = IntStream.range(0, count) - .mapToObj(i -> materialManager.defaultSolid() - .material(Materials.TRANSFORMED) - .getModel(state).createInstance()) + .mapToObj(i -> instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.block(state).createInstance()), RenderStage.AFTER_BLOCK_ENTITIES) .map(BogeyModelData::new) .toArray(BogeyModelData[]::new); contraptionModelData.put(keyFromModel(state), modelData); @@ -224,9 +219,9 @@ public abstract class BogeyRenderer { * @param materialManager The material manager * @param states Blockstates of the models to be created */ - public void createModelInstance(MaterialManager materialManager, BlockState... states) { + public void createModelInstance(VisualizationContext materialManager, BlockState... states) { for (BlockState state : states) - this.createModelInstance(materialManager, state, 1); + this.createModelInstance(VisualizationContext, state, 1); } /** @@ -235,9 +230,9 @@ public abstract class BogeyRenderer { * @param materialManager The material manager * @param models The type of model to create instances of */ - public void createModelInstance(MaterialManager materialManager, PartialModel... models) { + public void createModelInstance(VisualizationContext materialManager, PartialModel... models) { for (PartialModel model : models) - createModelInstance(materialManager, model, 1); + createModelInstance(VisualizationContext, model, 1); } /** diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java index c1b63f7851..e047138e94 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java @@ -9,7 +9,7 @@ import java.util.stream.Stream; import org.jetbrains.annotations.NotNull; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.trains.bogey.BogeyRenderer.CommonRenderer; @@ -28,7 +28,7 @@ import net.minecraftforge.registries.ForgeRegistries; public class BogeyStyle { - + public final ResourceLocation name; public final ResourceLocation cycleGroup; public final Component displayName; @@ -36,13 +36,13 @@ public class BogeyStyle { public final ParticleOptions contactParticle; public final ParticleOptions smokeParticle; public final CompoundTag defaultData; - + private Optional> commonRendererFactory; private Map sizes; - + @OnlyIn(Dist.CLIENT) private Map sizeRenderers; - + @OnlyIn(Dist.CLIENT) private Optional commonRenderer; @@ -51,7 +51,7 @@ public class BogeyStyle { CompoundTag defaultData, Map sizes, Map> sizeRenderers, Optional> commonRenderer) { - + this.name = name; this.cycleGroup = cycleGroup; this.displayName = displayName; @@ -64,7 +64,7 @@ public class BogeyStyle { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { this.sizeRenderers = new HashMap<>(); sizeRenderers.forEach((k, v) -> this.sizeRenderers.put(k, v.get())); - + this.commonRendererFactory = commonRenderer; this.commonRenderer = commonRenderer.map(Supplier::get); }); @@ -116,7 +116,7 @@ public class BogeyStyle { return this.commonRendererFactory.map(Supplier::get); } - public BogeyInstance createInstance(CarriageBogey bogey, BogeySizes.BogeySize size, MaterialManager materialManager) { + public BogeyInstance createInstance(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext materialManager) { return new BogeyInstance(bogey, this, size, materialManager); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java index 8b2cc6f7ee..b6179bce63 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java @@ -7,7 +7,7 @@ import static com.simibubi.create.AllPartialModels.BOGEY_PISTON; import static com.simibubi.create.AllPartialModels.LARGE_BOGEY_WHEELS; import static com.simibubi.create.AllPartialModels.SMALL_BOGEY_WHEELS; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; @@ -22,8 +22,8 @@ import net.minecraft.nbt.CompoundTag; public class StandardBogeyRenderer { public static class CommonStandardBogeyRenderer extends BogeyRenderer.CommonRenderer { @Override - public void initialiseContraptionModelData(MaterialManager materialManager, CarriageBogey carriageBogey) { - createModelInstance(materialManager, AllBlocks.SHAFT.getDefaultState() + public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { + createModelInstance(VisualizationContext, AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.Z), 2); } @@ -34,9 +34,9 @@ public class StandardBogeyRenderer { .setValue(ShaftBlock.AXIS, Direction.Axis.Z), ms, inInstancedContraption, 2); for (int i : Iterate.zeroAndOne) { shafts[i].translate(-.5f, .25f, i * -1) - .centre() + .center() .rotateZ(wheelAngle) - .unCentre() + .uncenter() .render(ms, light, vb); } } @@ -45,9 +45,9 @@ public class StandardBogeyRenderer { public static class SmallStandardBogeyRenderer extends BogeyRenderer { @Override - public void initialiseContraptionModelData(MaterialManager materialManager, CarriageBogey carriageBogey) { - createModelInstance(materialManager, SMALL_BOGEY_WHEELS, 2); - createModelInstance(materialManager, BOGEY_FRAME); + public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { + createModelInstance(VisualizationContext, SMALL_BOGEY_WHEELS, 2); + createModelInstance(VisualizationContext, BOGEY_FRAME); } @@ -78,9 +78,9 @@ public class StandardBogeyRenderer { public static class LargeStandardBogeyRenderer extends BogeyRenderer { @Override - public void initialiseContraptionModelData(MaterialManager materialManager, CarriageBogey carriageBogey) { - createModelInstance(materialManager, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); - createModelInstance(materialManager, AllBlocks.SHAFT.getDefaultState() + public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { + createModelInstance(VisualizationContext, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); + createModelInstance(VisualizationContext, AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.X), 2); } @@ -99,9 +99,9 @@ public class StandardBogeyRenderer { for (int i : Iterate.zeroAndOne) { secondaryShafts[i] .translate(-.5f, .25f, .5f + i * -2) - .centre() + .center() .rotateX(wheelAngle) - .unCentre() + .uncenter() .render(ms, light, vb); } diff --git a/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java b/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java index bab9d8b9e1..48aa7c6bfd 100644 --- a/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java @@ -4,7 +4,7 @@ import java.util.List; import org.joml.Matrix4f; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.font.GlyphInfo; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; @@ -56,11 +56,11 @@ public class FlapDisplayRenderer extends KineticBlockEntityRenderer lines = be.getLines(); ms.pushPose(); - TransformStack.cast(ms) - .centre() + TransformStack.of(ms) + .center() .rotateY(AngleHelper.horizontalAngle(be.getBlockState() .getValue(FlapDisplayBlock.HORIZONTAL_FACING))) - .unCentre() + .uncenter() .translate(0, 0, -3 / 16f); ms.translate(0, 1, 1); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java index fd2a16511c..17c8f1444f 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java @@ -5,7 +5,7 @@ import static com.simibubi.create.content.trains.bogey.AbstractBogeyBlockEntity. import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.Create; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; @@ -199,7 +199,7 @@ public class CarriageBogey { return new CarriageBogey(type, upsideDown, data, points.getFirst(), points.getSecond()); } - public BogeyInstance createInstance(MaterialManager materialManager) { + public BogeyInstance createInstance(VisualizationContext materialManager) { return this.getStyle().createInstance(this, type.getSize(), materialManager); } diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java index bd53bcc81e..7e569d1f2a 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.trains.entity; import java.util.Objects; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer; @@ -58,7 +58,7 @@ public class CarriageContraptionEntityRenderer extends ContraptionEntityRenderer : BlockPos.ZERO.relative(entity.getInitialOrientation() .getCounterClockWise(), bogeySpacing); - if (!Backend.canUseInstancing(entity.level()) && !entity.getContraption() + if (!VisualizationManager.supportsVisualization(entity.level()) && !entity.getContraption() .isHiddenInPortal(bogeyPos)) { ms.pushPose(); @@ -83,7 +83,7 @@ public class CarriageContraptionEntityRenderer extends ContraptionEntityRenderer float viewXRot, float partialTicks) { boolean selfUpsideDown = bogey.isUpsideDown(); boolean leadingUpsideDown = bogey.carriage.leadingBogey().isUpsideDown(); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(viewYRot + 90) .rotateX(-viewXRot) .rotateY(180) diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java index 748a667232..0da1adccf7 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java @@ -2,18 +2,19 @@ package com.simibubi.create.content.trains.entity; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicInstance; -import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; -import com.jozufozu.flywheel.util.AnimationTickHolder; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.bogey.BogeyInstance; import com.simibubi.create.content.trains.bogey.BogeyRenderer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; -public class CarriageContraptionInstance extends EntityInstance implements DynamicInstance { +public class CarriageContraptionInstance extends AbstractEntityVisual implements DynamicVisual { private final PoseStack ms = new PoseStack(); @@ -21,7 +22,7 @@ public class CarriageContraptionInstance extends EntityInstance bogeys; private Couple bogeyHidden; - public CarriageContraptionInstance(MaterialManager materialManager, CarriageContraptionEntity entity) { + public CarriageContraptionInstance(VisualizationContext materialManager, CarriageContraptionEntity entity) { super(materialManager, entity); bogeyHidden = Couple.create(() -> false); entity.bindInstance(this); @@ -44,7 +45,7 @@ public class CarriageContraptionInstance extends EntityInstance { if (instance != null) - instance.updateLight(world, entity); + instance.updateLight(level, entity); }); } @Override - public void remove() { + public void _delete() { if (bogeys == null) return; @@ -108,9 +109,4 @@ public class CarriageContraptionInstance extends EntityInstance currentPath.add(Couple .deserializeEach(c.getList("Nodes", Tag.TAG_COMPOUND), c2 -> TrackNodeLocation.read(c2, dimensions)) .map(graph::locateNode))); - + removeBrokenPathEntries(); - + waitingForSignal = tag.contains("BlockingSignal") ? Pair.of(tag.getUUID("BlockingSignal"), tag.getBoolean("BlockingSignalSide")) : null; @@ -903,7 +902,7 @@ public class Navigation { * Trains might load or save with null entries in their path, this method avoids * that anomaly from causing NPEs. The underlying issue has not been found. */ - + boolean nullEntriesPresent = false; for (Iterator> iterator = currentPath.iterator(); iterator.hasNext();) { diff --git a/src/main/java/com/simibubi/create/content/trains/graph/DiscoveredPath.java b/src/main/java/com/simibubi/create/content/trains/graph/DiscoveredPath.java index 398b261e1b..2e9be4fe3a 100644 --- a/src/main/java/com/simibubi/create/content/trains/graph/DiscoveredPath.java +++ b/src/main/java/com/simibubi/create/content/trains/graph/DiscoveredPath.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.trains.graph; +import java.util.List; + import com.simibubi.create.content.trains.station.GlobalStation; import com.simibubi.create.foundation.utility.Couple; -import java.util.List; - public class DiscoveredPath { public List> path; public GlobalStation destination; diff --git a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java index 48e01b499a..f52416787c 100644 --- a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java @@ -4,7 +4,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.ITransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; @@ -73,7 +73,7 @@ public class TrackObserverBlockEntity extends SmartBlockEntity implements ITrans public TrackObserver getObserver() { return edgePoint.getEdgePoint(); } - + public ItemStack getFilter() { return filtering.getFilter(); } @@ -98,7 +98,7 @@ public class TrackObserverBlockEntity extends SmartBlockEntity implements ITrans @Override public void rotate(BlockState state, PoseStack ms) { - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(90); } diff --git a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java index f553023964..52ac64f035 100644 --- a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.observer; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.track.ITrackBlock; import com.simibubi.create.content.trains.track.TrackTargetingBehaviour; @@ -36,7 +36,7 @@ public class TrackObserverRenderer extends SmartBlockEntityRenderer= size) { if (!schedule.cyclic) diff --git a/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java b/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java index 2ffa5c6af7..d8d570b488 100644 --- a/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java @@ -15,7 +15,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL30; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -560,7 +560,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen { matrixStack.popPose(); if (xOffset + 16 > cardWidth - 26) { - TransformStack.cast(matrixStack) + TransformStack.of(matrixStack) .rotateZ(-90); int zLevel = 200; graphics.fillGradient(-cardHeight + 2, 18, -2 - cardHeader, 28, zLevel, 0x44000000, 0x00000000); diff --git a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java index 6bd8c4a023..31fc862936 100644 --- a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.schedule; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.Contraption; @@ -59,7 +59,7 @@ public class TrainHatArmorLayer ms.pushPose(); boolean valid = false; - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); float scale = 1; if (entityModel instanceof AgeableListModel model) { diff --git a/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java b/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java index 6d5bb09eba..29bbc5921a 100644 --- a/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.signal; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.trains.signal.SignalBlockEntity.OverlayState; @@ -53,7 +53,7 @@ public class SignalRenderer extends SafeBlockEntityRenderer { return; ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(targetPosition.subtract(pos)); RenderedTrackOverlayType type = overlayState == OverlayState.DUAL ? RenderedTrackOverlayType.DUAL_SIGNAL : RenderedTrackOverlayType.SIGNAL; diff --git a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java index ff5d1ef153..fa7de94162 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java @@ -3,8 +3,8 @@ package com.simibubi.create.content.trains.station; import java.lang.ref.WeakReference; import java.util.List; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.compat.computercraft.ComputerScreen; @@ -99,7 +99,7 @@ public abstract class AbstractStationScreen extends AbstractSimiScreen { private void renderAdditional(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks, int guiLeft, int guiTop, AllGuiTextures background) { PoseStack ms = graphics.pose(); ms.pushPose(); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); msr.pushPose() .translate(guiLeft + background.width + 4, guiTop + background.height + 4, 100) .scale(40) diff --git a/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java index 28cdceeefb..1332f4263b 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.trains.station; import java.lang.ref.WeakReference; import java.util.List; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPackets; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AssemblyException; diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java index 0a9bff4ede..7eba9a83b3 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java @@ -13,8 +13,6 @@ import java.util.function.Consumer; import javax.annotation.Nullable; -import com.simibubi.create.content.trains.graph.DiscoveredPath; - import org.jetbrains.annotations.NotNull; import com.simibubi.create.AllBlocks; @@ -38,6 +36,7 @@ import com.simibubi.create.content.trains.entity.CarriageContraption; import com.simibubi.create.content.trains.entity.Train; import com.simibubi.create.content.trains.entity.TrainPacket; import com.simibubi.create.content.trains.entity.TravellingPoint; +import com.simibubi.create.content.trains.graph.DiscoveredPath; import com.simibubi.create.content.trains.graph.EdgePointType; import com.simibubi.create.content.trains.graph.TrackEdge; import com.simibubi.create.content.trains.graph.TrackGraph; @@ -288,7 +287,7 @@ public class StationBlockEntity extends SmartBlockEntity implements ITransformab BlockPos up = BlockPos.containing(track.getUpNormal(level, pos, state)); BlockPos down = BlockPos.containing(track.getUpNormal(level, pos, state).scale(-1)); int bogeyOffset = pos.distManhattan(edgePoint.getGlobalPosition()) - 1; - + if (!isValidBogeyOffset(bogeyOffset)) { for (boolean upsideDown : Iterate.falseAndTrue) { for (int i = -1; i <= 1; i++) { @@ -619,13 +618,13 @@ public class StationBlockEntity extends SmartBlockEntity implements ITransformab BlockPos bogeyOffset = BlockPos.containing(track.getUpNormal(level, trackPosition, trackState)); TrackNodeLocation location = null; - Vec3 centre = Vec3.atBottomCenterOf(trackPosition) + Vec3 center = Vec3.atBottomCenterOf(trackPosition) .add(0, track.getElevationAtCenter(level, trackPosition, trackState), 0); Collection ends = track.getConnected(level, trackPosition, trackState, true, null); Vec3 targetOffset = Vec3.atLowerCornerOf(assemblyDirection.getNormal()); for (DiscoveredLocation end : ends) if (Mth.equal(0, targetOffset.distanceToSqr(end.getLocation() - .subtract(centre) + .subtract(center) .normalize()))) location = end; if (location == null) diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java b/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java index c76a0d4939..c2c5262ec6 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.trains.station; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.Transform; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.Transform; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -49,13 +49,13 @@ public class StationRenderer extends SafeBlockEntityRenderer GlobalStation station = be.getStation(); boolean isAssembling = be.getBlockState() .getValue(StationBlock.ASSEMBLING); - + if (!isAssembling || (station == null || station.getPresentTrain() != null) && !be.isVirtual()) { renderFlag( be.flag.getValue(partialTicks) > 0.75f ? AllPartialModels.STATION_ON : AllPartialModels.STATION_OFF, be, partialTicks, ms, buffer, light, overlay); ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(targetPosition.subtract(pos)); TrackTargetingBehaviour.render(level, targetPosition, target.getTargetDirection(), target.getTargetBezier(), ms, buffer, light, overlay, RenderedTrackOverlayType.STATION, 1); @@ -70,7 +70,7 @@ public class StationRenderer extends SafeBlockEntityRenderer if (be.isVirtual() && be.bogeyLocations == null) be.refreshAssemblyInfo(); - + if (direction == null || be.assemblyLength == 0 || be.bogeyLocations == null) return; @@ -134,10 +134,10 @@ public class StationRenderer extends SafeBlockEntityRenderer } float nudge = 1 / 512f; - flag.centre() + flag.center() .rotateY(yRot) .translate(nudge, 9.5f / 16f, flipped ? 14f / 16f - nudge : 2f / 16f + nudge) - .unCentre() + .uncenter() .rotateX((flipped ? 1 : -1) * (progress * 90 + 270)); } diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java index ffbdb584f6..282d2fdacd 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java @@ -4,7 +4,7 @@ import java.lang.ref.WeakReference; import java.util.List; import java.util.function.Consumer; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -252,7 +252,7 @@ public class StationScreen extends AbstractStationScreen { AllGuiTextures.STATION_EDIT_NAME.render(graphics, nameBoxX(text, nameBox) + font.width(text) + 5, y + 1); graphics.renderItem(AllBlocks.TRAIN_DOOR.asStack(), x + 14, y + 103); - + Train train = displayedTrain.get(); if (train == null) { MutableComponent header = Lang.translateDirect("station.idle"); diff --git a/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java b/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java index f252f7757a..f74dece9af 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java +++ b/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java @@ -11,7 +11,6 @@ import com.simibubi.create.foundation.utility.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java index 6f07441985..77042f00d3 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.trains.track; import java.util.Iterator; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.simibubi.create.AllBlocks; @@ -542,7 +542,7 @@ public class BezierConnection implements Iterable { angles.railTransforms = Couple.create(null, null); PoseStack poseStack = new PoseStack(); - TransformStack.cast(poseStack) + TransformStack.of(poseStack) .translate(prevMiddle) .rotateYRadians(tieAngles.y) .rotateXRadians(tieAngles.x) @@ -559,7 +559,7 @@ public class BezierConnection implements Iterable { Vec3 anglesI = TrackRenderer.getModelAngles(segment.normal, diff); poseStack = new PoseStack(); - TransformStack.cast(poseStack) + TransformStack.of(poseStack) .translate(prevI) .rotateYRadians(anglesI.y) .rotateXRadians(anglesI.x) @@ -634,7 +634,7 @@ public class BezierConnection implements Iterable { Vec3 beamAngles = TrackRenderer.getModelAngles(segment.normal, beamDiff); PoseStack poseStack = new PoseStack(); - TransformStack.cast(poseStack) + TransformStack.of(poseStack) .translate(previousBeam) .rotateYRadians(beamAngles.y) .rotateXRadians(beamAngles.x) @@ -653,7 +653,7 @@ public class BezierConnection implements Iterable { Vec3 capAngles = TrackRenderer.getModelAngles(segment.normal, diff); poseStack = new PoseStack(); - TransformStack.cast(poseStack) + TransformStack.of(poseStack) .translate(previous) .rotateYRadians(capAngles.y) .rotateXRadians(capAngles.x) diff --git a/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java index c5c2d57a1a..25cea1585a 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java @@ -8,7 +8,7 @@ import java.util.function.Function; import javax.annotation.Nullable; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.graph.TrackNodeLocation; import com.simibubi.create.content.trains.graph.TrackNodeLocation.DiscoveredLocation; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java index bd9c5fba0d..189650862f 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java @@ -22,8 +22,8 @@ import java.util.function.Consumer; import org.jetbrains.annotations.Nullable; import com.google.common.base.Predicates; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; @@ -652,7 +652,7 @@ public class TrackBlock extends Block @OnlyIn(Dist.CLIENT) public PartialModel prepareAssemblyOverlay(BlockGetter world, BlockPos pos, BlockState state, Direction direction, PoseStack ms) { - TransformStack.cast(ms) + TransformStack.of(ms) .rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(direction))); return AllPartialModels.TRACK_ASSEMBLING_OVERLAY; } @@ -661,7 +661,7 @@ public class TrackBlock extends Block @OnlyIn(Dist.CLIENT) public PartialModel prepareTrackOverlay(BlockGetter world, BlockPos pos, BlockState state, BezierTrackPointLocation bezierPoint, AxisDirection direction, PoseStack ms, RenderedTrackOverlayType type) { - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); Vec3 axis = null; Vec3 diff = null; @@ -700,10 +700,10 @@ public class TrackBlock extends Block Vec3 angles = TrackRenderer.getModelAngles(normal, diff); - msr.centre() + msr.center() .rotateYRadians(angles.y) .rotateXRadians(angles.x) - .unCentre(); + .uncenter(); if (axis != null) msr.translate(0, axis.y != 0 ? 7 / 16f : 0, axis.y != 0 ? direction.getStep() * 2.5f / 16f : 0); @@ -718,9 +718,9 @@ public class TrackBlock extends Block double yOffset = 0; for (BezierConnection bc : trackTE.connections.values()) yOffset += bc.starts.getFirst().y - pos.getY(); - msr.centre() + msr.center() .rotateX(-direction.getStep() * trackTE.tilt.smoothingAngle.get()) - .unCentre() + .uncenter() .translate(0, yOffset / 2, 0); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java index 6cec632cb0..302c5bebfd 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java @@ -8,7 +8,7 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.Set; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllTags; @@ -225,7 +225,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 16); } - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); if (hasInteractableConnections()) registerToCurveInteraction(); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java index 3962422574..ad434cdd1f 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.Optional; import java.util.function.Consumer; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllShapes; @@ -154,7 +154,7 @@ public class TrackBlockOutline { Vec3 vec = result.vec() .subtract(camera); Vec3 angles = result.angles(); - TransformStack.cast(ms) + TransformStack.of(ms) .pushPose() .translate(vec.x, vec.y + .125f, vec.z) .rotateYRadians(angles.y) @@ -194,7 +194,7 @@ public class TrackBlockOutline { boolean canConnectFrom = !shape.isJunction() && !(mc.level.getBlockEntity(pos)instanceof TrackBlockEntity tbe && tbe.isTilted()); - walkShapes(shape, TransformStack.cast(ms), s -> { + walkShapes(shape, TransformStack.of(ms), s -> { renderShape(s, ms, vb, holdingTrack ? canConnectFrom : null); event.setCanceled(true); }); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java b/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java index fd785c560e..f90a3e4962 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java @@ -6,14 +6,16 @@ import java.util.Objects; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.materials.model.ModelData; -import com.jozufozu.flywheel.light.LightUpdater; -import com.jozufozu.flywheel.util.box.GridAlignedBB; -import com.jozufozu.flywheel.util.box.ImmutableBox; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.box.Box; +import com.jozufozu.flywheel.lib.box.MutableBox; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.light.LightUpdater; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.simibubi.create.AllPartialModels; @@ -24,38 +26,37 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; +import net.minecraftforge.client.model.data.ModelData; -public class TrackInstance extends BlockEntityInstance { +public class TrackInstance extends AbstractBlockEntityVisual { private List instances; - public TrackInstance(MaterialManager materialManager, TrackBlockEntity track) { + public TrackInstance(VisualizationContext materialManager, TrackBlockEntity track) { super(materialManager, track); - - update(); } @Override - public void update() { + public void update(float pt) { if (blockEntity.connections.isEmpty()) return; - remove(); + _delete(); instances = blockEntity.connections.values() .stream() .map(this::createInstance) .filter(Objects::nonNull) .toList(); - LightUpdater.get(world) + LightUpdater.get(level) .addListener(this); } @Override - public ImmutableBox getVolume() { + public Box getVolume() { List out = new ArrayList<>(); out.addAll(blockEntity.connections.keySet()); out.addAll(blockEntity.connections.keySet()); - return GridAlignedBB.containingAll(out); + return MutableBox.containingAll(out); } @Override @@ -73,7 +74,7 @@ public class TrackInstance extends BlockEntityInstance { } @Override - public void remove() { + public void _delete() { if (instances == null) return; instances.forEach(BezierTrackInstance::delete); @@ -81,9 +82,9 @@ public class TrackInstance extends BlockEntityInstance { private class BezierTrackInstance { - private final ModelData[] ties; - private final ModelData[] left; - private final ModelData[] right; + private final TransformedInstance[] ties; + private final TransformedInstance[] left; + private final TransformedInstance[] right; private final BlockPos[] tiesLightPos; private final BlockPos[] leftLightPos; private final BlockPos[] rightLightPos; @@ -95,27 +96,24 @@ public class TrackInstance extends BlockEntityInstance { girder = bc.hasGirder ? new GirderInstance(bc) : null; PoseStack pose = new PoseStack(); - TransformStack.cast(pose) - .translate(getInstancePosition()); - - var mat = materialManager.cutout(RenderType.cutoutMipped()) - .material(Materials.TRANSFORMED); + TransformStack.of(pose) + .translate(getVisualPosition()); int segCount = bc.getSegmentCount(); - ties = new ModelData[segCount]; - left = new ModelData[segCount]; - right = new ModelData[segCount]; + ties = new TransformedInstance[segCount]; + left = new TransformedInstance[segCount]; + right = new TransformedInstance[segCount]; tiesLightPos = new BlockPos[segCount]; leftLightPos = new BlockPos[segCount]; rightLightPos = new BlockPos[segCount]; TrackMaterial.TrackModelHolder modelHolder = bc.getMaterial().getModelHolder(); - mat.getModel(modelHolder.tie()) + instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstances(ties); - mat.getModel(modelHolder.segment_left()) + instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_left()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstances(left); - mat.getModel(modelHolder.segment_right()) + instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_right()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstances(right); SegmentAngles[] segments = bc.getBakedSegments(); @@ -141,11 +139,11 @@ public class TrackInstance extends BlockEntityInstance { } void delete() { - for (ModelData d : ties) + for (var d : ties) d.delete(); - for (ModelData d : left) + for (var d : left) d.delete(); - for (ModelData d : right) + for (var d : right) d.delete(); if (girder != null) girder.delete(); @@ -153,39 +151,38 @@ public class TrackInstance extends BlockEntityInstance { void updateLight() { for (int i = 0; i < ties.length; i++) - ties[i].updateLight(world, tiesLightPos[i]); + ties[i].updateLight(level, tiesLightPos[i]); for (int i = 0; i < left.length; i++) - left[i].updateLight(world, leftLightPos[i]); + left[i].updateLight(level, leftLightPos[i]); for (int i = 0; i < right.length; i++) - right[i].updateLight(world, rightLightPos[i]); + right[i].updateLight(level, rightLightPos[i]); if (girder != null) girder.updateLight(); } private class GirderInstance { - private final Couple beams; - private final Couple> beamCaps; + private final Couple beams; + private final Couple> beamCaps; private final BlockPos[] lightPos; private GirderInstance(BezierConnection bc) { BlockPos tePosition = bc.tePositions.getFirst(); PoseStack pose = new PoseStack(); - TransformStack.cast(pose) - .translate(getInstancePosition()) + TransformStack.of(pose) + .translate(getVisualPosition()) .nudge((int) bc.tePositions.getFirst() .asLong()); - var mat = materialManager.cutout(RenderType.cutoutMipped()) - .material(Materials.TRANSFORMED); - int segCount = bc.getSegmentCount(); - beams = Couple.create(() -> new ModelData[segCount]); - beamCaps = Couple.create(() -> Couple.create(() -> new ModelData[segCount])); + beams = Couple.create(() -> new TransformedInstance[segCount]); + beamCaps = Couple.create(() -> Couple.create(() -> new TransformedInstance[segCount])); lightPos = new BlockPos[segCount]; - beams.forEach(mat.getModel(AllPartialModels.GIRDER_SEGMENT_MIDDLE)::createInstances); - beamCaps.forEachWithContext((c, top) -> c.forEach(mat.getModel(top ? AllPartialModels.GIRDER_SEGMENT_TOP - : AllPartialModels.GIRDER_SEGMENT_BOTTOM)::createInstances)); + beams.forEach(instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE), RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); + beamCaps.forEachWithContext((c, top) -> { + var partialModel = Models.partial(top ? AllPartialModels.GIRDER_SEGMENT_TOP : AllPartialModels.GIRDER_SEGMENT_BOTTOM); + c.forEach(instancerProvider.instancerr(InstanceTypes.TRANSFORMED, partialModel, RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); + }); GirderAngles[] bakedGirders = bc.getBakedGirders(); for (int i = 1; i < bakedGirders.length; i++) { @@ -214,11 +211,11 @@ public class TrackInstance extends BlockEntityInstance { void delete() { beams.forEach(arr -> { - for (ModelData d : arr) + for (var d : arr) d.delete(); }); beamCaps.forEach(c -> c.forEach(arr -> { - for (ModelData d : arr) + for (var d : arr) d.delete(); })); } @@ -226,11 +223,11 @@ public class TrackInstance extends BlockEntityInstance { void updateLight() { beams.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(world, lightPos[i]); + arr[i].updateLight(level, lightPos[i]); }); beamCaps.forEach(c -> c.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(world, lightPos[i]); + arr[i].updateLight(level, lightPos[i]); })); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java index 0c8a3a10cf..36580d6f06 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java @@ -10,7 +10,7 @@ import java.util.function.Supplier; import org.jetbrains.annotations.Nullable; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java index 67e048caa8..d32eee0846 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java @@ -5,7 +5,7 @@ import java.util.stream.Stream; import org.jetbrains.annotations.Nullable; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllTags; import com.tterrag.registrate.util.nullness.NonNullSupplier; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackPlacement.java b/src/main/java/com/simibubi/create/content/trains/track/TrackPlacement.java index 4c67fc73d2..cabec96360 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackPlacement.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackPlacement.java @@ -6,7 +6,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import com.jozufozu.flywheel.util.Color; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.AllTags; import com.simibubi.create.CreateClient; @@ -14,6 +13,7 @@ import com.simibubi.create.content.equipment.blueprint.BlueprintOverlayRenderer; import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.BlockHelper; +import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java index 65ef7ea1e7..07f46a9c1c 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java @@ -36,7 +36,7 @@ public class TrackRenderer extends SafeBlockEntityRenderer { protected void renderSafe(TrackBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { Level level = be.getLevel(); - if (Backend.canUseInstancing(level)) + if (VisualizationManager.supportsVisualization(level)) return; VertexConsumer vb = buffer.getBuffer(RenderType.cutoutMipped()); be.connections.values() diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java index 6c490711d5..57752c99a8 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java @@ -5,7 +5,7 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.StructureTransform; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java index 26fc72bdb1..0be8b221a8 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.trains.track; import com.google.common.base.Objects; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.content.trains.graph.EdgePointType; @@ -128,7 +128,7 @@ public class TrackTargetingClient { : lastType == EdgePointType.OBSERVER ? RenderedTrackOverlayType.OBSERVER : RenderedTrackOverlayType.STATION; ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(Vec3.atLowerCornerOf(pos) .subtract(camera)); TrackTargetingBehaviour.render(mc.level, pos, direction, lastHoveredBezierSegment, ms, buffer, light, diff --git a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java index 537ff9d68f..8d3d3a948d 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.block.render; -import com.jozufozu.flywheel.core.StitchedSprite; +import com.simibubi.create.foundation.render.StitchedSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java index 7774df305f..8acb23a316 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.blockEntity.behaviour; import org.joml.Matrix3f; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.simpleRelays.AbstractSimpleShaftBlock; @@ -47,14 +47,14 @@ public class ValueBoxRenderer { int itemLight = Mth.floor(sl + .5) << 20 | (Mth.floor(bl + .5) & 0xf) << 4; ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(230); Matrix3f copy = new Matrix3f(ms.last() .normal()); ms.popPose(); ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(0, 0, -1 / 4f) .translate(0, 0, 1 / 32f + .001) .rotateY(180); diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java index 8a410a5845..fcfa6eadf9 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java @@ -4,7 +4,7 @@ import java.util.function.Function; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -42,7 +42,7 @@ public abstract class ValueBoxTransform { public boolean shouldRender(BlockState state) { return !state.isAir() && getLocalOffset(state) != null; } - + public int getOverrideColor() { return -1; } @@ -112,7 +112,7 @@ public abstract class ValueBoxTransform { public void rotate(BlockState state, PoseStack ms) { float yRot = AngleHelper.horizontalAngle(getSide()) + 180; float xRot = getSide() == Direction.UP ? 90 : getSide() == Direction.DOWN ? 270 : 0; - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(yRot) .rotateX(xRot); } diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java index d45608e71f..fcfa181804 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java @@ -18,7 +18,7 @@ public abstract class ColoredOverlayBlockEntityRenderer e protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - if (Backend.canUseInstancing(be.getLevel())) return; + if (VisualizationManager.supportsVisualization(be.getLevel())) return; SuperByteBuffer render = render(getOverlayBuffer(be), getColor(be, partialTicks), light); render.renderInto(ms, buffer.getBuffer(RenderType.solid())); diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java index 5abb51ebd2..5ea6f911ea 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java @@ -2,14 +2,11 @@ package com.simibubi.create.foundation.data; import java.util.ArrayList; import java.util.Collection; -import java.util.function.BiFunction; import java.util.function.Supplier; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderRegistry; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.lib.visual.SimpleBlockEntityVisualizer; import com.simibubi.create.Create; import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.builders.BlockEntityBuilder; @@ -28,7 +25,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateBlockEntityBuilder extends BlockEntityBuilder { @Nullable - private NonNullSupplier>> instanceFactory; + private NonNullSupplier> instanceFactory; private NonNullPredicate renderNormally; private Collection>>> deferredValidBlocks = @@ -60,18 +57,18 @@ public class CreateBlockEntityBuilder extends BlockEnt } public CreateBlockEntityBuilder instance( - NonNullSupplier>> instanceFactory) { + NonNullSupplier> instanceFactory) { return instance(instanceFactory, true); } public CreateBlockEntityBuilder instance( - NonNullSupplier>> instanceFactory, + NonNullSupplier> instanceFactory, boolean renderNormally) { return instance(instanceFactory, be -> renderNormally); } public CreateBlockEntityBuilder instance( - NonNullSupplier>> instanceFactory, + NonNullSupplier> instanceFactory, NonNullPredicate renderNormally) { if (this.instanceFactory == null) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::registerInstance); @@ -85,11 +82,10 @@ public class CreateBlockEntityBuilder extends BlockEnt protected void registerInstance() { OneTimeEventReceiver.addModListener(Create.REGISTRATE, FMLClientSetupEvent.class, $ -> { - NonNullSupplier>> instanceFactory = - this.instanceFactory; + var instanceFactory = this.instanceFactory; if (instanceFactory != null) { NonNullPredicate renderNormally = this.renderNormally; - InstancedRenderRegistry.configure(getEntry()) + SimpleBlockEntityVisualizer.configure(getEntry()) .factory(instanceFactory.get()) .skipRender(be -> !renderNormally.test(be)) .apply(); diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java index 2fbde67eba..1081033254 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java @@ -1,13 +1,9 @@ package com.simibubi.create.foundation.data; -import java.util.function.BiFunction; - import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderRegistry; -import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; +import com.jozufozu.flywheel.lib.visual.SimpleEntityVisualizer; import com.simibubi.create.Create; import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.builders.BuilderCallback; @@ -27,7 +23,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateEntityBuilder extends EntityBuilder { @Nullable - private NonNullSupplier>> instanceFactory; + private NonNullSupplier> instanceFactory; private NonNullPredicate renderNormally; public static EntityBuilder create(AbstractRegistrate owner, P parent, String name, BuilderCallback callback, EntityType.EntityFactory factory, MobCategory classification) { @@ -38,15 +34,15 @@ public class CreateEntityBuilder extends EntityBuilder instance(NonNullSupplier>> instanceFactory) { + public CreateEntityBuilder instance(NonNullSupplier> instanceFactory) { return instance(instanceFactory, true); } - public CreateEntityBuilder instance(NonNullSupplier>> instanceFactory, boolean renderNormally) { + public CreateEntityBuilder instance(NonNullSupplier> instanceFactory, boolean renderNormally) { return instance(instanceFactory, be -> renderNormally); } - public CreateEntityBuilder instance(NonNullSupplier>> instanceFactory, NonNullPredicate renderNormally) { + public CreateEntityBuilder instance(NonNullSupplier> instanceFactory, NonNullPredicate renderNormally) { if (this.instanceFactory == null) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::registerInstance); } @@ -59,10 +55,10 @@ public class CreateEntityBuilder extends EntityBuilder { - NonNullSupplier>> instanceFactory = this.instanceFactory; + var instanceFactory = this.instanceFactory; if (instanceFactory != null) { NonNullPredicate renderNormally = this.renderNormally; - InstancedRenderRegistry.configure(getEntry()) + SimpleEntityVisualizer.configure(getEntry()) .factory(instanceFactory.get()) .skipRender(be -> !renderNormally.test(be)) .apply(); diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index a4cc110864..215df464e3 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.fluid; import java.util.function.Function; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -59,12 +59,12 @@ public class FluidRenderer { if (inbound) direction = direction.getOpposite(); - TransformStack msr = TransformStack.cast(ms); + TransformStack msr = TransformStack.of(ms); ms.pushPose(); - msr.centre() + msr.center() .rotateY(AngleHelper.horizontalAngle(direction)) .rotateX(direction == Direction.UP ? 180 : direction == Direction.DOWN ? 0 : 270) - .unCentre(); + .uncenter(); ms.translate(.5, 0, .5); float h = radius; @@ -110,7 +110,7 @@ public class FluidRenderer { Vec3 center = new Vec3(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2); ms.pushPose(); if (fluidAttributes.isLighterThanAir()) - TransformStack.cast(ms) + TransformStack.of(ms) .translate(center) .rotateX(180) .translateBack(center); diff --git a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java index 50cc389cb3..f2fa2fcbbc 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java @@ -2,8 +2,7 @@ package com.simibubi.create.foundation.gui.element; import javax.annotation.Nullable; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.core.model.ModelUtil; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager.DestFactor; import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; @@ -291,7 +290,7 @@ public class GuiGameElement { renderer.render(stack, ItemDisplayContext.GUI, false, matrixStack, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, bakedModel); RenderSystem.disableDepthTest(); buffer.endBatch(); - + RenderSystem.enableDepthTest(); if (useDefaultLighting && flatLighting) { Lighting.setupFor3DItems(); diff --git a/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java b/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java index 1cd41af438..f0ce575b29 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.outliner; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; @@ -26,7 +26,7 @@ public class ItemOutline extends Outline { Minecraft mc = Minecraft.getInstance(); ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(pos.x - camera.x, pos.y - camera.y, pos.z - camera.z) .scale(params.alpha); diff --git a/src/main/java/com/simibubi/create/foundation/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/outliner/Outline.java index 269a22b6b9..d5b9dbcb2d 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/Outline.java @@ -10,7 +10,7 @@ import org.joml.Vector3d; import org.joml.Vector3f; import org.joml.Vector4f; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllSpecialTextures; @@ -58,7 +58,7 @@ public abstract class Outline { float vAngle = AngleHelper.deg(Mth.atan2(hDistance, diff.y())) - 90; poseStack.pushPose(); - TransformStack.cast(poseStack) + TransformStack.of(poseStack) .translate(start.x - camera.x, start.y - camera.y, start.z - camera.z) .rotateY(hAngle) .rotateX(vAngle); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 7bf288b16c..38bd058768 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -20,8 +20,8 @@ import org.apache.commons.lang3.mutable.MutableObject; import org.joml.Matrix4f; import org.joml.Vector4f; -import com.jozufozu.flywheel.util.DiffuseLightCalculator; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; @@ -462,7 +462,7 @@ public class PonderScene { public int getBasePlateOffsetZ() { return basePlateOffsetZ; } - + public boolean shouldHidePlatformShadow() { return hidePlatformShadow; } @@ -524,7 +524,7 @@ public class PonderScene { public PoseStack apply(PoseStack ms, float pt) { ms.translate(width / 2, height / 2, 200 + offset); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(-35) .rotateY(55) .translate(offset, 0, 0) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java index a8c8b7258f..b67e09616c 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.ponder.element; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.utility.animation.LerpedFloat; @@ -61,7 +61,7 @@ public abstract class AnimatedSceneElement extends PonderSceneElement { protected float applyFade(PoseStack ms, float pt) { float currentFade = fade.getValue(pt); if (fadeVec != null) - TransformStack.cast(ms) + TransformStack.of(ms) .translate(fadeVec.scale(-1 + currentFade)); return currentFade; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java index deded12107..f1462a21ed 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.ponder.element; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; @@ -103,7 +103,7 @@ public class MinecartElement extends AnimatedSceneElement { ms.translate(Mth.lerp(pt, entity.xo, entity.getX()), Mth.lerp(pt, entity.yo, entity.getY()), Mth.lerp(pt, entity.zo, entity.getZ())); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(rotation.getValue(pt)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java index 1a7dd72116..77bf00c4c6 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.ponder.element; import java.util.function.Supplier; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; @@ -111,7 +111,7 @@ public class ParrotElement extends AnimatedSceneElement { entity.xRotO = entity.getXRot(); entity.yRotO = entity.getYRot(); } - + public void setConductor(boolean isConductor) { if (entity == null) { deferConductor = isConductor; @@ -147,7 +147,7 @@ public class ParrotElement extends AnimatedSceneElement { ms.translate(Mth.lerp(pt, entity.xo, entity.getX()), Mth.lerp(pt, entity.yo, entity.getY()), Mth.lerp(pt, entity.zo, entity.getZ())); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateY(AngleHelper.angleLerp(pt, entity.yRotO, entity.getYRot())); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index bcd89004e2..9f7d373915 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -9,7 +9,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.core.model.ModelUtil; import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; import com.jozufozu.flywheel.core.model.ShadeSeparatingVertexConsumer; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; @@ -229,7 +229,7 @@ public class WorldSectionElement extends AnimatedSceneElement { } public void transformMS(PoseStack ms, float pt) { - TransformStack.cast(ms) + TransformStack.of(ms) .translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset)); if (!animatedRotation.equals(Vec3.ZERO) || !prevAnimatedRotation.equals(Vec3.ZERO)) { if (centerOfRotation == null) @@ -237,14 +237,14 @@ public class WorldSectionElement extends AnimatedSceneElement { double rotX = Mth.lerp(pt, prevAnimatedRotation.x, animatedRotation.x); double rotZ = Mth.lerp(pt, prevAnimatedRotation.z, animatedRotation.z); double rotY = Mth.lerp(pt, prevAnimatedRotation.y, animatedRotation.y); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(centerOfRotation) .rotateX(rotX) .rotateZ(rotZ) .rotateY(rotY) .translateBack(centerOfRotation); if (stabilizationAnchor != null) { - TransformStack.cast(ms) + TransformStack.of(ms) .translate(stabilizationAnchor) .rotateX(-rotX) .rotateZ(-rotZ) diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java similarity index 87% rename from src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java rename to src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java index bcdfc481e3..a1d3e28659 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java @@ -1,9 +1,9 @@ package com.simibubi.create.foundation.render; -import com.jozufozu.flywheel.core.layout.BufferLayout; -import com.jozufozu.flywheel.core.layout.CommonItems; +import com.jozufozu.flywheel.lib.layout.BufferLayout; +import com.jozufozu.flywheel.lib.layout.CommonItems; -public class AllInstanceFormats { +public class AllInstanceLayouts { public static final BufferLayout ROTATING = kineticInstance() .addItems(CommonItems.NORMAL) diff --git a/src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java similarity index 92% rename from src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java rename to src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java index ccf81b94f5..d39ab7cfeb 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java @@ -4,7 +4,7 @@ import static com.simibubi.create.Create.asResource; import net.minecraft.resources.ResourceLocation; -public class AllProgramSpecs { +public class AllInstanceShaders { public static final ResourceLocation ROTATING = asResource("rotating"); public static final ResourceLocation BELT = asResource("belt"); diff --git a/src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java similarity index 68% rename from src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java rename to src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 706d1284ae..5e74b27aa8 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -1,12 +1,12 @@ package com.simibubi.create.foundation.render; -import com.jozufozu.flywheel.api.struct.StructType; +import com.jozufozu.flywheel.api.instance.InstanceType; import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.actors.flwdata.ActorData; +import com.simibubi.create.content.contraptions.actors.flwdata.ActorInstance; import com.simibubi.create.content.contraptions.actors.flwdata.ActorType; -import com.simibubi.create.content.kinetics.base.flwdata.BeltData; +import com.simibubi.create.content.kinetics.base.flwdata.BeltInstance; import com.simibubi.create.content.kinetics.base.flwdata.BeltType; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import com.simibubi.create.content.kinetics.base.flwdata.RotatingType; import com.simibubi.create.content.logistics.flwdata.FlapData; import com.simibubi.create.content.logistics.flwdata.FlapType; @@ -16,12 +16,12 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) -public class AllMaterialSpecs { +public class AllInstanceTypes { - public static final StructType ROTATING = new RotatingType(); - public static final StructType BELTS = new BeltType(); - public static final StructType ACTORS = new ActorType(); - public static final StructType FLAPS = new FlapType(); + public static final InstanceType ROTATING = new RotatingType(); + public static final InstanceType BELTS = new BeltType(); + public static final InstanceType ACTORS = new ActorType(); + public static final InstanceType FLAPS = new FlapType(); public static class Locations { public static final ResourceLocation ROTATING = Create.asResource("rotating"); diff --git a/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java index de4cb67bcc..f617e962f6 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java @@ -1,7 +1,5 @@ package com.simibubi.create.foundation.render; -import com.jozufozu.flywheel.core.model.ModelUtil; -import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 5185e7db11..0a190ea84d 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -11,7 +11,7 @@ import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.instancing.InstancedRenderRegistry; import com.jozufozu.flywheel.config.BackendType; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -62,7 +62,7 @@ public class BlockEntityRenderHelper { BlockPos pos = blockEntity.getBlockPos(); ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(pos); try { diff --git a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java index 791bf137eb..1170e8acf5 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java @@ -6,8 +6,8 @@ import java.util.function.Supplier; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.core.PartialModel; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.render.SuperByteBufferCache.Compartment; @@ -65,11 +65,11 @@ public class CachedBufferer { public static Supplier rotateToFace(Direction facing) { return () -> { PoseStack stack = new PoseStack(); - TransformStack.cast(stack) - .centre() + TransformStack.of(stack) + .center() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)) - .unCentre(); + .uncenter(); return stack; }; } @@ -77,11 +77,11 @@ public class CachedBufferer { public static Supplier rotateToFaceVertical(Direction facing) { return () -> { PoseStack stack = new PoseStack(); - TransformStack.cast(stack) - .centre() + TransformStack.of(stack) + .center() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing) + 90) - .unCentre(); + .uncenter(); return stack; }; } diff --git a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java new file mode 100644 index 0000000000..07d44c9618 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java @@ -0,0 +1,61 @@ +package com.simibubi.create.foundation.render; + +import java.util.Optional; +import java.util.function.Consumer; + +import javax.annotation.Nullable; + +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; + +public class ConditionalInstance { + + final Instancer model; + ICondition condition; + + Consumer setupFunc; + + @Nullable + private D instance; + + public ConditionalInstance(Instancer model) { + this.model = model; + this.condition = () -> true; + } + + public ConditionalInstance withSetupFunc(Consumer setupFunc) { + this.setupFunc = setupFunc; + return this; + } + + public ConditionalInstance withCondition(ICondition condition) { + this.condition = condition; + return this; + } + + public ConditionalInstance update() { + boolean shouldShow = condition.shouldShow(); + if (shouldShow && instance == null) { + instance = model.createInstance(); + if (setupFunc != null) setupFunc.accept(instance); + } else if (!shouldShow && instance != null) { + instance.delete(); + instance = null; + } + + return this; + } + + public Optional get() { + return Optional.ofNullable(instance); + } + + public void delete() { + if (instance != null) instance.delete(); + } + + @FunctionalInterface + public interface ICondition { + boolean shouldShow(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java b/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java index bb651c8433..2df95ff6cc 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java +++ b/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java @@ -1,14 +1,6 @@ package com.simibubi.create.foundation.render; -import com.jozufozu.flywheel.core.GameStateRegistry; -import com.jozufozu.flywheel.core.Templates; -import com.jozufozu.flywheel.core.compile.ProgramCompiler; -import com.jozufozu.flywheel.core.source.FileResolution; -import com.jozufozu.flywheel.core.source.Resolver; -import com.jozufozu.flywheel.event.GatherContextEvent; -import com.jozufozu.flywheel.util.ResourceUtil; import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.render.ContraptionProgram; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; @@ -18,15 +10,4 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class CreateContexts { private static final ResourceLocation CONTRAPTION = Create.asResource("context/contraption"); - public static ProgramCompiler CWORLD; - public static ProgramCompiler STRUCTURE; - - public static void flwInit(GatherContextEvent event) { - GameStateRegistry.register(RainbowDebugStateProvider.INSTANCE); - FileResolution header = Resolver.INSTANCE.get(ResourceUtil.subPath(CONTRAPTION, ".glsl")); - - CWORLD = ProgramCompiler.create(Templates.INSTANCING, ContraptionProgram::new, header); - STRUCTURE = ProgramCompiler.create(Templates.ONE_SHOT, ContraptionProgram::new, header); - } - } diff --git a/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java b/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java index 5dd88fecdb..35de4b9159 100644 --- a/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java +++ b/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.render; import javax.annotation.Nullable; -import com.jozufozu.flywheel.util.DiffuseLightCalculator; +import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; import it.unimi.dsi.fastutil.objects.ObjectArrayList; diff --git a/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java b/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java new file mode 100644 index 0000000000..8826ee1f50 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java @@ -0,0 +1,84 @@ +package com.simibubi.create.foundation.render; + +import java.util.AbstractCollection; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; + +public class GroupInstance extends AbstractCollection { + + final Instancer model; + final List backing; + + public GroupInstance(Instancer model) { + this.model = model; + + this.backing = new ArrayList<>(); + } + + public GroupInstance(Instancer model, int size) { + this.model = model; + + this.backing = new ArrayList<>(size); + + for (int i = 0; i < size; i++) { + addInstance(); + } + } + + /** + * @param count + * @return True if the number of elements changed. + */ + public boolean resize(int count) { + int size = size(); + if (count == size) return false; + + if (count <= 0) { + clear(); + return size > 0; + } + + if (count > size) { + for (int i = size; i < count; i++) { + addInstance(); + } + } else { + List unnecessary = backing.subList(count, size); + unnecessary.forEach(AbstractInstance::delete); + unnecessary.clear(); + } + + return true; + } + + public D addInstance() { + D instance = model.createInstance(); + backing.add(instance); + + return instance; + } + + public D get(int index) { + return backing.get(index); + } + + @Override + public Iterator iterator() { + return backing.iterator(); + } + + @Override + public int size() { + return backing.size(); + } + + @Override + public void clear() { + backing.forEach(AbstractInstance::delete); + backing.clear(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/RainbowDebugStateProvider.java b/src/main/java/com/simibubi/create/foundation/render/RainbowDebugStateProvider.java deleted file mode 100644 index 6212602258..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/RainbowDebugStateProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.simibubi.create.foundation.render; - -import javax.annotation.Nonnull; - -import com.jozufozu.flywheel.core.shader.GameStateProvider; -import com.jozufozu.flywheel.core.shader.ShaderConstants; -import com.simibubi.create.content.kinetics.KineticDebugger; - -public enum RainbowDebugStateProvider implements GameStateProvider { - INSTANCE; - - @Override - public boolean isTrue() { - return KineticDebugger.isActive(); - } - - @Override - public void alterConstants(@Nonnull ShaderConstants constants) { - constants.define("DEBUG_RAINBOW"); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java new file mode 100644 index 0000000000..99d279bc8f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java @@ -0,0 +1,62 @@ +package com.simibubi.create.foundation.render; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import javax.annotation.Nullable; + +import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.instance.Instancer; + +public class SelectInstance { + + final List> models; + + ModelSelector selector; + + private int last = -1; + @Nullable + private D current; + + public SelectInstance(ModelSelector selector) { + this.models = new ArrayList<>(); + this.selector = selector; + } + + public SelectInstance addModel(Instancer model) { + models.add(model); + return this; + } + + public SelectInstance update() { + int i = selector.modelIndexToShow(); + + if (i < 0 || i >= models.size()) { + if (current != null) { + current.handle().setDeleted(); + current = null; + } + } else if (i != last) { + if (current != null) current.handle().setDeleted(); + + current = models.get(i) + .createInstance(); + } + + last = i; + return this; + } + + public Optional get() { + return Optional.ofNullable(current); + } + + public void delete() { + if (current != null) current.handle().setDeleted(); + } + + public interface ModelSelector { + int modelIndexToShow(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/StitchedSprite.java b/src/main/java/com/simibubi/create/foundation/render/StitchedSprite.java new file mode 100644 index 0000000000..9f7ff99b8e --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/StitchedSprite.java @@ -0,0 +1,57 @@ +package com.simibubi.create.foundation.render; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraftforge.client.event.TextureStitchEvent; + +public class StitchedSprite { + private static final Map> ALL = new HashMap<>(); + + protected final ResourceLocation atlasLocation; + protected final ResourceLocation location; + protected TextureAtlasSprite sprite; + + public StitchedSprite(ResourceLocation atlas, ResourceLocation location) { + atlasLocation = atlas; + this.location = location; + ALL.computeIfAbsent(atlasLocation, $ -> new ArrayList<>()).add(this); + } + + public StitchedSprite(ResourceLocation location) { + this(InventoryMenu.BLOCK_ATLAS, location); + } + + public static void onTextureStitchPost(TextureStitchEvent.Post event) { + TextureAtlas atlas = event.getAtlas(); + ResourceLocation atlasLocation = atlas.location(); + List sprites = ALL.get(atlasLocation); + if (sprites != null) { + for (StitchedSprite sprite : sprites) { + sprite.loadSprite(atlas); + } + } + } + + protected void loadSprite(TextureAtlas atlas) { + sprite = atlas.getSprite(location); + } + + public ResourceLocation getAtlasLocation() { + return atlasLocation; + } + + public ResourceLocation getLocation() { + return location; + } + + public TextureAtlasSprite get() { + return sprite; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index c79189aa1a..86dbcdf834 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -10,14 +10,12 @@ import org.joml.Quaternionf; import org.joml.Vector3f; import org.joml.Vector4f; -import com.jozufozu.flywheel.api.vertex.ShadedVertexList; import com.jozufozu.flywheel.api.vertex.VertexList; -import com.jozufozu.flywheel.backend.ShadersModHandler; -import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; -import com.jozufozu.flywheel.core.vertex.BlockVertexList; -import com.jozufozu.flywheel.util.DiffuseLightCalculator; -import com.jozufozu.flywheel.util.transform.TStack; -import com.jozufozu.flywheel.util.transform.Transform; +import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; +import com.jozufozu.flywheel.lib.math.RenderMath; +import com.jozufozu.flywheel.lib.transform.Transform; +import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.util.ShadersModHandler; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -35,7 +33,7 @@ import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; -public class SuperByteBuffer implements Transform, TStack { +public class SuperByteBuffer implements Transform { private final VertexList template; private final IntPredicate shadedPredicate; @@ -130,23 +128,23 @@ public class SuperByteBuffer implements Transform, TStack, TStack, TStack, TStack, TStack, TStack, TStack () -> { +// ((ExtendedChunk) this).setBlockNibbles(StarLightEngine.getFilledEmptyLight(this)); +// ((ExtendedChunk) this).setSkyNibbles(StarLightEngine.getFilledEmptyLight(this)); +// }); + } + + @Override + @Nullable + public BlockState setBlockState(BlockPos pos, BlockState state, boolean isMoving) { + return null; + } + + @Override + public void setBlockEntity(BlockEntity blockEntity) { + } + + @Override + public void addEntity(Entity entity) { + } + + @Override + public Set getBlockEntitiesPos() { + return Collections.emptySet(); + } + + @Override + public LevelChunkSection[] getSections() { + return sections; + } + + @Override + public Collection> getHeightmaps() { + return Collections.emptySet(); + } + + @Override + public void setHeightmap(Heightmap.Types type, long[] data) { + } + + @Override + public Heightmap getOrCreateHeightmapUnprimed(Heightmap.Types type) { + return null; + } + + @Override + public int getHeight(Heightmap.Types type, int x, int z) { + return 0; + } + + @Override + @Nullable + public StructureStart getStartForStructure(Structure structure) { + return null; + } + + @Override + public void setStartForStructure(Structure structure, StructureStart structureStart) { + } + + @Override + public Map getAllStarts() { + return Collections.emptyMap(); + } + + @Override + public void setAllStarts(Map structureStarts) { + } + + @Override + public LongSet getReferencesForStructure(Structure pStructure) { + return LongSets.emptySet(); + } + + @Override + public void addReferenceForStructure(Structure structure, long reference) { + } + + @Override + public Map getAllReferences() { + return Collections.emptyMap(); + } + + @Override + public void setAllReferences(Map structureReferencesMap) { + } + + @Override + public void setUnsaved(boolean unsaved) { + } + + @Override + public boolean isUnsaved() { + return false; + } + + @Override + public ChunkStatus getStatus() { + return ChunkStatus.LIGHT; + } + + @Override + public void removeBlockEntity(BlockPos pos) { + } + + @Override + public ShortList[] getPostProcessing() { + return new ShortList[0]; + } + + @Override + @Nullable + public CompoundTag getBlockEntityNbt(BlockPos pos) { + return null; + } + + @Override + @Nullable + public CompoundTag getBlockEntityNbtForSaving(BlockPos pos) { + return null; + } + + @Override + public void findBlocks(BiPredicate predicate, BiConsumer consumer) { + world.blockStates.forEach((pos, state) -> { + if (SectionPos.blockToSectionCoord(pos.getX()) == chunkPos.x && SectionPos.blockToSectionCoord(pos.getZ()) == chunkPos.z) { + if (predicate.test(state, pos)) { + consumer.accept(pos, state); + } + } + }); + } + + @Override + public TickContainerAccess getBlockTicks() { + return BlackholeTickAccess.emptyContainer(); + } + + @Override + public TickContainerAccess getFluidTicks() { + return BlackholeTickAccess.emptyContainer(); + } + + @Override + public TicksToSave getTicksForSerialization() { + throw new UnsupportedOperationException(); + } + + @Override + public long getInhabitedTime() { + return 0; + } + + @Override + public void setInhabitedTime(long amount) { + } + + @Override + public boolean isLightCorrect() { + return needsLight; + } + + @Override + public void setLightCorrect(boolean lightCorrect) { + this.needsLight = lightCorrect; + } + + @Override + @Nullable + public BlockEntity getBlockEntity(BlockPos pos) { + return world.getBlockEntity(pos); + } + + @Override + public BlockState getBlockState(BlockPos pos) { + return world.getBlockState(pos); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + return world.getFluidState(pos); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java b/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java new file mode 100644 index 0000000000..c7dab9f89d --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java @@ -0,0 +1,42 @@ +package com.simibubi.create.foundation.render; + +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.material.FluidState; + +public class VirtualChunkSection extends LevelChunkSection { + public final VirtualChunk owner; + + public final int xStart; + public final int yStart; + public final int zStart; + + public VirtualChunkSection(VirtualChunk owner, int yBase) { + super(owner.world.registryAccess() + .registryOrThrow(Registries.BIOME)); + this.owner = owner; + this.xStart = owner.getPos() + .getMinBlockX(); + this.yStart = yBase; + this.zStart = owner.getPos() + .getMinBlockZ(); + } + + @Override + public BlockState getBlockState(int x, int y, int z) { + // ChunkSection#getBlockState expects local chunk coordinates, so we add to get + // back into world coords. + return owner.world.getBlockState(x + xStart, y + yStart, z + zStart); + } + + @Override + public FluidState getFluidState(int x, int y, int z) { + return getBlockState(x, y, z).getFluidState(); + } + + @Override + public BlockState setBlockState(int x, int y, int z, BlockState state, boolean useLocks) { + throw new UnsupportedOperationException("Chunk sections cannot be mutated in a fake world."); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java b/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java new file mode 100644 index 0000000000..9edaae0f25 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java @@ -0,0 +1,65 @@ +package com.simibubi.create.foundation.render; + +import java.util.function.BooleanSupplier; + +import org.jetbrains.annotations.Nullable; + +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.lighting.LevelLightEngine; + +public class VirtualChunkSource extends ChunkSource { + private final VirtualRenderWorld world; + private final Long2ObjectMap chunks = new Long2ObjectOpenHashMap<>(); + + public VirtualChunkSource(VirtualRenderWorld world) { + this.world = world; + } + + @Override + public Level getLevel() { + return world; + } + + public ChunkAccess getChunk(int x, int z) { + long pos = ChunkPos.asLong(x, z); + return chunks.computeIfAbsent(pos, $ -> new VirtualChunk(world, x, z)); + } + + @Override + @Nullable + public LevelChunk getChunk(int x, int z, boolean load) { + return null; + } + + @Override + @Nullable + public ChunkAccess getChunk(int x, int z, ChunkStatus status, boolean load) { + return getChunk(x, z); + } + + @Override + public void tick(BooleanSupplier hasTimeLeft, boolean tickChunks) { + } + + @Override + public String gatherStats() { + return "VirtualChunkSource"; + } + + @Override + public int getLoadedChunksCount() { + return 0; + } + + @Override + public LevelLightEngine getLightEngine() { + return world.getLightEngine(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java b/src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java new file mode 100644 index 0000000000..109b0b523b --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java @@ -0,0 +1,145 @@ +package com.simibubi.create.foundation.render; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ColorResolver; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.DataLayer; +import net.minecraft.world.level.chunk.LightChunk; +import net.minecraft.world.level.chunk.LightChunkGetter; +import net.minecraft.world.level.lighting.LayerLightEventListener; +import net.minecraft.world.level.lighting.LevelLightEngine; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +public interface VirtualEmptyBlockGetter extends BlockAndTintGetter { + public static final VirtualEmptyBlockGetter INSTANCE = new StaticLightImpl(0, 15); + public static final VirtualEmptyBlockGetter FULL_BRIGHT = new StaticLightImpl(15, 15); + public static final VirtualEmptyBlockGetter FULL_DARK = new StaticLightImpl(0, 0); + + public static boolean is(BlockAndTintGetter blockGetter) { + return blockGetter instanceof VirtualEmptyBlockGetter; + } + + @Override + @Nullable + default BlockEntity getBlockEntity(BlockPos pos) { + return null; + } + + @Override + default BlockState getBlockState(BlockPos pos) { + return Blocks.AIR.defaultBlockState(); + } + + @Override + default FluidState getFluidState(BlockPos pos) { + return Fluids.EMPTY.defaultFluidState(); + } + + @Override + default int getHeight() { + return 1; + } + + @Override + default int getMinBuildHeight() { + return 0; + } + + @Override + default float getShade(Direction direction, boolean shaded) { + return 1f; + } + + @Override + default int getBlockTint(BlockPos pos, ColorResolver resolver) { + Biome plainsBiome = Minecraft.getInstance().getConnection().registryAccess().registryOrThrow(Registries.BIOME).getOrThrow(Biomes.PLAINS); + return resolver.getColor(plainsBiome, pos.getX(), pos.getZ()); + } + + public static class StaticLightImpl implements VirtualEmptyBlockGetter { + private final LevelLightEngine lightEngine; + + public StaticLightImpl(int blockLight, int skyLight) { + lightEngine = new LevelLightEngine(new LightChunkGetter() { + @Override + @Nullable + public LightChunk getChunkForLighting(int p_63023_, int p_63024_) { + return null; + } + + @Override + public BlockGetter getLevel() { + return StaticLightImpl.this; + } + }, false, false) { + private final LayerLightEventListener blockListener = createStaticListener(blockLight); + private final LayerLightEventListener skyListener = createStaticListener(skyLight); + + @Override + public LayerLightEventListener getLayerListener(LightLayer layer) { + return layer == LightLayer.BLOCK ? blockListener : skyListener; + } + }; + } + + private static LayerLightEventListener createStaticListener(int light) { + return new LayerLightEventListener() { + @Override + public void checkBlock(BlockPos pos) { + } + + @Override + public boolean hasLightWork() { + return false; + } + + @Override + public int runLightUpdates() { + return 0; + } + + @Override + public void updateSectionStatus(SectionPos pos, boolean isSectionEmpty) { + } + + @Override + public void setLightEnabled(ChunkPos pos, boolean lightEnabled) { + } + + @Override + public void propagateLightSources(ChunkPos pos) { + } + + @Override + public DataLayer getDataLayerData(SectionPos pos) { + return null; + } + + @Override + public int getLightValue(BlockPos pos) { + return light; + } + }; + } + + @Override + public LevelLightEngine getLightEngine() { + return lightEngine; + } + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java b/src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java new file mode 100644 index 0000000000..df9b5a3f75 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java @@ -0,0 +1,40 @@ +package com.simibubi.create.foundation.render; + +import java.util.Collections; +import java.util.UUID; +import java.util.function.Consumer; + +import net.minecraft.util.AbortableIterationConsumer; +import net.minecraft.world.level.entity.EntityAccess; +import net.minecraft.world.level.entity.EntityTypeTest; +import net.minecraft.world.level.entity.LevelEntityGetter; +import net.minecraft.world.phys.AABB; + +public class VirtualLevelEntityGetter implements LevelEntityGetter { + @Override + public T get(int id) { + return null; + } + + @Override + public T get(UUID uuid) { + return null; + } + + @Override + public Iterable getAll() { + return Collections.emptyList(); + } + + @Override + public void get(EntityTypeTest test, AbortableIterationConsumer consumer) { + } + + @Override + public void get(AABB boundingBox, Consumer consumer) { + } + + @Override + public void get(EntityTypeTest test, AABB bounds, AbortableIterationConsumer consumer) { + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java new file mode 100644 index 0000000000..62626168f4 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java @@ -0,0 +1,460 @@ +package com.simibubi.create.foundation.render; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Nullable; + +import com.jozufozu.flywheel.api.visualization.VisualizationLevel; + +import it.unimi.dsi.fastutil.objects.Object2ShortMap; +import it.unimi.dsi.fastutil.objects.Object2ShortOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Holder; +import net.minecraft.core.SectionPos; +import net.minecraft.core.Vec3i; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.flag.FeatureFlagSet; +import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeManager; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.entity.LevelEntityGetter; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.gameevent.GameEvent.Context; +import net.minecraft.world.level.lighting.LevelLightEngine; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import net.minecraft.world.level.storage.WritableLevelData; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.scores.Scoreboard; +import net.minecraft.world.ticks.LevelTickAccess; + +public class VirtualRenderWorld extends Level implements VisualizationLevel { + protected final Level level; + protected final int minBuildHeight; + protected final int height; + protected final Vec3i biomeOffset; + + protected final VirtualChunkSource chunkSource; + protected final LevelLightEngine lightEngine; + + protected final Map blockStates = new HashMap<>(); + protected final Map blockEntities = new HashMap<>(); + protected final Object2ShortMap nonEmptyBlockCounts = new Object2ShortOpenHashMap<>(); + + protected final LevelEntityGetter entityGetter = new VirtualLevelEntityGetter<>(); + + protected final BlockPos.MutableBlockPos scratchPos = new BlockPos.MutableBlockPos(); + + public VirtualRenderWorld(Level level) { + this(level, Vec3i.ZERO); + } + + public VirtualRenderWorld(Level level, Vec3i biomeOffset) { + this(level, level.getMinBuildHeight(), level.getHeight(), biomeOffset); + } + + public VirtualRenderWorld(Level level, int minBuildHeight, int height, Vec3i biomeOffset) { + super((WritableLevelData) level.getLevelData(), level.dimension(), level.registryAccess(), level.dimensionTypeRegistration(), level.getProfilerSupplier(), + true, false, 0, 0); + this.level = level; + this.minBuildHeight = nextMultipleOf16(minBuildHeight); + this.height = nextMultipleOf16(height); + this.biomeOffset = biomeOffset; + + this.chunkSource = new VirtualChunkSource(this); + this.lightEngine = new LevelLightEngine(chunkSource, true, false); + } + + /** + * We need to ensure that height and minBuildHeight are multiples of 16. + * Adapted from: https://math.stackexchange.com/questions/291468 + */ + public static int nextMultipleOf16(int a) { + if (a < 0) { + return -(((Math.abs(a) - 1) | 15) + 1); + } else { + return ((a - 1) | 15) + 1; + } + } + + public void clear() { + blockStates.clear(); + blockEntities.clear(); + + nonEmptyBlockCounts.forEach((sectionPos, nonEmptyBlockCount) -> { + if (nonEmptyBlockCount > 0) { + lightEngine.updateSectionStatus(sectionPos, true); + } + }); + + nonEmptyBlockCounts.clear(); + + runLightEngine(); + } + + public void setBlockEntities(Collection blockEntities) { + this.blockEntities.clear(); + blockEntities.forEach(this::setBlockEntity); + } + + /** + * Run this after you're done using setBlock(). + */ + public void runLightEngine() { + Set chunkPosSet = new ObjectOpenHashSet<>(); + nonEmptyBlockCounts.object2ShortEntrySet().forEach(entry -> { + if (entry.getShortValue() > 0) { + chunkPosSet.add(entry.getKey().chunk()); + } + }); + for (ChunkPos chunkPos : chunkPosSet) { + lightEngine.propagateLightSources(chunkPos); + } + + lightEngine.runLightUpdates(); + } + + // MEANINGFUL OVERRIDES + + @Override + public LevelChunk getChunk(int x, int z) { + throw new UnsupportedOperationException(); + } + + public ChunkAccess actuallyGetChunk(int x, int z) { + return getChunk(x, z, ChunkStatus.FULL); + } + + @Override + public ChunkAccess getChunk(BlockPos pos) { + return actuallyGetChunk(SectionPos.blockToSectionCoord(pos.getX()), SectionPos.blockToSectionCoord(pos.getZ())); + } + + @Override + public boolean setBlock(BlockPos pos, BlockState newState, int flags, int recursionLeft) { + if (isOutsideBuildHeight(pos)) { + return false; + } + + pos = pos.immutable(); + + BlockState oldState = getBlockState(pos); + if (oldState == newState) { + return false; + } + + blockStates.put(pos, newState); + + SectionPos sectionPos = SectionPos.of(pos); + short nonEmptyBlockCount = nonEmptyBlockCounts.getShort(sectionPos); + boolean prevEmpty = nonEmptyBlockCount == 0; + if (!oldState.isAir()) { + --nonEmptyBlockCount; + } + if (!newState.isAir()) { + ++nonEmptyBlockCount; + } + nonEmptyBlockCounts.put(sectionPos, nonEmptyBlockCount); + boolean nowEmpty = nonEmptyBlockCount == 0; + + if (prevEmpty != nowEmpty) { + lightEngine.updateSectionStatus(sectionPos, nowEmpty); + } + + lightEngine.checkBlock(pos); + + return true; + } + + @Override + public LevelLightEngine getLightEngine() { + return lightEngine; + } + + @Override + public BlockState getBlockState(BlockPos pos) { + if (isOutsideBuildHeight(pos)) { + return Blocks.VOID_AIR.defaultBlockState(); + } + BlockState state = blockStates.get(pos); + if (state != null) { + return state; + } + return Blocks.AIR.defaultBlockState(); + } + + public BlockState getBlockState(int x, int y, int z) { + return getBlockState(scratchPos.set(x, y, z)); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + if (isOutsideBuildHeight(pos)) { + return Fluids.EMPTY.defaultFluidState(); + } + return getBlockState(pos).getFluidState(); + } + + @Override + @Nullable + public BlockEntity getBlockEntity(BlockPos pos) { + if (!isOutsideBuildHeight(pos)) { + return blockEntities.get(pos); + } + return null; + } + + @Override + public void setBlockEntity(BlockEntity blockEntity) { + BlockPos pos = blockEntity.getBlockPos(); + if (!isOutsideBuildHeight(pos)) { + blockEntities.put(pos, blockEntity); + } + } + + @Override + public void removeBlockEntity(BlockPos pos) { + if (!isOutsideBuildHeight(pos)) { + blockEntities.remove(pos); + } + } + + @Override + protected LevelEntityGetter getEntities() { + return entityGetter; + } + + @Override + public ChunkSource getChunkSource() { + return chunkSource; + } + + @Override + public int getMinBuildHeight() { + return minBuildHeight; + } + + @Override + public int getHeight() { + return height; + } + + // BIOME OFFSET + + @Override + public Holder getBiome(BlockPos pos) { + return super.getBiome(pos.offset(biomeOffset)); + } + + @Override + public Holder getNoiseBiome(int x, int y, int z) { + // Control flow should never reach this method, + // so we add biomeOffset in case some other mod calls this directly. + return level.getNoiseBiome(x + biomeOffset.getX(), y + biomeOffset.getY(), z + biomeOffset.getZ()); + } + + @Override + public Holder getUncachedNoiseBiome(int x, int y, int z) { + // Control flow should never reach this method, + // so we add biomeOffset in case some other mod calls this directly. + return level.getUncachedNoiseBiome(x + biomeOffset.getX(), y + biomeOffset.getY(), z + biomeOffset.getZ()); + } + + // RENDERING CONSTANTS + + @Override + public int getMaxLocalRawBrightness(BlockPos pos) { + return 15; + } + + @Override + public float getShade(Direction direction, boolean shade) { + return 1f; + } + + // THIN WRAPPERS + + @Override + public Scoreboard getScoreboard() { + return level.getScoreboard(); + } + + @Override + public RecipeManager getRecipeManager() { + return level.getRecipeManager(); + } + + @Override + public BiomeManager getBiomeManager() { + return level.getBiomeManager(); + } + + @Override + public LevelTickAccess getBlockTicks() { + return level.getBlockTicks(); + } + + @Override + public LevelTickAccess getFluidTicks() { + return level.getFluidTicks(); + } + + @Override + public FeatureFlagSet enabledFeatures() { + return level.enabledFeatures(); + } + + // ADDITIONAL OVERRRIDES + + @Override + public void updateNeighbourForOutputSignal(BlockPos pos, Block block) { + } + + @Override + public boolean isLoaded(BlockPos pos) { + return true; + } + + @Override + public boolean isAreaLoaded(BlockPos center, int range) { + return true; + } + + // UNIMPORTANT IMPLEMENTATIONS + + @Override + public void sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newState, int flags) { + } + + @Override + public void playSeededSound(Player player, double x, double y, double z, Holder soundEvent, + SoundSource soundSource, float volume, float pitch, long seed) { + } + + @Override + public void playSeededSound(Player player, Entity entity, Holder soundEvent, SoundSource soundSource, + float volume, float pitch, long seed) { + } + + @Override + public String gatherChunkSourceStats() { + return ""; + } + + @Override + @Nullable + public Entity getEntity(int id) { + return null; + } + + @Override + @Nullable + public MapItemSavedData getMapData(String mapName) { + return null; + } + + @Override + public void setMapData(String mapId, MapItemSavedData data) { + } + + @Override + public int getFreeMapId() { + return 0; + } + + @Override + public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) { + } + + @Override + public void levelEvent(@Nullable Player player, int type, BlockPos pos, int data) { + } + + @Override + public void gameEvent(GameEvent event, Vec3 position, Context context) { + } + + @Override + public List players() { + return Collections.emptyList(); + } + + // Override Starlight's ExtendedWorld interface methods: + + public LevelChunk getChunkAtImmediately(final int chunkX, final int chunkZ) { + return chunkSource.getChunk(chunkX, chunkZ, false); + } + + public ChunkAccess getAnyChunkImmediately(final int chunkX, final int chunkZ) { + return chunkSource.getChunk(chunkX, chunkZ); + } + + // Intentionally copied from LevelHeightAccessor. Lithium overrides these methods so we need to, too. + + @Override + public int getMaxBuildHeight() { + return this.getMinBuildHeight() + this.getHeight(); + } + + @Override + public int getSectionsCount() { + return this.getMaxSection() - this.getMinSection(); + } + + @Override + public int getMinSection() { + return SectionPos.blockToSectionCoord(this.getMinBuildHeight()); + } + + @Override + public int getMaxSection() { + return SectionPos.blockToSectionCoord(this.getMaxBuildHeight() - 1) + 1; + } + + @Override + public boolean isOutsideBuildHeight(BlockPos pos) { + return this.isOutsideBuildHeight(pos.getY()); + } + + @Override + public boolean isOutsideBuildHeight(int y) { + return y < this.getMinBuildHeight() || y >= this.getMaxBuildHeight(); + } + + @Override + public int getSectionIndex(int y) { + return this.getSectionIndexFromSectionY(SectionPos.blockToSectionCoord(y)); + } + + @Override + public int getSectionIndexFromSectionY(int sectionY) { + return sectionY - this.getMinSection(); + } + + @Override + public int getSectionYFromSectionIndex(int sectionIndex) { + return sectionIndex + this.getMinSection(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index fb39c0792e..9bccd5c190 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -6,7 +6,7 @@ import javax.annotation.Nullable; import org.joml.Matrix3f; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllSpecialTextures; @@ -47,7 +47,7 @@ public abstract class Outline { .length(); float vAngle = AngleHelper.deg(Mth.atan2(hDistance, diff.y)) - 90; ms.pushPose(); - TransformStack.cast(ms) + TransformStack.of(ms) .translate(start) .rotateY(hAngle).rotateX(vAngle); renderAACuboidLine(ms, buffer, Vec3.ZERO, new Vec3(0, 0, diff.length())); diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java index 5a977773f2..d13d80e677 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java @@ -10,7 +10,7 @@ import javax.annotation.Nullable; import com.google.common.collect.ImmutableMap; import com.jozufozu.flywheel.Flywheel; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.backend.BackendManager; import com.mojang.blaze3d.platform.GlUtil; import com.simibubi.create.Create; import com.simibubi.create.foundation.mixin.accessor.SystemReportAccessor; @@ -74,7 +74,7 @@ public class DebugInformation { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { DebugInfoSection.builder("Graphics") .put("Flywheel Version", Flywheel.getVersion().toString()) - .put("Flywheel Backend", () -> Backend.getBackendType().toString()) + .put("Flywheel Backend", () -> BackendManager.getBackend().toString()) .put("OpenGL Renderer", GlUtil::getRenderer) .put("OpenGL Version", GlUtil::getOpenGLVersion) .put("Graphics Mode", () -> Minecraft.getInstance().options.graphicsMode().toString()) diff --git a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java index 6e24b07786..25c1c07854 100644 --- a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java @@ -1,6 +1,6 @@ package com.simibubi.create.infrastructure.gui; -import com.jozufozu.flywheel.util.transform.TransformStack; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -93,13 +93,13 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { RenderSystem.enableDepthTest(); PoseStack ms = graphics.pose(); - + for (int side : Iterate.positiveAndNegative) { ms.pushPose(); ms.translate(width / 2, 60, 200); ms.scale(24 * side, 24 * side, 32); ms.translate(-1.75 * ((alpha * alpha) / 2f + .5f), .25f, 0); - TransformStack.cast(ms) + TransformStack.of(ms) .rotateX(45); GuiGameElement.of(AllBlocks.LARGE_COGWHEEL.getDefaultState()) .rotateBlock(0, Util.getMillis() / 32f * side, 0) From 458f63820b5c5a18786e7f7d79a13916ca26cd1a Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Thu, 4 Jan 2024 11:48:26 -0800 Subject: [PATCH 03/35] Starting to visualize it - All visuals have their compile errors sorted out* - I realize that flywheel flipped the semantics of rotate so that it now takes radians instead of degrees. I fixed everything I noticed but this will need follow up. - Implement collectCrumblingInstances for every visual. * Flywheel needs to re-implement stealInstance --- gradle.properties | 2 +- .../com/simibubi/create/CreateClient.java | 3 -- .../ContraptionControlsRenderer.java | 8 +-- .../harvester/HarvesterActorInstance.java | 13 ++--- .../actors/harvester/HarvesterRenderer.java | 2 +- .../contraptions/actors/psi/PIInstance.java | 30 +++++++----- .../actors/psi/PSIActorInstance.java | 2 +- .../contraptions/actors/psi/PSIInstance.java | 13 +++-- .../actors/roller/RollerActorInstance.java | 15 +++--- .../contraptions/bearing/BearingInstance.java | 11 ++++- .../bearing/StabilizedBearingInstance.java | 6 +-- .../contraptions/chassis/StickerInstance.java | 13 ++++- .../gantry/GantryCarriageInstance.java | 11 ++++- .../minecart/CouplingRenderer.java | 8 +-- .../pulley/AbstractPulleyInstance.java | 12 +++++ .../contraptions/render/ActorInstance.java | 9 ++-- .../decoration/placard/PlacardRenderer.java | 8 +-- .../equipment/armor/BacktankArmorLayer.java | 2 +- .../extendoGrip/ExtendoGripItemRenderer.java | 2 +- .../extendoGrip/ExtendoGripRenderHandler.java | 2 +- .../equipment/toolbox/ToolBoxInstance.java | 17 +++++-- .../fluids/drain/ItemDrainRenderer.java | 2 +- .../pipes/valve/FluidValveInstance.java | 13 ++++- .../fluids/tank/FluidTankRenderer.java | 2 +- .../kinetics/base/SingleRotatingInstance.java | 10 +++- .../content/kinetics/belt/BeltRenderer.java | 4 +- .../content/kinetics/belt/BeltVisual.java | 32 ++++++------ .../kinetics/clock/CuckooClockRenderer.java | 4 +- .../crafter/ShaftlessCogwheelInstance.java | 22 +++------ .../kinetics/crank/HandCrankInstance.java | 29 ++++++++--- .../deployer/DeployerActorInstance.java | 4 +- .../kinetics/deployer/DeployerInstance.java | 10 ++++ .../content/kinetics/fan/FanInstance.java | 15 +++++- .../kinetics/flywheel/FlywheelInstance.java | 10 +++- .../content/kinetics/gauge/GaugeInstance.java | 22 ++++++--- .../content/kinetics/gauge/GaugeRenderer.java | 7 ++- .../kinetics/gearbox/GearboxInstance.java | 8 +++ .../kinetics/mechanicalArm/ArmInstance.java | 9 +++- .../kinetics/mechanicalArm/ArmRenderer.java | 2 +- .../content/kinetics/mixer/MixerInstance.java | 18 +++++-- .../content/kinetics/press/PressInstance.java | 22 +++++++-- .../kinetics/saw/SawMovementBehaviour.java | 2 +- .../BracketedKineticBlockEntityInstance.java | 30 +++++++----- .../BracketedKineticBlockModel.java | 1 - .../encased/EncasedCogInstance.java | 36 ++++++++------ .../SpeedControllerRenderer.java | 2 +- .../steamEngine/SteamEngineInstance.java | 22 ++++++--- .../steamEngine/SteamEngineRenderer.java | 12 ++--- .../transmission/SplitShaftInstance.java | 30 +++++++----- .../waterwheel/WaterWheelInstance.java | 35 +++++++------ .../logistics/chute/ChuteRenderer.java | 2 +- .../logistics/depot/DepotRenderer.java | 4 +- .../logistics/depot/EjectorInstance.java | 27 +++++++--- .../logistics/depot/EjectorRenderer.java | 4 +- .../logistics/funnel/FunnelInstance.java | 34 ++++++++----- .../logistics/funnel/FunnelRenderer.java | 6 +-- .../logistics/tunnel/BeltTunnelInstance.java | 33 +++++++++---- .../logistics/tunnel/BeltTunnelRenderer.java | 4 +- .../burner/BlazeBurnerMovementBehaviour.java | 4 +- .../burner/BlazeBurnerRenderer.java | 2 +- .../analogLever/AnalogLeverInstance.java | 44 ++++++++++------- .../analogLever/AnalogLeverRenderer.java | 4 +- .../redstone/diodes/BrassDiodeInstance.java | 29 +++++++---- .../displayLink/DisplayLinkRenderer.java | 2 +- .../controller/LecternControllerRenderer.java | 6 +-- .../LinkedControllerItemRenderer.java | 2 +- .../redstone/nixieTube/NixieTubeRenderer.java | 4 +- .../cannon/SchematicannonInstance.java | 49 ++++++++++++------- .../cannon/SchematicannonRenderer.java | 9 ++-- .../trains/bogey/BackupBogeyRenderer.java | 1 - .../content/trains/bogey/BogeyRenderer.java | 29 +++++++---- .../trains/bogey/StandardBogeyRenderer.java | 10 ++-- .../CarriageContraptionEntityRenderer.java | 2 +- .../entity/CarriageContraptionInstance.java | 6 +-- .../trains/schedule/TrainHatArmorLayer.java | 2 +- .../trains/station/AbstractStationScreen.java | 2 +- .../trains/track/BezierConnection.java | 24 ++++----- .../content/trains/track/TrackBlock.java | 12 ++--- .../trains/track/TrackBlockOutline.java | 16 +++--- .../content/trains/track/TrackInstance.java | 42 ++++++++++++++-- .../content/trains/track/TrackRenderer.java | 2 +- .../ColoredOverlayBlockEntityRenderer.java | 2 +- .../foundation/fluid/FluidRenderer.java | 2 +- .../ponder/element/WorldSectionElement.java | 12 ++--- .../render/BlockEntityRenderHelper.java | 9 ++-- .../render/ConditionalInstance.java | 9 +++- .../foundation/render/SelectInstance.java | 9 +++- .../utility/ghost/GhostBlockRenderer.java | 1 - 88 files changed, 691 insertions(+), 374 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5e1edc80fe..f7efdc5b99 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-3 +flywheel_version = 1.0.0-alpha-5 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index c205d5bc18..89684cb990 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -62,9 +62,6 @@ public class CreateClient { public static void onCtorClient(IEventBus modEventBus, IEventBus forgeEventBus) { modEventBus.addListener(CreateClient::clientInit); modEventBus.addListener(AllParticleTypes::registerFactories); - modEventBus.addListener(CreateContexts::flwInit); - - MODEL_SWAPPER.registerListeners(modEventBus); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java index 7071258241..285778eecd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java @@ -93,14 +93,14 @@ public class ContraptionControlsRenderer extends SmartBlockEntityRenderer material = materialManager.defaultCutout() - .material(InstanceTypes.TRANSFORMED); - BlockState state = context.state; facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); - harvester = material.getModel(getRollingPartial(), state).createInstance(); + harvester = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(getRollingPartial()), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); @@ -86,10 +87,10 @@ public class HarvesterActorInstance extends ActorInstance { harvester.loadIdentity() .translate(context.localPos) .center() - .rotateY(horizontalAngle) + .rotateYDegrees(horizontalAngle) .uncenter() .translate(getRotationOffset()) - .rotateX(getRotation()) + .rotateXDegrees((float) getRotation()) .translateBack(getRotationOffset()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java index 2c15d17ca8..4e5f78e87c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java @@ -66,7 +66,7 @@ public class HarvesterRenderer extends SafeBlockEntityRenderer consumer) { + consumer.accept(middle); + consumer.accept(top); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java index 011525436e..70695ef5c8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java @@ -14,7 +14,7 @@ public class PSIActorInstance extends ActorInstance { public PSIActorInstance(VisualizationContext materialManager, VirtualRenderWorld world, MovementContext context) { super(materialManager, world, context); - instance = new PIInstance(materialManager, context.state, context.localPos); + instance = new PIInstance(materialManager.instancerProvider(), context.state, context.localPos); instance.init(false); instance.middle.setBlockLight(localBlockLight()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java index 69dbb6218c..2953b5f1c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.contraptions.actors.psi; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.TickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -12,10 +15,10 @@ public class PSIInstance extends AbstractBlockEntityVisual consumer) { + instance.collectCrumblingInstances(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java index c013a5a990..57e254fba0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java @@ -1,7 +1,10 @@ package com.simibubi.create.content.contraptions.actors.roller; +import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterActorInstance; @@ -19,9 +22,7 @@ public class RollerActorInstance extends HarvesterActorInstance { MovementContext context) { super(materialManager, simulationWorld, context); - Material material = materialManager.defaultCutout() - .material(InstanceTypes.TRANSFORMED); - frame = material.getModel(AllPartialModels.ROLLER_FRAME, context.state) + frame = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ROLLER_FRAME), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); frame.setBlockLight(localBlockLight()); } @@ -31,17 +32,17 @@ public class RollerActorInstance extends HarvesterActorInstance { harvester.loadIdentity() .translate(context.localPos) .center() - .rotateY(horizontalAngle) + .rotateYDegrees(horizontalAngle) .uncenter() .translate(0, -.25, 17 / 16f) - .rotateX(getRotation()) + .rotateXDegrees((float) getRotation()) .translate(0, -.5, .5) - .rotateY(90); + .rotateYDegrees(90); frame.loadIdentity() .translate(context.localPos) .center() - .rotateY(horizontalAngle + 180) + .rotateYDegrees(horizontalAngle + 180) .uncenter(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java index 7479cc9772..1696536be6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java @@ -1,8 +1,11 @@ package com.simibubi.create.content.contraptions.bearing; +import java.util.function.Consumer; + import org.joml.Quaternionf; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -37,7 +40,7 @@ public class BearingInstance PartialModel top = blockEntity.isWoodenTop() ? AllPartialModels.BEARING_TOP_WOODEN : AllPartialModels.BEARING_TOP; - topInstance = instancerProvider.instancerr(InstanceTypes.ORIENTED, Models.partial(top), RenderStage.AFTER_BLOCK_ENTITIES) + topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); topInstance.setPosition(getVisualPosition()).setRotation(blockOrientation); @@ -77,4 +80,10 @@ public class BearingInstance orientation.mul(Axis.XP.rotationDegrees(-90 - AngleHelper.verticalAngle(facing))); return orientation; } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(topInstance); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java index 27e21c286e..f3022378d0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java @@ -2,9 +2,11 @@ package com.simibubi.create.content.contraptions.bearing; import org.joml.Quaternionf; +import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -45,9 +47,7 @@ public class StabilizedBearingInstance extends ActorInstance { .setRotation(blockOrientation) .setBlockLight(blockLight); - shaft = materialManager.defaultSolid() - .material(AllInstanceTypes.ROTATING) - .getModel(AllPartialModels.SHAFT_HALF, blockState, blockState.getValue(BlockStateProperties.FACING).getOpposite()) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); // not rotating so no need to set speed, axis, etc. diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java index e482740d53..8602c68442 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java @@ -1,7 +1,11 @@ package com.simibubi.create.content.contraptions.chassis; +import java.util.function.Consumer; + import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -37,8 +41,8 @@ public class StickerInstance extends AbstractBlockEntityVisual consumer) { + consumer.accept(head); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java index d5e6bc54b9..2d533c6b38 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.contraptions.gantry; +import java.util.function.Consumer; + import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -33,7 +36,7 @@ public class GantryCarriageInstance extends ShaftInstance consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(gantryCogs); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java index 0c507cec79..64cb88e692 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java @@ -79,7 +79,7 @@ public class CouplingRenderer { double connectorPitch = Math.atan2(endPointDiff.y, endPointDiff.multiply(1, 0, 1) .length()) * 180 / Math.PI; - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); carts.forEachWithContext((cart, isFirst) -> { CartEndpoint cartTransform = transforms.get(isFirst); @@ -87,7 +87,7 @@ public class CouplingRenderer { cartTransform.apply(ms, camera); attachment.light(lightValues.get(isFirst)) .renderInto(ms, builder); - msr.rotateY(connectorYaw - cartTransform.yaw); + msr.rotateYDegrees((float) connectorYaw - cartTransform.yaw); ring.light(lightValues.get(isFirst)) .renderInto(ms, builder); ms.popPose(); @@ -100,8 +100,8 @@ public class CouplingRenderer { ms.pushPose(); msr.translate(firstEndpoint.subtract(camera)) - .rotateY(connectorYaw) - .rotateZ(connectorPitch); + .rotateYDegrees((float) connectorYaw) + .rotateZDegrees((float) connectorPitch); ms.scale((float) endPointDiff.length(), 1, 1); connector.light(meanSkyLight << 20 | meanBlockLight << 4) diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java index 67b17ede52..ba0cf7a86c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyInstance.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.contraptions.pulley; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -189,4 +192,13 @@ public abstract class AbstractPulleyInstance exten super.onLightUpdate(type, pos); light.onLightUpdate(type, pos); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(coil); + magnet.forEach(consumer); + rope.forEach(consumer); + halfRope.forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java index a5cafc1e1b..124c77afaf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.render; +import com.jozufozu.flywheel.api.instance.InstancerProvider; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -7,12 +8,14 @@ import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; public abstract class ActorInstance { - protected final VisualizationContext materialManager; + protected final VisualizationContext visualizationContext; + protected final InstancerProvider instancerProvider; protected final BlockAndTintGetter simulationWorld; protected final MovementContext context; - public ActorInstance(VisualizationContext materialManager, BlockAndTintGetter world, MovementContext context) { - this.materialManager = materialManager; + public ActorInstance(VisualizationContext visualizationContext, BlockAndTintGetter world, MovementContext context) { + this.visualizationContext = visualizationContext; + this.instancerProvider = visualizationContext.instancerProvider(); this.simulationWorld = world; this.context = context; } diff --git a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java index a054c78034..ca9d1b20a7 100644 --- a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java @@ -39,10 +39,10 @@ public class PlacardRenderer extends SafeBlockEntityRenderer ms.pushPose(); TransformStack.of(ms) .center() - .rotate(Direction.UP, - (face == AttachFace.CEILING ? Mth.PI : 0) + AngleHelper.rad(180 + AngleHelper.horizontalAngle(facing))) - .rotate(Direction.EAST, - face == AttachFace.CEILING ? -Mth.PI / 2 : face == AttachFace.FLOOR ? Mth.PI / 2 : 0) + .rotate((face == AttachFace.CEILING ? Mth.PI : 0) + AngleHelper.rad(180 + AngleHelper.horizontalAngle(facing)), + Direction.UP) + .rotate(face == AttachFace.CEILING ? -Mth.PI / 2 : face == AttachFace.FLOOR ? Mth.PI / 2 : 0, + Direction.EAST) .translate(0, 0, 4.5 / 16f) .scale(blockItem ? .5f : .375f); diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java index d6992b2401..acdbdc3667 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java @@ -63,7 +63,7 @@ public class BacktankArmorLayer .rotateY(180) .uncenter() .translate(0, 6.5f / 16, 11f / 16) - .rotate(Direction.EAST, AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360)) + .rotate(AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360), Direction.EAST) .translate(0, -6.5f / 16, -11f / 16); cogs.forEntityRender() diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java index 85ca959171..fc3d3ff8d6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java @@ -30,7 +30,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { @Override protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - TransformStack stacker = TransformStack.of(ms); + var stacker = TransformStack.of(ms); float animation = 0.25f; boolean leftHand = transformType == ItemDisplayContext.FIRST_PERSON_LEFT_HAND; boolean rightHand = transformType == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND; diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java index cf35ea80f2..68ada0f0eb 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java @@ -65,7 +65,7 @@ public class ExtendoGripRenderHandler { return; PoseStack ms = event.getPoseStack(); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); AbstractClientPlayer abstractclientplayerentity = mc.player; RenderSystem.setShaderTexture(0, abstractclientplayerentity.getSkinTextureLocation()); diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java index 891abe61da..d9028ab8a6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java @@ -1,8 +1,12 @@ package com.simibubi.create.content.equipment.toolbox; +import java.util.function.Consumer; + import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -49,9 +53,8 @@ public class ToolBoxInstance extends AbstractBlockEntityVisual consumer) { + consumer.accept(lid); + for (var drawer : drawers) { + consumer.accept(drawer); + } + } } diff --git a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java index 34b40d21c4..a472fb0139 100644 --- a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java @@ -47,7 +47,7 @@ public class ItemDrainRenderer extends SmartBlockEntityRenderer imp pointer.loadIdentity() .translate(getVisualPosition()) .center() - .rotateY(yRot) - .rotateX(xRot) + .rotateY((float) yRot) + .rotateX((float) xRot) .rotateY(pointerRotationOffset + pointerRotation) .uncenter(); } @@ -78,4 +81,10 @@ public class FluidValveInstance extends ShaftInstance imp super._delete(); pointer.delete(); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(pointer); + } } diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java index 74115fb2dc..6f4dfa95fa 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java @@ -82,7 +82,7 @@ public class FluidTankRenderer extends SafeBlockEntityRenderer extends Kineti } protected Instancer getModel() { - return instancerProvider.instancerr(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES); } protected Model model() { return Models.block(getRenderedBlockState()); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + consumer.accept(rotatingModel); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index 4ad90f585a..def4a96088 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -72,7 +72,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { boolean alongX = facing.getAxis() == Direction.Axis.X; PoseStack localTransforms = new PoseStack(); - TransformStack msr = TransformStack.of(localTransforms); + var msr = TransformStack.of(localTransforms); VertexConsumer vb = buffer.getBuffer(RenderType.solid()); float renderTick = AnimationTickHolder.getRenderTime(be.getLevel()); @@ -130,7 +130,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { Supplier matrixStackSupplier = () -> { PoseStack stack = new PoseStack(); - TransformStack stacker = TransformStack.of(stack); + var stacker = TransformStack.of(stack); stacker.center(); if (dir.getAxis() == Direction.Axis.X) stacker.rotateY(90); if (dir.getAxis() == Direction.Axis.Y) stacker.rotateX(90); diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index b0bcb14cc4..a213d5399e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -1,16 +1,18 @@ package com.simibubi.create.content.kinetics.belt; import java.util.ArrayList; -import java.util.function.Supplier; +import java.util.function.Consumer; import org.joml.Quaternionf; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; @@ -127,25 +129,16 @@ public class BeltVisual extends KineticBlockEntityInstance { private Instancer getPulleyModel() { Direction dir = getOrientation(); - Direction.Axis axis = dir.getAxis(); - - Supplier ms = () -> { - PoseStack modelTransform = new PoseStack(); - TransformStack msr = TransformStack.of(modelTransform); + var model = Models.partial(AllPartialModels.BELT_PULLEY, dir.getAxis(), (axis11, modelTransform1) -> { + var msr = TransformStack.of(modelTransform1); msr.center(); - if (axis == Direction.Axis.X) - msr.rotateY(90); - if (axis == Direction.Axis.Y) - msr.rotateX(90); + if (axis11 == Direction.Axis.X) msr.rotateY(90); + if (axis11 == Direction.Axis.Y) msr.rotateX(90); msr.rotateX(90); msr.uncenter(); + }); - return modelTransform; - }; - - return materialManager.defaultSolid() - .material(AllInstanceTypes.ROTATING) - .getModel(AllPartialModels.BELT_PULLEY, blockState, dir, ms); + return instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); } private Direction getOrientation() { @@ -178,4 +171,9 @@ public class BeltVisual extends KineticBlockEntityInstance { return key; } + @Override + public void collectCrumblingInstances(Consumer consumer) { + consumer.accept(pulleyKey); + keys.forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java index d74a2c23d6..dae5cca89d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java @@ -100,7 +100,7 @@ public class CuckooClockRenderer extends KineticBlockEntityRenderer rotateToFace(Direction facing) { - return () -> { - PoseStack stack = new PoseStack(); - TransformStack stacker = TransformStack.of(stack) - .center(); + private static void rotateToFace(Direction facing, PoseStack stack) { + var stacker = TransformStack.of(stack) + .center(); - if (facing.getAxis() == Direction.Axis.X) stacker.rotateZ(90); - else if (facing.getAxis() == Direction.Axis.Z) stacker.rotateX(90); + if (facing.getAxis() == Direction.Axis.X) stacker.rotateZ(90); + else if (facing.getAxis() == Direction.Axis.Z) stacker.rotateX(90); - stacker.uncenter(); - return stack; - }; + stacker.uncenter(); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java index 803b0bdfc0..6cb5965bd9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java @@ -1,8 +1,14 @@ package com.simibubi.create.content.kinetics.crank; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -19,12 +25,13 @@ public class HandCrankInstance extends SingleRotatingInstance consumer) { + super.collectCrumblingInstances(consumer); + if (crank != null) { + consumer.accept(crank); + } + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java index 98c1cb5b80..3e945b6726 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java @@ -94,7 +94,7 @@ public class DeployerActorInstance extends ActorInstance { Vec3 offset = Vec3.atLowerCornerOf(facing.getNormal()).scale(factor); - TransformStack tstack = TransformStack.of(stack); + var tstack = TransformStack.of(stack); stack.setIdentity(); tstack.translate(context.localPos) .translate(offset); @@ -103,7 +103,7 @@ public class DeployerActorInstance extends ActorInstance { } static void transformModel(PoseStack stack, TransformedInstance pole, TransformedInstance hand, float yRot, float xRot, float zRot) { - TransformStack tstack = TransformStack.of(stack); + var tstack = TransformStack.of(stack); tstack.center(); tstack.rotate((float) ((yRot) / 180 * Math.PI), Direction.UP); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java index 2dcc287feb..08d191cce7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java @@ -3,9 +3,12 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; +import java.util.function.Consumer; + import org.joml.Quaternionf; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.TickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -136,4 +139,11 @@ public class DeployerInstance extends ShaftInstance impleme pole.setRotation(q); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(pole); + consumer.accept(hand); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java index 99605e3a8f..cccdd7f1b1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java @@ -2,7 +2,12 @@ package com.simibubi.create.content.kinetics.fan; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; @@ -43,7 +48,7 @@ public class FanInstance extends KineticBlockEntityInstance consumer) { + consumer.accept(shaft); + consumer.accept(fan); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java index ed6604f3a6..ef4ddde499 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.kinetics.flywheel; +import java.util.function.Consumer; + import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -52,7 +55,7 @@ public class FlywheelInstance extends KineticBlockEntityInstance consumer) { + consumer.accept(shaft); + consumer.accept(wheel); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java index 5ae3b2e318..d34ca83bf5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java @@ -1,8 +1,10 @@ package com.simibubi.create.content.kinetics.gauge; import java.util.ArrayList; +import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -38,7 +40,7 @@ public abstract class GaugeInstance extends ShaftInstance impl Instancer headModel = getHeadModel(); ms = new PoseStack(); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); msr.translate(getVisualPosition()); float progress = Mth.lerp(AnimationTickHolder.getPartialTicks(), blockEntity.prevDialState, blockEntity.dialState); @@ -66,7 +68,7 @@ public abstract class GaugeInstance extends ShaftInstance impl float progress = Mth.lerp(ctx.partialTick(), blockEntity.prevDialState, blockEntity.dialState); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); for (DialFace faceEntry : faces) { faceEntry.updateTransform(msr, progress); @@ -88,7 +90,15 @@ public abstract class GaugeInstance extends ShaftInstance impl faces.forEach(DialFace::delete); } - protected abstract Instancer getHeadModel(); + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + for (DialFace face : faces) { + face.forEach(consumer); + } + } + + protected abstract Instancer getHeadModel(); protected class DialFace extends Couple { @@ -99,7 +109,7 @@ public abstract class GaugeInstance extends ShaftInstance impl this.face = face; } - private void setupTransform(TransformStack msr, float progress) { + private void setupTransform(TransformStack msr, float progress) { float dialPivot = 5.75f / 16; msr.pushPose(); @@ -116,7 +126,7 @@ public abstract class GaugeInstance extends ShaftInstance impl msr.popPose(); } - private void updateTransform(TransformStack msr, float progress) { + private void updateTransform(TransformStack msr, float progress) { float dialPivot = 5.75f / 16; msr.pushPose(); @@ -131,7 +141,7 @@ public abstract class GaugeInstance extends ShaftInstance impl msr.popPose(); } - protected TransformStack rotateToFace(TransformStack msr) { + protected TransformStack rotateToFace(TransformStack msr) { return msr.center() .rotate((float) ((-face.toYRot() - 90) / 180 * Math.PI), Direction.UP) .uncenter(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java index ed00a063a7..3dc7ae6c65 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java @@ -43,15 +43,14 @@ public class GaugeRenderer extends ShaftRenderer { super.renderSafe(be, partialTicks, ms, buffer, light, overlay); BlockState gaugeState = be.getBlockState(); - GaugeBlockEntity gaugeBE = (GaugeBlockEntity) be; - PartialModel partialModel = (type == Type.SPEED ? AllPartialModels.GAUGE_HEAD_SPEED : AllPartialModels.GAUGE_HEAD_STRESS); + PartialModel partialModel = (type == Type.SPEED ? AllPartialModels.GAUGE_HEAD_SPEED : AllPartialModels.GAUGE_HEAD_STRESS); SuperByteBuffer headBuffer = CachedBufferer.partial(partialModel, gaugeState); SuperByteBuffer dialBuffer = CachedBufferer.partial(AllPartialModels.GAUGE_DIAL, gaugeState); float dialPivot = 5.75f / 16; - float progress = Mth.lerp(partialTicks, gaugeBE.prevDialState, gaugeBE.dialState); + float progress = Mth.lerp(partialTicks, be.prevDialState, be.dialState); for (Direction facing : Iterate.directions) { if (!((GaugeBlock) gaugeState.getBlock()).shouldRenderHeadOnFace(be.getLevel(), be.getBlockPos(), gaugeState, @@ -60,7 +59,7 @@ public class GaugeRenderer extends ShaftRenderer { VertexConsumer vb = buffer.getBuffer(RenderType.solid()); rotateBufferTowards(dialBuffer, facing).translate(0, dialPivot, dialPivot) - .rotate(Direction.EAST, (float) (Math.PI / 2 * -progress)) + .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) .translate(0, -dialPivot, -dialPivot) .light(light) .renderInto(ms, vb); diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java index fd9e51ff81..ed3b17d747 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java @@ -2,8 +2,10 @@ package com.simibubi.create.content.kinetics.gearbox; import java.util.EnumMap; import java.util.Map; +import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -96,4 +98,10 @@ public class GearboxInstance extends KineticBlockEntityInstance consumer) { + keys.values() + .forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java index 7c1bbf9b63..9e2d82382d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java @@ -1,9 +1,11 @@ package com.simibubi.create.content.kinetics.mechanicalArm; import java.util.ArrayList; +import java.util.function.Consumer; import com.google.common.collect.Lists; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -123,7 +125,7 @@ public class ArmInstance extends SingleRotatingInstance implemen } PoseStack msLocal = new PoseStack(); - TransformStack msr = TransformStack.of(msLocal); + var msr = TransformStack.of(msLocal); msr.translate(getVisualPosition()); msr.center(); @@ -199,4 +201,9 @@ public class ArmInstance extends SingleRotatingInstance implemen models.forEach(AbstractInstance::delete); } + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + models.forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java index 1cb4ac4ea4..6ca4ec2554 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java @@ -53,7 +53,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer { BlockState blockState = be.getBlockState(); PoseStack msLocal = new PoseStack(); - TransformStack msr = TransformStack.of(msLocal); + var msr = TransformStack.of(msLocal); float baseAngle; float lowerArmAngle; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java index 41ca897b54..c886070d70 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java @@ -1,7 +1,10 @@ package com.simibubi.create.content.kinetics.mixer; +import java.util.function.Consumer; + import com.jozufozu.flywheel.api.event.RenderStage; -import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -42,10 +45,8 @@ public class MixerInstance extends EncasedCogInstance implements DynamicVisual { } @Override - protected Instancer getCogModel() { - return materialManager.defaultSolid() - .material(AllInstanceTypes.ROTATING) - .getModel(AllPartialModels.SHAFTLESS_COGWHEEL, blockEntity.getBlockState()); + protected Model getCogModel() { + return Models.partial(AllPartialModels.SHAFTLESS_COGWHEEL); } @Override @@ -87,4 +88,11 @@ public class MixerInstance extends EncasedCogInstance implements DynamicVisual { mixerHead.delete(); mixerPole.delete(); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(mixerHead); + consumer.accept(mixerPole); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java index 6b56d448b4..eee3ddced5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java @@ -1,11 +1,17 @@ package com.simibubi.create.content.kinetics.press; +import java.util.function.Consumer; + import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.instance.DynamicVisual; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.materials.oriented.OrientedInstance; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.OrientedInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftInstance; @@ -31,7 +37,7 @@ public class PressInstance extends ShaftInstance imp } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { transformModels(); } @@ -39,7 +45,7 @@ public class PressInstance extends ShaftInstance imp float renderedHeadOffset = getRenderedHeadOffset(blockEntity); pressHead.setPosition(getVisualPosition()) - .nudge(0, -renderedHeadOffset, 0); + .nudgePosition(0, -renderedHeadOffset, 0); } private float getRenderedHeadOffset(MechanicalPressBlockEntity press) { @@ -60,4 +66,10 @@ public class PressInstance extends ShaftInstance imp super._delete(); pressHead.delete(); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(pressHead); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java index cdc4aaf38d..d7a0e9ff18 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java @@ -2,11 +2,11 @@ package com.simibubi.create.content.kinetics.saw; import java.util.Optional; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; import com.simibubi.create.foundation.damageTypes.CreateDamageSources; +import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.foundation.utility.TreeCutter; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java index 7486d5cf62..2498932b61 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java @@ -1,8 +1,13 @@ package com.simibubi.create.content.kinetics.simpleRelays; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -37,11 +42,8 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< Direction.Axis axis = KineticBlockEntityRenderer.getRotationAxisOf(blockEntity); BlockPos pos = blockEntity.getBlockPos(); float offset = BracketedKineticBlockEntityRenderer.getShaftAngleOffset(axis, pos); - Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - Instancer half = materialManager.defaultSolid() - .material(AllInstanceTypes.ROTATING) - .getModel(AllPartialModels.COGWHEEL_SHAFT, blockState, - facing, () -> this.rotateToAxis(axis)); + var model = Models.partial(AllPartialModels.COGWHEEL_SHAFT, axis, BracketedKineticBlockEntityInstance::rotateToAxis); + Instancer half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); additionalShaft = setup(half.createInstance(), speed); additionalShaft.setRotationOffset(offset); @@ -53,20 +55,16 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< return super.model(); Direction.Axis axis = KineticBlockEntityRenderer.getRotationAxisOf(blockEntity); - Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - return model(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, blockState, facing, - () -> this.rotateToAxis(axis)); + return Models.partial(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, axis, BracketedKineticBlockEntityInstance::rotateToAxis); } - private PoseStack rotateToAxis(Direction.Axis axis) { + private static void rotateToAxis(Direction.Axis axis, PoseStack ms) { Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - PoseStack poseStack = new PoseStack(); - TransformStack.of(poseStack) + TransformStack.of(ms) .center() .rotateToFace(facing) - .multiply(Axis.XN.rotationDegrees(-90)) + .rotate(Axis.XN.rotationDegrees(-90)) .uncenter(); - return poseStack; } @Override @@ -92,4 +90,10 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< additionalShaft.delete(); } + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + if (additionalShaft != null) + consumer.accept(additionalShaft); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java index 3716bc865a..7605ab7485 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.kinetics.simpleRelays; import java.util.Collections; import java.util.List; -import com.jozufozu.flywheel.core.model.ModelUtil; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java index 4d5c992fa1..aad0320534 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java @@ -1,9 +1,12 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; import java.util.Optional; +import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; @@ -48,8 +51,9 @@ public class EncasedCogInstance extends KineticBlockEntityInstance getCogModel() { + protected Model getCogModel() { BlockState referenceState = blockEntity.getBlockState(); Direction facing = Direction.fromAxisAndDirection(referenceState.getValue(BlockStateProperties.AXIS), AxisDirection.POSITIVE); PartialModel partial = large ? AllPartialModels.SHAFTLESS_LARGE_COGWHEEL : AllPartialModels.SHAFTLESS_COGWHEEL; - return materialManager.defaultSolid() - .material(AllInstanceTypes.ROTATING) - .getModel(partial, referenceState, facing, () -> { - PoseStack poseStack = new PoseStack(); - TransformStack.of(poseStack) - .center() - .rotateToFace(facing) - .rotate(Axis.XN.rotationDegrees(90)) - .uncenter(); - return poseStack; - }); + return Models.partial(partial, facing, EncasedCogInstance::transformCog); } + private static void transformCog(Direction dir, PoseStack stack) { + TransformStack.of(stack) + .center() + .rotateToFace(dir) + .rotate(Axis.XN.rotationDegrees(90)) + .uncenter(); + } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + consumer.accept(rotatingModel); + rotatingTopShaft.ifPresent(consumer); + rotatingBottomShaft.ifPresent(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java index 77e0828d10..07b5f25fd1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.speedController; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineInstance.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineInstance.java index 1e582b45b7..28f7350ba2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineInstance.java @@ -1,7 +1,11 @@ package com.simibubi.create.content.kinetics.steamEngine; +import java.util.function.Consumer; + import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -34,7 +38,7 @@ public class SteamEngineInstance extends AbstractBlockEntityVisual consumer) { + consumer.accept(piston); + consumer.accept(linkage); + consumer.accept(connector); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java index 20b8d570b6..f3a3afaf2d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.steamEngine; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -60,7 +60,7 @@ public class SteamEngineRenderer extends SafeBlockEntityRenderer { @@ -27,21 +31,19 @@ public class SplitShaftInstance extends KineticBlockEntityInstance rotatingMaterial = materialManager.defaultSolid() - .material(AllInstanceTypes.ROTATING); - for (Direction dir : Iterate.directionsInAxis(getRotationAxis())) { - Instancer half = rotatingMaterial.getModel(AllPartialModels.SHAFT_HALF, blockState, dir); + float splitSpeed = speed * blockEntity.getRotationSpeedModifier(dir); - float splitSpeed = speed * blockEntity.getRotationSpeedModifier(dir); + var instance = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, dir), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); - keys.add(setup(half.createInstance(), splitSpeed)); + keys.add(setup(instance, splitSpeed)); } } @Override - public void update() { + public void update(float pt) { Block block = blockState.getBlock(); final Direction.Axis boxAxis = ((IRotate) block).getRotationAxis(blockState); @@ -58,9 +60,13 @@ public class SplitShaftInstance extends KineticBlockEntityInstance consumer) { + keys.forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java index 4adcb4419f..f1790c2c29 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java @@ -1,9 +1,10 @@ package com.simibubi.create.content.kinetics.waterwheel; -import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.core.model.BlockModel; +import com.jozufozu.flywheel.lib.model.ModelCache; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.CutoutRotatingInstance; import com.simibubi.create.foundation.render.CachedBufferer; @@ -15,6 +16,8 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; public class WaterWheelInstance extends CutoutRotatingInstance { + private static final ModelCache MODEL_CACHE = new ModelCache<>(WaterWheelInstance::createModel); + protected final boolean large; protected final WaterWheelModelKey key; @@ -39,17 +42,21 @@ public class WaterWheelInstance extends CutoutR @Override protected Model model() { - return model(key, () -> { - BakedModel model = WaterWheelRenderer.generateModel(key); - BlockState state = key.state(); - Direction dir; - if (key.large()) { - dir = Direction.fromAxisAndDirection(state.getValue(LargeWaterWheelBlock.AXIS), AxisDirection.POSITIVE); - } else { - dir = state.getValue(WaterWheelBlock.FACING); - } - PoseStack transform = CachedBufferer.rotateToFaceVertical(dir).get(); - return BlockModel.of(model, Blocks.AIR.defaultBlockState(), transform); - }); + return MODEL_CACHE.get(key); + } + + private static Model createModel(WaterWheelModelKey key) { + BakedModel model = WaterWheelRenderer.generateModel(key); + BlockState state = key.state(); + Direction dir; + if (key.large()) { + dir = Direction.fromAxisAndDirection(state.getValue(LargeWaterWheelBlock.AXIS), AxisDirection.POSITIVE); + } else { + dir = state.getValue(WaterWheelBlock.FACING); + } + PoseStack transform = CachedBufferer.rotateToFaceVertical(dir).get(); + return new BakedModelBuilder(model) + .poseStack(transform) + .build(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java index 954a3672e8..03bd6a5086 100644 --- a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java @@ -36,7 +36,7 @@ public class ChuteRenderer extends SafeBlockEntityRenderer { int light, int overlay) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); ms.pushPose(); msr.center(); float itemScale = .5f; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java index 16dba7f1c0..825d4be9f3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java @@ -38,7 +38,7 @@ public class DepotRenderer extends SafeBlockEntityRenderer { int light, int overlay, DepotBehaviour depotBehaviour) { TransportedItemStack transported = depotBehaviour.heldItem; - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); Vec3 itemPosition = VecHelper.getCenterOf(be.getBlockPos()); ms.pushPose(); @@ -102,7 +102,7 @@ public class DepotRenderer extends SafeBlockEntityRenderer { int angle, Random r, Vec3 itemPosition) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); int count = (int) (Mth.log2((int) (itemStack.getCount()))) / 2; boolean renderUpright = BeltHelper.isItemUpright(itemStack); boolean blockItem = itemRenderer.getModel(itemStack, null, null, 0) diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java index 7208953ec4..8fa2db89ad 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java @@ -1,8 +1,15 @@ package com.simibubi.create.content.logistics.depot; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicVisual; -import com.jozufozu.flywheel.core.materials.model.ModelData; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftInstance; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -11,7 +18,7 @@ import net.minecraft.util.Mth; public class EjectorInstance extends ShaftInstance implements DynamicVisual { - protected final ModelData plate; + protected final TransformedInstance plate; private float lastProgress = Float.NaN; @@ -24,10 +31,12 @@ public class EjectorInstance extends ShaftInstance implement } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { float lidProgress = getLidProgress(); - if (Mth.equal(lidProgress, lastProgress)) return; + if (lidProgress == lastProgress) { + return; + } pivotPlate(lidProgress); lastProgress = lidProgress; @@ -58,4 +67,10 @@ public class EjectorInstance extends ShaftInstance implement EjectorRenderer.applyLidAngle(blockEntity, angle, plate.loadIdentity().translate(getVisualPosition())); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(plate); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java index f31624c0e5..b56fd39963 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java @@ -52,7 +52,7 @@ public class EjectorRenderer extends ShaftRenderer { .renderInto(ms, vertexBuilder); } - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); float maxTime = (float) (be.earlyTarget != null ? be.earlyTargetTime : be.launcher.getTotalFlyingTicks()); @@ -82,7 +82,7 @@ public class EjectorRenderer extends ShaftRenderer { ms.pushPose(); applyLidAngle(be, angle, msr); msr.center() - .rotateY(-180 - AngleHelper.horizontalAngle(be.getBlockState() + .rotateYDegrees(-180 - AngleHelper.horizontalAngle(be.getBlockState() .getValue(EjectorBlock.HORIZONTAL_FACING))) .uncenter(); DepotRenderer.renderItemsOf(be, partialTicks, ms, buffer, light, overlay, behaviour); diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java index 50af356467..4fb952b339 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java @@ -1,13 +1,18 @@ package com.simibubi.create.content.logistics.funnel; import java.util.ArrayList; +import java.util.function.Consumer; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicVisual; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapData; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -16,9 +21,9 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class FunnelInstance extends BlockEntityInstance implements DynamicVisual { +public class FunnelInstance extends AbstractBlockEntityVisual implements DynamicVisual { - private final ArrayList flaps; + private final ArrayList flaps; public FunnelInstance(VisualizationContext materialManager, FunnelBlockEntity blockEntity) { super(materialManager, blockEntity); @@ -31,8 +36,8 @@ public class FunnelInstance extends BlockEntityInstance imple : AllPartialModels.BELT_FUNNEL_FLAP); Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial), RenderStage.AFTER_BLOCK_ENTITIES); - int blockLight = world.getBrightness(LightLayer.BLOCK, pos); - int skyLight = world.getBrightness(LightLayer.SKY, pos); + int blockLight = level.getBrightness(LightLayer.BLOCK, pos); + int skyLight = level.getBrightness(LightLayer.SKY, pos); Direction direction = FunnelBlock.getFunnelFacing(blockState); @@ -60,7 +65,7 @@ public class FunnelInstance extends BlockEntityInstance imple } @Override - public void beginFrame() { + public void beginFrame(VisualFrameContext ctx) { if (flaps == null) return; float flapness = blockEntity.flap.getValue(AnimationTickHolder.getPartialTicks()); @@ -77,9 +82,16 @@ public class FunnelInstance extends BlockEntityInstance imple } @Override - public void remove() { + protected void _delete() { if (flaps == null) return; flaps.forEach(AbstractInstance::delete); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + if (flaps == null) return; + + flaps.forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java index b8ef29fd64..b43edb8771 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.funnel; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; @@ -39,7 +39,7 @@ public class FunnelRenderer extends SmartBlockEntityRenderer : AllPartialModels.BELT_FUNNEL_FLAP); SuperByteBuffer flapBuffer = CachedBufferer.partial(partialModel, blockState); Vec3 pivot = VecHelper.voxelSpace(0, 10, 9.5f); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); float horizontalAngle = AngleHelper.horizontalAngle(FunnelBlock.getFunnelFacing(blockState) .getOpposite()); @@ -47,7 +47,7 @@ public class FunnelRenderer extends SmartBlockEntityRenderer ms.pushPose(); msr.center() - .rotateY(horizontalAngle) + .rotateYDegrees(horizontalAngle) .uncenter(); ms.translate(0.075f / 16f, 0, -be.getFlapOffset()); diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java index 4d855d2a3c..fc646042e8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java @@ -4,12 +4,17 @@ import java.util.ArrayList; import java.util.Collection; import java.util.EnumMap; import java.util.Map; +import java.util.function.Consumer; -import com.jozufozu.flywheel.api.InstanceData; -import com.jozufozu.flywheel.api.Instancer; -import com.jozufozu.flywheel.api.MaterialManager; -import com.jozufozu.flywheel.api.instance.DynamicVisual; -import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapData; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -19,7 +24,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class BeltTunnelInstance extends BlockEntityInstance implements DynamicVisual { +public class BeltTunnelInstance extends AbstractBlockEntityVisual implements DynamicVisual { private final Map> tunnelFlaps; @@ -30,8 +35,8 @@ public class BeltTunnelInstance extends BlockEntityInstance model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP), RenderStage.AFTER_BLOCK_ENTITIES); - int blockLight = world.getBrightness(LightLayer.BLOCK, pos); - int skyLight = world.getBrightness(LightLayer.SKY, pos); + int blockLight = level.getBrightness(LightLayer.BLOCK, pos); + int skyLight = level.getBrightness(LightLayer.SKY, pos); blockEntity.flaps.forEach((direction, flapValue) -> { @@ -72,7 +77,7 @@ public class BeltTunnelInstance extends BlockEntityInstance { LerpedFloat lerpedFloat = blockEntity.flaps.get(direction); if (lerpedFloat == null) @@ -91,10 +96,18 @@ public class BeltTunnelInstance extends BlockEntityInstance consumer) { + tunnelFlaps.values() + .stream() + .flatMap(Collection::stream) + .forEach(consumer); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java index f3f82e426e..ff28db04f4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.tunnel; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -37,7 +37,7 @@ public class BeltTunnelRenderer extends SmartBlockEntityRenderer implements DynamicVisual { +public class AnalogLeverInstance extends AbstractBlockEntityVisual implements DynamicVisual { - protected final ModelData handle; - protected final ModelData indicator; + protected final TransformedInstance handle; + protected final TransformedInstance indicator; final float rX; final float rY; @@ -26,11 +32,9 @@ public class AnalogLeverInstance extends BlockEntityInstance mat = materialManager.defaultSolid().material(InstanceTypes.TRANSFORMED); - - handle = mat.getModel(AllPartialModels.ANALOG_LEVER_HANDLE, blockState) + handle = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ANALOG_LEVER_HANDLE), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - indicator = mat.getModel(AllPartialModels.ANALOG_LEVER_INDICATOR, blockState) + indicator = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ANALOG_LEVER_INDICATOR), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); AttachFace face = blockState.getValue(AnalogLeverBlock.FACE); @@ -42,7 +46,7 @@ public class AnalogLeverInstance extends BlockEntityInstance & Rotate> T transform(T msr) { return msr.translate(getVisualPosition()) .center() - .rotate(Direction.UP, (float) (rY / 180 * Math.PI)) - .rotate(Direction.EAST, (float) (rX / 180 * Math.PI)) + .rotate((float) (rY / 180 * Math.PI), Direction.UP) + .rotate((float) (rX / 180 * Math.PI), Direction.EAST) .uncenter(); } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + consumer.accept(handle); + consumer.accept(indicator); + } } diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java index 9d5c431f24..924442781e 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.analogLever; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -37,7 +37,7 @@ public class AnalogLeverRenderer extends SafeBlockEntityRenderer implements TickableVisual { +public class BrassDiodeInstance extends AbstractBlockEntityVisual implements TickableVisual { - protected final ModelData indicator; + protected final TransformedInstance indicator; protected int previousState; @@ -27,7 +33,7 @@ public class BrassDiodeInstance extends BlockEntityInstance consumer) { + consumer.accept(indicator); + } } diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java index af4a5107f3..76e9f142a6 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java @@ -33,7 +33,7 @@ public class DisplayLinkRenderer extends SafeBlockEntityRenderer implements DynamicVisual { +public class SchematicannonInstance extends AbstractBlockEntityVisual implements DynamicVisual { - private final ModelData connector; - private final ModelData pipe; + private final TransformedInstance connector; + private final TransformedInstance pipe; public SchematicannonInstance(VisualizationContext materialManager, SchematicannonBlockEntity blockEntity) { super(materialManager, blockEntity); - Material mat = materialManager.defaultSolid().material(InstanceTypes.TRANSFORMED); - - connector = mat.getModel(AllPartialModels.SCHEMATICANNON_CONNECTOR, blockState).createInstance(); - pipe = mat.getModel(AllPartialModels.SCHEMATICANNON_PIPE, blockState).createInstance(); + connector = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.SCHEMATICANNON_CONNECTOR), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + pipe = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.SCHEMATICANNON_PIPE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); } @Override - public void beginFrame() { - float partialTicks = AnimationTickHolder.getPartialTicks(); + public void beginFrame(VisualFrameContext ctx) { + float partialTicks = ctx.partialTick(); double[] cannonAngles = SchematicannonRenderer.getCannonAngles(blockEntity, pos, partialTicks); @@ -38,20 +43,20 @@ public class SchematicannonInstance extends BlockEntityInstance consumer) { + consumer.accept(connector); + consumer.accept(pipe); + } } diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java index 1c871e451e..0e22f85645 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.schematics.cannon; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.model.ModelUtil; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -58,15 +57,15 @@ public class SchematicannonRenderer extends SafeBlockEntityRenderer instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.block(model).createInstance()), RenderStage.AFTER_BLOCK_ENTITIES) + .mapToObj(i -> instancer.createInstance()) .map(BogeyModelData::new) .toArray(BogeyModelData[]::new); contraptionModelData.put(keyFromModel(model), modelData); @@ -206,8 +213,10 @@ public abstract class BogeyRenderer { * @param count Amount of models needed */ public void createModelInstance(VisualizationContext materialManager, BlockState state, int count) { + var instancer = materialManager.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.block(state), RenderStage.AFTER_BLOCK_ENTITIES); BogeyModelData[] modelData = IntStream.range(0, count) - .mapToObj(i -> instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.block(state).createInstance()), RenderStage.AFTER_BLOCK_ENTITIES) + .mapToObj(i -> instancer.createInstance()) .map(BogeyModelData::new) .toArray(BogeyModelData[]::new); contraptionModelData.put(keyFromModel(state), modelData); @@ -221,7 +230,7 @@ public abstract class BogeyRenderer { */ public void createModelInstance(VisualizationContext materialManager, BlockState... states) { for (BlockState state : states) - this.createModelInstance(VisualizationContext, state, 1); + this.createModelInstance(materialManager, state, 1); } /** @@ -232,7 +241,7 @@ public abstract class BogeyRenderer { */ public void createModelInstance(VisualizationContext materialManager, PartialModel... models) { for (PartialModel model : models) - createModelInstance(VisualizationContext, model, 1); + createModelInstance(materialManager, model, 1); } /** @@ -333,25 +342,25 @@ public abstract class BogeyRenderer { } public BogeyModelData setTransform(PoseStack ms) { - if (this.transform instanceof ModelData model) + if (this.transform instanceof TransformedInstance model) model.setTransform(ms); return this; } public BogeyModelData setEmptyTransform() { - if (this.transform instanceof ModelData model) + if (this.transform instanceof TransformedInstance model) model.setEmptyTransform(); return this; } public BogeyModelData delete() { - if (this.transform instanceof ModelData model) + if (this.transform instanceof TransformedInstance model) model.delete(); return this; } public BogeyModelData updateLight(int blockLight, int skyLight) { - if (this.transform instanceof ModelData model) + if (this.transform instanceof TransformedInstance model) model.setBlockLight(blockLight).setSkyLight(skyLight); return this; } @@ -369,8 +378,8 @@ public abstract class BogeyRenderer { } @Override - public BogeyModelData multiply(Quaternionf quaternion) { - this.transform.multiply(quaternion); + public BogeyModelData rotate(Quaternionf quaternion) { + this.transform.rotate(quaternion); return this; } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java index b6179bce63..cbb054051a 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java @@ -23,7 +23,7 @@ public class StandardBogeyRenderer { public static class CommonStandardBogeyRenderer extends BogeyRenderer.CommonRenderer { @Override public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { - createModelInstance(VisualizationContext, AllBlocks.SHAFT.getDefaultState() + createModelInstance(materialManager, AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.Z), 2); } @@ -46,8 +46,8 @@ public class StandardBogeyRenderer { public static class SmallStandardBogeyRenderer extends BogeyRenderer { @Override public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { - createModelInstance(VisualizationContext, SMALL_BOGEY_WHEELS, 2); - createModelInstance(VisualizationContext, BOGEY_FRAME); + createModelInstance(materialManager, SMALL_BOGEY_WHEELS, 2); + createModelInstance(materialManager, BOGEY_FRAME); } @@ -79,8 +79,8 @@ public class StandardBogeyRenderer { public static class LargeStandardBogeyRenderer extends BogeyRenderer { @Override public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { - createModelInstance(VisualizationContext, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); - createModelInstance(VisualizationContext, AllBlocks.SHAFT.getDefaultState() + createModelInstance(materialManager, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); + createModelInstance(materialManager, AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.X), 2); } diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java index 7e569d1f2a..fdcf5953c8 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.trains.entity; import java.util.Objects; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java index 0da1adccf7..03d20f08dd 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java @@ -29,14 +29,14 @@ public class CarriageContraptionInstance extends AbstractEntityVisual - bogey.getStyle().createInstance(bogey, bogey.type.getSize(), manager), materialManager); + bogey.getStyle().createInstance(bogey, bogey.type.getSize(), manager), visualizationContext); updateLight(); } @@ -48,7 +48,7 @@ public class CarriageContraptionInstance extends AbstractEntityVisual ms.pushPose(); boolean valid = false; - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); float scale = 1; if (entityModel instanceof AgeableListModel model) { diff --git a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java index fa7de94162..79c31d5e3c 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java @@ -99,7 +99,7 @@ public abstract class AbstractStationScreen extends AbstractSimiScreen { private void renderAdditional(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks, int guiLeft, int guiTop, AllGuiTextures background) { PoseStack ms = graphics.pose(); ms.pushPose(); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); msr.pushPose() .translate(guiLeft + background.width + 4, guiTop + background.height + 4, 100) .scale(40) diff --git a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java index 77042f00d3..2cc6f26c6b 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java @@ -544,9 +544,9 @@ public class BezierConnection implements Iterable { PoseStack poseStack = new PoseStack(); TransformStack.of(poseStack) .translate(prevMiddle) - .rotateYRadians(tieAngles.y) - .rotateXRadians(tieAngles.x) - .rotateZRadians(tieAngles.z) + .rotateY((float) tieAngles.y) + .rotateX((float) tieAngles.x) + .rotateZ((float) tieAngles.z) .translate(-1 / 2f, -2 / 16f - 1 / 256f, 0); angles.tieTransform = poseStack.last(); @@ -561,9 +561,9 @@ public class BezierConnection implements Iterable { poseStack = new PoseStack(); TransformStack.of(poseStack) .translate(prevI) - .rotateYRadians(anglesI.y) - .rotateXRadians(anglesI.x) - .rotateZRadians(anglesI.z) + .rotateY((float) anglesI.y) + .rotateX((float) anglesI.x) + .rotateZ((float) anglesI.z) .translate(0, -2 / 16f - 1 / 256f, -1 / 32f) .scale(1, 1, (float) diff.length() * scale); angles.railTransforms.set(first, poseStack.last()); @@ -636,9 +636,9 @@ public class BezierConnection implements Iterable { PoseStack poseStack = new PoseStack(); TransformStack.of(poseStack) .translate(previousBeam) - .rotateYRadians(beamAngles.y) - .rotateXRadians(beamAngles.x) - .rotateZRadians(beamAngles.z) + .rotateY((float) beamAngles.y) + .rotateX((float) beamAngles.x) + .rotateZ((float) beamAngles.z) .translate(0, 2 / 16f + (segment.index % 2 == 0 ? 1 : -1) / 2048f - 1 / 1024f, -1 / 32f) .scale(1, 1, (float) beamDiff.length() * scale); angles.beams.set(first, poseStack.last()); @@ -655,9 +655,9 @@ public class BezierConnection implements Iterable { poseStack = new PoseStack(); TransformStack.of(poseStack) .translate(previous) - .rotateYRadians(capAngles.y) - .rotateXRadians(capAngles.x) - .rotateZRadians(capAngles.z) + .rotateY((float) capAngles.y) + .rotateX((float) capAngles.x) + .rotateZ((float) capAngles.z) .translate(0, 2 / 16f + (segment.index % 2 == 0 ? 1 : -1) / 2048f - 1 / 1024f, -1 / 32f) .rotateZ(top ? 0 : 0) .scale(1, 1, (float) diff.length() * scale); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java index 189650862f..3f301b3325 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java @@ -653,7 +653,7 @@ public class TrackBlock extends Block public PartialModel prepareAssemblyOverlay(BlockGetter world, BlockPos pos, BlockState state, Direction direction, PoseStack ms) { TransformStack.of(ms) - .rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(direction))); + .rotateCentered(AngleHelper.rad(AngleHelper.horizontalAngle(direction)), Direction.UP); return AllPartialModels.TRACK_ASSEMBLING_OVERLAY; } @@ -661,7 +661,7 @@ public class TrackBlock extends Block @OnlyIn(Dist.CLIENT) public PartialModel prepareTrackOverlay(BlockGetter world, BlockPos pos, BlockState state, BezierTrackPointLocation bezierPoint, AxisDirection direction, PoseStack ms, RenderedTrackOverlayType type) { - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); Vec3 axis = null; Vec3 diff = null; @@ -701,8 +701,8 @@ public class TrackBlock extends Block Vec3 angles = TrackRenderer.getModelAngles(normal, diff); msr.center() - .rotateYRadians(angles.y) - .rotateXRadians(angles.x) + .rotateY((float) angles.y) + .rotateX((float) angles.x) .uncenter(); if (axis != null) @@ -710,7 +710,7 @@ public class TrackBlock extends Block else { msr.translate(0, 4 / 16f, 0); if (direction == AxisDirection.NEGATIVE) - msr.rotateCentered(Direction.UP, Mth.PI); + msr.rotateCentered(Mth.PI, Direction.UP); } if (bezierPoint == null && world.getBlockEntity(pos) instanceof TrackBlockEntity trackTE @@ -719,7 +719,7 @@ public class TrackBlock extends Block for (BezierConnection bc : trackTE.connections.values()) yOffset += bc.starts.getFirst().y - pos.getY(); msr.center() - .rotateX(-direction.getStep() * trackTE.tilt.smoothingAngle.get()) + .rotateXDegrees((float) (-direction.getStep() * trackTE.tilt.smoothingAngle.get())) .uncenter() .translate(0, yOffset / 2, 0); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java index ad434cdd1f..650b0a32ac 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java @@ -157,8 +157,8 @@ public class TrackBlockOutline { TransformStack.of(ms) .pushPose() .translate(vec.x, vec.y + .125f, vec.z) - .rotateYRadians(angles.y) - .rotateXRadians(angles.x) + .rotateY((float) angles.y) + .rotateX((float) angles.x) .translate(-.5, -.125f, -.5); boolean holdingTrack = AllTags.AllBlockTags.TRACKS.matches(Minecraft.getInstance().player.getMainHandItem()); @@ -259,24 +259,24 @@ public class TrackBlockOutline { for (Direction d : Iterate.horizontalDirections) { if (TrackShape.asPortal(d) != shape) continue; - msr.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(d))); + msr.rotateCentered(AngleHelper.rad(AngleHelper.horizontalAngle(d)), Direction.UP); renderer.accept(LONG_ORTHO_OFFSET); return; } } if (shape == TrackShape.PD || shape == TrackShape.CR_PDX || shape == TrackShape.CR_PDZ) { - msr.rotateCentered(Direction.UP, angle45); + msr.rotateCentered(angle45, Direction.UP); renderer.accept(LONG_ORTHO); } else if (shape == TrackShape.ND || shape == TrackShape.CR_NDX || shape == TrackShape.CR_NDZ) { - msr.rotateCentered(Direction.UP, -Mth.PI / 4); + msr.rotateCentered(-Mth.PI / 4, Direction.UP); renderer.accept(LONG_ORTHO); } if (shape == TrackShape.CR_O) renderer.accept(AllShapes.TRACK_CROSS); else if (shape == TrackShape.CR_D) { - msr.rotateCentered(Direction.UP, angle45); + msr.rotateCentered(angle45, Direction.UP); renderer.accept(LONG_CROSS); } @@ -284,8 +284,8 @@ public class TrackBlockOutline { return; msr.translate(0, 1, 0); - msr.rotateCentered(Direction.UP, Mth.PI - AngleHelper.rad(shape.getModelRotation())); - msr.rotateXRadians(angle45); + msr.rotateCentered(Mth.PI - AngleHelper.rad(shape.getModelRotation()), Direction.UP); + msr.rotateX(angle45); msr.translate(0, -3 / 16f, 1 / 16f); renderer.accept(LONG_ORTHO); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java b/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java index f90a3e4962..519694e013 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackInstance.java @@ -3,10 +3,12 @@ package com.simibubi.create.content.trains.track; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import javax.annotation.Nullable; import com.jozufozu.flywheel.api.event.RenderStage; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.box.Box; import com.jozufozu.flywheel.lib.box.MutableBox; @@ -80,6 +82,15 @@ public class TrackInstance extends AbstractBlockEntityVisual { instances.forEach(BezierTrackInstance::delete); } + @Override + public void collectCrumblingInstances(Consumer consumer) { + if (instances == null) + return; + for (BezierTrackInstance instance : instances) { + instance.collectCrumblingInstances(consumer); + } + } + private class BezierTrackInstance { private final TransformedInstance[] ties; @@ -109,11 +120,11 @@ public class TrackInstance extends AbstractBlockEntityVisual { TrackMaterial.TrackModelHolder modelHolder = bc.getMaterial().getModelHolder(); - instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie()), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstances(ties); - instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_left()), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_left()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstances(left); - instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_right()), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_right()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstances(right); SegmentAngles[] segments = bc.getBakedSegments(); @@ -160,6 +171,17 @@ public class TrackInstance extends AbstractBlockEntityVisual { girder.updateLight(); } + public void collectCrumblingInstances(Consumer consumer) { + for (var d : ties) + consumer.accept(d); + for (var d : left) + consumer.accept(d); + for (var d : right) + consumer.accept(d); + if (girder != null) + girder.collectCrumblingInstances(consumer); + } + private class GirderInstance { private final Couple beams; @@ -178,10 +200,10 @@ public class TrackInstance extends AbstractBlockEntityVisual { beams = Couple.create(() -> new TransformedInstance[segCount]); beamCaps = Couple.create(() -> Couple.create(() -> new TransformedInstance[segCount])); lightPos = new BlockPos[segCount]; - beams.forEach(instancerProvider.instancerr(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE), RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); + beams.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE), RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); beamCaps.forEachWithContext((c, top) -> { var partialModel = Models.partial(top ? AllPartialModels.GIRDER_SEGMENT_TOP : AllPartialModels.GIRDER_SEGMENT_BOTTOM); - c.forEach(instancerProvider.instancerr(InstanceTypes.TRANSFORMED, partialModel, RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); + c.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, partialModel, RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); }); GirderAngles[] bakedGirders = bc.getBakedGirders(); @@ -231,6 +253,16 @@ public class TrackInstance extends AbstractBlockEntityVisual { })); } + public void collectCrumblingInstances(Consumer consumer) { + beams.forEach(arr -> { + for (var d : arr) + consumer.accept(d); + }); + beamCaps.forEach(c -> c.forEach(arr -> { + for (var d : arr) + consumer.accept(d); + })); + } } } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java index 07f46a9c1c..56a0846f16 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java @@ -4,7 +4,7 @@ import static com.simibubi.create.AllPartialModels.GIRDER_SEGMENT_BOTTOM; import static com.simibubi.create.AllPartialModels.GIRDER_SEGMENT_MIDDLE; import static com.simibubi.create.AllPartialModels.GIRDER_SEGMENT_TOP; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java index fcfa181804..36a33004e4 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.blockEntity.renderer; -import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.render.SuperByteBuffer; diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 215df464e3..4deb18cc37 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -59,7 +59,7 @@ public class FluidRenderer { if (inbound) direction = direction.getOpposite(); - TransformStack msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); ms.pushPose(); msr.center() .rotateY(AngleHelper.horizontalAngle(direction)) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 9f7d373915..5035a645fd 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -239,16 +239,16 @@ public class WorldSectionElement extends AnimatedSceneElement { double rotY = Mth.lerp(pt, prevAnimatedRotation.y, animatedRotation.y); TransformStack.of(ms) .translate(centerOfRotation) - .rotateX(rotX) - .rotateZ(rotZ) - .rotateY(rotY) + .rotateX((float) rotX) + .rotateZ((float) rotZ) + .rotateY((float) rotY) .translateBack(centerOfRotation); if (stabilizationAnchor != null) { TransformStack.of(ms) .translate(stabilizationAnchor) - .rotateX(-rotX) - .rotateZ(-rotZ) - .rotateY(-rotY) + .rotateX((float) -rotX) + .rotateZ((float) -rotZ) + .rotateY((float) -rotY) .translateBack(stabilizationAnchor); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 0a190ea84d..7747286e97 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -7,10 +7,6 @@ import javax.annotation.Nullable; import org.joml.Matrix4f; import org.joml.Vector4f; -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.instancing.InstancedRenderRegistry; -import com.jozufozu.flywheel.config.BackendType; -import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; @@ -51,8 +47,9 @@ public class BlockEntityRenderHelper { Iterator iterator = customRenderBEs.iterator(); while (iterator.hasNext()) { BlockEntity blockEntity = iterator.next(); - if (Backend.getBackendType() == BackendType.INSTANCING && Backend.isFlywheelWorld(renderWorld) && InstancedRenderRegistry.shouldSkipRender(blockEntity)) - continue; + // TODO: fix contraption rendering +// if (Backend.getBackendType() == BackendType.INSTANCING && Backend.isFlywheelWorld(renderWorld) && InstancedRenderRegistry.shouldSkipRender(blockEntity)) +// continue; BlockEntityRenderer renderer = Minecraft.getInstance().getBlockEntityRenderDispatcher().getRenderer(blockEntity); if (renderer == null) { diff --git a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java index 07d44c9618..13d671b641 100644 --- a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java +++ b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java @@ -5,6 +5,7 @@ import java.util.function.Consumer; import javax.annotation.Nullable; +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -54,7 +55,13 @@ public class ConditionalInstance { if (instance != null) instance.delete(); } - @FunctionalInterface + public void forEach(Consumer consumer) { + if (instance != null) { + consumer.accept(instance); + } + } + + @FunctionalInterface public interface ICondition { boolean shouldShow(); } diff --git a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java index 99d279bc8f..4d1e2000b6 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java +++ b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java @@ -3,6 +3,7 @@ package com.simibubi.create.foundation.render; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.function.Consumer; import javax.annotation.Nullable; @@ -56,7 +57,13 @@ public class SelectInstance { if (current != null) current.handle().setDeleted(); } - public interface ModelSelector { + public void forEach(Consumer consumer) { + if (current != null) { + consumer.accept(current); + } + } + + public interface ModelSelector { int modelIndexToShow(); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java index b946df03a9..38c3aa5278 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -4,7 +4,6 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.core.model.ModelUtil; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.placement.PlacementHelpers; From 8d54e9268a9c8447f9132ae183843baf90c76b64 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Mon, 8 Jan 2024 16:36:41 -0800 Subject: [PATCH 04/35] Top 50 errors of all time - Down to 50 compile errors. - Port over to new instance type builders. - Move shaders and delete program specs. - Switch #use to #include. - Move content.kinetics.base.flwdata.* up a level. - Move BeltInstance to the belt package. - Make all instance fields public. --- gradle.properties | 2 +- .../actors/flwdata/ActorInstance.java | 36 ++-- .../actors/flwdata/ActorType.java | 48 ----- .../actors/flwdata/UnsafeActorWriter.java | 30 ---- .../bearing/StabilizedBearingInstance.java | 2 +- .../base/KineticBlockEntityInstance.java | 1 - .../base/{flwdata => }/KineticInstance.java | 13 +- .../base/{flwdata => }/RotatingInstance.java | 10 +- .../kinetics/base/SingleRotatingInstance.java | 1 - .../kinetics/base/flwdata/BeltType.java | 53 ------ .../kinetics/base/flwdata/BeltWriter.java | 23 --- .../kinetics/base/flwdata/KineticWriter.java | 17 -- .../kinetics/base/flwdata/RotatingType.java | 49 ------ .../kinetics/base/flwdata/RotatingWriter.java | 15 -- .../kinetics/base/flwdata/package-info.java | 6 - .../kinetics/belt/BeltBlockEntity.java | 7 +- .../{base/flwdata => belt}/BeltInstance.java | 27 +-- .../content/kinetics/belt/BeltVisual.java | 3 +- .../deployer/DeployerActorInstance.java | 2 +- .../content/kinetics/fan/FanInstance.java | 2 +- .../kinetics/flywheel/FlywheelInstance.java | 2 +- .../kinetics/gearbox/GearboxInstance.java | 3 +- .../content/kinetics/mixer/MixerInstance.java | 2 +- .../content/kinetics/saw/SawInstance.java | 1 - .../BracketedKineticBlockEntityInstance.java | 2 +- .../encased/EncasedCogInstance.java | 3 +- .../transmission/SplitShaftInstance.java | 4 +- .../content/logistics/flwdata/FlapData.java | 32 ++-- .../content/logistics/flwdata/FlapType.java | 61 ------- .../content/logistics/flwdata/FlapWriter.java | 28 --- .../foundation/render/AllInstanceLayouts.java | 33 ---- .../foundation/render/AllInstanceShaders.java | 14 -- .../foundation/render/AllInstanceTypes.java | 166 +++++++++++++++--- .../{shaders => }/context/contraption.glsl | 0 .../flywheel/{shaders => instance}/belt.vert | 4 +- .../contraption_actor.vert | 4 +- .../flywheel/{shaders => instance}/flap.vert | 4 +- .../{shaders => instance}/rotating.vert | 2 +- .../assets/create/flywheel/programs/belt.json | 4 - .../flywheel/programs/contraption_actor.json | 4 - .../assets/create/flywheel/programs/flap.json | 4 - .../create/flywheel/programs/rotating.json | 4 - 42 files changed, 227 insertions(+), 501 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java rename src/main/java/com/simibubi/create/content/kinetics/base/{flwdata => }/KineticInstance.java (88%) rename src/main/java/com/simibubi/create/content/kinetics/base/{flwdata => }/RotatingInstance.java (78%) delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/flwdata/package-info.java rename src/main/java/com/simibubi/create/content/kinetics/{base/flwdata => belt}/BeltInstance.java (70%) delete mode 100644 src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java rename src/main/resources/assets/create/flywheel/{shaders => }/context/contraption.glsl (100%) rename src/main/resources/assets/create/flywheel/{shaders => instance}/belt.vert (91%) rename src/main/resources/assets/create/flywheel/{shaders => instance}/contraption_actor.vert (89%) rename src/main/resources/assets/create/flywheel/{shaders => instance}/flap.vert (94%) rename src/main/resources/assets/create/flywheel/{shaders => instance}/rotating.vert (94%) delete mode 100644 src/main/resources/assets/create/flywheel/programs/belt.json delete mode 100644 src/main/resources/assets/create/flywheel/programs/contraption_actor.json delete mode 100644 src/main/resources/assets/create/flywheel/programs/flap.json delete mode 100644 src/main/resources/assets/create/flywheel/programs/rotating.json diff --git a/gradle.properties b/gradle.properties index f7efdc5b99..a13bd93191 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-5 +flywheel_version = 1.0.0-alpha-11 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java index 0f7f82cbe1..7a5ee91a0c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java @@ -10,25 +10,25 @@ import com.jozufozu.flywheel.lib.instance.AbstractInstance; import net.minecraft.core.BlockPos; public class ActorInstance extends AbstractInstance { - float x; - float y; - float z; - byte blockLight; - byte skyLight; - float rotationOffset; - byte rotationAxisX; - byte rotationAxisY; - byte rotationAxisZ; - float qX; - float qY; - float qZ; - float qW; - byte rotationCenterX = 64; - byte rotationCenterY = 64; - byte rotationCenterZ = 64; - float speed; + public float x; + public float y; + public float z; + public byte blockLight; + public byte skyLight; + public float rotationOffset; + public byte rotationAxisX; + public byte rotationAxisY; + public byte rotationAxisZ; + public float qX; + public float qY; + public float qZ; + public float qW; + public byte rotationCenterX = 64; + public byte rotationCenterY = 64; + public byte rotationCenterZ = 64; + public float speed; - protected ActorInstance(InstanceType type, InstanceHandle handle) { + public ActorInstance(InstanceType type, InstanceHandle handle) { super(type, handle); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java deleted file mode 100644 index 752f9c497f..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorType.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.simibubi.create.content.contraptions.actors.flwdata; - -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.api.instance.InstanceWriter; -import com.jozufozu.flywheel.api.layout.Layout; -import com.jozufozu.flywheel.lib.layout.BufferLayout; -import com.simibubi.create.foundation.render.AllInstanceLayouts; -import com.simibubi.create.foundation.render.AllInstanceShaders; - -import net.minecraft.resources.ResourceLocation; - -public class ActorType implements InstanceType { - @Override - public ActorInstance create(InstanceHandle instanceHandle) { - return new ActorInstance(this, instanceHandle); - } - - @Override - public Layout layout() { - return null; - } - - @Override - public InstanceWriter getWriter() { - return UnsafeActorWriter.INSTANCE; - } - - @Override - public ResourceLocation vertexShader() { - return null; - } - - @Override - public ResourceLocation cullShader() { - return null; - } - - @Override - public BufferLayout getLayout() { - return AllInstanceLayouts.ACTOR; - } - - @Override - public ResourceLocation getProgramSpec() { - return AllInstanceShaders.ACTOR; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java deleted file mode 100644 index 96a36a1c52..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/UnsafeActorWriter.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.simibubi.create.content.contraptions.actors.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.api.instance.InstanceWriter; - -public class UnsafeActorWriter implements InstanceWriter { - public static final UnsafeActorWriter INSTANCE = new UnsafeActorWriter(); - - @Override - public void write(long ptr, ActorInstance d) { - MemoryUtil.memPutFloat(ptr, d.x); - MemoryUtil.memPutFloat(ptr + 4, d.y); - MemoryUtil.memPutFloat(ptr + 8, d.z); - MemoryUtil.memPutByte(ptr + 12, d.blockLight); - MemoryUtil.memPutByte(ptr + 13, d.skyLight); - MemoryUtil.memPutFloat(ptr + 14, d.rotationOffset); - MemoryUtil.memPutByte(ptr + 18, d.rotationAxisX); - MemoryUtil.memPutByte(ptr + 19, d.rotationAxisY); - MemoryUtil.memPutByte(ptr + 20, d.rotationAxisZ); - MemoryUtil.memPutFloat(ptr + 21, d.qX); - MemoryUtil.memPutFloat(ptr + 25, d.qY); - MemoryUtil.memPutFloat(ptr + 29, d.qZ); - MemoryUtil.memPutFloat(ptr + 33, d.qW); - MemoryUtil.memPutByte(ptr + 37, d.rotationCenterX); - MemoryUtil.memPutByte(ptr + 38, d.rotationCenterY); - MemoryUtil.memPutByte(ptr + 39, d.rotationCenterZ); - MemoryUtil.memPutFloat(ptr + 40, d.speed); - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java index f3022378d0..163001c10e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java @@ -11,7 +11,7 @@ import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java index 3f63c92e4a..1c90f8d029 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.kinetics.base; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel; import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java similarity index 88% rename from src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java index 680ca660b4..0fe9a8db17 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java @@ -1,21 +1,20 @@ -package com.simibubi.create.content.kinetics.base.flwdata; +package com.simibubi.create.content.kinetics.base; import org.joml.Vector3f; import com.jozufozu.flywheel.api.instance.InstanceHandle; import com.jozufozu.flywheel.api.instance.InstanceType; import com.jozufozu.flywheel.lib.instance.ColoredLitInstance; -import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.foundation.utility.Color; import net.minecraft.core.BlockPos; public class KineticInstance extends ColoredLitInstance { - float x; - float y; - float z; - float rotationalSpeed; - float rotationOffset; + public float x; + public float y; + public float z; + public float rotationalSpeed; + public float rotationOffset; protected KineticInstance(InstanceType type, InstanceHandle handle) { super(type, handle); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java similarity index 78% rename from src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java index e1a1dedf6c..de84a5885d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.kinetics.base.flwdata; +package com.simibubi.create.content.kinetics.base; import org.joml.Vector3f; @@ -8,11 +8,11 @@ import com.jozufozu.flywheel.api.instance.InstanceType; import net.minecraft.core.Direction; public class RotatingInstance extends KineticInstance { - byte rotationAxisX; - byte rotationAxisY; - byte rotationAxisZ; + public byte rotationAxisX; + public byte rotationAxisY; + public byte rotationAxisZ; - protected RotatingInstance(InstanceType type, InstanceHandle handle) { + public RotatingInstance(InstanceType type, InstanceHandle handle) { super(type, handle); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java index 2d45fb3e69..8ef8ed1390 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java @@ -8,7 +8,6 @@ import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java deleted file mode 100644 index bbb4c31299..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltType.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.api.instance.InstanceWriter; -import com.jozufozu.flywheel.api.layout.Layout; -import com.jozufozu.flywheel.lib.layout.BufferLayout; -import com.simibubi.create.foundation.render.AllInstanceLayouts; -import com.simibubi.create.foundation.render.AllInstanceShaders; - -import net.minecraft.resources.ResourceLocation; - -public class BeltType implements InstanceType { - @Override - public BeltInstance create(InstanceHandle instanceHandle) { - return new BeltInstance(this, instanceHandle); - } - - @Override - public Layout layout() { - return null; - } - - @Override - public InstanceWriter getWriter() { - return BeltWriter.INSTANCE; - } - - @Override - public ResourceLocation vertexShader() { - return null; - } - - @Override - public ResourceLocation cullShader() { - return null; - } - - @Override - public BeltInstance create() { - return new BeltInstance(); - } - - @Override - public BufferLayout getLayout() { - return AllInstanceLayouts.BELT; - } - - @Override - public ResourceLocation getProgramSpec() { - return AllInstanceShaders.BELT; - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java deleted file mode 100644 index 1666b7b592..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltWriter.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import org.lwjgl.system.MemoryUtil; - -public class BeltWriter extends KineticWriter { - public static final BeltWriter INSTANCE = new BeltWriter(); - - @Override - public void write(long ptr, BeltInstance d) { - super.write(ptr, d); - MemoryUtil.memPutFloat(ptr + 26, d.qX); - MemoryUtil.memPutFloat(ptr + 30, d.qY); - MemoryUtil.memPutFloat(ptr + 34, d.qZ); - MemoryUtil.memPutFloat(ptr + 38, d.qW); - MemoryUtil.memPutFloat(ptr + 42, d.sourceU); - MemoryUtil.memPutFloat(ptr + 46, d.sourceV); - MemoryUtil.memPutFloat(ptr + 50, d.minU); - MemoryUtil.memPutFloat(ptr + 54, d.minV); - MemoryUtil.memPutFloat(ptr + 58, d.maxU); - MemoryUtil.memPutFloat(ptr + 62, d.maxV); - MemoryUtil.memPutByte(ptr + 66, d.scrollMult); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java deleted file mode 100644 index 85578c7899..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/KineticWriter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.lib.instance.ColoredLitWriter; - -public abstract class KineticWriter extends ColoredLitWriter { - @Override - public void write(long ptr, D d) { - super.write(ptr, d); - MemoryUtil.memPutFloat(ptr + 6, d.x); - MemoryUtil.memPutFloat(ptr + 10, d.y); - MemoryUtil.memPutFloat(ptr + 14, d.z); - MemoryUtil.memPutFloat(ptr + 18, d.rotationalSpeed); - MemoryUtil.memPutFloat(ptr + 22, d.rotationOffset); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java deleted file mode 100644 index 4a5a54498d..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingType.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.api.instance.InstanceWriter; -import com.jozufozu.flywheel.api.layout.Layout; -import com.jozufozu.flywheel.lib.layout.BufferLayout; -import com.simibubi.create.foundation.render.AllInstanceLayouts; -import com.simibubi.create.foundation.render.AllInstanceShaders; - -import net.minecraft.resources.ResourceLocation; - -public class RotatingType implements InstanceType { - - @Override - public RotatingInstance create(InstanceHandle instanceHandle) { - return new RotatingInstance(this, instanceHandle); - } - - @Override - public Layout layout() { - return null; - } - - @Override - public InstanceWriter getWriter() { - return RotatingWriter.INSTANCE; - } - - @Override - public ResourceLocation vertexShader() { - return null; - } - - @Override - public ResourceLocation cullShader() { - return null; - } - - @Override - public BufferLayout getLayout() { - return AllInstanceLayouts.ROTATING; - } - - @Override - public ResourceLocation getProgramSpec() { - return AllInstanceShaders.ROTATING; - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java deleted file mode 100644 index 34ebfd86d1..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/RotatingWriter.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.simibubi.create.content.kinetics.base.flwdata; - -import org.lwjgl.system.MemoryUtil; - -public class RotatingWriter extends KineticWriter { - public static final RotatingWriter INSTANCE = new RotatingWriter(); - - @Override - public void write(long ptr, RotatingInstance d) { - super.write(ptr, d); - MemoryUtil.memPutByte(ptr + 26, d.rotationAxisX); - MemoryUtil.memPutByte(ptr + 27, d.rotationAxisY); - MemoryUtil.memPutByte(ptr + 28, d.rotationAxisZ); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/package-info.java b/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/package-info.java deleted file mode 100644 index 9e9a5554f1..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -@ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -package com.simibubi.create.content.kinetics.base.flwdata; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java index 7e4c5f77cd..a6816196f9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java @@ -37,6 +37,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; +import net.minecraft.core.SectionPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; @@ -613,12 +614,12 @@ public class BeltBlockEntity extends KineticBlockEntity { } @Override - public boolean isListenerInvalid() { + public boolean isInvalid() { return remove; } @Override - public void onLightUpdate(LightLayer type, Box changed) { + public void onLightUpdate(LightLayer type, SectionPos pos) { if (remove) return; if (level == null) @@ -626,7 +627,7 @@ public class BeltBlockEntity extends KineticBlockEntity { Box beltVolume = getVolume(); - if (beltVolume.intersects(changed)) { + if (beltVolume.intersects(MutableBox.from(pos))) { if (type == LightLayer.BLOCK) updateBlockLight(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltInstance.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java similarity index 70% rename from src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java index 42133eda52..464810bd96 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/flwdata/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java @@ -1,27 +1,28 @@ -package com.simibubi.create.content.kinetics.base.flwdata; +package com.simibubi.create.content.kinetics.belt; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.InstanceHandle; import com.jozufozu.flywheel.api.instance.InstanceType; +import com.simibubi.create.content.kinetics.base.KineticInstance; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import net.minecraft.client.renderer.texture.TextureAtlasSprite; public class BeltInstance extends KineticInstance { - float qX; - float qY; - float qZ; - float qW; - float sourceU; - float sourceV; - float minU; - float minV; - float maxU; - float maxV; - byte scrollMult; + public float qX; + public float qY; + public float qZ; + public float qW; + public float sourceU; + public float sourceV; + public float minU; + public float minV; + public float maxU; + public float maxV; + public byte scrollMult; - protected BeltInstance(InstanceType type, InstanceHandle handle) { + public BeltInstance(InstanceType type, InstanceHandle handle) { super(type, handle); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index a213d5399e..4d58e2f207 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -16,8 +16,7 @@ import com.jozufozu.flywheel.lib.transform.TransformStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.BeltInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java index 3e945b6726..7f8edbd36c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java @@ -16,7 +16,7 @@ import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java index cccdd7f1b1..fdf90a7ae0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java @@ -10,7 +10,7 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java index ef4ddde499..dc8c438068 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java @@ -13,7 +13,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java index ed3b17d747..ef4ef7e242 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java @@ -6,13 +6,12 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java index c886070d70..b7400b2a70 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java @@ -12,7 +12,7 @@ import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java index 82d7c68de2..1791d9ee3d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java @@ -5,7 +5,6 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Rotation; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java index 2498932b61..0358ed896c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java @@ -14,7 +14,7 @@ import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java index aad0320534..a153f2f63f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java @@ -5,7 +5,6 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -18,7 +17,7 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntityRenderer; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; diff --git a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java index ce4f1e3aea..1b59f0cbe7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java @@ -5,20 +5,18 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; public class SplitShaftInstance extends KineticBlockEntityInstance { diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java index 142cb039e8..254ed5b414 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java @@ -12,23 +12,23 @@ import net.minecraft.core.BlockPos; public class FlapData extends AbstractInstance implements FlatLit { - float x; - float y; - float z; - byte blockLight; - byte skyLight; - float segmentOffsetX; - float segmentOffsetY; - float segmentOffsetZ; - float pivotX; - float pivotY; - float pivotZ; - float horizontalAngle; - float intensity; - float flapScale; - float flapness; + public float x; + public float y; + public float z; + public byte blockLight; + public byte skyLight; + public float segmentOffsetX; + public float segmentOffsetY; + public float segmentOffsetZ; + public float pivotX; + public float pivotY; + public float pivotZ; + public float horizontalAngle; + public float intensity; + public float flapScale; + public float flapness; - protected FlapData(InstanceType type, InstanceHandle handle) { + public FlapData(InstanceType type, InstanceHandle handle) { super(type, handle); } diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java deleted file mode 100644 index f00da1e8fe..0000000000 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapType.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.simibubi.create.content.logistics.flwdata; - -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.api.instance.InstanceWriter; -import com.jozufozu.flywheel.api.layout.Layout; -import com.jozufozu.flywheel.lib.layout.BufferLayout; -import com.simibubi.create.foundation.render.AllInstanceLayouts; -import com.simibubi.create.foundation.render.AllInstanceShaders; - -import net.minecraft.resources.ResourceLocation; - -public class FlapType implements InstanceType { - @Override - public FlapData create(InstanceHandle instanceHandle) { - return new FlapData(this, instanceHandle); - } - - @Override - public Layout layout() { - return null; - } - - @Override - public InstanceWriter getWriter() { - return FlapWriter.INSTANCE; - } - - @Override - public ResourceLocation vertexShader() { - return null; - } - - @Override - public ResourceLocation cullShader() { - return null; - } - - @Override - public BufferLayout getLayout() { - return AllInstanceLayouts.FLAP; - } - - @Override - public ResourceLocation getProgramSpec() { - return AllInstanceShaders.FLAPS; - } - - - private static float getFlapAngle(float flapness, float intensity, float scale) { - float absFlap = Math.abs(flapness); - - float angle = (float) (Math.sin((1. - absFlap) * Math.PI * intensity) * 30. * flapness * scale); - - if (flapness > 0) { - return angle * 0.5f; - } else { - return angle; - } - } -} diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java deleted file mode 100644 index e26b3d844f..0000000000 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapWriter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.simibubi.create.content.logistics.flwdata; - -import org.lwjgl.system.MemoryUtil; - -import com.jozufozu.flywheel.api.instance.InstanceWriter; - -public class FlapWriter implements InstanceWriter { - public static final FlapWriter INSTANCE = new FlapWriter(); - - @Override - public void write(long ptr, FlapData d) { - MemoryUtil.memPutFloat(ptr, d.x); - MemoryUtil.memPutFloat(ptr + 4, d.y); - MemoryUtil.memPutFloat(ptr + 8, d.z); - MemoryUtil.memPutByte(ptr + 12, (byte) (d.blockLight << 4)); - MemoryUtil.memPutByte(ptr + 13, (byte) (d.skyLight << 4)); - MemoryUtil.memPutFloat(ptr + 14, d.segmentOffsetX); - MemoryUtil.memPutFloat(ptr + 18, d.segmentOffsetY); - MemoryUtil.memPutFloat(ptr + 22, d.segmentOffsetZ); - MemoryUtil.memPutFloat(ptr + 26, d.pivotX); - MemoryUtil.memPutFloat(ptr + 30, d.pivotY); - MemoryUtil.memPutFloat(ptr + 34, d.pivotZ); - MemoryUtil.memPutFloat(ptr + 38, d.horizontalAngle); - MemoryUtil.memPutFloat(ptr + 42, d.intensity); - MemoryUtil.memPutFloat(ptr + 46, d.flapScale); - MemoryUtil.memPutFloat(ptr + 50, d.flapness); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java deleted file mode 100644 index a1d3e28659..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceLayouts.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.simibubi.create.foundation.render; - -import com.jozufozu.flywheel.lib.layout.BufferLayout; -import com.jozufozu.flywheel.lib.layout.CommonItems; - -public class AllInstanceLayouts { - - public static final BufferLayout ROTATING = kineticInstance() - .addItems(CommonItems.NORMAL) - .build(); - - public static final BufferLayout BELT = kineticInstance() - .addItems(CommonItems.QUATERNION, CommonItems.UV, CommonItems.VEC4, - CommonItems.NORMALIZED_BYTE) - .build(); - - public static final BufferLayout ACTOR = BufferLayout.builder() - .addItems(CommonItems.VEC3, CommonItems.LIGHT, CommonItems.FLOAT, - CommonItems.NORMAL, CommonItems.QUATERNION, CommonItems.NORMAL, - CommonItems.FLOAT) - .build(); - - public static final BufferLayout FLAP = BufferLayout.builder() - .addItems(CommonItems.VEC3, CommonItems.LIGHT, CommonItems.VEC3, CommonItems.VEC3, - CommonItems.FLOAT, CommonItems.FLOAT, CommonItems.FLOAT, CommonItems.FLOAT) - .build(); - - private static BufferLayout.Builder kineticInstance() { - return BufferLayout.builder() - .addItems(CommonItems.LIGHT, CommonItems.RGBA) - .addItems(CommonItems.VEC3, CommonItems.FLOAT, CommonItems.FLOAT); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java deleted file mode 100644 index d39ab7cfeb..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceShaders.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.simibubi.create.foundation.render; - -import static com.simibubi.create.Create.asResource; - -import net.minecraft.resources.ResourceLocation; - -public class AllInstanceShaders { - - public static final ResourceLocation ROTATING = asResource("rotating"); - public static final ResourceLocation BELT = asResource("belt"); - public static final ResourceLocation FLAPS = asResource("flap"); - public static final ResourceLocation ACTOR = asResource("contraption_actor"); - -} diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 5e74b27aa8..faa2a00189 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -1,32 +1,158 @@ package com.simibubi.create.foundation.render; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.actors.flwdata.ActorInstance; -import com.simibubi.create.content.contraptions.actors.flwdata.ActorType; -import com.simibubi.create.content.kinetics.base.flwdata.BeltInstance; -import com.simibubi.create.content.kinetics.base.flwdata.BeltType; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingInstance; -import com.simibubi.create.content.kinetics.base.flwdata.RotatingType; -import com.simibubi.create.content.logistics.flwdata.FlapData; -import com.simibubi.create.content.logistics.flwdata.FlapType; +import static com.simibubi.create.Create.asResource; + +import org.lwjgl.system.MemoryUtil; + +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.api.layout.FloatRepr; +import com.jozufozu.flywheel.api.layout.IntegerRepr; +import com.jozufozu.flywheel.api.layout.LayoutBuilder; +import com.jozufozu.flywheel.lib.instance.SimpleInstanceType; +import com.simibubi.create.content.contraptions.actors.flwdata.ActorInstance; +import com.simibubi.create.content.kinetics.belt.BeltInstance; +import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.content.logistics.flwdata.FlapData; -import net.minecraft.resources.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class AllInstanceTypes { + // FIXME: memory alignment issues and light being represented by bytes - public static final InstanceType ROTATING = new RotatingType(); - public static final InstanceType BELTS = new BeltType(); - public static final InstanceType ACTORS = new ActorType(); - public static final InstanceType FLAPS = new FlapType(); + public static final InstanceType ROTATING = SimpleInstanceType.builder(RotatingInstance::new) + .cullShader(asResource("instance/cull/rotating.glsl")) + .vertexShader(asResource("instance/rotating.vert")) + .layout(LayoutBuilder.create() + .vector("light", IntegerRepr.SHORT, 2) + .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) + .vector("pos", FloatRepr.FLOAT, 3) + .scalar("speed", FloatRepr.FLOAT) + .scalar("offset", FloatRepr.FLOAT) + .vector("axis", FloatRepr.NORMALIZED_BYTE, 3) + .build()) + .writer((ptr, instance) -> { + MemoryUtil.memPutShort(ptr, instance.blockLight); + MemoryUtil.memPutShort(ptr + 2, instance.skyLight); + MemoryUtil.memPutByte(ptr + 4, instance.r); + MemoryUtil.memPutByte(ptr + 5, instance.g); + MemoryUtil.memPutByte(ptr + 6, instance.b); + MemoryUtil.memPutByte(ptr + 7, instance.a); + MemoryUtil.memPutFloat(ptr + 6, instance.x); + MemoryUtil.memPutFloat(ptr + 10, instance.y); + MemoryUtil.memPutFloat(ptr + 14, instance.z); + MemoryUtil.memPutFloat(ptr + 18, instance.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 22, instance.rotationOffset); + MemoryUtil.memPutByte(ptr + 26, instance.rotationAxisX); + MemoryUtil.memPutByte(ptr + 27, instance.rotationAxisY); + MemoryUtil.memPutByte(ptr + 28, instance.rotationAxisZ); + }) + .register(); + public static final InstanceType BELTS = SimpleInstanceType.builder(BeltInstance::new) + .cullShader(asResource("instance/cull/belt.glsl")) + .vertexShader(asResource("instance/belt.vert")) + .layout(LayoutBuilder.create() + .vector("light", IntegerRepr.SHORT, 2) + .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) + .vector("pos", FloatRepr.FLOAT, 3) + .scalar("speed", FloatRepr.FLOAT) + .scalar("offset", FloatRepr.FLOAT) + .vector("rotation", FloatRepr.FLOAT, 4) + .vector("sourceTexture", FloatRepr.FLOAT, 2) + .vector("scrollTexture", FloatRepr.FLOAT, 4) + .scalar("scrollMult", FloatRepr.NORMALIZED_BYTE) + .build()) + .writer((ptr, instance) -> { + MemoryUtil.memPutShort(ptr, instance.blockLight); + MemoryUtil.memPutShort(ptr + 2, instance.skyLight); + MemoryUtil.memPutByte(ptr + 4, instance.r); + MemoryUtil.memPutByte(ptr + 5, instance.g); + MemoryUtil.memPutByte(ptr + 6, instance.b); + MemoryUtil.memPutByte(ptr + 7, instance.a); + MemoryUtil.memPutFloat(ptr + 6, instance.x); + MemoryUtil.memPutFloat(ptr + 10, instance.y); + MemoryUtil.memPutFloat(ptr + 14, instance.z); + MemoryUtil.memPutFloat(ptr + 18, instance.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 22, instance.rotationOffset); + MemoryUtil.memPutFloat(ptr + 26, instance.qX); + MemoryUtil.memPutFloat(ptr + 30, instance.qY); + MemoryUtil.memPutFloat(ptr + 34, instance.qZ); + MemoryUtil.memPutFloat(ptr + 38, instance.qW); + MemoryUtil.memPutFloat(ptr + 42, instance.sourceU); + MemoryUtil.memPutFloat(ptr + 46, instance.sourceV); + MemoryUtil.memPutFloat(ptr + 50, instance.minU); + MemoryUtil.memPutFloat(ptr + 54, instance.minV); + MemoryUtil.memPutFloat(ptr + 58, instance.maxU); + MemoryUtil.memPutFloat(ptr + 62, instance.maxV); + MemoryUtil.memPutByte(ptr + 66, instance.scrollMult); + }) + .register(); + public static final InstanceType ACTORS = SimpleInstanceType.builder(ActorInstance::new) + .cullShader(asResource("instance/cull/contraption_actor.glsl")) + .vertexShader(asResource("instance/contraption_actor.vert")) + .layout(LayoutBuilder.create() + .vector("pos", FloatRepr.FLOAT, 3) + .vector("light", IntegerRepr.SHORT, 2) + .scalar("offset", FloatRepr.FLOAT) + .vector("axis", FloatRepr.NORMALIZED_BYTE, 3) + .vector("rotation", FloatRepr.FLOAT, 4) + .vector("rotationCenter", FloatRepr.NORMALIZED_BYTE, 3) + .scalar("speed", FloatRepr.FLOAT) + .build()) + .writer((ptr, instance) -> { + MemoryUtil.memPutFloat(ptr, instance.x); + MemoryUtil.memPutFloat(ptr + 4, instance.y); + MemoryUtil.memPutFloat(ptr + 8, instance.z); + MemoryUtil.memPutByte(ptr + 12, instance.blockLight); + MemoryUtil.memPutByte(ptr + 13, instance.skyLight); + MemoryUtil.memPutFloat(ptr + 14, instance.rotationOffset); + MemoryUtil.memPutByte(ptr + 18, instance.rotationAxisX); + MemoryUtil.memPutByte(ptr + 19, instance.rotationAxisY); + MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisZ); + MemoryUtil.memPutFloat(ptr + 21, instance.qX); + MemoryUtil.memPutFloat(ptr + 25, instance.qY); + MemoryUtil.memPutFloat(ptr + 29, instance.qZ); + MemoryUtil.memPutFloat(ptr + 33, instance.qW); + MemoryUtil.memPutByte(ptr + 37, instance.rotationCenterX); + MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterY); + MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterZ); + MemoryUtil.memPutFloat(ptr + 40, instance.speed); + }) + .register(); + public static final InstanceType FLAPS = SimpleInstanceType.builder(FlapData::new) + .cullShader(asResource("instance/cull/flap.glsl")) + .vertexShader(asResource("instance/flap.vert")) + .layout(LayoutBuilder.create() + .vector("instancePos", FloatRepr.FLOAT, 3) + .vector("light", IntegerRepr.SHORT, 2) + .vector("segmentOffset", FloatRepr.FLOAT, 3) + .vector("pivot", FloatRepr.FLOAT, 3) + .scalar("horizontalAngle", FloatRepr.FLOAT) + .scalar("intensity", FloatRepr.FLOAT) + .scalar("flapScale", FloatRepr.FLOAT) + .scalar("flapness", FloatRepr.FLOAT) + .build()) + .writer((ptr, instance) -> { + MemoryUtil.memPutFloat(ptr, instance.x); + MemoryUtil.memPutFloat(ptr + 4, instance.y); + MemoryUtil.memPutFloat(ptr + 8, instance.z); + MemoryUtil.memPutByte(ptr + 12, (byte) (instance.blockLight << 4)); + MemoryUtil.memPutByte(ptr + 13, (byte) (instance.skyLight << 4)); + MemoryUtil.memPutFloat(ptr + 14, instance.segmentOffsetX); + MemoryUtil.memPutFloat(ptr + 18, instance.segmentOffsetY); + MemoryUtil.memPutFloat(ptr + 22, instance.segmentOffsetZ); + MemoryUtil.memPutFloat(ptr + 26, instance.pivotX); + MemoryUtil.memPutFloat(ptr + 30, instance.pivotY); + MemoryUtil.memPutFloat(ptr + 34, instance.pivotZ); + MemoryUtil.memPutFloat(ptr + 38, instance.horizontalAngle); + MemoryUtil.memPutFloat(ptr + 42, instance.intensity); + MemoryUtil.memPutFloat(ptr + 46, instance.flapScale); + MemoryUtil.memPutFloat(ptr + 50, instance.flapness); + }) + .register(); - public static class Locations { - public static final ResourceLocation ROTATING = Create.asResource("rotating"); - public static final ResourceLocation BELTS = Create.asResource("belts"); - public static final ResourceLocation ACTORS = Create.asResource("actors"); - public static final ResourceLocation FLAPS = Create.asResource("flaps"); + public static void init() { + // noop } } diff --git a/src/main/resources/assets/create/flywheel/shaders/context/contraption.glsl b/src/main/resources/assets/create/flywheel/context/contraption.glsl similarity index 100% rename from src/main/resources/assets/create/flywheel/shaders/context/contraption.glsl rename to src/main/resources/assets/create/flywheel/context/contraption.glsl diff --git a/src/main/resources/assets/create/flywheel/shaders/belt.vert b/src/main/resources/assets/create/flywheel/instance/belt.vert similarity index 91% rename from src/main/resources/assets/create/flywheel/shaders/belt.vert rename to src/main/resources/assets/create/flywheel/instance/belt.vert index 215958ef65..48cc0a83dc 100644 --- a/src/main/resources/assets/create/flywheel/shaders/belt.vert +++ b/src/main/resources/assets/create/flywheel/instance/belt.vert @@ -1,7 +1,7 @@ #define PI 3.1415926538 -#use "flywheel:core/quaternion.glsl" -#use "flywheel:core/matutils.glsl" +#include "flywheel:core/quaternion.glsl" +#include "flywheel:core/matutils.glsl" struct Belt { vec2 light; diff --git a/src/main/resources/assets/create/flywheel/shaders/contraption_actor.vert b/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert similarity index 89% rename from src/main/resources/assets/create/flywheel/shaders/contraption_actor.vert rename to src/main/resources/assets/create/flywheel/instance/contraption_actor.vert index 1cb8335dea..eca332180d 100644 --- a/src/main/resources/assets/create/flywheel/shaders/contraption_actor.vert +++ b/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert @@ -1,7 +1,7 @@ #define PI 3.1415926538 -#use "flywheel:core/matutils.glsl" -#use "flywheel:core/quaternion.glsl" +#include "flywheel:core/matutils.glsl" +#include "flywheel:core/quaternion.glsl" struct Actor { vec3 pos; diff --git a/src/main/resources/assets/create/flywheel/shaders/flap.vert b/src/main/resources/assets/create/flywheel/instance/flap.vert similarity index 94% rename from src/main/resources/assets/create/flywheel/shaders/flap.vert rename to src/main/resources/assets/create/flywheel/instance/flap.vert index 3966724362..ea4ae6fb3d 100644 --- a/src/main/resources/assets/create/flywheel/shaders/flap.vert +++ b/src/main/resources/assets/create/flywheel/instance/flap.vert @@ -1,7 +1,7 @@ #define PI 3.1415926538 -#use "flywheel:core/matutils.glsl" -#use "flywheel:core/quaternion.glsl" +#include "flywheel:core/matutils.glsl" +#include "flywheel:core/quaternion.glsl" struct Flap { vec3 instancePos; diff --git a/src/main/resources/assets/create/flywheel/shaders/rotating.vert b/src/main/resources/assets/create/flywheel/instance/rotating.vert similarity index 94% rename from src/main/resources/assets/create/flywheel/shaders/rotating.vert rename to src/main/resources/assets/create/flywheel/instance/rotating.vert index 08a0e331c6..e934b3e247 100644 --- a/src/main/resources/assets/create/flywheel/shaders/rotating.vert +++ b/src/main/resources/assets/create/flywheel/instance/rotating.vert @@ -1,6 +1,6 @@ #define PI 3.1415926538 -#use "flywheel:core/matutils.glsl" +#include "flywheel:core/matutils.glsl" struct Rotating { vec2 light; diff --git a/src/main/resources/assets/create/flywheel/programs/belt.json b/src/main/resources/assets/create/flywheel/programs/belt.json deleted file mode 100644 index b94f52d086..0000000000 --- a/src/main/resources/assets/create/flywheel/programs/belt.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "vertex": "create:belt.vert", - "fragment": "flywheel:block.frag" -} diff --git a/src/main/resources/assets/create/flywheel/programs/contraption_actor.json b/src/main/resources/assets/create/flywheel/programs/contraption_actor.json deleted file mode 100644 index 117122132f..0000000000 --- a/src/main/resources/assets/create/flywheel/programs/contraption_actor.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "vertex": "create:contraption_actor.vert", - "fragment": "flywheel:block.frag" -} diff --git a/src/main/resources/assets/create/flywheel/programs/flap.json b/src/main/resources/assets/create/flywheel/programs/flap.json deleted file mode 100644 index e1beb3d15b..0000000000 --- a/src/main/resources/assets/create/flywheel/programs/flap.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "vertex": "create:flap.vert", - "fragment": "flywheel:block.frag" -} diff --git a/src/main/resources/assets/create/flywheel/programs/rotating.json b/src/main/resources/assets/create/flywheel/programs/rotating.json deleted file mode 100644 index 5010535ec0..0000000000 --- a/src/main/resources/assets/create/flywheel/programs/rotating.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "vertex": "create:rotating.vert", - "fragment": "flywheel:block.frag" -} From d925d697cc8dbe888906ce853ff520f9fd20c0af Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Tue, 9 Jan 2024 12:28:25 -0800 Subject: [PATCH 05/35] Sweeping things under the rug - Comment out some stuff to get it to compile. - Pull in ModelUtil virtual stuffs from old flywheel. - Update build.gradle to always download sources/javadoc in IDEA. --- build.gradle | 7 ++ .../render/ContraptionProgram.java | 49 ++++---- .../render/ContraptionRenderDispatcher.java | 18 ++- .../render/ContraptionRenderInfo.java | 7 +- .../contraptions/render/FlwContraption.java | 2 +- .../render/SBBContraptionManager.java | 12 +- .../BracketedKineticBlockModel.java | 1 + .../cannon/SchematicannonRenderer.java | 1 + .../schematics/client/SchematicRenderer.java | 112 +++++++++--------- .../gui/element/GuiGameElement.java | 1 + .../ponder/element/WorldSectionElement.java | 109 +++++++++-------- .../render/BakedModelRenderHelper.java | 23 +++- .../create/foundation/render/ModelUtil.java | 13 ++ .../foundation/render/SuperByteBuffer.java | 36 +++--- .../utility/ghost/GhostBlockRenderer.java | 1 + 15 files changed, 208 insertions(+), 184 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/render/ModelUtil.java diff --git a/build.gradle b/build.gradle index b2acfbc94e..e68a3a0d58 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,13 @@ mixin { debug.export = true } +idea { + module { + downloadJavadoc = true + downloadSources = true + } +} + minecraft { if (Boolean.parseBoolean(use_parchment)) { mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java index 9bc438ea97..542ed94311 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java @@ -3,38 +3,35 @@ package com.simibubi.create.content.contraptions.render; import org.joml.Matrix4f; import org.lwjgl.opengl.GL20; -import com.jozufozu.flywheel.gl.shader.GlProgram; - import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.AABB; -public class ContraptionProgram extends GlProgram { - protected final int uLightBoxSize; - protected final int uLightBoxMin; - protected final int uModel; - - protected int uLightVolume; - - public ContraptionProgram(ResourceLocation name, int handle) { - //super(name, handle); - super(handle); - uLightBoxSize = getUniformLocation("uLightBoxSize"); - uLightBoxMin = getUniformLocation("uLightBoxMin"); - uModel = getUniformLocation("uModel"); - } - +public class ContraptionProgram { +// protected final int uLightBoxSize; +// protected final int uLightBoxMin; +// protected final int uModel; +// +// protected int uLightVolume; +// +// public ContraptionProgram(ResourceLocation name, int handle) { +// super(handle); +// uLightBoxSize = getUniformLocation("uLightBoxSize"); +// uLightBoxMin = getUniformLocation("uLightBoxMin"); +// uModel = getUniformLocation("uModel"); +// } +// // @Override // protected void registerSamplers() { // super.registerSamplers(); // uLightVolume = setSamplerBinding("uLightVolume", 4); // } - - public void bind(Matrix4f model, AABB lightVolume) { - double sizeX = lightVolume.maxX - lightVolume.minX; - double sizeY = lightVolume.maxY - lightVolume.minY; - double sizeZ = lightVolume.maxZ - lightVolume.minZ; - GL20.glUniform3f(uLightBoxSize, (float) sizeX, (float) sizeY, (float) sizeZ); - GL20.glUniform3f(uLightBoxMin, (float) lightVolume.minX, (float) lightVolume.minY, (float) lightVolume.minZ); - // uploadMatrixUniform(uModel, model); - } +// +// public void bind(Matrix4f model, AABB lightVolume) { +// double sizeX = lightVolume.maxX - lightVolume.minX; +// double sizeY = lightVolume.maxY - lightVolume.minY; +// double sizeZ = lightVolume.maxZ - lightVolume.minZ; +// GL20.glUniform3f(uLightBoxSize, (float) sizeX, (float) sizeY, (float) sizeZ); +// GL20.glUniform3f(uLightBoxMin, (float) lightVolume.minX, (float) lightVolume.minY, (float) lightVolume.minZ); +// // uploadMatrixUniform(uModel, model); +// } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java index bb82dd94d4..c9dc08ec01 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java @@ -7,10 +7,8 @@ import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.api.event.BeginFrameEvent; import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent; import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.jozufozu.flywheel.gl.error.GlError; -import com.jozufozu.flywheel.lib.model.baked.BlockModelBuilder; +import com.jozufozu.flywheel.backend.gl.error.GlError; import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; -import com.jozufozu.flywheel.lib.model.baked.TessellatedModel; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllMovementBehaviours; @@ -165,13 +163,13 @@ public class ContraptionRenderDispatcher { public static SuperByteBuffer buildStructureBuffer(VirtualRenderWorld renderWorld, Contraption c, RenderType layer) { - Collection values = c.getRenderedBlocks(); - var build = new MultiBlockModelBuilder(values).renderWorld(renderWorld) - .modelDataMap(c.modelData) - .build(); - SuperByteBuffer sbb = new SuperByteBuffer(data); - data.release(); - return sbb; +// Collection values = c.getRenderedBlocks(); +// var build = new MultiBlockModelBuilder(values).renderWorld(renderWorld) +// .modelDataMap(c.modelData) +// .build(); +// SuperByteBuffer sbb = new SuperByteBuffer(data); +// build.delete(); + return null; } public static int getLight(Level world, float lx, float ly, float lz) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index dcf4e658c5..e8301b0d66 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -34,9 +34,10 @@ public class ContraptionRenderInfo { AbstractContraptionEntity entity = contraption.entity; - visible = event.getFrustum() - .isVisible(entity.getBoundingBoxForCulling() - .inflate(2)); + visible = false; +// visible = event.getFrustum() +// .isVisible(entity.getBoundingBoxForCulling() +// .inflate(2)); } public boolean isVisible() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java index 50e2f9ae31..62846edbdc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java @@ -4,7 +4,7 @@ import org.joml.Matrix4f; import com.jozufozu.flywheel.api.event.BeginFrameEvent; import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.jozufozu.flywheel.gl.GlStateTracker; +import com.jozufozu.flywheel.backend.gl.GlStateTracker; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java index 2972ab03b8..f407d6582d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java @@ -22,12 +22,12 @@ public class SBBContraptionManager extends ContraptionRenderingWorld renderContraptionLayerSBB(info, type, consumer)); - - event.buffers.bufferSource().endBatch(type); +// RenderType type = event.getType(); +// VertexConsumer consumer = event.buffers.bufferSource() +// .getBuffer(type); +// visible.forEach(info -> renderContraptionLayerSBB(info, type, consumer)); +// +// event.buffers.bufferSource().endBatch(type); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java index 7605ab7485..c0816a6af0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java @@ -5,6 +5,7 @@ import java.util.List; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.simibubi.create.foundation.render.ModelUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java index 0e22f85645..bb38ca3c48 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java @@ -11,6 +11,7 @@ import com.simibubi.create.content.schematics.cannon.LaunchedItem.ForBlockState; import com.simibubi.create.content.schematics.cannon.LaunchedItem.ForEntity; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.ModelUtil; import com.simibubi.create.foundation.render.SuperByteBuffer; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java index 5fe24465a7..e1d7cc6c95 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java @@ -3,11 +3,8 @@ package com.simibubi.create.content.schematics.client; import java.util.LinkedHashMap; import java.util.Map; -import com.jozufozu.flywheel.core.model.ModelUtil; -import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; -import com.jozufozu.flywheel.core.model.ShadeSeparatingVertexConsumer; +import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.content.schematics.SchematicWorld; @@ -92,58 +89,59 @@ public class SchematicRenderer { } protected SuperByteBuffer drawLayer(RenderType layer) { - BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; - ModelBlockRenderer renderer = dispatcher.getModelRenderer(); - ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); - - PoseStack poseStack = objects.poseStack; - RandomSource random = objects.random; - BlockPos.MutableBlockPos mutableBlockPos = objects.mutableBlockPos; - SchematicWorld renderWorld = schematic; - renderWorld.renderMode = true; - BoundingBox bounds = renderWorld.getBounds(); - - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); - - ModelBlockRenderer.enableCaching(); - for (BlockPos localPos : BlockPos.betweenClosed(bounds.minX(), bounds.minY(), bounds.minZ(), bounds.maxX(), bounds.maxY(), bounds.maxZ())) { - BlockPos pos = mutableBlockPos.setWithOffset(localPos, anchor); - BlockState state = renderWorld.getBlockState(pos); - - if (state.getRenderShape() == RenderShape.MODEL) { - BakedModel model = dispatcher.getBlockModel(state); - BlockEntity blockEntity = renderWorld.getBlockEntity(localPos); - ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; - modelData = model.getModelData(renderWorld, pos, state, modelData); - long seed = state.getSeed(pos); - random.setSeed(seed); - if (model.getRenderTypes(state, random, modelData).contains(layer)) { - poseStack.pushPose(); - poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ()); - - renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, - random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); - - poseStack.popPose(); - } - } - } - ModelBlockRenderer.clearCache(); - - shadeSeparatingWrapper.clear(); - ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder); - - renderWorld.renderMode = false; - - SuperByteBuffer sbb = new SuperByteBuffer(bufferedData); - bufferedData.release(); - return sbb; + // FIXME: use flywheel buffering utilities? +// BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; +// ModelBlockRenderer renderer = dispatcher.getModelRenderer(); +// ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); +// +// PoseStack poseStack = objects.poseStack; +// RandomSource random = objects.random; +// BlockPos.MutableBlockPos mutableBlockPos = objects.mutableBlockPos; +// SchematicWorld renderWorld = schematic; +// renderWorld.renderMode = true; +// BoundingBox bounds = renderWorld.getBounds(); +// +// ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; +// BufferBuilder shadedBuilder = objects.shadedBuilder; +// BufferBuilder unshadedBuilder = objects.unshadedBuilder; +// +// shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); +// unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); +// shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); +// +// ModelBlockRenderer.enableCaching(); +// for (BlockPos localPos : BlockPos.betweenClosed(bounds.minX(), bounds.minY(), bounds.minZ(), bounds.maxX(), bounds.maxY(), bounds.maxZ())) { +// BlockPos pos = mutableBlockPos.setWithOffset(localPos, anchor); +// BlockState state = renderWorld.getBlockState(pos); +// +// if (state.getRenderShape() == RenderShape.MODEL) { +// BakedModel model = dispatcher.getBlockModel(state); +// BlockEntity blockEntity = renderWorld.getBlockEntity(localPos); +// ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; +// modelData = model.getModelData(renderWorld, pos, state, modelData); +// long seed = state.getSeed(pos); +// random.setSeed(seed); +// if (model.getRenderTypes(state, random, modelData).contains(layer)) { +// poseStack.pushPose(); +// poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ()); +// +// renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, +// random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); +// +// poseStack.popPose(); +// } +// } +// } +// ModelBlockRenderer.clearCache(); +// +// shadeSeparatingWrapper.clear(); +// ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder); +// +// renderWorld.renderMode = false; +// +// SuperByteBuffer sbb = new SuperByteBuffer(bufferedData); +// bufferedData.release(); + return null; } private static int getLayerCount() { @@ -155,7 +153,7 @@ public class SchematicRenderer { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); public final BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); +// public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); public final BufferBuilder shadedBuilder = new BufferBuilder(512); public final BufferBuilder unshadedBuilder = new BufferBuilder(512); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java index f2fa2fcbbc..c4f4e9435c 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java @@ -13,6 +13,7 @@ import com.mojang.math.Axis; import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.gui.ILightingSettings; import com.simibubi.create.foundation.gui.UIRenderHelper; +import com.simibubi.create.foundation.render.ModelUtil; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 5035a645fd..e289df0d83 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -6,9 +6,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.function.Consumer; -import com.jozufozu.flywheel.core.model.ModelUtil; -import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; -import com.jozufozu.flywheel.core.model.ShadeSeparatingVertexConsumer; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; @@ -344,8 +341,8 @@ public class WorldSectionElement extends AnimatedSceneElement { ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); - ModelUtil.VANILLA_RENDERER - .renderBreakingTexture(world.getBlockState(pos), pos, world, ms, builder, ModelData.EMPTY); +// ModelUtil.VANILLA_RENDERER +// .renderBreakingTexture(world.getBlockState(pos), pos, world, ms, builder, ModelData.EMPTY); ms.popPose(); } @@ -408,62 +405,62 @@ public class WorldSectionElement extends AnimatedSceneElement { } private SuperByteBuffer buildStructureBuffer(PonderWorld world, RenderType layer) { - BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; - ModelBlockRenderer renderer = dispatcher.getModelRenderer(); - ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); - - PoseStack poseStack = objects.poseStack; - RandomSource random = objects.random; - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); - - world.setMask(this.section); - ModelBlockRenderer.enableCaching(); - section.forEach(pos -> { - BlockState state = world.getBlockState(pos); - FluidState fluidState = world.getFluidState(pos); - - poseStack.pushPose(); - poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); - - if (state.getRenderShape() == RenderShape.MODEL) { - BakedModel model = dispatcher.getBlockModel(state); - BlockEntity blockEntity = world.getBlockEntity(pos); - ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; - modelData = model.getModelData(world, pos, state, modelData); - long seed = state.getSeed(pos); - random.setSeed(seed); - if (model.getRenderTypes(state, random, modelData).contains(layer)) { - renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true, - random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); - } - } - - if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) - dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState); - - poseStack.popPose(); - }); - ModelBlockRenderer.clearCache(); - world.clearMask(); - - shadeSeparatingWrapper.clear(); - ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder); - - SuperByteBuffer sbb = new SuperByteBuffer(bufferedData); - bufferedData.release(); - return sbb; +// BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; +// ModelBlockRenderer renderer = dispatcher.getModelRenderer(); +// ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); +// +// PoseStack poseStack = objects.poseStack; +// RandomSource random = objects.random; +// ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; +// BufferBuilder shadedBuilder = objects.shadedBuilder; +// BufferBuilder unshadedBuilder = objects.unshadedBuilder; +// +// shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); +// unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); +// shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); +// +// world.setMask(this.section); +// ModelBlockRenderer.enableCaching(); +// section.forEach(pos -> { +// BlockState state = world.getBlockState(pos); +// FluidState fluidState = world.getFluidState(pos); +// +// poseStack.pushPose(); +// poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); +// +// if (state.getRenderShape() == RenderShape.MODEL) { +// BakedModel model = dispatcher.getBlockModel(state); +// BlockEntity blockEntity = world.getBlockEntity(pos); +// ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; +// modelData = model.getModelData(world, pos, state, modelData); +// long seed = state.getSeed(pos); +// random.setSeed(seed); +// if (model.getRenderTypes(state, random, modelData).contains(layer)) { +// renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true, +// random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); +// } +// } +// +// if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) +// dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState); +// +// poseStack.popPose(); +// }); +// ModelBlockRenderer.clearCache(); +// world.clearMask(); +// +// shadeSeparatingWrapper.clear(); +// ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder); +// +// SuperByteBuffer sbb = new SuperByteBuffer(bufferedData); +// bufferedData.release(); + return null; } private static class ThreadLocalObjects { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); + //public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); public final BufferBuilder shadedBuilder = new BufferBuilder(512); public final BufferBuilder unshadedBuilder = new BufferBuilder(512); } diff --git a/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java index f617e962f6..007aa18c44 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java @@ -1,5 +1,9 @@ package com.simibubi.create.foundation.render; +import com.jozufozu.flywheel.api.model.Mesh; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; +import com.jozufozu.flywheel.lib.model.baked.TessellatedModel; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; @@ -19,11 +23,20 @@ public class BakedModelRenderHelper { return standardModelRender(model, referenceState, new PoseStack()); } - public static SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState, PoseStack ms) { - ShadeSeparatedBufferedData data = ModelUtil.getBufferedData(model, referenceState, ms); - SuperByteBuffer sbb = new SuperByteBuffer(data); - data.release(); - return sbb; + public static SuperByteBuffer standardModelRender(BakedModel bakedModel, BlockState referenceState, PoseStack ms) { + var model = new BakedModelBuilder(bakedModel).blockState(referenceState) + .poseStack(ms) + .disableShadeSeparation() + .build(); + + SuperByteBuffer out = null; + for (Mesh value : model.meshes() + .values()) { + out = new SuperByteBuffer(value); + break; + } + model.delete(); + return out; } } diff --git a/src/main/java/com/simibubi/create/foundation/render/ModelUtil.java b/src/main/java/com/simibubi/create/foundation/render/ModelUtil.java new file mode 100644 index 0000000000..b54c7324ed --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/ModelUtil.java @@ -0,0 +1,13 @@ +package com.simibubi.create.foundation.render; + +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelProperty; + +public class ModelUtil { + public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); + public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); + + public static boolean isVirtual(ModelData data) { + return data.has(ModelUtil.VIRTUAL_PROPERTY) && Boolean.TRUE.equals(data.get(ModelUtil.VIRTUAL_PROPERTY)); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index 86dbcdf834..94afa44656 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -10,12 +10,15 @@ import org.joml.Quaternionf; import org.joml.Vector3f; import org.joml.Vector4f; +import com.jozufozu.flywheel.api.model.Mesh; import com.jozufozu.flywheel.api.vertex.VertexList; import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; import com.jozufozu.flywheel.lib.math.RenderMath; +import com.jozufozu.flywheel.lib.memory.MemoryBlock; import com.jozufozu.flywheel.lib.transform.Transform; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.util.ShadersModHandler; +import com.jozufozu.flywheel.lib.vertex.FullVertexView; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -33,8 +36,9 @@ import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; -public class SuperByteBuffer implements Transform { +public class SuperByteBuffer implements TransformStack { + private final MemoryBlock backingStore; private final VertexList template; private final IntPredicate shadedPredicate; @@ -67,26 +71,16 @@ public class SuperByteBuffer implements Transform { // Temporary private static final Long2IntMap WORLD_LIGHT_CACHE = new Long2IntOpenHashMap(); - public SuperByteBuffer(ByteBuffer vertexBuffer, BufferBuilder.DrawState drawState, int unshadedStartVertex) { - int vertexCount = drawState.vertexCount(); - int stride = drawState.format().getVertexSize(); + public SuperByteBuffer(Mesh mesh) { + var template = new FullVertexView(); + + backingStore = MemoryBlock.malloc(mesh.vertexCount() * FullVertexView.STRIDE); + template.ptr(backingStore.ptr()); + template.vertexCount(mesh.vertexCount()); + + mesh.write(template); - ShadedVertexList template = new BlockVertexList.Shaded(vertexBuffer, vertexCount, stride, unshadedStartVertex); - shadedPredicate = template::isShaded; this.template = template; - - transforms.pushPose(); - } - - public SuperByteBuffer(ShadeSeparatedBufferedData data) { - this(data.vertexBuffer(), data.drawState(), data.unshadedStartVertex()); - } - - public SuperByteBuffer(ByteBuffer vertexBuffer, BufferBuilder.DrawState drawState) { - int vertexCount = drawState.vertexCount(); - int stride = drawState.format().getVertexSize(); - - template = new BlockVertexList(vertexBuffer, vertexCount, stride); shadedPredicate = index -> true; transforms.pushPose(); @@ -247,7 +241,7 @@ public class SuperByteBuffer implements Transform { } public void delete() { - template.delete(); + backingStore.free(); } public PoseStack getTransforms() { @@ -272,11 +266,13 @@ public class SuperByteBuffer implements Transform { return this; } + @Override public SuperByteBuffer pushPose() { transforms.pushPose(); return this; } + @Override public SuperByteBuffer popPose() { transforms.popPose(); return this; diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java index 38c3aa5278..c8e1670936 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -7,6 +7,7 @@ import javax.annotation.Nullable; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.placement.PlacementHelpers; +import com.simibubi.create.foundation.render.ModelUtil; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import net.minecraft.client.Minecraft; From 45c9e2c87abf1b76dc30c7fbeeabcd9b097c2bca Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Tue, 9 Jan 2024 16:07:05 -0800 Subject: [PATCH 06/35] Potentially fix SBB and virtual block buffering --- .../ContraptionControlsMovement.java | 2 +- .../ContraptionControlsRenderer.java | 2 +- .../harvester/HarvesterActorInstance.java | 2 +- .../harvester/HarvesterMovementBehaviour.java | 2 +- .../actors/harvester/HarvesterRenderer.java | 4 +- .../actors/psi/PSIActorInstance.java | 2 +- .../psi/PortableStorageInterfaceMovement.java | 2 +- .../psi/PortableStorageInterfaceRenderer.java | 2 +- .../actors/roller/RollerActorInstance.java | 2 +- .../roller/RollerMovementBehaviour.java | 2 +- .../actors/roller/RollerRenderer.java | 6 +- .../ControlsMovementBehaviour.java | 2 +- .../trainControls/ControlsRenderer.java | 2 +- .../contraptions/bearing/BearingRenderer.java | 6 +- .../bearing/StabilizedBearingInstance.java | 2 +- .../StabilizedBearingMovementBehaviour.java | 2 +- .../behaviour/MovementBehaviour.java | 2 +- .../render/ContraptionRenderDispatcher.java | 18 +- .../render/ContraptionRenderInfo.java | 2 +- .../contraptions/render/FlwContraption.java | 2 +- .../render/SBBContraptionManager.java | 69 ++++- .../slidingDoor/SlidingDoorRenderer.java | 4 +- .../equipment/armor/BacktankArmorLayer.java | 4 +- .../content/equipment/bell/BellRenderer.java | 4 +- .../blueprint/BlueprintRenderer.java | 2 +- .../base/KineticBlockEntityRenderer.java | 2 +- .../kinetics/clock/CuckooClockRenderer.java | 6 +- .../crafter/MechanicalCrafterRenderer.java | 10 +- .../deployer/DeployerActorInstance.java | 2 +- .../deployer/DeployerMovementBehaviour.java | 2 +- .../kinetics/deployer/DeployerRenderer.java | 10 +- .../kinetics/drill/DrillActorInstance.java | 2 +- .../drill/DrillMovementBehaviour.java | 2 +- .../content/kinetics/drill/DrillRenderer.java | 2 +- .../content/kinetics/gauge/GaugeRenderer.java | 2 +- .../mixer/MechanicalMixerRenderer.java | 2 +- .../kinetics/saw/SawMovementBehaviour.java | 2 +- .../content/kinetics/saw/SawRenderer.java | 4 +- .../BracketedKineticBlockModel.java | 6 +- .../SpeedControllerRenderer.java | 4 +- .../waterwheel/WaterWheelRenderer.java | 4 +- .../burner/BlazeBurnerMovementBehaviour.java | 2 +- .../burner/BlazeBurnerRenderer.java | 6 +- .../analogLever/AnalogLeverRenderer.java | 4 +- .../cannon/SchematicannonRenderer.java | 4 +- .../schematics/client/SchematicRenderer.java | 110 ++++---- .../trains/schedule/TrainHatArmorLayer.java | 2 +- .../gui/element/GuiGameElement.java | 8 +- .../ponder/element/WorldSectionElement.java | 105 ++++---- .../render/BakedModelRenderHelper.java | 42 --- .../render/BlockEntityRenderHelper.java | 1 + .../foundation/render/CachedBufferer.java | 8 +- .../create/foundation/render/ModelUtil.java | 13 - .../render/MutableTemplateMesh.java | 55 ++++ .../render/ShadeSeparatingVertexConsumer.java | 84 ++++++ .../foundation/render/SuperByteBuffer.java | 255 ++++++------------ .../render/SuperByteBufferCache.java | 2 - .../foundation/render/TemplateMesh.java | 78 ++++++ .../render/VirtualRenderHelper.java | 109 ++++++++ .../utility/ghost/GhostBlockRenderer.java | 8 +- .../VirtualChunk.java | 2 +- .../VirtualChunkSection.java | 2 +- .../VirtualChunkSource.java | 2 +- .../VirtualEmptyBlockGetter.java | 2 +- .../VirtualLevelEntityGetter.java | 2 +- .../VirtualRenderWorld.java | 2 +- 66 files changed, 672 insertions(+), 447 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/ModelUtil.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/MutableTemplateMesh.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/TemplateMesh.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java rename src/main/java/com/simibubi/create/foundation/{render => virtualWorld}/VirtualChunk.java (99%) rename src/main/java/com/simibubi/create/foundation/{render => virtualWorld}/VirtualChunkSection.java (95%) rename src/main/java/com/simibubi/create/foundation/{render => virtualWorld}/VirtualChunkSource.java (96%) rename src/main/java/com/simibubi/create/foundation/{render => virtualWorld}/VirtualEmptyBlockGetter.java (98%) rename src/main/java/com/simibubi/create/foundation/{render => virtualWorld}/VirtualLevelEntityGetter.java (94%) rename src/main/java/com/simibubi/create/foundation/{render => virtualWorld}/VirtualRenderWorld.java (99%) diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java index e902ab4f3c..14074ff1d5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java @@ -5,12 +5,12 @@ import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.elevator.ElevatorContraption; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.IntAttached; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java index 285778eecd..19689a2456 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java @@ -13,13 +13,13 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.redstone.nixieTube.NixieTubeRenderer; import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java index 1de1ec0837..788e45f279 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java @@ -9,10 +9,10 @@ import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java index 01361dddc8..387d4b03d1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java @@ -11,9 +11,9 @@ import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.item.ItemHelper; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java index 4e5f78e87c..a6435539ec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java @@ -10,10 +10,10 @@ import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatch import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -64,7 +64,7 @@ public class HarvesterRenderer extends SafeBlockEntityRenderer ms.popPose(); CachedBufferer.partial(AllPartialModels.ROLLER_FRAME, blockState) - .rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing) + 180)) + .rotateCentered(AngleHelper.rad(AngleHelper.horizontalAngle(facing) + 180), Direction.UP) .light(light) .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); } @@ -82,7 +82,7 @@ public class RollerRenderer extends SmartBlockEntityRenderer CachedBufferer.partial(AllPartialModels.ROLLER_FRAME, blockState) .transform(matrices.getModel()) - .rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing) + 180)) + .rotateCentered(AngleHelper.rad(AngleHelper.horizontalAngle(facing) + 180), Direction.UP) .light(matrices.getWorld(), contraptionWorldLight) .renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped())); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java index 7fa7af9fcd..45f840136a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsMovementBehaviour.java @@ -7,10 +7,10 @@ import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java index 70c489a367..e6dbbdee65 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java @@ -8,9 +8,9 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java index 1c678c797c..83ea08e601 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java @@ -42,9 +42,9 @@ public class BearingRenderer if (facing.getAxis() .isHorizontal()) - superBuffer.rotateCentered(Direction.UP, - AngleHelper.rad(AngleHelper.horizontalAngle(facing.getOpposite()))); - superBuffer.rotateCentered(Direction.EAST, AngleHelper.rad(-90 - AngleHelper.verticalAngle(facing))); + superBuffer.rotateCentered( + AngleHelper.rad(AngleHelper.horizontalAngle(facing.getOpposite())), Direction.UP); + superBuffer.rotateCentered(AngleHelper.rad(-90 - AngleHelper.verticalAngle(facing)), Direction.EAST); superBuffer.renderInto(ms, buffer.getBuffer(RenderType.solid())); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java index 163001c10e..d59c50c125 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java @@ -13,8 +13,8 @@ import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java index 2b94e098f6..4920a7ee3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java @@ -18,8 +18,8 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java index 5d85b2347b..18832dfea6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java @@ -5,7 +5,7 @@ import javax.annotation.Nullable; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.render.ActorInstance; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.foundation.render.VirtualRenderWorld; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java index c9dc08ec01..f07dcc9e79 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java @@ -1,14 +1,11 @@ package com.simibubi.create.content.contraptions.render; -import java.util.Collection; - import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.api.event.BeginFrameEvent; import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent; import com.jozufozu.flywheel.api.event.RenderStageEvent; import com.jozufozu.flywheel.backend.gl.error.GlError; -import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllMovementBehaviours; @@ -18,15 +15,13 @@ import com.simibubi.create.content.contraptions.ContraptionWorld; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.foundation.render.BlockEntityRenderHelper; -import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.WorldAttached; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.LightLayer; @@ -161,17 +156,6 @@ public class ContraptionRenderDispatcher { } } - public static SuperByteBuffer buildStructureBuffer(VirtualRenderWorld renderWorld, Contraption c, - RenderType layer) { -// Collection values = c.getRenderedBlocks(); -// var build = new MultiBlockModelBuilder(values).renderWorld(renderWorld) -// .modelDataMap(c.modelData) -// .build(); -// SuperByteBuffer sbb = new SuperByteBuffer(data); -// build.delete(); - return null; - } - public static int getLight(Level world, float lx, float ly, float lz) { BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); float block = 0, sky = 0; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index e8301b0d66..40c176c8a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -4,8 +4,8 @@ import com.jozufozu.flywheel.api.event.BeginFrameEvent; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.util.Mth; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java index 62846edbdc..cc3163507b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java @@ -8,8 +8,8 @@ import com.jozufozu.flywheel.backend.gl.GlStateTracker; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java index f407d6582d..52132079aa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java @@ -1,19 +1,37 @@ package com.simibubi.create.content.contraptions.render; import com.jozufozu.flywheel.api.event.RenderStageEvent; +import com.jozufozu.flywheel.lib.model.ModelUtil; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; -import com.simibubi.create.foundation.render.VirtualRenderWorld; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.Pair; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.ModelBlockRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraftforge.client.model.data.ModelData; public class SBBContraptionManager extends ContraptionRenderingWorld { public static final SuperByteBufferCache.Compartment> CONTRAPTION = new SuperByteBufferCache.Compartment<>(); + private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); public SBBContraptionManager(LevelAccessor world) { super(world); @@ -47,7 +65,7 @@ public class SBBContraptionManager extends ContraptionRenderingWorld ContraptionRenderDispatcher.buildStructureBuffer(renderInfo.renderWorld, renderInfo.contraption, layer)); + SuperByteBuffer contraptionBuffer = CreateClient.BUFFER_CACHE.get(CONTRAPTION, Pair.of(renderInfo.contraption, layer), () -> buildStructureBuffer(renderInfo.renderWorld, renderInfo.contraption, layer)); if (!contraptionBuffer.isEmpty()) { ContraptionMatrices matrices = renderInfo.getMatrices(); @@ -57,6 +75,53 @@ public class SBBContraptionManager extends ContraptionRenderingWorld ms.translate(-1 / 2f, 10 / 16f, 1f); ms.scale(1, -1, -1); - backtank.forEntityRender() + backtank.disableDiffuse() .light(light) .renderInto(ms, buffer.getBuffer(renderType)); @@ -66,7 +66,7 @@ public class BacktankArmorLayer .rotate(AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360), Direction.EAST) .translate(0, -6.5f / 16, -11f / 16); - cogs.forEntityRender() + cogs.disableDiffuse() .light(light) .renderInto(ms, buffer.getBuffer(renderType)); diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/BellRenderer.java b/src/main/java/com/simibubi/create/content/equipment/bell/BellRenderer.java index 9816e4f4f6..2257497b6c 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/BellRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/BellRenderer.java @@ -29,12 +29,12 @@ public class BellRenderer extends SafeBlockE SuperByteBuffer bell = CachedBufferer.partial(be.getBellModel(), state); if (be.isRinging) - bell.rotateCentered(be.ringDirection.getCounterClockWise(), getSwingAngle(be.ringingTicks + partialTicks)); + bell.rotateCentered(getSwingAngle(be.ringingTicks + partialTicks), be.ringDirection.getCounterClockWise()); float rY = AngleHelper.horizontalAngle(facing); if (attachment == BellAttachType.SINGLE_WALL || attachment == BellAttachType.DOUBLE_WALL) rY += 90; - bell.rotateCentered(Direction.UP, AngleHelper.rad(rY)); + bell.rotateCentered(AngleHelper.rad(rY), Direction.UP); bell.light(light) .renderInto(ms, buffer.getBuffer(RenderType.cutout())); diff --git a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java index 8ed5843ad0..4627a4f4f5 100644 --- a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java @@ -41,7 +41,7 @@ public class BlueprintRenderer extends EntityRenderer { if (entity.size == 2) sbb.translate(.5, 0, -.5); - sbb.forEntityRender() + sbb.disableDiffuse() .light(light) .renderInto(ms, buffer.getBuffer(Sheets.solidBlockSheet())); super.render(entity, yaw, pt, ms, buffer, light); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java index e3cfc07fc9..ee84ec1b77 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java @@ -102,7 +102,7 @@ public class KineticBlockEntityRenderer extends Sa public static SuperByteBuffer kineticRotationTransform(SuperByteBuffer buffer, KineticBlockEntity be, Axis axis, float angle, int light) { buffer.light(light); - buffer.rotateCentered(Direction.get(AxisDirection.POSITIVE, axis), angle); + buffer.rotateCentered(angle, Direction.get(AxisDirection.POSITIVE, axis)); if (KineticDebugger.isActive()) { rainbowMode = true; diff --git a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java index dae5cca89d..57042f3ee2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java @@ -79,7 +79,7 @@ public class CuckooClockRenderer extends KineticBlockEntityRenderer { } protected SuperByteBuffer rotateBufferTowards(SuperByteBuffer buffer, Direction target) { - return buffer.rotateCentered(Direction.UP, (float) ((-target.toYRot() - 90) / 180 * Math.PI)); + return buffer.rotateCentered((float) ((-target.toYRot() - 90) / 180 * Math.PI), Direction.UP); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java index 06ef773618..e15e699c02 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java @@ -51,7 +51,7 @@ public class MechanicalMixerRenderer extends KineticBlockEntityRenderer { SuperByteBuffer superBuffer = CachedBufferer.partialFacing(partial, blockState); if (rotate) { - superBuffer.rotateCentered(Direction.UP, AngleHelper.rad(90)); + superBuffer.rotateCentered(AngleHelper.rad(90), Direction.UP); } superBuffer.color(0xFFFFFF) .light(light) diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java index c0816a6af0..de8c36df0e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockModel.java @@ -5,7 +5,7 @@ import java.util.List; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; -import com.simibubi.create.foundation.render.ModelUtil; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderType; @@ -30,7 +30,7 @@ public class BracketedKineticBlockModel extends BakedModelWrapper { @Override public ModelData getModelData(BlockAndTintGetter world, BlockPos pos, BlockState state, ModelData blockEntityData) { - if (ModelUtil.isVirtual(blockEntityData)) + if (VirtualRenderHelper.isVirtual(blockEntityData)) return blockEntityData; BracketedModelData data = new BracketedModelData(); BracketedBlockEntityBehaviour attachmentBehaviour = @@ -43,7 +43,7 @@ public class BracketedKineticBlockModel extends BakedModelWrapper { @Override public List getQuads(BlockState state, Direction side, RandomSource rand, ModelData data, RenderType renderType) { - if (!ModelUtil.isVirtual(data)) { + if (!VirtualRenderHelper.isVirtual(data)) { if (data.has(BRACKET_PROPERTY)) { BracketedModelData pipeData = data.get(BRACKET_PROPERTY); BakedModel bracket = pipeData.getBracket(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java index 07b5f25fd1..05e1832ab3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java @@ -45,8 +45,8 @@ public class SpeedControllerRenderer extends SmartBlockEntityRenderer extends Kinetic dir = state1.getValue(WaterWheelBlock.FACING); } PoseStack transform = CachedBufferer.rotateToFaceVertical(dir).get(); - return BakedModelRenderHelper.standardModelRender(model, Blocks.AIR.defaultBlockState(), transform); + return VirtualRenderHelper.bufferModel(model, Blocks.AIR.defaultBlockState(), transform); }); } diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java index feda0151d6..ff9bc873f2 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java @@ -7,12 +7,12 @@ import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.content.trains.entity.CarriageContraption; import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java index 204d97f8da..e9b848ee05 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java @@ -14,10 +14,10 @@ import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.VirtualRenderWorld; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; @@ -165,7 +165,7 @@ public class BlazeBurnerRenderer extends SafeBlockEntityRenderer sbb.delete()); bufferCache.clear(); for (RenderType layer : RenderType.chunkBufferLayers()) { SuperByteBuffer buffer = drawLayer(layer); if (!buffer.isEmpty()) bufferCache.put(layer, buffer); - else - buffer.delete(); } } protected SuperByteBuffer drawLayer(RenderType layer) { - // FIXME: use flywheel buffering utilities? -// BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; -// ModelBlockRenderer renderer = dispatcher.getModelRenderer(); -// ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); -// -// PoseStack poseStack = objects.poseStack; -// RandomSource random = objects.random; -// BlockPos.MutableBlockPos mutableBlockPos = objects.mutableBlockPos; -// SchematicWorld renderWorld = schematic; -// renderWorld.renderMode = true; -// BoundingBox bounds = renderWorld.getBounds(); -// -// ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; -// BufferBuilder shadedBuilder = objects.shadedBuilder; -// BufferBuilder unshadedBuilder = objects.unshadedBuilder; -// -// shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); -// unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); -// shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); -// -// ModelBlockRenderer.enableCaching(); -// for (BlockPos localPos : BlockPos.betweenClosed(bounds.minX(), bounds.minY(), bounds.minZ(), bounds.maxX(), bounds.maxY(), bounds.maxZ())) { -// BlockPos pos = mutableBlockPos.setWithOffset(localPos, anchor); -// BlockState state = renderWorld.getBlockState(pos); -// -// if (state.getRenderShape() == RenderShape.MODEL) { -// BakedModel model = dispatcher.getBlockModel(state); -// BlockEntity blockEntity = renderWorld.getBlockEntity(localPos); -// ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; -// modelData = model.getModelData(renderWorld, pos, state, modelData); -// long seed = state.getSeed(pos); -// random.setSeed(seed); -// if (model.getRenderTypes(state, random, modelData).contains(layer)) { -// poseStack.pushPose(); -// poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ()); -// -// renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, -// random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); -// -// poseStack.popPose(); -// } -// } -// } -// ModelBlockRenderer.clearCache(); -// -// shadeSeparatingWrapper.clear(); -// ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder); -// -// renderWorld.renderMode = false; -// -// SuperByteBuffer sbb = new SuperByteBuffer(bufferedData); -// bufferedData.release(); - return null; + BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; + ModelBlockRenderer renderer = dispatcher.getModelRenderer(); + ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); + + PoseStack poseStack = objects.poseStack; + RandomSource random = objects.random; + BlockPos.MutableBlockPos mutableBlockPos = objects.mutableBlockPos; + SchematicWorld renderWorld = schematic; + BoundingBox bounds = renderWorld.getBounds(); + + ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; + BufferBuilder shadedBuilder = objects.shadedBuilder; + BufferBuilder unshadedBuilder = objects.unshadedBuilder; + + shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + + renderWorld.renderMode = true; + ModelBlockRenderer.enableCaching(); + for (BlockPos localPos : BlockPos.betweenClosed(bounds.minX(), bounds.minY(), bounds.minZ(), bounds.maxX(), bounds.maxY(), bounds.maxZ())) { + BlockPos pos = mutableBlockPos.setWithOffset(localPos, anchor); + BlockState state = renderWorld.getBlockState(pos); + + if (state.getRenderShape() == RenderShape.MODEL) { + BakedModel model = dispatcher.getBlockModel(state); + BlockEntity blockEntity = renderWorld.getBlockEntity(localPos); + ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; + modelData = model.getModelData(renderWorld, pos, state, modelData); + long seed = state.getSeed(pos); + random.setSeed(seed); + if (model.getRenderTypes(state, random, modelData).contains(layer)) { + poseStack.pushPose(); + poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ()); + + renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, + random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); + + poseStack.popPose(); + } + } + } + ModelBlockRenderer.clearCache(); + renderWorld.renderMode = false; + + shadeSeparatingWrapper.clear(); + return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); } private static int getLayerCount() { @@ -153,7 +147,7 @@ public class SchematicRenderer { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); public final BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); -// public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); + public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); public final BufferBuilder shadedBuilder = new BufferBuilder(512); public final BufferBuilder unshadedBuilder = new BufferBuilder(512); } diff --git a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java index b21950999e..43f00452f9 100644 --- a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java @@ -125,7 +125,7 @@ public class TrainHatArmorLayer msr.rotateX(-8.5f); BlockState air = Blocks.AIR.defaultBlockState(); CachedBufferer.partial(AllPartialModels.TRAIN_HAT, air) - .forEntityRender() + .disableDiffuse() .light(light) .renderInto(ms, buffer.getBuffer(renderType)); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java index c4f4e9435c..5973052ecc 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java @@ -13,7 +13,7 @@ import com.mojang.math.Axis; import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.gui.ILightingSettings; import com.simibubi.create.foundation.gui.UIRenderHelper; -import com.simibubi.create.foundation.render.ModelUtil; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.VecHelper; @@ -188,19 +188,19 @@ public class GuiGameElement { RenderType renderType = Sheets.translucentCullBlockSheet(); blockRenderer.getModelRenderer() .renderModel(ms.last(), buffer.getBuffer(renderType), blockState, blockModel, 1, 1, 1, - LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, ModelUtil.VIRTUAL_DATA, null); + LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, VirtualRenderHelper.VIRTUAL_DATA, null); } else { int color = Minecraft.getInstance() .getBlockColors() .getColor(blockState, null, null, 0); Color rgb = new Color(color == -1 ? this.color : color); - for (RenderType chunkType : blockModel.getRenderTypes(blockState, RandomSource.create(42L), ModelUtil.VIRTUAL_DATA)) { + for (RenderType chunkType : blockModel.getRenderTypes(blockState, RandomSource.create(42L), VirtualRenderHelper.VIRTUAL_DATA)) { RenderType renderType = RenderTypeHelper.getEntityRenderType(chunkType, true); blockRenderer.getModelRenderer() .renderModel(ms.last(), buffer.getBuffer(renderType), blockState, blockModel, rgb.getRedAsFloat(), rgb.getGreenAsFloat(), rgb.getBlueAsFloat(), - LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, ModelUtil.VIRTUAL_DATA, chunkType); + LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, VirtualRenderHelper.VIRTUAL_DATA, chunkType); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index e289df0d83..5d33116efc 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.function.Consumer; +import com.jozufozu.flywheel.lib.model.ModelUtil; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; @@ -19,9 +20,11 @@ import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.ponder.Selection; import com.simibubi.create.foundation.render.BlockEntityRenderHelper; +import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; @@ -341,8 +344,8 @@ public class WorldSectionElement extends AnimatedSceneElement { ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); -// ModelUtil.VANILLA_RENDERER -// .renderBreakingTexture(world.getBlockState(pos), pos, world, ms, builder, ModelData.EMPTY); + ModelUtil.VANILLA_RENDERER + .renderBreakingTexture(world.getBlockState(pos), pos, world, ms, builder, ModelData.EMPTY); ms.popPose(); } @@ -405,62 +408,58 @@ public class WorldSectionElement extends AnimatedSceneElement { } private SuperByteBuffer buildStructureBuffer(PonderWorld world, RenderType layer) { -// BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; -// ModelBlockRenderer renderer = dispatcher.getModelRenderer(); -// ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); -// -// PoseStack poseStack = objects.poseStack; -// RandomSource random = objects.random; -// ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; -// BufferBuilder shadedBuilder = objects.shadedBuilder; -// BufferBuilder unshadedBuilder = objects.unshadedBuilder; -// -// shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); -// unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); -// shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); -// -// world.setMask(this.section); -// ModelBlockRenderer.enableCaching(); -// section.forEach(pos -> { -// BlockState state = world.getBlockState(pos); -// FluidState fluidState = world.getFluidState(pos); -// -// poseStack.pushPose(); -// poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); -// -// if (state.getRenderShape() == RenderShape.MODEL) { -// BakedModel model = dispatcher.getBlockModel(state); -// BlockEntity blockEntity = world.getBlockEntity(pos); -// ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; -// modelData = model.getModelData(world, pos, state, modelData); -// long seed = state.getSeed(pos); -// random.setSeed(seed); -// if (model.getRenderTypes(state, random, modelData).contains(layer)) { -// renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true, -// random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); -// } -// } -// -// if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) -// dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState); -// -// poseStack.popPose(); -// }); -// ModelBlockRenderer.clearCache(); -// world.clearMask(); -// -// shadeSeparatingWrapper.clear(); -// ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder); -// -// SuperByteBuffer sbb = new SuperByteBuffer(bufferedData); -// bufferedData.release(); - return null; + BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; + ModelBlockRenderer renderer = dispatcher.getModelRenderer(); + ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); + + PoseStack poseStack = objects.poseStack; + RandomSource random = objects.random; + ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; + BufferBuilder shadedBuilder = objects.shadedBuilder; + BufferBuilder unshadedBuilder = objects.unshadedBuilder; + + shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + + world.setMask(this.section); + ModelBlockRenderer.enableCaching(); + section.forEach(pos -> { + BlockState state = world.getBlockState(pos); + FluidState fluidState = world.getFluidState(pos); + + poseStack.pushPose(); + poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); + + if (state.getRenderShape() == RenderShape.MODEL) { + BakedModel model = dispatcher.getBlockModel(state); + BlockEntity blockEntity = world.getBlockEntity(pos); + ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; + modelData = model.getModelData(world, pos, state, modelData); + long seed = state.getSeed(pos); + random.setSeed(seed); + if (model.getRenderTypes(state, random, modelData).contains(layer)) { + renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true, + random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); + } + } + + if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) + dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState); + + poseStack.popPose(); + }); + ModelBlockRenderer.clearCache(); + world.clearMask(); + + shadeSeparatingWrapper.clear(); + return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); } private static class ThreadLocalObjects { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); - //public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); + public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); public final BufferBuilder shadedBuilder = new BufferBuilder(512); public final BufferBuilder unshadedBuilder = new BufferBuilder(512); } diff --git a/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java deleted file mode 100644 index 007aa18c44..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/BakedModelRenderHelper.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.simibubi.create.foundation.render; - -import com.jozufozu.flywheel.api.model.Mesh; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; -import com.jozufozu.flywheel.lib.model.baked.TessellatedModel; -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.block.BlockRenderDispatcher; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.world.level.block.state.BlockState; - -public class BakedModelRenderHelper { - - public static SuperByteBuffer standardBlockRender(BlockState renderedState) { - BlockRenderDispatcher dispatcher = Minecraft.getInstance() - .getBlockRenderer(); - return standardModelRender(dispatcher.getBlockModel(renderedState), renderedState); - } - - public static SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState) { - return standardModelRender(model, referenceState, new PoseStack()); - } - - public static SuperByteBuffer standardModelRender(BakedModel bakedModel, BlockState referenceState, PoseStack ms) { - var model = new BakedModelBuilder(bakedModel).blockState(referenceState) - .poseStack(ms) - .disableShadeSeparation() - .build(); - - SuperByteBuffer out = null; - for (Mesh value : model.meshes() - .values()) { - out = new SuperByteBuffer(value); - break; - } - model.delete(); - return out; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 7747286e97..6bc3cec939 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -12,6 +12,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.RegisteredObjects; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java index 1170e8acf5..80975e804a 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java @@ -27,18 +27,18 @@ public class CachedBufferer { } public static SuperByteBuffer block(Compartment compartment, BlockState toRender) { - return CreateClient.BUFFER_CACHE.get(compartment, toRender, () -> BakedModelRenderHelper.standardBlockRender(toRender)); + return CreateClient.BUFFER_CACHE.get(compartment, toRender, () -> VirtualRenderHelper.bufferBlock(toRender)); } public static SuperByteBuffer partial(PartialModel partial, BlockState referenceState) { return CreateClient.BUFFER_CACHE.get(PARTIAL, partial, - () -> BakedModelRenderHelper.standardModelRender(partial.get(), referenceState)); + () -> VirtualRenderHelper.bufferModel(partial.get(), referenceState)); } public static SuperByteBuffer partial(PartialModel partial, BlockState referenceState, Supplier modelTransform) { return CreateClient.BUFFER_CACHE.get(PARTIAL, partial, - () -> BakedModelRenderHelper.standardModelRender(partial.get(), referenceState, modelTransform.get())); + () -> VirtualRenderHelper.bufferModel(partial.get(), referenceState, modelTransform.get())); } public static SuperByteBuffer partialFacing(PartialModel partial, BlockState referenceState) { @@ -59,7 +59,7 @@ public class CachedBufferer { public static SuperByteBuffer partialDirectional(PartialModel partial, BlockState referenceState, Direction dir, Supplier modelTransform) { return CreateClient.BUFFER_CACHE.get(DIRECTIONAL_PARTIAL, Pair.of(dir, partial), - () -> BakedModelRenderHelper.standardModelRender(partial.get(), referenceState, modelTransform.get())); + () -> VirtualRenderHelper.bufferModel(partial.get(), referenceState, modelTransform.get())); } public static Supplier rotateToFace(Direction facing) { diff --git a/src/main/java/com/simibubi/create/foundation/render/ModelUtil.java b/src/main/java/com/simibubi/create/foundation/render/ModelUtil.java deleted file mode 100644 index b54c7324ed..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/ModelUtil.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.simibubi.create.foundation.render; - -import net.minecraftforge.client.model.data.ModelData; -import net.minecraftforge.client.model.data.ModelProperty; - -public class ModelUtil { - public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); - public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); - - public static boolean isVirtual(ModelData data) { - return data.has(ModelUtil.VIRTUAL_PROPERTY) && Boolean.TRUE.equals(data.get(ModelUtil.VIRTUAL_PROPERTY)); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/MutableTemplateMesh.java b/src/main/java/com/simibubi/create/foundation/render/MutableTemplateMesh.java new file mode 100644 index 0000000000..4e13377b6d --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/MutableTemplateMesh.java @@ -0,0 +1,55 @@ +package com.simibubi.create.foundation.render; + +public class MutableTemplateMesh extends TemplateMesh { + public MutableTemplateMesh(int[] data) { + super(data); + } + + public MutableTemplateMesh(int vertexCount) { + super(vertexCount); + } + + public void copyFrom(int index, TemplateMesh template) { + System.arraycopy(template.data, 0, data, index * INT_STRIDE, template.data.length); + } + + public void x(int index, float x) { + data[index * INT_STRIDE + X_OFFSET] = Float.floatToRawIntBits(x); + } + + public void y(int index, float y) { + data[index * INT_STRIDE + Y_OFFSET] = Float.floatToRawIntBits(y); + } + + public void z(int index, float z) { + data[index * INT_STRIDE + Z_OFFSET] = Float.floatToRawIntBits(z); + } + + public void color(int index, int color) { + data[index * INT_STRIDE + COLOR_OFFSET] = color; + } + + public void u(int index, float u) { + data[index * INT_STRIDE + U_OFFSET] = Float.floatToRawIntBits(u); + } + + public void v(int index, float v) { + data[index * INT_STRIDE + V_OFFSET] = Float.floatToRawIntBits(v); + } + + public void overlay(int index, int overlay) { + data[index * INT_STRIDE + OVERLAY_OFFSET] = overlay; + } + + public void light(int index, int light) { + data[index * INT_STRIDE + LIGHT_OFFSET] = light; + } + + public void normal(int index, int normal) { + data[index * INT_STRIDE + NORMAL_OFFSET] = normal; + } + + public TemplateMesh toImmutable() { + return new TemplateMesh(data); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java b/src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java new file mode 100644 index 0000000000..fd537ba126 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java @@ -0,0 +1,84 @@ +package com.simibubi.create.foundation.render; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; + +import net.minecraft.client.renderer.block.model.BakedQuad; + +public class ShadeSeparatingVertexConsumer implements VertexConsumer { + protected VertexConsumer shadedConsumer; + protected VertexConsumer unshadedConsumer; + + public void prepare(VertexConsumer shadedConsumer, VertexConsumer unshadedConsumer) { + this.shadedConsumer = shadedConsumer; + this.unshadedConsumer = unshadedConsumer; + } + + public void clear() { + shadedConsumer = null; + unshadedConsumer = null; + } + + @Override + public void putBulkData(PoseStack.Pose poseEntry, BakedQuad quad, float[] colorMuls, float red, float green, float blue, int[] combinedLights, int combinedOverlay, boolean mulColor) { + if (quad.isShade()) { + shadedConsumer.putBulkData(poseEntry, quad, colorMuls, red, green, blue, combinedLights, combinedOverlay, mulColor); + } else { + unshadedConsumer.putBulkData(poseEntry, quad, colorMuls, red, green, blue, combinedLights, combinedOverlay, mulColor); + } + } + + @Override + public void putBulkData(PoseStack.Pose matrixEntry, BakedQuad bakedQuad, float[] baseBrightness, float red, float green, float blue, float alpha, int[] lightmapCoords, int overlayCoords, boolean readExistingColor) { + if (bakedQuad.isShade()) { + shadedConsumer.putBulkData(matrixEntry, bakedQuad, baseBrightness, red, green, blue, alpha, lightmapCoords, overlayCoords, readExistingColor); + } else { + unshadedConsumer.putBulkData(matrixEntry, bakedQuad, baseBrightness, red, green, blue, alpha, lightmapCoords, overlayCoords, readExistingColor); + } + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public VertexConsumer uv(float u, float v) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public VertexConsumer uv2(int u, int v) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public void endVertex() { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } + + @Override + public void unsetDefaultColor() { + throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index 94afa44656..f1487a4a79 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -1,25 +1,15 @@ package com.simibubi.create.foundation.render; - -import java.nio.ByteBuffer; -import java.util.function.IntPredicate; - import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Quaternionf; import org.joml.Vector3f; import org.joml.Vector4f; -import com.jozufozu.flywheel.api.model.Mesh; -import com.jozufozu.flywheel.api.vertex.VertexList; import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; -import com.jozufozu.flywheel.lib.math.RenderMath; -import com.jozufozu.flywheel.lib.memory.MemoryBlock; -import com.jozufozu.flywheel.lib.transform.Transform; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.util.ShadersModHandler; -import com.jozufozu.flywheel.lib.vertex.FullVertexView; -import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; @@ -32,22 +22,18 @@ import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.Mth; import net.minecraft.world.level.Level; public class SuperByteBuffer implements TransformStack { + private final TemplateMesh template; + private final int unshadedStartVertex; - private final MemoryBlock backingStore; - private final VertexList template; - private final IntPredicate shadedPredicate; - - // Vertex Position + // Vertex Position and Normals private final PoseStack transforms = new PoseStack(); // Vertex Coloring private boolean shouldColor; - private int r, g, b, a; + private float r, g, b, a; private boolean disableDiffuseMult; private DiffuseLightCalculator diffuseCalculator; @@ -55,7 +41,6 @@ public class SuperByteBuffer implements TransformStack { private SpriteShiftFunc spriteShiftFunc; // Vertex Overlay Color - private boolean hasOverlay; private int overlay = OverlayTexture.NO_OVERLAY; // Vertex Lighting @@ -65,23 +50,12 @@ public class SuperByteBuffer implements TransformStack { private int packedLightCoords; private boolean hybridLight; - // Vertex Normals - private boolean fullNormalTransform; - // Temporary private static final Long2IntMap WORLD_LIGHT_CACHE = new Long2IntOpenHashMap(); - public SuperByteBuffer(Mesh mesh) { - var template = new FullVertexView(); - - backingStore = MemoryBlock.malloc(mesh.vertexCount() * FullVertexView.STRIDE); - template.ptr(backingStore.ptr()); - template.vertexCount(mesh.vertexCount()); - - mesh.write(template); - + public SuperByteBuffer(TemplateMesh template, int unshadedStartVertex) { this.template = template; - shadedPredicate = index -> true; + this.unshadedStartVertex = unshadedStartVertex; transforms.pushPose(); } @@ -96,24 +70,30 @@ public class SuperByteBuffer implements TransformStack { .pose(); modelMat.mul(localTransforms); - Matrix3f normalMat; - if (fullNormalTransform) { - normalMat = new Matrix3f(input.last() - .normal()); - Matrix3f localNormalTransforms = transforms.last() - .normal(); - normalMat.mul(localNormalTransforms); - } else { - normalMat = new Matrix3f(transforms.last() - .normal()); - } + Matrix3f normalMat = new Matrix3f(input.last() + .normal()); + Matrix3f localNormalTransforms = transforms.last() + .normal(); + normalMat.mul(localNormalTransforms); if (useWorldLight) { WORLD_LIGHT_CACHE.clear(); } + class ShiftOutput implements SpriteShiftFunc.Output { + public float u; + public float v; + + @Override + public void accept(float u, float v) { + this.u = u; + this.v = v; + } + }; + final Vector4f pos = new Vector4f(); final Vector3f normal = new Vector3f(); + final ShiftOutput shiftOutput = new ShiftOutput(); final Vector4f lightPos = new Vector4f(); DiffuseLightCalculator diffuseCalculator = ForcedDiffuseState.getForcedCalculator(); @@ -130,54 +110,48 @@ public class SuperByteBuffer implements TransformStack { for (int i = 0; i < vertexCount; i++) { float x = template.x(i); float y = template.y(i); - float z = template.y(i); - - pos.set(x, y, z, 1F); + float z = template.z(i); + pos.set(x, y, z, 1.0f); pos.mul(modelMat); - builder.vertex(pos.x(), pos.y(), pos.z()); - - float normalX = template.normalX(i); - float normalY = template.normalY(i); - float normalZ = template.normalZ(i); + int packedNormal = template.normal(i); + float normalX = ((byte) (packedNormal & 0xFF)) / 127.0f; + float normalY = ((byte) ((packedNormal >>> 8) & 0xFF)) / 127.0f; + float normalZ = ((byte) ((packedNormal >>> 16) & 0xFF)) / 127.0f; normal.set(normalX, normalY, normalZ); normal.mul(normalMat); - float nx = normal.x(); - float ny = normal.y(); - float nz = normal.z(); + normalX = normal.x(); + normalY = normal.y(); + normalZ = normal.z(); - byte r, g, b, a; + float r, g, b, a; if (shouldColor) { - r = (byte) this.r; - g = (byte) this.g; - b = (byte) this.b; - a = (byte) this.a; + r = this.r; + g = this.g; + b = this.b; + a = this.a; } else { - r = RenderMath.unb(template.r(i)); - g = RenderMath.unb(template.g(i)); - b = RenderMath.unb(template.b(i)); - a = RenderMath.unb(template.a(i)); + int color = template.color(i); + r = (color & 0xFF) / 255.0f; + g = ((color >>> 8) & 0xFF) / 255.0f; + b = ((color >>> 16) & 0xFF) / 255.0f; + a = ((color >>> 24) & 0xFF) / 255.0f; } - if (disableDiffuseMult) { - builder.color(r, g, b, a); - } else { - float instanceDiffuse = diffuseCalculator.getDiffuse(nx, ny, nz, shadedPredicate.test(i)); - int colorR = transformColor(r, instanceDiffuse); - int colorG = transformColor(g, instanceDiffuse); - int colorB = transformColor(b, instanceDiffuse); - builder.color(colorR, colorG, colorB, a); + if (!disableDiffuseMult) { + // Transformed normal is in camera space, but it is needed in world space to calculate diffuse. + normal.mul(RenderSystem.getInverseViewRotationMatrix()); + float diffuse = diffuseCalculator.getDiffuse(normal.x(), normal.y(), normal.z(), i < unshadedStartVertex); + r *= diffuse; + g *= diffuse; + b *= diffuse; } float u = template.u(i); float v = template.v(i); if (spriteShiftFunc != null) { - spriteShiftFunc.shift(builder, u, v); - } else { - builder.uv(u, v); - } - - if (hasOverlay) { - builder.overlayCoords(overlay); + spriteShiftFunc.shift(u, v, shiftOutput); + u = shiftOutput.u; + v = shiftOutput.v; } int light; @@ -197,16 +171,11 @@ public class SuperByteBuffer implements TransformStack { } else { light = template.light(i); } - if (hybridLight) { - builder.uv2(maxLight(light, template.light(i))); - } else { - builder.uv2(light); + light = maxLight(light, template.light(i)); } - builder.normal(nx, ny, nz); - - builder.endVertex(); + builder.vertex(pos.x(), pos.y(), pos.z(), r, g, b, a, u, v, overlay, light, normalX, normalY, normalZ); } reset(); @@ -225,14 +194,12 @@ public class SuperByteBuffer implements TransformStack { disableDiffuseMult = false; diffuseCalculator = null; spriteShiftFunc = null; - hasOverlay = false; overlay = OverlayTexture.NO_OVERLAY; useWorldLight = false; lightTransform = null; hasCustomLight = false; packedLightCoords = 0; hybridLight = false; - fullNormalTransform = false; return this; } @@ -240,17 +207,13 @@ public class SuperByteBuffer implements TransformStack { return template.isEmpty(); } - public void delete() { - backingStore.free(); - } - public PoseStack getTransforms() { return transforms; } @Override - public SuperByteBuffer translate(double x, double y, double z) { - transforms.translate(x, y, z); + public SuperByteBuffer scale(float factorX, float factorY, float factorZ) { + transforms.scale(factorX, factorY, factorZ); return this; } @@ -261,20 +224,8 @@ public class SuperByteBuffer implements TransformStack { } @Override - public SuperByteBuffer scale(float factorX, float factorY, float factorZ) { - transforms.scale(factorX, factorY, factorZ); - return this; - } - - @Override - public SuperByteBuffer pushPose() { - transforms.pushPose(); - return this; - } - - @Override - public SuperByteBuffer popPose() { - transforms.popPose(); + public SuperByteBuffer translate(double x, double y, double z) { + transforms.translate(x, y, z); return this; } @@ -294,31 +245,19 @@ public class SuperByteBuffer implements TransformStack { return this; } - public SuperByteBuffer transform(PoseStack stack) { - transforms.last() - .pose() - .mul(stack.last() - .pose()); - transforms.last() - .normal() - .mul(stack.last() - .normal()); + @Override + public SuperByteBuffer pushPose() { + transforms.pushPose(); return this; } - public SuperByteBuffer rotateCentered(Direction axis, float radians) { - translate(.5f, .5f, .5f).rotate(radians, axis) - .translate(-.5f, -.5f, -.5f); + @Override + public SuperByteBuffer popPose() { + transforms.popPose(); return this; } - public SuperByteBuffer rotateCentered(Quaternionf q) { - translate(.5f, .5f, .5f).rotate(q) - .translate(-.5f, -.5f, -.5f); - return this; - } - - public SuperByteBuffer color(int r, int g, int b, int a) { + public SuperByteBuffer color(float r, float g, float b, float a) { shouldColor = true; this.r = r; this.g = g; @@ -327,12 +266,13 @@ public class SuperByteBuffer implements TransformStack { return this; } + public SuperByteBuffer color(int r, int g, int b, int a) { + color(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f); + return this; + } + public SuperByteBuffer color(int color) { - shouldColor = true; - r = ((color >> 16) & 0xFF); - g = ((color >> 8) & 0xFF); - b = (color & 0xFF); - a = 255; + color((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, 255); return this; } @@ -356,18 +296,18 @@ public class SuperByteBuffer implements TransformStack { } public SuperByteBuffer shiftUV(SpriteShiftEntry entry) { - this.spriteShiftFunc = (builder, u, v) -> { - builder.uv(entry.getTargetU(u), entry.getTargetV(v)); + spriteShiftFunc = (u, v, output) -> { + output.accept(entry.getTargetU(u), entry.getTargetV(v)); }; return this; } public SuperByteBuffer shiftUVScrolling(SpriteShiftEntry entry, float scrollV) { - return this.shiftUVScrolling(entry, 0, scrollV); + return shiftUVScrolling(entry, 0, scrollV); } public SuperByteBuffer shiftUVScrolling(SpriteShiftEntry entry, float scrollU, float scrollV) { - this.spriteShiftFunc = (builder, u, v) -> { + spriteShiftFunc = (u, v, output) -> { float targetU = u - entry.getOriginal() .getU0() + entry.getTarget() .getU0() @@ -376,29 +316,23 @@ public class SuperByteBuffer implements TransformStack { .getV0() + entry.getTarget() .getV0() + scrollV; - builder.uv(targetU, targetV); + output.accept(targetU, targetV); }; return this; } public SuperByteBuffer shiftUVtoSheet(SpriteShiftEntry entry, float uTarget, float vTarget, int sheetSize) { - this.spriteShiftFunc = (builder, u, v) -> { + spriteShiftFunc = (u, v, output) -> { float targetU = entry.getTarget() .getU((SpriteShiftEntry.getUnInterpolatedU(entry.getOriginal(), u) / sheetSize) + uTarget * 16); float targetV = entry.getTarget() .getV((SpriteShiftEntry.getUnInterpolatedV(entry.getOriginal(), v) / sheetSize) + vTarget * 16); - builder.uv(targetU, targetV); + output.accept(targetU, targetV); }; return this; } - public SuperByteBuffer overlay() { - hasOverlay = true; - return this; - } - public SuperByteBuffer overlay(int overlay) { - hasOverlay = true; this.overlay = overlay; return this; } @@ -436,30 +370,6 @@ public class SuperByteBuffer implements TransformStack { return this; } - /** - * Transforms normals not only by the local matrix stack, but also by the passed - * matrix stack. - */ - public SuperByteBuffer fullNormalTransform() { - fullNormalTransform = true; - return this; - } - - public SuperByteBuffer forEntityRender() { - disableDiffuse(); - overlay(); - fullNormalTransform(); - return this; - } - - public static int transformColor(byte component, float scale) { - return Mth.clamp((int) (Byte.toUnsignedInt(component) * scale), 0, 255); - } - - public static int transformColor(int component, float scale) { - return Mth.clamp((int) (component * scale), 0, 255); - } - public static int maxLight(int packedLight1, int packedLight2) { int blockLight1 = LightTexture.block(packedLight1); int skyLight1 = LightTexture.sky(packedLight1); @@ -475,12 +385,15 @@ public class SuperByteBuffer implements TransformStack { @FunctionalInterface public interface SpriteShiftFunc { - void shift(VertexConsumer builder, float u, float v); + void shift(float u, float v, Output output); + + interface Output { + void accept(float u, float v); + } } @FunctionalInterface public interface VertexLighter { int getPackedLight(float x, float y, float z); } - } diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java index c66b7b5e5c..f11ea9b945 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java @@ -15,14 +15,12 @@ public class SuperByteBufferCache { public synchronized void registerCompartment(Compartment compartment) { caches.put(compartment, CacheBuilder.newBuilder() - .removalListener(n -> n.getValue().delete()) .build()); } public synchronized void registerCompartment(Compartment compartment, long ticksUntilExpired) { caches.put(compartment, CacheBuilder.newBuilder() .expireAfterAccess(ticksUntilExpired * 50, TimeUnit.MILLISECONDS) - .removalListener(n -> n.getValue().delete()) .build()); } diff --git a/src/main/java/com/simibubi/create/foundation/render/TemplateMesh.java b/src/main/java/com/simibubi/create/foundation/render/TemplateMesh.java new file mode 100644 index 0000000000..190682a449 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/TemplateMesh.java @@ -0,0 +1,78 @@ +package com.simibubi.create.foundation.render; + +public class TemplateMesh { + public static final int INT_STRIDE = 9; + public static final int BYTE_STRIDE = INT_STRIDE * Integer.BYTES; + + public static final int X_OFFSET = 0; + public static final int Y_OFFSET = 1; + public static final int Z_OFFSET = 2; + public static final int COLOR_OFFSET = 3; + public static final int U_OFFSET = 4; + public static final int V_OFFSET = 5; + public static final int OVERLAY_OFFSET = 6; + public static final int LIGHT_OFFSET = 7; + public static final int NORMAL_OFFSET = 8; + + protected final int[] data; + protected final int vertexCount; + + public TemplateMesh(int[] data) { + if (data.length % INT_STRIDE != 0) { + throw new IllegalArgumentException("Received invalid vertex data"); + } + + this.data = data; + vertexCount = data.length / INT_STRIDE; + } + + public TemplateMesh(int vertexCount) { + data = new int[vertexCount * INT_STRIDE]; + this.vertexCount = vertexCount; + } + + public float x(int index) { + return Float.intBitsToFloat(data[index * INT_STRIDE + X_OFFSET]); + } + + public float y(int index) { + return Float.intBitsToFloat(data[index * INT_STRIDE + Y_OFFSET]); + } + + public float z(int index) { + return Float.intBitsToFloat(data[index * INT_STRIDE + Z_OFFSET]); + } + + // 0xAABBGGRR + public int color(int index) { + return data[index * INT_STRIDE + COLOR_OFFSET]; + } + + public float u(int index) { + return Float.intBitsToFloat(data[index * INT_STRIDE + U_OFFSET]); + } + + public float v(int index) { + return Float.intBitsToFloat(data[index * INT_STRIDE + V_OFFSET]); + } + + public int overlay(int index) { + return data[index * INT_STRIDE + OVERLAY_OFFSET]; + } + + public int light(int index) { + return data[index * INT_STRIDE + LIGHT_OFFSET]; + } + + public int normal(int index) { + return data[index * INT_STRIDE + NORMAL_OFFSET]; + } + + public int vertexCount() { + return vertexCount; + } + + public boolean isEmpty() { + return vertexCount == 0; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java new file mode 100644 index 0000000000..b504cae4d8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -0,0 +1,109 @@ +package com.simibubi.create.foundation.render; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.mutable.MutableInt; +import org.jetbrains.annotations.Nullable; + +import com.jozufozu.flywheel.lib.model.ModelUtil; +import com.jozufozu.flywheel.lib.model.baked.BakedModelBufferer; +import com.jozufozu.flywheel.lib.model.baked.BakedModelBufferer.ShadeSeparatedResultConsumer; +import com.jozufozu.flywheel.lib.model.baked.VirtualEmptyBlockGetter; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer; +import com.mojang.blaze3d.vertex.PoseStack; + +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelProperty; + +public class VirtualRenderHelper { + public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); + public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); + + public static boolean isVirtual(ModelData data) { + return data.has(VirtualRenderHelper.VIRTUAL_PROPERTY) && data.get(VirtualRenderHelper.VIRTUAL_PROPERTY); + } + + public static SuperByteBuffer bufferBlock(BlockState state) { + return bufferModel(ModelUtil.VANILLA_RENDERER.getBlockModel(state), state); + } + + public static SuperByteBuffer bufferModel(BakedModel model, BlockState state) { + return bufferModel(model, state, null); + } + + public static SuperByteBuffer bufferModel(BakedModel model, BlockState state, @Nullable PoseStack poseStack) { + List shadedMeshes = new ArrayList<>(); + List unshadedMeshes = new ArrayList<>(); + MutableInt totalVertexCount = new MutableInt(0); + + ShadeSeparatedResultConsumer resultConsumer = (renderType, shaded, data) -> { + ByteBuffer vertexBuffer = data.vertexBuffer(); + int vertexCount = data.drawState().vertexCount(); + int stride = data.drawState().format().getVertexSize(); + MutableTemplateMesh mutableMesh = new MutableTemplateMesh(vertexCount); + + transferBlockVertexData(vertexBuffer, vertexCount, stride, mutableMesh, 0); + + if (shaded) { + shadedMeshes.add(mutableMesh); + } else { + unshadedMeshes.add(mutableMesh); + } + totalVertexCount.add(vertexCount); + }; + BakedModelBufferer.bufferSingleShadeSeparated(ModelUtil.VANILLA_RENDERER.getModelRenderer(), VirtualEmptyBlockGetter.INSTANCE, model, state, poseStack, ModelData.EMPTY, resultConsumer); + + MutableTemplateMesh mutableMesh = new MutableTemplateMesh(totalVertexCount.getValue()); + + int copyIndex = 0; + for (MutableTemplateMesh template : shadedMeshes) { + mutableMesh.copyFrom(copyIndex, template); + copyIndex += template.vertexCount(); + } + int unshadedStartVertex = copyIndex; + for (MutableTemplateMesh template : unshadedMeshes) { + mutableMesh.copyFrom(copyIndex, template); + copyIndex += template.vertexCount(); + } + + return new SuperByteBuffer(mutableMesh.toImmutable(), unshadedStartVertex); + } + + public static void transferBlockVertexData(ByteBuffer vertexBuffer, int vertexCount, int stride, MutableTemplateMesh mutableMesh, int dstIndex) { + for (int i = 0; i < vertexCount; i++) { + mutableMesh.x(i, vertexBuffer.getFloat(i * stride)); + mutableMesh.y(i, vertexBuffer.getFloat(i * stride + 4)); + mutableMesh.z(i, vertexBuffer.getFloat(i * stride + 8)); + mutableMesh.color(i, vertexBuffer.getInt(i * stride + 12)); + mutableMesh.u(i, vertexBuffer.getFloat(i * stride + 16)); + mutableMesh.v(i, vertexBuffer.getFloat(i * stride + 20)); + mutableMesh.overlay(i, OverlayTexture.NO_OVERLAY); + mutableMesh.light(i, vertexBuffer.getInt(i * stride + 24)); + mutableMesh.normal(i, vertexBuffer.getInt(i * stride + 28)); + } + } + + public static SuperByteBuffer endAndCombine(BufferBuilder shadedBuilder, BufferBuilder unshadedBuilder) { + RenderedBuffer shadedData = shadedBuilder.end(); + int totalVertexCount = shadedData.drawState().vertexCount(); + int unshadedStartVertex = totalVertexCount; + RenderedBuffer unshadedData = unshadedBuilder.endOrDiscardIfEmpty(); + if (unshadedData != null) { + if (shadedData.drawState().format() != unshadedData.drawState().format()) { + throw new IllegalStateException("Buffer formats are not equal!"); + } + totalVertexCount += unshadedData.drawState().vertexCount(); + } + + MutableTemplateMesh mutableMesh = new MutableTemplateMesh(totalVertexCount); + transferBlockVertexData(shadedData.vertexBuffer(), shadedData.drawState().vertexCount(), shadedData.drawState().format().getVertexSize(), mutableMesh, 0); + transferBlockVertexData(unshadedData.vertexBuffer(), unshadedData.drawState().vertexCount(), unshadedData.drawState().format().getVertexSize(), mutableMesh, unshadedStartVertex); + return new SuperByteBuffer(mutableMesh.toImmutable(), unshadedStartVertex); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java index c8e1670936..778fdc846f 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.placement.PlacementHelpers; -import com.simibubi.create.foundation.render.ModelUtil; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import net.minecraft.client.Minecraft; @@ -60,10 +60,10 @@ public abstract class GhostBlockRenderer { ms.pushPose(); ms.translate(pos.getX() - camera.x, pos.getY() - camera.y, pos.getZ() - camera.z); - for (RenderType layer : model.getRenderTypes(state, RandomSource.create(42L), ModelUtil.VIRTUAL_DATA)) { + for (RenderType layer : model.getRenderTypes(state, RandomSource.create(42L), VirtualRenderHelper.VIRTUAL_DATA)) { VertexConsumer vb = buffer.getEarlyBuffer(layer); renderer.renderModel(ms.last(), vb, state, model, 1f, 1f, 1f, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, - ModelUtil.VIRTUAL_DATA, layer); + VirtualRenderHelper.VIRTUAL_DATA, layer); } ms.popPose(); @@ -95,7 +95,7 @@ public abstract class GhostBlockRenderer { renderModel(ms.last(), vb, state, model, 1f, 1f, 1f, alpha, LevelRenderer.getLightColor(mc.level, pos), OverlayTexture.NO_OVERLAY, - ModelUtil.VIRTUAL_DATA, layer); + VirtualRenderHelper.VIRTUAL_DATA, layer); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualChunk.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunk.java similarity index 99% rename from src/main/java/com/simibubi/create/foundation/render/VirtualChunk.java rename to src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunk.java index cdb1e1e4ea..0dbee6357c 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualChunk.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunk.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.render; +package com.simibubi.create.foundation.virtualWorld; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunkSection.java similarity index 95% rename from src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java rename to src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunkSection.java index c7dab9f89d..f47c31a776 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSection.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunkSection.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.render; +package com.simibubi.create.foundation.virtualWorld; import net.minecraft.core.registries.Registries; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunkSource.java similarity index 96% rename from src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java rename to src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunkSource.java index 9edaae0f25..bcd9b35748 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualChunkSource.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualChunkSource.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.render; +package com.simibubi.create.foundation.virtualWorld; import java.util.function.BooleanSupplier; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java similarity index 98% rename from src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java rename to src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java index 109b0b523b..ac3b550a28 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualEmptyBlockGetter.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.render; +package com.simibubi.create.foundation.virtualWorld; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualLevelEntityGetter.java similarity index 94% rename from src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java rename to src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualLevelEntityGetter.java index df9b5a3f75..7656ecdd8a 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualLevelEntityGetter.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualLevelEntityGetter.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.render; +package com.simibubi.create.foundation.virtualWorld; import java.util.Collections; import java.util.UUID; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java similarity index 99% rename from src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java rename to src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java index 62626168f4..b48c7b3627 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.render; +package com.simibubi.create.foundation.virtualWorld; import java.util.Collection; import java.util.Collections; From e892003eb574f50b682d977b5bdfdce667fb3b58 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Mon, 15 Jan 2024 16:25:15 -0800 Subject: [PATCH 07/35] Throwing shade - Actually register instance types. - Update instance shaders to compile with new flywheel. - Add cull shaders. - Update flywheel dep in mods.toml. - Bump flywheel build. --- gradle.properties | 2 +- .../com/simibubi/create/CreateClient.java | 3 ++ src/main/resources/META-INF/mods.toml | 4 +-- .../assets/create/flywheel/instance/belt.vert | 28 +++++---------- .../flywheel/instance/contraption_actor.vert | 27 +++++---------- .../create/flywheel/instance/cull/belt.glsl | 11 ++++++ .../instance/cull/contraption_actor.glsl | 14 ++++++++ .../create/flywheel/instance/cull/flap.glsl | 34 +++++++++++++++++++ .../flywheel/instance/cull/rotating.glsl | 20 +++++++++++ .../assets/create/flywheel/instance/flap.vert | 25 +++++--------- .../create/flywheel/instance/rotating.vert | 23 +++++-------- 11 files changed, 118 insertions(+), 73 deletions(-) create mode 100644 src/main/resources/assets/create/flywheel/instance/cull/belt.glsl create mode 100644 src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl create mode 100644 src/main/resources/assets/create/flywheel/instance/cull/flap.glsl create mode 100644 src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl diff --git a/gradle.properties b/gradle.properties index a13bd93191..e6819087c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-11 +flywheel_version = 1.0.0-alpha-14 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 89684cb990..ea5cb4b0af 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -18,6 +18,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.ValueSettingsClient; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.CreateContexts; import com.simibubi.create.foundation.render.SuperByteBufferCache; @@ -63,6 +64,8 @@ public class CreateClient { modEventBus.addListener(CreateClient::clientInit); modEventBus.addListener(AllParticleTypes::registerFactories); + AllInstanceTypes.init(); + MODEL_SWAPPER.registerListeners(modEventBus); ZAPPER_RENDER_HANDLER.registerListeners(forgeEventBus); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index a5c47fedd1..b9599d66e3 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -# The Implementation-Version property in the jar's MANIFEST.MF file will be used as the mod version at runtime +# The Implementation-Version property in the jar's MANIFEST.MF file will be used as the mod version at runtime version="${file.jarVersion}" displayName="Create" #updateJSONURL="" @@ -33,6 +33,6 @@ Technology that empowers the player.''' [[dependencies.create]] modId="flywheel" mandatory=true - versionRange="[0.6.10,0.6.11)" + versionRange="[1.0.0-alpha,2.0)" ordering="AFTER" side="CLIENT" diff --git a/src/main/resources/assets/create/flywheel/instance/belt.vert b/src/main/resources/assets/create/flywheel/instance/belt.vert index 48cc0a83dc..a42270e0f2 100644 --- a/src/main/resources/assets/create/flywheel/instance/belt.vert +++ b/src/main/resources/assets/create/flywheel/instance/belt.vert @@ -1,33 +1,23 @@ #define PI 3.1415926538 -#include "flywheel:core/quaternion.glsl" -#include "flywheel:core/matutils.glsl" +#include "flywheel:util/quaternion.glsl" +#include "flywheel:util/matrix.glsl" -struct Belt { - vec2 light; - vec4 color; - vec3 pos; - float speed; - float offset; - vec4 rotation; - vec2 sourceTexture; - vec4 scrollTexture; - float scrollMult; -}; +const float uTime = 0.; -void vertex(inout Vertex v, Belt instance) { - v.pos = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5; +void flw_instanceVertex(in FlwInstance instance) { + flw_vertexPos = vec4(rotateVertexByQuat(flw_vertexPos.xyz - .5, instance.rotation) + instance.pos + .5, 1.); - v.normal = rotateVertexByQuat(v.normal, instance.rotation); + flw_vertexNormal = rotateVertexByQuat(flw_vertexNormal, instance.rotation); float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y; float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult; - v.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll); - v.light = instance.light; + flw_vertexTexCoord = flw_vertexTexCoord - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll); + flw_vertexLight = instance.light; #if defined(DEBUG_RAINBOW) - v.color = instance.color; + flw_vertexColor = instance.color; #endif } diff --git a/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert b/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert index eca332180d..676274e80a 100644 --- a/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert +++ b/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert @@ -1,26 +1,15 @@ -#define PI 3.1415926538 +#include "flywheel:util/matrix.glsl" +#include "flywheel:util/quaternion.glsl" -#include "flywheel:core/matutils.glsl" -#include "flywheel:core/quaternion.glsl" +const float uTime = 0.; -struct Actor { - vec3 pos; - vec2 light; - float offset; - vec3 axis; - vec4 rotation; - vec3 rotationCenter; - float speed; -}; - -void vertex(inout Vertex v, Actor instance) { +void flw_instanceVertex(in FlwInstance instance) { float degrees = instance.offset + uTime * instance.speed / 20.; - //float angle = fract(degrees / 360.) * PI * 2.; vec4 kineticRot = quat(instance.axis, degrees); - vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter; + vec3 rotated = rotateVertexByQuat(flw_vertexPos.xyz - instance.rotationCenter, kineticRot) + instance.rotationCenter; - v.pos = rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5; - v.normal = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation); - v.light = instance.light; + flw_vertexPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.); + flw_vertexNormal = rotateVertexByQuat(rotateVertexByQuat(flw_vertexNormal, kineticRot), instance.rotation); + flw_vertexLight = instance.light; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl b/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl new file mode 100644 index 0000000000..0b638ab27b --- /dev/null +++ b/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl @@ -0,0 +1,11 @@ +#define PI 3.1415926538 + +#include "flywheel:util/quaternion.glsl" +#include "flywheel:util/matrix.glsl" + +const float uTime = 0.; + +void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { + // FIXME: this is incorrect, but it compiles + center = rotateVertexByQuat(center - .5, instance.rotation) + instance.pos + .5; +} diff --git a/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl b/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl new file mode 100644 index 0000000000..a1c1aaff41 --- /dev/null +++ b/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl @@ -0,0 +1,14 @@ +#include "flywheel:util/matrix.glsl" +#include "flywheel:util/quaternion.glsl" + +const float uTime = 0.; + +void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { + // FIXME: this is incorrect, but it compiles + float degrees = instance.offset + uTime * instance.speed / 20.; + + vec4 kineticRot = quat(instance.axis, degrees); + vec3 rotated = rotateVertexByQuat(center - instance.rotationCenter, kineticRot) + instance.rotationCenter; + + center = rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5; +} diff --git a/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl b/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl new file mode 100644 index 0000000000..8a8ebeaa38 --- /dev/null +++ b/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl @@ -0,0 +1,34 @@ +#define PI 3.1415926538 + +const float uTime = 0.; + +#include "flywheel:util/matrix.glsl" +#include "flywheel:util/quaternion.glsl" + +float toRad(float degrees) { + return fract(degrees / 360.) * PI * 2.; +} + +float getFlapAngle(float flapness, float intensity, float scale) { + float absFlap = abs(flapness); + + float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale; + + float halfAngle = angle * 0.5; + + float which = step(0., flapness); // 0 if negative, 1 if positive + float degrees = which * halfAngle + (1. - which) * angle; // branchless conditional multiply + + return degrees; +} + +void flw_transformBoundingSphere(in FlwInstance flap, inout vec3 center, inout float radius) { + // FIXME: this is incorrect, but it compiles + float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale); + + vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle); + vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle); + + vec3 rotated = rotateVertexByQuat(center - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; + center = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5; +} diff --git a/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl b/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl new file mode 100644 index 0000000000..809a5679a5 --- /dev/null +++ b/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl @@ -0,0 +1,20 @@ +#define PI 3.1415926538 + +#include "flywheel:util/matrix.glsl" + +const float uTime = 0.; + +mat4 kineticRotation(float offset, float speed, vec3 axis) { + float degrees = offset + uTime * speed * 3./10.; + float angle = fract(degrees / 360.) * PI * 2.; + + return rotate(axis, angle); +} + +void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { + // FIXME: this is incorrect, but it compiles + mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis); + + vec4 worldPos = spin * vec4(center - .5, 1.); + center = worldPos.xyz + instance.pos + .5; +} diff --git a/src/main/resources/assets/create/flywheel/instance/flap.vert b/src/main/resources/assets/create/flywheel/instance/flap.vert index ea4ae6fb3d..75a82a908b 100644 --- a/src/main/resources/assets/create/flywheel/instance/flap.vert +++ b/src/main/resources/assets/create/flywheel/instance/flap.vert @@ -1,18 +1,9 @@ #define PI 3.1415926538 -#include "flywheel:core/matutils.glsl" -#include "flywheel:core/quaternion.glsl" +const float uTime = 0.; -struct Flap { - vec3 instancePos; - vec2 light; - vec3 segmentOffset; - vec3 pivot; - float horizontalAngle; - float intensity; - float flapScale; - float flapness; -}; +#include "flywheel:util/matrix.glsl" +#include "flywheel:util/quaternion.glsl" float toRad(float degrees) { return fract(degrees / 360.) * PI * 2.; @@ -31,16 +22,16 @@ float getFlapAngle(float flapness, float intensity, float scale) { return degrees; } -void vertex(inout Vertex v, Flap flap) { +void flw_instanceVertex(in FlwInstance flap) { float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale); vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle); vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle); - vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; + vec3 rotated = rotateVertexByQuat(flw_vertexPos.xyz - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5; - v.pos = rotated; - v.normal = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation); - v.light = flap.light; + flw_vertexPos = vec4(rotated, 1.); + flw_vertexNormal = rotateVertexByQuat(rotateVertexByQuat(flw_vertexNormal, flapRotation), orientation); + flw_vertexLight = flap.light; } diff --git a/src/main/resources/assets/create/flywheel/instance/rotating.vert b/src/main/resources/assets/create/flywheel/instance/rotating.vert index e934b3e247..dd4d73ae10 100644 --- a/src/main/resources/assets/create/flywheel/instance/rotating.vert +++ b/src/main/resources/assets/create/flywheel/instance/rotating.vert @@ -1,15 +1,8 @@ #define PI 3.1415926538 -#include "flywheel:core/matutils.glsl" +#include "flywheel:util/matrix.glsl" -struct Rotating { - vec2 light; - vec4 color; - vec3 pos; - float speed; - float offset; - vec3 axis; -}; +const float uTime = 0.; mat4 kineticRotation(float offset, float speed, vec3 axis) { float degrees = offset + uTime * speed * 3./10.; @@ -18,16 +11,16 @@ mat4 kineticRotation(float offset, float speed, vec3 axis) { return rotate(axis, angle); } -void vertex(inout Vertex v, Rotating instance) { +void flw_instanceVertex(in FlwInstance instance) { mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis); - vec4 worldPos = spin * vec4(v.pos - .5, 1.); - v.pos = worldPos.xyz + instance.pos + .5; + vec4 worldPos = spin * vec4(flw_vertexPos.xyz - .5, 1.); + flw_vertexPos = vec4(worldPos.xyz + instance.pos + .5, 1.); - v.normal = modelToNormal(spin) * v.normal; - v.light = instance.light; + flw_vertexNormal = modelToNormal(spin) * flw_vertexNormal; + flw_vertexLight = instance.light; #if defined(DEBUG_RAINBOW) - v.color = instance.color; + flw_vertexColor = instance.color; #endif } From 5bac9e5224a6bac59d6084c3ab8c6c9bd43fd5a8 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Wed, 17 Jan 2024 13:27:52 -0800 Subject: [PATCH 08/35] Things on the screen again - Use our own model cache that's aware of virtual data. - Fix memory write issues with instance types. - Indirect works too, though the cull shaders are still incorrect. --- gradle.properties | 2 +- .../actors/flwdata/ActorInstance.java | 17 +-- .../pulley/RopePulleyInstance.java | 5 +- .../content/kinetics/base/ShaftInstance.java | 9 +- .../kinetics/base/SingleRotatingInstance.java | 20 +--- .../content/kinetics/belt/BeltInstance.java | 1 + .../crank/ValveHandleBlockEntity.java | 4 +- .../deployer/DeployerActorInstance.java | 3 +- .../kinetics/flywheel/FlywheelInstance.java | 6 +- .../content/kinetics/saw/SawInstance.java | 3 +- .../waterwheel/WaterWheelInstance.java | 4 +- .../content/trains/bogey/BogeyRenderer.java | 5 +- .../foundation/render/AllInstanceTypes.java | 104 +++++++++--------- .../render/VirtualRenderHelper.java | 13 +++ 14 files changed, 100 insertions(+), 96 deletions(-) diff --git a/gradle.properties b/gradle.properties index e6819087c0..eb3694c766 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-14 +flywheel_version = 1.0.0-alpha-18 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java index 7a5ee91a0c..2f13b9502f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java @@ -39,15 +39,16 @@ public class ActorInstance extends AbstractInstance { return this; } - public ActorInstance setBlockLight(int blockLight) { - this.blockLight = (byte) ((blockLight & 0xF) << 4); - return this; - } - public ActorInstance setSkyLight(int skyLight) { - this.skyLight = (byte) ((skyLight & 0xF) << 4); - return this; - } + public ActorInstance setBlockLight(int blockLight) { + this.blockLight = (byte) blockLight; + return this; + } + + public ActorInstance setSkyLight(int skyLight) { + this.skyLight = (byte) skyLight; + return this; + } public ActorInstance setRotationOffset(float rotationOffset) { this.rotationOffset = rotationOffset; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java index 83de1c34c2..a74e497f06 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java @@ -9,6 +9,7 @@ import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; public class RopePulleyInstance extends AbstractPulleyInstance { @@ -17,11 +18,11 @@ public class RopePulleyInstance extends AbstractPulleyInstance getRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.block(AllBlocks.ROPE.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); } protected Instancer getMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.block(AllBlocks.PULLEY_MAGNET.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); } protected Instancer getHalfMagnetModel() { diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java index 8f38a49812..9bb1435b6f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.kinetics.base; +import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; - -import net.minecraft.world.level.block.state.BlockState; +import com.simibubi.create.foundation.render.VirtualRenderHelper; public class ShaftInstance extends SingleRotatingInstance { @@ -11,8 +11,7 @@ public class ShaftInstance extends SingleRotatingI } @Override - protected BlockState getRenderedBlockState() { - return shaft(); + protected Model model() { + return VirtualRenderHelper.blockModel(shaft()); } - } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java index 8ef8ed1390..db4b913ba0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java @@ -4,13 +4,10 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.foundation.render.AllInstanceTypes; - -import net.minecraft.world.level.block.state.BlockState; +import com.simibubi.create.foundation.render.VirtualRenderHelper; public class SingleRotatingInstance extends KineticBlockEntityInstance { @@ -22,8 +19,9 @@ public class SingleRotatingInstance extends Kineti @Override public void init(float pt) { - var instance = getModel().createInstance(); - rotatingModel = setup(instance); + rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES) + .createInstance(); + setup(rotatingModel); } @Override @@ -41,16 +39,8 @@ public class SingleRotatingInstance extends Kineti rotatingModel.delete(); } - protected BlockState getRenderedBlockState() { - return blockState; - } - - protected Instancer getModel() { - return instancerProvider.instancer(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES); - } - protected Model model() { - return Models.block(getRenderedBlockState()); + return VirtualRenderHelper.blockModel(blockState); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java index 464810bd96..f6cf78e421 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java @@ -35,6 +35,7 @@ public class BeltInstance extends KineticInstance { } public BeltInstance setScrollTexture(SpriteShiftEntry spriteShift) { + // FIXME: these are null for some reason TextureAtlasSprite source = spriteShift.getOriginal(); TextureAtlasSprite target = spriteShift.getTarget(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java index 5931ebfe08..50624e8697 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java @@ -4,7 +4,6 @@ import java.util.List; import com.google.common.collect.ImmutableList; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -18,6 +17,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.ValueSettingsFormatt import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollValueBehaviour; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.VecHelper; @@ -149,7 +149,7 @@ public class ValveHandleBlockEntity extends HandCrankBlockEntity { @Override @OnlyIn(Dist.CLIENT) public Model getRenderedHandleInstance() { - return Models.block(getBlockState()); + return VirtualRenderHelper.blockModel(getBlockState()); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java index 1eb3b57932..9340ac9992 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java @@ -18,6 +18,7 @@ import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.NBTHelper; @@ -64,7 +65,7 @@ public class DeployerActorInstance extends ActorInstance { hand = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(handPose), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); - shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.block(KineticBlockEntityInstance.shaft(axis)), RenderStage.AFTER_BLOCK_ENTITIES) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(KineticBlockEntityInstance.shaft(axis)), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); int blockLight = localBlockLight(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java index dc8c438068..37aece9c45 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java @@ -9,12 +9,12 @@ import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -29,9 +29,9 @@ public class FlywheelInstance extends KineticBlockEntityInstance { Direction facing = referenceState.getValue(BlockStateProperties.FACING); return Models.partial(AllPartialModels.SHAFT_HALF, facing); } else { - return Models.block(shaft()); + return VirtualRenderHelper.blockModel(shaft()); } } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java index f1790c2c29..0792ffd7e8 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.kinetics.waterwheel; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.ModelCache; -import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.CutoutRotatingInstance; @@ -12,7 +11,6 @@ import com.simibubi.create.foundation.render.CachedBufferer; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; public class WaterWheelInstance extends CutoutRotatingInstance { @@ -24,7 +22,7 @@ public class WaterWheelInstance extends CutoutR public WaterWheelInstance(VisualizationContext materialManager, T blockEntity, boolean large) { super(materialManager, blockEntity); this.large = large; - key = new WaterWheelModelKey(large, getRenderedBlockState(), blockEntity.material); + key = new WaterWheelModelKey(large, blockState, blockEntity.material); } public static WaterWheelInstance standard(VisualizationContext materialManager, T blockEntity) { diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java index 248ee272d2..2a2e722308 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java @@ -12,7 +12,6 @@ import org.joml.Matrix4f; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.event.RenderStage; -import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -24,13 +23,13 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.trains.entity.CarriageBogey; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.model.data.ModelData; /** * This is a port of the bogey api from Extended Bogeys, If you are looking to implement your own bogeys you can find some helpful resources below: @@ -214,7 +213,7 @@ public abstract class BogeyRenderer { */ public void createModelInstance(VisualizationContext materialManager, BlockState state, int count) { var instancer = materialManager.instancerProvider() - .instancer(InstanceTypes.TRANSFORMED, Models.block(state), RenderStage.AFTER_BLOCK_ENTITIES); + .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(state), RenderStage.AFTER_BLOCK_ENTITIES); BogeyModelData[] modelData = IntStream.range(0, count) .mapToObj(i -> instancer.createInstance()) .map(BogeyModelData::new) diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index faa2a00189..8f337a0393 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -10,8 +10,8 @@ import com.jozufozu.flywheel.api.layout.IntegerRepr; import com.jozufozu.flywheel.api.layout.LayoutBuilder; import com.jozufozu.flywheel.lib.instance.SimpleInstanceType; import com.simibubi.create.content.contraptions.actors.flwdata.ActorInstance; -import com.simibubi.create.content.kinetics.belt.BeltInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.content.kinetics.belt.BeltInstance; import com.simibubi.create.content.logistics.flwdata.FlapData; import net.minecraftforge.api.distmarker.Dist; @@ -19,7 +19,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class AllInstanceTypes { - // FIXME: memory alignment issues and light being represented by bytes + // FIXME: optimize layouts/pack fields together if possible public static final InstanceType ROTATING = SimpleInstanceType.builder(RotatingInstance::new) .cullShader(asResource("instance/cull/rotating.glsl")) @@ -39,14 +39,14 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 5, instance.g); MemoryUtil.memPutByte(ptr + 6, instance.b); MemoryUtil.memPutByte(ptr + 7, instance.a); - MemoryUtil.memPutFloat(ptr + 6, instance.x); - MemoryUtil.memPutFloat(ptr + 10, instance.y); - MemoryUtil.memPutFloat(ptr + 14, instance.z); - MemoryUtil.memPutFloat(ptr + 18, instance.rotationalSpeed); - MemoryUtil.memPutFloat(ptr + 22, instance.rotationOffset); - MemoryUtil.memPutByte(ptr + 26, instance.rotationAxisX); - MemoryUtil.memPutByte(ptr + 27, instance.rotationAxisY); - MemoryUtil.memPutByte(ptr + 28, instance.rotationAxisZ); + MemoryUtil.memPutFloat(ptr + 8, instance.x); + MemoryUtil.memPutFloat(ptr + 12, instance.y); + MemoryUtil.memPutFloat(ptr + 16, instance.z); + MemoryUtil.memPutFloat(ptr + 20, instance.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 24, instance.rotationOffset); + MemoryUtil.memPutByte(ptr + 28, instance.rotationAxisX); + MemoryUtil.memPutByte(ptr + 29, instance.rotationAxisY); + MemoryUtil.memPutByte(ptr + 30, instance.rotationAxisZ); }) .register(); public static final InstanceType BELTS = SimpleInstanceType.builder(BeltInstance::new) @@ -70,22 +70,22 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 5, instance.g); MemoryUtil.memPutByte(ptr + 6, instance.b); MemoryUtil.memPutByte(ptr + 7, instance.a); - MemoryUtil.memPutFloat(ptr + 6, instance.x); - MemoryUtil.memPutFloat(ptr + 10, instance.y); - MemoryUtil.memPutFloat(ptr + 14, instance.z); - MemoryUtil.memPutFloat(ptr + 18, instance.rotationalSpeed); - MemoryUtil.memPutFloat(ptr + 22, instance.rotationOffset); - MemoryUtil.memPutFloat(ptr + 26, instance.qX); - MemoryUtil.memPutFloat(ptr + 30, instance.qY); - MemoryUtil.memPutFloat(ptr + 34, instance.qZ); - MemoryUtil.memPutFloat(ptr + 38, instance.qW); - MemoryUtil.memPutFloat(ptr + 42, instance.sourceU); - MemoryUtil.memPutFloat(ptr + 46, instance.sourceV); - MemoryUtil.memPutFloat(ptr + 50, instance.minU); - MemoryUtil.memPutFloat(ptr + 54, instance.minV); - MemoryUtil.memPutFloat(ptr + 58, instance.maxU); - MemoryUtil.memPutFloat(ptr + 62, instance.maxV); - MemoryUtil.memPutByte(ptr + 66, instance.scrollMult); + MemoryUtil.memPutFloat(ptr + 8, instance.x); + MemoryUtil.memPutFloat(ptr + 12, instance.y); + MemoryUtil.memPutFloat(ptr + 16, instance.z); + MemoryUtil.memPutFloat(ptr + 20, instance.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 24, instance.rotationOffset); + MemoryUtil.memPutFloat(ptr + 28, instance.qX); + MemoryUtil.memPutFloat(ptr + 32, instance.qY); + MemoryUtil.memPutFloat(ptr + 36, instance.qZ); + MemoryUtil.memPutFloat(ptr + 40, instance.qW); + MemoryUtil.memPutFloat(ptr + 44, instance.sourceU); + MemoryUtil.memPutFloat(ptr + 48, instance.sourceV); + MemoryUtil.memPutFloat(ptr + 52, instance.minU); + MemoryUtil.memPutFloat(ptr + 56, instance.minV); + MemoryUtil.memPutFloat(ptr + 60, instance.maxU); + MemoryUtil.memPutFloat(ptr + 64, instance.maxV); + MemoryUtil.memPutByte(ptr + 68, instance.scrollMult); }) .register(); public static final InstanceType ACTORS = SimpleInstanceType.builder(ActorInstance::new) @@ -104,20 +104,20 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr, instance.x); MemoryUtil.memPutFloat(ptr + 4, instance.y); MemoryUtil.memPutFloat(ptr + 8, instance.z); - MemoryUtil.memPutByte(ptr + 12, instance.blockLight); - MemoryUtil.memPutByte(ptr + 13, instance.skyLight); - MemoryUtil.memPutFloat(ptr + 14, instance.rotationOffset); - MemoryUtil.memPutByte(ptr + 18, instance.rotationAxisX); - MemoryUtil.memPutByte(ptr + 19, instance.rotationAxisY); - MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisZ); - MemoryUtil.memPutFloat(ptr + 21, instance.qX); - MemoryUtil.memPutFloat(ptr + 25, instance.qY); - MemoryUtil.memPutFloat(ptr + 29, instance.qZ); - MemoryUtil.memPutFloat(ptr + 33, instance.qW); - MemoryUtil.memPutByte(ptr + 37, instance.rotationCenterX); - MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterY); - MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterZ); - MemoryUtil.memPutFloat(ptr + 40, instance.speed); + MemoryUtil.memPutShort(ptr + 12, instance.blockLight); + MemoryUtil.memPutShort(ptr + 14, instance.skyLight); + MemoryUtil.memPutFloat(ptr + 16, instance.rotationOffset); + MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisX); + MemoryUtil.memPutByte(ptr + 21, instance.rotationAxisY); + MemoryUtil.memPutByte(ptr + 22, instance.rotationAxisZ); + MemoryUtil.memPutFloat(ptr + 24, instance.qX); + MemoryUtil.memPutFloat(ptr + 28, instance.qY); + MemoryUtil.memPutFloat(ptr + 32, instance.qZ); + MemoryUtil.memPutFloat(ptr + 34, instance.qW); + MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterX); + MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterY); + MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterZ); + MemoryUtil.memPutFloat(ptr + 42, instance.speed); }) .register(); public static final InstanceType FLAPS = SimpleInstanceType.builder(FlapData::new) @@ -137,18 +137,18 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr, instance.x); MemoryUtil.memPutFloat(ptr + 4, instance.y); MemoryUtil.memPutFloat(ptr + 8, instance.z); - MemoryUtil.memPutByte(ptr + 12, (byte) (instance.blockLight << 4)); - MemoryUtil.memPutByte(ptr + 13, (byte) (instance.skyLight << 4)); - MemoryUtil.memPutFloat(ptr + 14, instance.segmentOffsetX); - MemoryUtil.memPutFloat(ptr + 18, instance.segmentOffsetY); - MemoryUtil.memPutFloat(ptr + 22, instance.segmentOffsetZ); - MemoryUtil.memPutFloat(ptr + 26, instance.pivotX); - MemoryUtil.memPutFloat(ptr + 30, instance.pivotY); - MemoryUtil.memPutFloat(ptr + 34, instance.pivotZ); - MemoryUtil.memPutFloat(ptr + 38, instance.horizontalAngle); - MemoryUtil.memPutFloat(ptr + 42, instance.intensity); - MemoryUtil.memPutFloat(ptr + 46, instance.flapScale); - MemoryUtil.memPutFloat(ptr + 50, instance.flapness); + MemoryUtil.memPutShort(ptr + 12, instance.blockLight); + MemoryUtil.memPutShort(ptr + 14, instance.skyLight); + MemoryUtil.memPutFloat(ptr + 16, instance.segmentOffsetX); + MemoryUtil.memPutFloat(ptr + 20, instance.segmentOffsetY); + MemoryUtil.memPutFloat(ptr + 24, instance.segmentOffsetZ); + MemoryUtil.memPutFloat(ptr + 28, instance.pivotX); + MemoryUtil.memPutFloat(ptr + 32, instance.pivotY); + MemoryUtil.memPutFloat(ptr + 36, instance.pivotZ); + MemoryUtil.memPutFloat(ptr + 40, instance.horizontalAngle); + MemoryUtil.memPutFloat(ptr + 44, instance.intensity); + MemoryUtil.memPutFloat(ptr + 48, instance.flapScale); + MemoryUtil.memPutFloat(ptr + 52, instance.flapness); }) .register(); diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index b504cae4d8..0009b0d8cb 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -7,9 +7,12 @@ import java.util.List; import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.Nullable; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.lib.model.ModelCache; import com.jozufozu.flywheel.lib.model.ModelUtil; import com.jozufozu.flywheel.lib.model.baked.BakedModelBufferer; import com.jozufozu.flywheel.lib.model.baked.BakedModelBufferer.ShadeSeparatedResultConsumer; +import com.jozufozu.flywheel.lib.model.baked.BlockModelBuilder; import com.jozufozu.flywheel.lib.model.baked.VirtualEmptyBlockGetter; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer; @@ -24,11 +27,21 @@ import net.minecraftforge.client.model.data.ModelProperty; public class VirtualRenderHelper { public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); + public static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new BlockModelBuilder(state).modelData(VIRTUAL_DATA).build()); public static boolean isVirtual(ModelData data) { return data.has(VirtualRenderHelper.VIRTUAL_PROPERTY) && data.get(VirtualRenderHelper.VIRTUAL_PROPERTY); } + /** + * A copy of {@link com.jozufozu.flywheel.lib.model.Models#block(BlockState)}, but with virtual model data passed in. + * @param state The block state to get the model for. + * @return The model for the given block state. + */ + public static Model blockModel(BlockState state) { + return VIRTUAL_BLOCKS.get(state); + } + public static SuperByteBuffer bufferBlock(BlockState state) { return bufferModel(ModelUtil.VANILLA_RENDERER.getBlockModel(state), state); } From 1c46bc8ae1b9e830f11f68a5cc27e9fc9b41e52b Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Wed, 17 Jan 2024 13:50:26 -0800 Subject: [PATCH 09/35] What's in a name - Rename all *Instance -> *Visual. - FlapData -> FlapInstance. - Rename VisualizationContext variables. --- .../simibubi/create/AllBlockEntityTypes.java | 196 +++++++++--------- .../com/simibubi/create/AllEntityTypes.java | 4 +- .../actors/{flwdata => }/ActorInstance.java | 2 +- .../actors/flwdata/package-info.java | 6 - ...nstance.java => HarvesterActorVisual.java} | 11 +- .../harvester/HarvesterMovementBehaviour.java | 8 +- ...ActorInstance.java => PSIActorVisual.java} | 10 +- .../psi/{PSIInstance.java => PSIVisual.java} | 4 +- .../psi/PortableStorageInterfaceMovement.java | 8 +- ...orInstance.java => RollerActorVisual.java} | 11 +- .../roller/RollerMovementBehaviour.java | 8 +- ...earingInstance.java => BearingVisual.java} | 8 +- .../StabilizedBearingMovementBehaviour.java | 10 +- ...ance.java => StabilizedBearingVisual.java} | 16 +- .../behaviour/MovementBehaviour.java | 6 +- ...tickerInstance.java => StickerVisual.java} | 7 +- ...nstance.java => ElevatorPulleyVisual.java} | 8 +- ...nstance.java => GantryCarriageVisual.java} | 9 +- ...nstance.java => AbstractPulleyVisual.java} | 6 +- ...leyInstance.java => HosePulleyVisual.java} | 4 +- ...leyInstance.java => RopePulleyVisual.java} | 6 +- .../{ActorInstance.java => ActorVisual.java} | 4 +- ...ktankInstance.java => BacktankVisual.java} | 8 +- ...oolBoxInstance.java => ToolBoxVisual.java} | 9 +- ...lveInstance.java => FluidValveVisual.java} | 6 +- ...umpCogInstance.java => PumpCogVisual.java} | 8 +- ...Instance.java => BackHalfShaftVisual.java} | 6 +- .../kinetics/base/CutoutRotatingInstance.java | 9 - .../kinetics/base/CutoutRotatingVisual.java | 9 + ...haftInstance.java => HalfShaftVisual.java} | 6 +- ...ce.java => HorizontalHalfShaftVisual.java} | 6 +- ...nce.java => KineticBlockEntityVisual.java} | 6 +- .../{ShaftInstance.java => ShaftVisual.java} | 6 +- ...nstance.java => SingleRotatingVisual.java} | 6 +- .../content/kinetics/belt/BeltVisual.java | 8 +- ...ance.java => ShaftlessCogwheelVisual.java} | 10 +- ...rankInstance.java => HandCrankVisual.java} | 6 +- ...Instance.java => DeployerActorVisual.java} | 14 +- .../deployer/DeployerMovementBehaviour.java | 8 +- ...loyerInstance.java => DeployerVisual.java} | 8 +- ...torInstance.java => DrillActorVisual.java} | 12 +- .../drill/DrillMovementBehaviour.java | 6 +- .../{DrillInstance.java => DrillVisual.java} | 8 +- .../fan/{FanInstance.java => FanVisual.java} | 8 +- ...wheelInstance.java => FlywheelVisual.java} | 8 +- .../{GaugeInstance.java => GaugeVisual.java} | 20 +- ...earboxInstance.java => GearboxVisual.java} | 8 +- .../{ArmInstance.java => ArmVisual.java} | 8 +- ...gInstance.java => MillstoneCogVisual.java} | 8 +- .../{MixerInstance.java => MixerVisual.java} | 8 +- .../{PressInstance.java => PressVisual.java} | 8 +- .../saw/{SawInstance.java => SawVisual.java} | 8 +- ...=> BracketedKineticBlockEntityVisual.java} | 12 +- ...CogInstance.java => EncasedCogVisual.java} | 16 +- ...neInstance.java => SteamEngineVisual.java} | 7 +- ...aftInstance.java => SplitShaftVisual.java} | 6 +- ...eelInstance.java => WaterWheelVisual.java} | 18 +- ...jectorInstance.java => EjectorVisual.java} | 8 +- .../{FlapData.java => FlapInstance.java} | 26 +-- ...{FunnelInstance.java => FunnelVisual.java} | 16 +- ...nelInstance.java => BeltTunnelVisual.java} | 18 +- ...erInstance.java => AnalogLeverVisual.java} | 6 +- ...odeInstance.java => BrassDiodeVisual.java} | 6 +- ...nstance.java => SchematicannonVisual.java} | 8 +- .../trains/bogey/BackupBogeyRenderer.java | 2 +- .../content/trains/bogey/BogeyRenderer.java | 28 +-- .../content/trains/bogey/BogeyStyle.java | 4 +- .../{BogeyInstance.java => BogeyVisual.java} | 14 +- .../trains/bogey/StandardBogeyRenderer.java | 16 +- .../content/trains/entity/CarriageBogey.java | 6 +- .../entity/CarriageContraptionEntity.java | 6 +- ...ce.java => CarriageContraptionVisual.java} | 14 +- .../{TrackInstance.java => TrackVisual.java} | 40 ++-- .../foundation/render/AllInstanceTypes.java | 6 +- 74 files changed, 431 insertions(+), 453 deletions(-) rename src/main/java/com/simibubi/create/content/contraptions/actors/{flwdata => }/ActorInstance.java (97%) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/package-info.java rename src/main/java/com/simibubi/create/content/contraptions/actors/harvester/{HarvesterActorInstance.java => HarvesterActorVisual.java} (87%) rename src/main/java/com/simibubi/create/content/contraptions/actors/psi/{PSIActorInstance.java => PSIActorVisual.java} (67%) rename src/main/java/com/simibubi/create/content/contraptions/actors/psi/{PSIInstance.java => PSIVisual.java} (85%) rename src/main/java/com/simibubi/create/content/contraptions/actors/roller/{RollerActorInstance.java => RollerActorVisual.java} (83%) rename src/main/java/com/simibubi/create/content/contraptions/bearing/{BearingInstance.java => BearingVisual.java} (89%) rename src/main/java/com/simibubi/create/content/contraptions/bearing/{StabilizedBearingInstance.java => StabilizedBearingVisual.java} (80%) rename src/main/java/com/simibubi/create/content/contraptions/chassis/{StickerInstance.java => StickerVisual.java} (87%) rename src/main/java/com/simibubi/create/content/contraptions/elevator/{ElevatorPulleyInstance.java => ElevatorPulleyVisual.java} (56%) rename src/main/java/com/simibubi/create/content/contraptions/gantry/{GantryCarriageInstance.java => GantryCarriageVisual.java} (90%) rename src/main/java/com/simibubi/create/content/contraptions/pulley/{AbstractPulleyInstance.java => AbstractPulleyVisual.java} (94%) rename src/main/java/com/simibubi/create/content/contraptions/pulley/{HosePulleyInstance.java => HosePulleyVisual.java} (90%) rename src/main/java/com/simibubi/create/content/contraptions/pulley/{RopePulleyInstance.java => RopePulleyVisual.java} (89%) rename src/main/java/com/simibubi/create/content/contraptions/render/{ActorInstance.java => ActorVisual.java} (85%) rename src/main/java/com/simibubi/create/content/equipment/armor/{BacktankInstance.java => BacktankVisual.java} (53%) rename src/main/java/com/simibubi/create/content/equipment/toolbox/{ToolBoxInstance.java => ToolBoxVisual.java} (86%) rename src/main/java/com/simibubi/create/content/fluids/pipes/valve/{FluidValveInstance.java => FluidValveVisual.java} (91%) rename src/main/java/com/simibubi/create/content/fluids/pump/{PumpCogInstance.java => PumpCogVisual.java} (73%) rename src/main/java/com/simibubi/create/content/kinetics/base/{BackHalfShaftInstance.java => BackHalfShaftVisual.java} (63%) delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java create mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java rename src/main/java/com/simibubi/create/content/kinetics/base/{HalfShaftInstance.java => HalfShaftVisual.java} (73%) rename src/main/java/com/simibubi/create/content/kinetics/base/{HorizontalHalfShaftInstance.java => HorizontalHalfShaftVisual.java} (62%) rename src/main/java/com/simibubi/create/content/kinetics/base/{KineticBlockEntityInstance.java => KineticBlockEntityVisual.java} (91%) rename src/main/java/com/simibubi/create/content/kinetics/base/{ShaftInstance.java => ShaftVisual.java} (61%) rename src/main/java/com/simibubi/create/content/kinetics/base/{SingleRotatingInstance.java => SingleRotatingVisual.java} (82%) rename src/main/java/com/simibubi/create/content/kinetics/crafter/{ShaftlessCogwheelInstance.java => ShaftlessCogwheelVisual.java} (72%) rename src/main/java/com/simibubi/create/content/kinetics/crank/{HandCrankInstance.java => HandCrankVisual.java} (88%) rename src/main/java/com/simibubi/create/content/kinetics/deployer/{DeployerActorInstance.java => DeployerActorVisual.java} (90%) rename src/main/java/com/simibubi/create/content/kinetics/deployer/{DeployerInstance.java => DeployerVisual.java} (93%) rename src/main/java/com/simibubi/create/content/kinetics/drill/{DrillActorInstance.java => DrillActorVisual.java} (78%) rename src/main/java/com/simibubi/create/content/kinetics/drill/{DrillInstance.java => DrillVisual.java} (67%) rename src/main/java/com/simibubi/create/content/kinetics/fan/{FanInstance.java => FanVisual.java} (90%) rename src/main/java/com/simibubi/create/content/kinetics/flywheel/{FlywheelInstance.java => FlywheelVisual.java} (90%) rename src/main/java/com/simibubi/create/content/kinetics/gauge/{GaugeInstance.java => GaugeVisual.java} (88%) rename src/main/java/com/simibubi/create/content/kinetics/gearbox/{GearboxInstance.java => GearboxVisual.java} (93%) rename src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/{ArmInstance.java => ArmVisual.java} (95%) rename src/main/java/com/simibubi/create/content/kinetics/millstone/{MillstoneCogInstance.java => MillstoneCogVisual.java} (54%) rename src/main/java/com/simibubi/create/content/kinetics/mixer/{MixerInstance.java => MixerVisual.java} (92%) rename src/main/java/com/simibubi/create/content/kinetics/press/{PressInstance.java => PressVisual.java} (87%) rename src/main/java/com/simibubi/create/content/kinetics/saw/{SawInstance.java => SawVisual.java} (78%) rename src/main/java/com/simibubi/create/content/kinetics/simpleRelays/{BracketedKineticBlockEntityInstance.java => BracketedKineticBlockEntityVisual.java} (86%) rename src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/{EncasedCogInstance.java => EncasedCogVisual.java} (86%) rename src/main/java/com/simibubi/create/content/kinetics/steamEngine/{SteamEngineInstance.java => SteamEngineVisual.java} (91%) rename src/main/java/com/simibubi/create/content/kinetics/transmission/{SplitShaftInstance.java => SplitShaftVisual.java} (91%) rename src/main/java/com/simibubi/create/content/kinetics/waterwheel/{WaterWheelInstance.java => WaterWheelVisual.java} (66%) rename src/main/java/com/simibubi/create/content/logistics/depot/{EjectorInstance.java => EjectorVisual.java} (86%) rename src/main/java/com/simibubi/create/content/logistics/flwdata/{FlapData.java => FlapInstance.java} (67%) rename src/main/java/com/simibubi/create/content/logistics/funnel/{FunnelInstance.java => FunnelVisual.java} (82%) rename src/main/java/com/simibubi/create/content/logistics/tunnel/{BeltTunnelInstance.java => BeltTunnelVisual.java} (82%) rename src/main/java/com/simibubi/create/content/redstone/analogLever/{AnalogLeverInstance.java => AnalogLeverVisual.java} (91%) rename src/main/java/com/simibubi/create/content/redstone/diodes/{BrassDiodeInstance.java => BrassDiodeVisual.java} (86%) rename src/main/java/com/simibubi/create/content/schematics/cannon/{SchematicannonInstance.java => SchematicannonVisual.java} (86%) rename src/main/java/com/simibubi/create/content/trains/bogey/{BogeyInstance.java => BogeyVisual.java} (82%) rename src/main/java/com/simibubi/create/content/trains/entity/{CarriageContraptionInstance.java => CarriageContraptionVisual.java} (83%) rename src/main/java/com/simibubi/create/content/trains/track/{TrackInstance.java => TrackVisual.java} (88%) diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index 58d393a008..4f6edcf39c 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -7,34 +7,34 @@ import com.simibubi.create.content.contraptions.actors.contraptionControls.Contr import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsRenderer; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterBlockEntity; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterRenderer; -import com.simibubi.create.content.contraptions.actors.psi.PSIInstance; +import com.simibubi.create.content.contraptions.actors.psi.PSIVisual; import com.simibubi.create.content.contraptions.actors.psi.PortableFluidInterfaceBlockEntity; import com.simibubi.create.content.contraptions.actors.psi.PortableItemInterfaceBlockEntity; import com.simibubi.create.content.contraptions.actors.psi.PortableStorageInterfaceRenderer; import com.simibubi.create.content.contraptions.actors.roller.RollerBlockEntity; import com.simibubi.create.content.contraptions.actors.roller.RollerRenderer; -import com.simibubi.create.content.contraptions.bearing.BearingInstance; import com.simibubi.create.content.contraptions.bearing.BearingRenderer; +import com.simibubi.create.content.contraptions.bearing.BearingVisual; import com.simibubi.create.content.contraptions.bearing.ClockworkBearingBlockEntity; import com.simibubi.create.content.contraptions.bearing.MechanicalBearingBlockEntity; import com.simibubi.create.content.contraptions.bearing.WindmillBearingBlockEntity; import com.simibubi.create.content.contraptions.chassis.ChassisBlockEntity; import com.simibubi.create.content.contraptions.chassis.StickerBlockEntity; -import com.simibubi.create.content.contraptions.chassis.StickerInstance; import com.simibubi.create.content.contraptions.chassis.StickerRenderer; +import com.simibubi.create.content.contraptions.chassis.StickerVisual; import com.simibubi.create.content.contraptions.elevator.ElevatorContactBlockEntity; import com.simibubi.create.content.contraptions.elevator.ElevatorPulleyBlockEntity; import com.simibubi.create.content.contraptions.elevator.ElevatorPulleyRenderer; import com.simibubi.create.content.contraptions.gantry.GantryCarriageBlockEntity; -import com.simibubi.create.content.contraptions.gantry.GantryCarriageInstance; import com.simibubi.create.content.contraptions.gantry.GantryCarriageRenderer; +import com.simibubi.create.content.contraptions.gantry.GantryCarriageVisual; import com.simibubi.create.content.contraptions.mounted.CartAssemblerBlockEntity; import com.simibubi.create.content.contraptions.piston.MechanicalPistonBlockEntity; import com.simibubi.create.content.contraptions.piston.MechanicalPistonRenderer; -import com.simibubi.create.content.contraptions.pulley.HosePulleyInstance; +import com.simibubi.create.content.contraptions.pulley.HosePulleyVisual; import com.simibubi.create.content.contraptions.pulley.PulleyBlockEntity; import com.simibubi.create.content.contraptions.pulley.PulleyRenderer; -import com.simibubi.create.content.contraptions.pulley.RopePulleyInstance; +import com.simibubi.create.content.contraptions.pulley.RopePulleyVisual; import com.simibubi.create.content.decoration.copycat.CopycatBlockEntity; import com.simibubi.create.content.decoration.placard.PlacardBlockEntity; import com.simibubi.create.content.decoration.placard.PlacardRenderer; @@ -43,13 +43,13 @@ import com.simibubi.create.content.decoration.slidingDoor.SlidingDoorRenderer; import com.simibubi.create.content.decoration.steamWhistle.WhistleBlockEntity; import com.simibubi.create.content.decoration.steamWhistle.WhistleRenderer; import com.simibubi.create.content.equipment.armor.BacktankBlockEntity; -import com.simibubi.create.content.equipment.armor.BacktankInstance; import com.simibubi.create.content.equipment.armor.BacktankRenderer; +import com.simibubi.create.content.equipment.armor.BacktankVisual; import com.simibubi.create.content.equipment.bell.BellRenderer; import com.simibubi.create.content.equipment.bell.HauntedBellBlockEntity; import com.simibubi.create.content.equipment.bell.PeculiarBellBlockEntity; import com.simibubi.create.content.equipment.clipboard.ClipboardBlockEntity; -import com.simibubi.create.content.equipment.toolbox.ToolBoxInstance; +import com.simibubi.create.content.equipment.toolbox.ToolBoxVisual; import com.simibubi.create.content.equipment.toolbox.ToolboxBlockEntity; import com.simibubi.create.content.equipment.toolbox.ToolboxRenderer; import com.simibubi.create.content.fluids.drain.ItemDrainBlockEntity; @@ -61,99 +61,99 @@ import com.simibubi.create.content.fluids.pipes.SmartFluidPipeBlockEntity; import com.simibubi.create.content.fluids.pipes.StraightPipeBlockEntity; import com.simibubi.create.content.fluids.pipes.TransparentStraightPipeRenderer; import com.simibubi.create.content.fluids.pipes.valve.FluidValveBlockEntity; -import com.simibubi.create.content.fluids.pipes.valve.FluidValveInstance; import com.simibubi.create.content.fluids.pipes.valve.FluidValveRenderer; +import com.simibubi.create.content.fluids.pipes.valve.FluidValveVisual; import com.simibubi.create.content.fluids.pump.PumpBlockEntity; -import com.simibubi.create.content.fluids.pump.PumpCogInstance; +import com.simibubi.create.content.fluids.pump.PumpCogVisual; import com.simibubi.create.content.fluids.pump.PumpRenderer; import com.simibubi.create.content.fluids.spout.SpoutBlockEntity; import com.simibubi.create.content.fluids.spout.SpoutRenderer; import com.simibubi.create.content.fluids.tank.CreativeFluidTankBlockEntity; import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity; import com.simibubi.create.content.fluids.tank.FluidTankRenderer; -import com.simibubi.create.content.kinetics.base.CutoutRotatingInstance; -import com.simibubi.create.content.kinetics.base.HalfShaftInstance; -import com.simibubi.create.content.kinetics.base.HorizontalHalfShaftInstance; +import com.simibubi.create.content.kinetics.base.CutoutRotatingVisual; +import com.simibubi.create.content.kinetics.base.HalfShaftVisual; +import com.simibubi.create.content.kinetics.base.HorizontalHalfShaftVisual; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.content.kinetics.base.ShaftInstance; import com.simibubi.create.content.kinetics.base.ShaftRenderer; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.content.kinetics.belt.BeltBlockEntity; -import com.simibubi.create.content.kinetics.belt.BeltVisual; import com.simibubi.create.content.kinetics.belt.BeltRenderer; +import com.simibubi.create.content.kinetics.belt.BeltVisual; import com.simibubi.create.content.kinetics.chainDrive.ChainGearshiftBlockEntity; import com.simibubi.create.content.kinetics.clock.CuckooClockBlockEntity; import com.simibubi.create.content.kinetics.clock.CuckooClockRenderer; import com.simibubi.create.content.kinetics.crafter.MechanicalCrafterBlockEntity; import com.simibubi.create.content.kinetics.crafter.MechanicalCrafterRenderer; -import com.simibubi.create.content.kinetics.crafter.ShaftlessCogwheelInstance; +import com.simibubi.create.content.kinetics.crafter.ShaftlessCogwheelVisual; import com.simibubi.create.content.kinetics.crank.HandCrankBlockEntity; -import com.simibubi.create.content.kinetics.crank.HandCrankInstance; import com.simibubi.create.content.kinetics.crank.HandCrankRenderer; +import com.simibubi.create.content.kinetics.crank.HandCrankVisual; import com.simibubi.create.content.kinetics.crank.ValveHandleBlockEntity; import com.simibubi.create.content.kinetics.crusher.CrushingWheelBlockEntity; import com.simibubi.create.content.kinetics.crusher.CrushingWheelControllerBlockEntity; import com.simibubi.create.content.kinetics.deployer.DeployerBlockEntity; -import com.simibubi.create.content.kinetics.deployer.DeployerInstance; import com.simibubi.create.content.kinetics.deployer.DeployerRenderer; +import com.simibubi.create.content.kinetics.deployer.DeployerVisual; import com.simibubi.create.content.kinetics.drill.DrillBlockEntity; -import com.simibubi.create.content.kinetics.drill.DrillInstance; import com.simibubi.create.content.kinetics.drill.DrillRenderer; +import com.simibubi.create.content.kinetics.drill.DrillVisual; import com.simibubi.create.content.kinetics.fan.EncasedFanBlockEntity; import com.simibubi.create.content.kinetics.fan.EncasedFanRenderer; -import com.simibubi.create.content.kinetics.fan.FanInstance; +import com.simibubi.create.content.kinetics.fan.FanVisual; import com.simibubi.create.content.kinetics.fan.NozzleBlockEntity; import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity; -import com.simibubi.create.content.kinetics.flywheel.FlywheelInstance; import com.simibubi.create.content.kinetics.flywheel.FlywheelRenderer; +import com.simibubi.create.content.kinetics.flywheel.FlywheelVisual; import com.simibubi.create.content.kinetics.gantry.GantryShaftBlockEntity; -import com.simibubi.create.content.kinetics.gauge.GaugeInstance; import com.simibubi.create.content.kinetics.gauge.GaugeRenderer; +import com.simibubi.create.content.kinetics.gauge.GaugeVisual; import com.simibubi.create.content.kinetics.gauge.SpeedGaugeBlockEntity; import com.simibubi.create.content.kinetics.gauge.StressGaugeBlockEntity; import com.simibubi.create.content.kinetics.gearbox.GearboxBlockEntity; -import com.simibubi.create.content.kinetics.gearbox.GearboxInstance; import com.simibubi.create.content.kinetics.gearbox.GearboxRenderer; +import com.simibubi.create.content.kinetics.gearbox.GearboxVisual; import com.simibubi.create.content.kinetics.mechanicalArm.ArmBlockEntity; -import com.simibubi.create.content.kinetics.mechanicalArm.ArmInstance; import com.simibubi.create.content.kinetics.mechanicalArm.ArmRenderer; +import com.simibubi.create.content.kinetics.mechanicalArm.ArmVisual; import com.simibubi.create.content.kinetics.millstone.MillstoneBlockEntity; -import com.simibubi.create.content.kinetics.millstone.MillstoneCogInstance; +import com.simibubi.create.content.kinetics.millstone.MillstoneCogVisual; import com.simibubi.create.content.kinetics.millstone.MillstoneRenderer; import com.simibubi.create.content.kinetics.mixer.MechanicalMixerBlockEntity; import com.simibubi.create.content.kinetics.mixer.MechanicalMixerRenderer; -import com.simibubi.create.content.kinetics.mixer.MixerInstance; +import com.simibubi.create.content.kinetics.mixer.MixerVisual; import com.simibubi.create.content.kinetics.motor.CreativeMotorBlockEntity; import com.simibubi.create.content.kinetics.motor.CreativeMotorRenderer; import com.simibubi.create.content.kinetics.press.MechanicalPressBlockEntity; import com.simibubi.create.content.kinetics.press.MechanicalPressRenderer; -import com.simibubi.create.content.kinetics.press.PressInstance; +import com.simibubi.create.content.kinetics.press.PressVisual; import com.simibubi.create.content.kinetics.saw.SawBlockEntity; -import com.simibubi.create.content.kinetics.saw.SawInstance; import com.simibubi.create.content.kinetics.saw.SawRenderer; +import com.simibubi.create.content.kinetics.saw.SawVisual; import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntity; -import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntityInstance; import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntityRenderer; +import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntityVisual; import com.simibubi.create.content.kinetics.simpleRelays.SimpleKineticBlockEntity; -import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogInstance; import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogRenderer; +import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogVisual; import com.simibubi.create.content.kinetics.speedController.SpeedControllerBlockEntity; import com.simibubi.create.content.kinetics.speedController.SpeedControllerRenderer; import com.simibubi.create.content.kinetics.steamEngine.PoweredShaftBlockEntity; import com.simibubi.create.content.kinetics.steamEngine.SteamEngineBlockEntity; -import com.simibubi.create.content.kinetics.steamEngine.SteamEngineInstance; import com.simibubi.create.content.kinetics.steamEngine.SteamEngineRenderer; +import com.simibubi.create.content.kinetics.steamEngine.SteamEngineVisual; import com.simibubi.create.content.kinetics.transmission.ClutchBlockEntity; import com.simibubi.create.content.kinetics.transmission.GearshiftBlockEntity; -import com.simibubi.create.content.kinetics.transmission.SplitShaftInstance; import com.simibubi.create.content.kinetics.transmission.SplitShaftRenderer; +import com.simibubi.create.content.kinetics.transmission.SplitShaftVisual; import com.simibubi.create.content.kinetics.transmission.sequencer.SequencedGearshiftBlockEntity; import com.simibubi.create.content.kinetics.turntable.TurntableBlockEntity; import com.simibubi.create.content.kinetics.waterwheel.LargeWaterWheelBlockEntity; import com.simibubi.create.content.kinetics.waterwheel.WaterWheelBlockEntity; -import com.simibubi.create.content.kinetics.waterwheel.WaterWheelInstance; import com.simibubi.create.content.kinetics.waterwheel.WaterWheelRenderer; +import com.simibubi.create.content.kinetics.waterwheel.WaterWheelVisual; import com.simibubi.create.content.logistics.chute.ChuteBlockEntity; import com.simibubi.create.content.logistics.chute.ChuteRenderer; import com.simibubi.create.content.logistics.chute.SmartChuteBlockEntity; @@ -162,14 +162,14 @@ import com.simibubi.create.content.logistics.crate.CreativeCrateBlockEntity; import com.simibubi.create.content.logistics.depot.DepotBlockEntity; import com.simibubi.create.content.logistics.depot.DepotRenderer; import com.simibubi.create.content.logistics.depot.EjectorBlockEntity; -import com.simibubi.create.content.logistics.depot.EjectorInstance; import com.simibubi.create.content.logistics.depot.EjectorRenderer; +import com.simibubi.create.content.logistics.depot.EjectorVisual; import com.simibubi.create.content.logistics.funnel.FunnelBlockEntity; -import com.simibubi.create.content.logistics.funnel.FunnelInstance; import com.simibubi.create.content.logistics.funnel.FunnelRenderer; +import com.simibubi.create.content.logistics.funnel.FunnelVisual; import com.simibubi.create.content.logistics.tunnel.BeltTunnelBlockEntity; -import com.simibubi.create.content.logistics.tunnel.BeltTunnelInstance; import com.simibubi.create.content.logistics.tunnel.BeltTunnelRenderer; +import com.simibubi.create.content.logistics.tunnel.BeltTunnelVisual; import com.simibubi.create.content.logistics.tunnel.BrassTunnelBlockEntity; import com.simibubi.create.content.logistics.vault.ItemVaultBlockEntity; import com.simibubi.create.content.processing.basin.BasinBlockEntity; @@ -177,10 +177,10 @@ import com.simibubi.create.content.processing.basin.BasinRenderer; import com.simibubi.create.content.processing.burner.BlazeBurnerBlockEntity; import com.simibubi.create.content.processing.burner.BlazeBurnerRenderer; import com.simibubi.create.content.redstone.analogLever.AnalogLeverBlockEntity; -import com.simibubi.create.content.redstone.analogLever.AnalogLeverInstance; import com.simibubi.create.content.redstone.analogLever.AnalogLeverRenderer; -import com.simibubi.create.content.redstone.diodes.BrassDiodeInstance; +import com.simibubi.create.content.redstone.analogLever.AnalogLeverVisual; import com.simibubi.create.content.redstone.diodes.BrassDiodeRenderer; +import com.simibubi.create.content.redstone.diodes.BrassDiodeVisual; import com.simibubi.create.content.redstone.diodes.PulseExtenderBlockEntity; import com.simibubi.create.content.redstone.diodes.PulseRepeaterBlockEntity; import com.simibubi.create.content.redstone.displayLink.DisplayLinkBlockEntity; @@ -195,8 +195,8 @@ import com.simibubi.create.content.redstone.nixieTube.NixieTubeRenderer; import com.simibubi.create.content.redstone.smartObserver.SmartObserverBlockEntity; import com.simibubi.create.content.redstone.thresholdSwitch.ThresholdSwitchBlockEntity; import com.simibubi.create.content.schematics.cannon.SchematicannonBlockEntity; -import com.simibubi.create.content.schematics.cannon.SchematicannonInstance; import com.simibubi.create.content.schematics.cannon.SchematicannonRenderer; +import com.simibubi.create.content.schematics.cannon.SchematicannonVisual; import com.simibubi.create.content.schematics.table.SchematicTableBlockEntity; import com.simibubi.create.content.trains.bogey.BogeyBlockEntityRenderer; import com.simibubi.create.content.trains.bogey.StandardBogeyBlockEntity; @@ -210,9 +210,9 @@ import com.simibubi.create.content.trains.station.StationBlockEntity; import com.simibubi.create.content.trains.station.StationRenderer; import com.simibubi.create.content.trains.track.FakeTrackBlockEntity; import com.simibubi.create.content.trains.track.TrackBlockEntity; -import com.simibubi.create.content.trains.track.TrackInstance; import com.simibubi.create.content.trains.track.TrackMaterial; import com.simibubi.create.content.trains.track.TrackRenderer; +import com.simibubi.create.content.trains.track.TrackVisual; import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; import com.tterrag.registrate.util.entry.BlockEntityEntry; @@ -221,7 +221,7 @@ public class AllBlockEntityTypes { // Schematics public static final BlockEntityEntry SCHEMATICANNON = REGISTRATE .blockEntity("schematicannon", SchematicannonBlockEntity::new) - .instance(() -> SchematicannonInstance::new) + .instance(() -> SchematicannonVisual::new) .validBlocks(AllBlocks.SCHEMATICANNON) .renderer(() -> SchematicannonRenderer::new) .register(); @@ -234,28 +234,28 @@ public class AllBlockEntityTypes { // Kinetics public static final BlockEntityEntry BRACKETED_KINETIC = REGISTRATE .blockEntity("simple_kinetic", BracketedKineticBlockEntity::new) - .instance(() -> BracketedKineticBlockEntityInstance::new, false) + .instance(() -> BracketedKineticBlockEntityVisual::new, false) .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL) .renderer(() -> BracketedKineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry MOTOR = REGISTRATE .blockEntity("motor", CreativeMotorBlockEntity::new) - .instance(() -> HalfShaftInstance::new, false) + .instance(() -> HalfShaftVisual::new, false) .validBlocks(AllBlocks.CREATIVE_MOTOR) .renderer(() -> CreativeMotorRenderer::new) .register(); public static final BlockEntityEntry GEARBOX = REGISTRATE .blockEntity("gearbox", GearboxBlockEntity::new) - .instance(() -> GearboxInstance::new, false) + .instance(() -> GearboxVisual::new, false) .validBlocks(AllBlocks.GEARBOX) .renderer(() -> GearboxRenderer::new) .register(); public static final BlockEntityEntry ENCASED_SHAFT = REGISTRATE .blockEntity("encased_shaft", KineticBlockEntity::new) - .instance(() -> ShaftInstance::new, false) + .instance(() -> ShaftVisual::new, false) .validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE, AllBlocks.METAL_GIRDER_ENCASED_SHAFT) .renderer(() -> ShaftRenderer::new) @@ -263,28 +263,28 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry ENCASED_COGWHEEL = REGISTRATE .blockEntity("encased_cogwheel", SimpleKineticBlockEntity::new) - .instance(() -> EncasedCogInstance::small, false) + .instance(() -> EncasedCogVisual::small, false) .validBlocks(AllBlocks.ANDESITE_ENCASED_COGWHEEL, AllBlocks.BRASS_ENCASED_COGWHEEL) .renderer(() -> EncasedCogRenderer::small) .register(); public static final BlockEntityEntry ENCASED_LARGE_COGWHEEL = REGISTRATE .blockEntity("encased_large_cogwheel", SimpleKineticBlockEntity::new) - .instance(() -> EncasedCogInstance::large, false) + .instance(() -> EncasedCogVisual::large, false) .validBlocks(AllBlocks.ANDESITE_ENCASED_LARGE_COGWHEEL, AllBlocks.BRASS_ENCASED_LARGE_COGWHEEL) .renderer(() -> EncasedCogRenderer::large) .register(); public static final BlockEntityEntry ADJUSTABLE_CHAIN_GEARSHIFT = REGISTRATE .blockEntity("adjustable_chain_gearshift", ChainGearshiftBlockEntity::new) - .instance(() -> ShaftInstance::new, false) + .instance(() -> ShaftVisual::new, false) .validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT) .renderer(() -> ShaftRenderer::new) .register(); public static final BlockEntityEntry ENCASED_FAN = REGISTRATE .blockEntity("encased_fan", EncasedFanBlockEntity::new) - .instance(() -> FanInstance::new, false) + .instance(() -> FanVisual::new, false) .validBlocks(AllBlocks.ENCASED_FAN) .renderer(() -> EncasedFanRenderer::new) .register(); @@ -297,35 +297,35 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry CLUTCH = REGISTRATE .blockEntity("clutch", ClutchBlockEntity::new) - .instance(() -> SplitShaftInstance::new, false) + .instance(() -> SplitShaftVisual::new, false) .validBlocks(AllBlocks.CLUTCH) .renderer(() -> SplitShaftRenderer::new) .register(); public static final BlockEntityEntry GEARSHIFT = REGISTRATE .blockEntity("gearshift", GearshiftBlockEntity::new) - .instance(() -> SplitShaftInstance::new, false) + .instance(() -> SplitShaftVisual::new, false) .validBlocks(AllBlocks.GEARSHIFT) .renderer(() -> SplitShaftRenderer::new) .register(); public static final BlockEntityEntry TURNTABLE = REGISTRATE .blockEntity("turntable", TurntableBlockEntity::new) - .instance(() -> SingleRotatingInstance::new, false) + .instance(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.TURNTABLE) .renderer(() -> KineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry HAND_CRANK = REGISTRATE .blockEntity("hand_crank", HandCrankBlockEntity::new) - .instance(() -> HandCrankInstance::new) + .instance(() -> HandCrankVisual::new) .validBlocks(AllBlocks.HAND_CRANK) .renderer(() -> HandCrankRenderer::new) .register(); public static final BlockEntityEntry VALVE_HANDLE = REGISTRATE .blockEntity("valve_handle", ValveHandleBlockEntity::new) - .instance(() -> HandCrankInstance::new) + .instance(() -> HandCrankVisual::new) .validBlocks(AllBlocks.COPPER_VALVE_HANDLE) .validBlocks(AllBlocks.DYED_VALVE_HANDLES.toArray()) .renderer(() -> HandCrankRenderer::new) @@ -333,28 +333,28 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry CUCKOO_CLOCK = REGISTRATE .blockEntity("cuckoo_clock", CuckooClockBlockEntity::new) - .instance(() -> HorizontalHalfShaftInstance::new) + .instance(() -> HorizontalHalfShaftVisual::new) .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) .renderer(() -> CuckooClockRenderer::new) .register(); public static final BlockEntityEntry GANTRY_SHAFT = REGISTRATE .blockEntity("gantry_shaft", GantryShaftBlockEntity::new) - .instance(() -> SingleRotatingInstance::new, false) + .instance(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.GANTRY_SHAFT) .renderer(() -> KineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry GANTRY_PINION = REGISTRATE .blockEntity("gantry_pinion", GantryCarriageBlockEntity::new) - .instance(() -> GantryCarriageInstance::new) + .instance(() -> GantryCarriageVisual::new) .validBlocks(AllBlocks.GANTRY_CARRIAGE) .renderer(() -> GantryCarriageRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_PUMP = REGISTRATE .blockEntity("mechanical_pump", PumpBlockEntity::new) - .instance(() -> PumpCogInstance::new) + .instance(() -> PumpCogVisual::new) .validBlocks(AllBlocks.MECHANICAL_PUMP) .renderer(() -> PumpRenderer::new) .register(); @@ -383,7 +383,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry FLUID_VALVE = REGISTRATE .blockEntity("fluid_valve", FluidValveBlockEntity::new) - .instance(() -> FluidValveInstance::new) + .instance(() -> FluidValveVisual::new) .validBlocks(AllBlocks.FLUID_VALVE) .renderer(() -> FluidValveRenderer::new) .register(); @@ -402,7 +402,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry HOSE_PULLEY = REGISTRATE .blockEntity("hose_pulley", HosePulleyBlockEntity::new) - .instance(() -> HosePulleyInstance::new) + .instance(() -> HosePulleyVisual::new) .validBlocks(AllBlocks.HOSE_PULLEY) .renderer(() -> HosePulleyRenderer::new) .register(); @@ -440,21 +440,21 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry ANDESITE_TUNNEL = REGISTRATE .blockEntity("andesite_tunnel", BeltTunnelBlockEntity::new) - .instance(() -> BeltTunnelInstance::new) + .instance(() -> BeltTunnelVisual::new) .validBlocks(AllBlocks.ANDESITE_TUNNEL) .renderer(() -> BeltTunnelRenderer::new) .register(); public static final BlockEntityEntry BRASS_TUNNEL = REGISTRATE .blockEntity("brass_tunnel", BrassTunnelBlockEntity::new) - .instance(() -> BeltTunnelInstance::new) + .instance(() -> BeltTunnelVisual::new) .validBlocks(AllBlocks.BRASS_TUNNEL) .renderer(() -> BeltTunnelRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_ARM = REGISTRATE .blockEntity("mechanical_arm", ArmBlockEntity::new) - .instance(() -> ArmInstance::new) + .instance(() -> ArmVisual::new) .validBlocks(AllBlocks.MECHANICAL_ARM) .renderer(() -> ArmRenderer::new) .register(); @@ -466,35 +466,35 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry MECHANICAL_PISTON = REGISTRATE .blockEntity("mechanical_piston", MechanicalPistonBlockEntity::new) - .instance(() -> ShaftInstance::new, false) + .instance(() -> ShaftVisual::new, false) .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) .renderer(() -> MechanicalPistonRenderer::new) .register(); public static final BlockEntityEntry WINDMILL_BEARING = REGISTRATE .blockEntity("windmill_bearing", WindmillBearingBlockEntity::new) - .instance(() -> BearingInstance::new) + .instance(() -> BearingVisual::new) .validBlocks(AllBlocks.WINDMILL_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_BEARING = REGISTRATE .blockEntity("mechanical_bearing", MechanicalBearingBlockEntity::new) - .instance(() -> BearingInstance::new) + .instance(() -> BearingVisual::new) .validBlocks(AllBlocks.MECHANICAL_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final BlockEntityEntry CLOCKWORK_BEARING = REGISTRATE .blockEntity("clockwork_bearing", ClockworkBearingBlockEntity::new) - .instance(() -> BearingInstance::new) + .instance(() -> BearingVisual::new) .validBlocks(AllBlocks.CLOCKWORK_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final BlockEntityEntry ROPE_PULLEY = REGISTRATE .blockEntity("rope_pulley", PulleyBlockEntity::new) - .instance(() -> RopePulleyInstance::new, false) + .instance(() -> RopePulleyVisual::new, false) .validBlocks(AllBlocks.ROPE_PULLEY) .renderer(() -> PulleyRenderer::new) .register(); @@ -519,7 +519,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry STICKER = REGISTRATE .blockEntity("sticker", StickerBlockEntity::new) - .instance(() -> StickerInstance::new, false) + .instance(() -> StickerVisual::new, false) .validBlocks(AllBlocks.STICKER) .renderer(() -> StickerRenderer::new) .register(); @@ -532,14 +532,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry DRILL = REGISTRATE .blockEntity("drill", DrillBlockEntity::new) - .instance(() -> DrillInstance::new, false) + .instance(() -> DrillVisual::new, false) .validBlocks(AllBlocks.MECHANICAL_DRILL) .renderer(() -> DrillRenderer::new) .register(); public static final BlockEntityEntry SAW = REGISTRATE .blockEntity("saw", SawBlockEntity::new) - .instance(() -> SawInstance::new) + .instance(() -> SawVisual::new) .validBlocks(AllBlocks.MECHANICAL_SAW) .renderer(() -> SawRenderer::new) .register(); @@ -559,7 +559,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry PORTABLE_STORAGE_INTERFACE = REGISTRATE .blockEntity("portable_storage_interface", PortableItemInterfaceBlockEntity::new) - .instance(() -> PSIInstance::new) + .instance(() -> PSIVisual::new) .validBlocks(AllBlocks.PORTABLE_STORAGE_INTERFACE) .renderer(() -> PortableStorageInterfaceRenderer::new) .register(); @@ -567,14 +567,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry PORTABLE_FLUID_INTERFACE = REGISTRATE .blockEntity("portable_fluid_interface", PortableFluidInterfaceBlockEntity::new) - .instance(() -> PSIInstance::new) + .instance(() -> PSIVisual::new) .validBlocks(AllBlocks.PORTABLE_FLUID_INTERFACE) .renderer(() -> PortableStorageInterfaceRenderer::new) .register(); public static final BlockEntityEntry STEAM_ENGINE = REGISTRATE .blockEntity("steam_engine", SteamEngineBlockEntity::new) - .instance(() -> SteamEngineInstance::new, false) + .instance(() -> SteamEngineVisual::new, false) .validBlocks(AllBlocks.STEAM_ENGINE) .renderer(() -> SteamEngineRenderer::new) .register(); @@ -587,28 +587,28 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry POWERED_SHAFT = REGISTRATE .blockEntity("powered_shaft", PoweredShaftBlockEntity::new) - .instance(() -> SingleRotatingInstance::new, false) + .instance(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.POWERED_SHAFT) .renderer(() -> KineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry FLYWHEEL = REGISTRATE .blockEntity("flywheel", FlywheelBlockEntity::new) - .instance(() -> FlywheelInstance::new, false) + .instance(() -> FlywheelVisual::new, false) .validBlocks(AllBlocks.FLYWHEEL) .renderer(() -> FlywheelRenderer::new) .register(); public static final BlockEntityEntry MILLSTONE = REGISTRATE .blockEntity("millstone", MillstoneBlockEntity::new) - .instance(() -> MillstoneCogInstance::new, false) + .instance(() -> MillstoneCogVisual::new, false) .validBlocks(AllBlocks.MILLSTONE) .renderer(() -> MillstoneRenderer::new) .register(); public static final BlockEntityEntry CRUSHING_WHEEL = REGISTRATE .blockEntity("crushing_wheel", CrushingWheelBlockEntity::new) - .instance(() -> CutoutRotatingInstance::new, false) + .instance(() -> CutoutRotatingVisual::new, false) .validBlocks(AllBlocks.CRUSHING_WHEEL) .renderer(() -> KineticBlockEntityRenderer::new) .register(); @@ -622,35 +622,35 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry WATER_WHEEL = REGISTRATE .blockEntity("water_wheel", WaterWheelBlockEntity::new) - .instance(() -> WaterWheelInstance::standard, false) + .instance(() -> WaterWheelVisual::standard, false) .validBlocks(AllBlocks.WATER_WHEEL) .renderer(() -> WaterWheelRenderer::standard) .register(); public static final BlockEntityEntry LARGE_WATER_WHEEL = REGISTRATE .blockEntity("large_water_wheel", LargeWaterWheelBlockEntity::new) - .instance(() -> WaterWheelInstance::large, false) + .instance(() -> WaterWheelVisual::large, false) .validBlocks(AllBlocks.LARGE_WATER_WHEEL) .renderer(() -> WaterWheelRenderer::large) .register(); public static final BlockEntityEntry MECHANICAL_PRESS = REGISTRATE .blockEntity("mechanical_press", MechanicalPressBlockEntity::new) - .instance(() -> PressInstance::new) + .instance(() -> PressVisual::new) .validBlocks(AllBlocks.MECHANICAL_PRESS) .renderer(() -> MechanicalPressRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_MIXER = REGISTRATE .blockEntity("mechanical_mixer", MechanicalMixerBlockEntity::new) - .instance(() -> MixerInstance::new) + .instance(() -> MixerVisual::new) .validBlocks(AllBlocks.MECHANICAL_MIXER) .renderer(() -> MechanicalMixerRenderer::new) .register(); public static final BlockEntityEntry DEPLOYER = REGISTRATE .blockEntity("deployer", DeployerBlockEntity::new) - .instance(() -> DeployerInstance::new) + .instance(() -> DeployerVisual::new) .validBlocks(AllBlocks.DEPLOYER) .renderer(() -> DeployerRenderer::new) .register(); @@ -669,42 +669,42 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry MECHANICAL_CRAFTER = REGISTRATE .blockEntity("mechanical_crafter", MechanicalCrafterBlockEntity::new) - .instance(() -> ShaftlessCogwheelInstance::new) + .instance(() -> ShaftlessCogwheelVisual::new) .validBlocks(AllBlocks.MECHANICAL_CRAFTER) .renderer(() -> MechanicalCrafterRenderer::new) .register(); public static final BlockEntityEntry SEQUENCED_GEARSHIFT = REGISTRATE .blockEntity("sequenced_gearshift", SequencedGearshiftBlockEntity::new) - .instance(() -> SplitShaftInstance::new, false) + .instance(() -> SplitShaftVisual::new, false) .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) .renderer(() -> SplitShaftRenderer::new) .register(); public static final BlockEntityEntry ROTATION_SPEED_CONTROLLER = REGISTRATE .blockEntity("rotation_speed_controller", SpeedControllerBlockEntity::new) - .instance(() -> ShaftInstance::new) + .instance(() -> ShaftVisual::new) .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) .renderer(() -> SpeedControllerRenderer::new) .register(); public static final BlockEntityEntry SPEEDOMETER = REGISTRATE .blockEntity("speedometer", SpeedGaugeBlockEntity::new) - .instance(() -> GaugeInstance.Speed::new) + .instance(() -> GaugeVisual.Speed::new) .validBlocks(AllBlocks.SPEEDOMETER) .renderer(() -> GaugeRenderer::speed) .register(); public static final BlockEntityEntry STRESSOMETER = REGISTRATE .blockEntity("stressometer", StressGaugeBlockEntity::new) - .instance(() -> GaugeInstance.Stress::new) + .instance(() -> GaugeVisual.Stress::new) .validBlocks(AllBlocks.STRESSOMETER) .renderer(() -> GaugeRenderer::stress) .register(); public static final BlockEntityEntry ANALOG_LEVER = REGISTRATE .blockEntity("analog_lever", AnalogLeverBlockEntity::new) - .instance(() -> AnalogLeverInstance::new, false) + .instance(() -> AnalogLeverVisual::new, false) .validBlocks(AllBlocks.ANALOG_LEVER) .renderer(() -> AnalogLeverRenderer::new) .register(); @@ -763,14 +763,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry WEIGHTED_EJECTOR = REGISTRATE .blockEntity("weighted_ejector", EjectorBlockEntity::new) - .instance(() -> EjectorInstance::new) + .instance(() -> EjectorVisual::new) .validBlocks(AllBlocks.WEIGHTED_EJECTOR) .renderer(() -> EjectorRenderer::new) .register(); public static final BlockEntityEntry FUNNEL = REGISTRATE .blockEntity("funnel", FunnelBlockEntity::new) - .instance(() -> FunnelInstance::new) + .instance(() -> FunnelVisual::new) .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL) .renderer(() -> FunnelRenderer::new) @@ -784,14 +784,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry PULSE_EXTENDER = REGISTRATE .blockEntity("pulse_extender", PulseExtenderBlockEntity::new) - .instance(() -> BrassDiodeInstance::new, false) + .instance(() -> BrassDiodeVisual::new, false) .validBlocks(AllBlocks.PULSE_EXTENDER) .renderer(() -> BrassDiodeRenderer::new) .register(); public static final BlockEntityEntry PULSE_REPEATER = REGISTRATE .blockEntity("pulse_repeater", PulseRepeaterBlockEntity::new) - .instance(() -> BrassDiodeInstance::new, false) + .instance(() -> BrassDiodeVisual::new, false) .validBlocks(AllBlocks.PULSE_REPEATER) .renderer(() -> BrassDiodeRenderer::new) .register(); @@ -805,7 +805,7 @@ public class AllBlockEntityTypes { // Curiosities public static final BlockEntityEntry BACKTANK = REGISTRATE .blockEntity("backtank", BacktankBlockEntity::new) - .instance(() -> BacktankInstance::new) + .instance(() -> BacktankVisual::new) .validBlocks(AllBlocks.COPPER_BACKTANK, AllBlocks.NETHERITE_BACKTANK) .renderer(() -> BacktankRenderer::new) .register(); @@ -824,14 +824,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry TOOLBOX = REGISTRATE .blockEntity("toolbox", ToolboxBlockEntity::new) - .instance(() -> ToolBoxInstance::new, false) + .instance(() -> ToolBoxVisual::new, false) .validBlocks(AllBlocks.TOOLBOXES.toArray()) .renderer(() -> ToolboxRenderer::new) .register(); public static final BlockEntityEntry TRACK = REGISTRATE .blockEntity("track", TrackBlockEntity::new) - .instance(() -> TrackInstance::new) + .instance(() -> TrackVisual::new) .validBlocksDeferred(TrackMaterial::allBlocks) .renderer(() -> TrackRenderer::new) .register(); @@ -867,7 +867,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry FLAP_DISPLAY = REGISTRATE .blockEntity("flap_display", FlapDisplayBlockEntity::new) - .instance(() -> ShaftlessCogwheelInstance::new) + .instance(() -> ShaftlessCogwheelVisual::new) .renderer(() -> FlapDisplayRenderer::new) .validBlocks(AllBlocks.DISPLAY_BOARD) .register(); diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index 5d6b70220b..e8967cbefd 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -15,7 +15,7 @@ import com.simibubi.create.content.equipment.potatoCannon.PotatoProjectileEntity import com.simibubi.create.content.equipment.potatoCannon.PotatoProjectileRenderer; import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; import com.simibubi.create.content.trains.entity.CarriageContraptionEntityRenderer; -import com.simibubi.create.content.trains.entity.CarriageContraptionInstance; +import com.simibubi.create.content.trains.entity.CarriageContraptionVisual; import com.simibubi.create.foundation.data.CreateEntityBuilder; import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.util.entry.EntityEntry; @@ -41,7 +41,7 @@ public class AllEntityTypes { GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, 10, 40, false).register(); public static final EntityEntry CARRIAGE_CONTRAPTION = contraption("carriage_contraption", CarriageContraptionEntity::new, - () -> CarriageContraptionEntityRenderer::new, 15, 3, true).instance(() -> CarriageContraptionInstance::new) + () -> CarriageContraptionEntityRenderer::new, 15, 3, true).instance(() -> CarriageContraptionVisual::new) .register(); public static final EntityEntry SUPER_GLUE = diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java index 2f13b9502f..7d375cfc92 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.actors.flwdata; +package com.simibubi.create.content.contraptions.actors; import org.joml.Quaternionf; import org.joml.Vector3f; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/package-info.java b/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/package-info.java deleted file mode 100644 index 0498b1729e..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/flwdata/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -@ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -package com.simibubi.create.content.contraptions.actors.flwdata; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java similarity index 87% rename from src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 788e45f279..5d1f447c3e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -8,7 +8,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; @@ -18,9 +18,8 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.model.data.ModelData; -public class HarvesterActorInstance extends ActorInstance { +public class HarvesterActorVisual extends ActorVisual { static float originOffset = 1 / 16f; static Vec3 rotOffset = new Vec3(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f); @@ -32,10 +31,10 @@ public class HarvesterActorInstance extends ActorInstance { private double rotation; private double previousRotation; - public HarvesterActorInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { - super(materialManager, simulationWorld, context); + public HarvesterActorVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { + super(visualizationContext, simulationWorld, movementContext); - BlockState state = context.state; + BlockState state = movementContext.state; facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java index 387d4b03d1..bfb95fe824 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java @@ -7,7 +7,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.item.ItemHelper; @@ -52,9 +52,9 @@ public class HarvesterMovementBehaviour implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { - return new HarvesterActorInstance(materialManager, simulationWorld, context); + public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + return new HarvesterActorVisual(visualizationContext, simulationWorld, movementContext); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java similarity index 67% rename from src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index f698c4f155..04f905b83e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -2,19 +2,19 @@ package com.simibubi.create.content.contraptions.actors.psi; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; -public class PSIActorInstance extends ActorInstance { +public class PSIActorVisual extends ActorVisual { private final PIInstance instance; - public PSIActorInstance(VisualizationContext materialManager, VirtualRenderWorld world, MovementContext context) { - super(materialManager, world, context); + public PSIActorVisual(VisualizationContext context, VirtualRenderWorld world, MovementContext movementContext) { + super(context, world, movementContext); - instance = new PIInstance(materialManager.instancerProvider(), context.state, context.localPos); + instance = new PIInstance(context.instancerProvider(), movementContext.state, movementContext.localPos); instance.init(false); instance.middle.setBlockLight(localBlockLight()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java similarity index 85% rename from src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 2953b5f1c3..0d23f1f3ef 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -11,11 +11,11 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PSIInstance extends AbstractBlockEntityVisual implements DynamicVisual, TickableVisual { +public class PSIVisual extends AbstractBlockEntityVisual implements DynamicVisual, TickableVisual { private final PIInstance instance; - public PSIInstance(VisualizationContext visualizationContext, PortableStorageInterfaceBlockEntity blockEntity) { + public PSIVisual(VisualizationContext visualizationContext, PortableStorageInterfaceBlockEntity blockEntity) { super(visualizationContext, blockEntity); instance = new PIInstance(visualizationContext.instancerProvider(), blockState, getVisualPosition()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java index db45d8b556..1f9310c4dc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.trains.entity.CarriageContraption; @@ -46,9 +46,9 @@ public class PortableStorageInterfaceMovement implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { - return new PSIActorInstance(materialManager, simulationWorld, context); + public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + return new PSIActorVisual(visualizationContext, simulationWorld, movementContext); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java similarity index 83% rename from src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java index 8c5d26b5eb..08bfba3a40 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java @@ -7,20 +7,19 @@ import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.contraptions.actors.harvester.HarvesterActorInstance; +import com.simibubi.create.content.contraptions.actors.harvester.HarvesterActorVisual; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.model.data.ModelData; -public class RollerActorInstance extends HarvesterActorInstance { +public class RollerActorVisual extends HarvesterActorVisual { TransformedInstance frame; - public RollerActorInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { - super(materialManager, simulationWorld, context); + public RollerActorVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + super(visualizationContext, simulationWorld, movementContext); frame = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ROLLER_FRAME), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java index d22578fa07..2c30041de4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java @@ -14,7 +14,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.actors.roller.RollerBlockEntity.RollingMode; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.pulley.PulleyContraption; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; @@ -76,9 +76,9 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { @Nullable @Override - public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { - return new RollerActorInstance(materialManager, simulationWorld, context); + public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + return new RollerActorVisual(visualizationContext, simulationWorld, movementContext); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java similarity index 89% rename from src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index 1696536be6..48fe53dc06 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -15,7 +15,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.BackHalfShaftInstance; +import com.simibubi.create.content.kinetics.base.BackHalfShaftVisual; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -23,14 +23,14 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class BearingInstance extends BackHalfShaftInstance implements DynamicVisual { +public class BearingVisual extends BackHalfShaftVisual implements DynamicVisual { final OrientedInstance topInstance; final Axis rotationAxis; final Quaternionf blockOrientation; - public BearingInstance(VisualizationContext materialManager, B blockEntity) { - super(materialManager, blockEntity); + public BearingVisual(VisualizationContext context, B blockEntity) { + super(context, blockEntity); Direction facing = blockState.getValue(BlockStateProperties.FACING); rotationAxis = Axis.of(Direction.get(Direction.AxisDirection.POSITIVE, axis).step()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java index 4920a7ee3c..2d7b970bcf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java @@ -13,7 +13,7 @@ import com.simibubi.create.content.contraptions.ControlledContraptionEntity; import com.simibubi.create.content.contraptions.OrientedContraptionEntity; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; @@ -49,7 +49,7 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { float renderPartialTicks = AnimationTickHolder.getPartialTicks(); // rotate to match blockstate - Quaternionf orientation = BearingInstance.getBlockStateOrientation(facing); + Quaternionf orientation = BearingVisual.getBlockStateOrientation(facing); // rotate against parent float angle = getCounterRotationAngle(context, facing, renderPartialTicks) * facing.getAxisDirection() @@ -78,9 +78,9 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { - return new StabilizedBearingInstance(materialManager, simulationWorld, context); + public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + return new StabilizedBearingVisual(visualizationContext, simulationWorld, movementContext); } static float getCounterRotationAngle(MovementContext context, Direction facing, float renderPartialTicks) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java similarity index 80% rename from src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index d59c50c125..81a0e6f7cc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -10,7 +10,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -20,7 +20,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class StabilizedBearingInstance extends ActorInstance { +public class StabilizedBearingVisual extends ActorVisual { final OrientedInstance topInstance; final RotatingInstance shaft; @@ -29,21 +29,21 @@ public class StabilizedBearingInstance extends ActorInstance { final Axis rotationAxis; final Quaternionf blockOrientation; - public StabilizedBearingInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { - super(materialManager, simulationWorld, context); + public StabilizedBearingVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { + super(visualizationContext, simulationWorld, movementContext); - BlockState blockState = context.state; + BlockState blockState = movementContext.state; facing = blockState.getValue(BlockStateProperties.FACING); rotationAxis = Axis.of(Direction.get(Direction.AxisDirection.POSITIVE, facing.getAxis()).step()); - blockOrientation = BearingInstance.getBlockStateOrientation(facing); + blockOrientation = BearingVisual.getBlockStateOrientation(facing); topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.BEARING_TOP), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); int blockLight = localBlockLight(); - topInstance.setPosition(context.localPos) + topInstance.setPosition(movementContext.localPos) .setRotation(blockOrientation) .setBlockLight(blockLight); @@ -51,7 +51,7 @@ public class StabilizedBearingInstance extends ActorInstance { .createInstance(); // not rotating so no need to set speed, axis, etc. - shaft.setPosition(context.localPos) + shaft.setPosition(movementContext.localPos) .setBlockLight(blockLight); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java index 18832dfea6..64cdc9f929 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.behaviour; import javax.annotation.Nullable; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; @@ -94,8 +94,8 @@ public interface MovementBehaviour { @OnlyIn(Dist.CLIENT) @Nullable - default ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { + default ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { return null; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java similarity index 87% rename from src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 8602c68442..8432be25a6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -13,13 +13,12 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class StickerInstance extends AbstractBlockEntityVisual implements DynamicVisual { +public class StickerVisual extends AbstractBlockEntityVisual implements DynamicVisual { float lastOffset = Float.NaN; final Direction facing; @@ -28,8 +27,8 @@ public class StickerInstance extends AbstractBlockEntityVisual implements DynamicVisual, TickingLightListener { +public class ElevatorPulleyVisual extends ShaftVisual implements DynamicVisual, TickingLightListener { - public ElevatorPulleyInstance(VisualizationContext materialManager, ElevatorPulleyBlockEntity blockEntity) { - super(materialManager, blockEntity); + public ElevatorPulleyVisual(VisualizationContext context, ElevatorPulleyBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java similarity index 90% rename from src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 2d533c6b38..6703e14d62 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -12,16 +12,15 @@ import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -import net.minecraftforge.client.model.data.ModelData; -public class GantryCarriageInstance extends ShaftInstance implements DynamicVisual { +public class GantryCarriageVisual extends ShaftVisual implements DynamicVisual { private final TransformedInstance gantryCogs; @@ -33,8 +32,8 @@ public class GantryCarriageInstance extends ShaftInstance extends ShaftInstance implements DynamicVisual, TickingLightListener { +public abstract class AbstractPulleyVisual extends ShaftVisual implements DynamicVisual, TickingLightListener { final OrientedInstance coil; final SelectInstance magnet; @@ -39,7 +39,7 @@ public abstract class AbstractPulleyInstance exten private final MutableBox volume = new MutableBox(); private final LightVolume light; - public AbstractPulleyInstance(VisualizationContext dispatcher, T blockEntity) { + public AbstractPulleyVisual(VisualizationContext dispatcher, T blockEntity) { super(dispatcher, blockEntity); rotatingAbout = Direction.get(Direction.AxisDirection.POSITIVE, axis); diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java similarity index 90% rename from src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index 4808cb2f7a..3076ace2e0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -10,9 +10,9 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class HosePulleyInstance extends AbstractPulleyInstance { +public class HosePulleyVisual extends AbstractPulleyVisual { - public HosePulleyInstance(VisualizationContext dispatcher, HosePulleyBlockEntity blockEntity) { + public HosePulleyVisual(VisualizationContext dispatcher, HosePulleyBlockEntity blockEntity) { super(dispatcher, blockEntity); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java similarity index 89% rename from src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index a74e497f06..965824ed67 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -12,9 +12,9 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class RopePulleyInstance extends AbstractPulleyInstance { - public RopePulleyInstance(VisualizationContext materialManager, PulleyBlockEntity blockEntity) { - super(materialManager, blockEntity); +public class RopePulleyVisual extends AbstractPulleyVisual { + public RopePulleyVisual(VisualizationContext context, PulleyBlockEntity blockEntity) { + super(context, blockEntity); } protected Instancer getRopeModel() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java similarity index 85% rename from src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java rename to src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java index 124c77afaf..bcd68ea310 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java @@ -7,13 +7,13 @@ import com.simibubi.create.content.contraptions.behaviour.MovementContext; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; -public abstract class ActorInstance { +public abstract class ActorVisual { protected final VisualizationContext visualizationContext; protected final InstancerProvider instancerProvider; protected final BlockAndTintGetter simulationWorld; protected final MovementContext context; - public ActorInstance(VisualizationContext visualizationContext, BlockAndTintGetter world, MovementContext context) { + public ActorVisual(VisualizationContext visualizationContext, BlockAndTintGetter world, MovementContext context) { this.visualizationContext = visualizationContext; this.instancerProvider = visualizationContext.instancerProvider(); this.simulationWorld = world; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java similarity index 53% rename from src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java rename to src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java index cd885751fe..2bc764de5e 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankInstance.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java @@ -3,12 +3,12 @@ package com.simibubi.create.content.equipment.armor; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; -public class BacktankInstance extends SingleRotatingInstance { +public class BacktankVisual extends SingleRotatingVisual { - public BacktankInstance(VisualizationContext materialManager, BacktankBlockEntity blockEntity) { - super(materialManager, blockEntity); + public BacktankVisual(VisualizationContext context, BacktankBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java similarity index 86% rename from src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java rename to src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index d9028ab8a6..3c7e81530b 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxInstance.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -13,21 +13,18 @@ import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; -public class ToolBoxInstance extends AbstractBlockEntityVisual implements DynamicVisual { +public class ToolBoxVisual extends AbstractBlockEntityVisual implements DynamicVisual { private final Direction facing; private TransformedInstance lid; private TransformedInstance[] drawers; - public ToolBoxInstance(VisualizationContext materialManager, ToolboxBlockEntity blockEntity) { - super(materialManager, blockEntity); + public ToolBoxVisual(VisualizationContext context, ToolboxBlockEntity blockEntity) { + super(context, blockEntity); facing = blockState.getValue(ToolboxBlock.FACING) .getOpposite(); diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveInstance.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java similarity index 91% rename from src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveInstance.java rename to src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 7ff7f6ccab..d7ed82dbae 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveInstance.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -12,14 +12,14 @@ import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class FluidValveInstance extends ShaftInstance implements DynamicVisual { +public class FluidValveVisual extends ShaftVisual implements DynamicVisual { protected TransformedInstance pointer; protected boolean settled; @@ -28,7 +28,7 @@ public class FluidValveInstance extends ShaftInstance imp protected final double yRot; protected final int pointerRotationOffset; - public FluidValveInstance(VisualizationContext dispatcher, FluidValveBlockEntity blockEntity) { + public FluidValveVisual(VisualizationContext dispatcher, FluidValveBlockEntity blockEntity) { super(dispatcher, blockEntity); Direction facing = blockState.getValue(FluidValveBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogInstance.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java similarity index 73% rename from src/main/java/com/simibubi/create/content/fluids/pump/PumpCogInstance.java rename to src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index 51285b1459..83590b8dc0 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogInstance.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -6,16 +6,16 @@ import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class PumpCogInstance extends SingleRotatingInstance implements DynamicVisual { +public class PumpCogVisual extends SingleRotatingVisual implements DynamicVisual { - public PumpCogInstance(VisualizationContext materialManager, PumpBlockEntity blockEntity) { - super(materialManager, blockEntity); + public PumpCogVisual(VisualizationContext context, PumpBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java similarity index 63% rename from src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java index 6d77379935..a288807fcf 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java @@ -5,9 +5,9 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class BackHalfShaftInstance extends HalfShaftInstance { - public BackHalfShaftInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); +public class BackHalfShaftVisual extends HalfShaftVisual { + public BackHalfShaftVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java deleted file mode 100644 index 471c381381..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingInstance.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.simibubi.create.content.kinetics.base; - -import com.jozufozu.flywheel.api.visualization.VisualizationContext; - -public class CutoutRotatingInstance extends SingleRotatingInstance { - public CutoutRotatingInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java new file mode 100644 index 0000000000..b849a73031 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java @@ -0,0 +1,9 @@ +package com.simibubi.create.content.kinetics.base; + +import com.jozufozu.flywheel.api.visualization.VisualizationContext; + +public class CutoutRotatingVisual extends SingleRotatingVisual { + public CutoutRotatingVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); + } +} diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java similarity index 73% rename from src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java index 4ba90b7de5..949b4b922e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java @@ -8,9 +8,9 @@ import com.simibubi.create.AllPartialModels; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HalfShaftInstance extends SingleRotatingInstance { - public HalfShaftInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); +public class HalfShaftVisual extends SingleRotatingVisual { + public HalfShaftVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java similarity index 62% rename from src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java index 6f8a41f342..399db1e2b6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java @@ -5,10 +5,10 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HorizontalHalfShaftInstance extends HalfShaftInstance { +public class HorizontalHalfShaftVisual extends HalfShaftVisual { - public HorizontalHalfShaftInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); + public HorizontalHalfShaftVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java similarity index 91% rename from src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java index 1c90f8d029..ecda32b4ea 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java @@ -10,12 +10,12 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; -public abstract class KineticBlockEntityInstance extends AbstractBlockEntityVisual { +public abstract class KineticBlockEntityVisual extends AbstractBlockEntityVisual { protected final Direction.Axis axis; - public KineticBlockEntityInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); + public KineticBlockEntityVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); axis = (blockState.getBlock() instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java similarity index 61% rename from src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java index 9bb1435b6f..21ce8bf7e6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java @@ -4,10 +4,10 @@ import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.foundation.render.VirtualRenderHelper; -public class ShaftInstance extends SingleRotatingInstance { +public class ShaftVisual extends SingleRotatingVisual { - public ShaftInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); + public ShaftVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java similarity index 82% rename from src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index db4b913ba0..6f344a4f11 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -9,12 +9,12 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderHelper; -public class SingleRotatingInstance extends KineticBlockEntityInstance { +public class SingleRotatingVisual extends KineticBlockEntityVisual { protected RotatingInstance rotatingModel; - public SingleRotatingInstance(VisualizationContext materialManager, T blockEntity) { - super(materialManager, blockEntity); + public SingleRotatingVisual(VisualizationContext context, T blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 4d58e2f207..b72629fdf5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -15,7 +15,7 @@ import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -26,7 +26,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.LightLayer; -public class BeltVisual extends KineticBlockEntityInstance { +public class BeltVisual extends KineticBlockEntityVisual { boolean upward; boolean diagonal; @@ -39,8 +39,8 @@ public class BeltVisual extends KineticBlockEntityInstance { protected ArrayList keys; protected RotatingInstance pulleyKey; - public BeltVisual(VisualizationContext materialManager, BeltBlockEntity blockEntity) { - super(materialManager, blockEntity); + public BeltVisual(VisualizationContext context, BeltBlockEntity blockEntity) { + super(context, blockEntity); if (!AllBlocks.BELT.has(blockState)) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java similarity index 72% rename from src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java index 7f8f5353b3..48034fa058 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java @@ -7,21 +7,21 @@ import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import net.minecraft.core.Direction; -public class ShaftlessCogwheelInstance extends SingleRotatingInstance { +public class ShaftlessCogwheelVisual extends SingleRotatingVisual { - public ShaftlessCogwheelInstance(VisualizationContext materialManager, KineticBlockEntity blockEntity) { - super(materialManager, blockEntity); + public ShaftlessCogwheelVisual(VisualizationContext context, KineticBlockEntity blockEntity) { + super(context, blockEntity); } @Override protected Model model() { Direction facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); - return Models.partial(AllPartialModels.SHAFTLESS_COGWHEEL, facing, ShaftlessCogwheelInstance::rotateToFace); + return Models.partial(AllPartialModels.SHAFTLESS_COGWHEEL, facing, ShaftlessCogwheelVisual::rotateToFace); } private static void rotateToFace(Direction facing, PoseStack stack) { diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java similarity index 88% rename from src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 6cb5965bd9..b216fa0fed 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -10,18 +10,18 @@ import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HandCrankInstance extends SingleRotatingInstance implements DynamicVisual { +public class HandCrankVisual extends SingleRotatingVisual implements DynamicVisual { private TransformedInstance crank; private Direction facing; - public HandCrankInstance(VisualizationContext modelManager, HandCrankBlockEntity blockEntity) { + public HandCrankVisual(VisualizationContext modelManager, HandCrankBlockEntity blockEntity) { super(modelManager, blockEntity); facing = blockState.getValue(BlockStateProperties.FACING); Model model = blockEntity.getRenderedHandleInstance(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java similarity index 90% rename from src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index 9340ac9992..e0c2656125 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -13,9 +13,9 @@ import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.kinetics.base.IRotate; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderHelper; @@ -31,7 +31,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -public class DeployerActorInstance extends ActorInstance { +public class DeployerActorVisual extends ActorVisual { private final PoseStack stack = new PoseStack(); Direction facing; @@ -45,8 +45,8 @@ public class DeployerActorInstance extends ActorInstance { TransformedInstance hand; RotatingInstance shaft; - public DeployerActorInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { - super(materialManager, simulationWorld, context); + public DeployerActorVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext context) { + super(visualizationContext, simulationWorld, context); BlockState state = context.state; DeployerBlockEntity.Mode mode = NBTHelper.readEnum(context.blockEntityData, "Mode", DeployerBlockEntity.Mode.class); PartialModel handPose = DeployerRenderer.getHandPose(mode); @@ -59,13 +59,11 @@ public class DeployerActorInstance extends ActorInstance { xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - var instancerProvider = materialManager.instancerProvider(); - pole = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.DEPLOYER_POLE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); hand = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(handPose), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); - shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(KineticBlockEntityInstance.shaft(axis)), RenderStage.AFTER_BLOCK_ENTITIES) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(KineticBlockEntityVisual.shaft(axis)), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); int blockLight = localBlockLight(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java index 3778796f1c..2716d0dac1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java @@ -16,7 +16,7 @@ import com.simibubi.create.content.contraptions.OrientedContraptionEntity; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.mounted.MountedContraption; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.deployer.DeployerBlockEntity.Mode; @@ -295,8 +295,8 @@ public class DeployerMovementBehaviour implements MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, - MovementContext context) { - return new DeployerActorInstance(materialManager, simulationWorld, context); + public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + return new DeployerActorVisual(visualizationContext, simulationWorld, movementContext); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java similarity index 93% rename from src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 08d191cce7..509f6f470f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -20,7 +20,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -29,7 +29,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; -public class DeployerInstance extends ShaftInstance implements DynamicVisual, TickableVisual { +public class DeployerVisual extends ShaftVisual implements DynamicVisual, TickableVisual { final Direction facing; final float yRot; @@ -43,8 +43,8 @@ public class DeployerInstance extends ShaftInstance impleme PartialModel currentHand; float progress; - public DeployerInstance(VisualizationContext materialManager, DeployerBlockEntity blockEntity) { - super(materialManager, blockEntity); + public DeployerVisual(VisualizationContext context, DeployerBlockEntity blockEntity) { + super(context, blockEntity); facing = blockState.getValue(FACING); diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorInstance.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java similarity index 78% rename from src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index ef78b919a2..cb135d6119 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -6,8 +6,9 @@ import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.contraptions.actors.flwdata.ActorInstance; +import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -17,13 +18,13 @@ import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.BlockState; -public class DrillActorInstance extends com.simibubi.create.content.contraptions.render.ActorInstance { +public class DrillActorVisual extends ActorVisual { ActorInstance drillHead; private final Direction facing; - public DrillActorInstance(VisualizationContext materialManager, VirtualRenderWorld contraption, MovementContext context) { - super(materialManager, contraption, context); + public DrillActorVisual(VisualizationContext visualizationContext, VirtualRenderWorld contraption, MovementContext context) { + super(visualizationContext, contraption, context); BlockState state = context.state; @@ -38,8 +39,7 @@ public class DrillActorInstance extends com.simibubi.create.content.contraptions else eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0); - drillHead = materialManager.instancerProvider() - .instancer(AllInstanceTypes.ACTORS, Models.partial(AllPartialModels.DRILL_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) + drillHead = instancerProvider.instancer(AllInstanceTypes.ACTORS, Models.partial(AllPartialModels.DRILL_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); drillHead.setPosition(context.localPos) diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java index e1bc5d195a..ebb681f169 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java @@ -5,7 +5,7 @@ import javax.annotation.Nullable; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.content.contraptions.render.ActorInstance; +import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; @@ -52,8 +52,8 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour { @Nullable @Override - public ActorInstance createInstance(VisualizationContext materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { - return new DrillActorInstance(materialManager, simulationWorld, context); + public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { + return new DrillActorVisual(visualizationContext, simulationWorld, movementContext); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java similarity index 67% rename from src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java index 6d468e8cc7..b9904dfe66 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java @@ -4,15 +4,15 @@ import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class DrillInstance extends SingleRotatingInstance { +public class DrillVisual extends SingleRotatingVisual { - public DrillInstance(VisualizationContext materialManager, DrillBlockEntity blockEntity) { - super(materialManager, blockEntity); + public DrillVisual(VisualizationContext context, DrillBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java similarity index 90% rename from src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java index fdf90a7ae0..261db244e3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java @@ -9,7 +9,7 @@ import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -17,15 +17,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class FanInstance extends KineticBlockEntityInstance { +public class FanVisual extends KineticBlockEntityVisual { protected final RotatingInstance shaft; protected final RotatingInstance fan; final Direction direction; private final Direction opposite; - public FanInstance(VisualizationContext materialManager, EncasedFanBlockEntity blockEntity) { - super(materialManager, blockEntity); + public FanVisual(VisualizationContext context, EncasedFanBlockEntity blockEntity) { + super(context, blockEntity); direction = blockState.getValue(FACING); diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java similarity index 90% rename from src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index 37aece9c45..a63cd5b8e9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -11,7 +11,7 @@ import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderHelper; @@ -20,14 +20,14 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class FlywheelInstance extends KineticBlockEntityInstance implements DynamicVisual { +public class FlywheelVisual extends KineticBlockEntityVisual implements DynamicVisual { protected final RotatingInstance shaft; protected final TransformedInstance wheel; protected float lastAngle = Float.NaN; - public FlywheelInstance(VisualizationContext materialManager, FlywheelBlockEntity blockEntity) { - super(materialManager, blockEntity); + public FlywheelVisual(VisualizationContext context, FlywheelBlockEntity blockEntity) { + super(context, blockEntity); shaft = setup(instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(shaft()), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance()); diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java similarity index 88% rename from src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java index d34ca83bf5..ca42a7cf95 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java @@ -15,7 +15,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; @@ -23,14 +23,14 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public abstract class GaugeInstance extends ShaftInstance implements DynamicVisual { +public abstract class GaugeVisual extends ShaftVisual implements DynamicVisual { protected final ArrayList faces; protected PoseStack ms; - protected GaugeInstance(VisualizationContext materialManager, GaugeBlockEntity blockEntity) { - super(materialManager, blockEntity); + protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity) { + super(context, blockEntity); faces = new ArrayList<>(2); @@ -153,9 +153,9 @@ public abstract class GaugeInstance extends ShaftInstance impl } } - public static class Speed extends GaugeInstance { - public Speed(VisualizationContext materialManager, GaugeBlockEntity blockEntity) { - super(materialManager, blockEntity); + public static class Speed extends GaugeVisual { + public Speed(VisualizationContext context, GaugeBlockEntity blockEntity) { + super(context, blockEntity); } @Override @@ -164,9 +164,9 @@ public abstract class GaugeInstance extends ShaftInstance impl } } - public static class Stress extends GaugeInstance { - public Stress(VisualizationContext materialManager, GaugeBlockEntity blockEntity) { - super(materialManager, blockEntity); + public static class Stress extends GaugeVisual { + public Stress(VisualizationContext context, GaugeBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java similarity index 93% rename from src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index ef4ef7e242..4d0bb2999b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -10,7 +10,7 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; @@ -20,13 +20,13 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class GearboxInstance extends KineticBlockEntityInstance { +public class GearboxVisual extends KineticBlockEntityVisual { protected final EnumMap keys; protected Direction sourceFacing; - public GearboxInstance(VisualizationContext materialManager, GearboxBlockEntity blockEntity) { - super(materialManager, blockEntity); + public GearboxVisual(VisualizationContext context, GearboxBlockEntity blockEntity) { + super(context, blockEntity); keys = new EnumMap<>(Direction.class); diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java similarity index 95% rename from src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 9e2d82382d..908f3ddc2b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -17,7 +17,7 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Iterate; @@ -28,7 +28,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -public class ArmInstance extends SingleRotatingInstance implements DynamicVisual { +public class ArmVisual extends SingleRotatingVisual implements DynamicVisual { final TransformedInstance base; final TransformedInstance lowerBody; @@ -46,8 +46,8 @@ public class ArmInstance extends SingleRotatingInstance implemen private float upperArmAngle = Float.NaN; private float headAngle = Float.NaN; - public ArmInstance(VisualizationContext materialManager, ArmBlockEntity blockEntity) { - super(materialManager, blockEntity); + public ArmVisual(VisualizationContext context, ArmBlockEntity blockEntity) { + super(context, blockEntity); base = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java similarity index 54% rename from src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java index 6e7791fa46..680efb9d55 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java @@ -4,12 +4,12 @@ import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; -public class MillstoneCogInstance extends SingleRotatingInstance { +public class MillstoneCogVisual extends SingleRotatingVisual { - public MillstoneCogInstance(VisualizationContext materialManager, MillstoneBlockEntity blockEntity) { - super(materialManager, blockEntity); + public MillstoneCogVisual(VisualizationContext context, MillstoneBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java similarity index 92% rename from src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index b7400b2a70..8264cefa6e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -13,20 +13,20 @@ import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.RotatingInstance; -import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogInstance; +import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogVisual; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class MixerInstance extends EncasedCogInstance implements DynamicVisual { +public class MixerVisual extends EncasedCogVisual implements DynamicVisual { private final RotatingInstance mixerHead; private final OrientedInstance mixerPole; private final MechanicalMixerBlockEntity mixer; - public MixerInstance(VisualizationContext materialManager, MechanicalMixerBlockEntity blockEntity) { - super(materialManager, blockEntity, false); + public MixerVisual(VisualizationContext context, MechanicalMixerBlockEntity blockEntity) { + super(context, blockEntity, false); this.mixer = blockEntity; mixerHead = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.MECHANICAL_MIXER_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java similarity index 87% rename from src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index eee3ddced5..31f2437e8b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -14,16 +14,16 @@ import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PressInstance extends ShaftInstance implements DynamicVisual { +public class PressVisual extends ShaftVisual implements DynamicVisual { private final OrientedInstance pressHead; - public PressInstance(VisualizationContext materialManager, MechanicalPressBlockEntity blockEntity) { - super(materialManager, blockEntity); + public PressVisual(VisualizationContext context, MechanicalPressBlockEntity blockEntity) { + super(context, blockEntity); pressHead = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java similarity index 78% rename from src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java index c2a14452de..cbcc88442b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java @@ -4,7 +4,7 @@ import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.render.VirtualRenderHelper; import net.minecraft.core.Direction; @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class SawInstance extends SingleRotatingInstance { +public class SawVisual extends SingleRotatingVisual { - public SawInstance(VisualizationContext materialManager, SawBlockEntity blockEntity) { - super(materialManager, blockEntity); + public SawVisual(VisualizationContext context, SawBlockEntity blockEntity) { + super(context, blockEntity); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java similarity index 86% rename from src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 0358ed896c..37dca3c4f2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -13,20 +13,20 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.render.AllInstanceTypes; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; -public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance { +public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual { protected RotatingInstance additionalShaft; - public BracketedKineticBlockEntityInstance(VisualizationContext materialManager, BracketedKineticBlockEntity blockEntity) { - super(materialManager, blockEntity); + public BracketedKineticBlockEntityVisual(VisualizationContext context, BracketedKineticBlockEntity blockEntity) { + super(context, blockEntity); } @Override @@ -42,7 +42,7 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< Direction.Axis axis = KineticBlockEntityRenderer.getRotationAxisOf(blockEntity); BlockPos pos = blockEntity.getBlockPos(); float offset = BracketedKineticBlockEntityRenderer.getShaftAngleOffset(axis, pos); - var model = Models.partial(AllPartialModels.COGWHEEL_SHAFT, axis, BracketedKineticBlockEntityInstance::rotateToAxis); + var model = Models.partial(AllPartialModels.COGWHEEL_SHAFT, axis, BracketedKineticBlockEntityVisual::rotateToAxis); Instancer half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); additionalShaft = setup(half.createInstance(), speed); @@ -55,7 +55,7 @@ public class BracketedKineticBlockEntityInstance extends SingleRotatingInstance< return super.model(); Direction.Axis axis = KineticBlockEntityRenderer.getRotationAxisOf(blockEntity); - return Models.partial(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, axis, BracketedKineticBlockEntityInstance::rotateToAxis); + return Models.partial(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, axis, BracketedKineticBlockEntityVisual::rotateToAxis); } private static void rotateToAxis(Direction.Axis axis, PoseStack ms) { diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java similarity index 86% rename from src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java index a153f2f63f..c56594507d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java @@ -16,7 +16,7 @@ import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockEntityRenderer; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -28,7 +28,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class EncasedCogInstance extends KineticBlockEntityInstance { +public class EncasedCogVisual extends KineticBlockEntityVisual { private boolean large; @@ -36,15 +36,15 @@ public class EncasedCogInstance extends KineticBlockEntityInstance rotatingTopShaft; protected Optional rotatingBottomShaft; - public static EncasedCogInstance small(VisualizationContext modelManager, KineticBlockEntity blockEntity) { - return new EncasedCogInstance(modelManager, blockEntity, false); + public static EncasedCogVisual small(VisualizationContext modelManager, KineticBlockEntity blockEntity) { + return new EncasedCogVisual(modelManager, blockEntity, false); } - public static EncasedCogInstance large(VisualizationContext modelManager, KineticBlockEntity blockEntity) { - return new EncasedCogInstance(modelManager, blockEntity, true); + public static EncasedCogVisual large(VisualizationContext modelManager, KineticBlockEntity blockEntity) { + return new EncasedCogVisual(modelManager, blockEntity, true); } - public EncasedCogInstance(VisualizationContext modelManager, KineticBlockEntity blockEntity, boolean large) { + public EncasedCogVisual(VisualizationContext modelManager, KineticBlockEntity blockEntity, boolean large) { super(modelManager, blockEntity); this.large = large; } @@ -102,7 +102,7 @@ public class EncasedCogInstance extends KineticBlockEntityInstance implements DynamicVisual { +public class SteamEngineVisual extends AbstractBlockEntityVisual implements DynamicVisual { protected final TransformedInstance piston; protected final TransformedInstance linkage; protected final TransformedInstance connector; - public SteamEngineInstance(VisualizationContext materialManager, SteamEngineBlockEntity blockEntity) { - super(materialManager, blockEntity); + public SteamEngineVisual(VisualizationContext context, SteamEngineBlockEntity blockEntity) { + super(context, blockEntity); piston = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ENGINE_PISTON), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java similarity index 91% rename from src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java index 1b59f0cbe7..8300dcd582 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java @@ -10,7 +10,7 @@ import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; @@ -18,11 +18,11 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Block; -public class SplitShaftInstance extends KineticBlockEntityInstance { +public class SplitShaftVisual extends KineticBlockEntityVisual { protected final ArrayList keys; - public SplitShaftInstance(VisualizationContext modelManager, SplitShaftBlockEntity blockEntity) { + public SplitShaftVisual(VisualizationContext modelManager, SplitShaftBlockEntity blockEntity) { super(modelManager, blockEntity); keys = new ArrayList<>(2); diff --git a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java similarity index 66% rename from src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java rename to src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java index 0792ffd7e8..532aa6f055 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java @@ -5,7 +5,7 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.ModelCache; import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.kinetics.base.CutoutRotatingInstance; +import com.simibubi.create.content.kinetics.base.CutoutRotatingVisual; import com.simibubi.create.foundation.render.CachedBufferer; import net.minecraft.client.resources.model.BakedModel; @@ -13,24 +13,24 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; import net.minecraft.world.level.block.state.BlockState; -public class WaterWheelInstance extends CutoutRotatingInstance { - private static final ModelCache MODEL_CACHE = new ModelCache<>(WaterWheelInstance::createModel); +public class WaterWheelVisual extends CutoutRotatingVisual { + private static final ModelCache MODEL_CACHE = new ModelCache<>(WaterWheelVisual::createModel); protected final boolean large; protected final WaterWheelModelKey key; - public WaterWheelInstance(VisualizationContext materialManager, T blockEntity, boolean large) { - super(materialManager, blockEntity); + public WaterWheelVisual(VisualizationContext context, T blockEntity, boolean large) { + super(context, blockEntity); this.large = large; key = new WaterWheelModelKey(large, blockState, blockEntity.material); } - public static WaterWheelInstance standard(VisualizationContext materialManager, T blockEntity) { - return new WaterWheelInstance<>(materialManager, blockEntity, false); + public static WaterWheelVisual standard(VisualizationContext context, T blockEntity) { + return new WaterWheelVisual<>(context, blockEntity, false); } - public static WaterWheelInstance large(VisualizationContext materialManager, T blockEntity) { - return new WaterWheelInstance<>(materialManager, blockEntity, true); + public static WaterWheelVisual large(VisualizationContext context, T blockEntity) { + return new WaterWheelVisual<>(context, blockEntity, true); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java similarity index 86% rename from src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java rename to src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index 8fa2db89ad..7b7050df5b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -11,18 +11,16 @@ import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.ShaftInstance; +import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import net.minecraft.util.Mth; - -public class EjectorInstance extends ShaftInstance implements DynamicVisual { +public class EjectorVisual extends ShaftVisual implements DynamicVisual { protected final TransformedInstance plate; private float lastProgress = Float.NaN; - public EjectorInstance(VisualizationContext dispatcher, EjectorBlockEntity blockEntity) { + public EjectorVisual(VisualizationContext dispatcher, EjectorBlockEntity blockEntity) { super(dispatcher, blockEntity); plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java similarity index 67% rename from src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java rename to src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java index 254ed5b414..1ef7599b34 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapData.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java @@ -10,7 +10,7 @@ import com.jozufozu.flywheel.lib.instance.FlatLit; import net.minecraft.client.renderer.LightTexture; import net.minecraft.core.BlockPos; -public class FlapData extends AbstractInstance implements FlatLit { +public class FlapInstance extends AbstractInstance implements FlatLit { public float x; public float y; @@ -28,20 +28,20 @@ public class FlapData extends AbstractInstance implements FlatLit { public float flapScale; public float flapness; - public FlapData(InstanceType type, InstanceHandle handle) { + public FlapInstance(InstanceType type, InstanceHandle handle) { super(type, handle); } - public FlapData setPosition(BlockPos pos) { + public FlapInstance setPosition(BlockPos pos) { return setPosition(pos.getX(), pos.getY(), pos.getZ()); } - public FlapData setPosition(Vector3f pos) { + public FlapInstance setPosition(Vector3f pos) { return setPosition(pos.x(), pos.y(), pos.z()); } - public FlapData setPosition(float x, float y, float z) { + public FlapInstance setPosition(float x, float y, float z) { this.x = x; this.y = y; this.z = z; @@ -49,13 +49,13 @@ public class FlapData extends AbstractInstance implements FlatLit { } @Override - public FlapData setBlockLight(int blockLight) { + public FlapInstance setBlockLight(int blockLight) { this.blockLight = (byte) (blockLight & 0xF); return this; } @Override - public FlapData setSkyLight(int skyLight) { + public FlapInstance setSkyLight(int skyLight) { this.skyLight = (byte) (skyLight & 0xF); return this; } @@ -65,34 +65,34 @@ public class FlapData extends AbstractInstance implements FlatLit { return LightTexture.pack(this.blockLight, this.skyLight); } - public FlapData setSegmentOffset(float x, float y, float z) { + public FlapInstance setSegmentOffset(float x, float y, float z) { this.segmentOffsetX = x; this.segmentOffsetY = y; this.segmentOffsetZ = z; return this; } - public FlapData setIntensity(float intensity) { + public FlapInstance setIntensity(float intensity) { this.intensity = intensity; return this; } - public FlapData setHorizontalAngle(float horizontalAngle) { + public FlapInstance setHorizontalAngle(float horizontalAngle) { this.horizontalAngle = horizontalAngle; return this; } - public FlapData setFlapScale(float flapScale) { + public FlapInstance setFlapScale(float flapScale) { this.flapScale = flapScale; return this; } - public FlapData setFlapness(float flapness) { + public FlapInstance setFlapness(float flapness) { this.flapness = flapness; return this; } - public FlapData setPivotVoxelSpace(float x, float y, float z) { + public FlapInstance setPivotVoxelSpace(float x, float y, float z) { pivotX = x / 16f; pivotY = y / 16f; pivotZ = z / 16f; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java similarity index 82% rename from src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java rename to src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 4fb952b339..5f6744ed83 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -14,19 +14,19 @@ import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.logistics.flwdata.FlapData; +import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class FunnelInstance extends AbstractBlockEntityVisual implements DynamicVisual { +public class FunnelVisual extends AbstractBlockEntityVisual implements DynamicVisual { - private final ArrayList flaps; + private final ArrayList flaps; - public FunnelInstance(VisualizationContext materialManager, FunnelBlockEntity blockEntity) { - super(materialManager, blockEntity); + public FunnelVisual(VisualizationContext context, FunnelBlockEntity blockEntity) { + super(context, blockEntity); flaps = new ArrayList<>(4); @@ -34,7 +34,7 @@ public class FunnelInstance extends AbstractBlockEntityVisual PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllPartialModels.FUNNEL_FLAP : AllPartialModels.BELT_FUNNEL_FLAP); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial), RenderStage.AFTER_BLOCK_ENTITIES); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); @@ -48,7 +48,7 @@ public class FunnelInstance extends AbstractBlockEntityVisual float intensity = segment == 3 ? 1.5f : segment + 1; float segmentOffset = -3.05f / 16f * segment + 0.075f / 16f; - FlapData key = model.createInstance(); + FlapInstance key = model.createInstance(); key.setPosition(getVisualPosition()) .setSegmentOffset(segmentOffset, 0, -blockEntity.getFlapOffset()) @@ -70,7 +70,7 @@ public class FunnelInstance extends AbstractBlockEntityVisual float flapness = blockEntity.flap.getValue(AnimationTickHolder.getPartialTicks()); - for (FlapData flap : flaps) { + for (FlapInstance flap : flaps) { flap.setFlapness(flapness); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java similarity index 82% rename from src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java rename to src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index fc646042e8..a306349b2e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -16,7 +16,7 @@ import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.logistics.flwdata.FlapData; +import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; @@ -24,16 +24,16 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class BeltTunnelInstance extends AbstractBlockEntityVisual implements DynamicVisual { +public class BeltTunnelVisual extends AbstractBlockEntityVisual implements DynamicVisual { - private final Map> tunnelFlaps; + private final Map> tunnelFlaps; - public BeltTunnelInstance(VisualizationContext materialManager, BeltTunnelBlockEntity blockEntity) { - super(materialManager, blockEntity); + public BeltTunnelVisual(VisualizationContext context, BeltTunnelBlockEntity blockEntity) { + super(context, blockEntity); tunnelFlaps = new EnumMap<>(Direction.class); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP), RenderStage.AFTER_BLOCK_ENTITIES); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); @@ -46,13 +46,13 @@ public class BeltTunnelInstance extends AbstractBlockEntityVisual flaps = new ArrayList<>(4); + ArrayList flaps = new ArrayList<>(4); for (int segment = 0; segment <= 3; segment++) { float intensity = segment == 3 ? 1.5f : segment + 1; float segmentOffset = -3.05f / 16f * segment + 0.075f / 16f; - FlapData key = model.createInstance(); + FlapInstance key = model.createInstance(); key.setPosition(getVisualPosition()) .setSegmentOffset(segmentOffset, 0, 0) @@ -84,7 +84,7 @@ public class BeltTunnelInstance extends AbstractBlockEntityVisual implements DynamicVisual { +public class AnalogLeverVisual extends AbstractBlockEntityVisual implements DynamicVisual { protected final TransformedInstance handle; protected final TransformedInstance indicator; @@ -29,8 +29,8 @@ public class AnalogLeverInstance extends AbstractBlockEntityVisual implements TickableVisual { +public class BrassDiodeVisual extends AbstractBlockEntityVisual implements TickableVisual { protected final TransformedInstance indicator; protected int previousState; - public BrassDiodeInstance(VisualizationContext materialManager, BrassDiodeBlockEntity blockEntity) { - super(materialManager, blockEntity); + public BrassDiodeVisual(VisualizationContext context, BrassDiodeBlockEntity blockEntity) { + super(context, blockEntity); indicator = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLEXPEATER_INDICATOR), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonInstance.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java similarity index 86% rename from src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonInstance.java rename to src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java index 5560c277ea..c2dbdca07b 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonInstance.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java @@ -6,7 +6,6 @@ import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; -import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -15,17 +14,16 @@ import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class SchematicannonInstance extends AbstractBlockEntityVisual implements DynamicVisual { +public class SchematicannonVisual extends AbstractBlockEntityVisual implements DynamicVisual { private final TransformedInstance connector; private final TransformedInstance pipe; - public SchematicannonInstance(VisualizationContext materialManager, SchematicannonBlockEntity blockEntity) { - super(materialManager, blockEntity); + public SchematicannonVisual(VisualizationContext context, SchematicannonBlockEntity blockEntity) { + super(context, blockEntity); connector = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.SCHEMATICANNON_CONNECTOR), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); pipe = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.SCHEMATICANNON_PIPE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java index 1650abb735..417d217679 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java @@ -16,7 +16,7 @@ public class BackupBogeyRenderer extends BogeyRenderer.CommonRenderer { } @Override - public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { + public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java index 2a2e722308..73d64b18ec 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java @@ -181,21 +181,21 @@ public abstract class BogeyRenderer { /** * Provides render implementations a point in setup to instantiate all model data to be needed * - * @param materialManager The material manager + * @param context The visualization context * @param carriageBogey The bogey to create data for */ @OnlyIn(Dist.CLIENT) - public abstract void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey); + public abstract void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey); /** * Creates instances of models for in-world rendering to a set length from a provided partial model * - * @param materialManager The material manager + * @param context The visualization context * @param model Partial model to be instanced * @param count Amount of models neeeded */ - public void createModelInstance(VisualizationContext materialManager, PartialModel model, int count) { - var instancer = materialManager.instancerProvider() + public void createModelInstance(VisualizationContext context, PartialModel model, int count) { + var instancer = context.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, Models.partial(model), RenderStage.AFTER_BLOCK_ENTITIES); BogeyModelData[] modelData = IntStream.range(0, count) .mapToObj(i -> instancer.createInstance()) @@ -207,12 +207,12 @@ public abstract class BogeyRenderer { /** * Creates instances of models for in-contraption rendering to a set length from a provided blockstate * - * @param materialManager The material manager + * @param context The visualization context * @param state Blockstate of the model to be created * @param count Amount of models needed */ - public void createModelInstance(VisualizationContext materialManager, BlockState state, int count) { - var instancer = materialManager.instancerProvider() + public void createModelInstance(VisualizationContext context, BlockState state, int count) { + var instancer = context.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(state), RenderStage.AFTER_BLOCK_ENTITIES); BogeyModelData[] modelData = IntStream.range(0, count) .mapToObj(i -> instancer.createInstance()) @@ -224,23 +224,23 @@ public abstract class BogeyRenderer { /** * Creates a single instance of models for in-contraption rendering from a provided blockstate * - * @param materialManager The material manager + * @param context The visualization context * @param states Blockstates of the models to be created */ - public void createModelInstance(VisualizationContext materialManager, BlockState... states) { + public void createModelInstance(VisualizationContext context, BlockState... states) { for (BlockState state : states) - this.createModelInstance(materialManager, state, 1); + this.createModelInstance(context, state, 1); } /** * Helper function to create a single model instance for in-contraption rendering * - * @param materialManager The material manager + * @param context The visualization context * @param models The type of model to create instances of */ - public void createModelInstance(VisualizationContext materialManager, PartialModel... models) { + public void createModelInstance(VisualizationContext context, PartialModel... models) { for (PartialModel model : models) - createModelInstance(materialManager, model, 1); + createModelInstance(context, model, 1); } /** diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java index e047138e94..e6c6fcdb79 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java @@ -116,8 +116,8 @@ public class BogeyStyle { return this.commonRendererFactory.map(Supplier::get); } - public BogeyInstance createInstance(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext materialManager) { - return new BogeyInstance(bogey, this, size, materialManager); + public BogeyVisual createVisual(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext context) { + return new BogeyVisual(bogey, this, size, context); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyInstance.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java similarity index 82% rename from src/main/java/com/simibubi/create/content/trains/bogey/BogeyInstance.java rename to src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java index 3dd1fd8995..60ba5a7e64 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyInstance.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; import net.minecraft.world.phys.Vec3; -public final class BogeyInstance { +public final class BogeyVisual { private final BogeySizes.BogeySize size; private final BogeyStyle style; @@ -21,8 +21,8 @@ public final class BogeyInstance { public final BogeyRenderer renderer; public final Optional commonRenderer; - public BogeyInstance(CarriageBogey bogey, BogeyStyle style, BogeySizes.BogeySize size, - VisualizationContext materialManager) { + public BogeyVisual(CarriageBogey bogey, BogeyStyle style, BogeySizes.BogeySize size, + VisualizationContext context) { this.bogey = bogey; this.size = size; this.style = style; @@ -30,8 +30,8 @@ public final class BogeyInstance { this.renderer = this.style.createRendererInstance(this.size); this.commonRenderer = this.style.getNewCommonRenderInstance(); - commonRenderer.ifPresent(bogeyRenderer -> bogeyRenderer.initialiseContraptionModelData(materialManager, bogey)); - renderer.initialiseContraptionModelData(materialManager, bogey); + commonRenderer.ifPresent(bogeyRenderer -> bogeyRenderer.initialiseContraptionModelData(context, bogey)); + renderer.initialiseContraptionModelData(context, bogey); } public void beginFrame(float wheelAngle, PoseStack ms) { @@ -59,7 +59,7 @@ public final class BogeyInstance { } @FunctionalInterface - interface BogeyInstanceFactory { - BogeyInstance create(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext materialManager); + interface BogeyVisualFactory { + BogeyVisual create(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext context); } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java index cbb054051a..6e6c7fa949 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java @@ -22,8 +22,8 @@ import net.minecraft.nbt.CompoundTag; public class StandardBogeyRenderer { public static class CommonStandardBogeyRenderer extends BogeyRenderer.CommonRenderer { @Override - public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { - createModelInstance(materialManager, AllBlocks.SHAFT.getDefaultState() + public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { + createModelInstance(context, AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.Z), 2); } @@ -45,9 +45,9 @@ public class StandardBogeyRenderer { public static class SmallStandardBogeyRenderer extends BogeyRenderer { @Override - public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { - createModelInstance(materialManager, SMALL_BOGEY_WHEELS, 2); - createModelInstance(materialManager, BOGEY_FRAME); + public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { + createModelInstance(context, SMALL_BOGEY_WHEELS, 2); + createModelInstance(context, BOGEY_FRAME); } @@ -78,9 +78,9 @@ public class StandardBogeyRenderer { public static class LargeStandardBogeyRenderer extends BogeyRenderer { @Override - public void initialiseContraptionModelData(VisualizationContext materialManager, CarriageBogey carriageBogey) { - createModelInstance(materialManager, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); - createModelInstance(materialManager, AllBlocks.SHAFT.getDefaultState() + public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { + createModelInstance(context, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); + createModelInstance(context, AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.X), 2); } diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java index 17c8f1444f..fe1d78e9ca 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java @@ -10,8 +10,8 @@ import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.Create; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlockEntity; -import com.simibubi.create.content.trains.bogey.BogeyInstance; import com.simibubi.create.content.trains.bogey.BogeyStyle; +import com.simibubi.create.content.trains.bogey.BogeyVisual; import com.simibubi.create.content.trains.graph.DimensionPalette; import com.simibubi.create.content.trains.graph.TrackGraph; import com.simibubi.create.foundation.utility.AngleHelper; @@ -199,8 +199,8 @@ public class CarriageBogey { return new CarriageBogey(type, upsideDown, data, points.getFirst(), points.getSecond()); } - public BogeyInstance createInstance(VisualizationContext materialManager) { - return this.getStyle().createInstance(this, type.getSize(), materialManager); + public BogeyVisual createVisual(VisualizationContext context) { + return this.getStyle().createVisual(this, type.getSize(), context); } public BogeyStyle getStyle() { diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java index 16bff058d6..abfd3a669c 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java @@ -737,10 +737,10 @@ public class CarriageContraptionEntity extends OrientedContraptionEntity { } @OnlyIn(Dist.CLIENT) - private WeakReference instanceHolder; + private WeakReference instanceHolder; @OnlyIn(Dist.CLIENT) - public void bindInstance(CarriageContraptionInstance instance) { + public void bindInstance(CarriageContraptionVisual instance) { this.instanceHolder = new WeakReference<>(instance); updateRenderedPortalCutoff(); } @@ -780,7 +780,7 @@ public class CarriageContraptionEntity extends OrientedContraptionEntity { // update hidden bogeys (if instanced) if (instanceHolder == null) return; - CarriageContraptionInstance instance = instanceHolder.get(); + CarriageContraptionVisual instance = instanceHolder.get(); if (instance == null) return; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java similarity index 83% rename from src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java rename to src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index 03d20f08dd..1309342f3e 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionInstance.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -8,22 +8,22 @@ import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.trains.bogey.BogeyInstance; import com.simibubi.create.content.trains.bogey.BogeyRenderer; +import com.simibubi.create.content.trains.bogey.BogeyVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; -public class CarriageContraptionInstance extends AbstractEntityVisual implements DynamicVisual { +public class CarriageContraptionVisual extends AbstractEntityVisual implements DynamicVisual { private final PoseStack ms = new PoseStack(); private Carriage carriage; - private Couple bogeys; + private Couple bogeys; private Couple bogeyHidden; - public CarriageContraptionInstance(VisualizationContext materialManager, CarriageContraptionEntity entity) { - super(materialManager, entity); + public CarriageContraptionVisual(VisualizationContext context, CarriageContraptionEntity entity) { + super(context, entity); bogeyHidden = Couple.create(() -> false); entity.bindInstance(this); } @@ -36,7 +36,7 @@ public class CarriageContraptionInstance extends AbstractEntityVisual - bogey.getStyle().createInstance(bogey, bogey.type.getSize(), manager), visualizationContext); + bogey.getStyle().createVisual(bogey, bogey.type.getSize(), manager), visualizationContext); updateLight(); } @@ -65,7 +65,7 @@ public class CarriageContraptionInstance extends AbstractEntityVisual { +public class TrackVisual extends AbstractBlockEntityVisual { - private List instances; + private List visuals; - public TrackInstance(VisualizationContext materialManager, TrackBlockEntity track) { - super(materialManager, track); + public TrackVisual(VisualizationContext context, TrackBlockEntity track) { + super(context, track); } @Override @@ -44,7 +42,7 @@ public class TrackInstance extends AbstractBlockEntityVisual { return; _delete(); - instances = blockEntity.connections.values() + visuals = blockEntity.connections.values() .stream() .map(this::createInstance) .filter(Objects::nonNull) @@ -63,35 +61,35 @@ public class TrackInstance extends AbstractBlockEntityVisual { @Override public void updateLight() { - if (instances == null) + if (visuals == null) return; - instances.forEach(BezierTrackInstance::updateLight); + visuals.forEach(BezierTrackVisual::updateLight); } @Nullable - private BezierTrackInstance createInstance(BezierConnection bc) { + private BezierTrackVisual createInstance(BezierConnection bc) { if (!bc.isPrimary()) return null; - return new BezierTrackInstance(bc); + return new BezierTrackVisual(bc); } @Override public void _delete() { - if (instances == null) + if (visuals == null) return; - instances.forEach(BezierTrackInstance::delete); + visuals.forEach(BezierTrackVisual::delete); } @Override public void collectCrumblingInstances(Consumer consumer) { - if (instances == null) + if (visuals == null) return; - for (BezierTrackInstance instance : instances) { + for (BezierTrackVisual instance : visuals) { instance.collectCrumblingInstances(consumer); } } - private class BezierTrackInstance { + private class BezierTrackVisual { private final TransformedInstance[] ties; private final TransformedInstance[] left; @@ -100,11 +98,11 @@ public class TrackInstance extends AbstractBlockEntityVisual { private final BlockPos[] leftLightPos; private final BlockPos[] rightLightPos; - private @Nullable GirderInstance girder; + private @Nullable GirderVisual girder; - private BezierTrackInstance(BezierConnection bc) { + private BezierTrackVisual(BezierConnection bc) { BlockPos tePosition = bc.tePositions.getFirst(); - girder = bc.hasGirder ? new GirderInstance(bc) : null; + girder = bc.hasGirder ? new GirderVisual(bc) : null; PoseStack pose = new PoseStack(); TransformStack.of(pose) @@ -182,13 +180,13 @@ public class TrackInstance extends AbstractBlockEntityVisual { girder.collectCrumblingInstances(consumer); } - private class GirderInstance { + private class GirderVisual { private final Couple beams; private final Couple> beamCaps; private final BlockPos[] lightPos; - private GirderInstance(BezierConnection bc) { + private GirderVisual(BezierConnection bc) { BlockPos tePosition = bc.tePositions.getFirst(); PoseStack pose = new PoseStack(); TransformStack.of(pose) diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 8f337a0393..747b8f0428 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -9,10 +9,10 @@ import com.jozufozu.flywheel.api.layout.FloatRepr; import com.jozufozu.flywheel.api.layout.IntegerRepr; import com.jozufozu.flywheel.api.layout.LayoutBuilder; import com.jozufozu.flywheel.lib.instance.SimpleInstanceType; -import com.simibubi.create.content.contraptions.actors.flwdata.ActorInstance; +import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.belt.BeltInstance; -import com.simibubi.create.content.logistics.flwdata.FlapData; +import com.simibubi.create.content.logistics.flwdata.FlapInstance; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -120,7 +120,7 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 42, instance.speed); }) .register(); - public static final InstanceType FLAPS = SimpleInstanceType.builder(FlapData::new) + public static final InstanceType FLAPS = SimpleInstanceType.builder(FlapInstance::new) .cullShader(asResource("instance/cull/flap.glsl")) .vertexShader(asResource("instance/flap.vert")) .layout(LayoutBuilder.create() From b6d1f02d6a656a79b5b002e1ab351cbf342cbc9a Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Tue, 23 Jan 2024 13:56:36 -0800 Subject: [PATCH 10/35] Chugging along - Fix compile errors with new flywheel light update system. - Fix compile errors in instance shaders. - Call Instance#setChanged where needed. --- gradle.properties | 2 +- .../com/simibubi/create/CreateClient.java | 4 ++- .../harvester/HarvesterActorVisual.java | 4 ++- .../contraptions/actors/psi/PSIVisual.java | 1 + .../actors/roller/RollerActorVisual.java | 6 ++-- .../contraptions/bearing/BearingVisual.java | 7 ++-- .../elevator/ElevatorPulleyVisual.java | 8 +---- .../gantry/GantryCarriageVisual.java | 3 +- .../pulley/AbstractPulleyVisual.java | 29 +++++----------- .../render/ContraptionLighter.java | 12 +------ .../render/NonStationaryLighter.java | 4 +-- .../equipment/toolbox/ToolBoxVisual.java | 1 + .../fluids/pipes/valve/FluidValveVisual.java | 3 +- .../base/KineticBlockEntityVisual.java | 6 ++-- .../kinetics/base/SingleRotatingVisual.java | 1 + .../kinetics/belt/BeltBlockEntity.java | 23 ++----------- .../content/kinetics/belt/BeltVisual.java | 12 ++++--- .../kinetics/crank/HandCrankVisual.java | 4 ++- .../kinetics/deployer/DeployerVisual.java | 10 +++--- .../kinetics/flywheel/FlywheelVisual.java | 3 +- .../content/kinetics/gauge/GaugeVisual.java | 4 +-- .../kinetics/gearbox/GearboxVisual.java | 3 +- .../kinetics/mechanicalArm/ArmVisual.java | 15 ++++++--- .../content/kinetics/mixer/MixerVisual.java | 6 ++-- .../content/kinetics/press/PressVisual.java | 3 +- .../BracketedKineticBlockEntityVisual.java | 33 ++++++++++--------- .../encased/EncasedCogVisual.java | 2 ++ .../logistics/depot/EjectorVisual.java | 1 + .../entity/CarriageContraptionVisual.java | 14 ++++---- .../content/trains/track/TrackVisual.java | 4 --- .../assets/create/flywheel/instance/belt.vert | 13 +++----- .../flywheel/instance/contraption_actor.vert | 14 ++++---- .../create/flywheel/instance/cull/belt.glsl | 7 +--- .../instance/cull/contraption_actor.glsl | 11 +++---- .../create/flywheel/instance/cull/flap.glsl | 15 +++------ .../flywheel/instance/cull/rotating.glsl | 17 ++++------ .../assets/create/flywheel/instance/flap.vert | 20 ++++------- .../create/flywheel/instance/rotating.vert | 20 +++++------ 38 files changed, 146 insertions(+), 199 deletions(-) diff --git a/gradle.properties b/gradle.properties index eb3694c766..f0359e1cb1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-18 +flywheel_version = 1.0.0-alpha-27 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index ea5cb4b0af..be27cae85b 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -20,7 +20,7 @@ import com.simibubi.create.foundation.outliner.Outliner; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; -import com.simibubi.create.foundation.render.CreateContexts; +import com.simibubi.create.foundation.render.StitchedSprite; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.ModelSwapper; @@ -64,6 +64,8 @@ public class CreateClient { modEventBus.addListener(CreateClient::clientInit); modEventBus.addListener(AllParticleTypes::registerFactories); + modEventBus.addListener(StitchedSprite::onTextureStitchPost); + AllInstanceTypes.init(); MODEL_SWAPPER.registerListeners(modEventBus); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 5d1f447c3e..5c69dfac07 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -44,6 +44,7 @@ public class HarvesterActorVisual extends ActorVisual { horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); harvester.setBlockLight(localBlockLight()); + harvester.setChanged(); } protected PartialModel getRollingPartial() { @@ -90,7 +91,8 @@ public class HarvesterActorVisual extends ActorVisual { .uncenter() .translate(getRotationOffset()) .rotateXDegrees((float) getRotation()) - .translateBack(getRotationOffset()); + .translateBack(getRotationOffset()) + .setChanged(); } protected double getRotation() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 0d23f1f3ef..851ee24d74 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -24,6 +24,7 @@ public class PSIVisual extends AbstractBlockEntityVisual e topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - topInstance.setPosition(getVisualPosition()).setRotation(blockOrientation); + topInstance.setPosition(getVisualPosition()) + .setRotation(blockOrientation) + .setChanged(); } @Override @@ -53,7 +55,8 @@ public class BearingVisual e rot.mul(blockOrientation); - topInstance.setRotation(rot); + topInstance.setRotation(rot) + .setChanged(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index 8198e4953e..7199c7e067 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -3,21 +3,15 @@ package com.simibubi.create.content.contraptions.elevator; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.light.TickingLightListener; import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO -public class ElevatorPulleyVisual extends ShaftVisual implements DynamicVisual, TickingLightListener { +public class ElevatorPulleyVisual extends ShaftVisual implements DynamicVisual { public ElevatorPulleyVisual(VisualizationContext context, ElevatorPulleyBlockEntity blockEntity) { super(context, blockEntity); } - @Override - public boolean tickLightListener() { - return false; - } - @Override public void beginFrame(VisualFrameContext ctx) { } diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 6703e14d62..9e5a40040b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -74,7 +74,8 @@ public class GantryCarriageVisual extends ShaftVisual .translate(0, -9 / 16f, 0) .rotateX(-cogAngle) .translate(0, 9 / 16f, 0) - .uncenter(); + .uncenter() + .setChanged(); } static float getRotationMultiplier(Direction.Axis gantryAxis, Direction facing) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index 4ba00ebf7a..ebf48d6436 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -7,12 +7,10 @@ import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.box.Box; import com.jozufozu.flywheel.lib.box.MutableBox; import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.light.LightPacking; import com.jozufozu.flywheel.lib.light.LightVolume; -import com.jozufozu.flywheel.lib.light.TickingLightListener; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.ShaftVisual; @@ -21,11 +19,9 @@ import com.simibubi.create.foundation.render.GroupInstance; import com.simibubi.create.foundation.render.SelectInstance; import net.minecraft.core.Direction; -import net.minecraft.core.SectionPos; import net.minecraft.util.Mth; -import net.minecraft.world.level.LightLayer; -public abstract class AbstractPulleyVisual extends ShaftVisual implements DynamicVisual, TickingLightListener { +public abstract class AbstractPulleyVisual extends ShaftVisual implements DynamicVisual { final OrientedInstance coil; final SelectInstance magnet; @@ -47,6 +43,7 @@ public abstract class AbstractPulleyVisual extends coil = getCoilModel().createInstance() .setPosition(getVisualPosition()); + coil.setChanged(); magnet = new SelectInstance<>(this::getMagnetModelIndex); magnet.addModel(getMagnetModel()) @@ -78,7 +75,8 @@ public abstract class AbstractPulleyVisual extends data.setPosition(getVisualPosition()) .nudgePosition(0, -offset, 0) .setBlockLight(LightPacking.getBlock(packed)) - .setSkyLight(LightPacking.getSky(packed)); + .setSkyLight(LightPacking.getSky(packed)) + .setChanged(); }); halfRope.update() @@ -91,7 +89,8 @@ public abstract class AbstractPulleyVisual extends rope1.setPosition(getVisualPosition()) .nudgePosition(0, -halfRopeNudge, 0) .setBlockLight(LightPacking.getBlock(packed)) - .setSkyLight(LightPacking.getSky(packed)); + .setSkyLight(LightPacking.getSky(packed)) + .setChanged(); }); if (isRunning()) { @@ -104,7 +103,8 @@ public abstract class AbstractPulleyVisual extends .setPosition(getVisualPosition()) .nudgePosition(0, -offset + i + 1, 0) .setBlockLight(LightPacking.getBlock(packed)) - .setSkyLight(LightPacking.getSky(packed)); + .setSkyLight(LightPacking.getSky(packed)) + .setChanged(); } } else { rope.clear(); @@ -114,6 +114,7 @@ public abstract class AbstractPulleyVisual extends @Override public void updateLight() { super.updateLight(); + light.copyLight(volume); relight(pos, coil); } @@ -141,7 +142,6 @@ public abstract class AbstractPulleyVisual extends protected abstract boolean isRunning(); - @Override public boolean tickLightListener() { if (updateVolume()) { light.move(volume); @@ -182,17 +182,6 @@ public abstract class AbstractPulleyVisual extends } } - @Override - public Box getVolume() { - return volume; - } - - @Override - public void onLightUpdate(LightLayer type, SectionPos pos) { - super.onLightUpdate(type, pos); - light.onLightUpdate(type, pos); - } - @Override public void collectCrumblingInstances(Consumer consumer) { super.collectCrumblingInstances(consumer); diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java index 8f319d4a65..e3033709f4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java @@ -3,17 +3,14 @@ package com.simibubi.create.content.contraptions.render; import com.jozufozu.flywheel.lib.box.Box; import com.jozufozu.flywheel.lib.box.MutableBox; import com.jozufozu.flywheel.lib.light.GPULightVolume; -import com.jozufozu.flywheel.lib.light.LightListener; -import com.jozufozu.flywheel.lib.light.LightUpdater; import com.simibubi.create.content.contraptions.Contraption; import net.minecraft.core.SectionPos; import net.minecraft.world.level.LightLayer; -public abstract class ContraptionLighter implements LightListener { +public abstract class ContraptionLighter { protected final C contraption; public final GPULightVolume lightVolume; - protected final LightUpdater lightUpdater; protected final MutableBox bounds; @@ -21,7 +18,6 @@ public abstract class ContraptionLighter implements Light protected ContraptionLighter(C contraption) { this.contraption = contraption; - lightUpdater = LightUpdater.get(contraption.entity.level()); bounds = getContraptionBounds(); growBoundsForEdgeData(bounds); @@ -30,18 +26,14 @@ public abstract class ContraptionLighter implements Light lightVolume.initialize(); scheduleRebuild = true; - - lightUpdater.addListener(this); } public abstract MutableBox getContraptionBounds(); - @Override public boolean isInvalid() { return lightVolume.isInvalid(); } - @Override public void onLightUpdate(LightLayer type, SectionPos pos) { lightVolume.onLightUpdate(type, pos); } @@ -51,13 +43,11 @@ public abstract class ContraptionLighter implements Light bounds.grow(2); } - @Override public Box getVolume() { return bounds; } public void delete() { - lightUpdater.removeListener(this); lightVolume.delete(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java index d80a5a0f31..d3a2294446 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java @@ -2,16 +2,14 @@ package com.simibubi.create.content.contraptions.render; import com.jozufozu.flywheel.lib.box.Box; import com.jozufozu.flywheel.lib.box.MutableBox; -import com.jozufozu.flywheel.lib.light.TickingLightListener; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.infrastructure.config.AllConfigs; -public class NonStationaryLighter extends ContraptionLighter implements TickingLightListener { +public class NonStationaryLighter extends ContraptionLighter { public NonStationaryLighter(C contraption) { super(contraption); } - @Override public boolean tickLightListener() { if (getVolume().volume() > AllConfigs.client().maxContraptionLightVolume.get()) return false; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 3c7e81530b..8cb2fd5622 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -38,6 +38,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual lid = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor())), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); + super.init(pt); } @Override diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index d7ed82dbae..0df1320e33 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -67,7 +67,8 @@ public class FluidValveVisual extends ShaftVisual impleme .rotateY((float) yRot) .rotateX((float) xRot) .rotateY(pointerRotationOffset + pointerRotation) - .uncenter(); + .uncenter() + .setChanged(); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java index ecda32b4ea..9676e217d5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java @@ -35,7 +35,8 @@ public abstract class KineticBlockEntityVisual ext instance.setRotationAxis(axis) .setRotationOffset(getRotationOffset(axis)) .setRotationalSpeed(speed) - .setColor(blockEntity); + .setColor(blockEntity) + .setChanged(); } protected final RotatingInstance setup(RotatingInstance key) { @@ -55,7 +56,8 @@ public abstract class KineticBlockEntityVisual ext .setRotationalSpeed(speed) .setRotationOffset(getRotationOffset(axis)) .setColor(blockEntity) - .setPosition(getVisualPosition()); + .setPosition(getVisualPosition()) + .setChanged(); return key; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index 6f344a4f11..cb00ea20ca 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -22,6 +22,7 @@ public class SingleRotatingVisual extends KineticB rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); setup(rotatingModel); + super.init(pt); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java index a6816196f9..3d554ca6f4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java @@ -14,8 +14,6 @@ import java.util.function.Function; import com.jozufozu.flywheel.lib.box.Box; import com.jozufozu.flywheel.lib.box.MutableBox; -import com.jozufozu.flywheel.lib.light.LightListener; -import com.jozufozu.flywheel.lib.light.LightUpdater; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -579,13 +577,11 @@ public class BeltBlockEntity extends KineticBlockEntity { * Hide this behavior in an inner class to avoid loading LightListener on servers. */ @OnlyIn(Dist.CLIENT) - class BeltLighter implements LightListener { + class BeltLighter { private byte[] light; public BeltLighter() { initializeLight(); - LightUpdater.get(level) - .addListener(this); } /** @@ -605,7 +601,6 @@ public class BeltBlockEntity extends KineticBlockEntity { return light == null ? 0 : LightTexture.pack(light[segment * 2], light[segment * 2 + 1]); } - @Override public Box getVolume() { BlockPos endPos = BeltHelper.getPositionForOffset(BeltBlockEntity.this, beltLength - 1); var bb = MutableBox.from(worldPosition, endPos); @@ -613,27 +608,13 @@ public class BeltBlockEntity extends KineticBlockEntity { return bb; } - @Override - public boolean isInvalid() { - return remove; - } - - @Override public void onLightUpdate(LightLayer type, SectionPos pos) { if (remove) return; if (level == null) return; - Box beltVolume = getVolume(); - - if (beltVolume.intersects(MutableBox.from(pos))) { - if (type == LightLayer.BLOCK) - updateBlockLight(); - - if (type == LightLayer.SKY) - updateSkyLight(); - } + initializeLight(); } private void initializeLight() { diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index b72629fdf5..0189843a1e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -88,8 +88,9 @@ public class BeltVisual extends KineticBlockEntityVisual { SpriteShiftEntry spriteShiftEntry = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); key.setScrollTexture(spriteShiftEntry) - .setColor(blockEntity) - .setRotationalSpeed(getScrollSpeed()); + .setColor(blockEntity) + .setRotationalSpeed(getScrollSpeed()) + .setChanged(); bottom = false; } @@ -165,14 +166,17 @@ public class BeltVisual extends KineticBlockEntityVisual { .setColor(blockEntity) .setPosition(getVisualPosition()) .setBlockLight(level.getBrightness(LightLayer.BLOCK, pos)) - .setSkyLight(level.getBrightness(LightLayer.SKY, pos)); + .setSkyLight(level.getBrightness(LightLayer.SKY, pos)) + .setChanged(); return key; } @Override public void collectCrumblingInstances(Consumer consumer) { - consumer.accept(pulleyKey); + if (pulleyKey != null) { + consumer.accept(pulleyKey); + } keys.forEach(consumer); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index b216fa0fed..854d8490b1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -46,11 +46,13 @@ public class HandCrankVisual extends SingleRotatingVisual .translate(getVisualPosition()) .center() .rotate(angle, Direction.get(Direction.AxisDirection.POSITIVE, axis)) - .uncenter(); + .uncenter() + .setChanged(); } @Override public void init(float pt) { + // FIXME: need to call super.super.init here if (blockEntity.shouldRenderShaft()) super.init(pt); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 509f6f470f..3b93b1dae5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -124,8 +124,8 @@ public class DeployerVisual extends ShaftVisual implements float y = blockPos.getY() + ((float) facingVec.getY()) * distance; float z = blockPos.getZ() + ((float) facingVec.getZ()) * distance; - pole.setPosition(x, y, z); - hand.setPosition(x, y, z); + pole.setPosition(x, y, z).setChanged(); + hand.setPosition(x, y, z).setChanged(); } static void updateRotation(OrientedInstance pole, OrientedInstance hand, float yRot, float xRot, float zRot) { @@ -133,11 +133,13 @@ public class DeployerVisual extends ShaftVisual implements Quaternionf q = Axis.YP.rotationDegrees(yRot); q.mul(Axis.XP.rotationDegrees(xRot)); - hand.setRotation(q); + hand.setRotation(q) + .setChanged(); q.mul(Axis.ZP.rotationDegrees(zRot)); - pole.setRotation(q); + pole.setRotation(q) + .setChanged(); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index a63cd5b8e9..b5bb46d78a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -62,7 +62,8 @@ public class FlywheelVisual extends KineticBlockEntityVisual implemen msr.pushPose(); rotateToFace(msr); - getSecond().setTransform(ms); + getSecond().setTransform(ms).setChanged(); msr.translate(0, dialPivot, dialPivot) .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) .translate(0, -dialPivot, -dialPivot); - getFirst().setTransform(ms); + getFirst().setTransform(ms).setChanged(); msr.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index 4d0bb2999b..c4a2d9193a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -49,7 +49,8 @@ public class GearboxVisual extends KineticBlockEntityVisual .setRotationOffset(getRotationOffset(axis)).setColor(blockEntity) .setPosition(getVisualPosition()) .setBlockLight(blockLight) - .setSkyLight(skyLight); + .setSkyLight(skyLight) + .setChanged(); keys.put(direction, key); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 908f3ddc2b..617c6c20b4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -133,22 +133,26 @@ public class ArmVisual extends SingleRotatingVisual implements D msr.rotateX(180); ArmRenderer.transformBase(msr, baseAngle); - base.setTransform(msLocal); + base.setTransform(msLocal) + .setChanged(); ArmRenderer.transformLowerArm(msr, lowerArmAngle); lowerBody.setTransform(msLocal) - .setColor(color); + .setColor(color) + .setChanged(); ArmRenderer.transformUpperArm(msr, upperArmAngle); upperBody.setTransform(msLocal) - .setColor(color); + .setColor(color) + .setChanged(); ArmRenderer.transformHead(msr, headAngle); if (ceiling && blockEntity.goggles) msr.rotateZ(180); - claw.setTransform(msLocal); + claw.setTransform(msLocal) + .setChanged(); if (ceiling && blockEntity.goggles) msr.rotateZ(180); @@ -166,7 +170,8 @@ public class ArmVisual extends SingleRotatingVisual implements D int flip = index * 2 - 1; ArmRenderer.transformClawHalf(msr, hasItem, isBlockItem, flip); clawGrips.get(index) - .setTransform(msLocal); + .setTransform(msLocal) + .setChanged(); msLocal.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 8264cefa6e..b1941a55dd 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -62,12 +62,14 @@ public class MixerVisual extends EncasedCogVisual implements DynamicVisual { mixerHead.setPosition(getVisualPosition()) .nudge(0, -renderedHeadOffset, 0) - .setRotationalSpeed(speed * 2); + .setRotationalSpeed(speed * 2) + .setChanged(); } private void transformPole(float renderedHeadOffset) { mixerPole.setPosition(getVisualPosition()) - .nudgePosition(0, -renderedHeadOffset, 0); + .nudgePosition(0, -renderedHeadOffset, 0) + .setChanged(); } private float getRenderedHeadOffset() { diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 31f2437e8b..c6e4875520 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -45,7 +45,8 @@ public class PressVisual extends ShaftVisual impleme float renderedHeadOffset = getRenderedHeadOffset(blockEntity); pressHead.setPosition(getVisualPosition()) - .nudgePosition(0, -renderedHeadOffset, 0); + .nudgePosition(0, -renderedHeadOffset, 0) + .setChanged(); } private float getRenderedHeadOffset(MechanicalPressBlockEntity press) { diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 37dca3c4f2..38cecb5b67 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -31,22 +31,22 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); + + additionalShaft = setup(half.createInstance(), speed); + additionalShaft.setRotationOffset(offset) + .setChanged(); + } super.init(pt); - if (!ICogWheel.isLargeCog(blockEntity.getBlockState())) - return; - - // Large cogs sometimes have to offset their teeth by 11.25 degrees in order to - // mesh properly - - float speed = blockEntity.getSpeed(); - Direction.Axis axis = KineticBlockEntityRenderer.getRotationAxisOf(blockEntity); - BlockPos pos = blockEntity.getBlockPos(); - float offset = BracketedKineticBlockEntityRenderer.getShaftAngleOffset(axis, pos); - var model = Models.partial(AllPartialModels.COGWHEEL_SHAFT, axis, BracketedKineticBlockEntityVisual::rotateToAxis); - Instancer half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); - - additionalShaft = setup(half.createInstance(), speed); - additionalShaft.setRotationOffset(offset); } @Override @@ -72,7 +72,8 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual implements Dy float angle = lidProgress * 70; EjectorRenderer.applyLidAngle(blockEntity, angle, plate.loadIdentity().translate(getVisualPosition())); + plate.setChanged(); } @Override diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index 1309342f3e..fc10aa3761 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -32,13 +32,14 @@ public class CarriageContraptionVisual extends AbstractEntityVisual bogey.getStyle() + .createVisual(bogey, bogey.type.getSize(), manager), visualizationContext); + updateLight(); + } - bogeys = carriage.bogeys.mapNotNullWithParam((bogey, manager) -> - bogey.getStyle().createVisual(bogey, bogey.type.getSize(), manager), visualizationContext); - updateLight(); - } + super.init(pt); + } public void setBogeyVisibility(boolean first, boolean visible) { bogeyHidden.set(first, !visible); @@ -86,7 +87,6 @@ public class CarriageContraptionVisual extends AbstractEntityVisual { .map(this::createInstance) .filter(Objects::nonNull) .toList(); - LightUpdater.get(level) - .addListener(this); } - @Override public Box getVolume() { List out = new ArrayList<>(); out.addAll(blockEntity.connections.keySet()); diff --git a/src/main/resources/assets/create/flywheel/instance/belt.vert b/src/main/resources/assets/create/flywheel/instance/belt.vert index a42270e0f2..b8b0fb93dd 100644 --- a/src/main/resources/assets/create/flywheel/instance/belt.vert +++ b/src/main/resources/assets/create/flywheel/instance/belt.vert @@ -1,21 +1,16 @@ -#define PI 3.1415926538 - #include "flywheel:util/quaternion.glsl" #include "flywheel:util/matrix.glsl" -const float uTime = 0.; - - void flw_instanceVertex(in FlwInstance instance) { - flw_vertexPos = vec4(rotateVertexByQuat(flw_vertexPos.xyz - .5, instance.rotation) + instance.pos + .5, 1.); + flw_vertexPos = vec4(rotateByQuaternion(flw_vertexPos.xyz - .5, instance.rotation) + instance.pos + .5, 1.); - flw_vertexNormal = rotateVertexByQuat(flw_vertexNormal, instance.rotation); + flw_vertexNormal = rotateByQuaternion(flw_vertexNormal, instance.rotation); float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y; - float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult; + float scroll = fract(instance.speed * flw_renderTicks / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult; flw_vertexTexCoord = flw_vertexTexCoord - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll); - flw_vertexLight = instance.light; + flw_vertexLight = instance.light / 15.; #if defined(DEBUG_RAINBOW) flw_vertexColor = instance.color; diff --git a/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert b/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert index 676274e80a..912baa876d 100644 --- a/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert +++ b/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert @@ -1,15 +1,13 @@ #include "flywheel:util/matrix.glsl" #include "flywheel:util/quaternion.glsl" -const float uTime = 0.; - void flw_instanceVertex(in FlwInstance instance) { - float degrees = instance.offset + uTime * instance.speed / 20.; + float degrees = instance.offset + flw_renderSeconds * instance.speed; - vec4 kineticRot = quat(instance.axis, degrees); - vec3 rotated = rotateVertexByQuat(flw_vertexPos.xyz - instance.rotationCenter, kineticRot) + instance.rotationCenter; + vec4 kineticRot = quaternionDegrees(instance.axis, degrees); + vec3 rotated = rotateByQuaternion(flw_vertexPos.xyz - instance.rotationCenter, kineticRot) + instance.rotationCenter; - flw_vertexPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.); - flw_vertexNormal = rotateVertexByQuat(rotateVertexByQuat(flw_vertexNormal, kineticRot), instance.rotation); - flw_vertexLight = instance.light; + flw_vertexPos.xyz = rotateByQuaternion(rotated - .5, instance.rotation) + instance.pos + .5; + flw_vertexNormal = rotateByQuaternion(rotateByQuaternion(flw_vertexNormal, kineticRot), instance.rotation); + flw_vertexLight = instance.light / 15.; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl b/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl index 0b638ab27b..80778eef41 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl @@ -1,11 +1,6 @@ -#define PI 3.1415926538 - #include "flywheel:util/quaternion.glsl" -#include "flywheel:util/matrix.glsl" - -const float uTime = 0.; void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { // FIXME: this is incorrect, but it compiles - center = rotateVertexByQuat(center - .5, instance.rotation) + instance.pos + .5; + center = rotateByQuaternion(center - .5, instance.rotation) + instance.pos + .5; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl b/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl index a1c1aaff41..c830f69ea4 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl @@ -1,14 +1,11 @@ -#include "flywheel:util/matrix.glsl" #include "flywheel:util/quaternion.glsl" -const float uTime = 0.; - void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { // FIXME: this is incorrect, but it compiles - float degrees = instance.offset + uTime * instance.speed / 20.; + float degrees = instance.offset + flw_renderSeconds * instance.speed; - vec4 kineticRot = quat(instance.axis, degrees); - vec3 rotated = rotateVertexByQuat(center - instance.rotationCenter, kineticRot) + instance.rotationCenter; + vec4 kineticRot = quaternion(instance.axis, degrees); + vec3 rotated = rotateByQuaternion(center - instance.rotationCenter, kineticRot) + instance.rotationCenter; - center = rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5; + center = rotateByQuaternion(rotated - .5, instance.rotation) + instance.pos + .5; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl b/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl index 8a8ebeaa38..1a4fed42bf 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/flap.glsl @@ -1,14 +1,7 @@ #define PI 3.1415926538 -const float uTime = 0.; - -#include "flywheel:util/matrix.glsl" #include "flywheel:util/quaternion.glsl" -float toRad(float degrees) { - return fract(degrees / 360.) * PI * 2.; -} - float getFlapAngle(float flapness, float intensity, float scale) { float absFlap = abs(flapness); @@ -26,9 +19,9 @@ void flw_transformBoundingSphere(in FlwInstance flap, inout vec3 center, inout f // FIXME: this is incorrect, but it compiles float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale); - vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle); - vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle); + vec4 orientation = quaternion(vec3(0., 1., 0.), -flap.horizontalAngle); + vec4 flapRotation = quaternion(vec3(1., 0., 0.), flapAngle); - vec3 rotated = rotateVertexByQuat(center - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; - center = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5; + vec3 rotated = rotateByQuaternion(center - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; + center = rotateByQuaternion(rotated - .5, orientation) + flap.instancePos + .5; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl b/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl index 809a5679a5..2825ed2f93 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl @@ -1,20 +1,15 @@ -#define PI 3.1415926538 - #include "flywheel:util/matrix.glsl" -const float uTime = 0.; +mat3 kineticRotation(float offset, float speed, vec3 axis) { + float degrees = offset + flw_renderTicks * speed * 3./10.; -mat4 kineticRotation(float offset, float speed, vec3 axis) { - float degrees = offset + uTime * speed * 3./10.; - float angle = fract(degrees / 360.) * PI * 2.; - - return rotate(axis, angle); + return rotationDegrees(axis, degrees); } void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { // FIXME: this is incorrect, but it compiles - mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis); + mat3 spin = kineticRotation(instance.offset, instance.speed, instance.axis); - vec4 worldPos = spin * vec4(center - .5, 1.); - center = worldPos.xyz + instance.pos + .5; + vec3 worldPos = spin * (center - .5); + center = worldPos + instance.pos + .5; } diff --git a/src/main/resources/assets/create/flywheel/instance/flap.vert b/src/main/resources/assets/create/flywheel/instance/flap.vert index 75a82a908b..ec8928a457 100644 --- a/src/main/resources/assets/create/flywheel/instance/flap.vert +++ b/src/main/resources/assets/create/flywheel/instance/flap.vert @@ -1,14 +1,7 @@ #define PI 3.1415926538 -const float uTime = 0.; - -#include "flywheel:util/matrix.glsl" #include "flywheel:util/quaternion.glsl" -float toRad(float degrees) { - return fract(degrees / 360.) * PI * 2.; -} - float getFlapAngle(float flapness, float intensity, float scale) { float absFlap = abs(flapness); @@ -25,13 +18,12 @@ float getFlapAngle(float flapness, float intensity, float scale) { void flw_instanceVertex(in FlwInstance flap) { float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale); - vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle); - vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle); + vec4 orientation = quaternion(vec3(0., 1., 0.), -flap.horizontalAngle); + vec4 flapRotation = quaternion(vec3(1., 0., 0.), flapAngle); - vec3 rotated = rotateVertexByQuat(flw_vertexPos.xyz - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; - rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5; + vec3 rotated = rotateByQuaternion(flw_vertexPos.xyz - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; - flw_vertexPos = vec4(rotated, 1.); - flw_vertexNormal = rotateVertexByQuat(rotateVertexByQuat(flw_vertexNormal, flapRotation), orientation); - flw_vertexLight = flap.light; + flw_vertexPos.xyz = rotateByQuaternion(rotated - .5, orientation) + flap.instancePos + .5; + flw_vertexNormal = rotateByQuaternion(rotateByQuaternion(flw_vertexNormal, flapRotation), orientation); + flw_vertexLight = flap.light / 15.; } diff --git a/src/main/resources/assets/create/flywheel/instance/rotating.vert b/src/main/resources/assets/create/flywheel/instance/rotating.vert index dd4d73ae10..3221cf0e78 100644 --- a/src/main/resources/assets/create/flywheel/instance/rotating.vert +++ b/src/main/resources/assets/create/flywheel/instance/rotating.vert @@ -1,24 +1,20 @@ -#define PI 3.1415926538 - #include "flywheel:util/matrix.glsl" const float uTime = 0.; -mat4 kineticRotation(float offset, float speed, vec3 axis) { - float degrees = offset + uTime * speed * 3./10.; - float angle = fract(degrees / 360.) * PI * 2.; - - return rotate(axis, angle); +mat3 kineticRotation(float offset, float speed, vec3 axis) { + float degrees = offset + flw_renderTicks * speed * 3./10.; + return rotationDegrees(axis, degrees); } void flw_instanceVertex(in FlwInstance instance) { - mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis); + mat3 spin = kineticRotation(instance.offset, instance.speed, instance.axis); - vec4 worldPos = spin * vec4(flw_vertexPos.xyz - .5, 1.); - flw_vertexPos = vec4(worldPos.xyz + instance.pos + .5, 1.); + vec3 worldPos = spin * (flw_vertexPos.xyz - .5); + flw_vertexPos.xyz = worldPos.xyz + instance.pos + .5; - flw_vertexNormal = modelToNormal(spin) * flw_vertexNormal; - flw_vertexLight = instance.light; + flw_vertexNormal = spin * flw_vertexNormal; + flw_vertexLight = instance.light / 15.; #if defined(DEBUG_RAINBOW) flw_vertexColor = instance.color; From 5038d04ac41e816e485b7988e5b852bec3291224 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 26 Jan 2024 17:05:58 -0800 Subject: [PATCH 11/35] Pretty rad - Bump flywheel build. - Fix all(?) places where radians methods were passed degrees - Add DiffuseLightCalculator. - Add overlay to belt and rotating types. - Use joml quaternions in instance types. --- build.gradle | 21 ++++- gradle.properties | 2 +- .../category/animations/AnimatedCrafter.java | 4 +- .../DirectionalExtenderScrollOptionSlot.java | 2 +- .../OrientedContraptionEntity.java | 6 +- .../contraptions/actors/ActorInstance.java | 13 +-- .../ContraptionControlsBlockEntity.java | 4 +- .../contraptions/actors/psi/PIInstance.java | 8 +- .../psi/PortableStorageInterfaceRenderer.java | 4 +- .../actors/roller/RollerBlockEntity.java | 4 +- .../actors/roller/RollerRenderer.java | 4 +- .../trainControls/ControlsRenderer.java | 10 +-- .../contraptions/chassis/StickerRenderer.java | 4 +- .../contraptions/chassis/StickerVisual.java | 4 +- .../elevator/ElevatorPulleyRenderer.java | 6 +- .../gantry/GantryCarriageRenderer.java | 8 +- .../gantry/GantryCarriageVisual.java | 8 +- .../minecart/CouplingRenderer.java | 8 +- .../slidingDoor/SlidingDoorRenderer.java | 4 +- .../steamWhistle/WhistleRenderer.java | 2 +- .../equipment/armor/BacktankArmorLayer.java | 2 +- .../equipment/armor/BacktankRenderer.java | 2 +- .../blueprint/BlueprintRenderer.java | 12 +-- .../extendoGrip/ExtendoGripItemRenderer.java | 18 ++-- .../extendoGrip/ExtendoGripRenderHandler.java | 12 +-- .../PotatoCannonItemRenderer.java | 2 +- .../PotatoCannonRenderHandler.java | 4 +- .../PotatoProjectileRenderMode.java | 18 ++-- .../symmetryWand/mirror/CrossPlaneMirror.java | 2 +- .../symmetryWand/mirror/PlaneMirror.java | 2 +- .../equipment/toolbox/RadialToolboxMenu.java | 4 +- .../equipment/toolbox/ToolBoxVisual.java | 6 +- .../equipment/toolbox/ToolboxRenderer.java | 6 +- .../equipment/toolbox/ToolboxScreen.java | 6 +- .../fluids/drain/ItemDrainRenderer.java | 8 +- .../pipes/SmartFluidPipeBlockEntity.java | 4 +- .../pipes/valve/FluidValveRenderer.java | 6 +- .../fluids/pipes/valve/FluidValveVisual.java | 6 +- .../fluids/tank/FluidTankRenderer.java | 6 +- .../content/kinetics/belt/BeltInstance.java | 18 ++-- .../content/kinetics/belt/BeltRenderer.java | 12 +-- .../content/kinetics/belt/BeltVisual.java | 6 +- .../crafter/MechanicalCrafterRenderer.java | 2 +- .../crafter/ShaftlessCogwheelVisual.java | 4 +- .../kinetics/deployer/DeployerFilterSlot.java | 6 +- .../kinetics/deployer/DeployerRenderer.java | 4 +- .../content/kinetics/drill/DrillRenderer.java | 6 +- .../kinetics/gearbox/GearboxVisual.java | 2 +- .../kinetics/mechanicalArm/ArmRenderer.java | 16 ++-- .../kinetics/mechanicalArm/ArmVisual.java | 6 +- .../motor/CreativeMotorBlockEntity.java | 2 +- .../content/kinetics/saw/SawFilterSlot.java | 4 +- .../content/kinetics/saw/SawRenderer.java | 6 +- .../steamEngine/SteamEngineValueBox.java | 6 +- .../logistics/chute/ChuteRenderer.java | 4 +- .../crate/CreativeCrateBlockEntity.java | 2 +- .../logistics/depot/DepotRenderer.java | 10 +-- .../logistics/depot/EjectorBlockEntity.java | 4 +- .../logistics/depot/EjectorRenderer.java | 8 +- .../funnel/FunnelFilterSlotPositioning.java | 8 +- .../logistics/funnel/FunnelRenderer.java | 2 +- .../logistics/tunnel/BeltTunnelRenderer.java | 4 +- .../processing/basin/BasinRenderer.java | 10 +-- .../redstone/FilteredDetectorFilterSlot.java | 2 +- .../redstone/diodes/BrassDiodeScrollSlot.java | 4 +- .../displayLink/DisplayLinkRenderer.java | 4 +- .../displayLink/DisplayLinkScreen.java | 4 +- .../link/RedstoneLinkFrequencySlot.java | 4 +- .../LinkedControllerItemRenderer.java | 4 +- .../redstone/nixieTube/NixieTubeRenderer.java | 6 +- .../client/SchematicTransformation.java | 2 +- .../schematics/client/tools/DeployTool.java | 2 +- .../trains/bogey/StandardBogeyRenderer.java | 12 +-- .../trains/display/FlapDisplayRenderer.java | 2 +- .../CarriageContraptionEntityRenderer.java | 18 ++-- .../entity/CarriageCouplingRenderer.java | 12 +-- .../observer/TrackObserverBlockEntity.java | 2 +- .../trains/schedule/ScheduleScreen.java | 2 +- .../trains/schedule/TrainHatArmorLayer.java | 2 +- .../trains/station/AbstractStationScreen.java | 4 +- .../trains/station/StationRenderer.java | 6 +- .../behaviour/ValueBoxRenderer.java | 4 +- .../behaviour/ValueBoxTransform.java | 4 +- .../data/CreateBlockEntityBuilder.java | 4 +- .../foundation/data/CreateEntityBuilder.java | 4 +- .../foundation/fluid/FluidRenderer.java | 8 +- .../create/foundation/outliner/Outline.java | 4 +- .../create/foundation/ponder/PonderScene.java | 14 +-- .../ponder/element/MinecartElement.java | 2 +- .../ponder/element/ParrotElement.java | 2 +- .../foundation/render/AllInstanceTypes.java | 90 ++++++++++--------- .../foundation/render/CachedBufferer.java | 8 +- .../render/DiffuseLightCalculator.java | 29 ++++++ .../foundation/render/ForcedDiffuseState.java | 2 - .../foundation/render/SuperByteBuffer.java | 1 - .../foundation/utility/outliner/Outline.java | 3 +- .../gui/CreateMainMenuScreen.java | 2 +- .../assets/create/flywheel/instance/belt.vert | 1 + .../create/flywheel/instance/rotating.vert | 1 + 99 files changed, 360 insertions(+), 319 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java diff --git a/build.gradle b/build.gradle index e68a3a0d58..6f78f52bdf 100644 --- a/build.gradle +++ b/build.gradle @@ -160,6 +160,23 @@ repositories { } } + +// Fix for loading non-mod libraries in dev-env, used for Miniball. +// https://gist.github.com/SizableShrimp/66b22f1b24c255e1491c8d98d3f11f83 +// v--------------------------------------------------------------------v +configurations { + library + implementation.extendsFrom library +} + +minecraft.runs.configureEach { + lazyToken('minecraft_classpath') { + configurations.library.copyRecursive().resolve().collect { it.absolutePath }.join(File.pathSeparator) + } +} +// ^--------------------------------------------------------------------^ + + dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" @@ -167,9 +184,11 @@ dependencies { jarJar.ranged(it, '[MC1.19.3-1.1.10,)') } jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { - jarJar.ranged(it, '[0.6.10,0.6.11)') + jarJar.ranged(it, '[1.0,2.0)') } + library 'com.dreizak:miniball:1.0.3' + implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") if (flywheelInWorkspace) { diff --git a/gradle.properties b/gradle.properties index f0359e1cb1..6dc0154e5c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-27 +flywheel_version = 1.0.0-alpha-32 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index c36112f887..aeb6bd02ec 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -18,8 +18,8 @@ public class AnimatedCrafter extends AnimatedKinetics { matrixStack.translate(3, 16, 0); TransformStack.of(matrixStack) - .rotateX(-12.5f) - .rotateY(-22.5f); + .rotateXDegrees(-12.5f) + .rotateYDegrees(-22.5f); int scale = 22; blockElement(cogwheel()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java index c44c17dd65..e7ddc53ddc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java @@ -28,7 +28,7 @@ public class DirectionalExtenderScrollOptionSlot extends CenteredSideValueBoxTra public void rotate(BlockState state, PoseStack ms) { if (!getSide().getAxis().isHorizontal()) TransformStack.of(ms) - .rotateY(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) + 180); + .rotateYDegrees(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) + 180); super.rotate(state, ms); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java index 0f741e0327..0b3735c280 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java @@ -541,9 +541,9 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { TransformStack.of(matrixStack) .nudge(getId()) .center() - .rotateY(angleYaw) - .rotateZ(anglePitch) - .rotateY(angleInitialYaw) + .rotateYDegrees(angleYaw) + .rotateZDegrees(anglePitch) + .rotateYDegrees(angleInitialYaw) .uncenter(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java index 7d375cfc92..2da908c282 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.contraptions.actors; import org.joml.Quaternionf; +import org.joml.Quaternionfc; import org.joml.Vector3f; import com.jozufozu.flywheel.api.instance.InstanceHandle; @@ -19,10 +20,7 @@ public class ActorInstance extends AbstractInstance { public byte rotationAxisX; public byte rotationAxisY; public byte rotationAxisZ; - public float qX; - public float qY; - public float qZ; - public float qW; + public Quaternionf rotation = new Quaternionf(); public byte rotationCenterX = 64; public byte rotationCenterY = 64; public byte rotationCenterZ = 64; @@ -84,11 +82,8 @@ public class ActorInstance extends AbstractInstance { return this; } - public ActorInstance setLocalRotation(Quaternionf q) { - this.qX = q.x(); - this.qY = q.y(); - this.qZ = q.z(); - this.qW = q.w(); + public ActorInstance setLocalRotation(Quaternionfc q) { + this.rotation.set(q); return this; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java index 3a63354854..a134c2f1b0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java @@ -136,8 +136,8 @@ public class ContraptionControlsBlockEntity extends SmartBlockEntity { Direction facing = state.getValue(ControlsBlock.FACING); float yRot = AngleHelper.horizontalAngle(facing); TransformStack.of(ms) - .rotateY(yRot + 180) - .rotateX(67.5f); + .rotateYDegrees(yRot + 180) + .rotateXDegrees(67.5f); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index 52fc7a97e3..1863084fa1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -46,15 +46,15 @@ public class PIInstance { middle.loadIdentity() .translate(instancePos) .center() - .rotateY(angleY) - .rotateX(angleX) + .rotateYDegrees(angleY) + .rotateXDegrees(angleX) .uncenter(); top.loadIdentity() .translate(instancePos) .center() - .rotateY(angleY) - .rotateX(angleX) + .rotateYDegrees(angleY) + .rotateXDegrees(angleX) .uncenter(); middle.translate(0, progress * 0.5f + 0.375f, 0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java index e437b61c50..0af6cb7da6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java @@ -81,8 +81,8 @@ public class PortableStorageInterfaceRenderer extends SafeBlockEntityRenderer .scale(17 / 16f)); HarvesterRenderer.transform(be.getLevel(), facing, superBuffer, be.getAnimatedSpeed(), Vec3.ZERO); superBuffer.translate(0, -.5, .5) - .rotateY(90) + .rotateYDegrees(90) .light(light) .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); ms.popPose(); @@ -75,7 +75,7 @@ public class RollerRenderer extends SmartBlockEntityRenderer viewProjection.translate(0, -.25, 0); int contraptionWorldLight = ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld); superBuffer.translate(0, -.5, .5) - .rotateY(90) + .rotateYDegrees(90) .light(matrices.getWorld(), contraptionWorldLight) .renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped())); viewProjection.popPose(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java index e6dbbdee65..5fecc345f0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java @@ -30,7 +30,7 @@ public class ControlsRenderer { PoseStack ms = matrices.getModel(); cover.transform(ms) .center() - .rotateY(hAngle) + .rotateYDegrees(hAngle) .uncenter() .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); @@ -38,16 +38,16 @@ public class ControlsRenderer { double yOffset = Mth.lerp(equipAnimation * equipAnimation, -0.15f, 0.05f); for (boolean first : Iterate.trueAndFalse) { - float vAngle = (float) Mth.clamp(first ? firstLever * 70 - 25 : secondLever * 15, -45, 45); + float vAngle = Mth.clamp(first ? firstLever * 70 - 25 : secondLever * 15, -45, 45); SuperByteBuffer lever = CachedBufferer.partial(AllPartialModels.TRAIN_CONTROLS_LEVER, state); ms.pushPose(); TransformStack.of(ms) .center() - .rotateY(hAngle) + .rotateYDegrees(hAngle) .translate(0, 0, 4 / 16f) - .rotateX(vAngle - 45) + .rotateXDegrees(vAngle - 45) .translate(0, yOffset, 0) - .rotateX(45) + .rotateXDegrees(45) .uncenter() .translate(0, -2 / 16f, -3 / 16f) .translate(first ? 0 : 6 / 16f, 0, 0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java index c94bd2089b..355687e521 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java @@ -37,8 +37,8 @@ public class StickerRenderer extends SafeBlockEntityRenderer Direction facing = state.getValue(StickerBlock.FACING); head.nudge(be.hashCode()) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(AngleHelper.verticalAngle(facing) + 90) + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90) .uncenter() .translate(0, (offset * offset) * 4 / 16f, 0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 8432be25a6..893a82939a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -59,8 +59,8 @@ public class StickerVisual extends AbstractBlockEntityVisual .translate(getVisualPosition()) .nudge(blockEntity.hashCode()) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(AngleHelper.verticalAngle(facing) + 90) + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90) .uncenter() .translate(0, (offset * offset) * 4 / 16f, 0); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java index 94a2355469..63d99454df 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java @@ -56,7 +56,7 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer .75f) { halfRope.center() - .rotateY(blockStateAngle) + .rotateYDegrees(blockStateAngle) .uncenter(); AbstractPulleyRenderer.renderAt(world, halfRope.shiftUVScrolling(beltShift, (float) beltScroll * spriteSize), f > .75f ? f - 1 : f, pos, ms, @@ -96,7 +96,7 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer gantryCogs.loadIdentity() .translate(getVisualPosition()) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) - .rotateY(alongFirst ^ facing.getAxis() == Direction.Axis.X ? 0 : 90) + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) + .rotateYDegrees(alongFirst ^ facing.getAxis() == Direction.Axis.X ? 0 : 90) .translate(0, -9 / 16f, 0) - .rotateX(-cogAngle) + .rotateXDegrees(-cogAngle) .translate(0, 9 / 16f, 0) .uncenter() .setChanged(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java index 64cb88e692..42e323877c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java @@ -204,11 +204,11 @@ public class CouplingRenderer { TransformStack.of(ms) .translate(camera.scale(-1) .add(x, y, z)) - .rotateY(yaw) - .rotateZ(pitch) - .rotateX(roll) + .rotateYDegrees(yaw) + .rotateZDegrees(pitch) + .rotateXDegrees(roll) .translate(offset, 0, 0) - .rotateY(flip ? 180 : 0); + .rotateYDegrees(flip ? 180 : 0); } } diff --git a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java index 2a6506c4a6..639845b4f9 100644 --- a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java @@ -66,11 +66,11 @@ public class SlidingDoorRenderer extends SafeBlockEntityRenderer CachedBufferer.partial(mouth, blockState) .center() - .rotateY(AngleHelper.horizontalAngle(direction)) + .rotateYDegrees(AngleHelper.horizontalAngle(direction)) .uncenter() .translate(0, offset * 4 / 16f, 0) .light(light) diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java index fe173301ee..1f492bd50b 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java @@ -60,7 +60,7 @@ public class BacktankArmorLayer .renderInto(ms, buffer.getBuffer(renderType)); cogs.center() - .rotateY(180) + .rotateYDegrees(180) .uncenter() .translate(0, 6.5f / 16, 11f / 16) .rotate(AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360), Direction.EAST) diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java index 5f027d0223..9d5f982a29 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java @@ -29,7 +29,7 @@ public class BacktankRenderer extends KineticBlockEntityRenderer { PartialModel partialModel = entity.size == 3 ? AllPartialModels.CRAFTING_BLUEPRINT_3x3 : entity.size == 2 ? AllPartialModels.CRAFTING_BLUEPRINT_2x2 : AllPartialModels.CRAFTING_BLUEPRINT_1x1; SuperByteBuffer sbb = CachedBufferer.partial(partialModel, Blocks.AIR.defaultBlockState()); - sbb.rotateY(-yaw) - .rotateX(90.0F + entity.getXRot()) + sbb.rotateYDegrees(-yaw) + .rotateXDegrees(90.0F + entity.getXRot()) .translate(-.5, -1 / 32f, -.5); if (entity.size == 2) sbb.translate(.5, 0, -.5); @@ -61,8 +61,8 @@ public class BlueprintRenderer extends EntityRenderer { int itemLight = Mth.floor(sl + .5) << 20 | (Mth.floor(bl + .5) & 0xf) << 4; TransformStack.of(ms) - .rotateY(vertical ? 0 : -yaw) - .rotateX(fakeNormalXRotation); + .rotateYDegrees(vertical ? 0 : -yaw) + .rotateXDegrees(fakeNormalXRotation); Matrix3f copy = new Matrix3f(ms.last() .normal()); @@ -70,8 +70,8 @@ public class BlueprintRenderer extends EntityRenderer { ms.pushPose(); TransformStack.of(ms) - .rotateY(-yaw) - .rotateX(entity.getXRot()) + .rotateYDegrees(-yaw) + .rotateXDegrees(entity.getXRot()) .translate(0, 0, 1 / 32f + .001); if (entity.size == 3) diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java index fc3d3ff8d6..a1160d77c6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java @@ -52,19 +52,19 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { ms.translate(0, 1 / 16f, -7 / 16f); ms.scale(1, 1, 1 + animation); ms.pushPose(); - stacker.rotateX(-halfAngle) + stacker.rotateXDegrees(-halfAngle) .translate(ROTATION_OFFSET); renderer.renderSolid(THIN_SHORT.get(), light); stacker.translateBack(ROTATION_OFFSET); ms.translate(0, 5.5f / 16f, 0); - stacker.rotateX(-oppositeAngle) + stacker.rotateXDegrees(-oppositeAngle) .translate(ROTATION_OFFSET); renderer.renderSolid(WIDE_LONG.get(), light); stacker.translateBack(ROTATION_OFFSET); ms.translate(0, 11 / 16f, 0); - stacker.rotateX(oppositeAngle) + stacker.rotateXDegrees(oppositeAngle) .translate(ROTATION_OFFSET); ms.translate(0, 0.5f / 16f, 0); renderer.renderSolid(THIN_SHORT.get(), light); @@ -73,19 +73,19 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { ms.popPose(); ms.pushPose(); - stacker.rotateX(-180 + halfAngle) + stacker.rotateXDegrees(-180 + halfAngle) .translate(ROTATION_OFFSET); renderer.renderSolid(WIDE_SHORT.get(), light); stacker.translateBack(ROTATION_OFFSET); ms.translate(0, 5.5f / 16f, 0); - stacker.rotateX(oppositeAngle) + stacker.rotateXDegrees(oppositeAngle) .translate(ROTATION_OFFSET); renderer.renderSolid(THIN_LONG.get(), light); stacker.translateBack(ROTATION_OFFSET); ms.translate(0, 11 / 16f, 0); - stacker.rotateX(-oppositeAngle) + stacker.rotateXDegrees(-oppositeAngle) .translate(ROTATION_OFFSET); ms.translate(0, 0.5f / 16f, 0); renderer.renderSolid(WIDE_SHORT.get(), light); @@ -93,8 +93,8 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { // hand ms.translate(0, 5.5f / 16f, 0); - stacker.rotateX(180 - halfAngle) - .rotateY(180); + stacker.rotateXDegrees(180 - halfAngle) + .rotateYDegrees(180); ms.translate(0, 0, -4 / 16f); ms.scale(1, 1, 1 / (1 + animation)); renderer.renderSolid((leftHand || rightHand) ? ExtendoGripRenderHandler.pose.get() @@ -110,7 +110,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { angle += 360 * animation; angle %= 360; stacker.translate(COG_ROTATION_OFFSET) - .rotateZ(angle) + .rotateZDegrees(angle) .translateBack(COG_ROTATION_OFFSET); renderer.renderSolid(COG.get(), light); ms.popPose(); diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java index 68ada0f0eb..3797e3fafc 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java @@ -87,13 +87,13 @@ public class ExtendoGripRenderHandler { ms.translate(flip * (0.64000005F - .1f), -0.4F + equipProgress * -0.6F, -0.71999997F + .3f); ms.pushPose(); - msr.rotateY(flip * 75.0F); + msr.rotateYDegrees(flip * 75.0F); ms.translate(flip * -1.0F, 3.6F, 3.5F); - msr.rotateZ(flip * 120) - .rotateX(200) - .rotateY(flip * -135.0F); + msr.rotateZDegrees(flip * 120) + .rotateXDegrees(200) + .rotateYDegrees(flip * -135.0F); ms.translate(flip * 5.6F, 0.0F, 0.0F); - msr.rotateY(flip * 40.0F); + msr.rotateYDegrees(flip * 40.0F); ms.translate(flip * 0.05f, -0.3f, -0.3f); PlayerRenderer playerrenderer = (PlayerRenderer) mc.getEntityRenderDispatcher() @@ -123,7 +123,7 @@ public class ExtendoGripRenderHandler { if (blockItem && mc.getItemRenderer() .getModel(heldItem, null, null, 0) .isGui3d()) { - msr.rotateY(flip * 45); + msr.rotateYDegrees(flip * 45); ms.translate(flip * 0.15f, -0.15f, -.05f); ms.scale(1.25f, 1.25f, 1.25f); } diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java index b0ff771ebd..1192e6bec8 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java @@ -60,7 +60,7 @@ public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer { localMs.translate(-1 / 4f, -1 / 4f, 1); localMs.scale(.5f, .5f, .5f); TransformStack.of(localMs) - .rotateY(-34); + .rotateYDegrees(-34); itemRenderer.renderStatic(ammo, ItemDisplayContext.GUI, light, OverlayTexture.NO_OVERLAY, localMs, buffer, mc.level, 0); }); diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java index f2b6ff72fa..9f7961f17a 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java @@ -50,14 +50,14 @@ public class PotatoCannonRenderHandler extends ShootableGadgetRenderHandler { ms.translate(flip * -.1f, 0, .14f); ms.scale(.75f, .75f, .75f); TransformStack.of(ms) - .rotateX(recoil * 80); + .rotateXDegrees(recoil * 80); } @Override protected void transformHand(PoseStack ms, float flip, float equipProgress, float recoil, float pt) { ms.translate(flip * -.09, -.275, -.25); TransformStack.of(ms) - .rotateZ(flip * -10); + .rotateZDegrees(flip * -10); } } diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java index dea6bd37ef..3bb51f0a79 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java @@ -33,8 +33,8 @@ public interface PotatoProjectileRenderMode { .subtract(p1); TransformStack.of(ms) - .rotateY(AngleHelper.deg(Mth.atan2(diff.x, diff.z)) + 180) - .rotateX(AngleHelper.deg(Mth.atan2(diff.y, Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); + .rotateYDegrees(AngleHelper.deg(Mth.atan2(diff.x, diff.z)) + 180) + .rotateXDegrees(AngleHelper.deg(Mth.atan2(diff.y, Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); } } @@ -48,8 +48,8 @@ public interface PotatoProjectileRenderMode { public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { super.transform(ms, entity, pt); TransformStack.of(ms) - .rotateZ((entity.tickCount + pt) * 2 * entityRandom(entity, 16)) - .rotateX((entity.tickCount + pt) * entityRandom(entity, 32)); + .rotateZDegrees((entity.tickCount + pt) * 2 * entityRandom(entity, 16)) + .rotateXDegrees((entity.tickCount + pt) * entityRandom(entity, 32)); } } @@ -69,12 +69,12 @@ public interface PotatoProjectileRenderMode { public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { Vec3 diff = entity.getDeltaMovement(); TransformStack.of(ms) - .rotateY(AngleHelper.deg(Mth.atan2(diff.x, diff.z))) - .rotateX(270 + .rotateYDegrees(AngleHelper.deg(Mth.atan2(diff.x, diff.z))) + .rotateXDegrees(270 + AngleHelper.deg(Mth.atan2(diff.y, -Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); TransformStack.of(ms) - .rotateY((entity.tickCount + pt) * 20 * spin + entityRandom(entity, 360)) - .rotateZ(-spriteAngleOffset); + .rotateYDegrees((entity.tickCount + pt) * 20 * spin + entityRandom(entity, 360)) + .rotateZDegrees(-spriteAngleOffset); } } @@ -90,7 +90,7 @@ public interface PotatoProjectileRenderMode { @Override @OnlyIn(Dist.CLIENT) public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { - TransformStack.of(ms).rotateY(AngleHelper.deg(Mth.atan2(offset.x, offset.z))); + TransformStack.of(ms).rotateYDegrees(AngleHelper.deg(Mth.atan2(offset.x, offset.z))); } } diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java index 87b8c55be8..35fd9d5ff3 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java @@ -99,7 +99,7 @@ public class CrossPlaneMirror extends SymmetryMirror { super.applyModelTransform(ms); TransformStack.of(ms) .center() - .rotateY(((Align) orientation) == Align.Y ? 0 : 45) + .rotateYDegrees(((Align) orientation) == Align.Y ? 0 : 45) .uncenter(); } diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java index 192b15c2d4..ee117285a6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java @@ -95,7 +95,7 @@ public class PlaneMirror extends SymmetryMirror { super.applyModelTransform(ms); TransformStack.of(ms) .center() - .rotateY(((Align) orientation) == Align.XY ? 0 : 90) + .rotateYDegrees(((Align) orientation) == Align.XY ? 0 : 90) .uncenter(); } diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java index fdee489ca0..25bbadb88c 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java @@ -127,9 +127,9 @@ public class RadialToolboxMenu extends AbstractSimiScreen { for (int slot = 0; slot < 8; slot++) { ms.pushPose(); TransformStack.of(ms) - .rotateZ(slot * 45 - 45) + .rotateZDegrees(slot * 45 - 45) .translate(0, -40 + (10 * (1 - fade) * (1 - fade)), 0) - .rotateZ(-slot * 45 + 45); + .rotateZDegrees(-slot * 45 + 45); ms.translate(-12, -12, 0); if (state == State.SELECT_ITEM || state == State.SELECT_ITEM_UNEQUIP) { diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 8cb2fd5622..43ec911986 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -60,17 +60,17 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual lid.loadIdentity() .translate(getVisualPosition()) .center() - .rotateY(-facing.toYRot()) + .rotateYDegrees(-facing.toYRot()) .uncenter() .translate(0, 6 / 16f, 12 / 16f) - .rotateX(135 * lidAngle) + .rotateXDegrees(135 * lidAngle) .translateBack(0, 6 / 16f, 12 / 16f); for (int offset : Iterate.zeroAndOne) { drawers[offset].loadIdentity() .translate(getVisualPosition()) .center() - .rotateY(-facing.toYRot()) + .rotateYDegrees(-facing.toYRot()) .uncenter() .translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)); } diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java index 1683e63cc6..01f64202fb 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxRenderer.java @@ -36,17 +36,17 @@ public class ToolboxRenderer extends SmartBlockEntityRenderer { .pushPose() .translate(x, y, 100) .scale(50) - .rotateX(-22) - .rotateY(-202); + .rotateXDegrees(-22) + .rotateYDegrees(-202); GuiGameElement.of(AllBlocks.TOOLBOXES.get(color) .getDefaultState()) @@ -143,7 +143,7 @@ public class ToolboxScreen extends AbstractSimiContainerScreen { TransformStack.of(ms) .pushPose() .translate(0, -6 / 16f, 12 / 16f) - .rotateX(-105 * menu.contentHolder.lid.getValue(partialTicks)) + .rotateXDegrees(-105 * menu.contentHolder.lid.getValue(partialTicks)) .translate(0, 6 / 16f, -12 / 16f); GuiGameElement.of(AllPartialModels.TOOLBOX_LIDS.get(color)) .render(graphics); diff --git a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java index a472fb0139..bcec5e4558 100644 --- a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java @@ -87,9 +87,9 @@ public class ItemDrainRenderer extends SmartBlockEntityRenderer impleme pointer.loadIdentity() .translate(getVisualPosition()) .center() - .rotateY((float) yRot) - .rotateX((float) xRot) - .rotateY(pointerRotationOffset + pointerRotation) + .rotateYDegrees((float) yRot) + .rotateXDegrees((float) xRot) + .rotateYDegrees(pointerRotationOffset + pointerRotation) .uncenter() .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java index 6f4dfa95fa..50895cc660 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java @@ -91,17 +91,17 @@ public class FluidTankRenderer extends SafeBlockEntityRenderer type, InstanceHandle handle) { super(type, handle); } - public BeltInstance setRotation(Quaternionf q) { - this.qX = q.x(); - this.qY = q.y(); - this.qZ = q.z(); - this.qW = q.w(); + public BeltInstance setRotation(Quaternionfc q) { + this.rotation.set(q); return this; } public BeltInstance setScrollTexture(SpriteShiftEntry spriteShift) { - // FIXME: these are null for some reason TextureAtlasSprite source = spriteShift.getOriginal(); TextureAtlasSprite target = spriteShift.getTarget(); @@ -50,7 +44,7 @@ public class BeltInstance extends KineticInstance { } public BeltInstance setScrollMult(float scrollMult) { - this.scrollMult = (byte) (scrollMult * 127); + this.scrollMult = scrollMult; return this; } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index def4a96088..ce408ade6c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -77,9 +77,9 @@ public class BeltRenderer extends SafeBlockEntityRenderer { float renderTick = AnimationTickHolder.getRenderTime(be.getLevel()); msr.center() - .rotateY(AngleHelper.horizontalAngle(facing) + (upward ? 180 : 0) + (sideways ? 270 : 0)) - .rotateZ(sideways ? 90 : 0) - .rotateX(!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) + .rotateYDegrees(AngleHelper.horizontalAngle(facing) + (upward ? 180 : 0) + (sideways ? 270 : 0)) + .rotateZDegrees(sideways ? 90 : 0) + .rotateXDegrees(!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) .uncenter(); if (downward || beltSlope == BeltSlope.VERTICAL && axisDirection == AxisDirection.POSITIVE) { @@ -132,9 +132,9 @@ public class BeltRenderer extends SafeBlockEntityRenderer { PoseStack stack = new PoseStack(); var stacker = TransformStack.of(stack); stacker.center(); - if (dir.getAxis() == Direction.Axis.X) stacker.rotateY(90); - if (dir.getAxis() == Direction.Axis.Y) stacker.rotateX(90); - stacker.rotateX(90); + if (dir.getAxis() == Direction.Axis.X) stacker.rotateYDegrees(90); + if (dir.getAxis() == Direction.Axis.Y) stacker.rotateXDegrees(90); + stacker.rotateXDegrees(90); stacker.uncenter(); return stack; }; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 0189843a1e..2307d21b7e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -132,9 +132,9 @@ public class BeltVisual extends KineticBlockEntityVisual { var model = Models.partial(AllPartialModels.BELT_PULLEY, dir.getAxis(), (axis11, modelTransform1) -> { var msr = TransformStack.of(modelTransform1); msr.center(); - if (axis11 == Direction.Axis.X) msr.rotateY(90); - if (axis11 == Direction.Axis.Y) msr.rotateX(90); - msr.rotateX(90); + if (axis11 == Direction.Axis.X) msr.rotateYDegrees(90); + if (axis11 == Direction.Axis.Y) msr.rotateXDegrees(90); + msr.rotateXDegrees(90); msr.uncenter(); }); diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java index db3d9e363f..8d3b111712 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java @@ -123,7 +123,7 @@ public class MechanicalCrafterRenderer extends SafeBlockEntityRenderer superBuffer .transform(matrices.getModel()) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(AngleHelper.verticalAngle(facing)) - .rotateZ(angle) + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(AngleHelper.verticalAngle(facing)) + .rotateZDegrees(angle) .uncenter() .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index c4a2d9193a..94da91fdc8 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -44,7 +44,7 @@ public class GearboxVisual extends KineticBlockEntityVisual RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF), RenderStage.AFTER_BLOCK_ENTITIES) .createInstance(); - key.setRotationAxis(Direction.get(Direction.AxisDirection.POSITIVE, axis).step()) + key.setRotationAxis(axis) .setRotationalSpeed(getSpeed(direction)) .setRotationOffset(getRotationOffset(axis)).setColor(blockEntity) .setPosition(getVisualPosition()) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java index 6ca4ec2554..ac47392565 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java @@ -82,7 +82,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer { msr.center(); if (inverted) - msr.rotateX(180); + msr.rotateXDegrees(180); if (usingFlywheel) doItemTransforms(msr, baseAngle, lowerArmAngle, upperArmAngle, headAngle); @@ -93,7 +93,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer { if (hasItem) { ms.pushPose(); float itemScale = isBlockItem ? .5f : .625f; - msr.rotateX(90); + msr.rotateXDegrees(90); msLocal.translate(0, isBlockItem ? -9 / 16f : -10 / 16f, 0); msLocal.scale(itemScale, itemScale, itemScale); @@ -143,13 +143,13 @@ public class ArmRenderer extends KineticBlockEntityRenderer { transformHead(msr, headAngle); if (inverted) - msr.rotateZ(180); + msr.rotateZDegrees(180); claw.transform(msLocal) .renderInto(ms, builder); if (inverted) - msr.rotateZ(180); + msr.rotateZDegrees(180); for (int flip : Iterate.positiveAndNegative) { msLocal.pushPose(); @@ -175,22 +175,22 @@ public class ArmRenderer extends KineticBlockEntityRenderer { public static void transformHead(TransformStack msr, float headAngle) { msr.translate(0, 0, -15 / 16d); - msr.rotateX(headAngle - 45f); + msr.rotateXDegrees(headAngle - 45f); } public static void transformUpperArm(TransformStack msr, float upperArmAngle) { msr.translate(0, 0, -14 / 16d); - msr.rotateX(upperArmAngle - 90); + msr.rotateXDegrees(upperArmAngle - 90); } public static void transformLowerArm(TransformStack msr, float lowerArmAngle) { msr.translate(0, 2 / 16d, 0); - msr.rotateX(lowerArmAngle + 135); + msr.rotateXDegrees(lowerArmAngle + 135); } public static void transformBase(TransformStack msr, float baseAngle) { msr.translate(0, 4 / 16d, 0); - msr.rotateY(baseAngle); + msr.rotateYDegrees(baseAngle); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 617c6c20b4..828635a2dc 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -130,7 +130,7 @@ public class ArmVisual extends SingleRotatingVisual implements D msr.center(); if (ceiling) - msr.rotateX(180); + msr.rotateXDegrees(180); ArmRenderer.transformBase(msr, baseAngle); base.setTransform(msLocal) @@ -149,13 +149,13 @@ public class ArmVisual extends SingleRotatingVisual implements D ArmRenderer.transformHead(msr, headAngle); if (ceiling && blockEntity.goggles) - msr.rotateZ(180); + msr.rotateZDegrees(180); claw.setTransform(msLocal) .setChanged(); if (ceiling && blockEntity.goggles) - msr.rotateZ(180); + msr.rotateZDegrees(180); ItemStack item = blockEntity.heldItem; ItemRenderer itemRenderer = Minecraft.getInstance() diff --git a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java index e3372a0625..59412bb01c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java @@ -80,7 +80,7 @@ public class CreativeMotorBlockEntity extends GeneratingKineticBlockEntity { if (getSide() != Direction.UP) return; TransformStack.of(ms) - .rotateZ(-AngleHelper.horizontalAngle(facing) + 180); + .rotateZDegrees(-AngleHelper.horizontalAngle(facing) + 180); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java index 3554170d0c..5b629defb3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java @@ -26,8 +26,8 @@ public class SawFilterSlot extends ValueBoxTransform { int yRot = (state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0) + (state.getValue(SawBlock.FLIPPED) ? 0 : 180); TransformStack.of(ms) - .rotateY(yRot) - .rotateX(90); + .rotateYDegrees(yRot) + .rotateXDegrees(90); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java index 3dfedf383b..b4a336b0d6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java @@ -190,11 +190,11 @@ public class SawRenderer extends SafeBlockEntityRenderer { superBuffer.transform(matrices.getModel()) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(AngleHelper.verticalAngle(facing)); + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(AngleHelper.verticalAngle(facing)); if (!SawBlock.isHorizontal(state)) { - superBuffer.rotateZ(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0); + superBuffer.rotateZDegrees(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0); } superBuffer.uncenter() diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java index 2c177857bd..721c56a493 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java @@ -74,9 +74,9 @@ public class SteamEngineValueBox extends ValueBoxTransform.Sided { float yRot = AngleHelper.horizontalAngle(facing) + (facing == Direction.DOWN ? 180 : 0); TransformStack.of(ms) - .rotateY(yRot) - .rotateX(facing == Direction.DOWN ? -90 : 90) - .rotateY(roll); + .rotateYDegrees(yRot) + .rotateXDegrees(facing == Direction.DOWN ? -90 : 90) + .rotateYDegrees(roll); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java index 03bd6a5086..5f22430e71 100644 --- a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java @@ -43,8 +43,8 @@ public class ChuteRenderer extends SafeBlockEntityRenderer { float itemPosition = be.itemPosition.getValue(partialTicks); ms.translate(0, -.5 + itemPosition, 0); ms.scale(itemScale, itemScale, itemScale); - msr.rotateX(itemPosition * 180); - msr.rotateY(itemPosition * 180); + msr.rotateXDegrees(itemPosition * 180); + msr.rotateYDegrees(itemPosition * 180); itemRenderer.renderStatic(be.item, ItemDisplayContext.FIXED, light, overlay, ms, buffer, be.getLevel(), 0); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java index eae05059df..bdb7934b57 100644 --- a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java @@ -57,7 +57,7 @@ public class CreativeCrateBlockEntity extends CrateBlockEntity { @Override public void rotate(BlockState state, PoseStack ms) { TransformStack.of(ms) - .rotateX(90); + .rotateXDegrees(90); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java index 825d4be9f3..170703b3d5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java @@ -85,10 +85,10 @@ public class DepotRenderer extends SafeBlockEntityRenderer { msr.nudge(i); boolean renderUpright = BeltHelper.isItemUpright(stack); - msr.rotateY(360 / 8f * i); + msr.rotateYDegrees(360 / 8f * i); ms.translate(.35f, 0, 0); if (renderUpright) - msr.rotateY(-(360 / 8f * i)); + msr.rotateYDegrees(-(360 / 8f * i)); Random r = new Random(i + 1); int angle = (int) (360 * r.nextFloat()); renderItem(be.getLevel(), ms, buffer, light, overlay, stack, renderUpright ? angle + 90 : angle, r, itemPosition); @@ -109,7 +109,7 @@ public class DepotRenderer extends SafeBlockEntityRenderer { .isGui3d(); ms.pushPose(); - msr.rotateY(angle); + msr.rotateYDegrees(angle); if (renderUpright) { Entity renderViewEntity = Minecraft.getInstance().cameraEntity; @@ -130,14 +130,14 @@ public class DepotRenderer extends SafeBlockEntityRenderer { ms.scale(.5f, .5f, .5f); if (!blockItem && !renderUpright) { ms.translate(0, -3 / 16f, 0); - msr.rotateX(90); + msr.rotateXDegrees(90); } itemRenderer.renderStatic(itemStack, ItemDisplayContext.FIXED, light, overlay, ms, buffer, level, 0); ms.popPose(); if (!renderUpright) { if (!blockItem) - msr.rotateY(10); + msr.rotateYDegrees(10); ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); } else ms.translate(0, 0, -1 / 16f); diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java index b008db682b..a7d89a18a2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java @@ -631,8 +631,8 @@ public class EjectorBlockEntity extends KineticBlockEntity { return; } TransformStack.of(ms) - .rotateY(angle(state)) - .rotateX(90); + .rotateYDegrees(angle(state)) + .rotateXDegrees(90); } protected float angle(BlockState state) { diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java index b56fd39963..bbf928bc09 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java @@ -66,8 +66,8 @@ public class EjectorRenderer extends ShaftRenderer { msr.translate(launchedItemLocation.subtract(Vec3.atLowerCornerOf(be.getBlockPos()))); Vec3 itemRotOffset = VecHelper.voxelSpace(0, 3, 0); msr.translate(itemRotOffset); - msr.rotateY(AngleHelper.horizontalAngle(be.getFacing())); - msr.rotateX(time * 40); + msr.rotateYDegrees(AngleHelper.horizontalAngle(be.getFacing())); + msr.rotateXDegrees(time * 40); msr.translateBack(itemRotOffset); Minecraft.getInstance() .getItemRenderer() @@ -95,11 +95,11 @@ public class EjectorRenderer extends ShaftRenderer { static & Rotate> void applyLidAngle(KineticBlockEntity be, Vec3 rotationOffset, float angle, T tr) { tr.center() - .rotateY(180 + AngleHelper.horizontalAngle(be.getBlockState() + .rotateYDegrees(180 + AngleHelper.horizontalAngle(be.getBlockState() .getValue(EjectorBlock.HORIZONTAL_FACING))) .uncenter() .translate(rotationOffset) - .rotateX(-angle) + .rotateXDegrees(-angle) .translateBack(rotationOffset); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java index 9757f9360c..07d9c9792a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java @@ -60,22 +60,22 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { super.rotate(state, ms); if (shape == Shape.PULLING || shape == Shape.PUSHING) TransformStack.of(ms) - .rotateX(-22.5f); + .rotateXDegrees(-22.5f); return; } if (state.getBlock() instanceof FunnelBlock) { super.rotate(state, ms); TransformStack.of(ms) - .rotateX(-22.5f); + .rotateXDegrees(-22.5f); return; } float yRot = AngleHelper.horizontalAngle(AbstractFunnelBlock.getFunnelFacing(state)) + (facing == Direction.DOWN ? 180 : 0); TransformStack.of(ms) - .rotateY(yRot) - .rotateX(facing == Direction.DOWN ? -90 : 90); + .rotateYDegrees(yRot) + .rotateXDegrees(facing == Direction.DOWN ? -90 : 90); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java index b43edb8771..b3e5cc6ead 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java @@ -61,7 +61,7 @@ public class FunnelRenderer extends SmartBlockEntityRenderer flapAngle *= .5f; msr.translate(pivot) - .rotateX(flapAngle) + .rotateXDegrees(flapAngle) .translateBack(pivot); flapBuffer.light(light) diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java index ff28db04f4..5cd7d65d12 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java @@ -49,7 +49,7 @@ public class BeltTunnelRenderer extends SmartBlockEntityRenderer { BlockPos pos = basin.getBlockPos(); ms.translate(.5, .2f, .5); TransformStack.of(ms) - .rotateY(basin.ingredientRotation.getValue(partialTicks)); + .rotateYDegrees(basin.ingredientRotation.getValue(partialTicks)); RandomSource r = RandomSource.create(pos.hashCode()); Vec3 baseVector = new Vec3(.125, level, 0); @@ -80,8 +80,8 @@ public class BasinRenderer extends SmartBlockEntityRenderer { Vec3 itemPosition = VecHelper.rotate(baseVector, anglePartition * itemCount, Axis.Y); ms.translate(itemPosition.x, itemPosition.y, itemPosition.z); TransformStack.of(ms) - .rotateY(anglePartition * itemCount + 35) - .rotateX(65); + .rotateYDegrees(anglePartition * itemCount + 35) + .rotateXDegrees(65); for (int i = 0; i <= stack.getCount() / 8; i++) { ms.pushPose(); @@ -125,8 +125,8 @@ public class BasinRenderer extends SmartBlockEntityRenderer { .translate(outVec) .translate(new Vec3(0, Math.max(-.55f, -(progress * progress * 2)), 0)) .translate(directionVec.scale(progress * .5f)) - .rotateY(AngleHelper.horizontalAngle(direction)) - .rotateX(progress * 180); + .rotateYDegrees(AngleHelper.horizontalAngle(direction)) + .rotateXDegrees(progress * 180); renderItem(ms, buffer, light, overlay, intAttached.getValue()); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java b/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java index bb53b0c1e4..44b3d80549 100644 --- a/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java @@ -48,7 +48,7 @@ public class FilteredDetectorFilterSlot extends ValueBoxTransform.Sided { if (getSide() != Direction.UP) return; TransformStack.of(ms) - .rotateZ(-AngleHelper.horizontalAngle(facing) + 180); + .rotateZDegrees(-AngleHelper.horizontalAngle(facing) + 180); } @Override diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java index 0d875f90c4..e8f4923ee7 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java @@ -21,8 +21,8 @@ public class BrassDiodeScrollSlot extends ValueBoxTransform { public void rotate(BlockState state, PoseStack ms) { float yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)) + 180; TransformStack.of(ms) - .rotateY(yRot) - .rotateX(90); + .rotateYDegrees(yRot) + .rotateXDegrees(90); } @Override diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java index 76e9f142a6..6d48ead84f 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java @@ -45,8 +45,8 @@ public class DisplayLinkRenderer extends SafeBlockEntityRenderer { if (xOffset + 16 > cardWidth - 26) { TransformStack.of(matrixStack) - .rotateZ(-90); + .rotateZDegrees(-90); int zLevel = 200; graphics.fillGradient(-cardHeight + 2, 18, -2 - cardHeader, 28, zLevel, 0x44000000, 0x00000000); graphics.fillGradient(-cardHeight + 2, cardWidth - 26, -2 - cardHeader, cardWidth - 16, zLevel, 0x00000000, diff --git a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java index 43f00452f9..f2ab4e2f4f 100644 --- a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java @@ -122,7 +122,7 @@ public class TrainHatArmorLayer if (valid) { ms.scale(1, -1, -1); ms.translate(0, -2.25f / 16f, 0); - msr.rotateX(-8.5f); + msr.rotateXDegrees(-8.5f); BlockState air = Blocks.AIR.defaultBlockState(); CachedBufferer.partial(AllPartialModels.TRAIN_HAT, air) .disableDiffuse() diff --git a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java index 79c31d5e3c..30617fe4a7 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java @@ -103,8 +103,8 @@ public abstract class AbstractStationScreen extends AbstractSimiScreen { msr.pushPose() .translate(guiLeft + background.width + 4, guiTop + background.height + 4, 100) .scale(40) - .rotateX(-22) - .rotateY(63); + .rotateXDegrees(-22) + .rotateYDegrees(63); GuiGameElement.of(blockEntity.getBlockState() .setValue(BlockStateProperties.WATERLOGGED, false)) .render(graphics); diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java b/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java index c2c5262ec6..c222de8084 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java @@ -118,7 +118,7 @@ public class StationRenderer extends SafeBlockEntityRenderer SuperByteBuffer flagBB = CachedBufferer.partial(flag, be.getBlockState()); transformFlag(flagBB, be, partialTicks, be.flagYRot, be.flagFlipped); flagBB.translate(0.5f / 16, 0, 0) - .rotateY(be.flagFlipped ? 0 : 180) + .rotateYDegrees(be.flagFlipped ? 0 : 180) .translate(-0.5f / 16, 0, 0) .light(light) .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); @@ -135,10 +135,10 @@ public class StationRenderer extends SafeBlockEntityRenderer float nudge = 1 / 512f; flag.center() - .rotateY(yRot) + .rotateYDegrees(yRot) .translate(nudge, 9.5f / 16f, flipped ? 14f / 16f - nudge : 2f / 16f + nudge) .uncenter() - .rotateX((flipped ? 1 : -1) * (progress * 90 + 270)); + .rotateXDegrees((flipped ? 1 : -1) * (progress * 90 + 270)); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java index 8acb23a316..443c951e8e 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java @@ -48,7 +48,7 @@ public class ValueBoxRenderer { ms.pushPose(); TransformStack.of(ms) - .rotateX(230); + .rotateXDegrees(230); Matrix3f copy = new Matrix3f(ms.last() .normal()); ms.popPose(); @@ -57,7 +57,7 @@ public class ValueBoxRenderer { TransformStack.of(ms) .translate(0, 0, -1 / 4f) .translate(0, 0, 1 / 32f + .001) - .rotateY(180); + .rotateYDegrees(180); PoseStack squashedMS = new PoseStack(); squashedMS.last() diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java index fcfa6eadf9..96e79e5d83 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java @@ -113,8 +113,8 @@ public abstract class ValueBoxTransform { float yRot = AngleHelper.horizontalAngle(getSide()) + 180; float xRot = getSide() == Direction.UP ? 90 : getSide() == Direction.DOWN ? 270 : 0; TransformStack.of(ms) - .rotateY(yRot) - .rotateX(xRot); + .rotateYDegrees(yRot) + .rotateXDegrees(xRot); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java index 5ea6f911ea..f4647daaca 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java @@ -85,9 +85,9 @@ public class CreateBlockEntityBuilder extends BlockEnt var instanceFactory = this.instanceFactory; if (instanceFactory != null) { NonNullPredicate renderNormally = this.renderNormally; - SimpleBlockEntityVisualizer.configure(getEntry()) + SimpleBlockEntityVisualizer.builder(getEntry()) .factory(instanceFactory.get()) - .skipRender(be -> !renderNormally.test(be)) + .skipVanillaRender(be -> !renderNormally.test(be)) .apply(); } }); diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java index 1081033254..f745eae513 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java @@ -58,9 +58,9 @@ public class CreateEntityBuilder extends EntityBuilder renderNormally = this.renderNormally; - SimpleEntityVisualizer.configure(getEntry()) + SimpleEntityVisualizer.builder(getEntry()) .factory(instanceFactory.get()) - .skipRender(be -> !renderNormally.test(be)) + .skipVanillaRender(be -> !renderNormally.test(be)) .apply(); } diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 4deb18cc37..cae32139d1 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -62,8 +62,8 @@ public class FluidRenderer { var msr = TransformStack.of(ms); ms.pushPose(); msr.center() - .rotateY(AngleHelper.horizontalAngle(direction)) - .rotateX(direction == Direction.UP ? 180 : direction == Direction.DOWN ? 0 : 270) + .rotateYDegrees(AngleHelper.horizontalAngle(direction)) + .rotateXDegrees(direction == Direction.UP ? 180 : direction == Direction.DOWN ? 0 : 270) .uncenter(); ms.translate(.5, 0, .5); @@ -78,7 +78,7 @@ public class FluidRenderer { ms.pushPose(); renderFlowingTiledFace(Direction.SOUTH, hMin, yMin, hMax, yMax, h, builder, ms, light, color, flowTexture); ms.popPose(); - msr.rotateY(90); + msr.rotateYDegrees(90); } if (progress != 1) @@ -112,7 +112,7 @@ public class FluidRenderer { if (fluidAttributes.isLighterThanAir()) TransformStack.of(ms) .translate(center) - .rotateX(180) + .rotateXDegrees(180) .translateBack(center); for (Direction side : Iterate.directions) { diff --git a/src/main/java/com/simibubi/create/foundation/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/outliner/Outline.java index d5b9dbcb2d..efd774f032 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/Outline.java @@ -60,8 +60,8 @@ public abstract class Outline { poseStack.pushPose(); TransformStack.of(poseStack) .translate(start.x - camera.x, start.y - camera.y, start.z - camera.z) - .rotateY(hAngle) - .rotateX(vAngle); + .rotateYDegrees(hAngle) + .rotateXDegrees(vAngle); bufferCuboidLine(poseStack.last(), consumer, new Vector3f(), Direction.SOUTH, length, width, color, lightmap, disableNormals); poseStack.popPose(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 38bd058768..01e0b14e60 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -20,7 +20,6 @@ import org.apache.commons.lang3.mutable.MutableObject; import org.joml.Matrix4f; import org.joml.Vector4f; -import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.gui.UIRenderHelper; @@ -32,6 +31,7 @@ import com.simibubi.create.foundation.ponder.element.WorldSectionElement; import com.simibubi.create.foundation.ponder.instruction.HideAllInstruction; import com.simibubi.create.foundation.ponder.instruction.PonderInstruction; import com.simibubi.create.foundation.ponder.ui.PonderUI; +import com.simibubi.create.foundation.render.DiffuseLightCalculator; import com.simibubi.create.foundation.render.ForcedDiffuseState; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -525,13 +525,13 @@ public class PonderScene { ms.translate(width / 2, height / 2, 200 + offset); TransformStack.of(ms) - .rotateX(-35) - .rotateY(55) + .rotateXDegrees(-35) + .rotateYDegrees(55) .translate(offset, 0, 0) - .rotateY(-55) - .rotateX(35) - .rotateX(xRotation.getValue(pt)) - .rotateY(yRotation.getValue(pt)); + .rotateYDegrees(-55) + .rotateXDegrees(35) + .rotateXDegrees(xRotation.getValue(pt)) + .rotateYDegrees(yRotation.getValue(pt)); UIRenderHelper.flipForGuiRender(ms); float f = 30 * scaleFactor; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java index f1462a21ed..1d31555a58 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java @@ -104,7 +104,7 @@ public class MinecartElement extends AnimatedSceneElement { Mth.lerp(pt, entity.yo, entity.getY()), Mth.lerp(pt, entity.zo, entity.getZ())); TransformStack.of(ms) - .rotateY(rotation.getValue(pt)); + .rotateYDegrees(rotation.getValue(pt)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); ms.popPose(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java index 77bf00c4c6..fc177c0028 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java @@ -148,7 +148,7 @@ public class ParrotElement extends AnimatedSceneElement { Mth.lerp(pt, entity.zo, entity.getZ())); TransformStack.of(ms) - .rotateY(AngleHelper.angleLerp(pt, entity.yRotO, entity.getYRot())); + .rotateYDegrees(AngleHelper.angleLerp(pt, entity.yRotO, entity.getYRot())); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); ms.popPose(); diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 747b8f0428..11a055ffd1 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -25,67 +25,71 @@ public class AllInstanceTypes { .cullShader(asResource("instance/cull/rotating.glsl")) .vertexShader(asResource("instance/rotating.vert")) .layout(LayoutBuilder.create() - .vector("light", IntegerRepr.SHORT, 2) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) + .vector("light", IntegerRepr.SHORT, 2) + .vector("overlay", IntegerRepr.SHORT, 2) .vector("pos", FloatRepr.FLOAT, 3) .scalar("speed", FloatRepr.FLOAT) .scalar("offset", FloatRepr.FLOAT) .vector("axis", FloatRepr.NORMALIZED_BYTE, 3) .build()) .writer((ptr, instance) -> { - MemoryUtil.memPutShort(ptr, instance.blockLight); - MemoryUtil.memPutShort(ptr + 2, instance.skyLight); - MemoryUtil.memPutByte(ptr + 4, instance.r); - MemoryUtil.memPutByte(ptr + 5, instance.g); - MemoryUtil.memPutByte(ptr + 6, instance.b); - MemoryUtil.memPutByte(ptr + 7, instance.a); - MemoryUtil.memPutFloat(ptr + 8, instance.x); - MemoryUtil.memPutFloat(ptr + 12, instance.y); - MemoryUtil.memPutFloat(ptr + 16, instance.z); - MemoryUtil.memPutFloat(ptr + 20, instance.rotationalSpeed); - MemoryUtil.memPutFloat(ptr + 24, instance.rotationOffset); - MemoryUtil.memPutByte(ptr + 28, instance.rotationAxisX); - MemoryUtil.memPutByte(ptr + 29, instance.rotationAxisY); - MemoryUtil.memPutByte(ptr + 30, instance.rotationAxisZ); + MemoryUtil.memPutByte(ptr, instance.r); + MemoryUtil.memPutByte(ptr + 1, instance.g); + MemoryUtil.memPutByte(ptr + 2, instance.b); + MemoryUtil.memPutByte(ptr + 3, instance.a); + MemoryUtil.memPutShort(ptr + 4, instance.blockLight); + MemoryUtil.memPutShort(ptr + 6, instance.skyLight); + MemoryUtil.memPutInt(ptr + 8, instance.overlay); + MemoryUtil.memPutFloat(ptr + 12, instance.x); + MemoryUtil.memPutFloat(ptr + 16, instance.y); + MemoryUtil.memPutFloat(ptr + 20, instance.z); + MemoryUtil.memPutFloat(ptr + 24, instance.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 28, instance.rotationOffset); + MemoryUtil.memPutByte(ptr + 32, instance.rotationAxisX); + MemoryUtil.memPutByte(ptr + 33, instance.rotationAxisY); + MemoryUtil.memPutByte(ptr + 34, instance.rotationAxisZ); }) .register(); public static final InstanceType BELTS = SimpleInstanceType.builder(BeltInstance::new) .cullShader(asResource("instance/cull/belt.glsl")) .vertexShader(asResource("instance/belt.vert")) .layout(LayoutBuilder.create() - .vector("light", IntegerRepr.SHORT, 2) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) + .vector("light", IntegerRepr.SHORT, 2) + .vector("overlay", IntegerRepr.SHORT, 2) .vector("pos", FloatRepr.FLOAT, 3) .scalar("speed", FloatRepr.FLOAT) .scalar("offset", FloatRepr.FLOAT) .vector("rotation", FloatRepr.FLOAT, 4) .vector("sourceTexture", FloatRepr.FLOAT, 2) .vector("scrollTexture", FloatRepr.FLOAT, 4) - .scalar("scrollMult", FloatRepr.NORMALIZED_BYTE) + .scalar("scrollMult", FloatRepr.FLOAT) .build()) .writer((ptr, instance) -> { - MemoryUtil.memPutShort(ptr, instance.blockLight); - MemoryUtil.memPutShort(ptr + 2, instance.skyLight); - MemoryUtil.memPutByte(ptr + 4, instance.r); - MemoryUtil.memPutByte(ptr + 5, instance.g); - MemoryUtil.memPutByte(ptr + 6, instance.b); - MemoryUtil.memPutByte(ptr + 7, instance.a); - MemoryUtil.memPutFloat(ptr + 8, instance.x); - MemoryUtil.memPutFloat(ptr + 12, instance.y); - MemoryUtil.memPutFloat(ptr + 16, instance.z); - MemoryUtil.memPutFloat(ptr + 20, instance.rotationalSpeed); - MemoryUtil.memPutFloat(ptr + 24, instance.rotationOffset); - MemoryUtil.memPutFloat(ptr + 28, instance.qX); - MemoryUtil.memPutFloat(ptr + 32, instance.qY); - MemoryUtil.memPutFloat(ptr + 36, instance.qZ); - MemoryUtil.memPutFloat(ptr + 40, instance.qW); - MemoryUtil.memPutFloat(ptr + 44, instance.sourceU); - MemoryUtil.memPutFloat(ptr + 48, instance.sourceV); - MemoryUtil.memPutFloat(ptr + 52, instance.minU); - MemoryUtil.memPutFloat(ptr + 56, instance.minV); - MemoryUtil.memPutFloat(ptr + 60, instance.maxU); - MemoryUtil.memPutFloat(ptr + 64, instance.maxV); - MemoryUtil.memPutByte(ptr + 68, instance.scrollMult); + MemoryUtil.memPutByte(ptr, instance.r); + MemoryUtil.memPutByte(ptr + 1, instance.g); + MemoryUtil.memPutByte(ptr + 2, instance.b); + MemoryUtil.memPutByte(ptr + 3, instance.a); + MemoryUtil.memPutShort(ptr + 4, instance.blockLight); + MemoryUtil.memPutShort(ptr + 6, instance.skyLight); + MemoryUtil.memPutInt(ptr + 8, instance.overlay); + MemoryUtil.memPutFloat(ptr + 12, instance.x); + MemoryUtil.memPutFloat(ptr + 16, instance.y); + MemoryUtil.memPutFloat(ptr + 20, instance.z); + MemoryUtil.memPutFloat(ptr + 24, instance.rotationalSpeed); + MemoryUtil.memPutFloat(ptr + 28, instance.rotationOffset); + MemoryUtil.memPutFloat(ptr + 32, instance.rotation.x); + MemoryUtil.memPutFloat(ptr + 36, instance.rotation.y); + MemoryUtil.memPutFloat(ptr + 40, instance.rotation.z); + MemoryUtil.memPutFloat(ptr + 44, instance.rotation.w); + MemoryUtil.memPutFloat(ptr + 48, instance.sourceU); + MemoryUtil.memPutFloat(ptr + 52, instance.sourceV); + MemoryUtil.memPutFloat(ptr + 56, instance.minU); + MemoryUtil.memPutFloat(ptr + 60, instance.minV); + MemoryUtil.memPutFloat(ptr + 64, instance.maxU); + MemoryUtil.memPutFloat(ptr + 68, instance.maxV); + MemoryUtil.memPutFloat(ptr + 72, instance.scrollMult); }) .register(); public static final InstanceType ACTORS = SimpleInstanceType.builder(ActorInstance::new) @@ -110,10 +114,10 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisX); MemoryUtil.memPutByte(ptr + 21, instance.rotationAxisY); MemoryUtil.memPutByte(ptr + 22, instance.rotationAxisZ); - MemoryUtil.memPutFloat(ptr + 24, instance.qX); - MemoryUtil.memPutFloat(ptr + 28, instance.qY); - MemoryUtil.memPutFloat(ptr + 32, instance.qZ); - MemoryUtil.memPutFloat(ptr + 34, instance.qW); + MemoryUtil.memPutFloat(ptr + 24, instance.rotation.x); + MemoryUtil.memPutFloat(ptr + 28, instance.rotation.y); + MemoryUtil.memPutFloat(ptr + 32, instance.rotation.z); + MemoryUtil.memPutFloat(ptr + 34, instance.rotation.w); MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterX); MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterY); MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterZ); diff --git a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java index 80975e804a..87e5954960 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java @@ -67,8 +67,8 @@ public class CachedBufferer { PoseStack stack = new PoseStack(); TransformStack.of(stack) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(AngleHelper.verticalAngle(facing)) + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(AngleHelper.verticalAngle(facing)) .uncenter(); return stack; }; @@ -79,8 +79,8 @@ public class CachedBufferer { PoseStack stack = new PoseStack(); TransformStack.of(stack) .center() - .rotateY(AngleHelper.horizontalAngle(facing)) - .rotateX(AngleHelper.verticalAngle(facing) + 90) + .rotateYDegrees(AngleHelper.horizontalAngle(facing)) + .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90) .uncenter(); return stack; }; diff --git a/src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java b/src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java new file mode 100644 index 0000000000..755e42687f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java @@ -0,0 +1,29 @@ +package com.simibubi.create.foundation.render; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraftforge.client.model.lighting.QuadLighter; + +public interface DiffuseLightCalculator { + DiffuseLightCalculator DEFAULT = DiffuseLightCalculator::diffuseLight; + DiffuseLightCalculator NETHER = DiffuseLightCalculator::diffuseLightNether; + + static DiffuseLightCalculator forLevel(ClientLevel level) { + return level.effects().constantAmbientLight() ? NETHER : DEFAULT; + } + + float getDiffuse(float normalX, float normalY, float normalZ, boolean shaded); + + static float diffuseLight(float x, float y, float z, boolean shaded) { + if (!shaded) { + return 1f; + } + return QuadLighter.calculateShade(x, y, z, false); + } + + static float diffuseLightNether(float x, float y, float z, boolean shaded) { + if (!shaded) { + return 0.9f; + } + return QuadLighter.calculateShade(x, y, z, true); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java b/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java index 35de4b9159..3c94a6281f 100644 --- a/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java +++ b/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java @@ -2,8 +2,6 @@ package com.simibubi.create.foundation.render; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; - import it.unimi.dsi.fastutil.objects.ObjectArrayList; public final class ForcedDiffuseState { diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index f1487a4a79..a68ec03029 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -6,7 +6,6 @@ import org.joml.Quaternionf; import org.joml.Vector3f; import org.joml.Vector4f; -import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.util.ShadersModHandler; import com.mojang.blaze3d.systems.RenderSystem; diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index 9bccd5c190..a66532bfff 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -49,7 +49,8 @@ public abstract class Outline { ms.pushPose(); TransformStack.of(ms) .translate(start) - .rotateY(hAngle).rotateX(vAngle); + .rotateYDegrees(hAngle) + .rotateXDegrees(vAngle); renderAACuboidLine(ms, buffer, Vec3.ZERO, new Vec3(0, 0, diff.length())); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java index 25c1c07854..18f68ecab6 100644 --- a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java @@ -100,7 +100,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { ms.scale(24 * side, 24 * side, 32); ms.translate(-1.75 * ((alpha * alpha) / 2f + .5f), .25f, 0); TransformStack.of(ms) - .rotateX(45); + .rotateXDegrees(45); GuiGameElement.of(AllBlocks.LARGE_COGWHEEL.getDefaultState()) .rotateBlock(0, Util.getMillis() / 32f * side, 0) .render(graphics); diff --git a/src/main/resources/assets/create/flywheel/instance/belt.vert b/src/main/resources/assets/create/flywheel/instance/belt.vert index b8b0fb93dd..15fb0061e9 100644 --- a/src/main/resources/assets/create/flywheel/instance/belt.vert +++ b/src/main/resources/assets/create/flywheel/instance/belt.vert @@ -11,6 +11,7 @@ void flw_instanceVertex(in FlwInstance instance) { flw_vertexTexCoord = flw_vertexTexCoord - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll); flw_vertexLight = instance.light / 15.; + flw_vertexOverlay = instance.overlay; #if defined(DEBUG_RAINBOW) flw_vertexColor = instance.color; diff --git a/src/main/resources/assets/create/flywheel/instance/rotating.vert b/src/main/resources/assets/create/flywheel/instance/rotating.vert index 3221cf0e78..17dfd15e78 100644 --- a/src/main/resources/assets/create/flywheel/instance/rotating.vert +++ b/src/main/resources/assets/create/flywheel/instance/rotating.vert @@ -15,6 +15,7 @@ void flw_instanceVertex(in FlwInstance instance) { flw_vertexNormal = spin * flw_vertexNormal; flw_vertexLight = instance.light / 15.; + flw_vertexOverlay = instance.overlay; #if defined(DEBUG_RAINBOW) flw_vertexColor = instance.color; From 633a7abc237f56a4364b4479c32f90de0c090f69 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Mon, 12 Feb 2024 16:27:29 -0800 Subject: [PATCH 12/35] Exit stage right - Update to implicit render stage API. - Fix bounding sphere transformers. - Bump flywheel version. - Update flywheel mixin config jsons. --- build.gradle | 24 +++---------------- gradle.properties | 2 +- .../harvester/HarvesterActorVisual.java | 3 +-- .../contraptions/actors/psi/PIInstance.java | 7 +++--- .../actors/roller/RollerActorVisual.java | 3 +-- .../contraptions/bearing/BearingVisual.java | 3 +-- .../bearing/StabilizedBearingVisual.java | 5 ++-- .../contraptions/chassis/StickerVisual.java | 3 +-- .../gantry/GantryCarriageVisual.java | 3 +-- .../contraptions/pulley/HosePulleyVisual.java | 11 ++++----- .../contraptions/pulley/RopePulleyVisual.java | 11 ++++----- .../equipment/toolbox/ToolBoxVisual.java | 5 ++-- .../fluids/pipes/valve/FluidValveVisual.java | 3 +-- .../kinetics/base/SingleRotatingVisual.java | 3 +-- .../content/kinetics/belt/BeltVisual.java | 5 ++-- .../kinetics/crank/HandCrankVisual.java | 3 +-- .../deployer/DeployerActorVisual.java | 7 +++--- .../kinetics/deployer/DeployerVisual.java | 7 +++--- .../kinetics/drill/DrillActorVisual.java | 3 +-- .../content/kinetics/fan/FanVisual.java | 5 ++-- .../kinetics/flywheel/FlywheelVisual.java | 5 ++-- .../content/kinetics/gauge/GaugeVisual.java | 7 +++--- .../kinetics/gearbox/GearboxVisual.java | 3 +-- .../kinetics/mechanicalArm/ArmVisual.java | 15 ++++++------ .../content/kinetics/mixer/MixerVisual.java | 5 ++-- .../content/kinetics/press/PressVisual.java | 3 +-- .../BracketedKineticBlockEntityVisual.java | 3 +-- .../encased/EncasedCogVisual.java | 5 ++-- .../steamEngine/SteamEngineVisual.java | 7 +++--- .../transmission/SplitShaftVisual.java | 3 +-- .../logistics/depot/EjectorVisual.java | 3 +-- .../logistics/funnel/FunnelVisual.java | 3 +-- .../logistics/tunnel/BeltTunnelVisual.java | 3 +-- .../analogLever/AnalogLeverVisual.java | 5 ++-- .../redstone/diodes/BrassDiodeVisual.java | 3 +-- .../cannon/SchematicannonVisual.java | 5 ++-- .../content/trains/bogey/BogeyRenderer.java | 5 ++-- .../content/trains/track/TrackVisual.java | 11 ++++----- .../foundation/render/AllInstanceTypes.java | 2 ++ .../create/flywheel/instance/cull/belt.glsl | 6 ++--- .../instance/cull/contraption_actor.glsl | 13 ++++------ .../flywheel/instance/cull/rotating.glsl | 16 +++---------- 42 files changed, 90 insertions(+), 157 deletions(-) diff --git a/build.gradle b/build.gradle index 6f78f52bdf..42beba0b1d 100644 --- a/build.gradle +++ b/build.gradle @@ -33,8 +33,9 @@ println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getPro mixin { add sourceSets.main, 'create.refmap.json' - config 'flywheel.mixins.json' - config 'flywheel.sodium.mixins.json' + config 'flywheel.backend.mixins.json' + config 'flywheel.impl.mixins.json' + config 'flywheel.impl.sodium.mixins.json' config 'create.mixins.json' debug.verbose = true @@ -160,23 +161,6 @@ repositories { } } - -// Fix for loading non-mod libraries in dev-env, used for Miniball. -// https://gist.github.com/SizableShrimp/66b22f1b24c255e1491c8d98d3f11f83 -// v--------------------------------------------------------------------v -configurations { - library - implementation.extendsFrom library -} - -minecraft.runs.configureEach { - lazyToken('minecraft_classpath') { - configurations.library.copyRecursive().resolve().collect { it.absolutePath }.join(File.pathSeparator) - } -} -// ^--------------------------------------------------------------------^ - - dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" @@ -187,8 +171,6 @@ dependencies { jarJar.ranged(it, '[1.0,2.0)') } - library 'com.dreizak:miniball:1.0.3' - implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") if (flywheelInWorkspace) { diff --git a/gradle.properties b/gradle.properties index 6dc0154e5c..dd78f8660b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-32 +flywheel_version = 1.0.0-alpha-43 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 5c69dfac07..c947830880 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.actors.harvester; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -38,7 +37,7 @@ public class HarvesterActorVisual extends ActorVisual { facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); - harvester = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(getRollingPartial()), RenderStage.AFTER_BLOCK_ENTITIES) + harvester = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(getRollingPartial())) .createInstance(); horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index 1863084fa1..c06450979b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.InstancerProvider; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -36,9 +35,9 @@ public class PIInstance { public void init(boolean lit) { this.lit = lit; - middle = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit)), RenderStage.AFTER_BLOCK_ENTITIES) + middle = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit))) .createInstance(); - top = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableStorageInterfaceRenderer.getTopForState(blockState)), RenderStage.AFTER_BLOCK_ENTITIES) + top = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableStorageInterfaceRenderer.getTopForState(blockState))) .createInstance(); } @@ -65,7 +64,7 @@ public class PIInstance { public void tick(boolean lit) { if (this.lit != lit) { this.lit = lit; - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit)), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit))) .stealInstance(middle); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java index a88e001721..73189c93c7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.actors.roller; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -21,7 +20,7 @@ public class RollerActorVisual extends HarvesterActorVisual { MovementContext movementContext) { super(visualizationContext, simulationWorld, movementContext); - frame = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ROLLER_FRAME), RenderStage.AFTER_BLOCK_ENTITIES) + frame = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ROLLER_FRAME)) .createInstance(); frame.setBlockLight(localBlockLight()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index 7b54f97b49..fa4881b7e8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -4,7 +4,6 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -40,7 +39,7 @@ public class BearingVisual e PartialModel top = blockEntity.isWoodenTop() ? AllPartialModels.BEARING_TOP_WOODEN : AllPartialModels.BEARING_TOP; - topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top), RenderStage.AFTER_BLOCK_ENTITIES) + topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top)) .createInstance(); topInstance.setPosition(getVisualPosition()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 81a0e6f7cc..967c7f8b7c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.bearing; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; @@ -39,7 +38,7 @@ public class StabilizedBearingVisual extends ActorVisual { blockOrientation = BearingVisual.getBlockStateOrientation(facing); - topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.BEARING_TOP), RenderStage.AFTER_BLOCK_ENTITIES) + topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.BEARING_TOP)) .createInstance(); int blockLight = localBlockLight(); @@ -47,7 +46,7 @@ public class StabilizedBearingVisual extends ActorVisual { .setRotation(blockOrientation) .setBlockLight(blockLight); - shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite()), RenderStage.AFTER_BLOCK_ENTITIES) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite())) .createInstance(); // not rotating so no need to set speed, axis, etc. diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 893a82939a..68485903e7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -30,7 +29,7 @@ public class StickerVisual extends AbstractBlockEntityVisual public StickerVisual(VisualizationContext context, StickerBlockEntity blockEntity) { super(context, blockEntity); - head = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.STICKER_HEAD), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + head = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.STICKER_HEAD)).createInstance(); fakeWorld = blockEntity.getLevel() != Minecraft.getInstance().level; facing = blockState.getValue(StickerBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index c7f257598b..c6435745f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -35,7 +34,7 @@ public class GantryCarriageVisual extends ShaftVisual public GantryCarriageVisual(VisualizationContext context, GantryCarriageBlockEntity blockEntity) { super(context, blockEntity); - gantryCogs = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GANTRY_COGS), RenderStage.AFTER_BLOCK_ENTITIES) + gantryCogs = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GANTRY_COGS)) .createInstance(); facing = blockState.getValue(GantryCarriageBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index 3076ace2e0..df4391f18c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -17,23 +16,23 @@ public class HosePulleyVisual extends AbstractPulleyVisual getRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE)); } protected Instancer getMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET)); } protected Instancer getHalfMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET)); } protected Instancer getCoilModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_COIL, rotatingAbout), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_COIL, rotatingAbout)); } protected Instancer getHalfRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF)); } protected float getOffset() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index 965824ed67..b403dd32a4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,23 +17,23 @@ public class RopePulleyVisual extends AbstractPulleyVisual { } protected Instancer getRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState())); } protected Instancer getMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState()), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState())); } protected Instancer getHalfMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET)); } protected Instancer getCoilModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_COIL, rotatingAbout), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_COIL, rotatingAbout)); } protected Instancer getHalfRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF)); } protected float getOffset() { diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 43ec911986..0d92b444de 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.equipment.toolbox; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; @@ -32,10 +31,10 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual @Override public void init(float pt) { - Instancer drawerModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_DRAWER), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer drawerModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_DRAWER)); drawers = new TransformedInstance[]{drawerModel.createInstance(), drawerModel.createInstance()}; - lid = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor())), RenderStage.AFTER_BLOCK_ENTITIES) + lid = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor()))) .createInstance(); super.init(pt); diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 4128ee9b1a..c9f1bbbb40 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -43,7 +42,7 @@ public class FluidValveVisual extends ShaftVisual impleme pointerRotationOffset = twist ? 90 : 0; settled = false; - pointer = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + pointer = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER)).createInstance(); transformPointer(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index cb00ea20ca..1dbed3981d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.base; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -19,7 +18,7 @@ public class SingleRotatingVisual extends KineticB @Override public void init(float pt) { - rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model(), RenderStage.AFTER_BLOCK_ENTITIES) + rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model()) .createInstance(); setup(rotatingModel); super.init(pt); diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 2307d21b7e..15c156de6e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -5,7 +5,6 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -65,7 +64,7 @@ public class BeltVisual extends KineticBlockEntityVisual { PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom); SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - Instancer beltModel = instancerProvider.instancer(AllInstanceTypes.BELTS, Models.partial(beltPartial), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer beltModel = instancerProvider.instancer(AllInstanceTypes.BELTS, Models.partial(beltPartial)); keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); @@ -138,7 +137,7 @@ public class BeltVisual extends KineticBlockEntityVisual { msr.uncenter(); }); - return instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(AllInstanceTypes.ROTATING, model); } private Direction getOrientation() { diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 854d8490b1..bae8235b4b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.crank; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visual.DynamicVisual; @@ -25,7 +24,7 @@ public class HandCrankVisual extends SingleRotatingVisual super(modelManager, blockEntity); facing = blockState.getValue(BlockStateProperties.FACING); Model model = blockEntity.getRenderedHandleInstance(); - crank = instancerProvider.instancer(InstanceTypes.TRANSFORMED, model, RenderStage.AFTER_BLOCK_ENTITIES) + crank = instancerProvider.instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); rotateCrank(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index e0c2656125..e0db38b910 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -59,11 +58,11 @@ public class DeployerActorVisual extends ActorVisual { xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.DEPLOYER_POLE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); - hand = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(handPose), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + pole = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.DEPLOYER_POLE)).createInstance(); + hand = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(handPose)).createInstance(); Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); - shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(KineticBlockEntityVisual.shaft(axis)), RenderStage.AFTER_BLOCK_ENTITIES) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(KineticBlockEntityVisual.shaft(axis))) .createInstance(); int blockLight = localBlockLight(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 3b93b1dae5..20150c01bc 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -7,7 +7,6 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.TickableVisual; @@ -54,11 +53,11 @@ public class DeployerVisual extends ShaftVisual implements xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.DEPLOYER_POLE), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + pole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.DEPLOYER_POLE)).createInstance(); currentHand = this.blockEntity.getHandPose(); - hand = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + hand = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)).createInstance(); progress = getProgress(AnimationTickHolder.getPartialTicks()); updateRotation(pole, hand, yRot, xRot, zRot); @@ -71,7 +70,7 @@ public class DeployerVisual extends ShaftVisual implements if (currentHand != handPose) { currentHand = handPose; - instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)) .stealInstance(hand); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index cb135d6119..4eb8dab7cc 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.drill; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; @@ -39,7 +38,7 @@ public class DrillActorVisual extends ActorVisual { else eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0); - drillHead = instancerProvider.instancer(AllInstanceTypes.ACTORS, Models.partial(AllPartialModels.DRILL_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) + drillHead = instancerProvider.instancer(AllInstanceTypes.ACTORS, Models.partial(AllPartialModels.DRILL_HEAD)) .createInstance(); drillHead.setPosition(context.localPos) diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java index 261db244e3..ecf69d58e6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java @@ -4,7 +4,6 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; @@ -30,8 +29,8 @@ public class FanVisual extends KineticBlockEntityVisual { direction = blockState.getValue(FACING); opposite = direction.getOpposite(); - shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, opposite), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); - fan = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER, opposite), RenderStage.AFTER_BLOCK_ENTITIES) + shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, opposite)).createInstance(); + fan = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER, opposite)) .createInstance(); setup(shaft); diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index b5bb46d78a..dba60d3b8f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -29,9 +28,9 @@ public class FlywheelVisual extends KineticBlockEntityVisual implemen GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); - Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); Instancer headModel = getHeadModel(); ms = new PoseStack(); @@ -160,7 +159,7 @@ public abstract class GaugeVisual extends ShaftVisual implemen @Override protected Instancer getHeadModel() { - return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED)); } } @@ -171,7 +170,7 @@ public abstract class GaugeVisual extends ShaftVisual implemen @Override protected Instancer getHeadModel() { - return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS), RenderStage.AFTER_BLOCK_ENTITIES); + return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS)); } } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index 94da91fdc8..cb80a247f8 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -4,7 +4,6 @@ import java.util.EnumMap; import java.util.Map; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -41,7 +40,7 @@ public class GearboxVisual extends KineticBlockEntityVisual if (boxAxis == axis) continue; - RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF), RenderStage.AFTER_BLOCK_ENTITIES) + RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF)) .createInstance(); key.setRotationAxis(axis) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 828635a2dc..9220fe77ca 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.function.Consumer; import com.google.common.collect.Lists; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visual.DynamicVisual; @@ -49,18 +48,18 @@ public class ArmVisual extends SingleRotatingVisual implements D public ArmVisual(VisualizationContext context, ArmBlockEntity blockEntity) { super(context, blockEntity); - base = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE), RenderStage.AFTER_BLOCK_ENTITIES) + base = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE)) .createInstance(); - lowerBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_LOWER_BODY), RenderStage.AFTER_BLOCK_ENTITIES) + lowerBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_LOWER_BODY)) .createInstance(); - upperBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_UPPER_BODY), RenderStage.AFTER_BLOCK_ENTITIES) + upperBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_UPPER_BODY)) .createInstance(); - claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE), RenderStage.AFTER_BLOCK_ENTITIES) + claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) .createInstance(); - TransformedInstance clawGrip1 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_UPPER), RenderStage.AFTER_BLOCK_ENTITIES) + TransformedInstance clawGrip1 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_UPPER)) .createInstance(); - TransformedInstance clawGrip2 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_LOWER), RenderStage.AFTER_BLOCK_ENTITIES) + TransformedInstance clawGrip2 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_LOWER)) .createInstance(); clawGrips = Lists.newArrayList(clawGrip1, clawGrip2); @@ -181,7 +180,7 @@ public class ArmVisual extends SingleRotatingVisual implements D super.update(pt); models.remove(claw); claw.delete(); - claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE), RenderStage.AFTER_BLOCK_ENTITIES) + claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) .createInstance(); models.add(claw); updateLight(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index b1941a55dd..ce2ca8ca08 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.mixer; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visual.DynamicVisual; @@ -29,12 +28,12 @@ public class MixerVisual extends EncasedCogVisual implements DynamicVisual { super(context, blockEntity, false); this.mixer = blockEntity; - mixerHead = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.MECHANICAL_MIXER_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) + mixerHead = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.MECHANICAL_MIXER_HEAD)) .createInstance(); mixerHead.setRotationAxis(Direction.Axis.Y); - mixerPole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_MIXER_POLE), RenderStage.AFTER_BLOCK_ENTITIES) + mixerPole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_MIXER_POLE)) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index c6e4875520..981fc83b4b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -4,7 +4,6 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -25,7 +24,7 @@ public class PressVisual extends ShaftVisual impleme public PressVisual(VisualizationContext context, MechanicalPressBlockEntity blockEntity) { super(context, blockEntity); - pressHead = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD), RenderStage.AFTER_BLOCK_ENTITIES) + pressHead = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD)) .createInstance(); Quaternionf q = Axis.YP diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 38cecb5b67..3d729640d1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.simpleRelays; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.model.Model; @@ -40,7 +39,7 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model, RenderStage.AFTER_BLOCK_ENTITIES); + Instancer half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model); additionalShaft = setup(half.createInstance(), speed); additionalShaft.setRotationOffset(offset) diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java index 8ab02e00c4..0ec188d308 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; import java.util.Optional; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -51,7 +50,7 @@ public class EncasedCogVisual extends KineticBlockEntityVisual implements Dy public EjectorVisual(VisualizationContext dispatcher, EjectorBlockEntity blockEntity) { super(dispatcher, blockEntity); - plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP), RenderStage.AFTER_BLOCK_ENTITIES).createInstance(); + plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP)).createInstance(); pivotPlate(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 5f6744ed83..df3fc41564 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.logistics.funnel; import java.util.ArrayList; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; @@ -34,7 +33,7 @@ public class FunnelVisual extends AbstractBlockEntityVisual i PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllPartialModels.FUNNEL_FLAP : AllPartialModels.BELT_FUNNEL_FLAP); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial)); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index a306349b2e..ce0711bc1f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -6,7 +6,6 @@ import java.util.EnumMap; import java.util.Map; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; import com.jozufozu.flywheel.api.visual.DynamicVisual; @@ -33,7 +32,7 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual(Direction.class); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP), RenderStage.AFTER_BLOCK_ENTITIES); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java index b9fb9001d4..37d831102f 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.redstone.analogLever; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; @@ -32,9 +31,9 @@ public class AnalogLeverVisual extends AbstractBlockEntityVisual instancer.createInstance()) .map(BogeyModelData::new) @@ -213,7 +212,7 @@ public abstract class BogeyRenderer { */ public void createModelInstance(VisualizationContext context, BlockState state, int count) { var instancer = context.instancerProvider() - .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(state), RenderStage.AFTER_BLOCK_ENTITIES); + .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(state)); BogeyModelData[] modelData = IntStream.range(0, count) .mapToObj(i -> instancer.createInstance()) .map(BogeyModelData::new) diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java index e2f62dc783..84b9e65580 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java @@ -7,7 +7,6 @@ import java.util.function.Consumer; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.box.Box; @@ -114,11 +113,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { TrackMaterial.TrackModelHolder modelHolder = bc.getMaterial().getModelHolder(); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie()), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie())) .createInstances(ties); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_left()), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_left())) .createInstances(left); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_right()), RenderStage.AFTER_BLOCK_ENTITIES) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_right())) .createInstances(right); SegmentAngles[] segments = bc.getBakedSegments(); @@ -194,10 +193,10 @@ public class TrackVisual extends AbstractBlockEntityVisual { beams = Couple.create(() -> new TransformedInstance[segCount]); beamCaps = Couple.create(() -> Couple.create(() -> new TransformedInstance[segCount])); lightPos = new BlockPos[segCount]; - beams.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE), RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); + beams.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE))::createInstances); beamCaps.forEachWithContext((c, top) -> { var partialModel = Models.partial(top ? AllPartialModels.GIRDER_SEGMENT_TOP : AllPartialModels.GIRDER_SEGMENT_BOTTOM); - c.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, partialModel, RenderStage.AFTER_BLOCK_ENTITIES)::createInstances); + c.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, partialModel)::createInstances); }); GirderAngles[] bakedGirders = bc.getBakedGirders(); diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 11a055ffd1..dbddc143aa 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -124,6 +124,8 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 42, instance.speed); }) .register(); + + // TODO: remove public static final InstanceType FLAPS = SimpleInstanceType.builder(FlapInstance::new) .cullShader(asResource("instance/cull/flap.glsl")) .vertexShader(asResource("instance/flap.vert")) diff --git a/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl b/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl index 80778eef41..f16aeef0f9 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/belt.glsl @@ -1,6 +1,4 @@ -#include "flywheel:util/quaternion.glsl" - void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { - // FIXME: this is incorrect, but it compiles - center = rotateByQuaternion(center - .5, instance.rotation) + instance.pos + .5; + radius += length(center - 0.5); + center += instance.pos; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl b/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl index c830f69ea4..6a0b1d8579 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl @@ -1,11 +1,8 @@ -#include "flywheel:util/quaternion.glsl" - void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { - // FIXME: this is incorrect, but it compiles - float degrees = instance.offset + flw_renderSeconds * instance.speed; + // The instance will spin about the rotation center, so we need to expand the radius to account for that + float extraForKinetic = length(center - instance.rotationCenter); + float extraForModel = length(center - 0.5); - vec4 kineticRot = quaternion(instance.axis, degrees); - vec3 rotated = rotateByQuaternion(center - instance.rotationCenter, kineticRot) + instance.rotationCenter; - - center = rotateByQuaternion(rotated - .5, instance.rotation) + instance.pos + .5; + radius += extraForKinetic + extraForModel; + center += instance.pos; } diff --git a/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl b/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl index 2825ed2f93..da6118e155 100644 --- a/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl +++ b/src/main/resources/assets/create/flywheel/instance/cull/rotating.glsl @@ -1,15 +1,5 @@ -#include "flywheel:util/matrix.glsl" - -mat3 kineticRotation(float offset, float speed, vec3 axis) { - float degrees = offset + flw_renderTicks * speed * 3./10.; - - return rotationDegrees(axis, degrees); -} - void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { - // FIXME: this is incorrect, but it compiles - mat3 spin = kineticRotation(instance.offset, instance.speed, instance.axis); - - vec3 worldPos = spin * (center - .5); - center = worldPos + instance.pos + .5; + // The instance will spin about (0.5, 0.5, 0.5), so we need to expand the radius to account for that + radius += length(center - 0.5); + center += instance.pos; } From 286d2a68ab1a0127f15f6d7591d7976c86b5dff1 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 25 Feb 2024 13:04:31 -0800 Subject: [PATCH 13/35] As shrimple as that - Update to SimpleDynamicVisuals - Translate old context stuff to new api - Add contraption visual, doesn't fully work yet - Strip out more FlwContraption stuff --- gradle.properties | 2 +- .../com/simibubi/create/AllEntityTypes.java | 16 +- .../com/simibubi/create/CreateClient.java | 2 + .../ControlledContraptionEntity.java | 12 +- .../harvester/HarvesterActorVisual.java | 12 +- .../actors/psi/PSIActorVisual.java | 9 + .../contraptions/actors/psi/PSIVisual.java | 6 +- .../actors/roller/RollerActorVisual.java | 6 + .../contraptions/bearing/BearingVisual.java | 4 +- .../bearing/StabilizedBearingVisual.java | 11 + .../contraptions/chassis/StickerVisual.java | 4 +- .../elevator/ElevatorPulleyVisual.java | 4 +- .../gantry/GantryCarriageVisual.java | 4 +- .../pulley/AbstractPulleyVisual.java | 4 +- .../contraptions/render/ActorVisual.java | 26 ++- .../render/ContraptionEntityRenderer.java | 9 +- .../render/ContraptionRenderDispatcher.java | 10 - .../render/ContraptionVisual.java | 220 ++++++++++++++++++ .../contraptions/render/FlwContraption.java | 7 +- .../equipment/toolbox/ToolBoxVisual.java | 4 +- .../fluids/pipes/valve/FluidValveVisual.java | 4 +- .../content/fluids/pump/PumpCogVisual.java | 4 +- .../kinetics/crank/HandCrankVisual.java | 4 +- .../deployer/DeployerActorVisual.java | 12 + .../kinetics/deployer/DeployerVisual.java | 6 +- .../kinetics/drill/DrillActorVisual.java | 10 + .../kinetics/flywheel/FlywheelVisual.java | 7 +- .../content/kinetics/gauge/GaugeVisual.java | 4 +- .../kinetics/mechanicalArm/ArmVisual.java | 4 +- .../content/kinetics/mixer/MixerVisual.java | 4 +- .../content/kinetics/press/PressVisual.java | 4 +- .../steamEngine/SteamEngineVisual.java | 4 +- .../logistics/depot/EjectorVisual.java | 4 +- .../logistics/funnel/FunnelVisual.java | 4 +- .../logistics/tunnel/BeltTunnelVisual.java | 4 +- .../analogLever/AnalogLeverVisual.java | 4 +- .../redstone/diodes/BrassDiodeVisual.java | 4 +- .../cannon/SchematicannonVisual.java | 4 +- .../entity/CarriageContraptionVisual.java | 7 +- .../foundation/events/ClientEvents.java | 4 +- .../foundation/render/AllContextShaders.java | 24 ++ .../foundation/render/CreateContexts.java | 13 -- .../create/flywheel/context/contraption.frag | 10 + .../create/flywheel/context/contraption.glsl | 77 ------ .../create/flywheel/context/contraption.vert | 16 ++ 45 files changed, 438 insertions(+), 176 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/AllContextShaders.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/CreateContexts.java create mode 100644 src/main/resources/assets/create/flywheel/context/contraption.frag delete mode 100644 src/main/resources/assets/create/flywheel/context/contraption.glsl create mode 100644 src/main/resources/assets/create/flywheel/context/contraption.vert diff --git a/gradle.properties b/gradle.properties index dd78f8660b..cb20af2180 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-43 +flywheel_version = 1.0.0-alpha-53 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index e8967cbefd..cd66c0e721 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -8,6 +8,7 @@ import com.simibubi.create.content.contraptions.gantry.GantryContraptionEntity; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.glue.SuperGlueRenderer; import com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer; +import com.simibubi.create.content.contraptions.render.ContraptionVisual; import com.simibubi.create.content.contraptions.render.OrientedContraptionEntityRenderer; import com.simibubi.create.content.equipment.blueprint.BlueprintEntity; import com.simibubi.create.content.equipment.blueprint.BlueprintRenderer; @@ -33,15 +34,22 @@ import net.minecraft.world.entity.MobCategory; public class AllEntityTypes { public static final EntityEntry ORIENTED_CONTRAPTION = contraption("contraption", - OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new, 5, 3, true).register(); + OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new, 5, 3, true) + .instance(() -> ContraptionVisual::new) + .register(); public static final EntityEntry CONTROLLED_CONTRAPTION = contraption("stationary_contraption", ControlledContraptionEntity::new, () -> ContraptionEntityRenderer::new, - 20, 40, false).register(); + 20, 40, false) + .instance(() -> ContraptionVisual::new) + .register(); public static final EntityEntry GANTRY_CONTRAPTION = contraption("gantry_contraption", - GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, 10, 40, false).register(); + GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, 10, 40, false) + .instance(() -> ContraptionVisual::new) + .register(); public static final EntityEntry CARRIAGE_CONTRAPTION = contraption("carriage_contraption", CarriageContraptionEntity::new, - () -> CarriageContraptionEntityRenderer::new, 15, 3, true).instance(() -> CarriageContraptionVisual::new) + () -> CarriageContraptionEntityRenderer::new, 15, 3, true) + .instance(() -> CarriageContraptionVisual::new) .register(); public static final EntityEntry SUPER_GLUE = diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index be27cae85b..cd41bd8a18 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -18,6 +18,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.ValueSettingsClient; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; +import com.simibubi.create.foundation.render.AllContextShaders; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.StitchedSprite; @@ -67,6 +68,7 @@ public class CreateClient { modEventBus.addListener(StitchedSprite::onTextureStitchPost); AllInstanceTypes.init(); + AllContextShaders.init(); MODEL_SWAPPER.registerListeners(modEventBus); diff --git a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java index a3d2a321c7..cf40c01cb8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java @@ -246,10 +246,12 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { float angle = getAngle(partialTicks); Axis axis = getRotationAxis(); - TransformStack.of(matrixStack) - .nudge(getId()) - .center() - .rotate(angle, axis) - .uncenter(); + if (axis != null) { + TransformStack.of(matrixStack) + .nudge(getId()) + .center() + .rotate(angle, axis) + .uncenter(); + } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index c947830880..412bb2ead8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -94,7 +94,17 @@ public class HarvesterActorVisual extends ActorVisual { .setChanged(); } - protected double getRotation() { + @Override + protected void _delete() { + harvester.delete(); + } + + protected double getRotation() { return AngleHelper.angleLerp(AnimationTickHolder.getPartialTicks(), previousRotation, rotation); } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index 04f905b83e..7b9ce9c49a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -28,4 +28,13 @@ public class PSIActorVisual extends ActorVisual { instance.beginFrame(lf.getValue(AnimationTickHolder.getPartialTicks())); } + @Override + protected void _delete() { + instance.remove(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 851ee24d74..8e5f3098f3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -3,15 +3,15 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PSIVisual extends AbstractBlockEntityVisual implements DynamicVisual, TickableVisual { +public class PSIVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual, SimpleTickableVisual { private final PIInstance instance; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java index 73189c93c7..a7e0670091 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java @@ -61,4 +61,10 @@ public class RollerActorVisual extends HarvesterActorVisual { return 16.5; } + @Override + protected void _delete() { + super._delete(); + + frame.delete(); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index fa4881b7e8..3a60fd0657 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -22,7 +22,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class BearingVisual extends BackHalfShaftVisual implements DynamicVisual { +public class BearingVisual extends BackHalfShaftVisual implements SimpleDynamicVisual { final OrientedInstance topInstance; final Axis rotationAxis; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 967c7f8b7c..7a915312e9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -64,4 +64,15 @@ public class StabilizedBearingVisual extends ActorVisual { topInstance.setRotation(rotation); } + + @Override + protected void _delete() { + topInstance.delete(); + shaft.delete(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 68485903e7..9abfc1d778 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -17,7 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class StickerVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class StickerVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { float lastOffset = Float.NaN; final Direction facing; diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index 7199c7e067..537532ed59 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.contraptions.elevator; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO -public class ElevatorPulleyVisual extends ShaftVisual implements DynamicVisual { +public class ElevatorPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { public ElevatorPulleyVisual(VisualizationContext context, ElevatorPulleyBlockEntity blockEntity) { super(context, blockEntity); diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index c6435745f6..2965b1b7f1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -19,7 +19,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class GantryCarriageVisual extends ShaftVisual implements DynamicVisual { +public class GantryCarriageVisual extends ShaftVisual implements SimpleDynamicVisual { private final TransformedInstance gantryCogs; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index ebf48d6436..fc5edbeb78 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.box.MutableBox; @@ -21,7 +21,7 @@ import com.simibubi.create.foundation.render.SelectInstance; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public abstract class AbstractPulleyVisual extends ShaftVisual implements DynamicVisual { +public abstract class AbstractPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { final OrientedInstance coil; final SelectInstance magnet; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java index bcd68ea310..1742fb2251 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java @@ -1,18 +1,21 @@ package com.simibubi.create.content.contraptions.render; import com.jozufozu.flywheel.api.instance.InstancerProvider; +import com.jozufozu.flywheel.api.visual.Visual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; -public abstract class ActorVisual { +public abstract class ActorVisual implements Visual { protected final VisualizationContext visualizationContext; protected final InstancerProvider instancerProvider; protected final BlockAndTintGetter simulationWorld; protected final MovementContext context; + private boolean deleted; + public ActorVisual(VisualizationContext visualizationContext, BlockAndTintGetter world, MovementContext context) { this.visualizationContext = visualizationContext; this.instancerProvider = visualizationContext.instancerProvider(); @@ -27,4 +30,25 @@ public abstract class ActorVisual { protected int localBlockLight() { return simulationWorld.getBrightness(LightLayer.BLOCK, context.localPos); } + + @Override + public void update(float partialTick) { + } + + @Override + public boolean shouldReset() { + return false; + } + + protected abstract void _delete(); + + @Override + public final void delete() { + if (deleted) { + return; + } + + _delete(); + deleted = true; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java index 9005060ae6..93e9a861e9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.render; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; -import com.simibubi.create.content.contraptions.Contraption; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.culling.Frustum; @@ -39,10 +38,10 @@ public class ContraptionEntityRenderer exte int overlay) { super.render(entity, yaw, partialTicks, ms, buffers, overlay); - Contraption contraption = entity.getContraption(); - if (contraption != null) { - ContraptionRenderDispatcher.renderFromEntity(entity, contraption, buffers); - } +// Contraption contraption = entity.getContraption(); +// if (contraption != null) { +// ContraptionRenderDispatcher.renderFromEntity(entity, contraption, buffers); +// } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java index f07dcc9e79..7b31ab9690 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java @@ -28,7 +28,6 @@ import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @OnlyIn(Dist.CLIENT) @@ -59,14 +58,12 @@ public class ContraptionRenderDispatcher { .tick(); } - @SubscribeEvent public static void beginFrame(BeginFrameEvent event) { WORLDS.get(event.getContext() .level()) .beginFrame(event); } - @SubscribeEvent public static void renderLayer(RenderStageEvent event) { WORLDS.get(event.getLevel()) .renderLayer(event); @@ -74,7 +71,6 @@ public class ContraptionRenderDispatcher { GlError.pollAndThrow(() -> "contraption layer: " + event.getStage()); } - @SubscribeEvent public static void onRendererReload(ReloadLevelRendererEvent event) { reset(); } @@ -177,13 +173,7 @@ public class ContraptionRenderDispatcher { } public static void reset() { - WORLDS.empty(ContraptionRenderingWorld::delete); -// if (Backend.isOn()) { -// WORLDS = new WorldAttached<>(FlwContraptionManager::new); -// } else { - WORLDS = new WorldAttached<>(SBBContraptionManager::new); -// } } public static boolean canInstance() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java new file mode 100644 index 0000000000..ba78b6b129 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -0,0 +1,220 @@ +package com.simibubi.create.content.contraptions.render; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.LongConsumer; + +import org.apache.commons.lang3.tuple.MutablePair; + +import com.jozufozu.flywheel.api.context.Context; +import com.jozufozu.flywheel.api.context.ContextShader; +import com.jozufozu.flywheel.api.context.Shader; +import com.jozufozu.flywheel.api.context.TextureSource; +import com.jozufozu.flywheel.api.material.Material; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.task.Plan; +import com.jozufozu.flywheel.api.visual.BlockEntityVisual; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.LitVisual; +import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.VisualTickContext; +import com.jozufozu.flywheel.api.visualization.BlockEntityVisualizer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.api.visualization.VisualizerRegistry; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; +import com.jozufozu.flywheel.lib.task.ForEachPlan; +import com.jozufozu.flywheel.lib.task.NestedPlan; +import com.jozufozu.flywheel.lib.task.PlanMap; +import com.jozufozu.flywheel.lib.task.RunnablePlan; +import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllMovementBehaviours; +import com.simibubi.create.content.contraptions.AbstractContraptionEntity; +import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; +import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.foundation.render.AllContextShaders; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; + +import net.minecraft.core.Vec3i; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; + +public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LitVisual { + protected final ContraptionContext context; + protected final VisualizationContext visualizationContext; + private final List> children = new ArrayList<>(); + private final List actors = new ArrayList<>(); + private final PlanMap dynamicVisuals = new PlanMap<>(); + private final List simpleDynamicVisuals = new ArrayList<>(); + private final PlanMap tickableVisuals = new PlanMap<>(); + private final List simpleTickableVisuals = new ArrayList<>(); + private VirtualRenderWorld virtualRenderWorld; + private Notifier notifier; + private Model model; + private TransformedInstance structure; + + private final PoseStack contraptionMatrix = new PoseStack(); + + public ContraptionVisual(VisualizationContext ctx, E entity) { + super(ctx, entity); + context = new ContraptionContext(); + visualizationContext = ctx.withContext(context, Vec3i.ZERO); + } + + @Override + public void init(float partialTick) { + Contraption contraption = entity.getContraption(); + virtualRenderWorld = ContraptionRenderDispatcher.setupRenderWorld(level, contraption); + + model = new MultiBlockModelBuilder(contraption.getRenderedBlocks()) + .modelDataMap(contraption.modelData) + .renderWorld(virtualRenderWorld) + .build(); + + structure = visualizationContext.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, model) + .createInstance(); + + for (BlockEntity be : contraption.maybeInstancedBlockEntities) { + setupVisualizer(be, partialTick); + } + + for (var actor : contraption.getActors()) { + setupActor(actor, partialTick); + } + } + + private void setupActor(MutablePair actor, float partialTick) { + MovementContext context = actor.getRight(); + if (context == null) { + return; + } + if (context.world == null) { + context.world = level; + } + + StructureTemplate.StructureBlockInfo blockInfo = actor.getLeft(); + + MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); + if (movementBehaviour == null) { + return; + } + var instance = movementBehaviour.createInstance(this.visualizationContext, virtualRenderWorld, context); + + if (instance == null) { + return; + } + + instance.init(partialTick); + + actors.add(instance); + } + + @SuppressWarnings("unchecked") + protected void setupVisualizer(T be, float partialTicks) { + BlockEntityVisualizer visualizer = (BlockEntityVisualizer) VisualizerRegistry.getVisualizer(be.getType()); + if (visualizer == null) { + return; + } + + Level world = be.getLevel(); + be.setLevel(virtualRenderWorld); + BlockEntityVisual visual = visualizer.createVisual(this.visualizationContext, be); + + visual.init(partialTicks); + + children.add(visual); + + if (visual instanceof DynamicVisual dynamic) { + if (dynamic instanceof SimpleDynamicVisual simple) { + simpleDynamicVisuals.add(simple); + } else { + dynamicVisuals.add(dynamic, dynamic.planFrame()); + } + } + + be.setLevel(world); + } + + @Override + public Plan planTick() { + return NestedPlan.of( + ForEachPlan.of(() -> actors, ActorVisual::tick), + ForEachPlan.of(() -> simpleTickableVisuals, SimpleTickableVisual::tick), + tickableVisuals + ); + } + + @Override + public Plan planFrame() { + return NestedPlan.of( + RunnablePlan.of(this::beginFrame), + ForEachPlan.of(() -> actors, ActorVisual::beginFrame), + ForEachPlan.of(() -> simpleDynamicVisuals, SimpleDynamicVisual::beginFrame), + dynamicVisuals + ); + } + + @Override + protected void _delete() { + children.forEach(BlockEntityVisual::delete); + + actors.forEach(ActorVisual::delete); + + if (model != null) { + model.delete(); + } + + if (structure != null) { + structure.delete(); + } + } + + @Override + public void updateLight() { + + } + + protected void beginFrame(VisualFrameContext context) { + double x = Mth.lerp(context.partialTick(), entity.xOld, entity.getX()); + double y = Mth.lerp(context.partialTick(), entity.yOld, entity.getY()); + double z = Mth.lerp(context.partialTick(), entity.zOld, entity.getZ()); + + contraptionMatrix.setIdentity(); + contraptionMatrix.translate(x, y, z); + entity.applyLocalTransforms(contraptionMatrix, context.partialTick()); + } + + @Override + public void collectLightSections(LongConsumer consumer) { + var boundingBox = entity.getBoundingBox(); + } + + @Override + public void initLightSectionNotifier(Notifier notifier) { + this.notifier = notifier; + } + + public class ContraptionContext implements Context { + + @Override + public ContextShader contextShader() { + return AllContextShaders.CONTRAPTION; + } + + @Override + public void prepare(Material material, Shader shader, TextureSource textureSource) { +// shader.setVec3("create_oneOverLightBoxSize"); +// shader.setVec3("create_lightVolumeMin"); + shader.setMat4("create_model", contraptionMatrix.last().pose()); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java index cc3163507b..a852e86199 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java @@ -11,7 +11,6 @@ import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; -import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; import net.minecraft.world.phys.AABB; @@ -36,7 +35,7 @@ public class FlwContraption extends ContraptionRenderInfo { var restoreState = GlStateTracker.getRestoreState(); buildLayers(); if (ContraptionRenderDispatcher.canInstance()) { - buildInstancedBlockEntities(); + // buildInstancedBlockEntities(); buildActors(); } restoreState.restore(); @@ -133,7 +132,7 @@ public class FlwContraption extends ContraptionRenderInfo { // } } - private void buildInstancedBlockEntities() { +// private void buildInstancedBlockEntities() { // for (BlockEntity be : contraption.maybeInstancedBlockEntities) { // if (!InstancedRenderRegistry.canInstance(be.getType())) { // continue; @@ -144,7 +143,7 @@ public class FlwContraption extends ContraptionRenderInfo { // instanceWorld.blockEntityInstanceManager.add(be); // be.setLevel(world); // } - } +// } private void buildActors() { // contraption.getActors().forEach(instanceWorld.blockEntityInstanceManager::createActor); diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 0d92b444de..b883fdffcd 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -16,7 +16,7 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; -public class ToolBoxVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class ToolBoxVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final Direction facing; private TransformedInstance lid; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index c9f1bbbb40..3424760dce 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,7 +18,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class FluidValveVisual extends ShaftVisual implements DynamicVisual { +public class FluidValveVisual extends ShaftVisual implements SimpleDynamicVisual { protected TransformedInstance pointer; protected boolean settled; diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index 83590b8dc0..8786c190dc 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.fluids.pump; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; @@ -12,7 +12,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class PumpCogVisual extends SingleRotatingVisual implements DynamicVisual { +public class PumpCogVisual extends SingleRotatingVisual implements SimpleDynamicVisual { public PumpCogVisual(VisualizationContext context, PumpBlockEntity blockEntity) { super(context, blockEntity); diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index bae8235b4b..2c4b125d38 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -15,7 +15,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HandCrankVisual extends SingleRotatingVisual implements DynamicVisual { +public class HandCrankVisual extends SingleRotatingVisual implements SimpleDynamicVisual { private TransformedInstance crank; private Direction facing; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index e0db38b910..211d6b87a4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -117,4 +117,16 @@ public class DeployerActorVisual extends ActorVisual { hand.setTransform(stack); } + + @Override + protected void _delete() { + pole.delete(); + hand.delete(); + shaft.delete(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 20150c01bc..1a23faa515 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -8,8 +8,8 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -28,7 +28,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; -public class DeployerVisual extends ShaftVisual implements DynamicVisual, TickableVisual { +public class DeployerVisual extends ShaftVisual implements SimpleDynamicVisual, SimpleTickableVisual { final Direction facing; final float yRot; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index 4eb8dab7cc..2a4c84ebf3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -59,4 +59,14 @@ public class DrillActorVisual extends ActorVisual { return context.getAnimationSpeed(); return 0; } + + @Override + protected void _delete() { + drillHead.delete(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index dba60d3b8f..3ac8d6752b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -3,7 +3,8 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -19,7 +20,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class FlywheelVisual extends KineticBlockEntityVisual implements DynamicVisual { +public class FlywheelVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { protected final RotatingInstance shaft; protected final TransformedInstance wheel; @@ -30,7 +31,7 @@ public class FlywheelVisual extends KineticBlockEntityVisual implements DynamicVisual { +public abstract class GaugeVisual extends ShaftVisual implements SimpleDynamicVisual { protected final ArrayList faces; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 9220fe77ca..a5aa94ea95 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import com.google.common.collect.Lists; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -27,7 +27,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -public class ArmVisual extends SingleRotatingVisual implements DynamicVisual { +public class ArmVisual extends SingleRotatingVisual implements SimpleDynamicVisual { final TransformedInstance base; final TransformedInstance lowerBody; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index ce2ca8ca08..9f6ddf9612 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,7 +18,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class MixerVisual extends EncasedCogVisual implements DynamicVisual { +public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual { private final RotatingInstance mixerHead; private final OrientedInstance mixerPole; diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 981fc83b4b..7c20317859 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -17,7 +17,7 @@ import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PressVisual extends ShaftVisual implements DynamicVisual { +public class PressVisual extends ShaftVisual implements SimpleDynamicVisual { private final OrientedInstance pressHead; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index 2c666a8526..9f6912535e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.kinetics.steamEngine; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,7 +18,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.util.Mth; -public class SteamEngineVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class SteamEngineVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { protected final TransformedInstance piston; protected final TransformedInstance linkage; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index 2b5acf20ab..d47f5bc796 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.logistics.depot; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -13,7 +13,7 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class EjectorVisual extends ShaftVisual implements DynamicVisual { +public class EjectorVisual extends ShaftVisual implements SimpleDynamicVisual { protected final TransformedInstance plate; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index df3fc41564..006d63d9f1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -20,7 +20,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class FunnelVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class FunnelVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final ArrayList flaps; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index ce0711bc1f..2718e71c86 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -8,7 +8,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -23,7 +23,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class BeltTunnelVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class BeltTunnelVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final Map> tunnelFlaps; diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java index 37d831102f..e306ace859 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone.analogLever; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -20,7 +20,7 @@ import com.simibubi.create.foundation.utility.Color; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.AttachFace; -public class AnalogLeverVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class AnalogLeverVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { protected final TransformedInstance handle; protected final TransformedInstance indicator; diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java index 2a114eb759..b279ef782b 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone.diodes; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -13,7 +13,7 @@ import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Color; -public class BrassDiodeVisual extends AbstractBlockEntityVisual implements TickableVisual { +public class BrassDiodeVisual extends AbstractBlockEntityVisual implements SimpleTickableVisual { protected final TransformedInstance indicator; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java index 5df4a1be45..6e1ac481cf 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.schematics.cannon; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -16,7 +16,7 @@ import com.simibubi.create.AllPartialModels; import net.minecraft.core.Direction; -public class SchematicannonVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class SchematicannonVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final TransformedInstance connector; private final TransformedInstance pipe; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index fc10aa3761..032c6a79d7 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -2,19 +2,19 @@ package com.simibubi.create.content.trains.entity; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.contraptions.render.ContraptionVisual; import com.simibubi.create.content.trains.bogey.BogeyRenderer; import com.simibubi.create.content.trains.bogey.BogeyVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; -public class CarriageContraptionVisual extends AbstractEntityVisual implements DynamicVisual { +public class CarriageContraptionVisual extends ContraptionVisual implements SimpleDynamicVisual { private final PoseStack ms = new PoseStack(); @@ -47,6 +47,7 @@ public class CarriageContraptionVisual extends AbstractEntityVisual Date: Wed, 28 Feb 2024 11:06:17 -0800 Subject: [PATCH 14/35] Embed and virtualize - Use VisualEmbedding in ContraptionVisual - Remove context shaders - Directly use the model from the blockstate in VirtualRenderHelper - Fixes many bes trying to use empty meshes because they correctly identify as ENTITYBLOCK_ANIMATED - Fix valves being unlit - Fix bearing contraptions spinning way too fast - Do not implement SimpleDynamicVisual in CarriageContraptionVisual, that's taken care of by the base ContraptionVisual now --- gradle.properties | 2 +- .../com/simibubi/create/CreateClient.java | 2 - .../ControlledContraptionEntity.java | 2 +- .../render/ContraptionVisual.java | 103 +++++++----------- .../kinetics/crank/HandCrankVisual.java | 4 +- .../kinetics/flywheel/FlywheelVisual.java | 5 +- .../entity/CarriageContraptionVisual.java | 5 +- .../foundation/render/AllContextShaders.java | 24 ---- .../render/VirtualRenderHelper.java | 4 +- .../create/flywheel/context/contraption.frag | 10 -- .../create/flywheel/context/contraption.vert | 16 --- 11 files changed, 50 insertions(+), 127 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/render/AllContextShaders.java delete mode 100644 src/main/resources/assets/create/flywheel/context/contraption.frag delete mode 100644 src/main/resources/assets/create/flywheel/context/contraption.vert diff --git a/gradle.properties b/gradle.properties index cb20af2180..2b3131ea5f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-53 +flywheel_version = 1.0.0-alpha-56 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index cd41bd8a18..be27cae85b 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -18,7 +18,6 @@ import com.simibubi.create.foundation.blockEntity.behaviour.ValueSettingsClient; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; -import com.simibubi.create.foundation.render.AllContextShaders; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.StitchedSprite; @@ -68,7 +67,6 @@ public class CreateClient { modEventBus.addListener(StitchedSprite::onTextureStitchPost); AllInstanceTypes.init(); - AllContextShaders.init(); MODEL_SWAPPER.registerListeners(modEventBus); diff --git a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java index cf40c01cb8..b6e7d311e6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java @@ -250,7 +250,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { TransformStack.of(matrixStack) .nudge(getId()) .center() - .rotate(angle, axis) + .rotateDegrees(angle, axis) .uncenter(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index ba78b6b129..a989e03248 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -6,11 +6,6 @@ import java.util.function.LongConsumer; import org.apache.commons.lang3.tuple.MutablePair; -import com.jozufozu.flywheel.api.context.Context; -import com.jozufozu.flywheel.api.context.ContextShader; -import com.jozufozu.flywheel.api.context.Shader; -import com.jozufozu.flywheel.api.context.TextureSource; -import com.jozufozu.flywheel.api.material.Material; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.task.Plan; import com.jozufozu.flywheel.api.visual.BlockEntityVisual; @@ -20,6 +15,7 @@ import com.jozufozu.flywheel.api.visual.TickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.BlockEntityVisualizer; +import com.jozufozu.flywheel.api.visualization.VisualEmbedding; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.api.visualization.VisualizerRegistry; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -30,32 +26,25 @@ import com.jozufozu.flywheel.lib.task.NestedPlan; import com.jozufozu.flywheel.lib.task.PlanMap; import com.jozufozu.flywheel.lib.task.RunnablePlan; import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; -import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.foundation.render.AllContextShaders; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; -import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LitVisual { - protected final ContraptionContext context; - protected final VisualizationContext visualizationContext; + protected final VisualEmbedding embedding; private final List> children = new ArrayList<>(); private final List actors = new ArrayList<>(); private final PlanMap dynamicVisuals = new PlanMap<>(); - private final List simpleDynamicVisuals = new ArrayList<>(); private final PlanMap tickableVisuals = new PlanMap<>(); - private final List simpleTickableVisuals = new ArrayList<>(); private VirtualRenderWorld virtualRenderWorld; private Notifier notifier; private Model model; @@ -65,8 +54,7 @@ public class ContraptionVisual extends Abst public ContraptionVisual(VisualizationContext ctx, E entity) { super(ctx, entity); - context = new ContraptionContext(); - visualizationContext = ctx.withContext(context, Vec3i.ZERO); + embedding = ctx.createEmbedding(); } @Override @@ -79,7 +67,7 @@ public class ContraptionVisual extends Abst .renderWorld(virtualRenderWorld) .build(); - structure = visualizationContext.instancerProvider() + structure = embedding.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); @@ -107,7 +95,7 @@ public class ContraptionVisual extends Abst if (movementBehaviour == null) { return; } - var instance = movementBehaviour.createInstance(this.visualizationContext, virtualRenderWorld, context); + var instance = movementBehaviour.createInstance(this.embedding, virtualRenderWorld, context); if (instance == null) { return; @@ -127,18 +115,18 @@ public class ContraptionVisual extends Abst Level world = be.getLevel(); be.setLevel(virtualRenderWorld); - BlockEntityVisual visual = visualizer.createVisual(this.visualizationContext, be); + BlockEntityVisual visual = visualizer.createVisual(this.embedding, be); visual.init(partialTicks); children.add(visual); if (visual instanceof DynamicVisual dynamic) { - if (dynamic instanceof SimpleDynamicVisual simple) { - simpleDynamicVisuals.add(simple); - } else { - dynamicVisuals.add(dynamic, dynamic.planFrame()); - } + dynamicVisuals.add(dynamic, dynamic.planFrame()); + } + + if (visual instanceof TickableVisual tickable) { + tickableVisuals.add(tickable, tickable.planTick()); } be.setLevel(world); @@ -148,7 +136,6 @@ public class ContraptionVisual extends Abst public Plan planTick() { return NestedPlan.of( ForEachPlan.of(() -> actors, ActorVisual::tick), - ForEachPlan.of(() -> simpleTickableVisuals, SimpleTickableVisual::tick), tickableVisuals ); } @@ -158,11 +145,37 @@ public class ContraptionVisual extends Abst return NestedPlan.of( RunnablePlan.of(this::beginFrame), ForEachPlan.of(() -> actors, ActorVisual::beginFrame), - ForEachPlan.of(() -> simpleDynamicVisuals, SimpleDynamicVisual::beginFrame), dynamicVisuals ); } + protected void beginFrame(VisualFrameContext context) { + double x = Mth.lerp(context.partialTick(), entity.xOld, entity.getX()); + double y = Mth.lerp(context.partialTick(), entity.yOld, entity.getY()); + double z = Mth.lerp(context.partialTick(), entity.zOld, entity.getZ()); + + contraptionMatrix.setIdentity(); + contraptionMatrix.translate(x, y, z); + entity.applyLocalTransforms(contraptionMatrix, context.partialTick()); + + embedding.transforms(contraptionMatrix.last().pose(), contraptionMatrix.last().normal()); + } + + @Override + public void updateLight() { + + } + + @Override + public void collectLightSections(LongConsumer consumer) { + var boundingBox = entity.getBoundingBox(); + } + + @Override + public void initLightSectionNotifier(Notifier notifier) { + this.notifier = notifier; + } + @Override protected void _delete() { children.forEach(BlockEntityVisual::delete); @@ -177,44 +190,4 @@ public class ContraptionVisual extends Abst structure.delete(); } } - - @Override - public void updateLight() { - - } - - protected void beginFrame(VisualFrameContext context) { - double x = Mth.lerp(context.partialTick(), entity.xOld, entity.getX()); - double y = Mth.lerp(context.partialTick(), entity.yOld, entity.getY()); - double z = Mth.lerp(context.partialTick(), entity.zOld, entity.getZ()); - - contraptionMatrix.setIdentity(); - contraptionMatrix.translate(x, y, z); - entity.applyLocalTransforms(contraptionMatrix, context.partialTick()); - } - - @Override - public void collectLightSections(LongConsumer consumer) { - var boundingBox = entity.getBoundingBox(); - } - - @Override - public void initLightSectionNotifier(Notifier notifier) { - this.notifier = notifier; - } - - public class ContraptionContext implements Context { - - @Override - public ContextShader contextShader() { - return AllContextShaders.CONTRAPTION; - } - - @Override - public void prepare(Material material, Shader shader, TextureSource textureSource) { -// shader.setVec3("create_oneOverLightBoxSize"); -// shader.setVec3("create_lightVolumeMin"); - shader.setMat4("create_model", contraptionMatrix.last().pose()); - } - } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 2c4b125d38..38f9c2a64e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -4,11 +4,11 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -54,6 +54,8 @@ public class HandCrankVisual extends SingleRotatingVisual // FIXME: need to call super.super.init here if (blockEntity.shouldRenderShaft()) super.init(pt); + + updateLight(); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index 3ac8d6752b..fb65499db4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -3,13 +3,12 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; @@ -31,7 +30,7 @@ public class FlywheelVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { +public class CarriageContraptionVisual extends ContraptionVisual { private final PoseStack ms = new PoseStack(); @@ -100,6 +99,8 @@ public class CarriageContraptionVisual extends ContraptionVisual VIRTUAL_PROPERTY = new ModelProperty<>(); public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); - public static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new BlockModelBuilder(state).modelData(VIRTUAL_DATA).build()); + public static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new BakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); public static boolean isVirtual(ModelData data) { return data.has(VirtualRenderHelper.VIRTUAL_PROPERTY) && data.get(VirtualRenderHelper.VIRTUAL_PROPERTY); diff --git a/src/main/resources/assets/create/flywheel/context/contraption.frag b/src/main/resources/assets/create/flywheel/context/contraption.frag deleted file mode 100644 index f336cd669a..0000000000 --- a/src/main/resources/assets/create/flywheel/context/contraption.frag +++ /dev/null @@ -1,10 +0,0 @@ -uniform sampler3D create_lightVolume; - -in vec3 create_lightVolumeCoord; - -void flw_beginFragment() { - flw_fragLight = max(flw_fragLight, texture(create_lightVolume, create_lightVolumeCoord).rg); -} - -void flw_endFragment() { -} diff --git a/src/main/resources/assets/create/flywheel/context/contraption.vert b/src/main/resources/assets/create/flywheel/context/contraption.vert deleted file mode 100644 index 2e519879cf..0000000000 --- a/src/main/resources/assets/create/flywheel/context/contraption.vert +++ /dev/null @@ -1,16 +0,0 @@ -uniform vec3 create_oneOverLightBoxSize; -uniform vec3 create_lightVolumeMin; -uniform mat4 create_model; -uniform mat3 create_normal; - -out vec3 create_lightVolumeCoord; - -void flw_beginVertex() { -} - -void flw_endVertex() { - create_lightVolumeCoord = (flw_vertexPos.xyz - create_lightVolumeMin) * create_oneOverLightBoxSize; - - flw_vertexPos = create_model * flw_vertexPos; - flw_vertexNormal = create_normal * flw_vertexNormal; -} From 605daed671c36911bd52c131545408ae5d4c3070 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 2 Mar 2024 15:48:44 -0800 Subject: [PATCH 15/35] Update Flywheel - Fix SBB model buffering passing empty instead of virtual model data, resulting in blocks like shafts appearing invisible with Flywheel off - Fix endAndCombine not null checking unshadedData before transferring it - Remove VirtualEmptyBlockGetter which already exists in Flywheel --- gradle.properties | 2 +- .../content/contraptions/Contraption.java | 14 +- .../render/ContraptionVisual.java | 19 ++- .../render/SBBContraptionManager.java | 8 +- .../trains/entity/CarriageContraption.java | 21 ++- .../ponder/element/WorldSectionElement.java | 1 + .../render/VirtualRenderHelper.java | 80 +++++----- .../WrappedBlockAndTintGetter.java | 58 +++++++ .../virtualWorld/VirtualEmptyBlockGetter.java | 145 ------------------ 9 files changed, 143 insertions(+), 205 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedBlockAndTintGetter.java delete mode 100644 src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java diff --git a/gradle.properties b/gradle.properties index 2b3131ea5f..ba3ca6006a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-56 +flywheel_version = 1.0.0-alpha-59 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index 88a7c5177d..562c21881a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -18,6 +18,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; +import java.util.function.Function; import javax.annotation.Nullable; @@ -1375,8 +1376,14 @@ public abstract class Contraption { return storage.getFluids(); } - public Collection getRenderedBlocks() { - return blocks.values(); + public RenderedBlocks getRenderedBlocks() { + return new RenderedBlocks(pos -> { + StructureBlockInfo info = blocks.get(pos); + if (info == null) { + return Blocks.AIR.defaultBlockState(); + } + return info.state(); + }, blocks.keySet()); } public Collection getSpecialRenderedBEs() { @@ -1428,4 +1435,7 @@ public abstract class Contraption { return false; } + public record RenderedBlocks(Function lookup, Iterable positions) { + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index a989e03248..2c320a44db 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -30,14 +30,20 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.foundation.utility.worldWrappers.WrappedBlockAndTintGetter; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; +import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraftforge.client.model.data.ModelData; public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LitVisual { protected final VisualEmbedding embedding; @@ -62,9 +68,16 @@ public class ContraptionVisual extends Abst Contraption contraption = entity.getContraption(); virtualRenderWorld = ContraptionRenderDispatcher.setupRenderWorld(level, contraption); - model = new MultiBlockModelBuilder(contraption.getRenderedBlocks()) - .modelDataMap(contraption.modelData) - .renderWorld(virtualRenderWorld) + RenderedBlocks blocks = contraption.getRenderedBlocks(); + BlockAndTintGetter modelWorld = new WrappedBlockAndTintGetter(virtualRenderWorld) { + @Override + public BlockState getBlockState(BlockPos pos) { + return blocks.lookup().apply(pos); + } + }; + + model = new MultiBlockModelBuilder(modelWorld, blocks.positions()) + .modelDataLookup(pos -> contraption.modelData.getOrDefault(pos, ModelData.EMPTY)) .build(); structure = embedding.instancerProvider() diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java index 52132079aa..cc4319461e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java @@ -9,6 +9,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; @@ -26,7 +27,6 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraftforge.client.model.data.ModelData; public class SBBContraptionManager extends ContraptionRenderingWorld { @@ -84,6 +84,7 @@ public class SBBContraptionManager extends ContraptionRenderingWorld specialRenderedBEsOutsidePortal = new ArrayList<>(); @Override - public Collection getRenderedBlocks() { + public RenderedBlocks getRenderedBlocks() { if (notInPortal()) return super.getRenderedBlocks(); @@ -277,15 +276,15 @@ public class CarriageContraption extends Contraption { .filter(be -> !isHiddenInPortal(be.getBlockPos())) .forEach(specialRenderedBEsOutsidePortal::add); - Collection values = new ArrayList<>(); - for (Entry entry : blocks.entrySet()) { - BlockPos pos = entry.getKey(); - if (withinVisible(pos)) - values.add(entry.getValue()); - else if (atSeam(pos)) - values.add(new StructureBlockInfo(pos, Blocks.PURPLE_STAINED_GLASS.defaultBlockState(), null)); - } - return values; + Map values = new HashMap<>(); + blocks.forEach((pos, info) -> { + if (withinVisible(pos)) { + values.put(pos, info.state()); + } else if (atSeam(pos)) { + values.put(pos, Blocks.PURPLE_STAINED_GLASS.defaultBlockState()); + } + }); + return new RenderedBlocks(pos -> values.getOrDefault(pos, Blocks.AIR.defaultBlockState()), values.keySet()); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 5d33116efc..395fb4c136 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -414,6 +414,7 @@ public class WorldSectionElement extends AnimatedSceneElement { PoseStack poseStack = objects.poseStack; RandomSource random = objects.random; + ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; BufferBuilder shadedBuilder = objects.shadedBuilder; BufferBuilder unshadedBuilder = objects.unshadedBuilder; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index d7f69fa138..40626fe1a1 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -1,25 +1,26 @@ package com.simibubi.create.foundation.render; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.Nullable; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.lib.model.ModelCache; import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.jozufozu.flywheel.lib.model.baked.BakedModelBufferer; -import com.jozufozu.flywheel.lib.model.baked.BakedModelBufferer.ShadeSeparatedResultConsumer; import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; import com.jozufozu.flywheel.lib.model.baked.VirtualEmptyBlockGetter; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelProperty; @@ -27,7 +28,9 @@ import net.minecraftforge.client.model.data.ModelProperty; public class VirtualRenderHelper { public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); - public static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new BakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); + + private static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new BakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); + private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); public static boolean isVirtual(ModelData data) { return data.has(VirtualRenderHelper.VIRTUAL_PROPERTY) && data.get(VirtualRenderHelper.VIRTUAL_PROPERTY); @@ -51,41 +54,30 @@ public class VirtualRenderHelper { } public static SuperByteBuffer bufferModel(BakedModel model, BlockState state, @Nullable PoseStack poseStack) { - List shadedMeshes = new ArrayList<>(); - List unshadedMeshes = new ArrayList<>(); - MutableInt totalVertexCount = new MutableInt(0); + BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; + ModelBlockRenderer renderer = dispatcher.getModelRenderer(); + ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); - ShadeSeparatedResultConsumer resultConsumer = (renderType, shaded, data) -> { - ByteBuffer vertexBuffer = data.vertexBuffer(); - int vertexCount = data.drawState().vertexCount(); - int stride = data.drawState().format().getVertexSize(); - MutableTemplateMesh mutableMesh = new MutableTemplateMesh(vertexCount); - - transferBlockVertexData(vertexBuffer, vertexCount, stride, mutableMesh, 0); - - if (shaded) { - shadedMeshes.add(mutableMesh); - } else { - unshadedMeshes.add(mutableMesh); - } - totalVertexCount.add(vertexCount); - }; - BakedModelBufferer.bufferSingleShadeSeparated(ModelUtil.VANILLA_RENDERER.getModelRenderer(), VirtualEmptyBlockGetter.INSTANCE, model, state, poseStack, ModelData.EMPTY, resultConsumer); - - MutableTemplateMesh mutableMesh = new MutableTemplateMesh(totalVertexCount.getValue()); - - int copyIndex = 0; - for (MutableTemplateMesh template : shadedMeshes) { - mutableMesh.copyFrom(copyIndex, template); - copyIndex += template.vertexCount(); - } - int unshadedStartVertex = copyIndex; - for (MutableTemplateMesh template : unshadedMeshes) { - mutableMesh.copyFrom(copyIndex, template); - copyIndex += template.vertexCount(); + if (poseStack == null) { + poseStack = objects.identityPoseStack; } + RandomSource random = objects.random; - return new SuperByteBuffer(mutableMesh.toImmutable(), unshadedStartVertex); + ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; + BufferBuilder shadedBuilder = objects.shadedBuilder; + BufferBuilder unshadedBuilder = objects.unshadedBuilder; + + shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + + ModelData modelData = model.getModelData(VirtualEmptyBlockGetter.INSTANCE, BlockPos.ZERO, state, VIRTUAL_DATA); + poseStack.pushPose(); + renderer.tesselateBlock(VirtualEmptyBlockGetter.INSTANCE, model, state, BlockPos.ZERO, poseStack, shadeSeparatingWrapper, false, random, 42L, OverlayTexture.NO_OVERLAY, modelData, null); + poseStack.popPose(); + + shadeSeparatingWrapper.clear(); + return endAndCombine(shadedBuilder, unshadedBuilder); } public static void transferBlockVertexData(ByteBuffer vertexBuffer, int vertexCount, int stride, MutableTemplateMesh mutableMesh, int dstIndex) { @@ -116,7 +108,17 @@ public class VirtualRenderHelper { MutableTemplateMesh mutableMesh = new MutableTemplateMesh(totalVertexCount); transferBlockVertexData(shadedData.vertexBuffer(), shadedData.drawState().vertexCount(), shadedData.drawState().format().getVertexSize(), mutableMesh, 0); - transferBlockVertexData(unshadedData.vertexBuffer(), unshadedData.drawState().vertexCount(), unshadedData.drawState().format().getVertexSize(), mutableMesh, unshadedStartVertex); + if (unshadedData != null) { + transferBlockVertexData(unshadedData.vertexBuffer(), unshadedData.drawState().vertexCount(), unshadedData.drawState().format().getVertexSize(), mutableMesh, unshadedStartVertex); + } return new SuperByteBuffer(mutableMesh.toImmutable(), unshadedStartVertex); } + + private static class ThreadLocalObjects { + public final PoseStack identityPoseStack = new PoseStack(); + public final RandomSource random = RandomSource.createNewThreadLocalInstance(); + public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); + public final BufferBuilder shadedBuilder = new BufferBuilder(512); + public final BufferBuilder unshadedBuilder = new BufferBuilder(512); + } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedBlockAndTintGetter.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedBlockAndTintGetter.java new file mode 100644 index 0000000000..27e3a8370a --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedBlockAndTintGetter.java @@ -0,0 +1,58 @@ +package com.simibubi.create.foundation.utility.worldWrappers; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.ColorResolver; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.lighting.LevelLightEngine; +import net.minecraft.world.level.material.FluidState; + +public class WrappedBlockAndTintGetter implements BlockAndTintGetter { + protected final BlockAndTintGetter wrapped; + + public WrappedBlockAndTintGetter(BlockAndTintGetter wrapped) { + this.wrapped = wrapped; + } + + @Override + public BlockEntity getBlockEntity(BlockPos pos) { + return wrapped.getBlockEntity(pos); + } + + @Override + public BlockState getBlockState(BlockPos pos) { + return wrapped.getBlockState(pos); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + return wrapped.getFluidState(pos); + } + + @Override + public int getHeight() { + return wrapped.getHeight(); + } + + @Override + public int getMinBuildHeight() { + return wrapped.getMinBuildHeight(); + } + + @Override + public float getShade(Direction pDirection, boolean pShade) { + return wrapped.getShade(pDirection, pShade); + } + + @Override + public LevelLightEngine getLightEngine() { + return wrapped.getLightEngine(); + } + + @Override + public int getBlockTint(BlockPos pBlockPos, ColorResolver pColorResolver) { + return wrapped.getBlockTint(pBlockPos, pColorResolver); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java deleted file mode 100644 index ac3b550a28..0000000000 --- a/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualEmptyBlockGetter.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.simibubi.create.foundation.virtualWorld; - -import org.jetbrains.annotations.Nullable; - -import net.minecraft.client.Minecraft; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.SectionPos; -import net.minecraft.core.registries.Registries; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.ColorResolver; -import net.minecraft.world.level.LightLayer; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.DataLayer; -import net.minecraft.world.level.chunk.LightChunk; -import net.minecraft.world.level.chunk.LightChunkGetter; -import net.minecraft.world.level.lighting.LayerLightEventListener; -import net.minecraft.world.level.lighting.LevelLightEngine; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; - -public interface VirtualEmptyBlockGetter extends BlockAndTintGetter { - public static final VirtualEmptyBlockGetter INSTANCE = new StaticLightImpl(0, 15); - public static final VirtualEmptyBlockGetter FULL_BRIGHT = new StaticLightImpl(15, 15); - public static final VirtualEmptyBlockGetter FULL_DARK = new StaticLightImpl(0, 0); - - public static boolean is(BlockAndTintGetter blockGetter) { - return blockGetter instanceof VirtualEmptyBlockGetter; - } - - @Override - @Nullable - default BlockEntity getBlockEntity(BlockPos pos) { - return null; - } - - @Override - default BlockState getBlockState(BlockPos pos) { - return Blocks.AIR.defaultBlockState(); - } - - @Override - default FluidState getFluidState(BlockPos pos) { - return Fluids.EMPTY.defaultFluidState(); - } - - @Override - default int getHeight() { - return 1; - } - - @Override - default int getMinBuildHeight() { - return 0; - } - - @Override - default float getShade(Direction direction, boolean shaded) { - return 1f; - } - - @Override - default int getBlockTint(BlockPos pos, ColorResolver resolver) { - Biome plainsBiome = Minecraft.getInstance().getConnection().registryAccess().registryOrThrow(Registries.BIOME).getOrThrow(Biomes.PLAINS); - return resolver.getColor(plainsBiome, pos.getX(), pos.getZ()); - } - - public static class StaticLightImpl implements VirtualEmptyBlockGetter { - private final LevelLightEngine lightEngine; - - public StaticLightImpl(int blockLight, int skyLight) { - lightEngine = new LevelLightEngine(new LightChunkGetter() { - @Override - @Nullable - public LightChunk getChunkForLighting(int p_63023_, int p_63024_) { - return null; - } - - @Override - public BlockGetter getLevel() { - return StaticLightImpl.this; - } - }, false, false) { - private final LayerLightEventListener blockListener = createStaticListener(blockLight); - private final LayerLightEventListener skyListener = createStaticListener(skyLight); - - @Override - public LayerLightEventListener getLayerListener(LightLayer layer) { - return layer == LightLayer.BLOCK ? blockListener : skyListener; - } - }; - } - - private static LayerLightEventListener createStaticListener(int light) { - return new LayerLightEventListener() { - @Override - public void checkBlock(BlockPos pos) { - } - - @Override - public boolean hasLightWork() { - return false; - } - - @Override - public int runLightUpdates() { - return 0; - } - - @Override - public void updateSectionStatus(SectionPos pos, boolean isSectionEmpty) { - } - - @Override - public void setLightEnabled(ChunkPos pos, boolean lightEnabled) { - } - - @Override - public void propagateLightSources(ChunkPos pos) { - } - - @Override - public DataLayer getDataLayerData(SectionPos pos) { - return null; - } - - @Override - public int getLightValue(BlockPos pos) { - return light; - } - }; - } - - @Override - public LevelLightEngine getLightEngine() { - return lightEngine; - } - } -} From 7df37f7bff9c6a028413ba64d1fe5746a7d206d7 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 2 Mar 2024 21:27:48 -0800 Subject: [PATCH 16/35] Unlit - Remove last bits of FlwContraption rendering - Remove ContraptionLighter --- .../content/contraptions/Contraption.java | 14 +- .../contraptions/bearing/AnchoredLighter.java | 19 -- .../bearing/BearingContraption.java | 8 - .../bearing/ClockworkContraption.java | 8 - .../bearing/StabilizedContraption.java | 9 - .../gantry/GantryContraption.java | 9 - .../mounted/MountedContraption.java | 11 +- .../piston/PistonContraption.java | 8 - .../contraptions/piston/PistonLighter.java | 35 ---- .../pulley/PulleyContraption.java | 13 +- .../contraptions/pulley/PulleyLighter.java | 30 --- .../render/ContraptionLighter.java | 53 ----- .../contraptions/render/EmptyLighter.java | 16 -- .../contraptions/render/FlwContraption.java | 194 ------------------ .../render/FlwContraptionManager.java | 89 -------- .../render/NonStationaryLighter.java | 38 ---- .../trains/entity/CarriageContraption.java | 12 +- 17 files changed, 6 insertions(+), 560 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index 562c21881a..2deadc35e5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -54,8 +54,6 @@ import com.simibubi.create.content.contraptions.pulley.PulleyBlock; import com.simibubi.create.content.contraptions.pulley.PulleyBlock.MagnetBlock; import com.simibubi.create.content.contraptions.pulley.PulleyBlock.RopeBlock; import com.simibubi.create.content.contraptions.pulley.PulleyBlockEntity; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; -import com.simibubi.create.content.contraptions.render.EmptyLighter; import com.simibubi.create.content.decoration.slidingDoor.SlidingDoorBlock; import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; @@ -122,8 +120,6 @@ import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -1157,14 +1153,14 @@ public abstract class Contraption { if (behaviour != null) behaviour.startMoving(context); pair.setRight(context); - if (behaviour instanceof ContraptionControlsMovement) + if (behaviour instanceof ContraptionControlsMovement) disableActorOnStart(context); } for (ItemStack stack : disabledActors) setActorsActive(stack, false); } - + protected void disableActorOnStart(MovementContext context) { if (!ContraptionControlsMovement.isDisabledInitially(context)) return; @@ -1303,12 +1299,6 @@ public abstract class Contraption { return interactors; } - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - // TODO: move lighters to registry - return new EmptyLighter(this); - } - public void invalidateColliders() { simplifiedEntityColliders = Optional.empty(); gatherBBsOffThread(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java deleted file mode 100644 index 25b7e17ae9..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/AnchoredLighter.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.simibubi.create.content.contraptions.bearing; - -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; - -public class AnchoredLighter extends ContraptionLighter { - - public AnchoredLighter(Contraption contraption) { - super(contraption); - } - - @Override - public MutableBox getContraptionBounds() { - MutableBox bb = MutableBox.from(contraption.bounds); - bb.translate(contraption.anchor); - return bb; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingContraption.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingContraption.java index 37d35bd267..ce4f40be7b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingContraption.java @@ -7,7 +7,6 @@ import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.ContraptionType; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; import com.simibubi.create.content.decoration.copycat.CopycatBlockEntity; import com.simibubi.create.infrastructure.config.AllConfigs; @@ -18,8 +17,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class BearingContraption extends Contraption { @@ -104,9 +101,4 @@ public class BearingContraption extends Contraption { return facing.getAxis() == this.facing.getAxis(); } - @OnlyIn(Dist.CLIENT) - @Override - public ContraptionLighter makeLighter() { - return new AnchoredLighter(this); - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/ClockworkContraption.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/ClockworkContraption.java index 1ab8f97af9..8ceca23c08 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/ClockworkContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/ClockworkContraption.java @@ -9,15 +9,12 @@ import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.ContraptionType; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class ClockworkContraption extends Contraption { @@ -132,9 +129,4 @@ public class ClockworkContraption extends Contraption { HOUR, MINUTE } - @Override - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - return new AnchoredLighter(this); - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedContraption.java index c4ef7cf302..67c9946244 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedContraption.java @@ -3,15 +3,11 @@ package com.simibubi.create.content.contraptions.bearing; import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.ContraptionType; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; -import com.simibubi.create.content.contraptions.render.NonStationaryLighter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class StabilizedContraption extends Contraption { @@ -66,9 +62,4 @@ public class StabilizedContraption extends Contraption { return facing; } - @Override - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - return new NonStationaryLighter<>(this); - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryContraption.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryContraption.java index 5ec56c80e6..447ff7bf84 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryContraption.java @@ -4,16 +4,12 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.ContraptionType; import com.simibubi.create.content.contraptions.TranslatingContraption; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; -import com.simibubi.create.content.contraptions.render.NonStationaryLighter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class GantryContraption extends TranslatingContraption { @@ -65,9 +61,4 @@ public class GantryContraption extends TranslatingContraption { return super.shouldUpdateAfterMovement(info) && !AllBlocks.GANTRY_CARRIAGE.has(info.state()); } - @Override - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - return new NonStationaryLighter<>(this); - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/mounted/MountedContraption.java index 620b470972..0c2052a3d8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/mounted/MountedContraption.java @@ -11,8 +11,6 @@ import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.ContraptionType; import com.simibubi.create.content.contraptions.mounted.CartAssemblerBlockEntity.CartMovementMode; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; -import com.simibubi.create.content.contraptions.render.NonStationaryLighter; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -32,8 +30,6 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.RailShape; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.wrapper.InvWrapper; public class MountedContraption extends Contraption { @@ -159,10 +155,5 @@ public class MountedContraption extends Contraption { if (cart instanceof Container container) storage.attachExternal(new ContraptionInvWrapper(true, new InvWrapper(container))); } - - @Override - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - return new NonStationaryLighter<>(this); - } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/piston/PistonContraption.java b/src/main/java/com/simibubi/create/content/contraptions/piston/PistonContraption.java index 859cf40643..3072c36041 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/piston/PistonContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/piston/PistonContraption.java @@ -19,7 +19,6 @@ import com.simibubi.create.content.contraptions.BlockMovementChecks; import com.simibubi.create.content.contraptions.ContraptionType; import com.simibubi.create.content.contraptions.TranslatingContraption; import com.simibubi.create.content.contraptions.piston.MechanicalPistonBlock.PistonState; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.infrastructure.config.AllConfigs; @@ -36,8 +35,6 @@ import net.minecraft.world.level.block.state.properties.PistonType; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; import net.minecraft.world.level.material.PushReaction; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class PistonContraption extends TranslatingContraption { @@ -244,9 +241,4 @@ public class PistonContraption extends TranslatingContraption { return tag; } - @OnlyIn(Dist.CLIENT) - @Override - public ContraptionLighter makeLighter() { - return new PistonLighter(this); - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java b/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java deleted file mode 100644 index f3a1013a8e..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/piston/PistonLighter.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.simibubi.create.content.contraptions.piston; - -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; - -import net.minecraft.core.Vec3i; - -public class PistonLighter extends ContraptionLighter { - public PistonLighter(PistonContraption contraption) { - super(contraption); - } - - @Override - public MutableBox getContraptionBounds() { - MutableBox bounds = MutableBox.from(contraption.bounds); - bounds.translate(contraption.anchor); - - int length = contraption.extensionLength; - Vec3i direction = contraption.orientation.getNormal(); - - int shift = length / 2; - int shiftX = direction.getX() * shift; - int shiftY = direction.getY() * shift; - int shiftZ = direction.getZ() * shift; - bounds.translate(shiftX, shiftY, shiftZ); - - int grow = (length + 1) / 2; - int extendX = Math.abs(direction.getX() * grow); - int extendY = Math.abs(direction.getY() * grow); - int extendZ = Math.abs(direction.getZ() * grow); - bounds.grow(extendX, extendY, extendZ); - - return bounds; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyContraption.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyContraption.java index cc4eb19a45..8310a4cae6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyContraption.java @@ -3,18 +3,15 @@ package com.simibubi.create.content.contraptions.pulley; import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.ContraptionType; import com.simibubi.create.content.contraptions.TranslatingContraption; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class PulleyContraption extends TranslatingContraption { int initialOffset; - + @Override public ContraptionType getType() { return ContraptionType.PULLEY; @@ -57,13 +54,7 @@ public class PulleyContraption extends TranslatingContraption { super.readNBT(world, nbt, spawnData); } - @Override - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - return new PulleyLighter(this); - } - - public int getInitialOffset() { + public int getInitialOffset() { return initialOffset; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java deleted file mode 100644 index 82d400161e..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyLighter.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.simibubi.create.content.contraptions.pulley; - -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; - -public class PulleyLighter extends ContraptionLighter { - public PulleyLighter(PulleyContraption contraption) { - super(contraption); - } - - @Override - public MutableBox getContraptionBounds() { - - MutableBox bounds = MutableBox.from(contraption.bounds); - - Level world = contraption.entity.level(); - - BlockPos.MutableBlockPos pos = contraption.anchor.mutable(); - while (!AllBlocks.ROPE_PULLEY.has(world.getBlockState(pos)) && pos.getY() < world.getMaxBuildHeight()) - pos.move(0, 1, 0); - - bounds.translate(pos); - bounds.setMinY(world.getMinBuildHeight()); - return bounds; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java deleted file mode 100644 index e3033709f4..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionLighter.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import com.jozufozu.flywheel.lib.box.Box; -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.jozufozu.flywheel.lib.light.GPULightVolume; -import com.simibubi.create.content.contraptions.Contraption; - -import net.minecraft.core.SectionPos; -import net.minecraft.world.level.LightLayer; - -public abstract class ContraptionLighter { - protected final C contraption; - public final GPULightVolume lightVolume; - - protected final MutableBox bounds; - - protected boolean scheduleRebuild; - - protected ContraptionLighter(C contraption) { - this.contraption = contraption; - - bounds = getContraptionBounds(); - growBoundsForEdgeData(bounds); - - lightVolume = new GPULightVolume(contraption.entity.level(), bounds); - - lightVolume.initialize(); - scheduleRebuild = true; - } - - public abstract MutableBox getContraptionBounds(); - - public boolean isInvalid() { - return lightVolume.isInvalid(); - } - - public void onLightUpdate(LightLayer type, SectionPos pos) { - lightVolume.onLightUpdate(type, pos); - } - - protected static void growBoundsForEdgeData(MutableBox bounds) { - // so we have at least enough data on the edges to avoid artifacts and have smooth lighting - bounds.grow(2); - } - - public Box getVolume() { - return bounds; - } - - public void delete() { - lightVolume.delete(); - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java deleted file mode 100644 index 0b4e02b5d3..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/EmptyLighter.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.simibubi.create.content.contraptions.Contraption; - -// so other contraptions don't crash before they have a lighter -public class EmptyLighter extends ContraptionLighter { - public EmptyLighter(Contraption contraption) { - super(contraption); - } - - @Override - public MutableBox getContraptionBounds() { - return new MutableBox(0, 0, 0, 1, 1, 1); - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java deleted file mode 100644 index a852e86199..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java +++ /dev/null @@ -1,194 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import org.joml.Matrix4f; - -import com.jozufozu.flywheel.api.event.BeginFrameEvent; -import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.jozufozu.flywheel.backend.gl.GlStateTracker; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.contraptions.AbstractContraptionEntity; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; - -import net.minecraft.util.Mth; -import net.minecraft.world.phys.AABB; - -public class FlwContraption extends ContraptionRenderInfo { - - private final ContraptionLighter lighter; - - // private final Map renderLayers = new HashMap<>(); - - private final Matrix4f modelViewPartial = new Matrix4f(); - private final ContraptionInstanceWorld instanceWorld; - private boolean modelViewPartialReady; - // floats because we upload this to the gpu - private AABB lightBox; - - public FlwContraption(Contraption contraption, VirtualRenderWorld renderWorld) { - super(contraption, renderWorld); - this.lighter = contraption.makeLighter(); - - instanceWorld = new ContraptionInstanceWorld(this); - - var restoreState = GlStateTracker.getRestoreState(); - buildLayers(); - if (ContraptionRenderDispatcher.canInstance()) { - // buildInstancedBlockEntities(); - buildActors(); - } - restoreState.restore(); - } - - public ContraptionLighter getLighter() { - return lighter; - } - -// public void renderStructureLayer(RenderType layer, ContraptionProgram shader) { -// ArrayModelRenderer structure = renderLayers.get(layer); -// if (structure != null) { -// setup(shader); -// structure.draw(); -// } -// } - - public void renderInstanceLayer(RenderStageEvent event) { - -// event.stack.pushPose(); -// float partialTicks = AnimationTickHolder.getPartialTicks(); -// AbstractContraptionEntity entity = contraption.entity; -// double x = Mth.lerp(partialTicks, entity.xOld, entity.getX()); -// double y = Mth.lerp(partialTicks, entity.yOld, entity.getY()); -// double z = Mth.lerp(partialTicks, entity.zOld, entity.getZ()); -// event.stack.translate(x - event.camX, y - event.camY, z - event.camZ); -// ContraptionMatrices.transform(event.stack, getMatrices().getModel()); -// instanceWorld.engine.render(SerialTaskEngine.INSTANCE, event); -// -// event.stack.popPose(); - } - - public void beginFrame(BeginFrameEvent event) { -// super.beginFrame(event); -// -// modelViewPartial.identity(); -// modelViewPartialReady = false; -// -// if (!isVisible()) return; -// -// instanceWorld.blockEntityInstanceManager.beginFrame(SerialTaskEngine.INSTANCE, event.getCamera()); -// -// Vec3 cameraPos = event.getCameraPos(); -// -// lightBox = lighter.lightVolume.toAABB() -// .move(-cameraPos.x, -cameraPos.y, -cameraPos.z); - } - - @Override - public void setupMatrices(PoseStack viewProjection, double camX, double camY, double camZ) { - super.setupMatrices(viewProjection, camX, camY, camZ); - - if (!modelViewPartialReady) { - setupModelViewPartial(modelViewPartial, getMatrices().getModel().last().pose(), contraption.entity, camX, camY, camZ, AnimationTickHolder.getPartialTicks()); - modelViewPartialReady = true; - } - } - -// void setup(ContraptionProgram shader) { -// if (!modelViewPartialReady || lightBox == null) return; -// shader.bind(modelViewPartial, lightBox); -// lighter.lightVolume.bind(); -// } - - public void invalidate() { -// for (ArrayModelRenderer renderer : renderLayers.values()) { -// renderer.delete(); -// renderer.getModel().delete(); -// } -// renderLayers.clear(); -// -// lighter.delete(); -// -// instanceWorld.delete(); - } - - private void buildLayers() { -// for (ArrayModelRenderer renderer : renderLayers.values()) { -// renderer.delete(); -// renderer.getModel().delete(); -// } -// -// renderLayers.clear(); -// -// List blockLayers = RenderType.chunkBufferLayers(); -// Collection renderedBlocks = contraption.getRenderedBlocks(); -// -// for (RenderType layer : blockLayers) { -// Model layerModel = new WorldModelBuilder(layer).withRenderWorld(renderWorld) -// .withModelData(contraption.modelData) -// .withBlocks(renderedBlocks) -// .toModel(layer + "_" + contraption.entity.getId()); -// renderLayers.put(layer, new ArrayModelRenderer(layerModel)); -// } - } - -// private void buildInstancedBlockEntities() { -// for (BlockEntity be : contraption.maybeInstancedBlockEntities) { -// if (!InstancedRenderRegistry.canInstance(be.getType())) { -// continue; -// } -// -// Level world = be.getLevel(); -// be.setLevel(renderWorld); -// instanceWorld.blockEntityInstanceManager.add(be); -// be.setLevel(world); -// } -// } - - private void buildActors() { -// contraption.getActors().forEach(instanceWorld.blockEntityInstanceManager::createActor); - } - - public static void setupModelViewPartial(Matrix4f matrix, Matrix4f modelMatrix, AbstractContraptionEntity entity, double camX, double camY, double camZ, float pt) { - float x = (float) (Mth.lerp(pt, entity.xOld, entity.getX()) - camX); - float y = (float) (Mth.lerp(pt, entity.yOld, entity.getY()) - camY); - float z = (float) (Mth.lerp(pt, entity.zOld, entity.getZ()) - camZ); - matrix.setTranslation(x, y, z); - matrix.mul(modelMatrix); - } - - public void tick() { -// instanceWorld.blockEntityInstanceManager.tick(); - } - - public static class ContraptionInstanceWorld { - -// private final Engine engine; -// private final ContraptionInstanceManager blockEntityInstanceManager; - - public ContraptionInstanceWorld(FlwContraption parent) { -// switch (Backend.getBackendType()) { -// case INSTANCING -> { -// InstancingEngine engine = InstancingEngine.builder(CreateContexts.CWORLD) -// .setGroupFactory(ContraptionGroup.forContraption(parent)) -// .setIgnoreOriginCoordinate(true) -// .build(); -// blockEntityInstanceManager = new ContraptionInstanceManager(engine, parent.renderWorld, parent.contraption); -// engine.addListener(blockEntityInstanceManager); -// -// this.engine = engine; -// } -// case BATCHING -> { -// engine = new BatchingEngine(); -// blockEntityInstanceManager = new ContraptionInstanceManager(engine, parent.renderWorld, parent.contraption); -// } -// default -> throw new IllegalArgumentException("Unknown engine type"); -// } - } - - public void delete() { -// engine.delete(); -// blockEntityInstanceManager.invalidate(); - } - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java deleted file mode 100644 index 9b2d3139ef..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraptionManager.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.simibubi.create.content.contraptions.Contraption; - -import net.minecraft.world.level.LevelAccessor; - -public class FlwContraptionManager extends ContraptionRenderingWorld { - - public FlwContraptionManager(LevelAccessor world) { - super(world); - } - - @Override - public void tick() { - super.tick(); - - for (FlwContraption contraption : visible) { - contraption.tick(); - } - } - - @Override - public void renderLayer(RenderStageEvent event) { -// super.renderLayer(event); -// -// if (visible.isEmpty()) return; -// -// GlStateTracker.State restoreState = GlStateTracker.getRestoreState(); -// GlTextureUnit active = GlTextureUnit.getActive(); -// -// var backendType = Backend.getBackendType(); -// if (backendType != BackendType.OFF) { -// renderStructures(event); -// } -// -// if (backendType != BackendType.BATCHING && event.getLayer() != null) { -// for (FlwContraption renderer : visible) { -// renderer.renderInstanceLayer(event); -// } -// } -// -// // clear the light volume state -// GlTextureUnit.T4.makeActive(); -// glBindTexture(GL_TEXTURE_3D, 0); -// -// event.type.clearRenderState(); -// active.makeActive(); -// restoreState.restore(); - } - - private void renderStructures(RenderStageEvent event) { - -// event.type.setupRenderState(); -// Textures.bindActiveTextures(); -// -// ContraptionProgram structureShader = CreateContexts.STRUCTURE.getProgram(ProgramContext.create(Materials.Names.PASSTHRU, Formats.BLOCK, RenderLayer.getLayer(event.type))); -// -// structureShader.bind(); -// structureShader.uploadViewProjection(event.viewProjection); -// structureShader.uploadCameraPos(event.camX, event.camY, event.camZ); -// -// for (FlwContraption flwContraption : visible) { -// flwContraption.renderStructureLayer(event.type, structureShader); -// } - } - - @Override - protected FlwContraption create(Contraption c) { -// VirtualRenderWorld renderWorld = ContraptionRenderDispatcher.setupRenderWorld(world, c); -// return new FlwContraption(c, renderWorld); - return null; - } - - @Override - public void removeDeadRenderers() { - boolean removed = renderInfos.values() - .removeIf(renderer -> { - if (renderer.isDead()) { - renderer.invalidate(); - return true; - } - return false; - }); - - // we use visible in #tick() so we have to re-evaluate it if any were removed - if (removed) collectVisible(); - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java b/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java deleted file mode 100644 index d3a2294446..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/NonStationaryLighter.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import com.jozufozu.flywheel.lib.box.Box; -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.infrastructure.config.AllConfigs; - -public class NonStationaryLighter extends ContraptionLighter { - public NonStationaryLighter(C contraption) { - super(contraption); - } - - public boolean tickLightListener() { - if (getVolume().volume() > AllConfigs.client().maxContraptionLightVolume.get()) - return false; - - Box contraptionBounds = getContraptionBounds(); - - if (bounds.sameAs(contraptionBounds, 2)) { - return false; - } - bounds.assign(contraptionBounds); - growBoundsForEdgeData(bounds); - - lightVolume.move(bounds); - - return true; - } - - @Override - public MutableBox getContraptionBounds() { - MutableBox bb = MutableBox.from(contraption.bounds); - - bb.translate(contraption.entity.blockPosition()); - - return bb; - } -} diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java index 050ec7cd32..6c343cbbab 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java @@ -17,8 +17,6 @@ import com.simibubi.create.content.contraptions.ContraptionType; import com.simibubi.create.content.contraptions.MountedStorageManager; import com.simibubi.create.content.contraptions.actors.trainControls.ControlsBlock; import com.simibubi.create.content.contraptions.minecart.TrainCargoManager; -import com.simibubi.create.content.contraptions.render.ContraptionLighter; -import com.simibubi.create.content.contraptions.render.NonStationaryLighter; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; @@ -41,8 +39,6 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidTank; @@ -242,13 +238,7 @@ public class CarriageContraption extends Contraption { return ContraptionType.CARRIAGE; } - @Override - @OnlyIn(Dist.CLIENT) - public ContraptionLighter makeLighter() { - return new NonStationaryLighter<>(this); - } - - public Direction getAssemblyDirection() { + public Direction getAssemblyDirection() { return assemblyDirection; } From a38f01fae242479ecca2e64ce4b8a65c9293b67e Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 17 Mar 2024 20:35:12 -0700 Subject: [PATCH 17/35] Relit - Actually use light volume api stuffs - Bit of a pain to try to iterate over sections based on an AABB - Still need to handle when contraptions move - Bump flywheel version --- gradle.properties | 2 +- .../render/ContraptionVisual.java | 50 +++++++++++++++++-- .../entity/CarriageContraptionVisual.java | 2 + 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index ba3ca6006a..6111c45115 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-59 +flywheel_version = 1.0.0-alpha-66 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index 2c320a44db..4ce2d24e8f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -37,6 +37,7 @@ import com.simibubi.create.foundation.utility.worldWrappers.WrappedBlockAndTintG import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; import net.minecraft.util.Mth; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.Level; @@ -65,7 +66,9 @@ public class ContraptionVisual extends Abst @Override public void init(float partialTick) { - Contraption contraption = entity.getContraption(); + setEmbeddingMatrices(partialTick); + + Contraption contraption = entity.getContraption(); virtualRenderWorld = ContraptionRenderDispatcher.setupRenderWorld(level, contraption); RenderedBlocks blocks = contraption.getRenderedBlocks(); @@ -91,6 +94,8 @@ public class ContraptionVisual extends Abst for (var actor : contraption.getActors()) { setupActor(actor, partialTick); } + + updateLight(); } private void setupActor(MutablePair actor, float partialTick) { @@ -163,25 +168,60 @@ public class ContraptionVisual extends Abst } protected void beginFrame(VisualFrameContext context) { - double x = Mth.lerp(context.partialTick(), entity.xOld, entity.getX()); - double y = Mth.lerp(context.partialTick(), entity.yOld, entity.getY()); - double z = Mth.lerp(context.partialTick(), entity.zOld, entity.getZ()); + var partialTick = context.partialTick(); + setEmbeddingMatrices(partialTick); + + // TODO: re-collect light if needed + } + + private void setEmbeddingMatrices(float partialTick) { + double x = Mth.lerp(partialTick, entity.xOld, entity.getX()); + double y = Mth.lerp(partialTick, entity.yOld, entity.getY()); + double z = Mth.lerp(partialTick, entity.zOld, entity.getZ()); contraptionMatrix.setIdentity(); contraptionMatrix.translate(x, y, z); - entity.applyLocalTransforms(contraptionMatrix, context.partialTick()); + entity.applyLocalTransforms(contraptionMatrix, partialTick); embedding.transforms(contraptionMatrix.last().pose(), contraptionMatrix.last().normal()); } @Override public void updateLight() { + // FIXME: Some blocks (e.g. large waterwheels) extend well beyond their actual block + // and might have lighting issues here + var boundingBox = entity.getBoundingBox(); + int minX = Mth.floor(boundingBox.minX) - 1; + int minY = Mth.floor(boundingBox.minY) - 1; + int minZ = Mth.floor(boundingBox.minZ) - 1; + int sizeX = Mth.ceil(boundingBox.maxX) - minX + 2; + int sizeY = Mth.ceil(boundingBox.maxY) - minY + 2; + int sizeZ = Mth.ceil(boundingBox.maxZ) - minZ + 2; + + embedding.collectLight(level, minX, minY, minZ, sizeX, sizeY, sizeZ); } @Override public void collectLightSections(LongConsumer consumer) { var boundingBox = entity.getBoundingBox(); + + int minX = Mth.floor(boundingBox.minX) - 1; + int minY = Mth.floor(boundingBox.minY) - 1; + int minZ = Mth.floor(boundingBox.minZ) - 1; + int sizeXChunks = SectionPos.blockToSectionCoord(Mth.ceil(boundingBox.maxX) - minX + 2) + 1; + int sizeYChunks = SectionPos.blockToSectionCoord(Mth.ceil(boundingBox.maxY) - minY + 2) + 1; + int sizeZChunks = SectionPos.blockToSectionCoord(Mth.ceil(boundingBox.maxZ) - minZ + 2) + 1; + + var base = SectionPos.asLong(SectionPos.blockToSectionCoord(minX), SectionPos.blockToSectionCoord(minY), SectionPos.blockToSectionCoord(minZ)); + + for (int x = 0; x < sizeXChunks; x++) { + for (int y = 0; y < sizeYChunks; y++) { + for (int z = 0; z < sizeZChunks; z++) { + consumer.accept(SectionPos.offset(base, x, y, z)); + } + } + } } @Override diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index c0af8d6886..88e8919bbe 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -88,6 +88,8 @@ public class CarriageContraptionVisual extends ContraptionVisual Date: Mon, 18 Mar 2024 22:01:01 -0700 Subject: [PATCH 18/35] Visual inspection - Run through and fix a bunch of broken visuals - Mostly things were missing setChanged - Add CutoutPartial and BakedModel wrapper to force some partials to render as cutout - Remove CutoutRotatingVisual - Update most visuals to use the partial ticked passed to init and in VisualFrameContext --- .../simibubi/create/AllBlockEntityTypes.java | 3 +- .../com/simibubi/create/AllPartialModels.java | 11 +- .../contraptions/actors/psi/PIInstance.java | 2 + .../contraptions/actors/psi/PSIVisual.java | 7 +- .../contraptions/bearing/BearingVisual.java | 5 +- .../contraptions/chassis/StickerVisual.java | 5 +- .../pulley/AbstractPulleyVisual.java | 15 ++- .../contraptions/pulley/HosePulleyVisual.java | 5 +- .../contraptions/pulley/RopePulleyVisual.java | 6 +- .../equipment/toolbox/ToolBoxVisual.java | 8 +- .../fluids/pipes/valve/FluidValveVisual.java | 30 +++-- .../content/fluids/pump/PumpCogVisual.java | 7 +- .../kinetics/base/CutoutRotatingVisual.java | 9 -- .../kinetics/crank/HandCrankVisual.java | 10 +- .../kinetics/deployer/DeployerVisual.java | 23 ++-- .../kinetics/flywheel/FlywheelVisual.java | 3 +- .../content/kinetics/gauge/GaugeVisual.java | 60 +++++---- .../kinetics/gearbox/GearboxVisual.java | 2 +- .../kinetics/mechanicalArm/ArmVisual.java | 50 +++---- .../content/kinetics/mixer/MixerVisual.java | 32 ++--- .../content/kinetics/press/PressVisual.java | 22 +-- .../steamEngine/SteamEngineVisual.java | 17 ++- .../kinetics/waterwheel/WaterWheelVisual.java | 4 +- .../logistics/depot/EjectorVisual.java | 20 +-- .../logistics/funnel/FunnelVisual.java | 24 ++-- .../logistics/tunnel/BeltTunnelVisual.java | 24 ++-- .../analogLever/AnalogLeverVisual.java | 21 ++- .../redstone/diodes/BrassDiodeVisual.java | 6 +- .../cannon/SchematicannonVisual.java | 5 +- .../entity/CarriageContraptionVisual.java | 3 +- .../render/BlockEntityRenderHelper.java | 7 +- .../foundation/render/CutoutPartial.java | 126 ++++++++++++++++++ 32 files changed, 357 insertions(+), 215 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index 4f6edcf39c..c7c3231af3 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -71,7 +71,6 @@ import com.simibubi.create.content.fluids.spout.SpoutRenderer; import com.simibubi.create.content.fluids.tank.CreativeFluidTankBlockEntity; import com.simibubi.create.content.fluids.tank.FluidTankBlockEntity; import com.simibubi.create.content.fluids.tank.FluidTankRenderer; -import com.simibubi.create.content.kinetics.base.CutoutRotatingVisual; import com.simibubi.create.content.kinetics.base.HalfShaftVisual; import com.simibubi.create.content.kinetics.base.HorizontalHalfShaftVisual; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -608,7 +607,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry CRUSHING_WHEEL = REGISTRATE .blockEntity("crushing_wheel", CrushingWheelBlockEntity::new) - .instance(() -> CutoutRotatingVisual::new, false) + .instance(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.CRUSHING_WHEEL) .renderer(() -> KineticBlockEntityRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index e3c774b36a..9d6c2b36af 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -8,6 +8,7 @@ import java.util.Map; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.content.fluids.FluidTransportBehaviour; +import com.simibubi.create.foundation.render.CutoutPartial; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; @@ -35,7 +36,7 @@ public class AllPartialModels { ANDESITE_BELT_COVER_Z = block("belt_cover/andesite_belt_cover_z"), BRASS_BELT_COVER_Z = block("belt_cover/brass_belt_cover_z"), - ENCASED_FAN_INNER = block("encased_fan/propeller"), HAND_CRANK_HANDLE = block("hand_crank/handle"), + ENCASED_FAN_INNER = cutoutBlock("encased_fan/propeller"), HAND_CRANK_HANDLE = block("hand_crank/handle"), MECHANICAL_PRESS_HEAD = block("mechanical_press/head"), MECHANICAL_MIXER_POLE = block("mechanical_mixer/pole"), MECHANICAL_MIXER_HEAD = block("mechanical_mixer/head"), MECHANICAL_CRAFTER_LID = block("mechanical_crafter/lid"), @@ -51,7 +52,7 @@ public class AllPartialModels { GAUGE_INDICATOR = block("gauge/indicator"), GAUGE_HEAD_SPEED = block("gauge/speedometer/head"), GAUGE_HEAD_STRESS = block("gauge/stressometer/head"), BEARING_TOP = block("bearing/top"), BEARING_TOP_WOODEN = block("bearing/top_wooden"), DRILL_HEAD = block("mechanical_drill/head"), - HARVESTER_BLADE = block("mechanical_harvester/blade"), DEPLOYER_POLE = block("deployer/pole"), + HARVESTER_BLADE = cutoutBlock("mechanical_harvester/blade"), DEPLOYER_POLE = block("deployer/pole"), DEPLOYER_HAND_POINTING = block("deployer/hand_pointing"), DEPLOYER_HAND_PUNCHING = block("deployer/hand_punching"), DEPLOYER_HAND_HOLDING = block("deployer/hand_holding"), ANALOG_LEVER_HANDLE = block("analog_lever/handle"), @@ -203,7 +204,7 @@ public class AllPartialModels { PIPE_ATTACHMENTS.put(type, map); } for (DyeColor color : DyeColor.values()) - TOOLBOX_LIDS.put(color, block("toolbox/lid/" + Lang.asId(color.name()))); + TOOLBOX_LIDS.put(color, cutoutBlock("toolbox/lid/" + Lang.asId(color.name()))); for (Direction d : Iterate.horizontalDirections) METAL_GIRDER_BRACKETS.put(d, block("metal_girder/bracket_" + Lang.asId(d.name()))); for (int i = 0; i < 8; i++) @@ -222,6 +223,10 @@ public class AllPartialModels { return new PartialModel(Create.asResource("block/" + path)); } + private static PartialModel cutoutBlock(String path) { + return new CutoutPartial(Create.asResource("block/" + path)); + } + private static PartialModel entity(String path) { return new PartialModel(Create.asResource("entity/" + path)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index c06450979b..495387b243 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -59,6 +59,8 @@ public class PIInstance { middle.translate(0, progress * 0.5f + 0.375f, 0); top.translate(0, progress, 0); + middle.setChanged(); + top.setChanged(); } public void tick(boolean lit) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 8e5f3098f3..62c6f3bf6d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -3,13 +3,12 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; -import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; public class PSIVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual, SimpleTickableVisual { @@ -34,7 +33,7 @@ public class PSIVisual extends AbstractBlockEntityVisual e @Override public void beginFrame(VisualFrameContext ctx) { - float interpolatedAngle = blockEntity.getInterpolatedAngle(AnimationTickHolder.getPartialTicks() - 1); + float interpolatedAngle = blockEntity.getInterpolatedAngle(ctx.partialTick() - 1); Quaternionf rot = rotationAxis.rotationDegrees(interpolatedAngle); rot.mul(blockOrientation); diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 9abfc1d778..b1b2aa4946 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -3,13 +3,13 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AngleHelper; @@ -61,7 +61,8 @@ public class StickerVisual extends AbstractBlockEntityVisual .rotateYDegrees(AngleHelper.horizontalAngle(facing)) .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90) .uncenter() - .translate(0, (offset * offset) * 4 / 16f, 0); + .translate(0, (offset * offset) * 4 / 16f, 0) + .setChanged(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index fc5edbeb78..eb026969f1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -4,13 +4,13 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.box.MutableBox; import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.light.LightPacking; import com.jozufozu.flywheel.lib.light.LightVolume; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.ShaftVisual; @@ -52,7 +52,7 @@ public abstract class AbstractPulleyVisual extends rope = new GroupInstance<>(getRopeModel()); halfRope = new ConditionalInstance<>(getHalfRopeModel()).withCondition(this::shouldRenderHalfRope); - updateOffset(); + updateOffset(0); updateVolume(); light = new LightVolume(level, volume); @@ -61,8 +61,9 @@ public abstract class AbstractPulleyVisual extends @Override public void beginFrame(VisualFrameContext ctx) { - updateOffset(); - coil.setRotation(rotationAxis.rotationDegrees(offset * 180)); + updateOffset(ctx.partialTick()); + coil.setRotation(rotationAxis.rotationDegrees(offset * 180)) + .setChanged(); int neededRopeCount = getNeededRopeCount(); rope.resize(neededRopeCount); @@ -138,7 +139,7 @@ public abstract class AbstractPulleyVisual extends protected abstract Instancer getHalfRopeModel(); - protected abstract float getOffset(); + protected abstract float getOffset(float pt); protected abstract boolean isRunning(); @@ -161,8 +162,8 @@ public abstract class AbstractPulleyVisual extends return false; } - private void updateOffset() { - offset = getOffset(); + private void updateOffset(float pt) { + offset = getOffset(pt); } private int getNeededRopeCount() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index df4391f18c..c63655ff8f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -7,7 +7,6 @@ import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; -import com.simibubi.create.foundation.utility.AnimationTickHolder; public class HosePulleyVisual extends AbstractPulleyVisual { @@ -35,8 +34,8 @@ public class HosePulleyVisual extends AbstractPulleyVisual { public RopePulleyVisual(VisualizationContext context, PulleyBlockEntity blockEntity) { @@ -36,9 +35,8 @@ public class RopePulleyVisual extends AbstractPulleyVisual { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF)); } - protected float getOffset() { - float partialTicks = AnimationTickHolder.getPartialTicks(); - return PulleyRenderer.getBlockEntityOffset(partialTicks, blockEntity); + protected float getOffset(float pt) { + return PulleyRenderer.getBlockEntityOffset(pt, blockEntity); } protected boolean isRunning() { diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index b883fdffcd..c669847c1c 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -4,13 +4,13 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Iterate; @@ -63,7 +63,8 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual .uncenter() .translate(0, 6 / 16f, 12 / 16f) .rotateXDegrees(135 * lidAngle) - .translateBack(0, 6 / 16f, 12 / 16f); + .translateBack(0, 6 / 16f, 12 / 16f) + .setChanged(); for (int offset : Iterate.zeroAndOne) { drawers[offset].loadIdentity() @@ -71,7 +72,8 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual .center() .rotateYDegrees(-facing.toYRot()) .uncenter() - .translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)); + .translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)) + .setChanged(); } } diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 3424760dce..07d7880c89 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -3,17 +3,16 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.util.Mth; @@ -43,30 +42,35 @@ public class FluidValveVisual extends ShaftVisual impleme settled = false; pointer = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER)).createInstance(); + } - transformPointer(); - } + @Override + public void init(float pt) { + super.init(pt); + + transformPointer(pt); + } @Override public void beginFrame(VisualFrameContext ctx) { if (blockEntity.pointer.settled() && settled) return; - transformPointer(); + transformPointer(ctx.partialTick()); } - private void transformPointer() { - float value = blockEntity.pointer.getValue(AnimationTickHolder.getPartialTicks()); + private void transformPointer(float partialTick) { + float value = blockEntity.pointer.getValue(partialTick); float pointerRotation = Mth.lerp(value, 0, -90); settled = (value == 0 || value == 1) && blockEntity.pointer.settled(); pointer.loadIdentity() - .translate(getVisualPosition()) - .center() - .rotateYDegrees((float) yRot) - .rotateXDegrees((float) xRot) - .rotateYDegrees(pointerRotationOffset + pointerRotation) - .uncenter() + .translate(getVisualPosition()) + .center() + .rotateYDegrees((float) yRot) + .rotateXDegrees((float) xRot) + .rotateYDegrees(pointerRotationOffset + pointerRotation) + .uncenter() .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index 8786c190dc..a554b7fad9 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -1,8 +1,6 @@ package com.simibubi.create.content.fluids.pump; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; @@ -12,15 +10,12 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class PumpCogVisual extends SingleRotatingVisual implements SimpleDynamicVisual { +public class PumpCogVisual extends SingleRotatingVisual { public PumpCogVisual(VisualizationContext context, PumpBlockEntity blockEntity) { super(context, blockEntity); } - @Override - public void beginFrame(VisualFrameContext ctx) {} - @Override protected Model model() { BlockState referenceState = blockEntity.getBlockState(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java deleted file mode 100644 index b849a73031..0000000000 --- a/src/main/java/com/simibubi/create/content/kinetics/base/CutoutRotatingVisual.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.simibubi.create.content.kinetics.base; - -import com.jozufozu.flywheel.api.visualization.VisualizationContext; - -public class CutoutRotatingVisual extends SingleRotatingVisual { - public CutoutRotatingVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); - } -} diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 38f9c2a64e..ad25c0beaf 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -10,7 +10,6 @@ import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -26,7 +25,6 @@ public class HandCrankVisual extends SingleRotatingVisual Model model = blockEntity.getRenderedHandleInstance(); crank = instancerProvider.instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); - rotateCrank(); } @Override @@ -34,12 +32,12 @@ public class HandCrankVisual extends SingleRotatingVisual if (crank == null) return; - rotateCrank(); + rotateCrank(ctx.partialTick()); } - private void rotateCrank() { + private void rotateCrank(float pt) { Direction.Axis axis = facing.getAxis(); - float angle = blockEntity.getIndependentAngle(AnimationTickHolder.getPartialTicks()); + float angle = blockEntity.getIndependentAngle(pt); crank.loadIdentity() .translate(getVisualPosition()) @@ -51,6 +49,8 @@ public class HandCrankVisual extends SingleRotatingVisual @Override public void init(float pt) { + rotateCrank(pt); + // FIXME: need to call super.super.init here if (blockEntity.shouldRenderShaft()) super.init(pt); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 1a23faa515..733239db66 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -8,8 +8,6 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; -import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -17,11 +15,12 @@ import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -58,13 +57,18 @@ public class DeployerVisual extends ShaftVisual implements currentHand = this.blockEntity.getHandPose(); hand = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)).createInstance(); - - progress = getProgress(AnimationTickHolder.getPartialTicks()); - updateRotation(pole, hand, yRot, xRot, zRot); - updatePosition(); } - @Override + @Override + public void init(float pt) { + progress = getProgress(pt); + updateRotation(pole, hand, yRot, xRot, zRot); + updatePosition(); + + super.init(pt); + } + + @Override public void tick(VisualTickContext ctx) { PartialModel handPose = blockEntity.getHandPose(); @@ -77,8 +81,7 @@ public class DeployerVisual extends ShaftVisual implements @Override public void beginFrame(VisualFrameContext ctx) { - - float newProgress = getProgress(AnimationTickHolder.getPartialTicks()); + float newProgress = getProgress(ctx.partialTick()); if (Mth.equal(newProgress, progress)) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index fb65499db4..438f29cb25 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -15,7 +15,6 @@ import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; @@ -39,7 +38,7 @@ public class FlywheelVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { - protected final ArrayList faces; + protected final ArrayList faces = new ArrayList<>(2); - protected PoseStack ms; + protected final PoseStack ms = new PoseStack(); protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity) { super(context, blockEntity); - - faces = new ArrayList<>(2); - - GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); - - Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); - Instancer headModel = getHeadModel(); - - ms = new PoseStack(); - var msr = TransformStack.of(ms); - msr.translate(getVisualPosition()); - - float progress = Mth.lerp(AnimationTickHolder.getPartialTicks(), blockEntity.prevDialState, blockEntity.dialState); - - for (Direction facing : Iterate.directions) { - if (!gaugeBlock.shouldRenderHeadOnFace(level, pos, blockState, facing)) - continue; - - DialFace face = makeFace(facing, dialModel, headModel); - - faces.add(face); - - face.setupTransform(msr, progress); - } } - private DialFace makeFace(Direction face, Instancer dialModel, Instancer headModel) { + @Override + public void init(float pt) { + GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); + + Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); + Instancer headModel = getHeadModel(); + + var msr = TransformStack.of(ms); + msr.translate(getVisualPosition()); + + float progress = Mth.lerp(AnimationTickHolder.getPartialTicks(), blockEntity.prevDialState, blockEntity.dialState); + + for (Direction facing : Iterate.directions) { + if (!gaugeBlock.shouldRenderHeadOnFace(level, pos, blockState, facing)) + continue; + + DialFace face = makeFace(facing, dialModel, headModel); + + faces.add(face); + + face.setupTransform(msr, progress); + } + + super.init(pt); + } + + private DialFace makeFace(Direction face, Instancer dialModel, Instancer headModel) { return new DialFace(face, dialModel.createInstance(), headModel.createInstance()); } @@ -135,7 +137,7 @@ public abstract class GaugeVisual extends ShaftVisual implemen .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) .translate(0, -dialPivot, -dialPivot); - getFirst().setTransform(ms); + getFirst().setTransform(ms).setChanged(); msr.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index cb80a247f8..aafca8a6ab 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -40,7 +40,7 @@ public class GearboxVisual extends KineticBlockEntityVisual if (boxAxis == axis) continue; - RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF)) + RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, direction)) .createInstance(); key.setRotationAxis(axis) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index a5aa94ea95..4a618079b1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -6,7 +6,6 @@ import java.util.function.Consumer; import com.google.common.collect.Lists; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -14,6 +13,7 @@ import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; @@ -66,18 +66,18 @@ public class ArmVisual extends SingleRotatingVisual implements S models = Lists.newArrayList(base, lowerBody, upperBody, claw, clawGrip1, clawGrip2); ceiling = blockState.getValue(ArmBlock.CEILING); - animateArm(false); + animateArm(); } @Override public void beginFrame(VisualFrameContext ctx) { if (blockEntity.phase == ArmBlockEntity.Phase.DANCING && blockEntity.getSpeed() != 0) { - animateArm(true); + animateRave(ctx.partialTick()); firstRender = true; return; } - float pt = AnimationTickHolder.getPartialTicks(); + float pt = ctx.partialTick(); float baseAngleNow = blockEntity.baseAngle.getValue(pt); float lowerArmAngleNow = blockEntity.lowerArmAngle.getValue(pt); @@ -93,36 +93,30 @@ public class ArmVisual extends SingleRotatingVisual implements S this.headAngle = headAngleNow; if (!settled || firstRender) - animateArm(false); + animateArm(); if (firstRender) firstRender = false; } - private void animateArm(boolean rave) { - float baseAngle; - float lowerArmAngle; - float upperArmAngle; - float headAngle; - int color; + private void animateRave(float partialTick) { + var ticks = AnimationTickHolder.getTicks(blockEntity.getLevel()); + float renderTick = ticks + partialTick + (blockEntity.hashCode() % 64); - if (rave) { - float renderTick = - AnimationTickHolder.getRenderTime(blockEntity.getLevel()) + (blockEntity.hashCode() % 64); - baseAngle = (renderTick * 10) % 360; - lowerArmAngle = Mth.lerp((Mth.sin(renderTick / 4) + 1) / 2, -45, 15); - upperArmAngle = Mth.lerp((Mth.sin(renderTick / 8) + 1) / 4, -45, 95); - headAngle = -lowerArmAngle; - color = Color.rainbowColor(AnimationTickHolder.getTicks() * 100) - .getRGB(); - } else { - baseAngle = this.baseAngle; - lowerArmAngle = this.lowerArmAngle - 135; - upperArmAngle = this.upperArmAngle - 90; - headAngle = this.headAngle; - color = 0xFFFFFF; - } + float baseAngle = (renderTick * 10) % 360; + float lowerArmAngle = Mth.lerp((Mth.sin(renderTick / 4) + 1) / 2, -45, 15); + float upperArmAngle = Mth.lerp((Mth.sin(renderTick / 8) + 1) / 4, -45, 95); + float headAngle = -lowerArmAngle; + int color = Color.rainbowColor(ticks * 100) + .getRGB(); + updateAngles(baseAngle, lowerArmAngle, upperArmAngle, headAngle, color); + } + private void animateArm() { + updateAngles(this.baseAngle, this.lowerArmAngle - 135, this.upperArmAngle - 90, this.headAngle, 0xFFFFFF); + } + + private void updateAngles(float baseAngle, float lowerArmAngle, float upperArmAngle, float headAngle, int color) { PoseStack msLocal = new PoseStack(); var msr = TransformStack.of(msLocal); msr.translate(getVisualPosition()); @@ -184,7 +178,7 @@ public class ArmVisual extends SingleRotatingVisual implements S .createInstance(); models.add(claw); updateLight(); - animateArm(false); + animateArm(); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 9f6ddf9612..9108d03f12 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -4,17 +4,16 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogVisual; import com.simibubi.create.foundation.render.AllInstanceTypes; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; @@ -35,12 +34,13 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual mixerPole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_MIXER_POLE)) .createInstance(); + } + @Override + public void init(float pt) { + super.init(pt); - float renderedHeadOffset = getRenderedHeadOffset(); - - transformPole(renderedHeadOffset); - transformHead(renderedHeadOffset); + animate(pt); } @Override @@ -50,14 +50,18 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual @Override public void beginFrame(VisualFrameContext ctx) { - float renderedHeadOffset = getRenderedHeadOffset(); - - transformPole(renderedHeadOffset); - transformHead(renderedHeadOffset); + animate(ctx.partialTick()); } - private void transformHead(float renderedHeadOffset) { - float speed = mixer.getRenderedHeadRotationSpeed(AnimationTickHolder.getPartialTicks()); + private void animate(float pt) { + float renderedHeadOffset = mixer.getRenderedHeadOffset(pt); + + transformPole(renderedHeadOffset); + transformHead(renderedHeadOffset, pt); + } + + private void transformHead(float renderedHeadOffset, float pt) { + float speed = mixer.getRenderedHeadRotationSpeed(pt); mixerHead.setPosition(getVisualPosition()) .nudge(0, -renderedHeadOffset, 0) @@ -71,10 +75,6 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual .setChanged(); } - private float getRenderedHeadOffset() { - return mixer.getRenderedHeadOffset(AnimationTickHolder.getPartialTicks()); - } - @Override public void updateLight() { super.updateLight(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 7c20317859..1b548a5e55 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -5,17 +5,16 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.AnimationTickHolder; public class PressVisual extends ShaftVisual implements SimpleDynamicVisual { @@ -31,26 +30,31 @@ public class PressVisual extends ShaftVisual impleme .rotationDegrees(AngleHelper.horizontalAngle(blockState.getValue(MechanicalPressBlock.HORIZONTAL_FACING))); pressHead.setRotation(q); + } - transformModels(); + @Override + public void init(float pt) { + super.init(pt); + + transformModels(pt); } @Override public void beginFrame(VisualFrameContext ctx) { - transformModels(); + transformModels(ctx.partialTick()); } - private void transformModels() { - float renderedHeadOffset = getRenderedHeadOffset(blockEntity); + private void transformModels(float pt) { + float renderedHeadOffset = getRenderedHeadOffset(pt); pressHead.setPosition(getVisualPosition()) .nudgePosition(0, -renderedHeadOffset, 0) .setChanged(); } - private float getRenderedHeadOffset(MechanicalPressBlockEntity press) { - PressingBehaviour pressingBehaviour = press.getPressingBehaviour(); - return pressingBehaviour.getRenderedHeadOffset(AnimationTickHolder.getPartialTicks()) + private float getRenderedHeadOffset(float pt) { + PressingBehaviour pressingBehaviour = blockEntity.getPressingBehaviour(); + return pressingBehaviour.getRenderedHeadOffset(pt) * pressingBehaviour.mode.headOffset; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index 9f6912535e..1deae7fe42 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -3,13 +3,13 @@ package com.simibubi.create.content.kinetics.steamEngine; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; @@ -39,9 +39,9 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual extends CutoutRotatingVisual { +public class WaterWheelVisual extends SingleRotatingVisual { private static final ModelCache MODEL_CACHE = new ModelCache<>(WaterWheelVisual::createModel); protected final boolean large; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index d47f5bc796..f79996aa78 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -3,15 +3,14 @@ package com.simibubi.create.content.logistics.depot; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; -import com.simibubi.create.foundation.utility.AnimationTickHolder; public class EjectorVisual extends ShaftVisual implements SimpleDynamicVisual { @@ -23,13 +22,18 @@ public class EjectorVisual extends ShaftVisual implements Si super(dispatcher, blockEntity); plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP)).createInstance(); + } - pivotPlate(); + @Override + public void init(float pt) { + pivotPlate(getLidProgress(pt)); + + super.init(pt); } @Override public void beginFrame(VisualFrameContext ctx) { - float lidProgress = getLidProgress(); + float lidProgress = getLidProgress(ctx.partialTick()); if (lidProgress == lastProgress) { return; @@ -51,12 +55,8 @@ public class EjectorVisual extends ShaftVisual implements Si plate.delete(); } - private void pivotPlate() { - pivotPlate(getLidProgress()); - } - - private float getLidProgress() { - return blockEntity.getLidProgress(AnimationTickHolder.getPartialTicks()); + private float getLidProgress(float pt) { + return blockEntity.getLidProgress(pt); } private void pivotPlate(float lidProgress) { diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 006d63d9f1..5361325752 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -5,13 +5,13 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -50,14 +50,15 @@ public class FunnelVisual extends AbstractBlockEntityVisual i FlapInstance key = model.createInstance(); key.setPosition(getVisualPosition()) - .setSegmentOffset(segmentOffset, 0, -blockEntity.getFlapOffset()) - .setBlockLight(blockLight) - .setSkyLight(skyLight) - .setHorizontalAngle(horizontalAngle) - .setFlapness(flapness) - .setFlapScale(-1) - .setPivotVoxelSpace(0, 10, 9.5f) - .setIntensity(intensity); + .setSegmentOffset(segmentOffset, 0, -blockEntity.getFlapOffset()) + .setBlockLight(blockLight) + .setSkyLight(skyLight) + .setHorizontalAngle(horizontalAngle) + .setFlapness(flapness) + .setFlapScale(-1) + .setPivotVoxelSpace(0, 10, 9.5f) + .setIntensity(intensity) + .setChanged(); flaps.add(key); } @@ -67,10 +68,11 @@ public class FunnelVisual extends AbstractBlockEntityVisual i public void beginFrame(VisualFrameContext ctx) { if (flaps == null) return; - float flapness = blockEntity.flap.getValue(AnimationTickHolder.getPartialTicks()); + float flapness = blockEntity.flap.getValue(ctx.partialTick()); for (FlapInstance flap : flaps) { - flap.setFlapness(flapness); + flap.setFlapness(flapness) + .setChanged(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 2718e71c86..c1c63b2876 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -8,12 +8,12 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; @@ -54,14 +54,15 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual iterator = customRenderBEs.iterator(); while (iterator.hasNext()) { BlockEntity blockEntity = iterator.next(); - // TODO: fix contraption rendering -// if (Backend.getBackendType() == BackendType.INSTANCING && Backend.isFlywheelWorld(renderWorld) && InstancedRenderRegistry.shouldSkipRender(blockEntity)) -// continue; + if (BackendManager.isBackendOn() && VisualizationHelper.shouldSkipRender(blockEntity)) + continue; BlockEntityRenderer renderer = Minecraft.getInstance().getBlockEntityRenderDispatcher().getRenderer(blockEntity); if (renderer == null) { diff --git a/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java b/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java new file mode 100644 index 0000000000..923b021455 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java @@ -0,0 +1,126 @@ +package com.simibubi.create.foundation.render; + +import java.util.List; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import com.mojang.blaze3d.vertex.PoseStack; + +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.ChunkRenderTypeSet; +import net.minecraftforge.client.model.data.ModelData; + +public class CutoutPartial extends PartialModel { + public CutoutPartial(ResourceLocation modelLocation) { + super(modelLocation); + } + + @Override + protected void set(BakedModel bakedModel) { + super.set(new Wrapper(bakedModel)); + } + + private record Wrapper(BakedModel inner) implements BakedModel { + private static final ChunkRenderTypeSet CUTOUT = ChunkRenderTypeSet.of(RenderType.cutout()); + + @Override + public @NotNull List getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData data, @Nullable RenderType renderType) { + if (renderType == null) { + return inner.getQuads(state, side, rand, data, null); + } else if (renderType == RenderType.cutout()) { + return inner.getQuads(state, side, rand, data, renderType); + } else { + return List.of(); + } + } + + @Override + public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) { + return CUTOUT; + } + + @Override + public List getQuads(@Nullable BlockState pState, @Nullable Direction pDirection, RandomSource pRandom) { + return inner.getQuads(pState, pDirection, pRandom); + } + + @Override + public boolean useAmbientOcclusion(BlockState state) { + return inner.useAmbientOcclusion(state); + } + + @Override + public boolean useAmbientOcclusion(BlockState state, RenderType renderType) { + return inner.useAmbientOcclusion(state, renderType); + } + + @Override + public BakedModel applyTransform(ItemDisplayContext transformType, PoseStack poseStack, boolean applyLeftHandTransform) { + return inner.applyTransform(transformType, poseStack, applyLeftHandTransform); + } + + @Override + public @NotNull ModelData getModelData(@NotNull BlockAndTintGetter level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ModelData modelData) { + return inner.getModelData(level, pos, state, modelData); + } + + @Override + public TextureAtlasSprite getParticleIcon(@NotNull ModelData data) { + return inner.getParticleIcon(data); + } + + @Override + public List getRenderTypes(ItemStack itemStack, boolean fabulous) { + return inner.getRenderTypes(itemStack, fabulous); + } + + @Override + public List getRenderPasses(ItemStack itemStack, boolean fabulous) { + return inner.getRenderPasses(itemStack, fabulous); + } + + @Override + public boolean useAmbientOcclusion() { + return inner.useAmbientOcclusion(); + } + + @Override + public boolean isGui3d() { + return inner.isGui3d(); + } + + @Override + public boolean usesBlockLight() { + return inner.usesBlockLight(); + } + + @Override + public boolean isCustomRenderer() { + return inner.isCustomRenderer(); + } + + @Override + public TextureAtlasSprite getParticleIcon() { + return inner.getParticleIcon(); + } + + @Override + public ItemOverrides getOverrides() { + return inner.getOverrides(); + } + } +} From 99b886ce15bc50a6add07f0e66941366ba64c06e Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Thu, 21 Mar 2024 12:19:48 -0700 Subject: [PATCH 19/35] Cool and normal - Minecraft does not rotate normals when you rotate a cuboid, which manifests as incorrect diffuse lighting in-game - Set forge's calculate_normals to true for all rotated BB cuboids - Fix some stray UVs on diagonal belts --- .../models/block/analog_lever/handle.json | 3 +- .../models/block/analog_lever/item.json | 3 +- .../models/block/basin/block_directional.json | 5 ++- .../models/block/belt/diagonal_end.json | 14 +++--- .../models/block/belt/diagonal_middle.json | 10 ++++- .../models/block/belt/diagonal_start.json | 10 +++-- .../block/belt_casing/diagonal_end.json | 3 +- .../block/belt_casing/diagonal_middle.json | 4 +- .../block/belt_casing/diagonal_pulley.json | 6 ++- .../block/belt_casing/diagonal_start.json | 3 +- .../block/belt_funnel/block_pulling.json | 4 +- .../block/belt_funnel/block_pushing.json | 4 +- .../models/block/chute/block_diagonal.json | 5 ++- .../block/chute/block_diagonal_encased.json | 5 ++- .../chute/block_diagonal_intersection.json | 5 ++- .../models/block/clipboard/block_empty.json | 3 +- .../assets/create/models/block/cogwheel.json | 4 +- .../models/block/cogwheel_shaftless.json | 4 +- .../block/contraption_controls/block.json | 3 +- .../block/contraption_controls/button.json | 3 +- .../contraption_controls/indicator_0.json | 3 +- .../contraption_controls/indicator_1.json | 3 +- .../contraption_controls/indicator_2.json | 3 +- .../contraption_controls/indicator_3.json | 3 +- .../contraption_controls/indicator_4.json | 3 +- .../contraption_controls/indicator_5.json | 3 +- .../contraption_controls/indicator_6.json | 3 +- .../contraption_controls/indicator_7.json | 3 +- .../block/contraption_controls/item.json | 5 ++- .../models/block/controls/block_virtual.json | 4 +- .../create/models/block/controls/item.json | 4 +- .../models/block/controls/train/lever.json | 3 +- .../block/copper_backtank/block_cogs.json | 6 ++- .../models/block/copper_backtank/item.json | 6 ++- .../models/block/creative_motor/item.json | 3 +- .../models/block/cuckoo_clock/block.json | 4 +- .../models/block/cuckoo_clock/item.json | 4 +- .../create/models/block/diodes/latch_off.json | 3 +- .../create/models/block/diodes/latch_on.json | 3 +- .../models/block/display_board/item.json | 4 +- .../models/block/encased_cogwheel/item.json | 8 +++- .../create/models/block/encased_fan/item.json | 3 +- .../models/block/encased_fan/propeller.json | 3 +- .../block/encased_large_cogwheel/item.json | 9 +++- .../create/models/block/fluid_valve/item.json | 7 ++- .../models/block/fluid_valve/pointer.json | 9 +++- .../models/block/funnel/block_horizontal.json | 4 +- .../models/block/funnel/block_vertical.json | 6 ++- .../funnel/block_vertical_filterless.json | 6 ++- .../models/block/gantry_carriage/item.json | 14 +++++- .../models/block/gantry_carriage/wheels.json | 6 ++- .../models/block/hand_crank/handle.json | 3 +- .../create/models/block/hand_crank/item.json | 3 +- .../create/models/block/hose_pulley/item.json | 5 ++- .../models/block/hose_pulley/rope_coil.json | 5 ++- .../create/models/block/large_cogwheel.json | 9 +++- .../block/large_cogwheel_shaftless.json | 9 +++- .../mechanical_arm/claw_base_goggles.json | 4 +- .../models/block/mechanical_arm/cog.json | 4 +- .../models/block/mechanical_arm/item.json | 5 ++- .../models/block/mechanical_crafter/item.json | 4 +- .../models/block/mechanical_drill/head.json | 11 ++++- .../models/block/mechanical_drill/item.json | 11 ++++- .../block/mechanical_harvester/blade.json | 44 ++++++++++--------- .../block/mechanical_harvester/block.json | 4 +- .../block/mechanical_harvester/item.json | 6 ++- .../models/block/mechanical_mixer/item.json | 7 ++- .../models/block/mechanical_plough.json | 5 ++- .../models/block/mechanical_pump/block.json | 6 ++- .../models/block/mechanical_pump/cog.json | 4 +- .../models/block/mechanical_pump/item.json | 8 +++- .../models/block/mechanical_roller/frame.json | 7 ++- .../create/models/block/millstone/inner.json | 4 +- .../create/models/block/millstone/item.json | 4 +- .../block/netherite_backtank/block_cogs.json | 6 ++- .../models/block/netherite_backtank/item.json | 6 ++- .../assets/create/models/block/placard.json | 5 ++- .../portable_fluid_interface/block_top.json | 10 ++++- .../block/portable_fluid_interface/item.json | 10 ++++- .../portable_storage_interface/block_top.json | 10 ++++- .../portable_storage_interface/item.json | 10 ++++- .../create/models/block/rope_pulley/item.json | 5 ++- .../models/block/rope_pulley/rope_coil.json | 5 ++- .../models/block/schematicannon/block.json | 4 +- .../models/block/schematicannon/item.json | 8 +++- .../models/block/smart_fluid_pipe/block.json | 4 +- .../models/block/smart_fluid_pipe/item.json | 4 +- .../models/block/steam_engine/item.json | 5 ++- .../block/symmetry_effect/crossplane.json | 8 +++- .../block/symmetry_effect/tripleplane.json | 10 ++++- .../track/ascending_template.json.donotload | 20 ++++++++- .../track/cross_d1_xo_template.json.donotload | 20 ++++++++- .../track/cross_d1_zo_template.json.donotload | 20 ++++++++- .../track/cross_d2_xo_template.json.donotload | 20 ++++++++- .../track/cross_d2_zo_template.json.donotload | 20 ++++++++- .../track/cross_diag_template.json.donotload | 39 +++++++++++++++- .../track/diag_2_template.json.donotload | 20 ++++++++- .../block/track/diag_template.json.donotload | 20 ++++++++- .../models/block/weighted_ejector/item.json | 5 ++- .../models/block/weighted_ejector/top.json | 5 ++- .../entity/minecart_coupling/attachment.json | 4 +- .../create/models/entity/train_hat.json | 4 +- .../create/models/item/extendo_grip/cog.json | 4 +- .../create/models/item/extendo_grip/item.json | 4 +- .../handheld_worldshaper/accelerator.json | 4 +- .../item/handheld_worldshaper/item.json | 9 +++- .../create/models/item/potato_cannon/cog.json | 4 +- .../models/item/potato_cannon/item.json | 1 + .../models/item/wand_of_symmetry/bits.json | 22 ++++++---- .../models/item/wand_of_symmetry/item.json | 4 +- .../create/models/item/wrench/gear.json | 4 +- .../create/models/item/wrench/item.json | 4 +- 112 files changed, 643 insertions(+), 145 deletions(-) diff --git a/src/main/resources/assets/create/models/block/analog_lever/handle.json b/src/main/resources/assets/create/models/block/analog_lever/handle.json index 10b6a24b34..52052fb2e3 100644 --- a/src/main/resources/assets/create/models/block/analog_lever/handle.json +++ b/src/main/resources/assets/create/models/block/analog_lever/handle.json @@ -10,6 +10,7 @@ { "from": [7, 0, -2], "to": [9, 2, 8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 1, 8]}, "faces": { "north": {"uv": [7, 6, 9, 8], "rotation": 180, "texture": "#1"}, @@ -28,4 +29,4 @@ "children": [0] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/analog_lever/item.json b/src/main/resources/assets/create/models/block/analog_lever/item.json index 855add131f..59351d67dd 100644 --- a/src/main/resources/assets/create/models/block/analog_lever/item.json +++ b/src/main/resources/assets/create/models/block/analog_lever/item.json @@ -23,6 +23,7 @@ { "from": [7, 0, -2], "to": [9, 2, 8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 1, 8]}, "faces": { "north": {"uv": [7, 6, 9, 8], "rotation": 180, "texture": "#1"}, @@ -78,4 +79,4 @@ "children": [0, 1] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/basin/block_directional.json b/src/main/resources/assets/create/models/block/basin/block_directional.json index 8a17e04c8a..daeb7494ac 100644 --- a/src/main/resources/assets/create/models/block/basin/block_directional.json +++ b/src/main/resources/assets/create/models/block/basin/block_directional.json @@ -58,6 +58,7 @@ { "from": [4, 1, 13], "to": [12, 9, 22], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [1, 9, 17]}, "faces": { "north": {"uv": [1, 1, 9, 9], "texture": "#2"}, @@ -71,6 +72,7 @@ { "from": [5, 2, 22], "to": [11, 8, 21], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [1, 9, 17]}, "faces": { "east": {"uv": [15, 1, 16, 9], "texture": "#2"}, @@ -83,6 +85,7 @@ { "from": [5, 3.64387, 12.73569], "to": [11, 9.64387, 11.73569], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6.64387, 12.23569]}, "faces": { "north": {"uv": [10, 10, 16, 16], "rotation": 180, "texture": "#2"}, @@ -107,4 +110,4 @@ "children": [3, 4, 5, 6] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt/diagonal_end.json b/src/main/resources/assets/create/models/block/belt/diagonal_end.json index 94513f0f5a..389a26d16e 100644 --- a/src/main/resources/assets/create/models/block/belt/diagonal_end.json +++ b/src/main/resources/assets/create/models/block/belt/diagonal_end.json @@ -77,9 +77,10 @@ "name": "Bottom Diagonal", "from": [1, 3, 9.25], "to": [15, 5, 19.328], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { - "east": {"uv": [14, 5, 16, 15], "rotation": 270, "texture": "#0"}, + "east": {"uv": [14, 4, 16, 14], "rotation": 270, "texture": "#0"}, "west": {"uv": [0, 4, 2, 14], "rotation": 90, "texture": "#0"}, "up": {"uv": [1, 4, 15, 14], "rotation": 180, "texture": "#0"}, "down": {"uv": [1, 4, 15, 14], "texture": "#0"} @@ -89,6 +90,7 @@ "name": "Bottom Diagonal", "from": [3, 5, 9.25], "to": [13, 6, 19.328], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [3, 4, 4, 14], "rotation": 270, "texture": "#0"}, @@ -100,6 +102,7 @@ "name": "Top Diagonal", "from": [1, 11, 5.9], "to": [15, 13, 19.328], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [14, 3, 16, 16], "rotation": 90, "texture": "#0"}, @@ -112,12 +115,13 @@ "name": "Top Diagonal", "from": [3, 10, 6.9], "to": [13, 11, 19.328], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { - "east": {"uv": [3, 4, 4, 16], "rotation": 90, "texture": "#0"}, - "west": {"uv": [12, 4, 13, 16], "rotation": 270, "texture": "#0"}, - "down": {"uv": [3, 4, 13, 16], "rotation": 180, "texture": "#0"} + "east": {"uv": [3, 3, 4, 16], "rotation": 90, "texture": "#0"}, + "west": {"uv": [12, 3, 13, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [3, 3, 13, 16], "rotation": 180, "texture": "#0"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt/diagonal_middle.json b/src/main/resources/assets/create/models/block/belt/diagonal_middle.json index 2855a73c13..448538cb51 100644 --- a/src/main/resources/assets/create/models/block/belt/diagonal_middle.json +++ b/src/main/resources/assets/create/models/block/belt/diagonal_middle.json @@ -10,6 +10,7 @@ "name": "Top Diagonal First", "from": [3, 10, -3.305], "to": [13, 11, 8.02], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [3, 4, 4, 16], "rotation": 90, "texture": "#0"}, @@ -22,6 +23,7 @@ "name": "Top Diagonal First", "from": [1, 11, -3.3], "to": [15, 13, 8.02], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [14, 4, 16, 16], "rotation": 90, "texture": "#0"}, @@ -34,6 +36,7 @@ "name": "Top Diagonal", "from": [3, 10, 8], "to": [13, 11, 19.325], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [3, 4, 4, 16], "rotation": 90, "texture": "#0"}, @@ -46,6 +49,7 @@ "name": "Top Diagonal", "from": [1, 11, 8], "to": [15, 13, 19.325], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [14, 4, 16, 16], "rotation": 90, "texture": "#0"}, @@ -58,6 +62,7 @@ "name": "Bottom Diagonal First", "from": [3, -3.305, 5], "to": [13, 8.02, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 0, 15, 10], "rotation": 180, "texture": "#0"}, @@ -70,6 +75,7 @@ "name": "Bottom Diagonal First", "from": [1, -3.3, 3], "to": [15, 8.02, 5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 4, 15, 16], "rotation": 180, "texture": "#0"}, @@ -82,6 +88,7 @@ "name": "Bottom Diagonal", "from": [3, 8, 5], "to": [13, 19.325, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 3, 15, 16], "rotation": 180, "texture": "#0"}, @@ -94,6 +101,7 @@ "name": "Bottom Diagonal", "from": [1, 8, 3], "to": [15, 19.325, 5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 4, 15, 16], "rotation": 180, "texture": "#0"}, @@ -115,4 +123,4 @@ "children": [4, 5, 6, 7] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt/diagonal_start.json b/src/main/resources/assets/create/models/block/belt/diagonal_start.json index b9da310660..3d6303f884 100644 --- a/src/main/resources/assets/create/models/block/belt/diagonal_start.json +++ b/src/main/resources/assets/create/models/block/belt/diagonal_start.json @@ -77,6 +77,7 @@ "name": "Top Diagonal", "from": [1, 11, -3.325], "to": [15, 13, 6.8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [14, 4, 16, 14], "rotation": 90, "texture": "#0"}, @@ -89,6 +90,7 @@ "name": "Top Diagonal", "from": [3, 10, -3.325], "to": [13, 11, 6.8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [3, 4, 4, 14], "rotation": 90, "texture": "#0"}, @@ -100,6 +102,7 @@ "name": "Bottom Diagonal", "from": [1, 3, -3.325], "to": [15, 5, 10.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [14, 3, 16, 16], "rotation": 270, "texture": "#0"}, @@ -112,12 +115,13 @@ "name": "Bottom Diagonal", "from": [3, 5, -3.325], "to": [13, 6, 10.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { - "east": {"uv": [2, 3, 3, 16], "rotation": 270, "texture": "#0"}, - "west": {"uv": [13, 3, 14, 16], "rotation": 90, "texture": "#0"}, + "east": {"uv": [3, 3, 4, 16], "rotation": 270, "texture": "#0"}, + "west": {"uv": [12, 3, 13, 16], "rotation": 90, "texture": "#0"}, "up": {"uv": [3, 3, 13, 16], "rotation": 180, "texture": "#0"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt_casing/diagonal_end.json b/src/main/resources/assets/create/models/block/belt_casing/diagonal_end.json index af619ff1b6..5731bfae7c 100644 --- a/src/main/resources/assets/create/models/block/belt_casing/diagonal_end.json +++ b/src/main/resources/assets/create/models/block/belt_casing/diagonal_end.json @@ -44,6 +44,7 @@ "name": "4", "from": [-0.1, 2, 11.303], "to": [16.1, 11, 19.328], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [39, 8, 8]}, "faces": { "north": {"uv": [12, 2.25, 16, 4.5], "texture": "#7"}, @@ -55,4 +56,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt_casing/diagonal_middle.json b/src/main/resources/assets/create/models/block/belt_casing/diagonal_middle.json index bd8e548a64..2a4acb97f2 100644 --- a/src/main/resources/assets/create/models/block/belt_casing/diagonal_middle.json +++ b/src/main/resources/assets/create/models/block/belt_casing/diagonal_middle.json @@ -10,6 +10,7 @@ "name": "Top Diagonal", "from": [-0.1, 2, -3.325], "to": [16.1, 11, 7.9875], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [8, 2.25, 12, 4.5], "texture": "#4"}, @@ -23,6 +24,7 @@ "name": "Top Diagonal", "from": [-0.1, 7.43588, 10.23912], "to": [16.1, 16.43588, 21.55162], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 13.43588, 2.56412]}, "faces": { "east": {"uv": [11, 5.75, 8.25, 8], "texture": "#4"}, @@ -33,4 +35,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt_casing/diagonal_pulley.json b/src/main/resources/assets/create/models/block/belt_casing/diagonal_pulley.json index 4d11db46a4..bb373137c7 100644 --- a/src/main/resources/assets/create/models/block/belt_casing/diagonal_pulley.json +++ b/src/main/resources/assets/create/models/block/belt_casing/diagonal_pulley.json @@ -11,6 +11,7 @@ "name": "1", "from": [-0.1, 2, -3.325], "to": [16.1, 11, 7.9875], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [8, 2.25, 12, 4.5], "texture": "#10"}, @@ -24,6 +25,7 @@ "name": "2", "from": [-0.1, 7.43588, 10.23912], "to": [16.1, 16.43588, 21.55162], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 13.43588, 2.56412]}, "faces": { "east": {"uv": [9.25, 0, 12, 2.25], "texture": "#10"}, @@ -37,6 +39,7 @@ "name": "3", "from": [-0.1, 11, 3.85], "to": [16.1, 5, 12.15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [4, 3.25, 8, 4.75], "rotation": 180, "texture": "#10"}, @@ -48,6 +51,7 @@ "name": "4", "from": [0.9, 5, 3.85], "to": [15.1, 11, 12.15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [4, 5, 12, 11], "texture": "#8"}, @@ -66,4 +70,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt_casing/diagonal_start.json b/src/main/resources/assets/create/models/block/belt_casing/diagonal_start.json index 3cc34b2347..e0b5c72cdf 100644 --- a/src/main/resources/assets/create/models/block/belt_casing/diagonal_start.json +++ b/src/main/resources/assets/create/models/block/belt_casing/diagonal_start.json @@ -11,6 +11,7 @@ "name": "1", "from": [-0.1, 2, -3.325], "to": [16.1, 11, 4.7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [-22, 8, 8]}, "faces": { "north": {"uv": [8, 2.25, 12, 4.5], "texture": "#7"}, @@ -54,4 +55,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json b/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json index 722f587ae8..c5a9fb6567 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json @@ -61,6 +61,7 @@ "name": "External", "from": [-0.05, -3, 13], "to": [16.05, 16, 19], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [0, -3, 13]}, "faces": { "north": {"uv": [0, 0, 8, 9.5], "texture": "#direction"}, @@ -75,6 +76,7 @@ "name": "Internal", "from": [1.9, -3, 19], "to": [14.1, 10.05, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [0, -3, 13]}, "faces": { "east": {"uv": [13, 16, 16, 9.5], "rotation": 180, "texture": "#base"}, @@ -112,4 +114,4 @@ "children": [4, 5] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json b/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json index e641f07443..4d6cf9122c 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json @@ -61,6 +61,7 @@ "name": "External", "from": [-0.05, -3, 13], "to": [16.05, 16, 19], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [0, -3, 13]}, "faces": { "north": {"uv": [0, 0, 8, 9.5], "texture": "#direction"}, @@ -75,6 +76,7 @@ "name": "Internal", "from": [1.9, -3, 19], "to": [14.1, 10.05, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [0, -3, 13]}, "faces": { "east": {"uv": [13, 6, 16, 12.5], "rotation": 180, "texture": "#base"}, @@ -112,4 +114,4 @@ "children": [4, 5] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal.json b/src/main/resources/assets/create/models/block/chute/block_diagonal.json index 09beeb8fdb..a271958d6e 100644 --- a/src/main/resources/assets/create/models/block/chute/block_diagonal.json +++ b/src/main/resources/assets/create/models/block/chute/block_diagonal.json @@ -10,6 +10,7 @@ { "from": [1.1, -12, 2], "to": [14.9, 0, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 0, 16]}, "faces": { "north": {"uv": [8.5, 9.5, 15.5, 15], "texture": "#3"}, @@ -23,6 +24,7 @@ { "from": [4, -16, -1], "to": [12, -5.35, 0], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { "east": {"uv": [6.5, 9.5, 7, 15], "texture": "#3"}, @@ -33,6 +35,7 @@ { "from": [2.1, -16, -13], "to": [13.9, -5.35, -1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { "north": {"uv": [9, 1.5, 15, 7], "texture": "#3"}, @@ -42,4 +45,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal_encased.json b/src/main/resources/assets/create/models/block/chute/block_diagonal_encased.json index ce1871c01d..6fa2de9113 100644 --- a/src/main/resources/assets/create/models/block/chute/block_diagonal_encased.json +++ b/src/main/resources/assets/create/models/block/chute/block_diagonal_encased.json @@ -23,6 +23,7 @@ { "from": [4, -16, -1], "to": [12, -5.15, 0], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { "east": {"uv": [6.5, 9.5, 7, 15], "texture": "#4"}, @@ -33,6 +34,7 @@ { "from": [1.1, -11.8, 2], "to": [14.9, 0, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 0, 16]}, "faces": { "north": {"uv": [8.5, 9.5, 15.5, 15], "texture": "#4"}, @@ -45,6 +47,7 @@ { "from": [2.1, -16, -13], "to": [13.9, -5.15, -1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { "north": {"uv": [9, 1.5, 15, 7], "texture": "#4"}, @@ -68,4 +71,4 @@ "children": [1, 2, 3] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json b/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json index 692ec8f5a1..ee1048b954 100644 --- a/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json +++ b/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json @@ -34,6 +34,7 @@ { "from": [4, -16, -1], "to": [12, -5.15, 0], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { "east": {"uv": [6.5, 9.5, 7, 15], "texture": "#4"}, @@ -44,6 +45,7 @@ { "from": [1.1, -11.8, 2], "to": [14.9, 0, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 0, 16]}, "faces": { "north": {"uv": [8.5, 9.5, 15.5, 15], "texture": "#4"}, @@ -56,6 +58,7 @@ { "from": [2.1, -16, -13], "to": [13.9, -5.15, -1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { "north": {"uv": [9, 1.5, 15, 7], "texture": "#4"}, @@ -79,4 +82,4 @@ "children": [2, 3, 4] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/clipboard/block_empty.json b/src/main/resources/assets/create/models/block/clipboard/block_empty.json index 3047fd8a9c..47e90de574 100644 --- a/src/main/resources/assets/create/models/block/clipboard/block_empty.json +++ b/src/main/resources/assets/create/models/block/clipboard/block_empty.json @@ -23,6 +23,7 @@ { "from": [6, 1, 14.95], "to": [10, 1, 15.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 1, 15]}, "faces": { "up": {"uv": [12, 0, 16, 1], "rotation": 180, "texture": "#0"}, @@ -30,4 +31,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/cogwheel.json b/src/main/resources/assets/create/models/block/cogwheel.json index 7761b23e90..0f2290d5b6 100644 --- a/src/main/resources/assets/create/models/block/cogwheel.json +++ b/src/main/resources/assets/create/models/block/cogwheel.json @@ -39,6 +39,7 @@ "name": "Gear2", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, @@ -53,6 +54,7 @@ "name": "Gear3", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, @@ -103,4 +105,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/cogwheel_shaftless.json b/src/main/resources/assets/create/models/block/cogwheel_shaftless.json index bc2820563d..793cf46d90 100644 --- a/src/main/resources/assets/create/models/block/cogwheel_shaftless.json +++ b/src/main/resources/assets/create/models/block/cogwheel_shaftless.json @@ -24,6 +24,7 @@ "name": "Gear2", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, @@ -38,6 +39,7 @@ "name": "Gear3", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, @@ -88,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/block.json b/src/main/resources/assets/create/models/block/contraption_controls/block.json index c5a41c6dcc..527f16430a 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/block.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/block.json @@ -61,6 +61,7 @@ { "from": [2, 9.1, 7], "to": [14, 10.1, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [1, 9.5, 7, 13.5], "rotation": 180, "texture": "#4"} @@ -102,4 +103,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/button.json b/src/main/resources/assets/create/models/block/contraption_controls/button.json index 47a0a32baa..f7ce777445 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/button.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/button.json @@ -8,6 +8,7 @@ { "from": [4.95, 8.5, 7.95], "to": [11.05, 11, 14.05], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 7]}, "faces": { "north": {"uv": [5.5, 12.5, 2.5, 13], "rotation": 180, "texture": "#4"}, @@ -53,4 +54,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_0.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_0.json index 0271a29c0f..28730a6fca 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_0.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_0.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [1, 0.5, 7, 3.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_1.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_1.json index 346f112a87..bfe8ccb838 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_1.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_1.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [1, 4.5, 7, 7.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_2.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_2.json index 63abf0138b..84fc65a463 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_2.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_2.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [1, 8.5, 7, 11.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_3.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_3.json index cca5e8b259..7f888aeed3 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_3.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_3.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [1, 12.5, 7, 15.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_4.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_4.json index fbaaf3f6c7..1905a64fc7 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_4.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_4.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [9, 0.5, 15, 3.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_5.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_5.json index 8484489f1c..0efa271d10 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_5.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_5.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [9, 4.5, 15, 7.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_6.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_6.json index 17e456a3c6..ea78f8cf16 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_6.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_6.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [9, 8.5, 15, 11.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/indicator_7.json b/src/main/resources/assets/create/models/block/contraption_controls/indicator_7.json index f0ddc3964f..c0118b1b94 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/indicator_7.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/indicator_7.json @@ -7,10 +7,11 @@ { "from": [2, 9.125, 8], "to": [14, 10.125, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]}, "faces": { "up": {"uv": [9, 12.5, 15, 15.5], "rotation": 180, "texture": "#4"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/contraption_controls/item.json b/src/main/resources/assets/create/models/block/contraption_controls/item.json index aff25c2f0e..fc2bf7a29b 100644 --- a/src/main/resources/assets/create/models/block/contraption_controls/item.json +++ b/src/main/resources/assets/create/models/block/contraption_controls/item.json @@ -60,6 +60,7 @@ { "from": [4.95, 8.5, 7.95], "to": [11.05, 11, 14.05], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 7]}, "faces": { "north": {"uv": [5.5, 12.5, 2.5, 13], "rotation": 180, "texture": "#4"}, @@ -72,6 +73,7 @@ { "from": [2, 9, 7], "to": [14, 10, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 7]}, "faces": { "up": {"uv": [1, 9.5, 7, 13.5], "rotation": 180, "texture": "#4"} @@ -80,6 +82,7 @@ { "from": [2, 9.05, 8], "to": [14, 10.05, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 7]}, "faces": { "up": {"uv": [1, 10, 7, 13], "rotation": 180, "texture": "#4"} @@ -122,4 +125,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/controls/block_virtual.json b/src/main/resources/assets/create/models/block/controls/block_virtual.json index 1977a302f2..373b44c1ba 100644 --- a/src/main/resources/assets/create/models/block/controls/block_virtual.json +++ b/src/main/resources/assets/create/models/block/controls/block_virtual.json @@ -9,6 +9,7 @@ { "from": [4, 9, -1], "to": [6, 11, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 10, 11]}, "faces": { "north": {"uv": [8, 1.5, 9, 2.5], "rotation": 180, "texture": "#1_7"}, @@ -21,6 +22,7 @@ { "from": [10, 9, -1], "to": [12, 11, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 10, 11]}, "faces": { "north": {"uv": [8, 1.5, 9, 2.5], "rotation": 180, "texture": "#1_7"}, @@ -92,4 +94,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/controls/item.json b/src/main/resources/assets/create/models/block/controls/item.json index 5a772fb077..fd92033ed0 100644 --- a/src/main/resources/assets/create/models/block/controls/item.json +++ b/src/main/resources/assets/create/models/block/controls/item.json @@ -9,6 +9,7 @@ { "from": [4, 9, -1], "to": [6, 11, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [0, 10, 11]}, "faces": { "north": {"uv": [8, 1.5, 9, 2.5], "rotation": 180, "texture": "#1_7"}, @@ -21,6 +22,7 @@ { "from": [10, 9, -1], "to": [12, 11, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 10, 11]}, "faces": { "north": {"uv": [8, 1.5, 9, 2.5], "rotation": 180, "texture": "#1_7"}, @@ -128,4 +130,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/controls/train/lever.json b/src/main/resources/assets/create/models/block/controls/train/lever.json index 49cb62d67d..0f02ef3873 100644 --- a/src/main/resources/assets/create/models/block/controls/train/lever.json +++ b/src/main/resources/assets/create/models/block/controls/train/lever.json @@ -7,6 +7,7 @@ { "from": [4, 9, -1], "to": [6, 11, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [0, 10, 11]}, "faces": { "north": {"uv": [8, 1.5, 9, 2.5], "rotation": 180, "texture": "#5"}, @@ -17,4 +18,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/copper_backtank/block_cogs.json b/src/main/resources/assets/create/models/block/copper_backtank/block_cogs.json index e69634e117..42b4b64058 100644 --- a/src/main/resources/assets/create/models/block/copper_backtank/block_cogs.json +++ b/src/main/resources/assets/create/models/block/copper_backtank/block_cogs.json @@ -21,6 +21,7 @@ { "from": [5, 4, 10.5], "to": [7, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, @@ -47,6 +48,7 @@ { "from": [5, 6, 8.5], "to": [7, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, @@ -73,6 +75,7 @@ { "from": [9, 4, 10.5], "to": [11, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, @@ -99,6 +102,7 @@ { "from": [9, 6, 8.5], "to": [11, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, @@ -122,4 +126,4 @@ "children": [] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/copper_backtank/item.json b/src/main/resources/assets/create/models/block/copper_backtank/item.json index ce9a790e2e..8e0be2ab0c 100644 --- a/src/main/resources/assets/create/models/block/copper_backtank/item.json +++ b/src/main/resources/assets/create/models/block/copper_backtank/item.json @@ -22,6 +22,7 @@ { "from": [5, 4, 10.5], "to": [7, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, @@ -48,6 +49,7 @@ { "from": [5, 6, 8.5], "to": [7, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, @@ -74,6 +76,7 @@ { "from": [9, 4, 10.5], "to": [11, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, @@ -100,6 +103,7 @@ { "from": [9, 6, 8.5], "to": [11, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, @@ -202,4 +206,4 @@ "origin": [8, 8, 8], "children": [] }, 13, 14] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/creative_motor/item.json b/src/main/resources/assets/create/models/block/creative_motor/item.json index 566063c41a..8307a9f621 100644 --- a/src/main/resources/assets/create/models/block/creative_motor/item.json +++ b/src/main/resources/assets/create/models/block/creative_motor/item.json @@ -14,6 +14,7 @@ "name": "Axis", "from": [6, 6, 6], "to": [10, 10, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1_1"}, @@ -215,4 +216,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/cuckoo_clock/block.json b/src/main/resources/assets/create/models/block/cuckoo_clock/block.json index e748a2587a..83508a8d4c 100644 --- a/src/main/resources/assets/create/models/block/cuckoo_clock/block.json +++ b/src/main/resources/assets/create/models/block/cuckoo_clock/block.json @@ -69,6 +69,7 @@ "name": "RoofLeft", "from": [13, 10, 1], "to": [15, 20, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [14, 12, 8]}, "faces": { "north": {"uv": [0, 0, 2, 10], "texture": "#1"}, @@ -83,6 +84,7 @@ "name": "RoofRight", "from": [1, 10, 1], "to": [3, 20, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [2, 12, 8]}, "faces": { "north": {"uv": [0, 0, 2, 10], "texture": "#1"}, @@ -156,4 +158,4 @@ "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/cuckoo_clock/item.json b/src/main/resources/assets/create/models/block/cuckoo_clock/item.json index 9ad34983d7..1bf638e38e 100644 --- a/src/main/resources/assets/create/models/block/cuckoo_clock/item.json +++ b/src/main/resources/assets/create/models/block/cuckoo_clock/item.json @@ -125,6 +125,7 @@ "name": "RoofLeft", "from": [1, 10, 1], "to": [15, 20, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 2]}, "faces": { "north": {"uv": [0, 0, 14, 10], "texture": "#1"}, @@ -139,6 +140,7 @@ "name": "RoofRight", "from": [1, 10, 13], "to": [15, 20, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 12, 14]}, "faces": { "north": {"uv": [0, 0, 14, 10], "texture": "#1"}, @@ -244,4 +246,4 @@ "children": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/diodes/latch_off.json b/src/main/resources/assets/create/models/block/diodes/latch_off.json index 4e8ce60be3..f064a4c329 100644 --- a/src/main/resources/assets/create/models/block/diodes/latch_off.json +++ b/src/main/resources/assets/create/models/block/diodes/latch_off.json @@ -80,6 +80,7 @@ { "from": [11.24264, 4.75736, 7], "to": [13.24264, 14.75736, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 9, 8]}, "faces": { "north": {"uv": [7, 6, 9, 16], "texture": "#lever"}, @@ -102,4 +103,4 @@ "scale":[ 0.5, 0.5, 0.5 ] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/diodes/latch_on.json b/src/main/resources/assets/create/models/block/diodes/latch_on.json index 6d4c4797f5..8d0da2de90 100644 --- a/src/main/resources/assets/create/models/block/diodes/latch_on.json +++ b/src/main/resources/assets/create/models/block/diodes/latch_on.json @@ -82,6 +82,7 @@ { "from": [7, 3, 7], "to": [9, 13, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 3, 8]}, "faces": { "north": {"uv": [7, 6, 9, 16], "texture": "#lever"}, @@ -104,4 +105,4 @@ "scale":[ 0.5, 0.5, 0.5 ] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/display_board/item.json b/src/main/resources/assets/create/models/block/display_board/item.json index c457a70ae8..064adffacf 100644 --- a/src/main/resources/assets/create/models/block/display_board/item.json +++ b/src/main/resources/assets/create/models/block/display_board/item.json @@ -29,6 +29,7 @@ "name": "Gear2", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 6, 16, 7.5], "rotation": 180, "texture": "#1_2"}, @@ -43,6 +44,7 @@ "name": "Gear3", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 6, 16, 7.5], "rotation": 180, "texture": "#1_2"}, @@ -156,4 +158,4 @@ "children": [6, 7, 8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/encased_cogwheel/item.json b/src/main/resources/assets/create/models/block/encased_cogwheel/item.json index 300a024051..dd46f9f01a 100644 --- a/src/main/resources/assets/create/models/block/encased_cogwheel/item.json +++ b/src/main/resources/assets/create/models/block/encased_cogwheel/item.json @@ -57,6 +57,7 @@ "name": "Gear", "from": [-1, 6.025, 6.5], "to": [17, 9.975, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 10], "texture": "#1_2"}, @@ -71,6 +72,7 @@ "name": "Gear2", "from": [-1, 6.025, 6.5], "to": [17, 9.975, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 10], "texture": "#1_2"}, @@ -85,6 +87,7 @@ "name": "Gear3", "from": [6.5, 6.025, -1], "to": [9.5, 9.975, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [5, 8, 6.5, 10], "texture": "#1_2"}, @@ -99,6 +102,7 @@ "name": "Gear4", "from": [6.5, 6.025, -1], "to": [9.5, 9.975, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [5, 8, 6.5, 10], "texture": "#1_2"}, @@ -113,6 +117,7 @@ "name": "GearCaseInner", "from": [2, 6.5, 2], "to": [14, 9.5, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 6, 6, 7.5], "texture": "#1_2"}, @@ -127,6 +132,7 @@ "name": "GearCaseOuter", "from": [4, 6, 4], "to": [12, 10, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, @@ -150,4 +156,4 @@ "children": [4, 5, 6, 7, 8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/encased_fan/item.json b/src/main/resources/assets/create/models/block/encased_fan/item.json index fe80c3a0eb..a98368f263 100644 --- a/src/main/resources/assets/create/models/block/encased_fan/item.json +++ b/src/main/resources/assets/create/models/block/encased_fan/item.json @@ -94,6 +94,7 @@ "name": "Fan", "from": [1, 1, 4], "to": [15, 15, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 1, 15, 15], "texture": "#fan_blades"}, @@ -108,4 +109,4 @@ "children": [6, 7] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/encased_fan/propeller.json b/src/main/resources/assets/create/models/block/encased_fan/propeller.json index b50ef7caf4..c149d9ab8f 100644 --- a/src/main/resources/assets/create/models/block/encased_fan/propeller.json +++ b/src/main/resources/assets/create/models/block/encased_fan/propeller.json @@ -23,10 +23,11 @@ "name": "Fan", "from": [1, 1, 4], "to": [15, 15, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 1, 15, 15], "texture": "#fan_blades"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/encased_large_cogwheel/item.json b/src/main/resources/assets/create/models/block/encased_large_cogwheel/item.json index 21cc17a7e4..0468a25e04 100644 --- a/src/main/resources/assets/create/models/block/encased_large_cogwheel/item.json +++ b/src/main/resources/assets/create/models/block/encased_large_cogwheel/item.json @@ -37,6 +37,7 @@ "name": "GearCaseInnerRotated", "from": [-2, 6.525, -2], "to": [18, 9.475, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 10, 10, 11.5], "texture": "#4"}, @@ -51,6 +52,7 @@ "name": "Gear2", "from": [-7, 6.025, 6.5], "to": [23, 9.975, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 15], "texture": "#4"}, @@ -65,6 +67,7 @@ "name": "Gear3", "from": [-7, 6.025, 6.5], "to": [23, 9.975, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 15], "texture": "#4"}, @@ -79,6 +82,7 @@ "name": "Gear4", "from": [6.5, 6.025, -7], "to": [9.5, 9.975, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9, 11.5, 11], "texture": "#4"}, @@ -171,6 +175,7 @@ "name": "Gear", "from": [6.5, 6.025, -7], "to": [9.5, 9.975, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9, 11.5, 11], "texture": "#4"}, @@ -185,6 +190,7 @@ "name": "Gear5", "from": [-7, 6.025, 6.5], "to": [23, 9.975, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 15], "texture": "#4"}, @@ -199,6 +205,7 @@ "name": "Gear6", "from": [6.5, 6.025, -7], "to": [9.5, 9.975, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9, 11.5, 11], "texture": "#4"}, @@ -246,4 +253,4 @@ "children": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/fluid_valve/item.json b/src/main/resources/assets/create/models/block/fluid_valve/item.json index b09bd0b776..ad326cb73c 100644 --- a/src/main/resources/assets/create/models/block/fluid_valve/item.json +++ b/src/main/resources/assets/create/models/block/fluid_valve/item.json @@ -39,6 +39,7 @@ { "from": [7, 14.1, 5], "to": [9, 15.1, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [14, 0, 12, 1], "rotation": 180, "texture": "#4"}, @@ -52,6 +53,7 @@ { "from": [9, 14.1, 5], "to": [11, 15.1, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [16, 0, 14, 1], "texture": "#4"}, @@ -65,6 +67,7 @@ { "from": [5, 14.1, 7], "to": [7, 15.1, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [16, 0, 14, 1], "rotation": 180, "texture": "#4"}, @@ -78,6 +81,7 @@ { "from": [7, 14.1, 9], "to": [9, 15.1, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [14, 2, 12, 3], "rotation": 180, "texture": "#4"}, @@ -92,6 +96,7 @@ "name": "Center", "from": [7, 14, 7], "to": [9, 16, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, "faces": { "north": {"uv": [12.5, 0, 12, 1], "rotation": 90, "texture": "#2"}, @@ -187,4 +192,4 @@ 7, 8 ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/fluid_valve/pointer.json b/src/main/resources/assets/create/models/block/fluid_valve/pointer.json index 2e9eed35b7..b29464403d 100644 --- a/src/main/resources/assets/create/models/block/fluid_valve/pointer.json +++ b/src/main/resources/assets/create/models/block/fluid_valve/pointer.json @@ -9,6 +9,7 @@ { "from": [7, 14.1, 5], "to": [9, 15.1, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [14, 0, 12, 1], "rotation": 180, "texture": "#4"}, @@ -22,6 +23,7 @@ { "from": [9, 14.1, 5], "to": [11, 15.1, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [16, 0, 14, 1], "texture": "#4"}, @@ -34,6 +36,7 @@ { "from": [7, 14.1, 9], "to": [11, 15.1, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [16, 0, 14, 1], "texture": "#4"}, @@ -46,6 +49,7 @@ { "from": [9, 14.1, 7], "to": [11, 15.1, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [12, 0, 13, 2], "rotation": 270, "texture": "#4"}, @@ -59,6 +63,7 @@ { "from": [9, 14.1, 5], "to": [11, 15.1, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [16, 0, 14, 1], "texture": "#4"}, @@ -71,6 +76,7 @@ { "from": [7, 14.1, 5], "to": [9, 15.1, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [14, 0, 12, 1], "rotation": 180, "texture": "#4"}, @@ -85,6 +91,7 @@ "name": "Center", "from": [7, 14, 7], "to": [9, 16, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, "faces": { "north": {"uv": [12.5, 0, 12, 1], "rotation": 90, "texture": "#2"}, @@ -148,4 +155,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/funnel/block_horizontal.json b/src/main/resources/assets/create/models/block/funnel/block_horizontal.json index 42a525dc09..ed1820117a 100644 --- a/src/main/resources/assets/create/models/block/funnel/block_horizontal.json +++ b/src/main/resources/assets/create/models/block/funnel/block_horizontal.json @@ -61,6 +61,7 @@ { "from": [-0.05, 0, 12], "to": [16.05, 16, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 0, 12]}, "faces": { "north": {"uv": [0, 0, 8, 8], "texture": "#direction"}, @@ -74,6 +75,7 @@ { "from": [1.9, 0, 18], "to": [14.1, 10.05, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 0, 12]}, "faces": { "east": {"uv": [13, 6, 16, 11], "rotation": 180, "texture": "#base"}, @@ -112,4 +114,4 @@ 4, 5 ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/funnel/block_vertical.json b/src/main/resources/assets/create/models/block/funnel/block_vertical.json index bee49ffc84..6bdfc25f09 100644 --- a/src/main/resources/assets/create/models/block/funnel/block_vertical.json +++ b/src/main/resources/assets/create/models/block/funnel/block_vertical.json @@ -25,6 +25,7 @@ { "from": [0.95, 5, 2], "to": [1.95, 10, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [1.95, 10, 8]}, "faces": { "east": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -33,6 +34,7 @@ { "from": [14.05, 5, 2], "to": [15.05, 10, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "z", "origin": [14.05, 10, 8]}, "faces": { "west": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -41,6 +43,7 @@ { "from": [2, 5, 14.05], "to": [14, 10, 15.05], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 14.05]}, "faces": { "north": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -49,6 +52,7 @@ { "from": [2, 5, 0.95], "to": [14, 10, 1.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 1.95]}, "faces": { "south": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -146,4 +150,4 @@ "children": [8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/funnel/block_vertical_filterless.json b/src/main/resources/assets/create/models/block/funnel/block_vertical_filterless.json index 7a75928258..b5b3f728ef 100644 --- a/src/main/resources/assets/create/models/block/funnel/block_vertical_filterless.json +++ b/src/main/resources/assets/create/models/block/funnel/block_vertical_filterless.json @@ -25,6 +25,7 @@ { "from": [0.95, 5, 2], "to": [1.95, 10, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [1.95, 10, 8]}, "faces": { "east": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -33,6 +34,7 @@ { "from": [14.05, 5, 2], "to": [15.05, 10, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "z", "origin": [14.05, 10, 8]}, "faces": { "west": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -41,6 +43,7 @@ { "from": [2, 5, 14.05], "to": [14, 10, 15.05], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 14.05]}, "faces": { "north": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -49,6 +52,7 @@ { "from": [2, 5, 0.95], "to": [14, 10, 1.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 1.95]}, "faces": { "south": {"uv": [12, 0, 14.5, 6], "rotation": 90, "texture": "#base"} @@ -116,4 +120,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/gantry_carriage/item.json b/src/main/resources/assets/create/models/block/gantry_carriage/item.json index e99bd3f23b..23eebf1b55 100644 --- a/src/main/resources/assets/create/models/block/gantry_carriage/item.json +++ b/src/main/resources/assets/create/models/block/gantry_carriage/item.json @@ -18,6 +18,7 @@ "name": "Gear", "from": [2.5, -10, 6.5], "to": [5.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -32,6 +33,7 @@ "name": "Gear2", "from": [2.5, -10, 6.5], "to": [5.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -46,6 +48,7 @@ "name": "Gear3", "from": [2.5, -2.5, -1], "to": [5.5, 0.5, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [5, 8, 6.5, 9.5], "rotation": 90, "texture": "#3"}, @@ -60,6 +63,7 @@ "name": "Gear4", "from": [2.5, -2.5, -1], "to": [5.5, 0.5, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [5, 8, 6.5, 9.5], "rotation": 90, "texture": "#3"}, @@ -74,6 +78,7 @@ "name": "GearCaseInner", "from": [2.55, -7, 2], "to": [5.45, 5, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [0, 6, 6, 7.5], "rotation": 90, "texture": "#3"}, @@ -88,6 +93,7 @@ "name": "GearCaseOuter", "from": [2, -5, 4], "to": [6, 3, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [0, 4, 4, 6], "rotation": 90, "texture": "#3"}, @@ -102,6 +108,7 @@ "name": "Gear", "from": [10.5, -10, 6.5], "to": [13.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -116,6 +123,7 @@ "name": "Gear3", "from": [10.5, -10, 6.5], "to": [13.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -130,6 +138,7 @@ "name": "Gear4", "from": [10.5, -2.5, -1], "to": [13.5, 0.5, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [5, 8, 6.5, 9.5], "rotation": 90, "texture": "#3"}, @@ -144,6 +153,7 @@ "name": "Gear5", "from": [10.5, -2.5, -1], "to": [13.5, 0.5, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [5, 8, 6.5, 9.5], "rotation": 90, "texture": "#3"}, @@ -158,6 +168,7 @@ "name": "GearCaseInner", "from": [10.55, -7, 2], "to": [13.45, 5, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [0, 6, 6, 7.5], "rotation": 90, "texture": "#3"}, @@ -172,6 +183,7 @@ "name": "GearCaseOuter", "from": [10, -5, 4], "to": [14, 3, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [0, 4, 4, 6], "rotation": 90, "texture": "#3"}, @@ -364,4 +376,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/gantry_carriage/wheels.json b/src/main/resources/assets/create/models/block/gantry_carriage/wheels.json index 957523ec15..c710f2014b 100644 --- a/src/main/resources/assets/create/models/block/gantry_carriage/wheels.json +++ b/src/main/resources/assets/create/models/block/gantry_carriage/wheels.json @@ -25,6 +25,7 @@ "name": "Gear2", "from": [2.5, -10, 6.5], "to": [5.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [4, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -39,6 +40,7 @@ "name": "Gear3", "from": [2.5, -10, 6.5], "to": [5.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [4, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -109,6 +111,7 @@ "name": "Gear3", "from": [10.5, -10, 6.5], "to": [13.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -123,6 +126,7 @@ "name": "Gear4", "from": [10.5, -10, 6.5], "to": [13.5, 8, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [12, -1, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "rotation": 90, "texture": "#3"}, @@ -224,4 +228,4 @@ "children": [6, 7, 8, 9, 10, 11] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/hand_crank/handle.json b/src/main/resources/assets/create/models/block/hand_crank/handle.json index df816830a9..a52ba2ca19 100644 --- a/src/main/resources/assets/create/models/block/hand_crank/handle.json +++ b/src/main/resources/assets/create/models/block/hand_crank/handle.json @@ -52,6 +52,7 @@ "name": "Grip", "from": [-0.5, 6.5, 3], "to": [2.5, 9.5, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [1, 8, 9]}, "faces": { "north": {"uv": [6, 11, 9, 14], "rotation": 90, "texture": "#0"}, @@ -69,4 +70,4 @@ "origin": [8, 8, 8], "children": [0] }, 1, 2, 3] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/hand_crank/item.json b/src/main/resources/assets/create/models/block/hand_crank/item.json index a9ee1da235..513b219dfd 100644 --- a/src/main/resources/assets/create/models/block/hand_crank/item.json +++ b/src/main/resources/assets/create/models/block/hand_crank/item.json @@ -65,6 +65,7 @@ "name": "Grip", "from": [-0.5, 6.5, 3], "to": [2.5, 9.5, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [1, 8, 9]}, "faces": { "north": {"uv": [6, 11, 9, 14], "rotation": 90, "texture": "#0"}, @@ -119,4 +120,4 @@ "origin": [8, 8, 8], "children": [0] }, 1, 2, 3, 4] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/hose_pulley/item.json b/src/main/resources/assets/create/models/block/hose_pulley/item.json index 428de4c1f2..cddc499779 100644 --- a/src/main/resources/assets/create/models/block/hose_pulley/item.json +++ b/src/main/resources/assets/create/models/block/hose_pulley/item.json @@ -193,6 +193,7 @@ "name": "coil", "from": [4, 4, 2], "to": [12, 12, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [2, 1, 14, 9], "rotation": 180, "texture": "#5"}, @@ -205,6 +206,7 @@ "name": "coil", "from": [3.5, 3.5, 9], "to": [12.5, 12.5, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, @@ -219,6 +221,7 @@ "name": "coil", "from": [3.5, 3.5, 3], "to": [12.5, 12.5, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, @@ -361,4 +364,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json index f4d01993a5..c8c41e1263 100644 --- a/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json @@ -9,6 +9,7 @@ "name": "coil", "from": [4, 4, 2], "to": [12, 12, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "east": {"uv": [2, 1, 14, 9], "texture": "#5"}, @@ -21,6 +22,7 @@ "name": "coil", "from": [3.5, 3.5, 3], "to": [12.5, 12.5, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, @@ -35,6 +37,7 @@ "name": "coil", "from": [3.5, 3.5, 9], "to": [12.5, 12.5, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -4]}, "faces": { "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, @@ -46,4 +49,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/large_cogwheel.json b/src/main/resources/assets/create/models/block/large_cogwheel.json index 5d6ed2b5bc..5742c517e2 100644 --- a/src/main/resources/assets/create/models/block/large_cogwheel.json +++ b/src/main/resources/assets/create/models/block/large_cogwheel.json @@ -13,6 +13,7 @@ "name": "GearCaseInnerRotated", "from": [-2, 6.625, -2], "to": [18, 9.375, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 10, 10, 11.5], "texture": "#4"}, @@ -40,6 +41,7 @@ "name": "Gear2", "from": [-7, 6.525, 6.5], "to": [23, 9.475, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 14.5], "texture": "#4"}, @@ -54,6 +56,7 @@ "name": "Gear3", "from": [-7, 6.525, 6.5], "to": [23, 9.475, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 14.5], "texture": "#4"}, @@ -68,6 +71,7 @@ "name": "Gear4", "from": [6.5, 6.525, -7], "to": [9.5, 9.475, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, @@ -160,6 +164,7 @@ "name": "Gear", "from": [6.5, 6.525, -7], "to": [9.5, 9.475, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, @@ -174,6 +179,7 @@ "name": "Gear5", "from": [-7, 6.525, 6.5], "to": [23, 9.475, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 14.5], "texture": "#4"}, @@ -188,6 +194,7 @@ "name": "Gear6", "from": [6.5, 6.525, -7], "to": [9.5, 9.475, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, @@ -225,4 +232,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/large_cogwheel_shaftless.json b/src/main/resources/assets/create/models/block/large_cogwheel_shaftless.json index 05b5d70eed..0d3ab77c16 100644 --- a/src/main/resources/assets/create/models/block/large_cogwheel_shaftless.json +++ b/src/main/resources/assets/create/models/block/large_cogwheel_shaftless.json @@ -11,6 +11,7 @@ "name": "GearCaseInnerRotated", "from": [-2, 6.625, -2], "to": [18, 9.375, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 10, 10, 11.5], "texture": "#4"}, @@ -25,6 +26,7 @@ "name": "Gear2", "from": [-7, 6.525, 6.5], "to": [23, 9.475, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 14.5], "texture": "#4"}, @@ -39,6 +41,7 @@ "name": "Gear3", "from": [-7, 6.525, 6.5], "to": [23, 9.475, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 14.5], "texture": "#4"}, @@ -53,6 +56,7 @@ "name": "Gear4", "from": [6.5, 6.525, -7], "to": [9.5, 9.475, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, @@ -145,6 +149,7 @@ "name": "Gear", "from": [6.5, 6.525, -7], "to": [9.5, 9.475, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, @@ -159,6 +164,7 @@ "name": "Gear5", "from": [-7, 6.525, 6.5], "to": [23, 9.475, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 13, 15, 14.5], "texture": "#4"}, @@ -173,6 +179,7 @@ "name": "Gear6", "from": [6.5, 6.525, -7], "to": [9.5, 9.475, 23], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, @@ -210,4 +217,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/claw_base_goggles.json b/src/main/resources/assets/create/models/block/mechanical_arm/claw_base_goggles.json index 8bd6fd97b8..e610d582ee 100644 --- a/src/main/resources/assets/create/models/block/mechanical_arm/claw_base_goggles.json +++ b/src/main/resources/assets/create/models/block/mechanical_arm/claw_base_goggles.json @@ -50,6 +50,7 @@ { "from": [-4, 0.5, -4.25], "to": [4, 4.5, 3.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 3, 1]}, "faces": { "north": {"uv": [8, 2, 16, 6], "texture": "#1"}, @@ -61,6 +62,7 @@ { "from": [-4, 0.5, 3.75], "to": [4, 4.5, -4.25], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 3, 1]}, "faces": { "north": {"uv": [8, 10, 16, 14], "texture": "#1"}, @@ -115,4 +117,4 @@ "children": [3, 4] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/cog.json b/src/main/resources/assets/create/models/block/mechanical_arm/cog.json index d10a6472d2..51a22920e8 100644 --- a/src/main/resources/assets/create/models/block/mechanical_arm/cog.json +++ b/src/main/resources/assets/create/models/block/mechanical_arm/cog.json @@ -24,6 +24,7 @@ "name": "Gear6", "from": [6.5, 6, -1], "to": [9.5, 10, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [13, 5.5, 15, 7], "rotation": 90, "texture": "#5"}, @@ -52,6 +53,7 @@ "name": "Gear8", "from": [-1, 6, 6.5], "to": [17, 10, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [13, 7, 15, 16], "rotation": 90, "texture": "#5"}, @@ -126,4 +128,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/item.json b/src/main/resources/assets/create/models/block/mechanical_arm/item.json index 55ee9f8c36..1c3ee0c7f8 100644 --- a/src/main/resources/assets/create/models/block/mechanical_arm/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_arm/item.json @@ -28,6 +28,7 @@ "name": "Gear6", "from": [6.5, -10, -1], "to": [9.5, -6, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, -8, 8]}, "faces": { "north": {"uv": [13, 5.5, 15, 7], "rotation": 90, "texture": "#4"}, @@ -56,6 +57,7 @@ "name": "Gear8", "from": [-1, -10, 6.5], "to": [17, -6, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, -8, 8]}, "faces": { "north": {"uv": [13, 7, 15, 16], "rotation": 90, "texture": "#4"}, @@ -123,6 +125,7 @@ "name": "Arm 1", "from": [6.5, -3, 5.5], "to": [9.5, 13, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, -2, 8]}, "faces": { "north": {"uv": [0, 0, 1.5, 8], "texture": "#5"}, @@ -310,4 +313,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json index f99b84d7be..56cd5b0b6c 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json @@ -159,6 +159,7 @@ "name": "Gear2", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, @@ -173,6 +174,7 @@ "name": "Gear3", "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, @@ -248,4 +250,4 @@ "children": [12, 13, 14, 15, 16, 17] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_drill/head.json b/src/main/resources/assets/create/models/block/mechanical_drill/head.json index 23d80c50e4..5bd8b0a03e 100644 --- a/src/main/resources/assets/create/models/block/mechanical_drill/head.json +++ b/src/main/resources/assets/create/models/block/mechanical_drill/head.json @@ -25,6 +25,7 @@ "name": "Core", "from": [5, 5, 9], "to": [11, 11, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "east": {"uv": [1, 1, 7, 4], "rotation": 270, "texture": "#10"}, @@ -38,6 +39,7 @@ "name": "Bottom", "from": [6, 3, 9], "to": [10, 5, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 4, 2], "texture": "#10"}, @@ -52,6 +54,7 @@ "name": "Bottom", "from": [11, 6, 9], "to": [13, 10, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 4, 2], "rotation": 90, "texture": "#10"}, @@ -66,6 +69,7 @@ "name": "Bottom", "from": [6, 11, 9], "to": [10, 13, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 4, 2], "rotation": 180, "texture": "#10"}, @@ -80,6 +84,7 @@ "name": "Bottom", "from": [3, 6, 9], "to": [5, 10, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 4, 2], "rotation": 270, "texture": "#10"}, @@ -94,6 +99,7 @@ "name": "Bit1", "from": [5.5, 5.5, 12], "to": [10.5, 10.5, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 5, 5], "texture": "#2"}, @@ -108,6 +114,7 @@ "name": "Bit2", "from": [6, 6, 14], "to": [10, 10, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 7]}, "faces": { "north": {"uv": [0, 0, 4, 4], "texture": "#2"}, @@ -122,6 +129,7 @@ "name": "Bit3", "from": [6.5, 6.5, 16], "to": [9.5, 9.5, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 7]}, "faces": { "north": {"uv": [0, 0, 3, 3], "texture": "#2"}, @@ -136,6 +144,7 @@ "name": "Bit4", "from": [7, 7, 18], "to": [9, 9, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 7]}, "faces": { "north": {"uv": [0, 0, 2, 2], "texture": "#2"}, @@ -155,4 +164,4 @@ "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_drill/item.json b/src/main/resources/assets/create/models/block/mechanical_drill/item.json index 156dfc7e5c..628b8f9973 100644 --- a/src/main/resources/assets/create/models/block/mechanical_drill/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_drill/item.json @@ -28,6 +28,7 @@ "name": "Core", "from": [5, 5, 9], "to": [11, 11, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 6, 6], "texture": "#7"}, @@ -42,6 +43,7 @@ "name": "Top", "from": [6, 11, 9], "to": [10, 13, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 4, 2], "texture": "#10"}, @@ -56,6 +58,7 @@ "name": "Bottom", "from": [6, 3, 9], "to": [10, 5, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 4, 2], "texture": "#10"}, @@ -70,6 +73,7 @@ "name": "Left", "from": [3, 6, 9], "to": [5, 10, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 4], "texture": "#10"}, @@ -84,6 +88,7 @@ "name": "Right", "from": [11, 6, 9], "to": [13, 10, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 4], "texture": "#10"}, @@ -98,6 +103,7 @@ "name": "Bit1", "from": [5.5, 5.5, 12], "to": [10.5, 10.5, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 5, 5], "texture": "#2"}, @@ -112,6 +118,7 @@ "name": "Bit2", "from": [6, 6, 14], "to": [10, 10, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 7]}, "faces": { "north": {"uv": [0, 0, 4, 4], "texture": "#2"}, @@ -126,6 +133,7 @@ "name": "Bit3", "from": [6.5, 6.5, 16], "to": [9.5, 9.5, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 7]}, "faces": { "north": {"uv": [0, 0, 3, 3], "texture": "#2"}, @@ -140,6 +148,7 @@ "name": "Bit4", "from": [7, 7, 18], "to": [9, 9, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 7]}, "faces": { "north": {"uv": [0, 0, 2, 2], "texture": "#2"}, @@ -229,4 +238,4 @@ "children": [10, 11, 12, 13, 14] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json b/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json index a15ba52c4e..c3f0f8ab66 100644 --- a/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json +++ b/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json @@ -8,8 +8,9 @@ "elements": [ { "name": "Wheel", - "from": [ 1, 0, 3 ], - "to": [ 1.0625, 12, 15 ], + "from": [ 1, 0, 3 ], + "to": [ 1.0625, 12, 15 ], + "forge_data": {"calculate_normals": true}, "rotation": { "origin": [ 8, 6, 9 ], "axis": "x", "angle": -22.5 }, "faces": { "east": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] }, @@ -18,8 +19,8 @@ }, { "name": "Trim", - "from": [ 0, 0, 11 ], - "to": [ 16, 2, 12 ], + "from": [ 0, 0, 11 ], + "to": [ 16, 2, 12 ], "faces": { "north": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] }, "east": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] }, @@ -31,8 +32,8 @@ }, { "name": "Trim", - "from": [ 0, 10, 6 ], - "to": [ 16, 12, 7 ], + "from": [ 0, 10, 6 ], + "to": [ 16, 12, 7 ], "faces": { "north": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] }, "east": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] }, @@ -44,8 +45,8 @@ }, { "name": "Trim", - "from": [ 0, 8, 13 ], - "to": [ 16, 9, 15 ], + "from": [ 0, 8, 13 ], + "to": [ 16, 9, 15 ], "faces": { "north": { "texture": "#anvil", "uv": [ 0, 9, 16, 10 ] }, "east": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] }, @@ -57,8 +58,8 @@ }, { "name": "Trim", - "from": [ 0, 3, 3 ], - "to": [ 16, 4, 5 ], + "from": [ 0, 3, 3 ], + "to": [ 16, 4, 5 ], "faces": { "north": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] }, "east": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] }, @@ -70,8 +71,8 @@ }, { "name": "Blade", - "from": [ 0, 6, 15 ], - "to": [ 16, 8, 15.0625 ], + "from": [ 0, 6, 15 ], + "to": [ 16, 8, 15.0625 ], "faces": { "north": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 }, "south": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ], "rotation": 180 } @@ -79,8 +80,9 @@ }, { "name": "Wheel", - "from": [ 15, 0, 3 ], - "to": [ 15.0625, 12, 15 ], + "from": [ 15, 0, 3 ], + "to": [ 15.0625, 12, 15 ], + "forge_data": {"calculate_normals": true}, "rotation": { "origin": [ 8, 6, 9 ], "axis": "x", "angle": -22.5 }, "faces": { "east": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] }, @@ -89,8 +91,8 @@ }, { "name": "Blade", - "from": [ 0, 4, 3 ], - "to": [ 16, 6, 3.0625 ], + "from": [ 0, 4, 3 ], + "to": [ 16, 6, 3.0625 ], "faces": { "north": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] }, "south": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ] } @@ -98,8 +100,8 @@ }, { "name": "Blade", - "from": [ 0, 12, 7 ], - "to": [ 16, 12.0625, 9 ], + "from": [ 0, 12, 7 ], + "to": [ 16, 12.0625, 9 ], "faces": { "up": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 }, "down": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ] } @@ -107,12 +109,12 @@ }, { "name": "Blade", - "from": [ 0, 0.0625, 9 ], - "to": [ 16, 0.125, 11 ], + "from": [ 0, 0.0625, 9 ], + "to": [ 16, 0.125, 11 ], "faces": { "up": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] }, "down": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ], "rotation": 180 } } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_harvester/block.json b/src/main/resources/assets/create/models/block/mechanical_harvester/block.json index 46c82eece0..c9b0d02f4f 100644 --- a/src/main/resources/assets/create/models/block/mechanical_harvester/block.json +++ b/src/main/resources/assets/create/models/block/mechanical_harvester/block.json @@ -22,6 +22,7 @@ "name": "Attachment", "from": [14, 7, 5], "to": [15.9, 10, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [16, 10, 13]}, "faces": { "north": {"uv": [0.1, 8, 2, 11], "texture": "#andesite_casing_short"}, @@ -36,6 +37,7 @@ "name": "Attachment", "from": [0.1, 7, 5], "to": [2, 10, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [16, 10, 13]}, "faces": { "north": {"uv": [14, 8, 15.9, 11], "texture": "#andesite_casing_short"}, @@ -47,4 +49,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_harvester/item.json b/src/main/resources/assets/create/models/block/mechanical_harvester/item.json index 9bb48da0b2..518cbf8c81 100644 --- a/src/main/resources/assets/create/models/block/mechanical_harvester/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_harvester/item.json @@ -25,6 +25,7 @@ "name": "Wheel", "from": [1, 0, 3], "to": [1, 12, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6, 9]}, "faces": { "east": {"uv": [0, 0, 12, 12], "texture": "#harvester"}, @@ -96,6 +97,7 @@ "name": "Wheel", "from": [15, 0, 3], "to": [15, 12, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6, 9]}, "faces": { "east": {"uv": [0, 0, 12, 12], "texture": "#harvester"}, @@ -133,6 +135,7 @@ "name": "Attachment", "from": [0.1, 7, 3], "to": [2, 10, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 10, 3]}, "faces": { "north": {"uv": [0, 0, 1.9, 3], "texture": "#andesite_casing_short"}, @@ -147,6 +150,7 @@ "name": "Attachment", "from": [14, 7, 3], "to": [15.9, 10, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 10, 3]}, "faces": { "north": {"uv": [0, 0, 1.9, 3], "texture": "#andesite_casing_short"}, @@ -165,4 +169,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json index e51e594a9e..b9aebf5dca 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json @@ -38,6 +38,7 @@ "name": "Mixer wire 1", "from": [2.5, -4, 8], "to": [13.5, 6, 8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 1.25, 8]}, "faces": { "north": {"uv": [0, 0, 11, 10], "texture": "#6"}, @@ -48,6 +49,7 @@ "name": "MixerCenter", "from": [7, -4, 7], "to": [9, 8, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 1.25, 8]}, "faces": { "north": {"uv": [12, 0, 14, 12], "texture": "#6"}, @@ -61,6 +63,7 @@ "name": "Mixer wire 2", "from": [8, -4, 2.5], "to": [8, 6, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 1.25, 8]}, "faces": { "east": {"uv": [0, 0, 11, 10], "texture": "#6"}, @@ -222,6 +225,7 @@ "name": "Gear2", "from": [-1, 13.5, 6.5], "to": [17, 16.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, @@ -236,6 +240,7 @@ "name": "Gear3", "from": [-1, 13.5, 6.5], "to": [17, 16.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 15, 8]}, "faces": { "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, @@ -364,4 +369,4 @@ "children": [16, 17, 18, 19, 20, 21] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_plough.json b/src/main/resources/assets/create/models/block/mechanical_plough.json index ad0dd1fb03..9969d33f91 100644 --- a/src/main/resources/assets/create/models/block/mechanical_plough.json +++ b/src/main/resources/assets/create/models/block/mechanical_plough.json @@ -24,6 +24,7 @@ "name": "Attachment", "from": [14, 4, 1], "to": [15.9, 7, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [16, 10, 13]}, "faces": { "north": {"uv": [0.1, 8, 2, 11], "texture": "#andesite_casing_short"}, @@ -38,6 +39,7 @@ "name": "Attachment", "from": [2, 5, -1], "to": [13.9, 6, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [16, 10, 13]}, "faces": { "north": {"uv": [2, 15, 13.9, 16], "texture": "#1"}, @@ -52,6 +54,7 @@ "name": "Attachment", "from": [0.1, 4, 1], "to": [2, 7, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [16, 10, 13]}, "faces": { "north": {"uv": [14, 8, 15.9, 11], "texture": "#andesite_casing_short"}, @@ -83,4 +86,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/block.json b/src/main/resources/assets/create/models/block/mechanical_pump/block.json index 8dd3ab9b70..a38904e464 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/block.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/block.json @@ -52,6 +52,7 @@ { "from": [5.85355, 13.25, 1.75], "to": [9.85355, 15.25, 13.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8.35355, 13.25, 7.75]}, "faces": { "north": {"uv": [16, 0, 12, 2], "texture": "#4"}, @@ -65,6 +66,7 @@ { "from": [7.85355, 11.25, 1.75], "to": [9.85355, 13.25, 13.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8.35355, 13.25, 7.75]}, "faces": { "north": {"uv": [16, 2, 14, 4], "texture": "#4"}, @@ -77,6 +79,7 @@ { "from": [2.35355, 10.75, 7.75], "to": [14.35355, 12.75, 9.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8.35355, 13.25, 7.75]}, "faces": { "north": {"uv": [14, 2, 15, 4], "texture": "#4"}, @@ -89,6 +92,7 @@ { "from": [2.35355, 12.75, 5.75], "to": [14.35355, 14.75, 9.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8.35355, 13.25, 7.75]}, "faces": { "north": {"uv": [12, 0, 13, 2], "texture": "#4"}, @@ -143,4 +147,4 @@ 5, 6 ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/cog.json b/src/main/resources/assets/create/models/block/mechanical_pump/cog.json index d9f2d4c46c..53cbe69bd2 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/cog.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/cog.json @@ -25,6 +25,7 @@ "name": "Gear7", "from": [6.5, -1, 5], "to": [9.5, 17, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 6.5]}, "faces": { "north": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, @@ -39,6 +40,7 @@ "name": "Gear8", "from": [-1, 6.5, 5], "to": [17, 9.5, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 6.5]}, "faces": { "north": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, @@ -120,4 +122,4 @@ "children": [0, 1, 2, 3, 4] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/item.json b/src/main/resources/assets/create/models/block/mechanical_pump/item.json index 161c4910c9..0e52322468 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/item.json @@ -26,6 +26,7 @@ "name": "Gear6", "from": [5.5, 7, -1], "to": [11.5, 10, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8.5, 8.5, 8]}, "faces": { "north": {"uv": [9, 10, 10.5, 13], "rotation": 90, "texture": "#5"}, @@ -40,6 +41,7 @@ "name": "Gear7", "from": [5.5, -0.5, 6.5], "to": [11.5, 17.5, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8.5, 8.5, 8]}, "faces": { "north": {"uv": [0, 10, 9, 13], "rotation": 90, "texture": "#5"}, @@ -123,6 +125,7 @@ { "from": [1.70355, 6.15, 2], "to": [3.70355, 10.15, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3.35355, 8.25, 7.75]}, "faces": { "north": {"uv": [16, 0, 12, 2], "rotation": 90, "texture": "#4"}, @@ -136,6 +139,7 @@ { "from": [3.70355, 8.15, 2], "to": [5.70355, 10.15, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3.35355, 8.25, 7.75]}, "faces": { "north": {"uv": [16, 2, 14, 4], "rotation": 90, "texture": "#4"}, @@ -148,6 +152,7 @@ { "from": [3.85355, 2.5, 7.75], "to": [5.85355, 14.5, 9.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [3.35355, 8.25, 7.75]}, "faces": { "north": {"uv": [14, 2, 15, 4], "rotation": 90, "texture": "#4"}, @@ -160,6 +165,7 @@ { "from": [1.85355, 2.5, 5.75], "to": [3.85355, 14.5, 9.75], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [3.35355, 8.25, 7.75]}, "faces": { "north": {"uv": [12, 0, 13, 2], "rotation": 90, "texture": "#4"}, @@ -222,4 +228,4 @@ "children": [8, 9, 10, 11] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/mechanical_roller/frame.json b/src/main/resources/assets/create/models/block/mechanical_roller/frame.json index 489a68f423..7c997b5f04 100644 --- a/src/main/resources/assets/create/models/block/mechanical_roller/frame.json +++ b/src/main/resources/assets/create/models/block/mechanical_roller/frame.json @@ -9,6 +9,7 @@ "name": "Axle left", "from": [-2, -8, -5], "to": [2, 0, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [4, -4, -1]}, "faces": { "north": {"uv": [0, 4, 4, 6], "rotation": 90, "texture": "#1"}, @@ -23,6 +24,7 @@ "name": "Axle right", "from": [14, -8, -5], "to": [18, 0, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [4, -4, -1]}, "faces": { "north": {"uv": [0, 4, 4, 6], "rotation": 90, "texture": "#1"}, @@ -37,6 +39,7 @@ "name": "Chute", "from": [1, -4, -8], "to": [15, 12, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [4, -4, -1]}, "faces": { "north": {"uv": [0.5, 8, 7.5, 16], "texture": "#1"}, @@ -50,6 +53,7 @@ "name": "Chute top", "from": [1, 5, -14], "to": [15, 11, -8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [4, -4, -1]}, "faces": { "north": {"uv": [9, 1, 16, 4], "texture": "#1"}, @@ -62,6 +66,7 @@ "name": "Cage", "from": [1, -2, -14], "to": [15, 5, -8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [4, -4, -1]}, "faces": { "north": {"uv": [9, 4, 16, 8], "texture": "#1"}, @@ -70,4 +75,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/millstone/inner.json b/src/main/resources/assets/create/models/block/millstone/inner.json index c68026361c..8c09153fa1 100644 --- a/src/main/resources/assets/create/models/block/millstone/inner.json +++ b/src/main/resources/assets/create/models/block/millstone/inner.json @@ -27,6 +27,7 @@ "name": "Gear6", "from": [6.5, 6, -1], "to": [9.5, 12, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]}, "faces": { "north": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, @@ -41,6 +42,7 @@ "name": "Gear7", "from": [-1, 6, 6.5], "to": [17, 12, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]}, "faces": { "north": {"uv": [0, 10, 9, 13], "texture": "#5"}, @@ -141,4 +143,4 @@ "children": [5] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/millstone/item.json b/src/main/resources/assets/create/models/block/millstone/item.json index eff5cf81da..84a61ee0a6 100644 --- a/src/main/resources/assets/create/models/block/millstone/item.json +++ b/src/main/resources/assets/create/models/block/millstone/item.json @@ -26,6 +26,7 @@ "name": "Gear6", "from": [6.5, 6, -1], "to": [9.5, 12, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]}, "faces": { "north": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, @@ -40,6 +41,7 @@ "name": "Gear7", "from": [-1, 6, 6.5], "to": [17, 12, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]}, "faces": { "north": {"uv": [0, 10, 9, 13], "texture": "#5"}, @@ -172,4 +174,4 @@ }, 11 ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json b/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json index 3db35b065a..3030bad3d1 100644 --- a/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json +++ b/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json @@ -21,6 +21,7 @@ { "from": [5, 4, 10.5], "to": [7, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, @@ -47,6 +48,7 @@ { "from": [5, 6, 8.5], "to": [7, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, @@ -73,6 +75,7 @@ { "from": [9, 4, 10.5], "to": [11, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, @@ -99,6 +102,7 @@ { "from": [9, 6, 8.5], "to": [11, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, @@ -122,4 +126,4 @@ "children": [] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/netherite_backtank/item.json b/src/main/resources/assets/create/models/block/netherite_backtank/item.json index 20607aa1f2..f333c93862 100644 --- a/src/main/resources/assets/create/models/block/netherite_backtank/item.json +++ b/src/main/resources/assets/create/models/block/netherite_backtank/item.json @@ -22,6 +22,7 @@ { "from": [5, 4, 10.5], "to": [7, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, @@ -48,6 +49,7 @@ { "from": [5, 6, 8.5], "to": [7, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, @@ -74,6 +76,7 @@ { "from": [9, 4, 10.5], "to": [11, 9, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, @@ -100,6 +103,7 @@ { "from": [9, 6, 8.5], "to": [11, 7, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, "faces": { "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, @@ -202,4 +206,4 @@ "origin": [8, 8, 8], "children": [] }, 13, 14] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/placard.json b/src/main/resources/assets/create/models/block/placard.json index b79599cb27..b48f82909d 100644 --- a/src/main/resources/assets/create/models/block/placard.json +++ b/src/main/resources/assets/create/models/block/placard.json @@ -34,6 +34,7 @@ { "from": [2.5, 1, 2.5], "to": [13.5, 3, 13.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 11, 12, 12], "rotation": 180, "texture": "#0"}, @@ -47,6 +48,7 @@ { "from": [10.7, 2.5, 4.3], "to": [11.7, 3.5, 5.3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [12, 1, 13, 2], "rotation": 180, "texture": "#0"}, @@ -59,6 +61,7 @@ { "from": [4.3, 2.5, 10.7], "to": [5.3, 3.5, 11.7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [12, 1, 13, 2], "rotation": 180, "texture": "#0"}, @@ -108,4 +111,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/portable_fluid_interface/block_top.json b/src/main/resources/assets/create/models/block/portable_fluid_interface/block_top.json index 3815c2846d..7c160d25eb 100644 --- a/src/main/resources/assets/create/models/block/portable_fluid_interface/block_top.json +++ b/src/main/resources/assets/create/models/block/portable_fluid_interface/block_top.json @@ -32,6 +32,7 @@ { "from": [4, 13.1, 13], "to": [6, 15.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 13]}, "faces": { "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -42,6 +43,7 @@ { "from": [10, 13.1, 2], "to": [12, 15.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 3]}, "faces": { "north": {"uv": [10, 15, 11, 16], "texture": "#0"}, @@ -52,6 +54,7 @@ { "from": [2, 13.1, 4], "to": [3, 15.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 14, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -62,6 +65,7 @@ { "from": [13, 13.1, 10], "to": [14, 15.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 14, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -72,6 +76,7 @@ { "from": [10, 13.1, 13], "to": [12, 15.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 13]}, "faces": { "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -82,6 +87,7 @@ { "from": [4, 13.1, 2], "to": [6, 15.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 3]}, "faces": { "north": {"uv": [13, 15, 14, 16], "texture": "#0"}, @@ -92,6 +98,7 @@ { "from": [2, 13.1, 10], "to": [3, 15.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 14, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -102,6 +109,7 @@ { "from": [13, 13.1, 4], "to": [14, 15.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 14, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -181,4 +189,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/portable_fluid_interface/item.json b/src/main/resources/assets/create/models/block/portable_fluid_interface/item.json index 19312bcc8f..f2aa756a7f 100644 --- a/src/main/resources/assets/create/models/block/portable_fluid_interface/item.json +++ b/src/main/resources/assets/create/models/block/portable_fluid_interface/item.json @@ -92,6 +92,7 @@ { "from": [4, 16.1, 13], "to": [6, 18.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 17, 13]}, "faces": { "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -102,6 +103,7 @@ { "from": [10, 16.1, 2], "to": [12, 18.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 17, 3]}, "faces": { "north": {"uv": [10, 15, 11, 16], "texture": "#0"}, @@ -112,6 +114,7 @@ { "from": [2, 16.1, 4], "to": [3, 18.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 17, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -122,6 +125,7 @@ { "from": [13, 16.1, 10], "to": [14, 18.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 17, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -132,6 +136,7 @@ { "from": [10, 16.1, 13], "to": [12, 18.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 17, 13]}, "faces": { "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -142,6 +147,7 @@ { "from": [4, 16.1, 2], "to": [6, 18.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 17, 3]}, "faces": { "north": {"uv": [13, 15, 14, 16], "texture": "#0"}, @@ -152,6 +158,7 @@ { "from": [2, 16.1, 10], "to": [3, 18.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 17, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -162,6 +169,7 @@ { "from": [13, 16.1, 4], "to": [14, 18.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 17, 8]}, "faces": { "north": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, @@ -241,4 +249,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json b/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json index 88f35fcabe..f09e4f8fca 100644 --- a/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json @@ -32,6 +32,7 @@ { "from": [4, 13.1, 13], "to": [6, 15.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 13]}, "faces": { "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -42,6 +43,7 @@ { "from": [10, 13.1, 2], "to": [12, 15.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 3]}, "faces": { "north": {"uv": [10, 15, 11, 16], "texture": "#0"}, @@ -52,6 +54,7 @@ { "from": [2, 13.1, 4], "to": [3, 15.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 14, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -62,6 +65,7 @@ { "from": [13, 13.1, 10], "to": [14, 15.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 14, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -72,6 +76,7 @@ { "from": [10, 13.1, 13], "to": [12, 15.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 13]}, "faces": { "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -82,6 +87,7 @@ { "from": [4, 13.1, 2], "to": [6, 15.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 3]}, "faces": { "north": {"uv": [13, 15, 14, 16], "texture": "#0"}, @@ -92,6 +98,7 @@ { "from": [2, 13.1, 10], "to": [3, 15.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 14, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -102,6 +109,7 @@ { "from": [13, 13.1, 4], "to": [14, 15.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 14, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -117,4 +125,4 @@ "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/item.json b/src/main/resources/assets/create/models/block/portable_storage_interface/item.json index 81d7071603..3d5defe3fa 100644 --- a/src/main/resources/assets/create/models/block/portable_storage_interface/item.json +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/item.json @@ -91,6 +91,7 @@ { "from": [4, 16.1, 13], "to": [6, 18.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 17, 13]}, "faces": { "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -101,6 +102,7 @@ { "from": [10, 16.1, 2], "to": [12, 18.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 17, 3]}, "faces": { "north": {"uv": [10, 15, 11, 16], "texture": "#0"}, @@ -111,6 +113,7 @@ { "from": [2, 16.1, 4], "to": [3, 18.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 17, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -121,6 +124,7 @@ { "from": [13, 16.1, 10], "to": [14, 18.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 17, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -131,6 +135,7 @@ { "from": [10, 16.1, 13], "to": [12, 18.1, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 17, 13]}, "faces": { "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -141,6 +146,7 @@ { "from": [4, 16.1, 2], "to": [6, 18.1, 3], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 17, 3]}, "faces": { "north": {"uv": [13, 15, 14, 16], "texture": "#0"}, @@ -151,6 +157,7 @@ { "from": [2, 16.1, 10], "to": [3, 18.1, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [3, 17, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -161,6 +168,7 @@ { "from": [13, 16.1, 4], "to": [14, 18.1, 6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [13, 17, 8]}, "faces": { "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, @@ -240,4 +248,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/rope_pulley/item.json b/src/main/resources/assets/create/models/block/rope_pulley/item.json index ed905e4591..fab68e5d39 100644 --- a/src/main/resources/assets/create/models/block/rope_pulley/item.json +++ b/src/main/resources/assets/create/models/block/rope_pulley/item.json @@ -17,6 +17,7 @@ "name": "coil", "from": [4, 4, 2], "to": [12, 12, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "east": {"uv": [0, 0, 12, 8], "texture": "#5"}, @@ -29,6 +30,7 @@ "name": "coil", "from": [3.5, 3.5, 9], "to": [12.5, 12.5, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "north": {"uv": [0, 0, 9, 9], "texture": "#5"}, @@ -43,6 +45,7 @@ "name": "coil", "from": [3.5, 3.5, 3], "to": [12.5, 12.5, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "north": {"uv": [0, 0, 9, 9], "texture": "#5"}, @@ -364,4 +367,4 @@ 20, 21 ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/rope_pulley/rope_coil.json b/src/main/resources/assets/create/models/block/rope_pulley/rope_coil.json index f29424c95a..8649b41042 100644 --- a/src/main/resources/assets/create/models/block/rope_pulley/rope_coil.json +++ b/src/main/resources/assets/create/models/block/rope_pulley/rope_coil.json @@ -9,6 +9,7 @@ "name": "coil", "from": [4, 4, 2], "to": [12, 12, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "east": {"uv": [0, 0, 12, 8], "texture": "#5"}, @@ -21,6 +22,7 @@ "name": "coil", "from": [3.5, 3.5, 9], "to": [12.5, 12.5, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "north": {"uv": [0, 0, 9, 9], "texture": "#5"}, @@ -35,6 +37,7 @@ "name": "coil", "from": [3.5, 3.5, 3], "to": [12.5, 12.5, 7], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, "faces": { "north": {"uv": [0, 0, 9, 9], "texture": "#5"}, @@ -46,4 +49,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/schematicannon/block.json b/src/main/resources/assets/create/models/block/schematicannon/block.json index 3a2bc897a4..0eaef656cd 100644 --- a/src/main/resources/assets/create/models/block/schematicannon/block.json +++ b/src/main/resources/assets/create/models/block/schematicannon/block.json @@ -13,6 +13,7 @@ "name": "Cube", "from": [-2, -0.2, 5], "to": [18, 3, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, @@ -27,6 +28,7 @@ "name": "Cube", "from": [-2, -0.1, 5], "to": [18, 3, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, @@ -58,4 +60,4 @@ "children": [0, 1, 2] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/schematicannon/item.json b/src/main/resources/assets/create/models/block/schematicannon/item.json index 2efe2cb445..6e0697ef60 100644 --- a/src/main/resources/assets/create/models/block/schematicannon/item.json +++ b/src/main/resources/assets/create/models/block/schematicannon/item.json @@ -16,6 +16,7 @@ "name": "Cube", "from": [4, 30, 4], "to": [12, 32, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 15, 0]}, "faces": { "north": {"uv": [6, 0, 14, 2], "texture": "#3"}, @@ -30,6 +31,7 @@ "name": "Cube", "from": [4.5, 20, 4.5], "to": [11.5, 31, 11.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 15, 0]}, "faces": { "north": {"uv": [8, 1, 15, 12], "texture": "#3"}, @@ -44,6 +46,7 @@ "name": "Cube", "from": [6, 13, -1.5], "to": [10, 17, 17.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 15, 0]}, "faces": { "north": {"uv": [10, 8, 14, 12], "texture": "#3"}, @@ -58,6 +61,7 @@ "name": "Cube", "from": [3.5, 10, 3.5], "to": [12.5, 20, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 15, 0]}, "faces": { "north": {"uv": [4, 6, 13, 16], "texture": "#3"}, @@ -109,6 +113,7 @@ "name": "Cube", "from": [-2, -0.2, 5], "to": [18, 3, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, @@ -123,6 +128,7 @@ "name": "Cube", "from": [-2, -0.1, 5], "to": [18, 3, 11], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, @@ -197,4 +203,4 @@ "children": [7, 8, 9] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/smart_fluid_pipe/block.json b/src/main/resources/assets/create/models/block/smart_fluid_pipe/block.json index 1f67458820..613fdf15a4 100644 --- a/src/main/resources/assets/create/models/block/smart_fluid_pipe/block.json +++ b/src/main/resources/assets/create/models/block/smart_fluid_pipe/block.json @@ -44,6 +44,7 @@ { "from": [4.5, 5, 7.15], "to": [11.5, 12, 13.15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 13]}, "faces": { "north": {"uv": [1, 9, 7, 15], "texture": "#3"}, @@ -56,6 +57,7 @@ { "from": [3.9, 4.4, 4.15], "to": [12.1, 12.6, 7.15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 13]}, "faces": { "north": {"uv": [8, 8, 16, 16], "texture": "#3"}, @@ -67,4 +69,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/smart_fluid_pipe/item.json b/src/main/resources/assets/create/models/block/smart_fluid_pipe/item.json index a3df689d89..1f445f3e38 100644 --- a/src/main/resources/assets/create/models/block/smart_fluid_pipe/item.json +++ b/src/main/resources/assets/create/models/block/smart_fluid_pipe/item.json @@ -70,6 +70,7 @@ { "from": [4.5, 5, 7.15], "to": [11.5, 12, 13.15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 13]}, "faces": { "north": {"uv": [1, 9, 7, 15], "texture": "#3"}, @@ -82,6 +83,7 @@ { "from": [3.9, 4.4, 4.15], "to": [12.1, 12.6, 7.15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 13]}, "faces": { "north": {"uv": [8, 8, 16, 16], "texture": "#3"}, @@ -124,4 +126,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/steam_engine/item.json b/src/main/resources/assets/create/models/block/steam_engine/item.json index 3e1797a1a0..b6757a18f3 100644 --- a/src/main/resources/assets/create/models/block/steam_engine/item.json +++ b/src/main/resources/assets/create/models/block/steam_engine/item.json @@ -67,6 +67,7 @@ { "from": [6, 22, 4], "to": [10, 28, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [15, 25, 8]}, "faces": { "north": {"uv": [8.5, 11, 10.5, 14], "rotation": 180, "texture": "#0"}, @@ -80,6 +81,7 @@ { "from": [6, 8, 4], "to": [10, 14, 12], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [15, 25, 8]}, "faces": { "north": {"uv": [8.5, 11, 10.5, 14], "rotation": 180, "texture": "#0"}, @@ -93,6 +95,7 @@ { "from": [6, 14, 6], "to": [10, 22, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [15, 25, 8]}, "faces": { "north": {"uv": [1.5, 1, 3.5, 6], "rotation": 180, "texture": "#0"}, @@ -154,4 +157,4 @@ "children": [5, 6, 7] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json b/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json index 0fdbb96684..b6d97b9eb7 100644 --- a/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json +++ b/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json @@ -22,6 +22,7 @@ "name": "rod_left_bottom", "from": [1, 3, 7], "to": [3, 4, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -36,6 +37,7 @@ "name": "rod_left_bottom", "from": [13, 3, 7], "to": [15, 4, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -50,6 +52,7 @@ "name": "rod_left_top", "from": [1, 12, 7], "to": [3, 13, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -64,6 +67,7 @@ "name": "rod_left_top", "from": [13, 12, 7], "to": [15, 13, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -79,6 +83,7 @@ "from": [1, 4, 7.5], "to": [3, 12, 8.5], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [3, 5, 1, 13], "texture": "#2"}, @@ -92,6 +97,7 @@ "from": [13, 4, 7.5], "to": [15, 12, 8.5], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 3, 3, 11], "texture": "#2"}, @@ -140,4 +146,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json b/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json index 99450d7cab..ffd609b860 100644 --- a/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json +++ b/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json @@ -61,6 +61,7 @@ "name": "Cube", "from": [7.5, 6, -0.5], "to": [8.5, 10, 3.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [4, 1, 5, 5], "texture": "#0"}, @@ -75,6 +76,7 @@ "name": "Cube", "from": [7.5, 6, 12.5], "to": [8.5, 10, 16.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [4, 1, 5, 5], "texture": "#0"}, @@ -89,6 +91,7 @@ "name": "rod_left_bottom", "from": [1, 3, 7], "to": [3, 4, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -103,6 +106,7 @@ "name": "rod_left_bottom", "from": [13, 3, 7], "to": [15, 4, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -117,6 +121,7 @@ "name": "rod_left_top", "from": [1, 12, 7], "to": [3, 13, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -131,6 +136,7 @@ "name": "rod_left_top", "from": [13, 12, 7], "to": [15, 13, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, @@ -146,6 +152,7 @@ "from": [1, 4, 7.5], "to": [3, 12, 8.5], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [3, 5, 1, 13], "texture": "#2"}, @@ -159,6 +166,7 @@ "from": [13, 4, 7.5], "to": [15, 12, 8.5], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [1, 3, 3, 11], "texture": "#2"}, @@ -175,4 +183,4 @@ "children": [6, 7, 8, 9, 10, 11] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/ascending_template.json.donotload b/src/main/resources/assets/create/models/block/track/ascending_template.json.donotload index d4f4829352..c8be741953 100644 --- a/src/main/resources/assets/create/models/block/track/ascending_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/ascending_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [16, 10.6, 22.1], "to": [37.95, 14.7, 26.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1_0"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [16, 10.6, 14.6], "to": [37.95, 14.7, 18.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1_0"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [-5.95, 10.6, 22.1], "to": [16, 14.7, 26.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1_0"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [16, 10.6, 29.6], "to": [37.95, 14.7, 33.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1_0"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [-5.95, 10.6, 29.6], "to": [16, 14.7, 33.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1_0"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [-5.95, 10.6, 14.6], "to": [16, 14.7, 18.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1_0"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [-5.95, 10.6, 12.6], "to": [16, 14.7, 20.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [-5.95, 10.6, 20.1], "to": [16, 14.7, 28.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [-5.95, 10.6, 27.6], "to": [16, 14.7, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [16, 10.6, 12.6], "to": [37.95, 14.7, 20.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [16, 10.6, 20.1], "to": [37.95, 14.7, 28.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [16, 10.6, 27.6], "to": [37.95, 14.7, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [29.35, 13.65, 12.6], "to": [33.55, 13.7, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "rotation": 270, "texture": "#1_0"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [29.45, 18.05, 12.6], "to": [33.45, 18.1, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "rotation": 270, "texture": "#1_0"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [29.9, 13.7, 12.6], "to": [33, 18.1, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 12.5, 4], "texture": "#1_0"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [-1.45, 18.05, 12.6], "to": [2.55, 18.1, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "rotation": 270, "texture": "#1_0"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [-1, 13.7, 12.6], "to": [2.1, 18.1, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [12.5, 2, 11, 4], "texture": "#1_0"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [-1.55, 13.65, 12.6], "to": [2.65, 13.7, 35.6], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "rotation": 270, "texture": "#1_0"}, @@ -213,4 +231,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/cross_d1_xo_template.json.donotload b/src/main/resources/assets/create/models/block/track/cross_d1_xo_template.json.donotload index 4009870d3a..0881b26c1d 100644 --- a/src/main/resources/assets/create/models/block/track/cross_d1_xo_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/cross_d1_xo_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [16, 5.95, 14], "to": [37.95, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [16, 5.95, 6.5], "to": [37.95, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [-5.95, 5.95, 14], "to": [16, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [16, 5.95, 21.5], "to": [37.95, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [-5.95, 5.95, 21.5], "to": [16, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [-5.95, 5.95, 6.5], "to": [16, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [-5.95, 5.95, 4.5], "to": [16, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [-5.95, 5.95, 12], "to": [16, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [-5.95, 5.95, 19.5], "to": [16, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [16, 5.95, 4.5], "to": [37.95, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [16, 5.95, 12], "to": [37.95, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [16, 5.95, 19.5], "to": [37.95, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [29.35, 9, 4.5], "to": [33.55, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "rotation": 270, "texture": "#1"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [29.45, 13.4, 4.5], "to": [33.45, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "rotation": 270, "texture": "#1"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [29.9, 9.05, 4.5], "to": [33, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [-1.45, 13.4, 4.5], "to": [2.55, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "rotation": 270, "texture": "#1"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [-1, 9.05, 4.5], "to": [2.1, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [12.5, 2, 11, 4], "texture": "#1"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [-1.55, 9, 4.5], "to": [2.65, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "rotation": 270, "texture": "#1"}, @@ -346,4 +364,4 @@ 28, 29 ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/cross_d1_zo_template.json.donotload b/src/main/resources/assets/create/models/block/track/cross_d1_zo_template.json.donotload index f7bfa144d3..6612ec4f63 100644 --- a/src/main/resources/assets/create/models/block/track/cross_d1_zo_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/cross_d1_zo_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [16, 5.95, 14], "to": [37.95, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [16, 5.95, 6.5], "to": [37.95, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [-5.95, 5.95, 14], "to": [16, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [16, 5.95, 21.5], "to": [37.95, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [-5.95, 5.95, 21.5], "to": [16, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [-5.95, 5.95, 6.5], "to": [16, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [-5.95, 5.95, 4.5], "to": [16, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [-5.95, 5.95, 12], "to": [16, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [-5.95, 5.95, 19.5], "to": [16, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [16, 5.95, 4.5], "to": [37.95, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [16, 5.95, 12], "to": [37.95, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [16, 5.95, 19.5], "to": [37.95, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [29.35, 9, 4.5], "to": [33.55, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "rotation": 270, "texture": "#1"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [29.45, 13.4, 4.5], "to": [33.45, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "rotation": 270, "texture": "#1"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [29.9, 9.05, 4.5], "to": [33, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [-1.45, 13.4, 4.5], "to": [2.55, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "rotation": 270, "texture": "#1"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [-1, 9.05, 4.5], "to": [2.1, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [12.5, 2, 11, 4], "texture": "#1"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [-1.55, 9, 4.5], "to": [2.65, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "rotation": 270, "texture": "#1"}, @@ -347,4 +365,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/cross_d2_xo_template.json.donotload b/src/main/resources/assets/create/models/block/track/cross_d2_xo_template.json.donotload index c35020b44e..361b750820 100644 --- a/src/main/resources/assets/create/models/block/track/cross_d2_xo_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/cross_d2_xo_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [14, 6.0125, 16], "to": [18, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [21.5, 6.0125, 16], "to": [25.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [14, 6.0125, -5.95], "to": [18, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [6.5, 6.0125, 16], "to": [10.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [6.5, 6.0125, -5.95], "to": [10.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [21.5, 6.0125, -5.95], "to": [25.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [19.5, 6.0125, -5.95], "to": [27.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [12, 6.0125, -5.95], "to": [20, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [4.5, 6.0125, -5.95], "to": [12.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [19.5, 6.0125, 16], "to": [27.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [12, 6.0125, 16], "to": [20, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [4.5, 6.0125, 16], "to": [12.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [4.5, 9.0625, 29.35], "to": [27.5, 9.1125, 33.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "texture": "#1"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [4.5, 13.4625, 29.45], "to": [27.5, 13.5125, 33.45], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "texture": "#1"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [4.5, 9.1125, 29.9], "to": [27.5, 13.5125, 33], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 6, 11.5, 8], "texture": "#1"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [4.5, 13.4625, -1.45], "to": [27.5, 13.5125, 2.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "texture": "#1"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [4.5, 9.1125, -1], "to": [27.5, 13.5125, 2.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11.5, 6, 0, 8], "texture": "#1"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [4.5, 9.0625, -1.55], "to": [27.5, 9.1125, 2.65], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "texture": "#1"}, @@ -347,4 +365,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/cross_d2_zo_template.json.donotload b/src/main/resources/assets/create/models/block/track/cross_d2_zo_template.json.donotload index 4f0ceddbee..d90bedf04d 100644 --- a/src/main/resources/assets/create/models/block/track/cross_d2_zo_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/cross_d2_zo_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [14, 6.0125, 16], "to": [18, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [21.5, 6.0125, 16], "to": [25.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [14, 6.0125, -5.95], "to": [18, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [6.5, 6.0125, 16], "to": [10.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [6.5, 6.0125, -5.95], "to": [10.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [21.5, 6.0125, -5.95], "to": [25.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [19.5, 6.0125, -5.95], "to": [27.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [12, 6.0125, -5.95], "to": [20, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [4.5, 6.0125, -5.95], "to": [12.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [19.5, 6.0125, 16], "to": [27.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [12, 6.0125, 16], "to": [20, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [4.5, 6.0125, 16], "to": [12.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [4.5, 9.0625, 29.35], "to": [27.5, 9.1125, 33.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "texture": "#1"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [4.5, 13.4625, 29.45], "to": [27.5, 13.5125, 33.45], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "texture": "#1"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [4.5, 9.1125, 29.9], "to": [27.5, 13.5125, 33], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 6, 11.5, 8], "texture": "#1"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [4.5, 13.4625, -1.45], "to": [27.5, 13.5125, 2.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "texture": "#1"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [4.5, 9.1125, -1], "to": [27.5, 13.5125, 2.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11.5, 6, 0, 8], "texture": "#1"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [4.5, 9.0625, -1.55], "to": [27.5, 9.1125, 2.65], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "texture": "#1"}, @@ -347,4 +365,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/cross_diag_template.json.donotload b/src/main/resources/assets/create/models/block/track/cross_diag_template.json.donotload index 4dc753565c..5c0a2ec76c 100644 --- a/src/main/resources/assets/create/models/block/track/cross_diag_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/cross_diag_template.json.donotload @@ -12,6 +12,7 @@ "name": "cube1a", "from": [16, 5.95, 14], "to": [37.95, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -23,6 +24,7 @@ "name": "cube2a", "from": [16, 5.95, 6.5], "to": [37.95, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -34,6 +36,7 @@ "name": "cube3a", "from": [-5.95, 5.95, 14], "to": [16, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -45,6 +48,7 @@ "name": "cube5a", "from": [16, 5.95, 21.5], "to": [37.95, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -56,6 +60,7 @@ "name": "cube4a", "from": [-5.95, 5.95, 21.5], "to": [16, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -67,6 +72,7 @@ "name": "cube6a", "from": [-5.95, 5.95, 6.5], "to": [16, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -78,6 +84,7 @@ "name": "cube7a", "from": [-5.95, 5.95, 4.5], "to": [16, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -88,6 +95,7 @@ "name": "cube8a", "from": [-5.95, 5.95, 12], "to": [16, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -98,6 +106,7 @@ "name": "cube9a", "from": [-5.95, 5.95, 19.5], "to": [16, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -108,6 +117,7 @@ "name": "cube10a", "from": [16, 5.95, 4.5], "to": [37.95, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -118,6 +128,7 @@ "name": "cube11a", "from": [16, 5.95, 12], "to": [37.95, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -128,6 +139,7 @@ "name": "cube12a", "from": [16, 5.95, 19.5], "to": [37.95, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -138,6 +150,7 @@ "name": "rail1a", "from": [29.35, 9, 4.5], "to": [33.55, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "rotation": 270, "texture": "#1"}, @@ -148,6 +161,7 @@ "name": "rail2a", "from": [29.45, 13.4, 4.5], "to": [33.45, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "rotation": 270, "texture": "#1"}, @@ -158,6 +172,7 @@ "name": "rail3a", "from": [29.9, 9.05, 4.5], "to": [33, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, @@ -170,6 +185,7 @@ "name": "rail4a", "from": [-1.45, 13.4, 4.5], "to": [2.55, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "rotation": 270, "texture": "#1"}, @@ -180,6 +196,7 @@ "name": "rail5a", "from": [-1, 9.05, 4.5], "to": [2.1, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [12.5, 2, 11, 4], "texture": "#1"}, @@ -192,6 +209,7 @@ "name": "rail6a", "from": [-1.55, 9, 4.5], "to": [2.65, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "rotation": 270, "texture": "#1"}, @@ -202,6 +220,7 @@ "name": "cube1", "from": [14, 6.0125, 16], "to": [18, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -213,6 +232,7 @@ "name": "cube2", "from": [21.5, 6.0125, 16], "to": [25.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -224,6 +244,7 @@ "name": "cube3", "from": [14, 6.0125, -5.95], "to": [18, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -235,6 +256,7 @@ "name": "cube5", "from": [6.5, 6.0125, 16], "to": [10.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -246,6 +268,7 @@ "name": "cube4", "from": [6.5, 6.0125, -5.95], "to": [10.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -257,6 +280,7 @@ "name": "cube6", "from": [21.5, 6.0125, -5.95], "to": [25.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -268,6 +292,7 @@ "name": "middle", "from": [2, 5.9125, 2], "to": [30, 10.1625, 30], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [1, 13, 15, 15], "texture": "#3"}, @@ -282,6 +307,7 @@ "name": "cube7", "from": [19.5, 6.0125, -5.95], "to": [27.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -292,6 +318,7 @@ "name": "cube8", "from": [12, 6.0125, -5.95], "to": [20, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -302,6 +329,7 @@ "name": "cube9", "from": [4.5, 6.0125, -5.95], "to": [12.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -312,6 +340,7 @@ "name": "cube10", "from": [19.5, 6.0125, 16], "to": [27.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -322,6 +351,7 @@ "name": "cube11", "from": [12, 6.0125, 16], "to": [20, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -332,6 +362,7 @@ "name": "cube12", "from": [4.5, 6.0125, 16], "to": [12.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -342,6 +373,7 @@ "name": "rail1", "from": [4.5, 9.0625, 29.35], "to": [27.5, 9.1125, 33.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "texture": "#1"}, @@ -352,6 +384,7 @@ "name": "rail2", "from": [4.5, 13.4625, 29.45], "to": [27.5, 13.5125, 33.45], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "texture": "#1"}, @@ -362,6 +395,7 @@ "name": "rail3", "from": [4.5, 9.1125, 29.9], "to": [27.5, 13.5125, 33], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 6, 11.5, 8], "texture": "#1"}, @@ -374,6 +408,7 @@ "name": "rail4", "from": [4.5, 13.4625, -1.45], "to": [27.5, 13.5125, 2.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "texture": "#1"}, @@ -384,6 +419,7 @@ "name": "rail5", "from": [4.5, 9.1125, -1], "to": [27.5, 13.5125, 2.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11.5, 6, 0, 8], "texture": "#1"}, @@ -396,6 +432,7 @@ "name": "rail6", "from": [4.5, 9.0625, -1.55], "to": [27.5, 9.1125, 2.65], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "texture": "#1"}, @@ -403,4 +440,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/diag_2_template.json.donotload b/src/main/resources/assets/create/models/block/track/diag_2_template.json.donotload index 4ae06b98af..fbee6ee6ef 100644 --- a/src/main/resources/assets/create/models/block/track/diag_2_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/diag_2_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [14, 6.0125, 16], "to": [18, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [21.5, 6.0125, 16], "to": [25.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [14, 6.0125, -5.95], "to": [18, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [6.5, 6.0125, 16], "to": [10.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [6.5, 6.0125, -5.95], "to": [10.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [21.5, 6.0125, -5.95], "to": [25.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [19.5, 6.0125, -5.95], "to": [27.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [12, 6.0125, -5.95], "to": [20, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [4.5, 6.0125, -5.95], "to": [12.5, 10.1125, 16], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [19.5, 6.0125, 16], "to": [27.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [12, 6.0125, 16], "to": [20, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [4.5, 6.0125, 16], "to": [12.5, 10.1125, 37.95], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "south": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [4.5, 9.0625, 29.35], "to": [27.5, 9.1125, 33.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "texture": "#1"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [4.5, 13.4625, 29.45], "to": [27.5, 13.5125, 33.45], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "texture": "#1"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [4.5, 9.1125, 29.9], "to": [27.5, 13.5125, 33], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 6, 11.5, 8], "texture": "#1"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [4.5, 13.4625, -1.45], "to": [27.5, 13.5125, 2.55], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "texture": "#1"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [4.5, 9.1125, -1], "to": [27.5, 13.5125, 2.1], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11.5, 6, 0, 8], "texture": "#1"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [4.5, 9.0625, -1.55], "to": [27.5, 9.1125, 2.65], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "texture": "#1"}, @@ -206,4 +224,4 @@ "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/diag_template.json.donotload b/src/main/resources/assets/create/models/block/track/diag_template.json.donotload index fcef2d4fb1..0ef1ca40d5 100644 --- a/src/main/resources/assets/create/models/block/track/diag_template.json.donotload +++ b/src/main/resources/assets/create/models/block/track/diag_template.json.donotload @@ -11,6 +11,7 @@ "name": "cube1", "from": [16, 5.95, 14], "to": [37.95, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -22,6 +23,7 @@ "name": "cube2", "from": [16, 5.95, 6.5], "to": [37.95, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -33,6 +35,7 @@ "name": "cube3", "from": [-5.95, 5.95, 14], "to": [16, 10.05, 18], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -44,6 +47,7 @@ "name": "cube5", "from": [16, 5.95, 21.5], "to": [37.95, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, @@ -55,6 +59,7 @@ "name": "cube4", "from": [-5.95, 5.95, 21.5], "to": [16, 10.05, 25.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -66,6 +71,7 @@ "name": "cube6", "from": [-5.95, 5.95, 6.5], "to": [16, 10.05, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, @@ -77,6 +83,7 @@ "name": "cube7", "from": [-5.95, 5.95, 4.5], "to": [16, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -87,6 +94,7 @@ "name": "cube8", "from": [-5.95, 5.95, 12], "to": [16, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -97,6 +105,7 @@ "name": "cube9", "from": [-5.95, 5.95, 19.5], "to": [16, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "west": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -107,6 +116,7 @@ "name": "cube10", "from": [16, 5.95, 4.5], "to": [37.95, 10.05, 12.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -117,6 +127,7 @@ "name": "cube11", "from": [16, 5.95, 12], "to": [37.95, 10.05, 20], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -127,6 +138,7 @@ "name": "cube12", "from": [16, 5.95, 19.5], "to": [37.95, 10.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "east": {"uv": [11, 4.5, 13, 8.5], "rotation": 90, "texture": "#2"}, @@ -137,6 +149,7 @@ "name": "rail1", "from": [29.35, 9, 4.5], "to": [33.55, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 8.5, 11.5, 10.5], "rotation": 270, "texture": "#1"}, @@ -147,6 +160,7 @@ "name": "rail2", "from": [29.45, 13.4, 4.5], "to": [33.45, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 11.5, 11.5, 13.5], "rotation": 270, "texture": "#1"}, @@ -157,6 +171,7 @@ "name": "rail3", "from": [29.9, 9.05, 4.5], "to": [33, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, @@ -169,6 +184,7 @@ "name": "rail4", "from": [-1.45, 13.4, 4.5], "to": [2.55, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 13.5, 11.5, 11.5], "rotation": 270, "texture": "#1"}, @@ -179,6 +195,7 @@ "name": "rail5", "from": [-1, 9.05, 4.5], "to": [2.1, 13.45, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "north": {"uv": [12.5, 2, 11, 4], "texture": "#1"}, @@ -191,6 +208,7 @@ "name": "rail6", "from": [-1.55, 9, 4.5], "to": [2.65, 9.05, 27.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [16, 8, 16]}, "faces": { "up": {"uv": [0, 10.5, 11.5, 8.5], "rotation": 270, "texture": "#1"}, @@ -206,4 +224,4 @@ "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/weighted_ejector/item.json b/src/main/resources/assets/create/models/block/weighted_ejector/item.json index 9a64f9ae59..9efcb87d4b 100644 --- a/src/main/resources/assets/create/models/block/weighted_ejector/item.json +++ b/src/main/resources/assets/create/models/block/weighted_ejector/item.json @@ -83,6 +83,7 @@ { "from": [7, 2, 0], "to": [9, 11, 2], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 11, 1]}, "faces": { "north": {"uv": [3, 0, 5, 9], "texture": "#2"}, @@ -96,6 +97,7 @@ { "from": [7, 2, 0], "to": [9, 11, 2], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 11, 1]}, "faces": { "north": {"uv": [3, 0, 5, 9], "texture": "#2"}, @@ -109,6 +111,7 @@ { "from": [7, 10, 1], "to": [9, 12, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 11, 1]}, "faces": { "north": {"uv": [0, 0, 2, 2], "rotation": 180, "texture": "#2"}, @@ -247,4 +250,4 @@ "children": [10, 11, 12, 13, 14, 15, 16, 17] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/weighted_ejector/top.json b/src/main/resources/assets/create/models/block/weighted_ejector/top.json index e17f41781f..b5819a6e63 100644 --- a/src/main/resources/assets/create/models/block/weighted_ejector/top.json +++ b/src/main/resources/assets/create/models/block/weighted_ejector/top.json @@ -67,6 +67,7 @@ { "from": [7, 2, 0], "to": [9, 11, 2], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 11, 1]}, "faces": { "north": {"uv": [3, 0, 5, 9], "texture": "#2"}, @@ -80,6 +81,7 @@ { "from": [7, 2, 0], "to": [9, 11, 2], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "x", "origin": [8, 11, 1]}, "faces": { "north": {"uv": [3, 0, 5, 9], "texture": "#2"}, @@ -93,6 +95,7 @@ { "from": [7, 10, 1], "to": [9, 12, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 11, 1]}, "faces": { "north": {"uv": [0, 0, 2, 2], "rotation": 180, "texture": "#2"}, @@ -124,4 +127,4 @@ "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json b/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json index 29d9735c78..ead8ea3146 100644 --- a/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json +++ b/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json @@ -21,6 +21,7 @@ { "from": [-3.5, -2.5, 0.5], "to": [2.5, -1.5, 1.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, -2.5, 1.5]}, "faces": { "north": {"uv": [2, 5, 1, 10], "texture": "#0"}, @@ -32,6 +33,7 @@ { "from": [-3.5, -2.5, -1.5], "to": [2.5, -1.5, -0.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, -2.5, 1.5]}, "faces": { "north": {"uv": [2, 5, 1, 10], "texture": "#0"}, @@ -53,4 +55,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/entity/train_hat.json b/src/main/resources/assets/create/models/entity/train_hat.json index 28cc936ef0..09fd97ba83 100644 --- a/src/main/resources/assets/create/models/entity/train_hat.json +++ b/src/main/resources/assets/create/models/entity/train_hat.json @@ -42,6 +42,7 @@ { "from": [-4.5, 1.3961, 4.04328], "to": [4.5, 2.3961, 6.04328], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 0, -1.5]}, "faces": { "up": {"uv": [0, 0, 9, 2], "rotation": 180, "texture": "#0"} @@ -50,10 +51,11 @@ { "from": [-4.5, 2.31684, 3.9585], "to": [4.5, 3.31684, 5.9585], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 0, -1.5]}, "faces": { "down": {"uv": [0, 0, 9, 2], "texture": "#0"} } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/extendo_grip/cog.json b/src/main/resources/assets/create/models/item/extendo_grip/cog.json index 6fad79e2f4..5577039374 100644 --- a/src/main/resources/assets/create/models/item/extendo_grip/cog.json +++ b/src/main/resources/assets/create/models/item/extendo_grip/cog.json @@ -37,6 +37,7 @@ "name": "Cog", "from": [7, 5, 3], "to": [9, 13, 5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 9, 5]}, "faces": { "north": {"uv": [4, 4, 5, 9], "rotation": 180, "texture": "#cog"}, @@ -51,6 +52,7 @@ "name": "Cog", "from": [7, 5, 3], "to": [9, 13, 5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 9, 5]}, "faces": { "north": {"uv": [4, 4, 5, 9], "rotation": 180, "texture": "#cog"}, @@ -62,4 +64,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/extendo_grip/item.json b/src/main/resources/assets/create/models/item/extendo_grip/item.json index 0ac961e182..8df9643728 100644 --- a/src/main/resources/assets/create/models/item/extendo_grip/item.json +++ b/src/main/resources/assets/create/models/item/extendo_grip/item.json @@ -9,6 +9,7 @@ { "from": [7, 3.8, 11.4], "to": [9, 9.8, 14.4], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8.5, 4.5, 14]}, "faces": { "north": {"uv": [4, 6, 6, 12], "texture": "#4"}, @@ -22,6 +23,7 @@ { "from": [7.5, 4.8, 9.4], "to": [8.5, 10.8, 12.4], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 5.5, 12]}, "faces": { "north": {"uv": [14, 6, 15, 12], "texture": "#4"}, @@ -110,4 +112,4 @@ "scale": [0.5, 0.5, 0.5] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/handheld_worldshaper/accelerator.json b/src/main/resources/assets/create/models/item/handheld_worldshaper/accelerator.json index 2cd6b1b9d7..95d8ce7672 100644 --- a/src/main/resources/assets/create/models/item/handheld_worldshaper/accelerator.json +++ b/src/main/resources/assets/create/models/item/handheld_worldshaper/accelerator.json @@ -9,6 +9,7 @@ "name": "Cog", "from": [5.5, 5, 11], "to": [10.5, 6, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 5.5, 13]}, "faces": { "north": {"uv": [6, 15, 11, 16], "texture": "#2"}, @@ -23,6 +24,7 @@ "name": "Cog", "from": [5.5, 5, 11], "to": [10.5, 6, 14], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 5.5, 13]}, "faces": { "north": {"uv": [6, 15, 11, 16], "texture": "#2"}, @@ -61,4 +63,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/handheld_worldshaper/item.json b/src/main/resources/assets/create/models/item/handheld_worldshaper/item.json index 9b4f955702..557adf2f7e 100644 --- a/src/main/resources/assets/create/models/item/handheld_worldshaper/item.json +++ b/src/main/resources/assets/create/models/item/handheld_worldshaper/item.json @@ -11,6 +11,7 @@ "name": "Rod Back Cap", "from": [6.5, 4, 14], "to": [9.5, 7, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 5.5, 8]}, "faces": { "north": {"uv": [0, 0, 3, 3], "texture": "#0"}, @@ -25,6 +26,7 @@ "name": "Rod Back Cap", "from": [7, 4.5, 15], "to": [9, 6.5, 17], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 5.5, 8]}, "faces": { "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, @@ -65,6 +67,7 @@ "name": "Connector", "from": [5.75, 4, 6], "to": [10.25, 8, 8], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 4, 8]}, "faces": { "north": {"uv": [5, 0, 9.5, 4], "texture": "#0"}, @@ -79,6 +82,7 @@ "name": "Connector", "from": [5.75, 4, 8], "to": [10.25, 6, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "x", "origin": [8, 4, 8]}, "faces": { "north": {"uv": [0, 0, 4.5, 2], "texture": "#0"}, @@ -107,6 +111,7 @@ "name": "Grip", "from": [7.1, 1, 12], "to": [8.9, 5, 15], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 14]}, "faces": { "north": {"uv": [5, 7, 6.8, 11], "texture": "#1"}, @@ -121,6 +126,7 @@ "name": "Trigger", "from": [7.4, 3, 11], "to": [8.6, 6, 13], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 14]}, "faces": { "north": {"uv": [6, 4, 7, 7], "texture": "#3_0"}, @@ -135,6 +141,7 @@ "name": "Scope", "from": [7.5, 7.5, 5.5], "to": [8.5, 8.5, 10.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 4]}, "faces": { "north": {"uv": [0, 0, 1, 1], "texture": "#1"}, @@ -238,4 +245,4 @@ "children": [11, 12] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/potato_cannon/cog.json b/src/main/resources/assets/create/models/item/potato_cannon/cog.json index 023fd8b88c..7f2cb673f2 100644 --- a/src/main/resources/assets/create/models/item/potato_cannon/cog.json +++ b/src/main/resources/assets/create/models/item/potato_cannon/cog.json @@ -39,6 +39,7 @@ "name": "Cog", "from": [7.5, 6, 6.5], "to": [8.5, 11, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8.5, 7.5]}, "faces": { "north": {"uv": [6.5, 9.75, 9, 10], "rotation": 90, "texture": "#1"}, @@ -53,6 +54,7 @@ "name": "Cog", "from": [5.5, 8, 6.5], "to": [10.5, 9, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "z", "origin": [8, 8.5, 7.5]}, "faces": { "north": {"uv": [6.5, 9.75, 9, 10], "texture": "#1"}, @@ -114,4 +116,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/potato_cannon/item.json b/src/main/resources/assets/create/models/item/potato_cannon/item.json index a7388ac313..37b7f4cc28 100644 --- a/src/main/resources/assets/create/models/item/potato_cannon/item.json +++ b/src/main/resources/assets/create/models/item/potato_cannon/item.json @@ -70,6 +70,7 @@ { "from": [6.5, 4.5, 8.5], "to": [9.5, 7.5, 14.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "z", "origin": [8, 6, 11.5]}, "faces": { "north": {"uv": [3, 6, 4.5, 7.5], "rotation": 90, "texture": "#1"}, diff --git a/src/main/resources/assets/create/models/item/wand_of_symmetry/bits.json b/src/main/resources/assets/create/models/item/wand_of_symmetry/bits.json index bf6751f712..e8f90ba437 100644 --- a/src/main/resources/assets/create/models/item/wand_of_symmetry/bits.json +++ b/src/main/resources/assets/create/models/item/wand_of_symmetry/bits.json @@ -13,9 +13,10 @@ "elements": [ { "name": "Square North", - "from": [ 7.5, 24.0, 4.0 ], - "to": [ 8.5, 25.0, 5.0 ], + "from": [ 7.5, 24.0, 4.0 ], + "to": [ 8.5, 25.0, 5.0 ], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": { "origin": [ 9.0, 24.0, 5.0 ], "axis": "x", "angle": 45.0 }, "faces": { "north": { "texture": "#3", "uv": [ 2.0, 2.0, 3.0, 3.0 ] }, @@ -28,9 +29,10 @@ }, { "name": "Square South", - "from": [ 7.5, 24.0, 10.0 ], - "to": [ 8.5, 25.0, 11.0 ], + "from": [ 7.5, 24.0, 10.0 ], + "to": [ 8.5, 25.0, 11.0 ], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": { "origin": [ 13.0, 24.0, 11.0 ], "axis": "x", "angle": 45.0 }, "faces": { "north": { "texture": "#3", "uv": [ 2.0, 2.0, 3.0, 3.0 ] }, @@ -43,9 +45,10 @@ }, { "name": "Square West", - "from": [ 11.5, 25.5, 7.5 ], - "to": [ 12.5, 26.5, 8.5 ], + "from": [ 11.5, 25.5, 7.5 ], + "to": [ 12.5, 26.5, 8.5 ], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": { "origin": [ 13.0, 24.0, 11.0 ], "axis": "z", "angle": 45.0 }, "faces": { "north": { "texture": "#3", "uv": [ 2.0, 2.0, 3.0, 3.0 ] }, @@ -58,9 +61,10 @@ }, { "name": "Square East", - "from": [ 7.5, 29.5, 7.5 ], - "to": [ 8.5, 30.5, 8.5 ], + "from": [ 7.5, 29.5, 7.5 ], + "to": [ 8.5, 30.5, 8.5 ], "shade": false, + "forge_data": {"calculate_normals": true}, "rotation": { "origin": [ 13.0, 24.0, 11.0 ], "axis": "z", "angle": 45.0 }, "faces": { "north": { "texture": "#3", "uv": [ 2.0, 2.0, 3.0, 3.0 ] }, @@ -72,4 +76,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/wand_of_symmetry/item.json b/src/main/resources/assets/create/models/item/wand_of_symmetry/item.json index 530067fc52..745d4acc48 100644 --- a/src/main/resources/assets/create/models/item/wand_of_symmetry/item.json +++ b/src/main/resources/assets/create/models/item/wand_of_symmetry/item.json @@ -25,6 +25,7 @@ "name": "Rod Bottom Core", "from": [6.5, 7, 6.5], "to": [9.5, 17, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [5, 6, 8, 16], "texture": "#6"}, @@ -52,6 +53,7 @@ "name": "Rod Top Core", "from": [6.5, 27, 6.5], "to": [9.5, 30, 9.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [8, 1, 11, 4], "texture": "#6"}, @@ -123,4 +125,4 @@ "translation": [0, -5, 0] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/wrench/gear.json b/src/main/resources/assets/create/models/item/wrench/gear.json index 05ffe56655..c442818c51 100644 --- a/src/main/resources/assets/create/models/item/wrench/gear.json +++ b/src/main/resources/assets/create/models/item/wrench/gear.json @@ -24,6 +24,7 @@ "name": "Cog", "from": [8.5, 7, 6], "to": [9.5, 8, 10], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [9, 7, 8]}, "faces": { "north": {"uv": [10, 14, 12, 16], "texture": "#5"}, @@ -52,6 +53,7 @@ "name": "Cog", "from": [7, 7, 7.5], "to": [11, 8, 8.5], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [9, 7, 8]}, "faces": { "north": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"}, @@ -63,4 +65,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/item/wrench/item.json b/src/main/resources/assets/create/models/item/wrench/item.json index 9c89b0ff6e..1507d8f730 100644 --- a/src/main/resources/assets/create/models/item/wrench/item.json +++ b/src/main/resources/assets/create/models/item/wrench/item.json @@ -37,6 +37,7 @@ "name": "axle", "from": [8.35355, 5, 7.14645], "to": [9.35355, 12, 8.14645], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": -45, "axis": "y", "origin": [8.5, 11, 8]}, "faces": { "north": {"uv": [0, 0, 2, 14], "texture": "#5"}, @@ -93,6 +94,7 @@ "name": "gear case", "from": [7.5, 6, 7], "to": [9.5, 7, 9], + "forge_data": {"calculate_normals": true}, "rotation": {"angle": 45, "axis": "y", "origin": [8.5, 11, 8]}, "faces": { "north": {"uv": [12, 12, 16, 14], "texture": "#5"}, @@ -144,4 +146,4 @@ "children": [0, 1, 2, 3, 4, 5, 6] } ] -} \ No newline at end of file +} From 42b1e19fc889f0750f612981212cc10f76ad796c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 22 Mar 2024 08:49:04 -0700 Subject: [PATCH 20/35] Light work - Track the min/max sections contraptions reported themselves in - When the current min/max sections don't match, invoke the notifier - Track the min/max block positions contraptions collected light from - When the current min/max positions don't match, re-collect all light - Invalidate light before collecting --- .../render/ContraptionVisual.java | 114 +++++++++++++----- 1 file changed, 87 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index 4ce2d24e8f..b82288e3d4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -47,15 +47,19 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import net.minecraftforge.client.model.data.ModelData; public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LitVisual { + protected static final int LIGHT_PADDING = 1; + protected final VisualEmbedding embedding; - private final List> children = new ArrayList<>(); - private final List actors = new ArrayList<>(); - private final PlanMap dynamicVisuals = new PlanMap<>(); - private final PlanMap tickableVisuals = new PlanMap<>(); - private VirtualRenderWorld virtualRenderWorld; - private Notifier notifier; - private Model model; - private TransformedInstance structure; + protected final List> children = new ArrayList<>(); + protected final List actors = new ArrayList<>(); + protected final PlanMap dynamicVisuals = new PlanMap<>(); + protected final PlanMap tickableVisuals = new PlanMap<>(); + protected VirtualRenderWorld virtualRenderWorld; + protected Model model; + protected TransformedInstance structure; + protected Notifier notifier; + protected long minSection, maxSection; + protected long minBlock, maxBlock; private final PoseStack contraptionMatrix = new PoseStack(); @@ -171,7 +175,16 @@ public class ContraptionVisual extends Abst var partialTick = context.partialTick(); setEmbeddingMatrices(partialTick); - // TODO: re-collect light if needed + if (hasMovedSections()) { + notifier.notifySectionsChanged(); + } + + if (hasMovedBlocks()) { + // TODO: incremental light collection + // TODO: optimize light collection for very large contraptions + // by only collecting cuboids that contain faces + updateLight(); + } } private void setEmbeddingMatrices(float partialTick) { @@ -188,42 +201,73 @@ public class ContraptionVisual extends Abst @Override public void updateLight() { + embedding.invalidateLight(); // FIXME: Some blocks (e.g. large waterwheels) extend well beyond their actual block // and might have lighting issues here var boundingBox = entity.getBoundingBox(); - int minX = Mth.floor(boundingBox.minX) - 1; - int minY = Mth.floor(boundingBox.minY) - 1; - int minZ = Mth.floor(boundingBox.minZ) - 1; - int sizeX = Mth.ceil(boundingBox.maxX) - minX + 2; - int sizeY = Mth.ceil(boundingBox.maxY) - minY + 2; - int sizeZ = Mth.ceil(boundingBox.maxZ) - minZ + 2; + int minX = minLight(boundingBox.minX); + int minY = minLight(boundingBox.minY); + int minZ = minLight(boundingBox.minZ); + int maxX = maxLight(boundingBox.maxX); + int maxY = maxLight(boundingBox.maxY); + int maxZ = maxLight(boundingBox.maxZ); - embedding.collectLight(level, minX, minY, minZ, sizeX, sizeY, sizeZ); + minBlock = BlockPos.asLong(minX, minY, minZ); + maxBlock = BlockPos.asLong(maxX, maxY, maxZ); + + embedding.collectLight(level, minX, minY, minZ, maxX - minX, maxY - minY, maxZ - minZ); } @Override public void collectLightSections(LongConsumer consumer) { var boundingBox = entity.getBoundingBox(); - int minX = Mth.floor(boundingBox.minX) - 1; - int minY = Mth.floor(boundingBox.minY) - 1; - int minZ = Mth.floor(boundingBox.minZ) - 1; - int sizeXChunks = SectionPos.blockToSectionCoord(Mth.ceil(boundingBox.maxX) - minX + 2) + 1; - int sizeYChunks = SectionPos.blockToSectionCoord(Mth.ceil(boundingBox.maxY) - minY + 2) + 1; - int sizeZChunks = SectionPos.blockToSectionCoord(Mth.ceil(boundingBox.maxZ) - minZ + 2) + 1; + var minSectionX = minLightSection(boundingBox.minX); + var minSectionY = minLightSection(boundingBox.minY); + var minSectionZ = minLightSection(boundingBox.minZ); + int maxSectionX = maxLightSection(boundingBox.maxX); + int maxSectionY = maxLightSection(boundingBox.maxY); + int maxSectionZ = maxLightSection(boundingBox.maxZ); - var base = SectionPos.asLong(SectionPos.blockToSectionCoord(minX), SectionPos.blockToSectionCoord(minY), SectionPos.blockToSectionCoord(minZ)); + minSection = SectionPos.asLong(minSectionX, minSectionY, minSectionZ); + maxSection = SectionPos.asLong(maxSectionX, maxSectionY, maxSectionZ); - for (int x = 0; x < sizeXChunks; x++) { - for (int y = 0; y < sizeYChunks; y++) { - for (int z = 0; z < sizeZChunks; z++) { - consumer.accept(SectionPos.offset(base, x, y, z)); + for (int x = 0; x <= maxSectionX - minSectionX; x++) { + for (int y = 0; y <= maxSectionY - minSectionY; y++) { + for (int z = 0; z <= maxSectionZ - minSectionZ; z++) { + consumer.accept(SectionPos.offset(minSection, x, y, z)); } } } } + protected boolean hasMovedBlocks() { + var boundingBox = entity.getBoundingBox(); + + int minX = minLight(boundingBox.minX); + int minY = minLight(boundingBox.minY); + int minZ = minLight(boundingBox.minZ); + int maxX = maxLight(boundingBox.maxX); + int maxY = maxLight(boundingBox.maxY); + int maxZ = maxLight(boundingBox.maxZ); + + return minBlock != BlockPos.asLong(minX, minY, minZ) || maxBlock != BlockPos.asLong(maxX, maxY, maxZ); + } + + protected boolean hasMovedSections() { + var boundingBox = entity.getBoundingBox(); + + var minSectionX = minLightSection(boundingBox.minX); + var minSectionY = minLightSection(boundingBox.minY); + var minSectionZ = minLightSection(boundingBox.minZ); + int maxSectionX = maxLightSection(boundingBox.maxX); + int maxSectionY = maxLightSection(boundingBox.maxY); + int maxSectionZ = maxLightSection(boundingBox.maxZ); + + return minSection != SectionPos.asLong(minSectionX, minSectionY, minSectionZ) || maxSection != SectionPos.asLong(maxSectionX, maxSectionY, maxSectionZ); + } + @Override public void initLightSectionNotifier(Notifier notifier) { this.notifier = notifier; @@ -243,4 +287,20 @@ public class ContraptionVisual extends Abst structure.delete(); } } + + public static int minLight(double aabbPos) { + return Mth.floor(aabbPos) - LIGHT_PADDING; + } + + public static int maxLight(double aabbPos) { + return Mth.ceil(aabbPos) + LIGHT_PADDING; + } + + public static int minLightSection(double aabbPos) { + return SectionPos.blockToSectionCoord(minLight(aabbPos)); + } + + public static int maxLightSection(double aabbPos) { + return SectionPos.blockToSectionCoord(maxLight(aabbPos)); + } } From 26074dc3dfd8729173bda3226760e143b7f54bd4 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 23 Mar 2024 14:13:53 -0500 Subject: [PATCH 21/35] Cut it out - Remove CutoutPartial - Set render_type in models than need cutout - Fix TrackVisual going invisible when renderers reload - Fix TrackVisual not getting re-lit in some cases - Bump flywheel version --- gradle.properties | 2 +- .../com/simibubi/create/AllPartialModels.java | 11 +- .../content/trains/track/TrackVisual.java | 85 ++++++++---- .../foundation/render/CutoutPartial.java | 126 ------------------ .../models/block/encased_fan/propeller.json | 1 + .../block/mechanical_harvester/blade.json | 1 + .../models/block/mechanical_mixer/head.json | 5 +- .../models/block/toolbox/lid/brown.json | 5 +- .../assets/create/models/block/track/tie.json | 3 +- 9 files changed, 71 insertions(+), 168 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java diff --git a/gradle.properties b/gradle.properties index 6111c45115..c420c269d2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-66 +flywheel_version = 1.0.0-alpha-67 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index 9d6c2b36af..e3c774b36a 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -8,7 +8,6 @@ import java.util.Map; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.content.fluids.FluidTransportBehaviour; -import com.simibubi.create.foundation.render.CutoutPartial; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; @@ -36,7 +35,7 @@ public class AllPartialModels { ANDESITE_BELT_COVER_Z = block("belt_cover/andesite_belt_cover_z"), BRASS_BELT_COVER_Z = block("belt_cover/brass_belt_cover_z"), - ENCASED_FAN_INNER = cutoutBlock("encased_fan/propeller"), HAND_CRANK_HANDLE = block("hand_crank/handle"), + ENCASED_FAN_INNER = block("encased_fan/propeller"), HAND_CRANK_HANDLE = block("hand_crank/handle"), MECHANICAL_PRESS_HEAD = block("mechanical_press/head"), MECHANICAL_MIXER_POLE = block("mechanical_mixer/pole"), MECHANICAL_MIXER_HEAD = block("mechanical_mixer/head"), MECHANICAL_CRAFTER_LID = block("mechanical_crafter/lid"), @@ -52,7 +51,7 @@ public class AllPartialModels { GAUGE_INDICATOR = block("gauge/indicator"), GAUGE_HEAD_SPEED = block("gauge/speedometer/head"), GAUGE_HEAD_STRESS = block("gauge/stressometer/head"), BEARING_TOP = block("bearing/top"), BEARING_TOP_WOODEN = block("bearing/top_wooden"), DRILL_HEAD = block("mechanical_drill/head"), - HARVESTER_BLADE = cutoutBlock("mechanical_harvester/blade"), DEPLOYER_POLE = block("deployer/pole"), + HARVESTER_BLADE = block("mechanical_harvester/blade"), DEPLOYER_POLE = block("deployer/pole"), DEPLOYER_HAND_POINTING = block("deployer/hand_pointing"), DEPLOYER_HAND_PUNCHING = block("deployer/hand_punching"), DEPLOYER_HAND_HOLDING = block("deployer/hand_holding"), ANALOG_LEVER_HANDLE = block("analog_lever/handle"), @@ -204,7 +203,7 @@ public class AllPartialModels { PIPE_ATTACHMENTS.put(type, map); } for (DyeColor color : DyeColor.values()) - TOOLBOX_LIDS.put(color, cutoutBlock("toolbox/lid/" + Lang.asId(color.name()))); + TOOLBOX_LIDS.put(color, block("toolbox/lid/" + Lang.asId(color.name()))); for (Direction d : Iterate.horizontalDirections) METAL_GIRDER_BRACKETS.put(d, block("metal_girder/bracket_" + Lang.asId(d.name()))); for (int i = 0; i < 8; i++) @@ -223,10 +222,6 @@ public class AllPartialModels { return new PartialModel(Create.asResource("block/" + path)); } - private static PartialModel cutoutBlock(String path) { - return new CutoutPartial(Create.asResource("block/" + path)); - } - private static PartialModel entity(String path) { return new PartialModel(Create.asResource("entity/" + path)); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java index 84b9e65580..535f34ee68 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java @@ -1,16 +1,14 @@ package com.simibubi.create.content.trains.track; -import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.function.Consumer; +import java.util.function.LongConsumer; import javax.annotation.Nullable; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.box.Box; -import com.jozufozu.flywheel.lib.box.MutableBox; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; @@ -25,6 +23,7 @@ import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; public class TrackVisual extends AbstractBlockEntityVisual { @@ -34,24 +33,25 @@ public class TrackVisual extends AbstractBlockEntityVisual { super(context, track); } + @Override + public void init(float partialTick) { + visuals = blockEntity.connections.values() + .stream() + .map(this::createInstance) + .filter(Objects::nonNull) + .toList(); + + super.init(partialTick); + } + @Override public void update(float pt) { if (blockEntity.connections.isEmpty()) return; _delete(); - visuals = blockEntity.connections.values() - .stream() - .map(this::createInstance) - .filter(Objects::nonNull) - .toList(); - } - - public Box getVolume() { - List out = new ArrayList<>(); - out.addAll(blockEntity.connections.keySet()); - out.addAll(blockEntity.connections.keySet()); - return MutableBox.containingAll(out); + init(pt); + notifier.notifySectionsChanged(); } @Override @@ -75,6 +75,30 @@ public class TrackVisual extends AbstractBlockEntityVisual { visuals.forEach(BezierTrackVisual::delete); } + @Override + public void collectLightSections(LongConsumer consumer) { + if (blockEntity.connections.isEmpty()) { + return; + } + int minX = Integer.MAX_VALUE; + int minY = Integer.MAX_VALUE; + int minZ = Integer.MAX_VALUE; + int maxX = Integer.MIN_VALUE; + int maxY = Integer.MIN_VALUE; + int maxZ = Integer.MIN_VALUE; + for (BlockPos pos : blockEntity.connections.keySet()) { + minX = Math.min(minX, pos.getX()); + minY = Math.min(minY, pos.getY()); + minZ = Math.min(minZ, pos.getZ()); + maxX = Math.max(maxX, pos.getX()); + maxY = Math.max(maxY, pos.getY()); + maxZ = Math.max(maxZ, pos.getZ()); + } + SectionPos.betweenClosedStream(SectionPos.blockToSectionCoord(minX), SectionPos.blockToSectionCoord(minY), SectionPos.blockToSectionCoord(minZ), SectionPos.blockToSectionCoord(maxX), SectionPos.blockToSectionCoord(maxY), SectionPos.blockToSectionCoord(maxZ)) + .mapToLong(SectionPos::asLong) + .forEach(consumer); + } + @Override public void collectCrumblingInstances(Consumer consumer) { if (visuals == null) @@ -126,15 +150,15 @@ public class TrackVisual extends AbstractBlockEntityVisual { var modelIndex = i - 1; ties[modelIndex].setTransform(pose) - .mulPose(segment.tieTransform.pose()) - .mulNormal(segment.tieTransform.normal()); + .transform(segment.tieTransform) + .setChanged(); tiesLightPos[modelIndex] = segment.lightPosition.offset(tePosition); for (boolean first : Iterate.trueAndFalse) { Pose transform = segment.railTransforms.get(first); (first ? this.left : this.right)[modelIndex].setTransform(pose) - .mulPose(transform.pose()) - .mulNormal(transform.normal()); + .transform(transform) + .setChanged(); (first ? leftLightPos : rightLightPos)[modelIndex] = segment.lightPosition.offset(tePosition); } } @@ -155,11 +179,14 @@ public class TrackVisual extends AbstractBlockEntityVisual { void updateLight() { for (int i = 0; i < ties.length; i++) - ties[i].updateLight(level, tiesLightPos[i]); + ties[i].updateLight(level, tiesLightPos[i]) + .setChanged(); for (int i = 0; i < left.length; i++) - left[i].updateLight(level, leftLightPos[i]); + left[i].updateLight(level, leftLightPos[i]) + .setChanged(); for (int i = 0; i < right.length; i++) - right[i].updateLight(level, rightLightPos[i]); + right[i].updateLight(level, rightLightPos[i]) + .setChanged(); if (girder != null) girder.updateLight(); } @@ -208,15 +235,15 @@ public class TrackVisual extends AbstractBlockEntityVisual { for (boolean first : Iterate.trueAndFalse) { Pose beamTransform = segment.beams.get(first); beams.get(first)[modelIndex].setTransform(pose) - .mulPose(beamTransform.pose()) - .mulNormal(beamTransform.normal()); + .transform(beamTransform) + .setChanged(); for (boolean top : Iterate.trueAndFalse) { Pose beamCapTransform = segment.beamCaps.get(top) .get(first); beamCaps.get(top) .get(first)[modelIndex].setTransform(pose) - .mulPose(beamCapTransform.pose()) - .mulNormal(beamCapTransform.normal()); + .transform(beamCapTransform) + .setChanged(); } } } @@ -238,11 +265,13 @@ public class TrackVisual extends AbstractBlockEntityVisual { void updateLight() { beams.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(level, lightPos[i]); + arr[i].updateLight(level, lightPos[i]) + .setChanged(); }); beamCaps.forEach(c -> c.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(level, lightPos[i]); + arr[i].updateLight(level, lightPos[i]) + .setChanged(); })); } diff --git a/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java b/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java deleted file mode 100644 index 923b021455..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.simibubi.create.foundation.render; - -import java.util.List; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemOverrides; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.RandomSource; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.ChunkRenderTypeSet; -import net.minecraftforge.client.model.data.ModelData; - -public class CutoutPartial extends PartialModel { - public CutoutPartial(ResourceLocation modelLocation) { - super(modelLocation); - } - - @Override - protected void set(BakedModel bakedModel) { - super.set(new Wrapper(bakedModel)); - } - - private record Wrapper(BakedModel inner) implements BakedModel { - private static final ChunkRenderTypeSet CUTOUT = ChunkRenderTypeSet.of(RenderType.cutout()); - - @Override - public @NotNull List getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData data, @Nullable RenderType renderType) { - if (renderType == null) { - return inner.getQuads(state, side, rand, data, null); - } else if (renderType == RenderType.cutout()) { - return inner.getQuads(state, side, rand, data, renderType); - } else { - return List.of(); - } - } - - @Override - public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) { - return CUTOUT; - } - - @Override - public List getQuads(@Nullable BlockState pState, @Nullable Direction pDirection, RandomSource pRandom) { - return inner.getQuads(pState, pDirection, pRandom); - } - - @Override - public boolean useAmbientOcclusion(BlockState state) { - return inner.useAmbientOcclusion(state); - } - - @Override - public boolean useAmbientOcclusion(BlockState state, RenderType renderType) { - return inner.useAmbientOcclusion(state, renderType); - } - - @Override - public BakedModel applyTransform(ItemDisplayContext transformType, PoseStack poseStack, boolean applyLeftHandTransform) { - return inner.applyTransform(transformType, poseStack, applyLeftHandTransform); - } - - @Override - public @NotNull ModelData getModelData(@NotNull BlockAndTintGetter level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ModelData modelData) { - return inner.getModelData(level, pos, state, modelData); - } - - @Override - public TextureAtlasSprite getParticleIcon(@NotNull ModelData data) { - return inner.getParticleIcon(data); - } - - @Override - public List getRenderTypes(ItemStack itemStack, boolean fabulous) { - return inner.getRenderTypes(itemStack, fabulous); - } - - @Override - public List getRenderPasses(ItemStack itemStack, boolean fabulous) { - return inner.getRenderPasses(itemStack, fabulous); - } - - @Override - public boolean useAmbientOcclusion() { - return inner.useAmbientOcclusion(); - } - - @Override - public boolean isGui3d() { - return inner.isGui3d(); - } - - @Override - public boolean usesBlockLight() { - return inner.usesBlockLight(); - } - - @Override - public boolean isCustomRenderer() { - return inner.isCustomRenderer(); - } - - @Override - public TextureAtlasSprite getParticleIcon() { - return inner.getParticleIcon(); - } - - @Override - public ItemOverrides getOverrides() { - return inner.getOverrides(); - } - } -} diff --git a/src/main/resources/assets/create/models/block/encased_fan/propeller.json b/src/main/resources/assets/create/models/block/encased_fan/propeller.json index c149d9ab8f..d7a23a1506 100644 --- a/src/main/resources/assets/create/models/block/encased_fan/propeller.json +++ b/src/main/resources/assets/create/models/block/encased_fan/propeller.json @@ -5,6 +5,7 @@ "fan_blades": "create:block/fan_blades", "axis": "create:block/axis" }, + "render_type": "minecraft:cutout", "elements": [ { "name": "Shaft", diff --git a/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json b/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json index c3f0f8ab66..ab5eb93bea 100644 --- a/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json +++ b/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json @@ -5,6 +5,7 @@ "anvil": "minecraft:block/anvil", "andesite_casing_short": "create:block/andesite_casing_short" }, + "render_type": "minecraft:cutout", "elements": [ { "name": "Wheel", diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/head.json b/src/main/resources/assets/create/models/block/mechanical_mixer/head.json index 2e4744b639..e949ae1ff6 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/head.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/head.json @@ -5,7 +5,8 @@ "textures": { "6": "create:block/mixer_head" }, - "elements": [ + "render_type": "minecraft:cutout", + "elements": [ { "name": "MixerCenter", "from": [7, -4, 7], @@ -39,4 +40,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/toolbox/lid/brown.json b/src/main/resources/assets/create/models/block/toolbox/lid/brown.json index f352cd3961..62b9011110 100644 --- a/src/main/resources/assets/create/models/block/toolbox/lid/brown.json +++ b/src/main/resources/assets/create/models/block/toolbox/lid/brown.json @@ -5,7 +5,8 @@ "0": "create:block/toolbox/brown", "particle": "block/dark_oak_planks" }, - "elements": [ + "render_type": "minecraft:cutout", + "elements": [ { "from": [1, 6, 4], "to": [15, 9, 12], @@ -56,4 +57,4 @@ } ], "display": {} -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/tie.json b/src/main/resources/assets/create/models/block/track/tie.json index 3f199f4797..4278f784e5 100644 --- a/src/main/resources/assets/create/models/block/track/tie.json +++ b/src/main/resources/assets/create/models/block/track/tie.json @@ -2,5 +2,6 @@ "parent": "create:block/track/obj_track", "loader": "forge:obj", "flip_v": true, + "render_type": "minecraft:cutout_mipped", "model": "create:models/block/track/tie.obj" -} \ No newline at end of file +} From d28fd7e47ba46a94c3ff7225fc160f7ce5d5e79a Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 31 Mar 2024 17:19:40 -0700 Subject: [PATCH 22/35] Touchups - Bump flywheel version and remove #shouldReset - Water wheels and belt tunnels now properly handle updates without resetting - Fix flaps going crazy --- gradle.properties | 2 +- .../contraptions/render/ActorVisual.java | 5 -- .../kinetics/waterwheel/WaterWheelVisual.java | 49 ++++++++++++--- .../logistics/tunnel/BeltTunnelVisual.java | 63 +++++++++++-------- .../assets/create/flywheel/instance/flap.vert | 4 +- 5 files changed, 80 insertions(+), 43 deletions(-) diff --git a/gradle.properties b/gradle.properties index c420c269d2..e23efe4034 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-67 +flywheel_version = 1.0.0-alpha-78 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java index 1742fb2251..f2f003061d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java @@ -35,11 +35,6 @@ public abstract class ActorVisual implements Visual { public void update(float partialTick) { } - @Override - public boolean shouldReset() { - return false; - } - protected abstract void _delete(); @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java index 477d7d74f3..9e6684e6f2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java @@ -1,11 +1,16 @@ package com.simibubi.create.content.kinetics.waterwheel; +import java.util.function.Consumer; + +import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.ModelCache; import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; +import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; import net.minecraft.client.resources.model.BakedModel; @@ -13,16 +18,16 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; import net.minecraft.world.level.block.state.BlockState; -public class WaterWheelVisual extends SingleRotatingVisual { +public class WaterWheelVisual extends KineticBlockEntityVisual { private static final ModelCache MODEL_CACHE = new ModelCache<>(WaterWheelVisual::createModel); protected final boolean large; - protected final WaterWheelModelKey key; + protected BlockState lastMaterial; + protected RotatingInstance rotatingModel; public WaterWheelVisual(VisualizationContext context, T blockEntity, boolean large) { super(context, blockEntity); this.large = large; - key = new WaterWheelModelKey(large, blockState, blockEntity.material); } public static WaterWheelVisual standard(VisualizationContext context, T blockEntity) { @@ -34,13 +39,41 @@ public class WaterWheelVisual extends SingleRot } @Override - public boolean shouldReset() { - return super.shouldReset() || key.material() != blockEntity.material; + public void init(float pt) { + setupInstance(); + super.init(pt); + } + + private void setupInstance() { + lastMaterial = blockEntity.material; + rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, MODEL_CACHE.get(new WaterWheelModelKey(large, blockState, blockEntity.material))) + .createInstance(); + setup(rotatingModel); } @Override - protected Model model() { - return MODEL_CACHE.get(key); + public void update(float pt) { + if (lastMaterial != blockEntity.material) { + rotatingModel.delete(); + setupInstance(); + } + + updateRotation(rotatingModel); + } + + @Override + public void updateLight() { + relight(pos, rotatingModel); + } + + @Override + protected void _delete() { + rotatingModel.delete(); + } + + @Override + public void collectCrumblingInstances(Consumer consumer) { + consumer.accept(rotatingModel); } private static Model createModel(WaterWheelModelKey key) { diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index c1c63b2876..711e11e69d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -17,7 +17,6 @@ import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.core.Direction; @@ -25,35 +24,35 @@ import net.minecraft.world.level.LightLayer; public class BeltTunnelVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { - private final Map> tunnelFlaps; + private final Map> tunnelFlaps = new EnumMap<>(Direction.class); public BeltTunnelVisual(VisualizationContext context, BeltTunnelBlockEntity blockEntity) { super(context, blockEntity); + } - tunnelFlaps = new EnumMap<>(Direction.class); + private void setupFlaps(float partialTick) { + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); + int blockLight = level.getBrightness(LightLayer.BLOCK, pos); + int skyLight = level.getBrightness(LightLayer.SKY, pos); - int blockLight = level.getBrightness(LightLayer.BLOCK, pos); - int skyLight = level.getBrightness(LightLayer.SKY, pos); + blockEntity.flaps.forEach((direction, flapValue) -> { - blockEntity.flaps.forEach((direction, flapValue) -> { + float flapness = flapValue.getValue(partialTick); - float flapness = flapValue.getValue(AnimationTickHolder.getPartialTicks()); + float horizontalAngle = direction.getOpposite().toYRot(); - float horizontalAngle = direction.getOpposite().toYRot(); + float flapScale = direction.getAxis() == Direction.Axis.X ? 1 : -1; - float flapScale = direction.getAxis() == Direction.Axis.X ? 1 : -1; + ArrayList flaps = new ArrayList<>(4); - ArrayList flaps = new ArrayList<>(4); + for (int segment = 0; segment <= 3; segment++) { + float intensity = segment == 3 ? 1.5f : segment + 1; + float segmentOffset = -3.05f / 16f * segment + 0.075f / 16f; - for (int segment = 0; segment <= 3; segment++) { - float intensity = segment == 3 ? 1.5f : segment + 1; - float segmentOffset = -3.05f / 16f * segment + 0.075f / 16f; + FlapInstance key = model.createInstance(); - FlapInstance key = model.createInstance(); - - key.setPosition(getVisualPosition()) + key.setPosition(getVisualPosition()) .setSegmentOffset(segmentOffset, 0, 0) .setBlockLight(blockLight) .setSkyLight(skyLight) @@ -64,19 +63,29 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual { LerpedFloat lerpedFloat = blockEntity.flaps.get(direction); diff --git a/src/main/resources/assets/create/flywheel/instance/flap.vert b/src/main/resources/assets/create/flywheel/instance/flap.vert index ec8928a457..2ad5e1226e 100644 --- a/src/main/resources/assets/create/flywheel/instance/flap.vert +++ b/src/main/resources/assets/create/flywheel/instance/flap.vert @@ -18,8 +18,8 @@ float getFlapAngle(float flapness, float intensity, float scale) { void flw_instanceVertex(in FlwInstance flap) { float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale); - vec4 orientation = quaternion(vec3(0., 1., 0.), -flap.horizontalAngle); - vec4 flapRotation = quaternion(vec3(1., 0., 0.), flapAngle); + vec4 orientation = quaternionDegrees(vec3(0., 1., 0.), -flap.horizontalAngle); + vec4 flapRotation = quaternionDegrees(vec3(1., 0., 0.), flapAngle); vec3 rotated = rotateByQuaternion(flw_vertexPos.xyz - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset; From 7d265eb2c14b9da4a505819de581eba138b6f6da Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 16 May 2024 16:35:18 -0700 Subject: [PATCH 23/35] Rename instance to visual in builders --- .../simibubi/create/AllBlockEntityTypes.java | 116 +++++++++--------- .../com/simibubi/create/AllEntityTypes.java | 8 +- .../compat/jei/GhostIngredientHandler.java | 1 - .../elevator/ElevatorPulleyVisual.java | 2 +- .../gantry/GantryCarriageVisual.java | 2 +- .../render/ContraptionProgram.java | 6 - .../cannon/SchematicannonRenderer.java | 2 +- .../data/CreateBlockEntityBuilder.java | 32 ++--- .../foundation/data/CreateEntityBuilder.java | 30 +++-- .../utility/ghost/GhostBlockRenderer.java | 2 +- 10 files changed, 96 insertions(+), 105 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index c7c3231af3..790445320b 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -220,7 +220,7 @@ public class AllBlockEntityTypes { // Schematics public static final BlockEntityEntry SCHEMATICANNON = REGISTRATE .blockEntity("schematicannon", SchematicannonBlockEntity::new) - .instance(() -> SchematicannonVisual::new) + .visual(() -> SchematicannonVisual::new) .validBlocks(AllBlocks.SCHEMATICANNON) .renderer(() -> SchematicannonRenderer::new) .register(); @@ -233,28 +233,28 @@ public class AllBlockEntityTypes { // Kinetics public static final BlockEntityEntry BRACKETED_KINETIC = REGISTRATE .blockEntity("simple_kinetic", BracketedKineticBlockEntity::new) - .instance(() -> BracketedKineticBlockEntityVisual::new, false) + .visual(() -> BracketedKineticBlockEntityVisual::new, false) .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL) .renderer(() -> BracketedKineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry MOTOR = REGISTRATE .blockEntity("motor", CreativeMotorBlockEntity::new) - .instance(() -> HalfShaftVisual::new, false) + .visual(() -> HalfShaftVisual::new, false) .validBlocks(AllBlocks.CREATIVE_MOTOR) .renderer(() -> CreativeMotorRenderer::new) .register(); public static final BlockEntityEntry GEARBOX = REGISTRATE .blockEntity("gearbox", GearboxBlockEntity::new) - .instance(() -> GearboxVisual::new, false) + .visual(() -> GearboxVisual::new, false) .validBlocks(AllBlocks.GEARBOX) .renderer(() -> GearboxRenderer::new) .register(); public static final BlockEntityEntry ENCASED_SHAFT = REGISTRATE .blockEntity("encased_shaft", KineticBlockEntity::new) - .instance(() -> ShaftVisual::new, false) + .visual(() -> ShaftVisual::new, false) .validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE, AllBlocks.METAL_GIRDER_ENCASED_SHAFT) .renderer(() -> ShaftRenderer::new) @@ -262,28 +262,28 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry ENCASED_COGWHEEL = REGISTRATE .blockEntity("encased_cogwheel", SimpleKineticBlockEntity::new) - .instance(() -> EncasedCogVisual::small, false) + .visual(() -> EncasedCogVisual::small, false) .validBlocks(AllBlocks.ANDESITE_ENCASED_COGWHEEL, AllBlocks.BRASS_ENCASED_COGWHEEL) .renderer(() -> EncasedCogRenderer::small) .register(); public static final BlockEntityEntry ENCASED_LARGE_COGWHEEL = REGISTRATE .blockEntity("encased_large_cogwheel", SimpleKineticBlockEntity::new) - .instance(() -> EncasedCogVisual::large, false) + .visual(() -> EncasedCogVisual::large, false) .validBlocks(AllBlocks.ANDESITE_ENCASED_LARGE_COGWHEEL, AllBlocks.BRASS_ENCASED_LARGE_COGWHEEL) .renderer(() -> EncasedCogRenderer::large) .register(); public static final BlockEntityEntry ADJUSTABLE_CHAIN_GEARSHIFT = REGISTRATE .blockEntity("adjustable_chain_gearshift", ChainGearshiftBlockEntity::new) - .instance(() -> ShaftVisual::new, false) + .visual(() -> ShaftVisual::new, false) .validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT) .renderer(() -> ShaftRenderer::new) .register(); public static final BlockEntityEntry ENCASED_FAN = REGISTRATE .blockEntity("encased_fan", EncasedFanBlockEntity::new) - .instance(() -> FanVisual::new, false) + .visual(() -> FanVisual::new, false) .validBlocks(AllBlocks.ENCASED_FAN) .renderer(() -> EncasedFanRenderer::new) .register(); @@ -296,35 +296,35 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry CLUTCH = REGISTRATE .blockEntity("clutch", ClutchBlockEntity::new) - .instance(() -> SplitShaftVisual::new, false) + .visual(() -> SplitShaftVisual::new, false) .validBlocks(AllBlocks.CLUTCH) .renderer(() -> SplitShaftRenderer::new) .register(); public static final BlockEntityEntry GEARSHIFT = REGISTRATE .blockEntity("gearshift", GearshiftBlockEntity::new) - .instance(() -> SplitShaftVisual::new, false) + .visual(() -> SplitShaftVisual::new, false) .validBlocks(AllBlocks.GEARSHIFT) .renderer(() -> SplitShaftRenderer::new) .register(); public static final BlockEntityEntry TURNTABLE = REGISTRATE .blockEntity("turntable", TurntableBlockEntity::new) - .instance(() -> SingleRotatingVisual::new, false) + .visual(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.TURNTABLE) .renderer(() -> KineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry HAND_CRANK = REGISTRATE .blockEntity("hand_crank", HandCrankBlockEntity::new) - .instance(() -> HandCrankVisual::new) + .visual(() -> HandCrankVisual::new) .validBlocks(AllBlocks.HAND_CRANK) .renderer(() -> HandCrankRenderer::new) .register(); public static final BlockEntityEntry VALVE_HANDLE = REGISTRATE .blockEntity("valve_handle", ValveHandleBlockEntity::new) - .instance(() -> HandCrankVisual::new) + .visual(() -> HandCrankVisual::new) .validBlocks(AllBlocks.COPPER_VALVE_HANDLE) .validBlocks(AllBlocks.DYED_VALVE_HANDLES.toArray()) .renderer(() -> HandCrankRenderer::new) @@ -332,28 +332,28 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry CUCKOO_CLOCK = REGISTRATE .blockEntity("cuckoo_clock", CuckooClockBlockEntity::new) - .instance(() -> HorizontalHalfShaftVisual::new) + .visual(() -> HorizontalHalfShaftVisual::new) .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) .renderer(() -> CuckooClockRenderer::new) .register(); public static final BlockEntityEntry GANTRY_SHAFT = REGISTRATE .blockEntity("gantry_shaft", GantryShaftBlockEntity::new) - .instance(() -> SingleRotatingVisual::new, false) + .visual(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.GANTRY_SHAFT) .renderer(() -> KineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry GANTRY_PINION = REGISTRATE .blockEntity("gantry_pinion", GantryCarriageBlockEntity::new) - .instance(() -> GantryCarriageVisual::new) + .visual(() -> GantryCarriageVisual::new) .validBlocks(AllBlocks.GANTRY_CARRIAGE) .renderer(() -> GantryCarriageRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_PUMP = REGISTRATE .blockEntity("mechanical_pump", PumpBlockEntity::new) - .instance(() -> PumpCogVisual::new) + .visual(() -> PumpCogVisual::new) .validBlocks(AllBlocks.MECHANICAL_PUMP) .renderer(() -> PumpRenderer::new) .register(); @@ -382,7 +382,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry FLUID_VALVE = REGISTRATE .blockEntity("fluid_valve", FluidValveBlockEntity::new) - .instance(() -> FluidValveVisual::new) + .visual(() -> FluidValveVisual::new) .validBlocks(AllBlocks.FLUID_VALVE) .renderer(() -> FluidValveRenderer::new) .register(); @@ -401,7 +401,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry HOSE_PULLEY = REGISTRATE .blockEntity("hose_pulley", HosePulleyBlockEntity::new) - .instance(() -> HosePulleyVisual::new) + .visual(() -> HosePulleyVisual::new) .validBlocks(AllBlocks.HOSE_PULLEY) .renderer(() -> HosePulleyRenderer::new) .register(); @@ -420,7 +420,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry BELT = REGISTRATE .blockEntity("belt", BeltBlockEntity::new) - .instance(() -> BeltVisual::new, BeltBlockEntity::shouldRenderNormally) + .visual(() -> BeltVisual::new, BeltBlockEntity::shouldRenderNormally) .validBlocks(AllBlocks.BELT) .renderer(() -> BeltRenderer::new) .register(); @@ -439,21 +439,21 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry ANDESITE_TUNNEL = REGISTRATE .blockEntity("andesite_tunnel", BeltTunnelBlockEntity::new) - .instance(() -> BeltTunnelVisual::new) + .visual(() -> BeltTunnelVisual::new) .validBlocks(AllBlocks.ANDESITE_TUNNEL) .renderer(() -> BeltTunnelRenderer::new) .register(); public static final BlockEntityEntry BRASS_TUNNEL = REGISTRATE .blockEntity("brass_tunnel", BrassTunnelBlockEntity::new) - .instance(() -> BeltTunnelVisual::new) + .visual(() -> BeltTunnelVisual::new) .validBlocks(AllBlocks.BRASS_TUNNEL) .renderer(() -> BeltTunnelRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_ARM = REGISTRATE .blockEntity("mechanical_arm", ArmBlockEntity::new) - .instance(() -> ArmVisual::new) + .visual(() -> ArmVisual::new) .validBlocks(AllBlocks.MECHANICAL_ARM) .renderer(() -> ArmRenderer::new) .register(); @@ -465,35 +465,35 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry MECHANICAL_PISTON = REGISTRATE .blockEntity("mechanical_piston", MechanicalPistonBlockEntity::new) - .instance(() -> ShaftVisual::new, false) + .visual(() -> ShaftVisual::new, false) .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) .renderer(() -> MechanicalPistonRenderer::new) .register(); public static final BlockEntityEntry WINDMILL_BEARING = REGISTRATE .blockEntity("windmill_bearing", WindmillBearingBlockEntity::new) - .instance(() -> BearingVisual::new) + .visual(() -> BearingVisual::new) .validBlocks(AllBlocks.WINDMILL_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_BEARING = REGISTRATE .blockEntity("mechanical_bearing", MechanicalBearingBlockEntity::new) - .instance(() -> BearingVisual::new) + .visual(() -> BearingVisual::new) .validBlocks(AllBlocks.MECHANICAL_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final BlockEntityEntry CLOCKWORK_BEARING = REGISTRATE .blockEntity("clockwork_bearing", ClockworkBearingBlockEntity::new) - .instance(() -> BearingVisual::new) + .visual(() -> BearingVisual::new) .validBlocks(AllBlocks.CLOCKWORK_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final BlockEntityEntry ROPE_PULLEY = REGISTRATE .blockEntity("rope_pulley", PulleyBlockEntity::new) - .instance(() -> RopePulleyVisual::new, false) + .visual(() -> RopePulleyVisual::new, false) .validBlocks(AllBlocks.ROPE_PULLEY) .renderer(() -> PulleyRenderer::new) .register(); @@ -518,7 +518,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry STICKER = REGISTRATE .blockEntity("sticker", StickerBlockEntity::new) - .instance(() -> StickerVisual::new, false) + .visual(() -> StickerVisual::new, false) .validBlocks(AllBlocks.STICKER) .renderer(() -> StickerRenderer::new) .register(); @@ -531,14 +531,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry DRILL = REGISTRATE .blockEntity("drill", DrillBlockEntity::new) - .instance(() -> DrillVisual::new, false) + .visual(() -> DrillVisual::new, false) .validBlocks(AllBlocks.MECHANICAL_DRILL) .renderer(() -> DrillRenderer::new) .register(); public static final BlockEntityEntry SAW = REGISTRATE .blockEntity("saw", SawBlockEntity::new) - .instance(() -> SawVisual::new) + .visual(() -> SawVisual::new) .validBlocks(AllBlocks.MECHANICAL_SAW) .renderer(() -> SawRenderer::new) .register(); @@ -558,7 +558,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry PORTABLE_STORAGE_INTERFACE = REGISTRATE .blockEntity("portable_storage_interface", PortableItemInterfaceBlockEntity::new) - .instance(() -> PSIVisual::new) + .visual(() -> PSIVisual::new) .validBlocks(AllBlocks.PORTABLE_STORAGE_INTERFACE) .renderer(() -> PortableStorageInterfaceRenderer::new) .register(); @@ -566,14 +566,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry PORTABLE_FLUID_INTERFACE = REGISTRATE .blockEntity("portable_fluid_interface", PortableFluidInterfaceBlockEntity::new) - .instance(() -> PSIVisual::new) + .visual(() -> PSIVisual::new) .validBlocks(AllBlocks.PORTABLE_FLUID_INTERFACE) .renderer(() -> PortableStorageInterfaceRenderer::new) .register(); public static final BlockEntityEntry STEAM_ENGINE = REGISTRATE .blockEntity("steam_engine", SteamEngineBlockEntity::new) - .instance(() -> SteamEngineVisual::new, false) + .visual(() -> SteamEngineVisual::new, false) .validBlocks(AllBlocks.STEAM_ENGINE) .renderer(() -> SteamEngineRenderer::new) .register(); @@ -586,28 +586,28 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry POWERED_SHAFT = REGISTRATE .blockEntity("powered_shaft", PoweredShaftBlockEntity::new) - .instance(() -> SingleRotatingVisual::new, false) + .visual(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.POWERED_SHAFT) .renderer(() -> KineticBlockEntityRenderer::new) .register(); public static final BlockEntityEntry FLYWHEEL = REGISTRATE .blockEntity("flywheel", FlywheelBlockEntity::new) - .instance(() -> FlywheelVisual::new, false) + .visual(() -> FlywheelVisual::new, false) .validBlocks(AllBlocks.FLYWHEEL) .renderer(() -> FlywheelRenderer::new) .register(); public static final BlockEntityEntry MILLSTONE = REGISTRATE .blockEntity("millstone", MillstoneBlockEntity::new) - .instance(() -> MillstoneCogVisual::new, false) + .visual(() -> MillstoneCogVisual::new, false) .validBlocks(AllBlocks.MILLSTONE) .renderer(() -> MillstoneRenderer::new) .register(); public static final BlockEntityEntry CRUSHING_WHEEL = REGISTRATE .blockEntity("crushing_wheel", CrushingWheelBlockEntity::new) - .instance(() -> SingleRotatingVisual::new, false) + .visual(() -> SingleRotatingVisual::new, false) .validBlocks(AllBlocks.CRUSHING_WHEEL) .renderer(() -> KineticBlockEntityRenderer::new) .register(); @@ -621,35 +621,35 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry WATER_WHEEL = REGISTRATE .blockEntity("water_wheel", WaterWheelBlockEntity::new) - .instance(() -> WaterWheelVisual::standard, false) + .visual(() -> WaterWheelVisual::standard, false) .validBlocks(AllBlocks.WATER_WHEEL) .renderer(() -> WaterWheelRenderer::standard) .register(); public static final BlockEntityEntry LARGE_WATER_WHEEL = REGISTRATE .blockEntity("large_water_wheel", LargeWaterWheelBlockEntity::new) - .instance(() -> WaterWheelVisual::large, false) + .visual(() -> WaterWheelVisual::large, false) .validBlocks(AllBlocks.LARGE_WATER_WHEEL) .renderer(() -> WaterWheelRenderer::large) .register(); public static final BlockEntityEntry MECHANICAL_PRESS = REGISTRATE .blockEntity("mechanical_press", MechanicalPressBlockEntity::new) - .instance(() -> PressVisual::new) + .visual(() -> PressVisual::new) .validBlocks(AllBlocks.MECHANICAL_PRESS) .renderer(() -> MechanicalPressRenderer::new) .register(); public static final BlockEntityEntry MECHANICAL_MIXER = REGISTRATE .blockEntity("mechanical_mixer", MechanicalMixerBlockEntity::new) - .instance(() -> MixerVisual::new) + .visual(() -> MixerVisual::new) .validBlocks(AllBlocks.MECHANICAL_MIXER) .renderer(() -> MechanicalMixerRenderer::new) .register(); public static final BlockEntityEntry DEPLOYER = REGISTRATE .blockEntity("deployer", DeployerBlockEntity::new) - .instance(() -> DeployerVisual::new) + .visual(() -> DeployerVisual::new) .validBlocks(AllBlocks.DEPLOYER) .renderer(() -> DeployerRenderer::new) .register(); @@ -668,42 +668,42 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry MECHANICAL_CRAFTER = REGISTRATE .blockEntity("mechanical_crafter", MechanicalCrafterBlockEntity::new) - .instance(() -> ShaftlessCogwheelVisual::new) + .visual(() -> ShaftlessCogwheelVisual::new) .validBlocks(AllBlocks.MECHANICAL_CRAFTER) .renderer(() -> MechanicalCrafterRenderer::new) .register(); public static final BlockEntityEntry SEQUENCED_GEARSHIFT = REGISTRATE .blockEntity("sequenced_gearshift", SequencedGearshiftBlockEntity::new) - .instance(() -> SplitShaftVisual::new, false) + .visual(() -> SplitShaftVisual::new, false) .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) .renderer(() -> SplitShaftRenderer::new) .register(); public static final BlockEntityEntry ROTATION_SPEED_CONTROLLER = REGISTRATE .blockEntity("rotation_speed_controller", SpeedControllerBlockEntity::new) - .instance(() -> ShaftVisual::new) + .visual(() -> ShaftVisual::new) .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) .renderer(() -> SpeedControllerRenderer::new) .register(); public static final BlockEntityEntry SPEEDOMETER = REGISTRATE .blockEntity("speedometer", SpeedGaugeBlockEntity::new) - .instance(() -> GaugeVisual.Speed::new) + .visual(() -> GaugeVisual.Speed::new) .validBlocks(AllBlocks.SPEEDOMETER) .renderer(() -> GaugeRenderer::speed) .register(); public static final BlockEntityEntry STRESSOMETER = REGISTRATE .blockEntity("stressometer", StressGaugeBlockEntity::new) - .instance(() -> GaugeVisual.Stress::new) + .visual(() -> GaugeVisual.Stress::new) .validBlocks(AllBlocks.STRESSOMETER) .renderer(() -> GaugeRenderer::stress) .register(); public static final BlockEntityEntry ANALOG_LEVER = REGISTRATE .blockEntity("analog_lever", AnalogLeverBlockEntity::new) - .instance(() -> AnalogLeverVisual::new, false) + .visual(() -> AnalogLeverVisual::new, false) .validBlocks(AllBlocks.ANALOG_LEVER) .renderer(() -> AnalogLeverRenderer::new) .register(); @@ -762,14 +762,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry WEIGHTED_EJECTOR = REGISTRATE .blockEntity("weighted_ejector", EjectorBlockEntity::new) - .instance(() -> EjectorVisual::new) + .visual(() -> EjectorVisual::new) .validBlocks(AllBlocks.WEIGHTED_EJECTOR) .renderer(() -> EjectorRenderer::new) .register(); public static final BlockEntityEntry FUNNEL = REGISTRATE .blockEntity("funnel", FunnelBlockEntity::new) - .instance(() -> FunnelVisual::new) + .visual(() -> FunnelVisual::new) .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL) .renderer(() -> FunnelRenderer::new) @@ -783,14 +783,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry PULSE_EXTENDER = REGISTRATE .blockEntity("pulse_extender", PulseExtenderBlockEntity::new) - .instance(() -> BrassDiodeVisual::new, false) + .visual(() -> BrassDiodeVisual::new, false) .validBlocks(AllBlocks.PULSE_EXTENDER) .renderer(() -> BrassDiodeRenderer::new) .register(); public static final BlockEntityEntry PULSE_REPEATER = REGISTRATE .blockEntity("pulse_repeater", PulseRepeaterBlockEntity::new) - .instance(() -> BrassDiodeVisual::new, false) + .visual(() -> BrassDiodeVisual::new, false) .validBlocks(AllBlocks.PULSE_REPEATER) .renderer(() -> BrassDiodeRenderer::new) .register(); @@ -804,7 +804,7 @@ public class AllBlockEntityTypes { // Curiosities public static final BlockEntityEntry BACKTANK = REGISTRATE .blockEntity("backtank", BacktankBlockEntity::new) - .instance(() -> BacktankVisual::new) + .visual(() -> BacktankVisual::new) .validBlocks(AllBlocks.COPPER_BACKTANK, AllBlocks.NETHERITE_BACKTANK) .renderer(() -> BacktankRenderer::new) .register(); @@ -823,14 +823,14 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry TOOLBOX = REGISTRATE .blockEntity("toolbox", ToolboxBlockEntity::new) - .instance(() -> ToolBoxVisual::new, false) + .visual(() -> ToolBoxVisual::new, false) .validBlocks(AllBlocks.TOOLBOXES.toArray()) .renderer(() -> ToolboxRenderer::new) .register(); public static final BlockEntityEntry TRACK = REGISTRATE .blockEntity("track", TrackBlockEntity::new) - .instance(() -> TrackVisual::new) + .visual(() -> TrackVisual::new) .validBlocksDeferred(TrackMaterial::allBlocks) .renderer(() -> TrackRenderer::new) .register(); @@ -866,7 +866,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry FLAP_DISPLAY = REGISTRATE .blockEntity("flap_display", FlapDisplayBlockEntity::new) - .instance(() -> ShaftlessCogwheelVisual::new) + .visual(() -> ShaftlessCogwheelVisual::new) .renderer(() -> FlapDisplayRenderer::new) .validBlocks(AllBlocks.DISPLAY_BOARD) .register(); diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index cd66c0e721..2b21ec3f38 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -35,21 +35,21 @@ public class AllEntityTypes { public static final EntityEntry ORIENTED_CONTRAPTION = contraption("contraption", OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new, 5, 3, true) - .instance(() -> ContraptionVisual::new) + .visual(() -> ContraptionVisual::new) .register(); public static final EntityEntry CONTROLLED_CONTRAPTION = contraption("stationary_contraption", ControlledContraptionEntity::new, () -> ContraptionEntityRenderer::new, 20, 40, false) - .instance(() -> ContraptionVisual::new) + .visual(() -> ContraptionVisual::new) .register(); public static final EntityEntry GANTRY_CONTRAPTION = contraption("gantry_contraption", GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, 10, 40, false) - .instance(() -> ContraptionVisual::new) + .visual(() -> ContraptionVisual::new) .register(); public static final EntityEntry CARRIAGE_CONTRAPTION = contraption("carriage_contraption", CarriageContraptionEntity::new, () -> CarriageContraptionEntityRenderer::new, 15, 3, true) - .instance(() -> CarriageContraptionVisual::new) + .visual(() -> CarriageContraptionVisual::new) .register(); public static final EntityEntry SUPER_GLUE = diff --git a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java index ed4098fc38..96668a0080 100644 --- a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java +++ b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java @@ -18,7 +18,6 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.client.renderer.Rect2i; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.accesstransformer.Target; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index 537532ed59..62c8190787 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.contraptions.elevator; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 2965b1b7f1..d77b6c3dec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -3,12 +3,12 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java index 542ed94311..f1a68b403f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java @@ -1,11 +1,5 @@ package com.simibubi.create.content.contraptions.render; -import org.joml.Matrix4f; -import org.lwjgl.opengl.GL20; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.AABB; - public class ContraptionProgram { // protected final int uLightBoxSize; // protected final int uLightBoxMin; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java index ed2085dab2..94994b0b32 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java @@ -11,8 +11,8 @@ import com.simibubi.create.content.schematics.cannon.LaunchedItem.ForBlockState; import com.simibubi.create.content.schematics.cannon.LaunchedItem.ForEntity; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; -import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java index f4647daaca..98ad14e0a6 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java @@ -25,7 +25,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateBlockEntityBuilder extends BlockEntityBuilder { @Nullable - private NonNullSupplier> instanceFactory; + private NonNullSupplier> visualFactory; private NonNullPredicate renderNormally; private Collection>>> deferredValidBlocks = @@ -56,37 +56,37 @@ public class CreateBlockEntityBuilder extends BlockEnt return super.createEntry(); } - public CreateBlockEntityBuilder instance( - NonNullSupplier> instanceFactory) { - return instance(instanceFactory, true); + public CreateBlockEntityBuilder visual( + NonNullSupplier> visualFactory) { + return visual(visualFactory, true); } - public CreateBlockEntityBuilder instance( - NonNullSupplier> instanceFactory, + public CreateBlockEntityBuilder visual( + NonNullSupplier> visualFactory, boolean renderNormally) { - return instance(instanceFactory, be -> renderNormally); + return visual(visualFactory, be -> renderNormally); } - public CreateBlockEntityBuilder instance( - NonNullSupplier> instanceFactory, + public CreateBlockEntityBuilder visual( + NonNullSupplier> visualFactory, NonNullPredicate renderNormally) { - if (this.instanceFactory == null) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::registerInstance); + if (this.visualFactory == null) { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::registerVisualizer); } - this.instanceFactory = instanceFactory; + this.visualFactory = visualFactory; this.renderNormally = renderNormally; return this; } - protected void registerInstance() { + protected void registerVisualizer() { OneTimeEventReceiver.addModListener(Create.REGISTRATE, FMLClientSetupEvent.class, $ -> { - var instanceFactory = this.instanceFactory; - if (instanceFactory != null) { + var visualFactory = this.visualFactory; + if (visualFactory != null) { NonNullPredicate renderNormally = this.renderNormally; SimpleBlockEntityVisualizer.builder(getEntry()) - .factory(instanceFactory.get()) + .factory(visualFactory.get()) .skipVanillaRender(be -> !renderNormally.test(be)) .apply(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java index f745eae513..63e64e72fd 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java @@ -23,7 +23,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateEntityBuilder extends EntityBuilder { @Nullable - private NonNullSupplier> instanceFactory; + private NonNullSupplier> visualFactory; private NonNullPredicate renderNormally; public static EntityBuilder create(AbstractRegistrate owner, P parent, String name, BuilderCallback callback, EntityType.EntityFactory factory, MobCategory classification) { @@ -34,37 +34,35 @@ public class CreateEntityBuilder extends EntityBuilder instance(NonNullSupplier> instanceFactory) { - return instance(instanceFactory, true); + public CreateEntityBuilder visual(NonNullSupplier> visualFactory) { + return visual(visualFactory, true); } - public CreateEntityBuilder instance(NonNullSupplier> instanceFactory, boolean renderNormally) { - return instance(instanceFactory, be -> renderNormally); + public CreateEntityBuilder visual(NonNullSupplier> visualFactory, boolean renderNormally) { + return visual(visualFactory, entity -> renderNormally); } - public CreateEntityBuilder instance(NonNullSupplier> instanceFactory, NonNullPredicate renderNormally) { - if (this.instanceFactory == null) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::registerInstance); + public CreateEntityBuilder visual(NonNullSupplier> visualFactory, NonNullPredicate renderNormally) { + if (this.visualFactory == null) { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::registerVisualizer); } - this.instanceFactory = instanceFactory; + this.visualFactory = visualFactory; this.renderNormally = renderNormally; return this; } - protected void registerInstance() { + protected void registerVisualizer() { OneTimeEventReceiver.addModListener(Create.REGISTRATE, FMLClientSetupEvent.class, $ -> { - var instanceFactory = this.instanceFactory; - if (instanceFactory != null) { + var visualFactory = this.visualFactory; + if (visualFactory != null) { NonNullPredicate renderNormally = this.renderNormally; SimpleEntityVisualizer.builder(getEntry()) - .factory(instanceFactory.get()) - .skipVanillaRender(be -> !renderNormally.test(be)) + .factory(visualFactory.get()) + .skipVanillaRender(entity -> !renderNormally.test(entity)) .apply(); } - }); } - } diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java index 778fdc846f..097bef997e 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -7,8 +7,8 @@ import javax.annotation.Nullable; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.placement.PlacementHelpers; -import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; From 79e1c8c950490d9788b3738366f7d2761fceb60e Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 16 May 2024 21:18:58 -0700 Subject: [PATCH 24/35] Restore SBB contraption rendering --- .../com/simibubi/create/CreateClient.java | 8 +- .../AbstractContraptionEntity.java | 4 +- .../content/contraptions/Contraption.java | 27 ++- .../contraptions/actors/ActorInstance.java | 95 +++++---- .../ContraptionControlsMovement.java | 5 - .../harvester/HarvesterMovementBehaviour.java | 40 ++-- .../actors/harvester/HarvesterRenderer.java | 4 +- .../psi/PortableStorageInterfaceMovement.java | 8 +- .../psi/PortableStorageInterfaceRenderer.java | 4 +- .../roller/RollerMovementBehaviour.java | 8 +- .../actors/roller/RollerRenderer.java | 4 +- .../trainControls/ControlsRenderer.java | 6 +- .../StabilizedBearingMovementBehaviour.java | 19 +- .../behaviour/BellMovementBehaviour.java | 6 - .../behaviour/CampfireMovementBehaviour.java | 5 - .../behaviour/MovementBehaviour.java | 8 +- .../render/ContraptionEntityRenderer.java | 86 ++++++++- .../render/ContraptionMatrices.java | 13 +- .../render/ContraptionProgram.java | 31 --- .../render/ContraptionRenderDispatcher.java | 182 ------------------ .../render/ContraptionRenderInfo.java | 172 ++++++++++++----- .../render/ContraptionRenderInfoManager.java | 84 ++++++++ .../render/ContraptionRenderingWorld.java | 118 ------------ .../render/ContraptionVisual.java | 56 +++--- .../OrientedContraptionEntityRenderer.java | 8 +- .../render/SBBContraptionManager.java | 127 ------------ .../SlidingDoorMovementBehaviour.java | 6 - .../content/kinetics/belt/BeltVisual.java | 2 +- .../deployer/DeployerMovementBehaviour.java | 16 +- .../kinetics/deployer/DeployerRenderer.java | 8 +- .../kinetics/drill/DrillActorVisual.java | 8 +- .../drill/DrillMovementBehaviour.java | 18 +- .../content/kinetics/drill/DrillRenderer.java | 4 +- .../kinetics/saw/SawMovementBehaviour.java | 5 + .../content/kinetics/saw/SawRenderer.java | 4 +- .../funnel/FunnelMovementBehaviour.java | 5 - .../logistics/funnel/FunnelVisual.java | 2 +- .../logistics/tunnel/BeltTunnelVisual.java | 2 +- .../basin/BasinMovementBehaviour.java | 5 - .../burner/BlazeBurnerMovementBehaviour.java | 10 +- .../trains/entity/CarriageContraption.java | 14 +- .../foundation/events/ClientEvents.java | 2 + .../foundation/render/AllInstanceTypes.java | 14 +- .../render/BlockEntityRenderHelper.java | 4 +- .../{contraption_actor.vert => actor.vert} | 0 .../{contraption_actor.glsl => actor.glsl} | 0 46 files changed, 493 insertions(+), 764 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java rename src/main/resources/assets/create/flywheel/instance/{contraption_actor.vert => actor.vert} (100%) rename src/main/resources/assets/create/flywheel/instance/cull/{contraption_actor.glsl => actor.glsl} (100%) diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index be27cae85b..5763dec8dd 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -1,8 +1,8 @@ package com.simibubi.create; import com.simibubi.create.content.contraptions.glue.SuperGlueSelectionHandler; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; -import com.simibubi.create.content.contraptions.render.SBBContraptionManager; +import com.simibubi.create.content.contraptions.render.ContraptionRenderInfo; +import com.simibubi.create.content.contraptions.render.ContraptionRenderInfoManager; import com.simibubi.create.content.decoration.encasing.CasingConnectivity; import com.simibubi.create.content.equipment.bell.SoulPulseEffectHandler; import com.simibubi.create.content.equipment.potatoCannon.PotatoCannonRenderHandler; @@ -80,7 +80,7 @@ public class CreateClient { BUFFER_CACHE.registerCompartment(CachedBufferer.DIRECTIONAL_PARTIAL); BUFFER_CACHE.registerCompartment(KineticBlockEntityRenderer.KINETIC_BLOCK); BUFFER_CACHE.registerCompartment(WaterWheelRenderer.WATER_WHEEL); - BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20); + BUFFER_CACHE.registerCompartment(ContraptionRenderInfo.CONTRAPTION, 20); BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); AllPartialModels.init(); @@ -95,7 +95,7 @@ public class CreateClient { BUFFER_CACHE.invalidate(); SCHEMATIC_HANDLER.updateRenderers(); - ContraptionRenderDispatcher.reset(); + ContraptionRenderInfoManager.resetAll(); } public static void checkGraphicsFanciness() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java index b7bd6a698d..36a153686e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java @@ -28,7 +28,7 @@ import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.elevator.ElevatorContraption; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.mounted.MountedContraption; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; +import com.simibubi.create.content.contraptions.render.ContraptionRenderInfo; import com.simibubi.create.content.contraptions.sync.ContraptionSeatMappingPacket; import com.simibubi.create.content.decoration.slidingDoor.SlidingDoorBlock; import com.simibubi.create.content.trains.entity.CarriageContraption; @@ -379,7 +379,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit if (!contraption.deferInvalidate) return; contraption.deferInvalidate = false; - ContraptionRenderDispatcher.invalidate(contraption); + ContraptionRenderInfo.invalidate(contraption); }); if (!(level() instanceof ServerLevelAccessor sl)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index 2deadc35e5..5ed0f06c73 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -158,8 +158,7 @@ public abstract class Contraption { // Client public Map modelData; public Map presentBlockEntities; - public List maybeInstancedBlockEntities; - public List specialRenderedBlockEntities; + public List renderedBlockEntities; protected ContraptionWorld world; public boolean deferInvalidate; @@ -176,8 +175,7 @@ public abstract class Contraption { glueToRemove = new HashSet<>(); initialPassengers = new HashMap<>(); presentBlockEntities = new HashMap<>(); - maybeInstancedBlockEntities = new ArrayList<>(); - specialRenderedBlockEntities = new ArrayList<>(); + renderedBlockEntities = new ArrayList<>(); pendingSubContraptions = new ArrayList<>(); stabilizedSubContraptions = new HashMap<>(); simplifiedEntityColliders = Optional.empty(); @@ -688,7 +686,7 @@ public abstract class Contraption { public void readNBT(Level world, CompoundTag nbt, boolean spawnData) { blocks.clear(); presentBlockEntities.clear(); - specialRenderedBlockEntities.clear(); + renderedBlockEntities.clear(); Tag blocks = nbt.get("Blocks"); // used to differentiate between the 'old' and the paletted serialization @@ -893,20 +891,17 @@ public abstract class Contraption { if (be == null) return; be.setLevel(world); - modelData.put(info.pos(), be.getModelData()); if (be instanceof KineticBlockEntity kbe) kbe.setSpeed(0); be.getBlockState(); - MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(info.state()); - if (movementBehaviour == null || !movementBehaviour.hasSpecialInstancedRendering()) - maybeInstancedBlockEntities.add(be); - - if (movementBehaviour != null && !movementBehaviour.renderAsNormalBlockEntity()) - return; - presentBlockEntities.put(info.pos(), be); - specialRenderedBlockEntities.add(be); + modelData.put(info.pos(), be.getModelData()); + + MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(info.state()); + if (movementBehaviour == null || !movementBehaviour.disableBlockEntityRendering()) { + renderedBlockEntities.add(be); + } }); } @@ -1376,8 +1371,8 @@ public abstract class Contraption { }, blocks.keySet()); } - public Collection getSpecialRenderedBEs() { - return specialRenderedBlockEntities; + public Collection getRenderedBEs() { + return renderedBlockEntities; } public boolean isHiddenInPortal(BlockPos localPos) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java index 2da908c282..87ec2d0acb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java @@ -11,32 +11,31 @@ import com.jozufozu.flywheel.lib.instance.AbstractInstance; import net.minecraft.core.BlockPos; public class ActorInstance extends AbstractInstance { - public float x; - public float y; - public float z; - public byte blockLight; - public byte skyLight; - public float rotationOffset; - public byte rotationAxisX; - public byte rotationAxisY; - public byte rotationAxisZ; - public Quaternionf rotation = new Quaternionf(); - public byte rotationCenterX = 64; - public byte rotationCenterY = 64; - public byte rotationCenterZ = 64; - public float speed; + public float x; + public float y; + public float z; + public byte blockLight; + public byte skyLight; + public float rotationOffset; + public byte rotationAxisX; + public byte rotationAxisY; + public byte rotationAxisZ; + public Quaternionf rotation = new Quaternionf(); + public byte rotationCenterX = 64; + public byte rotationCenterY = 64; + public byte rotationCenterZ = 64; + public float speed; public ActorInstance(InstanceType type, InstanceHandle handle) { super(type, handle); } public ActorInstance setPosition(BlockPos pos) { - this.x = pos.getX(); - this.y = pos.getY(); - this.z = pos.getZ(); - return this; - } - + this.x = pos.getX(); + this.y = pos.getY(); + this.z = pos.getZ(); + return this; + } public ActorInstance setBlockLight(int blockLight) { this.blockLight = (byte) blockLight; @@ -48,39 +47,39 @@ public class ActorInstance extends AbstractInstance { return this; } - public ActorInstance setRotationOffset(float rotationOffset) { - this.rotationOffset = rotationOffset; - return this; - } + public ActorInstance setRotationOffset(float rotationOffset) { + this.rotationOffset = rotationOffset; + return this; + } - public ActorInstance setSpeed(float speed) { - this.speed = speed; - return this; - } + public ActorInstance setSpeed(float speed) { + this.speed = speed; + return this; + } - public ActorInstance setRotationAxis(Vector3f axis) { - setRotationAxis(axis.x(), axis.y(), axis.z()); - return this; - } + public ActorInstance setRotationAxis(Vector3f axis) { + setRotationAxis(axis.x(), axis.y(), axis.z()); + return this; + } - public ActorInstance setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) { - this.rotationAxisX = (byte) (rotationAxisX * 127); - this.rotationAxisY = (byte) (rotationAxisY * 127); - this.rotationAxisZ = (byte) (rotationAxisZ * 127); - return this; - } + public ActorInstance setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) { + this.rotationAxisX = (byte) (rotationAxisX * 127); + this.rotationAxisY = (byte) (rotationAxisY * 127); + this.rotationAxisZ = (byte) (rotationAxisZ * 127); + return this; + } - public ActorInstance setRotationCenter(Vector3f axis) { - setRotationCenter(axis.x(), axis.y(), axis.z()); - return this; - } + public ActorInstance setRotationCenter(Vector3f axis) { + setRotationCenter(axis.x(), axis.y(), axis.z()); + return this; + } - public ActorInstance setRotationCenter(float rotationCenterX, float rotationCenterY, float rotationCenterZ) { - this.rotationCenterX = (byte) (rotationCenterX * 127); - this.rotationCenterY = (byte) (rotationCenterY * 127); - this.rotationCenterZ = (byte) (rotationCenterZ * 127); - return this; - } + public ActorInstance setRotationCenter(float rotationCenterX, float rotationCenterY, float rotationCenterZ) { + this.rotationCenterX = (byte) (rotationCenterX * 127); + this.rotationCenterY = (byte) (rotationCenterY * 127); + this.rotationCenterZ = (byte) (rotationCenterZ * 127); + return this; + } public ActorInstance setLocalRotation(Quaternionfc q) { this.rotation.set(q); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java index 14074ff1d5..e0bf94a583 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsMovement.java @@ -138,11 +138,6 @@ public class ContraptionControlsMovement implements MovementBehaviour { .string(); } - @Override - public boolean renderAsNormalBlockEntity() { - return true; - } - @Override @OnlyIn(Dist.CLIENT) public void renderInContraption(MovementContext ctx, VirtualRenderWorld renderWorld, ContraptionMatrices matrices, diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java index bfb95fe824..9f35613538 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java @@ -5,11 +5,11 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableBoolean; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -45,25 +45,6 @@ public class HarvesterMovementBehaviour implements MovementBehaviour { .getOpposite()); } - @Override - public boolean hasSpecialInstancedRendering() { - return true; - } - - @Nullable - @Override - public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, - MovementContext movementContext) { - return new HarvesterActorVisual(visualizationContext, simulationWorld, movementContext); - } - - @Override - public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, - ContraptionMatrices matrices, MultiBufferSource buffers) { - if (!ContraptionRenderDispatcher.canInstance()) - HarvesterRenderer.renderInContraption(context, renderWorld, matrices, buffers); - } - @Override public Vec3 getActiveAreaOffset(MovementContext context) { return Vec3.atLowerCornerOf(context.state.getValue(HarvesterBlock.FACING) @@ -218,4 +199,23 @@ public class HarvesterMovementBehaviour implements MovementBehaviour { .createLegacyBlock(); } + @Override + public boolean disableBlockEntityRendering() { + return true; + } + + @Override + public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, + ContraptionMatrices matrices, MultiBufferSource buffers) { + if (!VisualizationManager.supportsVisualization(context.world)) + HarvesterRenderer.renderInContraption(context, renderWorld, matrices, buffers); + } + + @Nullable + @Override + public ActorVisual createVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + MovementContext movementContext) { + return new HarvesterActorVisual(visualizationContext, simulationWorld, movementContext); + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java index a6435539ec..6cfb8125b9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java @@ -6,7 +6,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; @@ -15,6 +14,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; @@ -54,7 +54,7 @@ public class HarvesterRenderer extends SafeBlockEntityRenderer sbb - .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) + .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) .renderInto(matrices.getViewProjection(), vb)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java index 2c30041de4..a9158643bc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java @@ -10,13 +10,13 @@ import java.util.function.BiConsumer; import javax.annotation.Nullable; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.actors.roller.RollerBlockEntity.RollingMode; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.pulley.PulleyContraption; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; import com.simibubi.create.content.logistics.filter.FilterItemStack; import com.simibubi.create.content.trains.bogey.StandardBogeyBlock; @@ -70,13 +70,13 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { } @Override - public boolean hasSpecialInstancedRendering() { + public boolean disableBlockEntityRendering() { return true; } @Nullable @Override - public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + public ActorVisual createVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { return new RollerActorVisual(visualizationContext, simulationWorld, movementContext); } @@ -84,7 +84,7 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { @Override public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, ContraptionMatrices matrices, MultiBufferSource buffers) { - if (!ContraptionRenderDispatcher.canInstance()) + if (!VisualizationManager.supportsVisualization(context.world)) RollerRenderer.renderInContraption(context, renderWorld, matrices, buffers); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java index 7f35b58f65..c8b27df346 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java @@ -7,7 +7,6 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterRenderer; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; @@ -15,6 +14,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; @@ -73,7 +73,7 @@ public class RollerRenderer extends SmartBlockEntityRenderer PoseStack viewProjection = matrices.getViewProjection(); viewProjection.pushPose(); viewProjection.translate(0, -.25, 0); - int contraptionWorldLight = ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld); + int contraptionWorldLight = LevelRenderer.getLightColor(renderWorld, context.localPos); superBuffer.translate(0, -.5, .5) .rotateYDegrees(90) .light(matrices.getWorld(), contraptionWorldLight) diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java index 5fecc345f0..a21964c5b4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java @@ -5,13 +5,13 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction; @@ -32,7 +32,7 @@ public class ControlsRenderer { .center() .rotateYDegrees(hAngle) .uncenter() - .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) + .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); double yOffset = Mth.lerp(equipAnimation * equipAnimation, -0.15f, 0.05f); @@ -52,7 +52,7 @@ public class ControlsRenderer { .translate(0, -2 / 16f, -3 / 16f) .translate(first ? 0 : 6 / 16f, 0, 0); lever.transform(ms) - .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) + .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java index 2d7b970bcf..384ed18bdc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java @@ -5,6 +5,7 @@ import javax.annotation.Nullable; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; @@ -15,12 +16,12 @@ import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction; @@ -36,11 +37,16 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { return null; } + @Override + public boolean disableBlockEntityRendering() { + return true; + } + @Override @OnlyIn(Dist.CLIENT) public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, ContraptionMatrices matrices, MultiBufferSource buffer) { - if (ContraptionRenderDispatcher.canInstance()) + if (!VisualizationManager.supportsVisualization(context.world)) return; Direction facing = context.state.getValue(BlockStateProperties.FACING); @@ -67,18 +73,13 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { // render superBuffer - .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) + .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); } - @Override - public boolean hasSpecialInstancedRendering() { - return true; - } - @Nullable @Override - public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + public ActorVisual createVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { return new StabilizedBearingVisual(visualizationContext, simulationWorld, movementContext); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/BellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/BellMovementBehaviour.java index 55987d46e0..7796239796 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/BellMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/BellMovementBehaviour.java @@ -11,12 +11,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.phys.Vec3; public class BellMovementBehaviour implements MovementBehaviour { - - @Override - public boolean renderAsNormalBlockEntity() { - return true; - } - @Override public boolean isActive(MovementContext context) { return MovementBehaviour.super.isActive(context) && !(context.contraption instanceof CarriageContraption); diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/CampfireMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/CampfireMovementBehaviour.java index a6be9bf458..05315b3138 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/CampfireMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/CampfireMovementBehaviour.java @@ -5,11 +5,6 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.CampfireBlock; public class CampfireMovementBehaviour implements MovementBehaviour { - @Override - public boolean renderAsNormalBlockEntity() { - return true; - } - @Override public void tick(MovementContext context) { if (context.world == null || !context.world.isClientSide || context.position == null diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java index 64cdc9f929..8fa83541ea 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java @@ -80,11 +80,7 @@ public interface MovementBehaviour { default void writeExtraData(MovementContext context) {} - default boolean renderAsNormalBlockEntity() { - return false; - } - - default boolean hasSpecialInstancedRendering() { + default boolean disableBlockEntityRendering() { return false; } @@ -94,7 +90,7 @@ public interface MovementBehaviour { @OnlyIn(Dist.CLIENT) @Nullable - default ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + default ActorVisual createVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { return null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java index 93e9a861e9..cef32b1784 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java @@ -1,16 +1,30 @@ package com.simibubi.create.content.contraptions.render; +import org.apache.commons.lang3.tuple.Pair; + +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; +import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; +import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.foundation.render.BlockEntityRenderHelper; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; public class ContraptionEntityRenderer extends EntityRenderer { - public ContraptionEntityRenderer(EntityRendererProvider.Context context) { super(context); } @@ -21,7 +35,7 @@ public class ContraptionEntityRenderer exte } @Override - public boolean shouldRender(C entity, Frustum clippingHelper, double cameraX, double cameraY, + public boolean shouldRender(C entity, Frustum frustum, double cameraX, double cameraY, double cameraZ) { if (entity.getContraption() == null) return false; @@ -30,18 +44,72 @@ public class ContraptionEntityRenderer exte if (!entity.isReadyForRender()) return false; - return super.shouldRender(entity, clippingHelper, cameraX, cameraY, cameraZ); + return super.shouldRender(entity, frustum, cameraX, cameraY, cameraZ); } @Override - public void render(C entity, float yaw, float partialTicks, PoseStack ms, MultiBufferSource buffers, + public void render(C entity, float yaw, float partialTicks, PoseStack poseStack, MultiBufferSource buffers, int overlay) { - super.render(entity, yaw, partialTicks, ms, buffers, overlay); + super.render(entity, yaw, partialTicks, poseStack, buffers, overlay); -// Contraption contraption = entity.getContraption(); -// if (contraption != null) { -// ContraptionRenderDispatcher.renderFromEntity(entity, contraption, buffers); -// } + Contraption contraption = entity.getContraption(); + if (contraption == null) { + return; + } + + Level level = entity.level(); + ContraptionRenderInfo renderInfo = ContraptionRenderInfo.get(contraption); + VirtualRenderWorld renderWorld = renderInfo.getRenderWorld(); + ContraptionMatrices matrices = renderInfo.getMatrices(); + matrices.setup(poseStack, entity); + + if (!VisualizationManager.supportsVisualization(level)) { + for (RenderType renderType : RenderType.chunkBufferLayers()) { + SuperByteBuffer sbb = renderInfo.getBuffer(renderType); + if (!sbb.isEmpty()) { + VertexConsumer vc = buffers.getBuffer(renderType); + sbb.transform(matrices.getModel()) + .light(matrices.getWorld()) + .hybridLight() + .renderInto(poseStack, vc); + } + } + } + + renderBlockEntities(level, renderWorld, contraption, matrices, buffers); + renderActors(level, renderWorld, contraption, matrices, buffers); + + matrices.clear(); } + private static void renderBlockEntities(Level level, VirtualRenderWorld renderWorld, Contraption c, + ContraptionMatrices matrices, MultiBufferSource buffer) { + BlockEntityRenderHelper.renderBlockEntities(level, renderWorld, c.getRenderedBEs(), + matrices.getModelViewProjection(), matrices.getLight(), buffer); + } + + private static void renderActors(Level level, VirtualRenderWorld renderWorld, Contraption c, + ContraptionMatrices matrices, MultiBufferSource buffer) { + PoseStack m = matrices.getModel(); + + for (Pair actor : c.getActors()) { + MovementContext context = actor.getRight(); + if (context == null) + continue; + if (context.world == null) + context.world = level; + StructureTemplate.StructureBlockInfo blockInfo = actor.getLeft(); + + MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); + if (movementBehaviour != null) { + if (c.isHiddenInPortal(blockInfo.pos())) + continue; + m.pushPose(); + TransformStack.of(m) + .translate(blockInfo.pos()); + movementBehaviour.renderInContraption(context, renderWorld, matrices, buffer); + m.popPose(); + } + } + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionMatrices.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionMatrices.java index 2bee34e8d4..c7584bdf79 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionMatrices.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionMatrices.java @@ -22,9 +22,7 @@ public class ContraptionMatrices { private final Matrix4f world = new Matrix4f(); private final Matrix4f light = new Matrix4f(); - private boolean ready; - - public void setup(PoseStack viewProjection, AbstractContraptionEntity entity) { + void setup(PoseStack viewProjection, AbstractContraptionEntity entity) { float partialTicks = AnimationTickHolder.getPartialTicks(); this.viewProjection.pushPose(); @@ -41,17 +39,14 @@ public class ContraptionMatrices { light.set(world); light.mul(model.last() .pose()); - - ready = true; } - public void clear() { + void clear() { clearStack(modelViewProjection); clearStack(viewProjection); clearStack(model); world.identity(); light.identity(); - ready = false; } public PoseStack getModelViewProjection() { @@ -74,10 +69,6 @@ public class ContraptionMatrices { return light; } - public boolean isReady() { - return ready; - } - public static void transform(PoseStack ms, PoseStack transform) { ms.last() .pose() diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java deleted file mode 100644 index f1a68b403f..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionProgram.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -public class ContraptionProgram { -// protected final int uLightBoxSize; -// protected final int uLightBoxMin; -// protected final int uModel; -// -// protected int uLightVolume; -// -// public ContraptionProgram(ResourceLocation name, int handle) { -// super(handle); -// uLightBoxSize = getUniformLocation("uLightBoxSize"); -// uLightBoxMin = getUniformLocation("uLightBoxMin"); -// uModel = getUniformLocation("uModel"); -// } -// -// @Override -// protected void registerSamplers() { -// super.registerSamplers(); -// uLightVolume = setSamplerBinding("uLightVolume", 4); -// } -// -// public void bind(Matrix4f model, AABB lightVolume) { -// double sizeX = lightVolume.maxX - lightVolume.minX; -// double sizeY = lightVolume.maxY - lightVolume.minY; -// double sizeZ = lightVolume.maxZ - lightVolume.minZ; -// GL20.glUniform3f(uLightBoxSize, (float) sizeX, (float) sizeY, (float) sizeZ); -// GL20.glUniform3f(uLightBoxMin, (float) lightVolume.minX, (float) lightVolume.minY, (float) lightVolume.minZ); -// // uploadMatrixUniform(uModel, model); -// } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java deleted file mode 100644 index 7b31ab9690..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import org.apache.commons.lang3.tuple.Pair; - -import com.jozufozu.flywheel.api.event.BeginFrameEvent; -import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent; -import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.jozufozu.flywheel.backend.gl.error.GlError; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.AllMovementBehaviours; -import com.simibubi.create.content.contraptions.AbstractContraptionEntity; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.ContraptionWorld; -import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; -import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.foundation.render.BlockEntityRenderHelper; -import com.simibubi.create.foundation.utility.WorldAttached; -import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LightLayer; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.common.Mod; - -@OnlyIn(Dist.CLIENT) -@Mod.EventBusSubscriber(Dist.CLIENT) -public class ContraptionRenderDispatcher { - - private static WorldAttached> WORLDS = new WorldAttached<>(SBBContraptionManager::new); - - /** - * Reset a contraption's renderer. - * - * @param contraption The contraption to invalidate. - * @return true if there was a renderer associated with the given contraption. - */ - public static boolean invalidate(Contraption contraption) { - Level level = contraption.entity.level(); - - return WORLDS.get(level) - .invalidate(contraption); - } - - public static void tick(Level world) { - if (Minecraft.getInstance() - .isPaused()) - return; - - WORLDS.get(world) - .tick(); - } - - public static void beginFrame(BeginFrameEvent event) { - WORLDS.get(event.getContext() - .level()) - .beginFrame(event); - } - - public static void renderLayer(RenderStageEvent event) { - WORLDS.get(event.getLevel()) - .renderLayer(event); - - GlError.pollAndThrow(() -> "contraption layer: " + event.getStage()); - } - - public static void onRendererReload(ReloadLevelRendererEvent event) { - reset(); - } - - public static void renderFromEntity(AbstractContraptionEntity entity, Contraption contraption, - MultiBufferSource buffers) { - Level world = entity.level(); - - ContraptionRenderInfo renderInfo = WORLDS.get(world) - .getRenderInfo(contraption); - ContraptionMatrices matrices = renderInfo.getMatrices(); - - // something went wrong with the other rendering - if (!matrices.isReady()) - return; - - VirtualRenderWorld renderWorld = renderInfo.renderWorld; - - renderBlockEntities(world, renderWorld, contraption, matrices, buffers); - - if (buffers instanceof MultiBufferSource.BufferSource) - ((MultiBufferSource.BufferSource) buffers).endBatch(); - - renderActors(world, renderWorld, contraption, matrices, buffers); - } - - public static VirtualRenderWorld setupRenderWorld(Level world, Contraption c) { - ContraptionWorld contraptionWorld = c.getContraptionWorld(); - - BlockPos origin = c.anchor; - int minBuildHeight = contraptionWorld.getMinBuildHeight(); - int height = contraptionWorld.getHeight(); - VirtualRenderWorld renderWorld = new VirtualRenderWorld(world, minBuildHeight, height, origin) { - @Override - public boolean supportsVisualization() { - return canInstance(); - } - }; - - renderWorld.setBlockEntities(c.presentBlockEntities.values()); - for (StructureTemplate.StructureBlockInfo info : c.getBlocks() - .values()) - // Skip individual lighting updates to prevent lag with large contraptions - // FIXME 1.20 this '0' used to be Block.UPDATE_SUPPRESS_LIGHT, yet VirtualRenderWorld didn't actually parse the flags at all - renderWorld.setBlock(info.pos(), info.state(), 0); - - renderWorld.runLightEngine(); - return renderWorld; - } - - public static void renderBlockEntities(Level world, VirtualRenderWorld renderWorld, Contraption c, - ContraptionMatrices matrices, MultiBufferSource buffer) { - BlockEntityRenderHelper.renderBlockEntities(world, renderWorld, c.getSpecialRenderedBEs(), - matrices.getModelViewProjection(), matrices.getLight(), buffer); - } - - protected static void renderActors(Level world, VirtualRenderWorld renderWorld, Contraption c, - ContraptionMatrices matrices, MultiBufferSource buffer) { - PoseStack m = matrices.getModel(); - - for (Pair actor : c.getActors()) { - MovementContext context = actor.getRight(); - if (context == null) - continue; - if (context.world == null) - context.world = world; - StructureTemplate.StructureBlockInfo blockInfo = actor.getLeft(); - - MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); - if (movementBehaviour != null) { - if (c.isHiddenInPortal(blockInfo.pos())) - continue; - m.pushPose(); - TransformStack.of(m) - .translate(blockInfo.pos()); - movementBehaviour.renderInContraption(context, renderWorld, matrices, buffer); - m.popPose(); - } - } - } - - public static int getLight(Level world, float lx, float ly, float lz) { - BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); - float block = 0, sky = 0; - float offset = 1 / 8f; - - for (float zOffset = offset; zOffset >= -offset; zOffset -= 2 * offset) - for (float yOffset = offset; yOffset >= -offset; yOffset -= 2 * offset) - for (float xOffset = offset; xOffset >= -offset; xOffset -= 2 * offset) { - pos.set(lx + xOffset, ly + yOffset, lz + zOffset); - block += world.getBrightness(LightLayer.BLOCK, pos) / 8f; - sky += world.getBrightness(LightLayer.SKY, pos) / 8f; - } - - return LightTexture.pack((int) block, (int) sky); - } - - public static int getContraptionWorldLight(MovementContext context, VirtualRenderWorld renderWorld) { - return LevelRenderer.getLightColor(renderWorld, context.localPos); - } - - public static void reset() { - - } - - public static boolean canInstance() { - return false; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index 40c176c8a1..9ecb738290 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -1,78 +1,156 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.api.event.BeginFrameEvent; +import org.apache.commons.lang3.tuple.Pair; + +import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import com.jozufozu.flywheel.lib.model.ModelUtil; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.contraptions.AbstractContraptionEntity; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; +import com.simibubi.create.content.contraptions.ContraptionWorld; +import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.render.SuperByteBufferCache; +import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; -import net.minecraft.util.Mth; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.ModelBlockRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraftforge.client.model.data.ModelData; public class ContraptionRenderInfo { - public final Contraption contraption; - public final VirtualRenderWorld renderWorld; + public static final SuperByteBufferCache.Compartment> CONTRAPTION = new SuperByteBufferCache.Compartment<>(); + private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); + private final Contraption contraption; + private final VirtualRenderWorld renderWorld; private final ContraptionMatrices matrices = new ContraptionMatrices(); - private boolean visible; - public ContraptionRenderInfo(Contraption contraption, VirtualRenderWorld renderWorld) { + ContraptionRenderInfo(Level level, Contraption contraption) { this.contraption = contraption; - this.renderWorld = renderWorld; + this.renderWorld = setupRenderWorld(level, contraption); } - public int getEntityId() { - return contraption.entity.getId(); + public static ContraptionRenderInfo get(Contraption contraption) { + return ContraptionRenderInfoManager.MANAGERS.get(contraption.entity.level()).getRenderInfo(contraption); + } + + /** + * Reset a contraption's renderer. + * + * @param contraption The contraption to invalidate. + * @return true if there was a renderer associated with the given contraption. + */ + public static boolean invalidate(Contraption contraption) { + return ContraptionRenderInfoManager.MANAGERS.get(contraption.entity.level()).invalidate(contraption); } public boolean isDead() { return !contraption.entity.isAliveOrStale(); } - public void beginFrame(BeginFrameEvent event) { - matrices.clear(); - - AbstractContraptionEntity entity = contraption.entity; - - visible = false; -// visible = event.getFrustum() -// .isVisible(entity.getBoundingBoxForCulling() -// .inflate(2)); + public Contraption getContraption() { + return contraption; } - public boolean isVisible() { - return visible && contraption.entity.isAliveOrStale() && contraption.entity.isReadyForRender(); + public VirtualRenderWorld getRenderWorld() { + return renderWorld; } - /** - * Need to call this during RenderLayerEvent. - */ - public void setupMatrices(PoseStack viewProjection, double camX, double camY, double camZ) { - if (!matrices.isReady()) { - AbstractContraptionEntity entity = contraption.entity; - - viewProjection.pushPose(); - - double x = Mth.lerp(AnimationTickHolder.getPartialTicks(), entity.xOld, entity.getX()) - camX; - double y = Mth.lerp(AnimationTickHolder.getPartialTicks(), entity.yOld, entity.getY()) - camY; - double z = Mth.lerp(AnimationTickHolder.getPartialTicks(), entity.zOld, entity.getZ()) - camZ; - - viewProjection.translate(x, y, z); - - matrices.setup(viewProjection, entity); - - viewProjection.popPose(); - } - } - - /** - * If #setupMatrices is called correctly, the returned matrices will be ready - */ public ContraptionMatrices getMatrices() { return matrices; } - public void invalidate() { + public SuperByteBuffer getBuffer(RenderType renderType) { + return CreateClient.BUFFER_CACHE.get(CONTRAPTION, Pair.of(contraption, renderType), () -> buildStructureBuffer(renderType)); + } + public void invalidate() { + for (RenderType renderType : RenderType.chunkBufferLayers()) { + CreateClient.BUFFER_CACHE.invalidate(CONTRAPTION, Pair.of(contraption, renderType)); + } + } + + public static VirtualRenderWorld setupRenderWorld(Level level, Contraption c) { + ContraptionWorld contraptionWorld = c.getContraptionWorld(); + + BlockPos origin = c.anchor; + int minBuildHeight = contraptionWorld.getMinBuildHeight(); + int height = contraptionWorld.getHeight(); + VirtualRenderWorld renderWorld = new VirtualRenderWorld(level, minBuildHeight, height, origin) { + @Override + public boolean supportsVisualization() { + return VisualizationManager.supportsVisualization(level); + } + }; + + renderWorld.setBlockEntities(c.presentBlockEntities.values()); + for (StructureTemplate.StructureBlockInfo info : c.getBlocks() + .values()) + renderWorld.setBlock(info.pos(), info.state(), 0); + + renderWorld.runLightEngine(); + return renderWorld; + } + + private SuperByteBuffer buildStructureBuffer(RenderType layer) { + BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; + ModelBlockRenderer renderer = dispatcher.getModelRenderer(); + ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); + + PoseStack poseStack = objects.poseStack; + RandomSource random = objects.random; + RenderedBlocks blocks = contraption.getRenderedBlocks(); + + ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; + BufferBuilder shadedBuilder = objects.shadedBuilder; + BufferBuilder unshadedBuilder = objects.unshadedBuilder; + + shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + + ModelBlockRenderer.enableCaching(); + for (BlockPos pos : blocks.positions()) { + BlockState state = blocks.lookup().apply(pos); + if (state.getRenderShape() == RenderShape.MODEL) { + BakedModel model = dispatcher.getBlockModel(state); + ModelData modelData = contraption.modelData.getOrDefault(pos, ModelData.EMPTY); + modelData = model.getModelData(renderWorld, pos, state, modelData); + long randomSeed = state.getSeed(pos); + random.setSeed(randomSeed); + if (model.getRenderTypes(state, random, modelData).contains(layer)) { + poseStack.pushPose(); + poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); + renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, random, randomSeed, OverlayTexture.NO_OVERLAY, modelData, layer); + poseStack.popPose(); + } + } + } + ModelBlockRenderer.clearCache(); + + shadeSeparatingWrapper.clear(); + return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); + } + + private static class ThreadLocalObjects { + public final PoseStack poseStack = new PoseStack(); + public final RandomSource random = RandomSource.createNewThreadLocalInstance(); + public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); + public final BufferBuilder shadedBuilder = new BufferBuilder(512); + public final BufferBuilder unshadedBuilder = new BufferBuilder(512); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java new file mode 100644 index 0000000000..9cda07272c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java @@ -0,0 +1,84 @@ +package com.simibubi.create.content.contraptions.render; + +import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent; +import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.foundation.utility.WorldAttached; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.minecraft.client.Minecraft; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber(Dist.CLIENT) +public class ContraptionRenderInfoManager { + static final WorldAttached MANAGERS = new WorldAttached<>(ContraptionRenderInfoManager::new); + + private final Level level; + private final Int2ObjectMap renderInfos = new Int2ObjectOpenHashMap<>(); + private int removalTimer; + + private ContraptionRenderInfoManager(LevelAccessor level) { + this.level = (Level) level; + } + + public static void tickFor(Level level) { + if (Minecraft.getInstance() + .isPaused()) + return; + + MANAGERS.get(level) + .tick(); + } + + public static void resetAll() { + MANAGERS.empty(ContraptionRenderInfoManager::delete); + } + + @SubscribeEvent + public static void onReloadLevelRenderer(ReloadLevelRendererEvent event) { + resetAll(); + } + + ContraptionRenderInfo getRenderInfo(Contraption contraption) { + int entityId = contraption.entity.getId(); + ContraptionRenderInfo renderInfo = renderInfos.get(entityId); + + if (renderInfo == null) { + renderInfo = new ContraptionRenderInfo(level, contraption); + renderInfos.put(entityId, renderInfo); + } + + return renderInfo; + } + + boolean invalidate(Contraption contraption) { + int entityId = contraption.entity.getId(); + ContraptionRenderInfo renderInfo = renderInfos.remove(entityId); + + if (renderInfo != null) { + renderInfo.invalidate(); + return true; + } + + return false; + } + + private void tick() { + if (removalTimer >= 20) { + renderInfos.values().removeIf(ContraptionRenderInfo::isDead); + removalTimer = 0; + } + removalTimer++; + } + + private void delete() { + for (ContraptionRenderInfo renderer : renderInfos.values()) { + renderer.invalidate(); + } + renderInfos.clear(); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java deleted file mode 100644 index 5a4e16008c..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderingWorld.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import java.lang.ref.Reference; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import com.jozufozu.flywheel.api.event.BeginFrameEvent; -import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.simibubi.create.content.contraptions.AbstractContraptionEntity; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.ContraptionHandler; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; - -public abstract class ContraptionRenderingWorld { - protected final Level world; - - private int removalTimer; - - protected final Int2ObjectMap renderInfos = new Int2ObjectOpenHashMap<>(); - protected final List visible = new ObjectArrayList<>(); - - public ContraptionRenderingWorld(LevelAccessor world) { - this.world = (Level) world; - } - - public boolean invalidate(Contraption contraption) { - int entityId = contraption.entity.getId(); - - C removed = renderInfos.remove(entityId); - - if (removed != null) { - removed.invalidate(); - visible.remove(removed); - return true; - } - - return false; - } - - public void renderLayer(RenderStageEvent event) { - var position = event.getCamera() - .getPosition(); - for (C c : visible) { - c.setupMatrices(event.getStack(), position.x, position.y, position.z); - } - } - - protected abstract C create(Contraption c); - - public void tick() { - removalTimer++; - if (removalTimer >= 20) { - removeDeadRenderers(); - removalTimer = 0; - } - - ContraptionHandler.loadedContraptions.get(world) - .values() - .stream() - .map(Reference::get) - .filter(Objects::nonNull) - .map(AbstractContraptionEntity::getContraption) - .filter(Objects::nonNull) // contraptions that are too large will not be synced, and un-synced contraptions will be null - .forEach(this::getRenderInfo); - } - - public void beginFrame(BeginFrameEvent event) { - - renderInfos.int2ObjectEntrySet() - .stream() - .map(Map.Entry::getValue) - .forEach(renderInfo -> renderInfo.beginFrame(event)); - - collectVisible(); - } - - protected void collectVisible() { - visible.clear(); - renderInfos.int2ObjectEntrySet() - .stream() - .map(Map.Entry::getValue) - .filter(ContraptionRenderInfo::isVisible) - .forEach(visible::add); - } - - public C getRenderInfo(Contraption c) { - int entityId = c.entity.getId(); - C renderInfo = renderInfos.get(entityId); - - if (renderInfo == null) { - renderInfo = create(c); - renderInfos.put(entityId, renderInfo); - } - - return renderInfo; - } - - public void delete() { - for (C renderer : renderInfos.values()) { - renderer.invalidate(); - } - renderInfos.clear(); - } - - /** - * Remove all render infos associated with dead/removed contraptions. - */ - public void removeDeadRenderers() { - renderInfos.values().removeIf(ContraptionRenderInfo::isDead); - } - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index b82288e3d4..a40400d051 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -73,7 +73,7 @@ public class ContraptionVisual extends Abst setEmbeddingMatrices(partialTick); Contraption contraption = entity.getContraption(); - virtualRenderWorld = ContraptionRenderDispatcher.setupRenderWorld(level, contraption); + virtualRenderWorld = ContraptionRenderInfo.setupRenderWorld(level, contraption); RenderedBlocks blocks = contraption.getRenderedBlocks(); BlockAndTintGetter modelWorld = new WrappedBlockAndTintGetter(virtualRenderWorld) { @@ -91,7 +91,7 @@ public class ContraptionVisual extends Abst .instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); - for (BlockEntity be : contraption.maybeInstancedBlockEntities) { + for (BlockEntity be : contraption.getRenderedBEs()) { setupVisualizer(be, partialTick); } @@ -102,32 +102,6 @@ public class ContraptionVisual extends Abst updateLight(); } - private void setupActor(MutablePair actor, float partialTick) { - MovementContext context = actor.getRight(); - if (context == null) { - return; - } - if (context.world == null) { - context.world = level; - } - - StructureTemplate.StructureBlockInfo blockInfo = actor.getLeft(); - - MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); - if (movementBehaviour == null) { - return; - } - var instance = movementBehaviour.createInstance(this.embedding, virtualRenderWorld, context); - - if (instance == null) { - return; - } - - instance.init(partialTick); - - actors.add(instance); - } - @SuppressWarnings("unchecked") protected void setupVisualizer(T be, float partialTicks) { BlockEntityVisualizer visualizer = (BlockEntityVisualizer) VisualizerRegistry.getVisualizer(be.getType()); @@ -154,6 +128,32 @@ public class ContraptionVisual extends Abst be.setLevel(world); } + private void setupActor(MutablePair actor, float partialTick) { + MovementContext context = actor.getRight(); + if (context == null) { + return; + } + if (context.world == null) { + context.world = level; + } + + StructureTemplate.StructureBlockInfo blockInfo = actor.getLeft(); + + MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); + if (movementBehaviour == null) { + return; + } + var visual = movementBehaviour.createVisual(this.embedding, virtualRenderWorld, context); + + if (visual == null) { + return; + } + + visual.init(partialTick); + + actors.add(visual); + } + @Override public Plan planTick() { return NestedPlan.of( diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/OrientedContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/OrientedContraptionEntityRenderer.java index 53b8e89af2..5451f9ff18 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/OrientedContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/OrientedContraptionEntityRenderer.java @@ -7,20 +7,18 @@ import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.client.renderer.entity.EntityRendererProvider; public class OrientedContraptionEntityRenderer extends ContraptionEntityRenderer { - public OrientedContraptionEntityRenderer(EntityRendererProvider.Context context) { super(context); } @Override - public boolean shouldRender(OrientedContraptionEntity entity, Frustum p_225626_2_, double p_225626_3_, - double p_225626_5_, double p_225626_7_) { - if (!super.shouldRender(entity, p_225626_2_, p_225626_3_, p_225626_5_, p_225626_7_)) + public boolean shouldRender(OrientedContraptionEntity entity, Frustum frustum, double cameraX, double cameraY, + double cameraZ) { + if (!super.shouldRender(entity, frustum, cameraX, cameraY, cameraZ)) return false; if (entity.getContraption() .getType() == ContraptionType.MOUNTED && entity.getVehicle() == null) return false; return true; } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java deleted file mode 100644 index cc4319461e..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/render/SBBContraptionManager.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.simibubi.create.content.contraptions.render; - -import com.jozufozu.flywheel.api.event.RenderStageEvent; -import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.simibubi.create.CreateClient; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; -import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; -import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.SuperByteBufferCache; -import com.simibubi.create.foundation.render.VirtualRenderHelper; -import com.simibubi.create.foundation.utility.Pair; -import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; - -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.BlockRenderDispatcher; -import net.minecraft.client.renderer.block.ModelBlockRenderer; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.core.BlockPos; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; - -public class SBBContraptionManager extends ContraptionRenderingWorld { - public static final SuperByteBufferCache.Compartment> CONTRAPTION = new SuperByteBufferCache.Compartment<>(); - private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); - - public SBBContraptionManager(LevelAccessor world) { - super(world); - } - - @Override - public void renderLayer(RenderStageEvent event) { - super.renderLayer(event); -// RenderType type = event.getType(); -// VertexConsumer consumer = event.buffers.bufferSource() -// .getBuffer(type); -// visible.forEach(info -> renderContraptionLayerSBB(info, type, consumer)); -// -// event.buffers.bufferSource().endBatch(type); - } - - @Override - public boolean invalidate(Contraption contraption) { - for (RenderType chunkBufferLayer : RenderType.chunkBufferLayers()) { - CreateClient.BUFFER_CACHE.invalidate(CONTRAPTION, Pair.of(contraption, chunkBufferLayer)); - } - return super.invalidate(contraption); - } - - @Override - protected ContraptionRenderInfo create(Contraption c) { - VirtualRenderWorld renderWorld = ContraptionRenderDispatcher.setupRenderWorld(world, c); - return new ContraptionRenderInfo(c, renderWorld); - } - - private void renderContraptionLayerSBB(ContraptionRenderInfo renderInfo, RenderType layer, VertexConsumer consumer) { - if (!renderInfo.isVisible()) return; - - SuperByteBuffer contraptionBuffer = CreateClient.BUFFER_CACHE.get(CONTRAPTION, Pair.of(renderInfo.contraption, layer), () -> buildStructureBuffer(renderInfo.renderWorld, renderInfo.contraption, layer)); - - if (!contraptionBuffer.isEmpty()) { - ContraptionMatrices matrices = renderInfo.getMatrices(); - - contraptionBuffer.transform(matrices.getModel()) - .light(matrices.getWorld()) - .hybridLight() - .renderInto(matrices.getViewProjection(), consumer); - } - } - - private static SuperByteBuffer buildStructureBuffer(VirtualRenderWorld renderWorld, Contraption contraption, RenderType layer) { - BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; - ModelBlockRenderer renderer = dispatcher.getModelRenderer(); - ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); - - PoseStack poseStack = objects.poseStack; - RandomSource random = objects.random; - RenderedBlocks blocks = contraption.getRenderedBlocks(); - - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); - - ModelBlockRenderer.enableCaching(); - for (BlockPos pos : blocks.positions()) { - BlockState state = blocks.lookup().apply(pos); - if (state.getRenderShape() == RenderShape.MODEL) { - BakedModel model = dispatcher.getBlockModel(state); - ModelData modelData = contraption.modelData.getOrDefault(pos, ModelData.EMPTY); - modelData = model.getModelData(renderWorld, pos, state, modelData); - long randomSeed = state.getSeed(pos); - random.setSeed(randomSeed); - if (model.getRenderTypes(state, random, modelData).contains(layer)) { - poseStack.pushPose(); - poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); - renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, random, randomSeed, OverlayTexture.NO_OVERLAY, modelData, layer); - poseStack.popPose(); - } - } - } - ModelBlockRenderer.clearCache(); - - shadeSeparatingWrapper.clear(); - return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); - } - - private static class ThreadLocalObjects { - public final PoseStack poseStack = new PoseStack(); - public final RandomSource random = RandomSource.createNewThreadLocalInstance(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); - public final BufferBuilder shadedBuilder = new BufferBuilder(512); - public final BufferBuilder unshadedBuilder = new BufferBuilder(512); - } -} diff --git a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorMovementBehaviour.java b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorMovementBehaviour.java index 9c8c7193d5..2115fe0f8c 100644 --- a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorMovementBehaviour.java @@ -32,12 +32,6 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import net.minecraft.world.phys.Vec3; public class SlidingDoorMovementBehaviour implements MovementBehaviour { - - @Override - public boolean renderAsNormalBlockEntity() { - return true; - } - @Override public boolean mustTickWhileDisabled() { return true; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 15c156de6e..ef84b837a7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -64,7 +64,7 @@ public class BeltVisual extends KineticBlockEntityVisual { PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom); SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - Instancer beltModel = instancerProvider.instancer(AllInstanceTypes.BELTS, Models.partial(beltPartial)); + Instancer beltModel = instancerProvider.instancer(AllInstanceTypes.BELT, Models.partial(beltPartial)); keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java index 2716d0dac1..afe7b35db1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java @@ -9,6 +9,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -18,7 +19,6 @@ import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.mounted.MountedContraption; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.deployer.DeployerBlockEntity.Mode; import com.simibubi.create.content.logistics.filter.FilterItemStack; import com.simibubi.create.content.schematics.SchematicInstances; @@ -282,20 +282,20 @@ public class DeployerMovementBehaviour implements MovementBehaviour { } @Override - public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, - ContraptionMatrices matrices, MultiBufferSource buffers) { - if (!ContraptionRenderDispatcher.canInstance()) - DeployerRenderer.renderInContraption(context, renderWorld, matrices, buffers); + public boolean disableBlockEntityRendering() { + return true; } @Override - public boolean hasSpecialInstancedRendering() { - return true; + public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, + ContraptionMatrices matrices, MultiBufferSource buffers) { + if (!VisualizationManager.supportsVisualization(context.world)) + DeployerRenderer.renderInContraption(context, renderWorld, matrices, buffers); } @Nullable @Override - public ActorVisual createInstance(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, + public ActorVisual createVisual(VisualizationContext visualizationContext, VirtualRenderWorld simulationWorld, MovementContext movementContext) { return new DeployerActorVisual(visualizationContext, simulationWorld, movementContext); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java index c021f6bdfe..7b33b34877 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java @@ -13,7 +13,6 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -29,6 +28,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; @@ -213,11 +213,11 @@ public class DeployerRenderer extends SafeBlockEntityRenderer .rotateZDegrees(angle) .uncenter() .light(matrices.getWorld(), - ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) + LevelRenderer.getLightColor(renderWorld, context.localPos)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java index 29e15b5ffa..1c4d678725 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawMovementBehaviour.java @@ -90,6 +90,11 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { world.addFreshEntity(entity); } + @Override + public boolean disableBlockEntityRendering() { + return true; + } + @Override @OnlyIn(value = Dist.CLIENT) public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java index b4a336b0d6..b620eefdaf 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java @@ -9,7 +9,6 @@ import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; -import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringRenderer; @@ -21,6 +20,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; @@ -198,7 +198,7 @@ public class SawRenderer extends SafeBlockEntityRenderer { } superBuffer.uncenter() - .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) + .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelMovementBehaviour.java index 9e6143b582..edd3500e1c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelMovementBehaviour.java @@ -119,9 +119,4 @@ public class FunnelMovementBehaviour implements MovementBehaviour { } } - @Override - public boolean renderAsNormalBlockEntity() { - return true; - } - } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 5361325752..a8c7293260 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -33,7 +33,7 @@ public class FunnelVisual extends AbstractBlockEntityVisual i PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllPartialModels.FUNNEL_FLAP : AllPartialModels.BELT_FUNNEL_FLAP); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(flapPartial)); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAP, Models.partial(flapPartial)); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 711e11e69d..31739cddf5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -31,7 +31,7 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual model = instancerProvider.instancer(AllInstanceTypes.FLAPS, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); + Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAP, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java index 646c3783d0..85f183bac8 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java @@ -22,11 +22,6 @@ public class BasinMovementBehaviour implements MovementBehaviour { return map; } - @Override - public boolean renderAsNormalBlockEntity() { - return true; - } - @Override public void tick(MovementContext context) { MovementBehaviour.super.tick(context); diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java index ff9bc873f2..3074fc8afc 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerMovementBehaviour.java @@ -30,11 +30,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlazeBurnerMovementBehaviour implements MovementBehaviour { - @Override - public boolean renderAsNormalBlockEntity() { - return false; - } - @Override public ItemStack canBeDisabledVia(MovementContext context) { return null; @@ -117,6 +112,11 @@ public class BlazeBurnerMovementBehaviour implements MovementBehaviour { return false; } + @Override + public boolean disableBlockEntityRendering() { + return true; + } + @Override @OnlyIn(Dist.CLIENT) public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java index 6c343cbbab..5a6f1b47b4 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java @@ -254,17 +254,17 @@ public class CarriageContraption extends Contraption { return secondBogeyPos; } - private Collection specialRenderedBEsOutsidePortal = new ArrayList<>(); + private Collection renderedBEsOutsidePortal = new ArrayList<>(); @Override public RenderedBlocks getRenderedBlocks() { if (notInPortal()) return super.getRenderedBlocks(); - specialRenderedBEsOutsidePortal = new ArrayList<>(); - specialRenderedBlockEntities.stream() + renderedBEsOutsidePortal = new ArrayList<>(); + renderedBlockEntities.stream() .filter(be -> !isHiddenInPortal(be.getBlockPos())) - .forEach(specialRenderedBEsOutsidePortal::add); + .forEach(renderedBEsOutsidePortal::add); Map values = new HashMap<>(); blocks.forEach((pos, info) -> { @@ -278,10 +278,10 @@ public class CarriageContraption extends Contraption { } @Override - public Collection getSpecialRenderedBEs() { + public Collection getRenderedBEs() { if (notInPortal()) - return super.getSpecialRenderedBEs(); - return specialRenderedBEsOutsidePortal; + return super.getRenderedBEs(); + return renderedBEsOutsidePortal; } @Override diff --git a/src/main/java/com/simibubi/create/foundation/events/ClientEvents.java b/src/main/java/com/simibubi/create/foundation/events/ClientEvents.java index 9aaee19260..3264d7ec7a 100644 --- a/src/main/java/com/simibubi/create/foundation/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/foundation/events/ClientEvents.java @@ -12,6 +12,7 @@ import com.simibubi.create.content.contraptions.minecart.CouplingHandlerClient; import com.simibubi.create.content.contraptions.minecart.CouplingPhysics; import com.simibubi.create.content.contraptions.minecart.CouplingRenderer; import com.simibubi.create.content.contraptions.minecart.capability.CapabilityMinecartController; +import com.simibubi.create.content.contraptions.render.ContraptionRenderInfoManager; import com.simibubi.create.content.decoration.girder.GirderWrenchBehavior; import com.simibubi.create.content.equipment.armor.BacktankArmorLayer; import com.simibubi.create.content.equipment.armor.DivingHelmetItem; @@ -155,6 +156,7 @@ public class ClientEvents { PlacementHelpers.tick(); CreateClient.OUTLINER.tickOutlines(); CreateClient.GHOST_BLOCKS.tickGhosts(); + ContraptionRenderInfoManager.tickFor(world); BlueprintOverlayRenderer.tick(); ToolboxHandlerClient.clientTick(); TrackTargetingClient.clientTick(); diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index dbddc143aa..4a4acd8155 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -19,8 +19,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class AllInstanceTypes { - // FIXME: optimize layouts/pack fields together if possible - public static final InstanceType ROTATING = SimpleInstanceType.builder(RotatingInstance::new) .cullShader(asResource("instance/cull/rotating.glsl")) .vertexShader(asResource("instance/rotating.vert")) @@ -51,7 +49,8 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 34, instance.rotationAxisZ); }) .register(); - public static final InstanceType BELTS = SimpleInstanceType.builder(BeltInstance::new) + + public static final InstanceType BELT = SimpleInstanceType.builder(BeltInstance::new) .cullShader(asResource("instance/cull/belt.glsl")) .vertexShader(asResource("instance/belt.vert")) .layout(LayoutBuilder.create() @@ -92,9 +91,10 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 72, instance.scrollMult); }) .register(); - public static final InstanceType ACTORS = SimpleInstanceType.builder(ActorInstance::new) - .cullShader(asResource("instance/cull/contraption_actor.glsl")) - .vertexShader(asResource("instance/contraption_actor.vert")) + + public static final InstanceType ACTOR = SimpleInstanceType.builder(ActorInstance::new) + .cullShader(asResource("instance/cull/actor.glsl")) + .vertexShader(asResource("instance/actor.vert")) .layout(LayoutBuilder.create() .vector("pos", FloatRepr.FLOAT, 3) .vector("light", IntegerRepr.SHORT, 2) @@ -126,7 +126,7 @@ public class AllInstanceTypes { .register(); // TODO: remove - public static final InstanceType FLAPS = SimpleInstanceType.builder(FlapInstance::new) + public static final InstanceType FLAP = SimpleInstanceType.builder(FlapInstance::new) .cullShader(asResource("instance/cull/flap.glsl")) .vertexShader(asResource("instance/flap.vert")) .layout(LayoutBuilder.create() diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 6940844b0a..3e4bf03280 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import org.joml.Matrix4f; import org.joml.Vector4f; -import com.jozufozu.flywheel.api.backend.BackendManager; +import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.impl.visualization.VisualizationHelper; import com.jozufozu.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; @@ -50,7 +50,7 @@ public class BlockEntityRenderHelper { Iterator iterator = customRenderBEs.iterator(); while (iterator.hasNext()) { BlockEntity blockEntity = iterator.next(); - if (BackendManager.isBackendOn() && VisualizationHelper.shouldSkipRender(blockEntity)) + if (VisualizationManager.supportsVisualization(world) && VisualizationHelper.shouldSkipRender(blockEntity)) continue; BlockEntityRenderer renderer = Minecraft.getInstance().getBlockEntityRenderDispatcher().getRenderer(blockEntity); diff --git a/src/main/resources/assets/create/flywheel/instance/contraption_actor.vert b/src/main/resources/assets/create/flywheel/instance/actor.vert similarity index 100% rename from src/main/resources/assets/create/flywheel/instance/contraption_actor.vert rename to src/main/resources/assets/create/flywheel/instance/actor.vert diff --git a/src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl b/src/main/resources/assets/create/flywheel/instance/cull/actor.glsl similarity index 100% rename from src/main/resources/assets/create/flywheel/instance/cull/contraption_actor.glsl rename to src/main/resources/assets/create/flywheel/instance/cull/actor.glsl From 0d324ffdf91a211f61811c0e0df4495987a559f8 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Mon, 20 May 2024 21:31:55 -0700 Subject: [PATCH 25/35] Simply implless - Use split api/runtime flywheel jars - Update instance types to use single packed light int - Update visuals to use new context location --- build.gradle | 29 ++----------------- gradle.properties | 2 +- .../harvester/HarvesterActorVisual.java | 2 +- .../actors/psi/PSIActorVisual.java | 4 +-- .../contraptions/actors/psi/PSIVisual.java | 8 ++--- .../actors/roller/RollerActorVisual.java | 2 +- .../contraptions/bearing/BearingVisual.java | 4 +-- .../bearing/StabilizedBearingVisual.java | 4 +-- .../contraptions/chassis/StickerVisual.java | 4 +-- .../elevator/ElevatorPulleyVisual.java | 4 +-- .../gantry/GantryCarriageVisual.java | 4 +-- .../pulley/AbstractPulleyVisual.java | 14 ++++----- .../render/ContraptionVisual.java | 16 +++++----- .../equipment/toolbox/ToolBoxVisual.java | 4 +-- .../fluids/pipes/valve/FluidValveVisual.java | 4 +-- .../content/kinetics/belt/BeltVisual.java | 3 +- .../kinetics/crank/HandCrankVisual.java | 4 +-- .../deployer/DeployerActorVisual.java | 6 ++-- .../kinetics/deployer/DeployerVisual.java | 8 ++--- .../kinetics/flywheel/FlywheelVisual.java | 4 +-- .../content/kinetics/gauge/GaugeVisual.java | 4 +-- .../kinetics/gearbox/GearboxVisual.java | 3 +- .../kinetics/mechanicalArm/ArmVisual.java | 4 +-- .../content/kinetics/mixer/MixerVisual.java | 4 +-- .../content/kinetics/press/PressVisual.java | 4 +-- .../steamEngine/SteamEngineVisual.java | 4 +-- .../kinetics/waterwheel/WaterWheelVisual.java | 2 +- .../logistics/depot/EjectorVisual.java | 4 +-- .../logistics/flwdata/FlapInstance.java | 15 ++++------ .../logistics/funnel/FunnelVisual.java | 7 ++--- .../logistics/tunnel/BeltTunnelVisual.java | 7 ++--- .../analogLever/AnalogLeverVisual.java | 4 +-- .../redstone/diodes/BrassDiodeVisual.java | 4 +-- .../cannon/SchematicannonVisual.java | 4 +-- .../content/trains/bogey/BogeyRenderer.java | 9 ++++-- .../entity/CarriageContraptionVisual.java | 4 +-- .../content/trains/track/TrackVisual.java | 23 ++++++++------- .../foundation/render/AllInstanceTypes.java | 12 ++++---- .../render/BlockEntityRenderHelper.java | 2 +- .../render/VirtualRenderHelper.java | 4 +-- .../debugInfo/DebugInformation.java | 9 ++++-- .../create/flywheel/instance/actor.vert | 2 +- .../assets/create/flywheel/instance/belt.vert | 2 +- .../assets/create/flywheel/instance/flap.vert | 2 +- .../create/flywheel/instance/rotating.vert | 2 +- 45 files changed, 121 insertions(+), 150 deletions(-) diff --git a/build.gradle b/build.gradle index 42beba0b1d..7a0efbe29b 100644 --- a/build.gradle +++ b/build.gradle @@ -11,14 +11,6 @@ plugins { jarJar.enable() boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equals('false'); -// jozu: I use a gradle workspace with both projects. -// The project is named Flywheel-Forge, but sub-projects are named by folder. -Project flywheelProject = findProject(':Flywheel') -boolean flywheelInWorkspace = flywheelProject != null - -if (flywheelInWorkspace) { - println('Workspace detected, using Flywheel sibling project') -} ext.buildNumber = System.getenv('BUILD_NUMBER') @@ -75,13 +67,6 @@ minecraft { client { workingDirectory project.file('run') - mods { - if (flywheelInWorkspace) { - flywheel { - source flywheelProject.sourceSets.main - } - } - } } server { @@ -93,13 +78,6 @@ minecraft { property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' property 'forge.logging.console.level', 'debug' args '--mod', 'create', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources') - mods { - if (flywheelInWorkspace) { - flywheel { - source flywheelProject.sourceSets.main - } - } - } } gameTestServer { @@ -173,11 +151,8 @@ dependencies { implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") - if (flywheelInWorkspace) { - implementation flywheelProject - } else { - implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") - } + compileOnly fg.deobf("com.jozufozu.flywheel:flywheel-forge-api-${flywheel_minecraft_version}:${flywheel_version}") + runtimeOnly fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-common-api:${jei_version}") compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-forge-api:${jei_version}") diff --git a/gradle.properties b/gradle.properties index e23efe4034..a5597d1c4a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-78 +flywheel_version = 1.0.0-beta-87 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 412bb2ead8..0fbfe533e0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -42,7 +42,7 @@ public class HarvesterActorVisual extends ActorVisual { horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); - harvester.setBlockLight(localBlockLight()); + harvester.light(localBlockLight(), 0); harvester.setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index 7b9ce9c49a..ff1c26188f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -17,8 +17,8 @@ public class PSIActorVisual extends ActorVisual { instance = new PIInstance(context.instancerProvider(), movementContext.state, movementContext.localPos); instance.init(false); - instance.middle.setBlockLight(localBlockLight()); - instance.top.setBlockLight(localBlockLight()); + instance.middle.light(localBlockLight(), 0); + instance.top.light(localBlockLight(), 0); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 62c6f3bf6d..c524d0116f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; -import com.jozufozu.flywheel.api.visual.VisualTickContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.TickableVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; @@ -27,12 +27,12 @@ public class PSIVisual extends AbstractBlockEntityVisual e } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { float interpolatedAngle = blockEntity.getInterpolatedAngle(ctx.partialTick() - 1); Quaternionf rot = rotationAxis.rotationDegrees(interpolatedAngle); diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 7a915312e9..90031a53ab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -44,14 +44,14 @@ public class StabilizedBearingVisual extends ActorVisual { int blockLight = localBlockLight(); topInstance.setPosition(movementContext.localPos) .setRotation(blockOrientation) - .setBlockLight(blockLight); + .light(blockLight, 0); shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite())) .createInstance(); // not rotating so no need to set speed, axis, etc. shaft.setPosition(movementContext.localPos) - .setBlockLight(blockLight); + .light(blockLight, 0); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index b1b2aa4946..fbffed3c24 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -39,7 +39,7 @@ public class StickerVisual extends AbstractBlockEntityVisual } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { float offset = blockEntity.piston.getValue(ctx.partialTick()); if (fakeWorld) diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index 62c8190787..fcf7fb63d0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.elevator; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.content.kinetics.base.ShaftVisual; @@ -13,7 +13,7 @@ public class ElevatorPulleyVisual extends ShaftVisual } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index d77b6c3dec..f9b1c80638 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -51,7 +51,7 @@ public class GantryCarriageVisual extends ShaftVisual } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { float cogAngle = getCogAngle(); if (Mth.equal(cogAngle, lastAngle)) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index eb026969f1..eaedab2582 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -4,11 +4,10 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.box.MutableBox; import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.light.LightPacking; import com.jozufozu.flywheel.lib.light.LightVolume; import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; @@ -60,7 +59,7 @@ public abstract class AbstractPulleyVisual extends } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { updateOffset(ctx.partialTick()); coil.setRotation(rotationAxis.rotationDegrees(offset * 180)) .setChanged(); @@ -75,8 +74,7 @@ public abstract class AbstractPulleyVisual extends short packed = light.getPackedLight(pos.getX(), pos.getY() - i, pos.getZ()); data.setPosition(getVisualPosition()) .nudgePosition(0, -offset, 0) - .setBlockLight(LightPacking.getBlock(packed)) - .setSkyLight(LightPacking.getSky(packed)) + .light(packed) .setChanged(); }); @@ -89,8 +87,7 @@ public abstract class AbstractPulleyVisual extends short packed = light.getPackedLight(pos.getX(), pos.getY(), pos.getZ()); rope1.setPosition(getVisualPosition()) .nudgePosition(0, -halfRopeNudge, 0) - .setBlockLight(LightPacking.getBlock(packed)) - .setSkyLight(LightPacking.getSky(packed)) + .light(packed) .setChanged(); }); @@ -103,8 +100,7 @@ public abstract class AbstractPulleyVisual extends rope.get(i) .setPosition(getVisualPosition()) .nudgePosition(0, -offset + i + 1, 0) - .setBlockLight(LightPacking.getBlock(packed)) - .setSkyLight(LightPacking.getSky(packed)) + .light(packed) .setChanged(); } } else { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index a40400d051..218313d510 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -12,15 +12,13 @@ import com.jozufozu.flywheel.api.visual.BlockEntityVisual; import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.LitVisual; import com.jozufozu.flywheel.api.visual.TickableVisual; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; -import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.BlockEntityVisualizer; import com.jozufozu.flywheel.api.visualization.VisualEmbedding; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.api.visualization.VisualizerRegistry; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; +import com.jozufozu.flywheel.lib.model.baked.ForgeMultiBlockModelBuilder; import com.jozufozu.flywheel.lib.task.ForEachPlan; import com.jozufozu.flywheel.lib.task.NestedPlan; import com.jozufozu.flywheel.lib.task.PlanMap; @@ -52,8 +50,8 @@ public class ContraptionVisual extends Abst protected final VisualEmbedding embedding; protected final List> children = new ArrayList<>(); protected final List actors = new ArrayList<>(); - protected final PlanMap dynamicVisuals = new PlanMap<>(); - protected final PlanMap tickableVisuals = new PlanMap<>(); + protected final PlanMap dynamicVisuals = new PlanMap<>(); + protected final PlanMap tickableVisuals = new PlanMap<>(); protected VirtualRenderWorld virtualRenderWorld; protected Model model; protected TransformedInstance structure; @@ -83,7 +81,7 @@ public class ContraptionVisual extends Abst } }; - model = new MultiBlockModelBuilder(modelWorld, blocks.positions()) + model = new ForgeMultiBlockModelBuilder(modelWorld, blocks.positions()) .modelDataLookup(pos -> contraption.modelData.getOrDefault(pos, ModelData.EMPTY)) .build(); @@ -155,7 +153,7 @@ public class ContraptionVisual extends Abst } @Override - public Plan planTick() { + public Plan planTick() { return NestedPlan.of( ForEachPlan.of(() -> actors, ActorVisual::tick), tickableVisuals @@ -163,7 +161,7 @@ public class ContraptionVisual extends Abst } @Override - public Plan planFrame() { + public Plan planFrame() { return NestedPlan.of( RunnablePlan.of(this::beginFrame), ForEachPlan.of(() -> actors, ActorVisual::beginFrame), @@ -171,7 +169,7 @@ public class ContraptionVisual extends Abst ); } - protected void beginFrame(VisualFrameContext context) { + protected void beginFrame(DynamicVisual.Context context) { var partialTick = context.partialTick(); setEmbeddingMatrices(partialTick); diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index c669847c1c..7cfa3ae65e 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -50,7 +50,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { float partialTicks = ctx.partialTick(); float lidAngle = blockEntity.lid.getValue(partialTicks); diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 07d7880c89..cc613a7f87 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -52,7 +52,7 @@ public class FluidValveVisual extends ShaftVisual impleme } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { if (blockEntity.pointer.settled() && settled) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index ef84b837a7..530d70d4db 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -164,8 +164,7 @@ public class BeltVisual extends KineticBlockEntityVisual { .setRotationOffset(bottom ? 0.5f : 0f) .setColor(blockEntity) .setPosition(getVisualPosition()) - .setBlockLight(level.getBrightness(LightLayer.BLOCK, pos)) - .setSkyLight(level.getBrightness(LightLayer.SKY, pos)) + .light(level.getBrightness(LightLayer.BLOCK, pos), level.getBrightness(LightLayer.SKY, pos)) .setChanged(); return key; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index ad25c0beaf..60b16fd35e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -28,7 +28,7 @@ public class HandCrankVisual extends SingleRotatingVisual } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { if (crank == null) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index 211d6b87a4..d4762b53d0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -69,10 +69,10 @@ public class DeployerActorVisual extends ActorVisual { shaft.setRotationAxis(axis) .setPosition(context.localPos) - .setBlockLight(blockLight); + .light(blockLight, 0); - pole.setBlockLight(blockLight); - hand.setBlockLight(blockLight); + pole.light(blockLight, 0); + hand.light(blockLight, 0); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 733239db66..330caffc70 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -8,8 +8,8 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; -import com.jozufozu.flywheel.api.visual.VisualTickContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.TickableVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; @@ -69,7 +69,7 @@ public class DeployerVisual extends ShaftVisual implements } @Override - public void tick(VisualTickContext ctx) { + public void tick(TickableVisual.Context context) { PartialModel handPose = blockEntity.getHandPose(); if (currentHand != handPose) { @@ -80,7 +80,7 @@ public class DeployerVisual extends ShaftVisual implements } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { float newProgress = getProgress(ctx.partialTick()); if (Mth.equal(newProgress, progress)) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index 438f29cb25..0965872268 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -36,7 +36,7 @@ public class FlywheelVisual extends KineticBlockEntityVisual implemen } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { if (Mth.equal(blockEntity.prevDialState, blockEntity.dialState)) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index aafca8a6ab..95b668e461 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -47,8 +47,7 @@ public class GearboxVisual extends KineticBlockEntityVisual .setRotationalSpeed(getSpeed(direction)) .setRotationOffset(getRotationOffset(axis)).setColor(blockEntity) .setPosition(getVisualPosition()) - .setBlockLight(blockLight) - .setSkyLight(skyLight) + .light(blockLight, skyLight) .setChanged(); keys.put(direction, key); diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 4a618079b1..72ed65618a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import com.google.common.collect.Lists; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -70,7 +70,7 @@ public class ArmVisual extends SingleRotatingVisual implements S } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { if (blockEntity.phase == ArmBlockEntity.Phase.DANCING && blockEntity.getSpeed() != 0) { animateRave(ctx.partialTick()); firstRender = true; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 9108d03f12..d64cce41e5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; @@ -49,7 +49,7 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { animate(ctx.partialTick()); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 1b548a5e55..807441bf94 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.OrientedInstance; @@ -40,7 +40,7 @@ public class PressVisual extends ShaftVisual impleme } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { transformModels(ctx.partialTick()); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index 1deae7fe42..e7b7fff79f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.kinetics.steamEngine; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -36,7 +36,7 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual extends KineticBl dir = state.getValue(WaterWheelBlock.FACING); } PoseStack transform = CachedBufferer.rotateToFaceVertical(dir).get(); - return new BakedModelBuilder(model) + return BakedModelBuilder.create(model) .poseStack(transform) .build(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index f79996aa78..8e210f1e9e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.logistics.depot; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -32,7 +32,7 @@ public class EjectorVisual extends ShaftVisual implements Si } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { float lidProgress = getLidProgress(ctx.partialTick()); if (lidProgress == lastProgress) { diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java index 1ef7599b34..d9db60738d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java @@ -17,6 +17,7 @@ public class FlapInstance extends AbstractInstance implements FlatLit { public float z; public byte blockLight; public byte skyLight; + public int packedLight; public float segmentOffsetX; public float segmentOffsetY; public float segmentOffsetZ; @@ -49,22 +50,16 @@ public class FlapInstance extends AbstractInstance implements FlatLit { } @Override - public FlapInstance setBlockLight(int blockLight) { - this.blockLight = (byte) (blockLight & 0xF); - return this; + public FlapInstance light(int blockLight, int skyLight) { + return this.light(LightTexture.pack(blockLight, skyLight)); } @Override - public FlapInstance setSkyLight(int skyLight) { - this.skyLight = (byte) (skyLight & 0xF); + public FlapInstance light(int packedLight) { + this.packedLight = packedLight; return this; } - @Override - public int getPackedLight() { - return LightTexture.pack(this.blockLight, this.skyLight); - } - public FlapInstance setSegmentOffset(float x, float y, float z) { this.segmentOffsetX = x; this.segmentOffsetY = y; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index a8c7293260..9f3fb3c543 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; @@ -51,8 +51,7 @@ public class FunnelVisual extends AbstractBlockEntityVisual i key.setPosition(getVisualPosition()) .setSegmentOffset(segmentOffset, 0, -blockEntity.getFlapOffset()) - .setBlockLight(blockLight) - .setSkyLight(skyLight) + .light(blockLight, skyLight) .setHorizontalAngle(horizontalAngle) .setFlapness(flapness) .setFlapScale(-1) @@ -65,7 +64,7 @@ public class FunnelVisual extends AbstractBlockEntityVisual i } @Override - public void beginFrame(VisualFrameContext ctx) { + public void beginFrame(DynamicVisual.Context ctx) { if (flaps == null) return; float flapness = blockEntity.flap.getValue(ctx.partialTick()); diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 31739cddf5..05faf7e9e9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -8,7 +8,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; import com.jozufozu.flywheel.lib.model.Models; @@ -54,8 +54,7 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual { LerpedFloat lerpedFloat = blockEntity.flaps.get(direction); if (lerpedFloat == null) diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java index 7705d4bc66..e2140d3e4a 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone.analogLever; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; @@ -50,7 +50,7 @@ public class AnalogLeverVisual extends AbstractBlockEntityVisual { @@ -179,14 +182,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { void updateLight() { for (int i = 0; i < ties.length; i++) - ties[i].updateLight(level, tiesLightPos[i]) - .setChanged(); + TrackVisual.updateLight(ties[i], level, tiesLightPos[i]); for (int i = 0; i < left.length; i++) - left[i].updateLight(level, leftLightPos[i]) - .setChanged(); + TrackVisual.updateLight(left[i], level, leftLightPos[i]); for (int i = 0; i < right.length; i++) - right[i].updateLight(level, rightLightPos[i]) - .setChanged(); + TrackVisual.updateLight(right[i], level, rightLightPos[i]); if (girder != null) girder.updateLight(); } @@ -265,13 +265,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { void updateLight() { beams.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(level, lightPos[i]) - .setChanged(); + TrackVisual.updateLight(arr[i], level, lightPos[i]); }); beamCaps.forEach(c -> c.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(level, lightPos[i]) - .setChanged(); + TrackVisual.updateLight(arr[i], level, lightPos[i]); })); } @@ -288,4 +286,9 @@ public class TrackVisual extends AbstractBlockEntityVisual { } } + + private static void updateLight(FlatLit instance, Level level, BlockPos pos) { + instance.light(level.getBrightness(LightLayer.BLOCK, pos), level.getBrightness(LightLayer.SKY, pos)) + .setChanged(); + } } diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 4a4acd8155..f209d511a3 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -36,8 +36,8 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, instance.blockLight); - MemoryUtil.memPutShort(ptr + 6, instance.skyLight); + MemoryUtil.memPutShort(ptr + 4, (short) (instance.packedLight & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 6, (short) (instance.packedLight >> 16 & 0xFFFF)); MemoryUtil.memPutInt(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); MemoryUtil.memPutFloat(ptr + 16, instance.y); @@ -70,8 +70,8 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, instance.blockLight); - MemoryUtil.memPutShort(ptr + 6, instance.skyLight); + MemoryUtil.memPutShort(ptr + 4, (short) (instance.packedLight & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 6, (short) (instance.packedLight >> 16 & 0xFFFF)); MemoryUtil.memPutInt(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); MemoryUtil.memPutFloat(ptr + 16, instance.y); @@ -143,8 +143,8 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr, instance.x); MemoryUtil.memPutFloat(ptr + 4, instance.y); MemoryUtil.memPutFloat(ptr + 8, instance.z); - MemoryUtil.memPutShort(ptr + 12, instance.blockLight); - MemoryUtil.memPutShort(ptr + 14, instance.skyLight); + MemoryUtil.memPutShort(ptr + 12, (short) (instance.packedLight & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 14, (short) (instance.packedLight >> 16 & 0xFFFF)); MemoryUtil.memPutFloat(ptr + 16, instance.segmentOffsetX); MemoryUtil.memPutFloat(ptr + 20, instance.segmentOffsetY); MemoryUtil.memPutFloat(ptr + 24, instance.segmentOffsetZ); diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 3e4bf03280..f9be8fa3a5 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -8,8 +8,8 @@ import org.joml.Matrix4f; import org.joml.Vector4f; import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.impl.visualization.VisualizationHelper; import com.jozufozu.flywheel.lib.transform.TransformStack; +import com.jozufozu.flywheel.lib.visual.VisualizationHelper; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AnimationTickHolder; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index 40626fe1a1..41c4db856a 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable; import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.lib.model.ModelCache; import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; +import com.jozufozu.flywheel.lib.model.baked.ForgeBakedModelBuilder; import com.jozufozu.flywheel.lib.model.baked.VirtualEmptyBlockGetter; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer; @@ -29,7 +29,7 @@ public class VirtualRenderHelper { public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); - private static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new BakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); + private static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new ForgeBakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); public static boolean isVirtual(ModelData data) { diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java index d13d80e677..3d8b27655f 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java @@ -9,7 +9,7 @@ import java.util.stream.Stream; import javax.annotation.Nullable; import com.google.common.collect.ImmutableMap; -import com.jozufozu.flywheel.Flywheel; +import com.jozufozu.flywheel.api.Flywheel; import com.jozufozu.flywheel.api.backend.BackendManager; import com.mojang.blaze3d.platform.GlUtil; import com.simibubi.create.Create; @@ -73,7 +73,12 @@ public class DebugInformation { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { DebugInfoSection.builder("Graphics") - .put("Flywheel Version", Flywheel.getVersion().toString()) + .put("Flywheel Version", ModList.get() + .getModContainerById(Flywheel.ID) + .map(c -> c.getModInfo() + .getVersion() + .toString()) + .orElse("None")) .put("Flywheel Backend", () -> BackendManager.getBackend().toString()) .put("OpenGL Renderer", GlUtil::getRenderer) .put("OpenGL Version", GlUtil::getOpenGLVersion) diff --git a/src/main/resources/assets/create/flywheel/instance/actor.vert b/src/main/resources/assets/create/flywheel/instance/actor.vert index 912baa876d..5a84191125 100644 --- a/src/main/resources/assets/create/flywheel/instance/actor.vert +++ b/src/main/resources/assets/create/flywheel/instance/actor.vert @@ -9,5 +9,5 @@ void flw_instanceVertex(in FlwInstance instance) { flw_vertexPos.xyz = rotateByQuaternion(rotated - .5, instance.rotation) + instance.pos + .5; flw_vertexNormal = rotateByQuaternion(rotateByQuaternion(flw_vertexNormal, kineticRot), instance.rotation); - flw_vertexLight = instance.light / 15.; + flw_vertexLight = vec2(instance.light) / 256.; } diff --git a/src/main/resources/assets/create/flywheel/instance/belt.vert b/src/main/resources/assets/create/flywheel/instance/belt.vert index 15fb0061e9..91180c79d5 100644 --- a/src/main/resources/assets/create/flywheel/instance/belt.vert +++ b/src/main/resources/assets/create/flywheel/instance/belt.vert @@ -10,7 +10,7 @@ void flw_instanceVertex(in FlwInstance instance) { float scroll = fract(instance.speed * flw_renderTicks / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult; flw_vertexTexCoord = flw_vertexTexCoord - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll); - flw_vertexLight = instance.light / 15.; + flw_vertexLight = vec2(instance.light) / 256.; flw_vertexOverlay = instance.overlay; #if defined(DEBUG_RAINBOW) diff --git a/src/main/resources/assets/create/flywheel/instance/flap.vert b/src/main/resources/assets/create/flywheel/instance/flap.vert index 2ad5e1226e..bc655cd448 100644 --- a/src/main/resources/assets/create/flywheel/instance/flap.vert +++ b/src/main/resources/assets/create/flywheel/instance/flap.vert @@ -25,5 +25,5 @@ void flw_instanceVertex(in FlwInstance flap) { flw_vertexPos.xyz = rotateByQuaternion(rotated - .5, orientation) + flap.instancePos + .5; flw_vertexNormal = rotateByQuaternion(rotateByQuaternion(flw_vertexNormal, flapRotation), orientation); - flw_vertexLight = flap.light / 15.; + flw_vertexLight = vec2(flap.light) / 256.; } diff --git a/src/main/resources/assets/create/flywheel/instance/rotating.vert b/src/main/resources/assets/create/flywheel/instance/rotating.vert index 17dfd15e78..9f5e7d23e2 100644 --- a/src/main/resources/assets/create/flywheel/instance/rotating.vert +++ b/src/main/resources/assets/create/flywheel/instance/rotating.vert @@ -14,7 +14,7 @@ void flw_instanceVertex(in FlwInstance instance) { flw_vertexPos.xyz = worldPos.xyz + instance.pos + .5; flw_vertexNormal = spin * flw_vertexNormal; - flw_vertexLight = instance.light / 15.; + flw_vertexLight = vec2(instance.light) / 256.; flw_vertexOverlay = instance.overlay; #if defined(DEBUG_RAINBOW) From 669c748bd1098127ddab305c78410c43335b7e07 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Tue, 21 May 2024 17:22:47 -0700 Subject: [PATCH 26/35] Fully fix unshaded geometry in SBBs --- build.gradle | 2 + .../render/ContraptionRenderInfo.java | 24 +--- .../schematics/client/SchematicRenderer.java | 24 +--- .../mixin/accessor/BufferBuilderAccessor.java | 12 ++ .../ponder/element/WorldSectionElement.java | 40 +++--- .../render/ShadeSeparatingVertexConsumer.java | 84 ------------ .../render/ShadedBlockSbbBuilder.java | 126 ++++++++++++++++++ .../foundation/render/SuperByteBuffer.java | 22 ++- .../render/VirtualRenderHelper.java | 62 +++------ .../debugInfo/DebugInformation.java | 3 +- src/main/resources/create.mixins.json | 1 + 11 files changed, 203 insertions(+), 197 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/BufferBuilderAccessor.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/ShadedBlockSbbBuilder.java diff --git a/build.gradle b/build.gradle index 7a0efbe29b..c2368d2a13 100644 --- a/build.gradle +++ b/build.gradle @@ -177,6 +177,8 @@ dependencies { // implementation fg.deobf("com.railwayteam.railways:railways-1.18.2-1.1.1:all") { transitive = false } // runtimeOnly fg.deobf("maven.modrinth:aether:1.19.2-1.0.0-beta.1.1-forge") // runtimeOnly fg.deobf("maven.modrinth:spark:1.10.38-forge") + // runtimeOnly fg.deobf("curse.maven:xycraft-653786:4788862") + // runtimeOnly fg.deobf("curse.maven:xycraft-world-653789:4788863") // https://discord.com/channels/313125603924639766/725850371834118214/910619168821354497 // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index 9ecb738290..470e9d86c6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -4,18 +4,14 @@ import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.api.visualization.VisualizationManager; import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; import com.simibubi.create.content.contraptions.ContraptionWorld; -import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; +import com.simibubi.create.foundation.render.ShadedBlockSbbBuilder; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; -import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import net.minecraft.client.renderer.RenderType; @@ -115,13 +111,8 @@ public class ContraptionRenderInfo { RandomSource random = objects.random; RenderedBlocks blocks = contraption.getRenderedBlocks(); - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + ShadedBlockSbbBuilder sbbBuilder = objects.sbbBuilder; + sbbBuilder.begin(); ModelBlockRenderer.enableCaching(); for (BlockPos pos : blocks.positions()) { @@ -135,22 +126,19 @@ public class ContraptionRenderInfo { if (model.getRenderTypes(state, random, modelData).contains(layer)) { poseStack.pushPose(); poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); - renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, random, randomSeed, OverlayTexture.NO_OVERLAY, modelData, layer); + renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, sbbBuilder, true, random, randomSeed, OverlayTexture.NO_OVERLAY, modelData, layer); poseStack.popPose(); } } } ModelBlockRenderer.clearCache(); - shadeSeparatingWrapper.clear(); - return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); + return sbbBuilder.end(); } private static class ThreadLocalObjects { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); - public final BufferBuilder shadedBuilder = new BufferBuilder(512); - public final BufferBuilder unshadedBuilder = new BufferBuilder(512); + public final ShadedBlockSbbBuilder sbbBuilder = new ShadedBlockSbbBuilder(); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java index 771563a643..d21d3cd917 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java @@ -4,16 +4,12 @@ import java.util.LinkedHashMap; import java.util.Map; import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.content.schematics.SchematicWorld; +import com.simibubi.create.foundation.render.ShadedBlockSbbBuilder; import com.simibubi.create.foundation.render.BlockEntityRenderHelper; -import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.render.VirtualRenderHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderType; @@ -99,13 +95,8 @@ public class SchematicRenderer { SchematicWorld renderWorld = schematic; BoundingBox bounds = renderWorld.getBounds(); - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + ShadedBlockSbbBuilder sbbBuilder = objects.sbbBuilder; + sbbBuilder.begin(); renderWorld.renderMode = true; ModelBlockRenderer.enableCaching(); @@ -124,7 +115,7 @@ public class SchematicRenderer { poseStack.pushPose(); poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ()); - renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true, + renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, sbbBuilder, true, random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); poseStack.popPose(); @@ -134,8 +125,7 @@ public class SchematicRenderer { ModelBlockRenderer.clearCache(); renderWorld.renderMode = false; - shadeSeparatingWrapper.clear(); - return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); + return sbbBuilder.end(); } private static int getLayerCount() { @@ -147,9 +137,7 @@ public class SchematicRenderer { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); public final BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); - public final BufferBuilder shadedBuilder = new BufferBuilder(512); - public final BufferBuilder unshadedBuilder = new BufferBuilder(512); + public final ShadedBlockSbbBuilder sbbBuilder = new ShadedBlockSbbBuilder(); } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/BufferBuilderAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/BufferBuilderAccessor.java new file mode 100644 index 0000000000..22df2610ce --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/BufferBuilderAccessor.java @@ -0,0 +1,12 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import com.mojang.blaze3d.vertex.BufferBuilder; + +@Mixin(BufferBuilder.class) +public interface BufferBuilderAccessor { + @Accessor("vertices") + int create$getVertices(); +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 395fb4c136..27eb93da9a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -8,23 +8,19 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.lib.model.ModelUtil; import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.outliner.AABBOutline; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.ponder.Selection; +import com.simibubi.create.foundation.render.ShadedBlockSbbBuilder; import com.simibubi.create.foundation.render.BlockEntityRenderHelper; -import com.simibubi.create.foundation.render.ShadeSeparatingVertexConsumer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; @@ -415,13 +411,8 @@ public class WorldSectionElement extends AnimatedSceneElement { PoseStack poseStack = objects.poseStack; RandomSource random = objects.random; - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + ShadedBlockSbbBuilder sbbBuilder = objects.sbbBuilder; + sbbBuilder.begin(); world.setMask(this.section); ModelBlockRenderer.enableCaching(); @@ -429,8 +420,11 @@ public class WorldSectionElement extends AnimatedSceneElement { BlockState state = world.getBlockState(pos); FluidState fluidState = world.getFluidState(pos); - poseStack.pushPose(); - poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); + if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) { + // FIXME: The fluid renderer modulos translation to 0-15 on all axes, + // so fluids at positions outside this range will render at the wrong spot. + dispatcher.renderLiquid(pos, world, sbbBuilder.unwrap(true), state, fluidState); + } if (state.getRenderShape() == RenderShape.MODEL) { BakedModel model = dispatcher.getBlockModel(state); @@ -439,30 +433,26 @@ public class WorldSectionElement extends AnimatedSceneElement { modelData = model.getModelData(world, pos, state, modelData); long seed = state.getSeed(pos); random.setSeed(seed); + if (model.getRenderTypes(state, random, modelData).contains(layer)) { - renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true, + poseStack.pushPose(); + poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); + renderer.tesselateBlock(world, model, state, pos, poseStack, sbbBuilder, true, random, seed, OverlayTexture.NO_OVERLAY, modelData, layer); + poseStack.popPose(); } } - - if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) - dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState); - - poseStack.popPose(); }); ModelBlockRenderer.clearCache(); world.clearMask(); - shadeSeparatingWrapper.clear(); - return VirtualRenderHelper.endAndCombine(shadedBuilder, unshadedBuilder); + return sbbBuilder.end(); } private static class ThreadLocalObjects { public final PoseStack poseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); - public final BufferBuilder shadedBuilder = new BufferBuilder(512); - public final BufferBuilder unshadedBuilder = new BufferBuilder(512); + public final ShadedBlockSbbBuilder sbbBuilder = new ShadedBlockSbbBuilder(); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java b/src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java deleted file mode 100644 index fd537ba126..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/ShadeSeparatingVertexConsumer.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.simibubi.create.foundation.render; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; - -import net.minecraft.client.renderer.block.model.BakedQuad; - -public class ShadeSeparatingVertexConsumer implements VertexConsumer { - protected VertexConsumer shadedConsumer; - protected VertexConsumer unshadedConsumer; - - public void prepare(VertexConsumer shadedConsumer, VertexConsumer unshadedConsumer) { - this.shadedConsumer = shadedConsumer; - this.unshadedConsumer = unshadedConsumer; - } - - public void clear() { - shadedConsumer = null; - unshadedConsumer = null; - } - - @Override - public void putBulkData(PoseStack.Pose poseEntry, BakedQuad quad, float[] colorMuls, float red, float green, float blue, int[] combinedLights, int combinedOverlay, boolean mulColor) { - if (quad.isShade()) { - shadedConsumer.putBulkData(poseEntry, quad, colorMuls, red, green, blue, combinedLights, combinedOverlay, mulColor); - } else { - unshadedConsumer.putBulkData(poseEntry, quad, colorMuls, red, green, blue, combinedLights, combinedOverlay, mulColor); - } - } - - @Override - public void putBulkData(PoseStack.Pose matrixEntry, BakedQuad bakedQuad, float[] baseBrightness, float red, float green, float blue, float alpha, int[] lightmapCoords, int overlayCoords, boolean readExistingColor) { - if (bakedQuad.isShade()) { - shadedConsumer.putBulkData(matrixEntry, bakedQuad, baseBrightness, red, green, blue, alpha, lightmapCoords, overlayCoords, readExistingColor); - } else { - unshadedConsumer.putBulkData(matrixEntry, bakedQuad, baseBrightness, red, green, blue, alpha, lightmapCoords, overlayCoords, readExistingColor); - } - } - - @Override - public VertexConsumer vertex(double x, double y, double z) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public VertexConsumer color(int red, int green, int blue, int alpha) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public VertexConsumer uv(float u, float v) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public VertexConsumer overlayCoords(int u, int v) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public VertexConsumer uv2(int u, int v) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public VertexConsumer normal(float x, float y, float z) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public void endVertex() { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public void defaultColor(int red, int green, int blue, int alpha) { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } - - @Override - public void unsetDefaultColor() { - throw new UnsupportedOperationException("ShadeSeparatingVertexConsumer only supports putBulkData!"); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/ShadedBlockSbbBuilder.java b/src/main/java/com/simibubi/create/foundation/render/ShadedBlockSbbBuilder.java new file mode 100644 index 0000000000..aa212b4196 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/render/ShadedBlockSbbBuilder.java @@ -0,0 +1,126 @@ +package com.simibubi.create.foundation.render; + +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.simibubi.create.foundation.mixin.accessor.BufferBuilderAccessor; + +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; +import net.minecraft.client.renderer.block.model.BakedQuad; + +public class ShadedBlockSbbBuilder implements VertexConsumer { + protected final BufferBuilder bufferBuilder; + protected final IntList shadeSwapVertices = new IntArrayList(); + protected boolean currentShade; + + public ShadedBlockSbbBuilder(BufferBuilder bufferBuilder) { + this.bufferBuilder = bufferBuilder; + } + + public ShadedBlockSbbBuilder() { + this(new BufferBuilder(512)); + } + + public void begin() { + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + shadeSwapVertices.clear(); + currentShade = true; + } + + public SuperByteBuffer end() { + RenderedBuffer data = bufferBuilder.end(); + int vertexCount = data.drawState().vertexCount(); + MutableTemplateMesh mutableMesh = new MutableTemplateMesh(vertexCount); + VirtualRenderHelper.transferBlockVertexData(data.vertexBuffer(), data.drawState().format().getVertexSize(), 0, mutableMesh, 0, vertexCount); + return new SuperByteBuffer(mutableMesh.toImmutable(), shadeSwapVertices.toIntArray()); + } + + public BufferBuilder unwrap(boolean shade) { + prepareForGeometry(shade); + return bufferBuilder; + } + + private void prepareForGeometry(boolean shade) { + if (shade != currentShade) { + shadeSwapVertices.add(((BufferBuilderAccessor) bufferBuilder).create$getVertices()); + currentShade = shade; + } + } + + private void prepareForGeometry(BakedQuad quad) { + prepareForGeometry(quad.isShade()); + } + + @Override + public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, int light, int overlay) { + prepareForGeometry(quad); + bufferBuilder.putBulkData(pose, quad, red, green, blue, light, overlay); + } + + @Override + public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, float alpha, int light, int overlay, boolean readExistingColor) { + prepareForGeometry(quad); + bufferBuilder.putBulkData(pose, quad, red, green, blue, alpha, light, overlay, readExistingColor); + } + + @Override + public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float[] brightnesses, float red, float green, float blue, int[] lights, int overlay, boolean readExistingColor) { + prepareForGeometry(quad); + bufferBuilder.putBulkData(pose, quad, brightnesses, red, green, blue, lights, overlay, readExistingColor); + } + + @Override + public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float[] brightnesses, float red, float green, float blue, float alpha, int[] lights, int overlay, boolean readExistingColor) { + prepareForGeometry(quad); + bufferBuilder.putBulkData(pose, quad, brightnesses, red, green, blue, alpha, lights, overlay, readExistingColor); + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public VertexConsumer uv(float u, float v) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public VertexConsumer uv2(int u, int v) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public void endVertex() { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } + + @Override + public void unsetDefaultColor() { + throw new UnsupportedOperationException("ShadedBlockSbbBuilder only supports putBulkData!"); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index a68ec03029..c6b5472db4 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -25,7 +25,7 @@ import net.minecraft.world.level.Level; public class SuperByteBuffer implements TransformStack { private final TemplateMesh template; - private final int unshadedStartVertex; + private final int[] shadeSwapVertices; // Vertex Position and Normals private final PoseStack transforms = new PoseStack(); @@ -52,13 +52,17 @@ public class SuperByteBuffer implements TransformStack { // Temporary private static final Long2IntMap WORLD_LIGHT_CACHE = new Long2IntOpenHashMap(); - public SuperByteBuffer(TemplateMesh template, int unshadedStartVertex) { + public SuperByteBuffer(TemplateMesh template, int[] shadeSwapVertices) { this.template = template; - this.unshadedStartVertex = unshadedStartVertex; + this.shadeSwapVertices = shadeSwapVertices; transforms.pushPose(); } + public SuperByteBuffer(TemplateMesh template) { + this(template, new int[0]); + } + public void renderInto(PoseStack input, VertexConsumer builder) { if (isEmpty()) return; @@ -105,8 +109,18 @@ public class SuperByteBuffer implements TransformStack { } } + boolean shaded = true; + int shadeSwapIndex = 0; + int nextShadeSwapVertex = shadeSwapIndex < shadeSwapVertices.length ? shadeSwapVertices[shadeSwapIndex] : -1; + final int vertexCount = template.vertexCount(); for (int i = 0; i < vertexCount; i++) { + if (i == nextShadeSwapVertex) { + shaded = !shaded; + shadeSwapIndex++; + nextShadeSwapVertex = shadeSwapIndex < shadeSwapVertices.length ? shadeSwapVertices[shadeSwapIndex] : -1; + } + float x = template.x(i); float y = template.y(i); float z = template.z(i); @@ -139,7 +153,7 @@ public class SuperByteBuffer implements TransformStack { if (!disableDiffuseMult) { // Transformed normal is in camera space, but it is needed in world space to calculate diffuse. normal.mul(RenderSystem.getInverseViewRotationMatrix()); - float diffuse = diffuseCalculator.getDiffuse(normal.x(), normal.y(), normal.z(), i < unshadedStartVertex); + float diffuse = diffuseCalculator.getDiffuse(normal.x(), normal.y(), normal.z(), shaded); r *= diffuse; g *= diffuse; b *= diffuse; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index 41c4db856a..bf647fd2f5 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -9,11 +9,7 @@ import com.jozufozu.flywheel.lib.model.ModelCache; import com.jozufozu.flywheel.lib.model.ModelUtil; import com.jozufozu.flywheel.lib.model.baked.ForgeBakedModelBuilder; import com.jozufozu.flywheel.lib.model.baked.VirtualEmptyBlockGetter; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.ModelBlockRenderer; @@ -63,62 +59,34 @@ public class VirtualRenderHelper { } RandomSource random = objects.random; - ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper; - BufferBuilder shadedBuilder = objects.shadedBuilder; - BufferBuilder unshadedBuilder = objects.unshadedBuilder; - - shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); - shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder); + ShadedBlockSbbBuilder sbbBuilder = objects.sbbBuilder; + sbbBuilder.begin(); ModelData modelData = model.getModelData(VirtualEmptyBlockGetter.INSTANCE, BlockPos.ZERO, state, VIRTUAL_DATA); poseStack.pushPose(); - renderer.tesselateBlock(VirtualEmptyBlockGetter.INSTANCE, model, state, BlockPos.ZERO, poseStack, shadeSeparatingWrapper, false, random, 42L, OverlayTexture.NO_OVERLAY, modelData, null); + renderer.tesselateBlock(VirtualEmptyBlockGetter.INSTANCE, model, state, BlockPos.ZERO, poseStack, sbbBuilder, false, random, 42L, OverlayTexture.NO_OVERLAY, modelData, null); poseStack.popPose(); - shadeSeparatingWrapper.clear(); - return endAndCombine(shadedBuilder, unshadedBuilder); + return sbbBuilder.end(); } - public static void transferBlockVertexData(ByteBuffer vertexBuffer, int vertexCount, int stride, MutableTemplateMesh mutableMesh, int dstIndex) { + public static void transferBlockVertexData(ByteBuffer vertexBuffer, int stride, int srcIndex, MutableTemplateMesh mutableMesh, int dstIndex, int vertexCount) { for (int i = 0; i < vertexCount; i++) { - mutableMesh.x(i, vertexBuffer.getFloat(i * stride)); - mutableMesh.y(i, vertexBuffer.getFloat(i * stride + 4)); - mutableMesh.z(i, vertexBuffer.getFloat(i * stride + 8)); - mutableMesh.color(i, vertexBuffer.getInt(i * stride + 12)); - mutableMesh.u(i, vertexBuffer.getFloat(i * stride + 16)); - mutableMesh.v(i, vertexBuffer.getFloat(i * stride + 20)); - mutableMesh.overlay(i, OverlayTexture.NO_OVERLAY); - mutableMesh.light(i, vertexBuffer.getInt(i * stride + 24)); - mutableMesh.normal(i, vertexBuffer.getInt(i * stride + 28)); + mutableMesh.x(dstIndex + i, vertexBuffer.getFloat(srcIndex + i * stride)); + mutableMesh.y(dstIndex + i, vertexBuffer.getFloat(srcIndex + i * stride + 4)); + mutableMesh.z(dstIndex + i, vertexBuffer.getFloat(srcIndex + i * stride + 8)); + mutableMesh.color(dstIndex + i, vertexBuffer.getInt(srcIndex + i * stride + 12)); + mutableMesh.u(dstIndex + i, vertexBuffer.getFloat(srcIndex + i * stride + 16)); + mutableMesh.v(dstIndex + i, vertexBuffer.getFloat(srcIndex + i * stride + 20)); + mutableMesh.overlay(dstIndex + i, OverlayTexture.NO_OVERLAY); + mutableMesh.light(dstIndex + i, vertexBuffer.getInt(srcIndex + i * stride + 24)); + mutableMesh.normal(dstIndex + i, vertexBuffer.getInt(srcIndex + i * stride + 28)); } } - public static SuperByteBuffer endAndCombine(BufferBuilder shadedBuilder, BufferBuilder unshadedBuilder) { - RenderedBuffer shadedData = shadedBuilder.end(); - int totalVertexCount = shadedData.drawState().vertexCount(); - int unshadedStartVertex = totalVertexCount; - RenderedBuffer unshadedData = unshadedBuilder.endOrDiscardIfEmpty(); - if (unshadedData != null) { - if (shadedData.drawState().format() != unshadedData.drawState().format()) { - throw new IllegalStateException("Buffer formats are not equal!"); - } - totalVertexCount += unshadedData.drawState().vertexCount(); - } - - MutableTemplateMesh mutableMesh = new MutableTemplateMesh(totalVertexCount); - transferBlockVertexData(shadedData.vertexBuffer(), shadedData.drawState().vertexCount(), shadedData.drawState().format().getVertexSize(), mutableMesh, 0); - if (unshadedData != null) { - transferBlockVertexData(unshadedData.vertexBuffer(), unshadedData.drawState().vertexCount(), unshadedData.drawState().format().getVertexSize(), mutableMesh, unshadedStartVertex); - } - return new SuperByteBuffer(mutableMesh.toImmutable(), unshadedStartVertex); - } - private static class ThreadLocalObjects { public final PoseStack identityPoseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); - public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); - public final BufferBuilder shadedBuilder = new BufferBuilder(512); - public final BufferBuilder unshadedBuilder = new BufferBuilder(512); + public final ShadedBlockSbbBuilder sbbBuilder = new ShadedBlockSbbBuilder(); } } diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java index 3d8b27655f..68f881ec25 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java @@ -10,6 +10,7 @@ import javax.annotation.Nullable; import com.google.common.collect.ImmutableMap; import com.jozufozu.flywheel.api.Flywheel; +import com.jozufozu.flywheel.api.backend.Backend; import com.jozufozu.flywheel.api.backend.BackendManager; import com.mojang.blaze3d.platform.GlUtil; import com.simibubi.create.Create; @@ -79,7 +80,7 @@ public class DebugInformation { .getVersion() .toString()) .orElse("None")) - .put("Flywheel Backend", () -> BackendManager.getBackend().toString()) + .put("Flywheel Backend", () -> Backend.REGISTRY.getIdOrThrow(BackendManager.getBackend()).toString()) .put("OpenGL Renderer", GlUtil::getRenderer) .put("OpenGL Version", GlUtil::getOpenGLVersion) .put("Graphics Mode", () -> Minecraft.getInstance().options.graphicsMode().toString()) diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index 1a247911b8..8bfa48c302 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -27,6 +27,7 @@ ], "client": [ "accessor.AgeableListModelAccessor", + "accessor.BufferBuilderAccessor", "accessor.GameRendererAccessor", "accessor.HumanoidArmorLayerAccessor", "accessor.ParticleEngineAccessor", From ec0350cfba7d0cbf2457d431c5c7ee53a736342c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 25 May 2024 12:25:19 -0700 Subject: [PATCH 27/35] Revving up - Bump flywheel build - Bulk replace com.jozufozu -> dev.engine_room - Optimize imports --- build.gradle | 4 +-- gradle.properties | 2 +- .../com/simibubi/create/AllPartialModels.java | 2 +- .../animations/AnimatedBlazeBurner.java | 2 +- .../category/animations/AnimatedCrafter.java | 2 +- .../category/animations/AnimatedKinetics.java | 2 +- .../ControlledContraptionEntity.java | 2 +- .../DirectionalExtenderScrollOptionSlot.java | 2 +- .../OrientedContraptionEntity.java | 2 +- .../contraptions/actors/ActorInstance.java | 6 ++-- .../ContraptionControlsBlockEntity.java | 2 +- .../ContraptionControlsRenderer.java | 2 +- .../harvester/HarvesterActorVisual.java | 10 +++--- .../harvester/HarvesterMovementBehaviour.java | 4 +-- .../contraptions/actors/psi/PIInstance.java | 10 +++--- .../actors/psi/PSIActorVisual.java | 2 +- .../contraptions/actors/psi/PSIVisual.java | 14 ++++---- .../psi/PortableStorageInterfaceMovement.java | 4 +-- .../psi/PortableStorageInterfaceRenderer.java | 4 +-- .../actors/roller/RollerActorVisual.java | 10 +++--- .../actors/roller/RollerBlockEntity.java | 2 +- .../roller/RollerMovementBehaviour.java | 4 +-- .../trainControls/ControlsRenderer.java | 2 +- .../contraptions/bearing/BearingRenderer.java | 4 +-- .../contraptions/bearing/BearingVisual.java | 16 ++++----- .../StabilizedBearingMovementBehaviour.java | 6 ++-- .../bearing/StabilizedBearingVisual.java | 8 ++--- .../behaviour/MovementBehaviour.java | 2 +- .../chassis/StickerBlockEntity.java | 2 +- .../contraptions/chassis/StickerRenderer.java | 2 +- .../contraptions/chassis/StickerVisual.java | 16 ++++----- .../elevator/ElevatorPulleyVisual.java | 6 ++-- .../gantry/GantryCarriageRenderer.java | 2 +- .../gantry/GantryCarriageVisual.java | 14 ++++---- .../minecart/CouplingRenderer.java | 2 +- .../pulley/AbstractPulleyRenderer.java | 4 +-- .../pulley/AbstractPulleyVisual.java | 16 ++++----- .../contraptions/pulley/HosePulleyVisual.java | 10 +++--- .../contraptions/pulley/PulleyRenderer.java | 2 +- .../contraptions/pulley/RopePulleyVisual.java | 10 +++--- .../contraptions/render/ActorVisual.java | 6 ++-- .../render/ContraptionEntityRenderer.java | 4 +-- .../render/ContraptionRenderInfo.java | 4 +-- .../render/ContraptionRenderInfoManager.java | 2 +- .../render/ContraptionVisual.java | 36 +++++++++---------- .../decoration/placard/PlacardRenderer.java | 2 +- .../slidingDoor/SlidingDoorRenderer.java | 2 +- .../steamWhistle/WhistleRenderer.java | 2 +- .../equipment/armor/BacktankRenderer.java | 2 +- .../equipment/armor/BacktankVisual.java | 6 ++-- .../bell/AbstractBellBlockEntity.java | 2 +- .../bell/CustomRotationParticle.java | 2 +- .../bell/HauntedBellBlockEntity.java | 2 +- .../bell/PeculiarBellBlockEntity.java | 2 +- .../blueprint/BlueprintRenderer.java | 4 +-- .../extendoGrip/ExtendoGripItemRenderer.java | 4 +-- .../extendoGrip/ExtendoGripRenderHandler.java | 4 +-- .../PotatoCannonItemRenderer.java | 4 +-- .../PotatoCannonRenderHandler.java | 2 +- .../PotatoProjectileRenderMode.java | 2 +- .../SymmetryWandItemRenderer.java | 2 +- .../symmetryWand/mirror/CrossPlaneMirror.java | 4 +-- .../symmetryWand/mirror/EmptyMirror.java | 2 +- .../symmetryWand/mirror/PlaneMirror.java | 4 +-- .../symmetryWand/mirror/SymmetryMirror.java | 2 +- .../mirror/TriplePlaneMirror.java | 2 +- .../equipment/toolbox/RadialToolboxMenu.java | 2 +- .../equipment/toolbox/ToolBoxVisual.java | 18 +++++----- .../equipment/toolbox/ToolboxScreen.java | 2 +- .../equipment/wrench/WrenchItemRenderer.java | 2 +- .../WorldshaperItemRenderer.java | 2 +- .../fluids/drain/ItemDrainRenderer.java | 2 +- .../fluids/hosePulley/HosePulleyRenderer.java | 2 +- .../pipes/SmartFluidPipeBlockEntity.java | 2 +- .../pipes/valve/FluidValveRenderer.java | 2 +- .../fluids/pipes/valve/FluidValveVisual.java | 14 ++++---- .../content/fluids/pump/PumpCogVisual.java | 6 ++-- .../content/fluids/spout/SpoutRenderer.java | 2 +- .../fluids/tank/FluidTankRenderer.java | 2 +- .../kinetics/base/BackHalfShaftVisual.java | 2 +- .../kinetics/base/HalfShaftVisual.java | 6 ++-- .../base/HorizontalHalfShaftVisual.java | 2 +- .../kinetics/base/KineticBlockEntity.java | 2 +- .../base/KineticBlockEntityRenderer.java | 2 +- .../base/KineticBlockEntityVisual.java | 4 +-- .../kinetics/base/KineticInstance.java | 6 ++-- .../kinetics/base/RotatingInstance.java | 4 +-- .../content/kinetics/base/ShaftVisual.java | 4 +-- .../kinetics/base/SingleRotatingVisual.java | 7 ++-- .../kinetics/belt/BeltBlockEntity.java | 4 +-- .../content/kinetics/belt/BeltInstance.java | 4 +-- .../content/kinetics/belt/BeltRenderer.java | 6 ++-- .../content/kinetics/belt/BeltVisual.java | 14 ++++---- .../kinetics/clock/CuckooClockRenderer.java | 2 +- .../crafter/MechanicalCrafterRenderer.java | 6 ++-- .../crafter/ShaftlessCogwheelVisual.java | 8 ++--- .../kinetics/crank/HandCrankBlockEntity.java | 4 +-- .../kinetics/crank/HandCrankRenderer.java | 2 +- .../kinetics/crank/HandCrankVisual.java | 14 ++++---- .../crank/ValveHandleBlockEntity.java | 2 +- .../deployer/DeployerActorVisual.java | 12 +++---- .../deployer/DeployerBlockEntity.java | 2 +- .../kinetics/deployer/DeployerFilterSlot.java | 2 +- .../deployer/DeployerMovementBehaviour.java | 4 +-- .../kinetics/deployer/DeployerRenderer.java | 6 ++-- .../kinetics/deployer/DeployerVisual.java | 20 +++++------ .../kinetics/drill/DrillActorVisual.java | 4 +-- .../drill/DrillMovementBehaviour.java | 4 +-- .../content/kinetics/drill/DrillVisual.java | 6 ++-- .../kinetics/fan/EncasedFanRenderer.java | 2 +- .../content/kinetics/fan/FanVisual.java | 6 ++-- .../kinetics/flywheel/FlywheelRenderer.java | 2 +- .../kinetics/flywheel/FlywheelVisual.java | 14 ++++---- .../content/kinetics/gauge/GaugeRenderer.java | 4 +-- .../content/kinetics/gauge/GaugeVisual.java | 18 +++++----- .../kinetics/gearbox/GearboxRenderer.java | 2 +- .../kinetics/gearbox/GearboxVisual.java | 8 ++--- .../mechanicalArm/ArmBlockEntity.java | 2 +- .../kinetics/mechanicalArm/ArmRenderer.java | 4 +-- .../kinetics/mechanicalArm/ArmVisual.java | 20 +++++------ .../millstone/MillstoneCogVisual.java | 6 ++-- .../mixer/MechanicalMixerRenderer.java | 2 +- .../content/kinetics/mixer/MixerVisual.java | 16 ++++----- .../motor/CreativeMotorBlockEntity.java | 2 +- .../press/MechanicalPressRenderer.java | 2 +- .../content/kinetics/press/PressVisual.java | 14 ++++---- .../content/kinetics/saw/SawFilterSlot.java | 2 +- .../content/kinetics/saw/SawRenderer.java | 4 +-- .../content/kinetics/saw/SawVisual.java | 6 ++-- .../BracketedKineticBlockEntityRenderer.java | 2 +- .../BracketedKineticBlockEntityVisual.java | 12 +++---- .../encased/EncasedCogRenderer.java | 2 +- .../encased/EncasedCogVisual.java | 14 ++++---- .../SpeedControllerRenderer.java | 2 +- .../steamEngine/SteamEngineRenderer.java | 4 +-- .../steamEngine/SteamEngineValueBox.java | 2 +- .../steamEngine/SteamEngineVisual.java | 16 ++++----- .../transmission/SplitShaftRenderer.java | 2 +- .../transmission/SplitShaftVisual.java | 8 ++--- .../kinetics/waterwheel/WaterWheelVisual.java | 10 +++--- .../logistics/chute/ChuteRenderer.java | 2 +- .../crate/CreativeCrateBlockEntity.java | 2 +- .../logistics/depot/DepotRenderer.java | 2 +- .../logistics/depot/EjectorBlockEntity.java | 2 +- .../logistics/depot/EjectorRenderer.java | 8 ++--- .../logistics/depot/EjectorVisual.java | 14 ++++---- .../logistics/flwdata/FlapInstance.java | 8 ++--- .../logistics/funnel/FunnelBlockEntity.java | 2 +- .../funnel/FunnelFilterSlotPositioning.java | 2 +- .../logistics/funnel/FunnelRenderer.java | 6 ++-- .../logistics/funnel/FunnelVisual.java | 18 +++++----- .../tunnel/BeltTunnelBlockEntity.java | 2 +- .../logistics/tunnel/BeltTunnelRenderer.java | 4 +-- .../logistics/tunnel/BeltTunnelVisual.java | 16 ++++----- .../processing/basin/BasinRenderer.java | 2 +- .../burner/BlazeBurnerRenderer.java | 2 +- .../redstone/FilteredDetectorFilterSlot.java | 2 +- .../analogLever/AnalogLeverRenderer.java | 2 +- .../analogLever/AnalogLeverVisual.java | 20 +++++------ .../redstone/diodes/BrassDiodeScrollSlot.java | 2 +- .../redstone/diodes/BrassDiodeVisual.java | 16 ++++----- .../displayLink/DisplayLinkRenderer.java | 2 +- .../displayLink/DisplayLinkScreen.java | 2 +- .../link/RedstoneLinkFrequencySlot.java | 2 +- .../controller/LecternControllerRenderer.java | 2 +- .../LinkedControllerItemRenderer.java | 4 +-- .../redstone/nixieTube/NixieTubeRenderer.java | 2 +- .../cannon/SchematicannonRenderer.java | 2 +- .../cannon/SchematicannonVisual.java | 18 +++++----- .../schematics/client/SchematicRenderer.java | 2 +- .../client/SchematicTransformation.java | 2 +- .../schematics/client/tools/DeployTool.java | 2 +- .../trains/bogey/BackupBogeyRenderer.java | 2 +- .../content/trains/bogey/BogeyRenderer.java | 12 +++---- .../content/trains/bogey/BogeyStyle.java | 2 +- .../content/trains/bogey/BogeyVisual.java | 2 +- .../trains/bogey/StandardBogeyRenderer.java | 2 +- .../trains/display/FlapDisplayRenderer.java | 2 +- .../content/trains/entity/CarriageBogey.java | 2 +- .../CarriageContraptionEntityRenderer.java | 4 +-- .../entity/CarriageContraptionVisual.java | 6 ++-- .../observer/TrackObserverBlockEntity.java | 2 +- .../observer/TrackObserverRenderer.java | 2 +- .../trains/schedule/ScheduleScreen.java | 2 +- .../trains/schedule/TrainHatArmorLayer.java | 2 +- .../content/trains/signal/SignalRenderer.java | 2 +- .../trains/station/AbstractStationScreen.java | 4 +-- .../trains/station/AssemblyScreen.java | 2 +- .../trains/station/StationRenderer.java | 6 ++-- .../content/trains/station/StationScreen.java | 2 +- .../trains/track/BezierConnection.java | 2 +- .../content/trains/track/ITrackBlock.java | 2 +- .../content/trains/track/TrackBlock.java | 4 +-- .../trains/track/TrackBlockEntity.java | 2 +- .../trains/track/TrackBlockOutline.java | 2 +- .../content/trains/track/TrackMaterial.java | 2 +- .../trains/track/TrackMaterialFactory.java | 2 +- .../content/trains/track/TrackRenderer.java | 2 +- .../trains/track/TrackTargetingBehaviour.java | 2 +- .../trains/track/TrackTargetingClient.java | 2 +- .../content/trains/track/TrackVisual.java | 16 ++++----- .../behaviour/ValueBoxRenderer.java | 2 +- .../behaviour/ValueBoxTransform.java | 2 +- .../ColoredOverlayBlockEntityRenderer.java | 2 +- .../data/CreateBlockEntityBuilder.java | 2 +- .../foundation/data/CreateEntityBuilder.java | 2 +- .../foundation/fluid/FluidRenderer.java | 2 +- .../gui/element/GuiGameElement.java | 2 +- .../foundation/outliner/ItemOutline.java | 2 +- .../create/foundation/outliner/Outline.java | 2 +- .../create/foundation/ponder/PonderScene.java | 2 +- .../ponder/element/AnimatedSceneElement.java | 2 +- .../ponder/element/MinecartElement.java | 2 +- .../ponder/element/ParrotElement.java | 2 +- .../ponder/element/WorldSectionElement.java | 4 +-- .../foundation/render/AllInstanceTypes.java | 10 +++--- .../render/BlockEntityRenderHelper.java | 6 ++-- .../foundation/render/CachedBufferer.java | 4 +-- .../render/ConditionalInstance.java | 6 ++-- .../foundation/render/GroupInstance.java | 4 +-- .../foundation/render/SelectInstance.java | 4 +-- .../foundation/render/SuperByteBuffer.java | 4 +-- .../render/VirtualRenderHelper.java | 12 +++---- .../foundation/utility/outliner/Outline.java | 2 +- .../virtualWorld/VirtualRenderWorld.java | 2 +- .../debugInfo/DebugInformation.java | 6 ++-- .../gui/CreateMainMenuScreen.java | 2 +- 227 files changed, 562 insertions(+), 561 deletions(-) diff --git a/build.gradle b/build.gradle index c2368d2a13..c9b86a89a9 100644 --- a/build.gradle +++ b/build.gradle @@ -151,8 +151,8 @@ dependencies { implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") - compileOnly fg.deobf("com.jozufozu.flywheel:flywheel-forge-api-${flywheel_minecraft_version}:${flywheel_version}") - runtimeOnly fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") + compileOnly fg.deobf("dev.engine_room.flywheel:flywheel-forge-api-${flywheel_minecraft_version}:${flywheel_version}") + runtimeOnly fg.deobf("dev.engine_room.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-common-api:${jei_version}") compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}-forge-api:${jei_version}") diff --git a/gradle.properties b/gradle.properties index a5597d1c4a..c17e22e1ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-87 +flywheel_version = 1.0.0-beta-89 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index e3c774b36a..e35e254490 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.content.fluids.FluidTransportBehaviour; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index e030986bf6..a864c800b1 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index aeb6bd02ec..6da76887d7 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.AllGuiTextures; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java index 7d3bb36b29..dada5469d9 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.gui.CustomLightingSettings; diff --git a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java index b6e7d311e6..5375b9df3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions; import static com.simibubi.create.foundation.utility.AngleHelper.angleLerp; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.bearing.BearingContraption; diff --git a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java index e7ddc53ddc..dc8e34f5e0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions; import java.util.function.BiPredicate; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java index 0b3735c280..a78c6be339 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java @@ -7,7 +7,7 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.bearing.StabilizedContraption; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java index 87ec2d0acb..0ec48869a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java @@ -4,9 +4,9 @@ import org.joml.Quaternionf; import org.joml.Quaternionfc; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java index a134c2f1b0..f902586922 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; import java.util.List; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.contraptions.actors.trainControls.ControlsBlock; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java index 19689a2456..0356d3feed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; import java.util.Random; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 0fbfe533e0..81151d13ca 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.contraptions.actors.harvester; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java index 9f35613538..ae9bb59fda 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java @@ -4,8 +4,8 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableBoolean; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index 495387b243..beee6389d0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -2,11 +2,11 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.InstancerProvider; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.InstancerProvider; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.foundation.utility.AngleHelper; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index ff1c26188f..258799fbf2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.actors.psi; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index c524d0116f..2e9490fa2f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; -import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visual.TickableVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.lib.visual.SimpleTickableVisual; public class PSIVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual, SimpleTickableVisual { diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java index 94d62f772b..b78c2bbf6e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceMovement.java @@ -4,8 +4,8 @@ import java.util.Optional; import org.jetbrains.annotations.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java index f2d499717b..e68620055b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PortableStorageInterfaceRenderer.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java index 7533944146..391cc6b197 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.contraptions.actors.roller; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterActorVisual; import com.simibubi.create.content.contraptions.behaviour.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java index 2aec03990d..9446d3468c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.actors.roller; import java.util.List; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java index a9158643bc..0e75469fc4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java @@ -9,8 +9,8 @@ import java.util.function.BiConsumer; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.actors.roller.RollerBlockEntity.RollingMode; import com.simibubi.create.content.contraptions.behaviour.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java index a21964c5b4..2f1cd95998 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.actors.trainControls; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java index 83ea08e601..a0ab008d7b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.bearing; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index 307612fd7b..07ebcef31e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -4,14 +4,14 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.BackHalfShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java index 384ed18bdc..5779bd0eed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java @@ -4,9 +4,9 @@ import javax.annotation.Nullable; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 90031a53ab..9e92a89926 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.bearing; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java index 8fa83541ea..c76e23dcdf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.behaviour; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java index 7e3022db3c..90d742f6a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.List; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java index 355687e521..4b10f10e0b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.chassis; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index fbffed3c24..0969bc7962 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -2,14 +2,14 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index fcf7fb63d0..ecd18a8b6e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.contraptions.elevator; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java index ee0dde8b6e..be47efbc2c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.gantry; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index f9b1c80638..4328d71198 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java index 42e323877c..fb1f0d8895 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.minecart; import static net.minecraft.util.Mth.lerp; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java index 76cf2bbee7..a5a6a01501 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.kinetics.base.IRotate; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index eaedab2582..9538a9e774 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -2,14 +2,14 @@ package com.simibubi.create.content.contraptions.pulley; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.box.MutableBox; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.light.LightVolume; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.box.MutableBox; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.light.LightVolume; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index c63655ff8f..cb048089c6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java index bc53bd81e8..232fbb0838 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index 04dd4bc473..606fc50067 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.contraptions.pulley; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.render.VirtualRenderHelper; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java index f2f003061d..99adac46d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.api.instance.InstancerProvider; -import com.jozufozu.flywheel.api.visual.Visual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import dev.engine_room.flywheel.api.instance.InstancerProvider; +import dev.engine_room.flywheel.api.visual.Visual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java index cef32b1784..18a4aa9dd5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.render; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllMovementBehaviours; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index 470e9d86c6..daed4afc01 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.render; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.ModelUtil; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.ModelUtil; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java index 9cda07272c..9d2d9899b8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.render; -import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent; +import dev.engine_room.flywheel.api.event.ReloadLevelRendererEvent; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.foundation.utility.WorldAttached; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index 218313d510..8286b84eac 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -6,24 +6,24 @@ import java.util.function.LongConsumer; import org.apache.commons.lang3.tuple.MutablePair; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.task.Plan; -import com.jozufozu.flywheel.api.visual.BlockEntityVisual; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.LitVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; -import com.jozufozu.flywheel.api.visualization.BlockEntityVisualizer; -import com.jozufozu.flywheel.api.visualization.VisualEmbedding; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizerRegistry; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.baked.ForgeMultiBlockModelBuilder; -import com.jozufozu.flywheel.lib.task.ForEachPlan; -import com.jozufozu.flywheel.lib.task.NestedPlan; -import com.jozufozu.flywheel.lib.task.PlanMap; -import com.jozufozu.flywheel.lib.task.RunnablePlan; -import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.task.Plan; +import dev.engine_room.flywheel.api.visual.BlockEntityVisual; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visual.LitVisual; +import dev.engine_room.flywheel.api.visual.TickableVisual; +import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; +import dev.engine_room.flywheel.api.visualization.VisualEmbedding; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizerRegistry; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.baked.ForgeMultiBlockModelBuilder; +import dev.engine_room.flywheel.lib.task.ForEachPlan; +import dev.engine_room.flywheel.lib.task.NestedPlan; +import dev.engine_room.flywheel.lib.task.PlanMap; +import dev.engine_room.flywheel.lib.task.RunnablePlan; +import dev.engine_room.flywheel.lib.visual.AbstractEntityVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; diff --git a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java index ca9d1b20a7..5874947cf0 100644 --- a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.decoration.placard; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java index 639845b4f9..5c95059cdf 100644 --- a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.decoration.slidingDoor; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java b/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java index 535261764d..0f9a411d24 100644 --- a/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.decoration.steamWhistle; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.decoration.steamWhistle.WhistleBlock.WhistleSize; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java index 9d5f982a29..047a3e6ae2 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.armor; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java index 2bc764de5e..d27487a862 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.equipment.armor; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; public class BacktankVisual extends SingleRotatingVisual { diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java index 5561d2e034..5e1baefa7d 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.equipment.bell; import java.util.List; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java b/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java index 01a8cfdc7f..110835fe82 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.equipment.bell; import org.joml.Quaternionf; import org.joml.Vector3f; -import com.jozufozu.flywheel.lib.util.ShadersModHandler; +import dev.engine_room.flywheel.lib.util.ShadersModHandler; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java index 6f82a8f2ab..0882cc1953 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.bell; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java index 12e69d6523..64c4993c20 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.bell; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java index 7e10e42f1f..d561edddcd 100644 --- a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.equipment.blueprint; import org.joml.Matrix3f; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.equipment.blueprint.BlueprintEntity.BlueprintSection; diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java index a1160d77c6..5674a1ca30 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.equipment.extendoGrip; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java index 3797e3fafc..c7653eba45 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.equipment.extendoGrip; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java index 1192e6bec8..f33bc1baa5 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.equipment.potatoCannon; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java index 9f7961f17a..310e4d779e 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.potatoCannon; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; import com.simibubi.create.content.equipment.zapper.ShootableGadgetRenderHandler; diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java index 3bb51f0a79..b98adcac2a 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.equipment.potatoCannon; import static com.simibubi.create.content.equipment.potatoCannon.PotatoProjectileRenderMode.entityRandom; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java index 82866bb22c..6c8b6e95c1 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.symmetryWand; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java index 35fd9d5ff3..eb330dd2da 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java index 512d17e05c..7f5f5e34b3 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java index ee117285a6..0339b1b857 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java index 9b70ad0e87..efa66b89e2 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java index d668639632..9a2a4abc82 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java index 25bbadb88c..d58ce57d94 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java @@ -6,7 +6,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 7cfa3ae65e..1220d09c0d 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -2,15 +2,15 @@ package com.simibubi.create.content.equipment.toolbox; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Iterate; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java index 550262ef47..a846df0374 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java @@ -4,7 +4,7 @@ import java.util.Collections; import java.util.List; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java index 36d9a016cb..62f2a17800 100644 --- a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.equipment.wrench; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java index 6bc50a75ba..e91303e7e1 100644 --- a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.equipment.zapper.terrainzapper; import static java.lang.Math.max; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java index bcec5e4558..93de0952dc 100644 --- a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.fluids.drain; import java.util.Random; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.content.fluids.transfer.GenericItemEmptying; diff --git a/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java b/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java index 4c76bcfadb..e61de76b4c 100644 --- a/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.hosePulley; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.pulley.AbstractPulleyRenderer; import com.simibubi.create.foundation.render.CachedBufferer; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java b/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java index cf2ad3607b..441b1a701b 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.fluids.pipes; import java.util.List; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.fluids.FluidPropagator; import com.simibubi.create.content.fluids.pipes.StraightPipeBlockEntity.StraightPipeFluidTransportBehaviour; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java index 3d4e52212e..23156e5b50 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.pipes.valve; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index cc613a7f87..2e57541ce2 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index a554b7fad9..7dce277286 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.fluids.pump; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; diff --git a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java index d13012a9bc..7effeca204 100644 --- a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.spout; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour; diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java index 50895cc660..22684745c2 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.fluids.tank; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java index a288807fcf..4f04744ac7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java index 949b4b922e..61b5dc887d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java index 399db1e2b6..1ef78ce730 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java index ccd5d9946c..7d64e5ddfa 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java @@ -7,7 +7,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.Create; import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; import com.simibubi.create.content.equipment.goggles.IHaveHoveringInformation; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java index ee84ec1b77..be8e9ae55c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.base; import org.apache.commons.lang3.ArrayUtils; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java index 9676e217d5..b98f828e46 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel; import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java index 0fe9a8db17..755395786b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java @@ -2,9 +2,9 @@ package com.simibubi.create.content.kinetics.base; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.lib.instance.ColoredLitInstance; +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.lib.instance.ColoredLitInstance; import com.simibubi.create.foundation.utility.Color; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java index de84a5885d..8ddada0d05 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.kinetics.base; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java index 21ce8bf7e6..1ee8ca5f98 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.base; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.foundation.render.VirtualRenderHelper; public class ShaftVisual extends SingleRotatingVisual { diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index 1dbed3981d..4e41dcd5e7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -2,12 +2,13 @@ package com.simibubi.create.content.kinetics.base; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.VirtualRenderHelper; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; + public class SingleRotatingVisual extends KineticBlockEntityVisual { protected RotatingInstance rotatingModel; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java index 3d554ca6f4..57cf08fa95 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java @@ -12,8 +12,8 @@ import java.util.Map; import java.util.Optional; import java.util.function.Function; -import com.jozufozu.flywheel.lib.box.Box; -import com.jozufozu.flywheel.lib.box.MutableBox; +import dev.engine_room.flywheel.lib.box.Box; +import dev.engine_room.flywheel.lib.box.MutableBox; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java index 1552e21bad..7afda12e6d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java @@ -3,8 +3,8 @@ package com.simibubi.create.content.kinetics.belt; import org.joml.Quaternionf; import org.joml.Quaternionfc; -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; import com.simibubi.create.content.kinetics.base.KineticInstance; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index ce408ade6c..330896fc05 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.kinetics.belt; import java.util.Random; import java.util.function.Supplier; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 530d70d4db..1d7d930f60 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -5,13 +5,13 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java index 57042f3ee2..dfa4545ef7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.clock; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java index 8d3b111712..f85ee6bb31 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.kinetics.crafter; import static com.simibubi.create.content.kinetics.base.HorizontalKineticBlock.HORIZONTAL_FACING; import static com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer.standardKineticRotationTransform; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java index 669dc53491..7e2aa99d16 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.kinetics.crafter; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java index 566f6e546c..4407bd44aa 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.crank; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllSoundEvents; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java index 98c6830d40..a8042c1ead 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.crank; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 60b16fd35e..e5549c9e64 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.kinetics.crank; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java index 50624e8697..c06953d130 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.kinetics.crank; import java.util.List; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.model.Model; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index d4762b53d0..0ce7ad3b1f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -3,12 +3,12 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java index 93c62bcc4f..7b6e0f67e2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java @@ -9,7 +9,7 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllRecipeTypes; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java index 124e595e3b..8f7ddd1b09 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerFilterSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.deployer; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java index afe7b35db1..ebb833d045 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java @@ -8,8 +8,8 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java index 7b33b34877..aab7e367be 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 330caffc70..3e5afc77ec 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -7,16 +7,16 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; -import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visual.TickableVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.lib.visual.SimpleTickableVisual; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index 0837874723..4912fe5fbc 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.kinetics.drill; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.contraptions.behaviour.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java index 9b9ef863c0..5db9c48dcc 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.kinetics.drill; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java index b9904dfe66..5f20113e58 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.kinetics.drill; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java index aa69dbd656..988292a1d5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.fan; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java index ecf69d58e6..4a9fc526cb 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java @@ -4,9 +4,9 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java index 1693c33dbb..a80eca8209 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.flywheel; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index 0965872268..f712eda486 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java index 9f73ad01a6..d250814bee 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.gauge; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java index 364e8ba7e8..5f1367007b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java @@ -3,15 +3,15 @@ package com.simibubi.create.content.kinetics.gauge; import java.util.ArrayList; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java index 9933bc582c..646992fc51 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.gearbox; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index 95b668e461..e37c03321c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -4,10 +4,10 @@ import java.util.EnumMap; import java.util.Map; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java index 56d11876f7..e04fa6a581 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java @@ -5,7 +5,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.ITransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java index ac47392565..81ade8abad 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.mechanicalArm; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 72ed65618a..f46e67ed83 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -4,16 +4,16 @@ import java.util.ArrayList; import java.util.function.Consumer; import com.google.common.collect.Lists; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java index 680efb9d55..257fd5a061 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.kinetics.millstone; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java index e15e699c02..7c9750c9a4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.mixer; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index d64cce41e5..23b82a52d6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -2,14 +2,14 @@ package com.simibubi.create.content.kinetics.mixer; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java index 59412bb01c..dd09e38b0f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.motor; import java.util.List; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java index aefc127df4..8c3f98448a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.press; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 807441bf94..c9aff6fa4d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -4,13 +4,13 @@ import java.util.function.Consumer; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.OrientedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java index 5b629defb3..74385a0596 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.saw; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java index b620eefdaf..2266388e1b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.kinetics.saw; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java index cbcc88442b..ec84c8bef4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.kinetics.saw; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.render.VirtualRenderHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java index 114d746960..ec046a8e87 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.simpleRelays; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 3d729640d1..7fb944dd69 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -2,12 +2,12 @@ package com.simibubi.create.content.kinetics.simpleRelays; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java index 35478d325c..a7d2cf094c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java index 0ec188d308..dd045c4a77 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java @@ -3,13 +3,13 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; import java.util.Optional; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java index 05e1832ab3..96e3d62fe8 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/speedController/SpeedControllerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.speedController; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java index f3a3afaf2d..904fc2927c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.steamEngine; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java index 721c56a493..809a079f2f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.steamEngine; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index e7b7fff79f..84056e422d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -2,14 +2,14 @@ package com.simibubi.create.content.kinetics.steamEngine; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftRenderer.java index 521a3c30e8..c5ee42db78 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.transmission; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; diff --git a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java index cc9221211a..4385aaedf7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/transmission/SplitShaftVisual.java @@ -3,10 +3,10 @@ package com.simibubi.create.content.kinetics.transmission; import java.util.ArrayList; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.model.Models; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; diff --git a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java index 38d7dd6325..25ff259204 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/waterwheel/WaterWheelVisual.java @@ -2,17 +2,17 @@ package com.simibubi.create.content.kinetics.waterwheel; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.model.ModelCache; -import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.ModelCache; +import dev.engine_room.flywheel.lib.model.baked.BakedModelBuilder; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; diff --git a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java index 5f22430e71..7c59a0d00e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.chute; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.logistics.chute.ChuteBlock.Shape; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java index bdb7934b57..2dc5462d25 100644 --- a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.logistics.crate; import java.util.List; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java index 170703b3d5..b9a6994589 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.logistics.depot; import java.util.Random; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.belt.BeltHelper; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java index a7d89a18a2..e3585a4edf 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java @@ -6,7 +6,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java index bbf928bc09..b36412ce09 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorRenderer.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.logistics.depot; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.transform.Rotate; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.transform.Translate; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.Rotate; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.Translate; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index 8e210f1e9e..27c762e8b4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.logistics.depot; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java index d9db60738d..6e216de33e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.logistics.flwdata; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.instance.InstanceHandle; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.instance.FlatLit; +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; import net.minecraft.client.renderer.LightTexture; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java index 83ebe10e06..3331b3394c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java @@ -5,7 +5,7 @@ import java.util.List; import org.apache.commons.lang3.mutable.MutableBoolean; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllSoundEvents; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java index 07d9c9792a..65e4426144 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.funnel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.logistics.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java index b3e5cc6ead..d0bb5fc968 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.logistics.funnel; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 9f3fb3c543..cf67251b18 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -3,15 +3,15 @@ package com.simibubi.create.content.logistics.funnel; import java.util.ArrayList; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java index 86507b2db3..54de554f03 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java @@ -9,7 +9,7 @@ import java.util.Set; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.content.logistics.funnel.BeltFunnelBlock; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java index 5cd7d65d12..90895cc306 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.logistics.tunnel; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 05faf7e9e9..5690edf67a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -6,14 +6,14 @@ import java.util.EnumMap; import java.util.Map; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.logistics.flwdata.FlapInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java index 654beba428..acc0181e0e 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.processing.basin; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment; diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java index e9b848ee05..c540dcfdd6 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.processing.burner; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java b/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java index 44b3d80549..28317c0c24 100644 --- a/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/FilteredDetectorFilterSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java index 7ee617b869..86900c2f55 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.analogLever; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java index e2140d3e4a..40aa8b0915 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java @@ -2,16 +2,16 @@ package com.simibubi.create.content.redstone.analogLever; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.Rotate; -import com.jozufozu.flywheel.lib.transform.Translate; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.Rotate; +import dev.engine_room.flywheel.lib.transform.Translate; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Color; diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java index e8f4923ee7..fb7f9768dd 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.diodes; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java index bc4188d024..d56a96dba9 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java @@ -2,14 +2,14 @@ package com.simibubi.create.content.redstone.diodes; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.TickableVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.TickableVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleTickableVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Color; diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java index 6d48ead84f..8ccfddcf97 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.displayLink; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkScreen.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkScreen.java index 165221c05d..703cd7c0c8 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkScreen.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkScreen.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone.displayLink; import java.util.Collections; import java.util.List; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPackets; import com.simibubi.create.content.redstone.displayLink.source.DisplaySource; diff --git a/src/main/java/com/simibubi/create/content/redstone/link/RedstoneLinkFrequencySlot.java b/src/main/java/com/simibubi/create/content/redstone/link/RedstoneLinkFrequencySlot.java index bf8b5d504b..f4a464cccf 100644 --- a/src/main/java/com/simibubi/create/content/redstone/link/RedstoneLinkFrequencySlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/link/RedstoneLinkFrequencySlot.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.link; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerRenderer.java b/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerRenderer.java index 1c3699972b..b97861a66a 100644 --- a/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.redstone.link.controller; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/redstone/link/controller/LinkedControllerItemRenderer.java b/src/main/java/com/simibubi/create/content/redstone/link/controller/LinkedControllerItemRenderer.java index 6f75733863..deb225b1cd 100644 --- a/src/main/java/com/simibubi/create/content/redstone/link/controller/LinkedControllerItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/link/controller/LinkedControllerItemRenderer.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.redstone.link.controller; import java.util.Vector; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java b/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java index 05a0c7d1a0..5a98d67bf6 100644 --- a/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.redstone.nixieTube; import java.util.Random; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.redstone.nixieTube.DoubleFaceAttachedBlock.DoubleAttachFace; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java index 94994b0b32..1b432aa988 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.schematics.cannon; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java index e18a631678..3b7593ae4c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java @@ -2,15 +2,15 @@ package com.simibubi.create.content.schematics.cannon; import java.util.function.Consumer; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; -import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java index d21d3cd917..b73b22886a 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.schematics.client; import java.util.LinkedHashMap; import java.util.Map; -import com.jozufozu.flywheel.lib.model.ModelUtil; +import dev.engine_room.flywheel.lib.model.ModelUtil; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.schematics.SchematicWorld; import com.simibubi.create.foundation.render.ShadedBlockSbbBuilder; diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java index e4aef68a33..8fc57e1338 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.schematics.client; import static java.lang.Math.abs; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java index 932b1e1bae..6e1e9e8156 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.schematics.client.tools; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllKeys; import com.simibubi.create.content.schematics.client.SchematicTransformation; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java index 417d217679..01ae8399c1 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.bogey; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.trains.entity.CarriageBogey; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java index 9cd2dfae9f..b2a3bf9075 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java @@ -11,12 +11,12 @@ import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Quaternionf; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.Transform; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.Transform; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.trains.entity.CarriageBogey; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java index e6c6fcdb79..907df5aede 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java @@ -9,7 +9,7 @@ import java.util.stream.Stream; import org.jetbrains.annotations.NotNull; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.trains.bogey.BogeyRenderer.CommonRenderer; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java index 60ba5a7e64..9f4654beb9 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.trains.bogey; import java.util.Optional; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.entity.CarriageBogey; import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java index 21ae5b6552..51d69a36f6 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java @@ -7,7 +7,7 @@ import static com.simibubi.create.AllPartialModels.BOGEY_PISTON; import static com.simibubi.create.AllPartialModels.LARGE_BOGEY_WHEELS; import static com.simibubi.create.AllPartialModels.SMALL_BOGEY_WHEELS; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java b/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java index c9e6f49090..2460871966 100644 --- a/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayRenderer.java @@ -4,7 +4,7 @@ import java.util.List; import org.joml.Matrix4f; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.font.GlyphInfo; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java index fe1d78e9ca..7df1a66d0a 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java @@ -5,7 +5,7 @@ import static com.simibubi.create.content.trains.bogey.AbstractBogeyBlockEntity. import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.Create; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java index f67c1c789a..2f693fd7af 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java @@ -2,8 +2,8 @@ package com.simibubi.create.content.trains.entity; import java.util.Objects; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index b665cfad13..07b5fb1439 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -2,9 +2,9 @@ package com.simibubi.create.content.trains.entity; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.render.ContraptionVisual; import com.simibubi.create.content.trains.bogey.BogeyRenderer; diff --git a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java index f83df6898d..485ac57c40 100644 --- a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java @@ -4,7 +4,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.ITransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; diff --git a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java index 52ac64f035..3103c1a145 100644 --- a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.observer; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.track.ITrackBlock; import com.simibubi.create.content.trains.track.TrackTargetingBehaviour; diff --git a/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java b/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java index 9e28c56251..3288fbd4c7 100644 --- a/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/schedule/ScheduleScreen.java @@ -15,7 +15,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL30; import com.google.common.collect.ImmutableList; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java index f2ab4e2f4f..8bfc851d14 100644 --- a/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/trains/schedule/TrainHatArmorLayer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.schedule; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.Contraption; diff --git a/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java b/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java index 29bbc5921a..74f68bd6cc 100644 --- a/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.trains.signal; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.trains.signal.SignalBlockEntity.OverlayState; diff --git a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java index 30617fe4a7..a2bd427324 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AbstractStationScreen.java @@ -3,8 +3,8 @@ package com.simibubi.create.content.trains.station; import java.lang.ref.WeakReference; import java.util.List; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.compat.computercraft.ComputerScreen; diff --git a/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java index 1332f4263b..b5738ef832 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.trains.station; import java.lang.ref.WeakReference; import java.util.List; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPackets; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AssemblyException; diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java b/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java index c222de8084..b2a0d7a7b6 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationRenderer.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.trains.station; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.Transform; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.Transform; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java index 282d2fdacd..d4d73d1534 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java @@ -4,7 +4,7 @@ import java.lang.ref.WeakReference; import java.util.List; import java.util.function.Consumer; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java index 2cc6f26c6b..d09090d714 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.trains.track; import java.util.Iterator; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java index 25cea1585a..d3ab05bf65 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/ITrackBlock.java @@ -8,7 +8,7 @@ import java.util.function.Function; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.graph.TrackNodeLocation; import com.simibubi.create.content.trains.graph.TrackNodeLocation.DiscoveredLocation; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java index 3f301b3325..815e3858e3 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java @@ -22,8 +22,8 @@ import java.util.function.Consumer; import org.jetbrains.annotations.Nullable; import com.google.common.base.Predicates; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java index 302c5bebfd..10c6f0b095 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java @@ -8,7 +8,7 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.Set; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllTags; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java index 650b0a32ac..586e59fc40 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockOutline.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.Optional; import java.util.function.Consumer; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllShapes; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java index 36580d6f06..16be7f5040 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java @@ -10,7 +10,7 @@ import java.util.function.Supplier; import org.jetbrains.annotations.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java index d32eee0846..3dc14ca58e 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java @@ -5,7 +5,7 @@ import java.util.stream.Stream; import org.jetbrains.annotations.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllTags; import com.tterrag.registrate.util.nullness.NonNullSupplier; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java index 56a0846f16..30cf366225 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java @@ -4,7 +4,7 @@ import static com.simibubi.create.AllPartialModels.GIRDER_SEGMENT_BOTTOM; import static com.simibubi.create.AllPartialModels.GIRDER_SEGMENT_MIDDLE; import static com.simibubi.create.AllPartialModels.GIRDER_SEGMENT_TOP; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java index 57752c99a8..281ad2eef1 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java @@ -5,7 +5,7 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.StructureTransform; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java index 0be8b221a8..f4034bb00d 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingClient.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.trains.track; import com.google.common.base.Objects; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.content.trains.graph.EdgePointType; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java index 9670d7ed0e..a478c1769e 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java @@ -7,14 +7,14 @@ import java.util.function.LongConsumer; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.instance.FlatLit; -import com.jozufozu.flywheel.lib.instance.InstanceTypes; -import com.jozufozu.flywheel.lib.instance.TransformedInstance; -import com.jozufozu.flywheel.lib.model.Models; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.FlatLit; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.simibubi.create.AllPartialModels; diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java index 443c951e8e..9a66f8f65d 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.blockEntity.behaviour; import org.joml.Matrix3f; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.simpleRelays.AbstractSimpleShaftBlock; diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java index 96e79e5d83..88d0e28d1f 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxTransform.java @@ -4,7 +4,7 @@ import java.util.function.Function; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java index 36a33004e4..258956fa60 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/ColoredOverlayBlockEntityRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.blockEntity.renderer; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.render.SuperByteBuffer; diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java index 98ad14e0a6..e6af03e2b2 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java @@ -6,7 +6,7 @@ import java.util.function.Supplier; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.visual.SimpleBlockEntityVisualizer; +import dev.engine_room.flywheel.lib.visual.SimpleBlockEntityVisualizer; import com.simibubi.create.Create; import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.builders.BlockEntityBuilder; diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java index 63e64e72fd..2c2a6199ef 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java @@ -3,7 +3,7 @@ package com.simibubi.create.foundation.data; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; -import com.jozufozu.flywheel.lib.visual.SimpleEntityVisualizer; +import dev.engine_room.flywheel.lib.visual.SimpleEntityVisualizer; import com.simibubi.create.Create; import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.builders.BuilderCallback; diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index cae32139d1..1e1707e971 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.fluid; import java.util.function.Function; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java index 5973052ecc..4cc63f916c 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.gui.element; import javax.annotation.Nullable; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager.DestFactor; import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; diff --git a/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java b/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java index f0ce575b29..9d473eef08 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/ItemOutline.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.outliner; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; diff --git a/src/main/java/com/simibubi/create/foundation/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/outliner/Outline.java index efd774f032..9582635e6c 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/Outline.java @@ -10,7 +10,7 @@ import org.joml.Vector3d; import org.joml.Vector3f; import org.joml.Vector4f; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllSpecialTextures; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 01e0b14e60..703323873a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -20,7 +20,7 @@ import org.apache.commons.lang3.mutable.MutableObject; import org.joml.Matrix4f; import org.joml.Vector4f; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java index b67e09616c..9a02ae1d37 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/AnimatedSceneElement.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.ponder.element; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.utility.animation.LerpedFloat; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java index 1d31555a58..7bfa9b166b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/MinecartElement.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.ponder.element; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java index fc177c0028..324e55fabd 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java @@ -2,7 +2,7 @@ package com.simibubi.create.foundation.ponder.element; import java.util.function.Supplier; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 27eb93da9a..36f8cc83b2 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -6,8 +6,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.function.Consumer; -import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.ModelUtil; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index f209d511a3..c11828e17c 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -4,11 +4,11 @@ import static com.simibubi.create.Create.asResource; import org.lwjgl.system.MemoryUtil; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.api.layout.FloatRepr; -import com.jozufozu.flywheel.api.layout.IntegerRepr; -import com.jozufozu.flywheel.api.layout.LayoutBuilder; -import com.jozufozu.flywheel.lib.instance.SimpleInstanceType; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.api.layout.FloatRepr; +import dev.engine_room.flywheel.api.layout.IntegerRepr; +import dev.engine_room.flywheel.api.layout.LayoutBuilder; +import dev.engine_room.flywheel.lib.instance.SimpleInstanceType; import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.belt.BeltInstance; diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index f9be8fa3a5..8f57a794e7 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -7,9 +7,9 @@ import javax.annotation.Nullable; import org.joml.Matrix4f; import org.joml.Vector4f; -import com.jozufozu.flywheel.api.visualization.VisualizationManager; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.VisualizationHelper; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.VisualizationHelper; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AnimationTickHolder; diff --git a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java index 87e5954960..fe7ccb4d33 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java @@ -6,8 +6,8 @@ import java.util.function.Supplier; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.render.SuperByteBufferCache.Compartment; diff --git a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java index 13d671b641..c8c44b4c11 100644 --- a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java +++ b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java @@ -5,9 +5,9 @@ import java.util.function.Consumer; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; public class ConditionalInstance { diff --git a/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java b/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java index 8826ee1f50..00255bd772 100644 --- a/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java +++ b/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java @@ -5,8 +5,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; public class GroupInstance extends AbstractCollection { diff --git a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java index 4d1e2000b6..f638146d8e 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java +++ b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java @@ -7,8 +7,8 @@ import java.util.function.Consumer; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; public class SelectInstance { diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index c6b5472db4..c33d4a49b1 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -6,8 +6,8 @@ import org.joml.Quaternionf; import org.joml.Vector3f; import org.joml.Vector4f; -import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.util.ShadersModHandler; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.util.ShadersModHandler; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index bf647fd2f5..8bbf0dbc05 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -4,11 +4,11 @@ import java.nio.ByteBuffer; import org.jetbrains.annotations.Nullable; -import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.lib.model.ModelCache; -import com.jozufozu.flywheel.lib.model.ModelUtil; -import com.jozufozu.flywheel.lib.model.baked.ForgeBakedModelBuilder; -import com.jozufozu.flywheel.lib.model.baked.VirtualEmptyBlockGetter; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.lib.model.ModelCache; +import dev.engine_room.flywheel.lib.model.ModelUtil; +import dev.engine_room.flywheel.lib.model.baked.ForgeBakedModelBuilder; +import dev.engine_room.flywheel.lib.model.baked.VirtualEmptyBlockGetter; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.renderer.block.BlockRenderDispatcher; @@ -33,7 +33,7 @@ public class VirtualRenderHelper { } /** - * A copy of {@link com.jozufozu.flywheel.lib.model.Models#block(BlockState)}, but with virtual model data passed in. + * A copy of {@link dev.engine_room.flywheel.lib.model.Models#block(BlockState)}, but with virtual model data passed in. * @param state The block state to get the model for. * @return The model for the given block state. */ diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index a66532bfff..adc9a825c7 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -6,7 +6,7 @@ import javax.annotation.Nullable; import org.joml.Matrix3f; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllSpecialTextures; diff --git a/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java index b48c7b3627..f20993e8b2 100644 --- a/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java @@ -9,7 +9,7 @@ import java.util.Set; import javax.annotation.Nullable; -import com.jozufozu.flywheel.api.visualization.VisualizationLevel; +import dev.engine_room.flywheel.api.visualization.VisualizationLevel; import it.unimi.dsi.fastutil.objects.Object2ShortMap; import it.unimi.dsi.fastutil.objects.Object2ShortOpenHashMap; diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java index 68f881ec25..6d95075791 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java @@ -9,9 +9,9 @@ import java.util.stream.Stream; import javax.annotation.Nullable; import com.google.common.collect.ImmutableMap; -import com.jozufozu.flywheel.api.Flywheel; -import com.jozufozu.flywheel.api.backend.Backend; -import com.jozufozu.flywheel.api.backend.BackendManager; +import dev.engine_room.flywheel.api.Flywheel; +import dev.engine_room.flywheel.api.backend.Backend; +import dev.engine_room.flywheel.api.backend.BackendManager; import com.mojang.blaze3d.platform.GlUtil; import com.simibubi.create.Create; import com.simibubi.create.foundation.mixin.accessor.SystemReportAccessor; diff --git a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java index 18f68ecab6..0ba7faa2b8 100644 --- a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java @@ -1,6 +1,6 @@ package com.simibubi.create.infrastructure.gui; -import com.jozufozu.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; From 02dca46855c0dabc21b16532cbcaf8bee1fce0ec Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sun, 26 May 2024 14:21:06 -0700 Subject: [PATCH 28/35] SuperByteBuffer fixes and improvements - Use color as a multiplier instead of override - Always use maximum of provided light and stored light - Use stored overlay if overlay value is not provided - Use shader light directions to calculate diffuse - Require providing level when using level light - Reuse objects --- .../animations/AnimatedBlazeBurner.java | 14 +- .../actors/harvester/HarvesterRenderer.java | 4 +- .../psi/PortableStorageInterfaceRenderer.java | 8 +- .../actors/roller/RollerRenderer.java | 17 +- .../actors/roller/TrackPaverV2.java | 8 +- .../trainControls/ControlsRenderer.java | 8 +- .../StabilizedBearingMovementBehaviour.java | 10 +- .../elevator/ElevatorPulleyRenderer.java | 5 +- .../pulley/AbstractPulleyRenderer.java | 10 +- .../render/ContraptionEntityRenderer.java | 3 +- .../equipment/armor/BacktankArmorLayer.java | 8 +- .../base/KineticBlockEntityRenderer.java | 11 +- .../content/kinetics/belt/BeltRenderer.java | 2 +- .../crank/ValveHandleBlockEntity.java | 2 +- .../kinetics/deployer/DeployerRenderer.java | 15 +- .../content/kinetics/drill/DrillRenderer.java | 4 +- .../kinetics/fan/EncasedFanRenderer.java | 2 +- .../content/kinetics/saw/SawRenderer.java | 7 +- .../BracketedKineticBlockEntityRenderer.java | 8 +- .../encased/EncasedCogRenderer.java | 4 +- .../SpeedControllerRenderer.java | 6 +- .../steamEngine/SteamEngineBlockEntity.java | 2 +- .../logistics/depot/EjectorRenderer.java | 12 +- .../displayLink/DisplayLinkRenderer.java | 4 +- .../redstone/nixieTube/NixieTubeRenderer.java | 6 +- .../trains/schedule/TrainHatArmorLayer.java | 6 +- .../trains/track/BezierConnection.java | 20 +- .../content/trains/track/TrackBlock.java | 2 +- .../trains/track/TrackBlockEntity.java | 14 +- .../content/trains/track/TrackMaterial.java | 2 +- .../content/trains/track/TrackPaver.java | 2 +- .../content/trains/track/TrackRenderer.java | 8 +- .../content/trains/track/TrackVisual.java | 10 +- .../foundation/fluid/FluidRenderer.java | 2 +- .../gui/CustomLightingSettings.java | 7 +- .../gui/element/GuiGameElement.java | 9 +- .../item/render/PartialItemModelRenderer.java | 15 +- .../mixin/accessor/RenderSystemAccessor.java | 15 ++ .../foundation/outliner/AABBOutline.java | 4 +- .../outliner/BlockClusterOutline.java | 4 +- .../foundation/outliner/LineOutline.java | 2 +- .../create/foundation/ponder/PonderScene.java | 6 +- .../ponder/element/WorldSectionElement.java | 12 +- .../render/DiffuseLightCalculator.java | 29 -- .../foundation/render/ForcedDiffuseState.java | 29 -- .../create/foundation/render/RenderTypes.java | 184 +++++++------ .../foundation/render/SuperByteBuffer.java | 254 ++++++++---------- .../render/SuperRenderTypeBuffer.java | 4 +- .../render/VirtualRenderHelper.java | 4 +- .../foundation/utility/outliner/Outline.java | 2 +- src/main/resources/create.mixins.json | 1 + 51 files changed, 383 insertions(+), 444 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/RenderSystemAccessor.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index a864c800b1..c71ed7271f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -1,8 +1,6 @@ package com.simibubi.create.compat.jei.category.animations; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; @@ -12,10 +10,10 @@ import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; import net.minecraft.world.level.block.Blocks; @@ -84,14 +82,10 @@ public class AnimatedBlazeBurner extends AnimatedKinetics { uScroll = uScroll - Math.floor(uScroll); uScroll = uScroll * spriteWidth / 2; - Minecraft mc = Minecraft.getInstance(); - MultiBufferSource.BufferSource buffer = mc.renderBuffers() - .bufferSource(); - VertexConsumer vb = buffer.getBuffer(RenderType.cutoutMipped()); CachedBufferer.partial(AllPartialModels.BLAZE_BURNER_FLAME, Blocks.AIR.defaultBlockState()) - .shiftUVScrolling(spriteShift, (float) uScroll, (float) vScroll) - .light(LightTexture.FULL_BRIGHT) - .renderInto(matrixStack, vb); + .shiftUVScrolling(spriteShift, (float) uScroll, (float) vScroll) + .light(LightTexture.FULL_BRIGHT) + .renderInto(matrixStack, graphics.bufferSource().getBuffer(RenderType.cutoutMipped())); matrixStack.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java index 6cfb8125b9..0aa9b7102c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterRenderer.java @@ -53,8 +53,8 @@ public class HarvesterRenderer extends SafeBlockEntityRenderer sbb - .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) + sbb -> sbb.light(LevelRenderer.getLightColor(renderWorld, context.localPos)) + .useLevelLight(context.world, matrices.getWorld()) .renderInto(matrices.getViewProjection(), vb)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java index c8b27df346..06064e32b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerRenderer.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.actors.roller; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.harvester.HarvesterRenderer; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -34,6 +35,7 @@ public class RollerRenderer extends SmartBlockEntityRenderer super.renderSafe(be, partialTicks, ms, buffer, light, overlay); BlockState blockState = be.getBlockState(); + VertexConsumer vc = buffer.getBuffer(RenderType.cutoutMipped()); ms.pushPose(); ms.translate(0, -0.25, 0); @@ -45,19 +47,20 @@ public class RollerRenderer extends SmartBlockEntityRenderer superBuffer.translate(0, -.5, .5) .rotateYDegrees(90) .light(light) - .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); + .renderInto(ms, vc); ms.popPose(); CachedBufferer.partial(AllPartialModels.ROLLER_FRAME, blockState) .rotateCentered(AngleHelper.rad(AngleHelper.horizontalAngle(facing) + 180), Direction.UP) .light(light) - .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); + .renderInto(ms, vc); } public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, ContraptionMatrices matrices, MultiBufferSource buffers) { BlockState blockState = context.state; Direction facing = blockState.getValue(HORIZONTAL_FACING); + VertexConsumer vc = buffers.getBuffer(RenderType.cutoutMipped()); SuperByteBuffer superBuffer = CachedBufferer.partial(AllPartialModels.ROLLER_WHEEL, blockState); float speed = (float) (!VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite()) ? context.getAnimationSpeed() @@ -76,15 +79,17 @@ public class RollerRenderer extends SmartBlockEntityRenderer int contraptionWorldLight = LevelRenderer.getLightColor(renderWorld, context.localPos); superBuffer.translate(0, -.5, .5) .rotateYDegrees(90) - .light(matrices.getWorld(), contraptionWorldLight) - .renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped())); + .light(contraptionWorldLight) + .useLevelLight(context.world, matrices.getWorld()) + .renderInto(viewProjection, vc); viewProjection.popPose(); CachedBufferer.partial(AllPartialModels.ROLLER_FRAME, blockState) .transform(matrices.getModel()) .rotateCentered(AngleHelper.rad(AngleHelper.horizontalAngle(facing) + 180), Direction.UP) - .light(matrices.getWorld(), contraptionWorldLight) - .renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped())); + .light(contraptionWorldLight) + .useLevelLight(context.world, matrices.getWorld()) + .renderInto(viewProjection, vc); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/TrackPaverV2.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/TrackPaverV2.java index b716d8f25f..e7b4fc6280 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/TrackPaverV2.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/TrackPaverV2.java @@ -101,7 +101,7 @@ public class TrackPaverV2 { Map, Double> yLevels = new HashMap<>(); Map, Double> tLevels = new HashMap<>(); - BlockPos tePosition = bc.tePositions.getFirst(); + BlockPos bePosition = bc.bePositions.getFirst(); double radius = -task.getHorizontalInterval() .getFirst(); double r1 = radius - .575; @@ -109,10 +109,10 @@ public class TrackPaverV2 { double handleLength = bc.getHandleLength(); Vec3 start = bc.starts.getFirst() - .subtract(Vec3.atLowerCornerOf(tePosition)) + .subtract(Vec3.atLowerCornerOf(bePosition)) .add(0, 3 / 16f, 0); Vec3 end = bc.starts.getSecond() - .subtract(Vec3.atLowerCornerOf(tePosition)) + .subtract(Vec3.atLowerCornerOf(bePosition)) .add(0, 3 / 16f, 0); Vec3 startHandle = bc.axes.getFirst() .scale(handleLength) @@ -190,7 +190,7 @@ public class TrackPaverV2 { BlockPos targetPos = new BlockPos(entry.getKey() .getFirst(), floor, entry.getKey() - .getSecond()).offset(tePosition); + .getSecond()).offset(bePosition); task.put(targetPos.getX(), targetPos.getZ(), targetPos.getY() + (yValue - floor >= .5 ? .5f : 0)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java index 2f1cd95998..265542dbb3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/trainControls/ControlsRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.actors.trainControls; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -32,7 +32,8 @@ public class ControlsRenderer { .center() .rotateYDegrees(hAngle) .uncenter() - .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) + .light(LevelRenderer.getLightColor(renderWorld, context.localPos)) + .useLevelLight(context.world, matrices.getWorld()) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); double yOffset = Mth.lerp(equipAnimation * equipAnimation, -0.15f, 0.05f); @@ -52,7 +53,8 @@ public class ControlsRenderer { .translate(0, -2 / 16f, -3 / 16f) .translate(first ? 0 : 6 / 16f, 0, 0); lever.transform(ms) - .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) + .light(LevelRenderer.getLightColor(renderWorld, context.localPos)) + .useLevelLight(context.world, matrices.getWorld()) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java index 5779bd0eed..310add5939 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingMovementBehaviour.java @@ -4,9 +4,6 @@ import javax.annotation.Nullable; import org.joml.Quaternionf; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -21,6 +18,9 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -72,8 +72,8 @@ public class StabilizedBearingMovementBehaviour implements MovementBehaviour { superBuffer.rotateCentered(orientation); // render - superBuffer - .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) + superBuffer.light(LevelRenderer.getLightColor(renderWorld, context.localPos)) + .useLevelLight(context.world, matrices.getWorld()) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java index 63d99454df..d9a89b15b7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyRenderer.java @@ -33,11 +33,10 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer exten Axis rotationAxis = ((IRotate) be.getBlockState() .getBlock()).getRotationAxis(be.getBlockState()); + VertexConsumer vb = buffer.getBuffer(RenderType.solid()); kineticRotationTransform(getRotatedCoil(be), be, rotationAxis, AngleHelper.rad(offset * 180), light) - .renderInto(ms, buffer.getBuffer(RenderType.solid())); + .renderInto(ms, vb); Level world = be.getLevel(); BlockState blockState = be.getBlockState(); @@ -65,7 +66,6 @@ public abstract class AbstractPulleyRenderer exten SuperByteBuffer magnet = renderMagnet(be); SuperByteBuffer rope = renderRope(be); - VertexConsumer vb = buffer.getBuffer(RenderType.solid()); if (running || offset == 0) renderAt(world, offset > .25f ? magnet : halfMagnet, offset, pos, ms, vb); @@ -85,7 +85,7 @@ public abstract class AbstractPulleyRenderer exten BlockPos actualPos = pulleyPos.below((int) offset); int light = LevelRenderer.getLightColor(world, world.getBlockState(actualPos), actualPos); partial.translate(0, -offset, 0) - .light(light) + .light(light) .renderInto(ms, buffer); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java index 18a4aa9dd5..30daf394d6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java @@ -69,8 +69,7 @@ public class ContraptionEntityRenderer exte if (!sbb.isEmpty()) { VertexConsumer vc = buffers.getBuffer(renderType); sbb.transform(matrices.getModel()) - .light(matrices.getWorld()) - .hybridLight() + .useLevelLight(level, matrices.getWorld()) .renderInto(poseStack, vc); } } diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java index 1f492bd50b..2d3441ae48 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.equipment.armor; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; @@ -9,7 +10,6 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderer; @@ -43,7 +43,7 @@ public class BacktankArmorLayer return; HumanoidModel model = (HumanoidModel) entityModel; - RenderType renderType = Sheets.cutoutBlockSheet(); + VertexConsumer vc = buffer.getBuffer(Sheets.cutoutBlockSheet()); BlockState renderedState = item.getBlock().defaultBlockState() .setValue(BacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); SuperByteBuffer backtank = CachedBufferer.block(renderedState); @@ -57,7 +57,7 @@ public class BacktankArmorLayer backtank.disableDiffuse() .light(light) - .renderInto(ms, buffer.getBuffer(renderType)); + .renderInto(ms, vc); cogs.center() .rotateYDegrees(180) @@ -68,7 +68,7 @@ public class BacktankArmorLayer cogs.disableDiffuse() .light(light) - .renderInto(ms, buffer.getBuffer(renderType)); + .renderInto(ms, vc); ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java index be8e9ae55c..312087cc6c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.base; import org.apache.commons.lang3.ArrayUtils; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; @@ -15,6 +14,7 @@ import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Color; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -50,8 +50,7 @@ public class KineticBlockEntityRenderer extends Sa BlockState state = getRenderedBlockState(be); RenderType type = getRenderType(be, state); - if (type != null) - renderRotatingBuffer(be, getRotatedModel(be, state), ms, buffer.getBuffer(type), light); + renderRotatingBuffer(be, getRotatedModel(be, state), ms, buffer.getBuffer(type), light); } protected BlockState getRenderedBlockState(T be) { @@ -66,7 +65,7 @@ public class KineticBlockEntityRenderer extends Sa for (RenderType type : REVERSED_CHUNK_BUFFER_LAYERS) if (typeSet.contains(type)) return type; - return null; + return RenderType.cutoutMipped(); } protected SuperByteBuffer getRotatedModel(T be, BlockState state) { @@ -84,7 +83,7 @@ public class KineticBlockEntityRenderer extends Sa standardKineticRotationTransform(superBuffer, be, light).renderInto(ms, buffer); } - public static float getAngleForTe(KineticBlockEntity be, final BlockPos pos, Axis axis) { + public static float getAngleForBe(KineticBlockEntity be, final BlockPos pos, Axis axis) { float time = AnimationTickHolder.getRenderTime(be.getLevel()); float offset = getRotationOffsetForPosition(be, pos, axis); float angle = ((time * be.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI; @@ -96,7 +95,7 @@ public class KineticBlockEntityRenderer extends Sa final BlockPos pos = be.getBlockPos(); Axis axis = ((IRotate) be.getBlockState() .getBlock()).getRotationAxis(be.getBlockState()); - return kineticRotationTransform(buffer, be, axis, getAngleForTe(be, pos, axis), light); + return kineticRotationTransform(buffer, be, axis, getAngleForBe(be, pos, axis), light); } public static SuperByteBuffer kineticRotationTransform(SuperByteBuffer buffer, KineticBlockEntity be, Axis axis, diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index 330896fc05..8139c65dc9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -118,7 +118,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { } beltBuffer - .transform(localTransforms) + .transform(localTransforms) .renderInto(ms, vb); // Diagonal belt do not have a separate bottom model diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java index c06953d130..ff8d02946e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/ValveHandleBlockEntity.java @@ -91,7 +91,7 @@ public class ValveHandleBlockEntity extends HandCrankBlockEntity { @Override public float getIndependentAngle(float partialTicks) { if (inUse == 0 && source != null && getSpeed() != 0) - return KineticBlockEntityRenderer.getAngleForTe(this, worldPosition, + return KineticBlockEntityRenderer.getAngleForBe(this, worldPosition, KineticBlockEntityRenderer.getRotationAxisOf(this)); int step = getBlockState().getOptionalValue(ValveHandleBlock.FACING) diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java index aab7e367be..e382d5485c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerRenderer.java @@ -3,9 +3,6 @@ package com.simibubi.create.content.kinetics.deployer; import static com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.FACING; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -27,6 +24,9 @@ import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; @@ -213,11 +213,14 @@ public class DeployerRenderer extends SafeBlockEntityRenderer .rotateXDegrees(AngleHelper.verticalAngle(facing)) .rotateZDegrees(angle) .uncenter() - .light(matrices.getWorld(), - LevelRenderer.getLightColor(renderWorld, context.localPos)) + .light(LevelRenderer.getLightColor(renderWorld, context.localPos)) + .useLevelLight(context.world, matrices.getWorld()) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.solid())); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java index 988292a1d5..58286df27c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.fan; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java index 2266388e1b..d0903a1240 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawRenderer.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.kinetics.saw; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; @@ -19,6 +17,8 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; @@ -198,7 +198,8 @@ public class SawRenderer extends SafeBlockEntityRenderer { } superBuffer.uncenter() - .light(matrices.getWorld(), LevelRenderer.getLightColor(renderWorld, context.localPos)) + .light(LevelRenderer.getLightColor(renderWorld, context.localPos)) + .useLevelLight(context.world, matrices.getWorld()) .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java index ec046a8e87..3232a05f2d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.simpleRelays; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -9,6 +9,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; @@ -38,17 +39,18 @@ public class BracketedKineticBlockEntityRenderer extends KineticBlockEntityRende // Large cogs sometimes have to offset their teeth by 11.25 degrees in order to // mesh properly + VertexConsumer vc = buffer.getBuffer(RenderType.solid()); Axis axis = getRotationAxisOf(be); Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); renderRotatingBuffer(be, CachedBufferer.partialFacingVertical(AllPartialModels.SHAFTLESS_LARGE_COGWHEEL, be.getBlockState(), facing), - ms, buffer.getBuffer(RenderType.solid()), light); + ms, vc, light); float angle = getAngleForLargeCogShaft(be, axis); SuperByteBuffer shaft = CachedBufferer.partialFacingVertical(AllPartialModels.COGWHEEL_SHAFT, be.getBlockState(), facing); kineticRotationTransform(shaft, be, axis, angle, light); - shaft.renderInto(ms, buffer.getBuffer(RenderType.solid())); + shaft.renderInto(ms, vc); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java index a7d2cf094c..a2d40e7929 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.kinetics.simpleRelays.encased; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.IRotate; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; @@ -54,7 +54,7 @@ public class EncasedCogRenderer extends KineticBlockEntityRenderer { int light, int overlay) { super.renderSafe(be, partialTicks, ms, buffer, light, overlay); - VertexConsumer vertexBuilder = buffer.getBuffer(RenderType.solid()); float lidProgress = be.getLidProgress(partialTicks); float angle = lidProgress * 70; @@ -49,7 +47,7 @@ public class EjectorRenderer extends ShaftRenderer { SuperByteBuffer model = CachedBufferer.partial(AllPartialModels.EJECTOR_TOP, be.getBlockState()); applyLidAngle(be, angle, model); model.light(light) - .renderInto(ms, vertexBuilder); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } var msr = TransformStack.of(ms); diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java index 8ccfddcf97..9ca03ea537 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/DisplayLinkRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.redstone.displayLink; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; @@ -8,6 +7,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.RenderTypes; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -57,7 +57,7 @@ public class DisplayLinkRenderer extends SafeBlockEntityRenderer return; M entityModel = getParentModel(); - RenderType renderType = Sheets.cutoutBlockSheet(); ms.pushPose(); boolean valid = false; @@ -127,7 +125,7 @@ public class TrainHatArmorLayer CachedBufferer.partial(AllPartialModels.TRAIN_HAT, air) .disableDiffuse() .light(light) - .renderInto(ms, buffer.getBuffer(renderType)); + .renderInto(ms, buffer.getBuffer(Sheets.cutoutBlockSheet())); } ms.popPose(); diff --git a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java index d09090d714..393abe414a 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java @@ -34,7 +34,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BezierConnection implements Iterable { - public Couple tePositions; + public Couple bePositions; public Couple starts; public Couple axes; public Couple normals; @@ -59,7 +59,7 @@ public class BezierConnection implements Iterable { public BezierConnection(Couple positions, Couple starts, Couple axes, Couple normals, boolean primary, boolean girder, TrackMaterial material) { - tePositions = positions; + bePositions = positions; this.starts = starts; this.axes = axes; this.normals = normals; @@ -70,7 +70,7 @@ public class BezierConnection implements Iterable { } public BezierConnection secondary() { - BezierConnection bezierConnection = new BezierConnection(tePositions.swap(), starts.swap(), axes.swap(), + BezierConnection bezierConnection = new BezierConnection(bePositions.swap(), starts.swap(), axes.swap(), normals.swap(), !primary, hasGirder, trackMaterial); if (smoothing != null) bezierConnection.smoothing = smoothing.swap(); @@ -96,7 +96,7 @@ public class BezierConnection implements Iterable { } private boolean equalsSansMaterialInner(BezierConnection other) { - return this == other || (other != null && coupleEquals(this.tePositions, other.tePositions) + return this == other || (other != null && coupleEquals(this.bePositions, other.bePositions) && coupleEquals(this.starts, other.starts) && coupleEquals(this.axes, other.axes) && coupleEquals(this.normals, other.normals) && this.hasGirder == other.hasGirder); } @@ -116,7 +116,7 @@ public class BezierConnection implements Iterable { } public CompoundTag write(BlockPos localTo) { - Couple tePositions = this.tePositions.map(b -> b.subtract(localTo)); + Couple tePositions = this.bePositions.map(b -> b.subtract(localTo)); Couple starts = this.starts.map(v -> v.subtract(Vec3.atLowerCornerOf(localTo))); CompoundTag compound = new CompoundTag(); @@ -143,7 +143,7 @@ public class BezierConnection implements Iterable { } public void write(FriendlyByteBuf buffer) { - tePositions.forEach(buffer::writeBlockPos); + bePositions.forEach(buffer::writeBlockPos); starts.forEach(v -> VecHelper.write(v, buffer)); axes.forEach(v -> VecHelper.write(v, buffer)); normals.forEach(v -> VecHelper.write(v, buffer)); @@ -156,7 +156,7 @@ public class BezierConnection implements Iterable { } public BlockPos getKey() { - return tePositions.getSecond(); + return bePositions.getSecond(); } public boolean isPrimary() { @@ -346,7 +346,7 @@ public class BezierConnection implements Iterable { @Override public Iterator iterator() { resolve(); - var offset = Vec3.atLowerCornerOf(tePositions.getFirst()) + var offset = Vec3.atLowerCornerOf(bePositions.getFirst()) .scale(-1) .add(0, 3 / 16f, 0); return new Bezierator(this, offset); @@ -378,7 +378,7 @@ public class BezierConnection implements Iterable { if (!level.getGameRules() .getBoolean(GameRules.RULE_DOBLOCKDROPS)) return; - Vec3 origin = Vec3.atLowerCornerOf(tePositions.getFirst()); + Vec3 origin = Vec3.atLowerCornerOf(bePositions.getFirst()); for (Segment segment : this) { if (segment.index % 2 != 0 || segment.index == getSegmentCount()) continue; @@ -403,7 +403,7 @@ public class BezierConnection implements Iterable { new BlockParticleOption(ParticleTypes.BLOCK, AllBlocks.METAL_GIRDER.getDefaultState()); if (!(level instanceof ServerLevel slevel)) return; - Vec3 origin = Vec3.atLowerCornerOf(tePositions.getFirst()); + Vec3 origin = Vec3.atLowerCornerOf(bePositions.getFirst()); for (Segment segment : this) { for (int offset : Iterate.positiveAndNegative) { Vec3 v = segment.position.add(segment.normal.scale(14 / 16f * offset)) diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java index 815e3858e3..9e081cf7e6 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java @@ -369,7 +369,7 @@ public class TrackBlock extends Block Map connections = trackBE.getConnections(); connections.forEach((connectedPos, bc) -> ITrackBlock.addToListIfConnected(connectedTo, list, - (d, b) -> d == 1 ? Vec3.atLowerCornerOf(bc.tePositions.get(b)) : bc.starts.get(b), bc.normals::get, + (d, b) -> d == 1 ? Vec3.atLowerCornerOf(bc.bePositions.get(b)) : bc.starts.get(b), bc.normals::get, b -> world instanceof Level l ? l.dimension() : Level.OVERWORLD, bc::yOffsetAt, null, bc, (b, v) -> ITrackBlock.getMaterialSimple(world, v, bc.getMaterial()))); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java index 10c6f0b095..cdf2bd8627 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java @@ -93,7 +93,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable BlockPos key = entry.getKey(); BezierConnection bc = entry.getValue(); - if (!key.equals(bc.getKey()) || !worldPosition.equals(bc.tePositions.getFirst())) { + if (!key.equals(bc.getKey()) || !worldPosition.equals(bc.bePositions.getFirst())) { invalid.add(key); continue; } @@ -159,7 +159,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable for (BezierConnection bezierConnection : connections.values()) { if (!(level.getBlockEntity(bezierConnection.getKey())instanceof TrackBlockEntity tbe)) return; - tbe.removeConnection(bezierConnection.tePositions.getFirst()); + tbe.removeConnection(bezierConnection.bePositions.getFirst()); if (!dropAndDiscard) continue; if (!cancelDrops) @@ -282,10 +282,10 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable newConnection.normals.replace(transform::applyWithoutOffsetUncentered); newConnection.axes.replace(transform::applyWithoutOffsetUncentered); - BlockPos diff = newConnection.tePositions.getSecond() - .subtract(newConnection.tePositions.getFirst()); - newConnection.tePositions - .setSecond(BlockPos.containing(Vec3.atCenterOf(newConnection.tePositions.getFirst()) + BlockPos diff = newConnection.bePositions.getSecond() + .subtract(newConnection.bePositions.getFirst()); + newConnection.bePositions + .setSecond(BlockPos.containing(Vec3.atCenterOf(newConnection.bePositions.getFirst()) .add(transform.applyWithoutOffsetUncentered(Vec3.atLowerCornerOf(diff))))); Vec3 beVec = Vec3.atLowerCornerOf(worldPosition); @@ -364,7 +364,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable public void manageFakeTracksAlong(BezierConnection bc, boolean remove) { Map, Double> yLevels = new HashMap<>(); - BlockPos tePosition = bc.tePositions.getFirst(); + BlockPos tePosition = bc.bePositions.getFirst(); Vec3 end1 = bc.starts.getFirst() .subtract(Vec3.atLowerCornerOf(tePosition)) .add(0, 3 / 16f, 0); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java index 16be7f5040..0a72008acc 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterial.java @@ -163,7 +163,7 @@ public class TrackMaterial { } @OnlyIn(Dist.CLIENT) - public record TrackModelHolder(PartialModel tie, PartialModel segment_left, PartialModel segment_right) { + public record TrackModelHolder(PartialModel tie, PartialModel leftSegment, PartialModel rightSegment) { static final TrackModelHolder DEFAULT = new TrackModelHolder(AllPartialModels.TRACK_TIE, AllPartialModels.TRACK_SEGMENT_LEFT, AllPartialModels.TRACK_SEGMENT_RIGHT); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackPaver.java b/src/main/java/com/simibubi/create/content/trains/track/TrackPaver.java index 3a2058e6e1..bb7ced1432 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackPaver.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackPaver.java @@ -99,7 +99,7 @@ public class TrackPaver { } Map, Double> yLevels = new HashMap<>(); - BlockPos tePosition = bc.tePositions.getFirst(); + BlockPos tePosition = bc.bePositions.getFirst(); Vec3 end1 = bc.starts.getFirst() .subtract(Vec3.atLowerCornerOf(tePosition)) .add(0, 3 / 16f, 0); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java index 30cf366225..85706c2cd4 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackRenderer.java @@ -48,15 +48,15 @@ public class TrackRenderer extends SafeBlockEntityRenderer { return; ms.pushPose(); - BlockPos tePosition = bc.tePositions.getFirst(); + BlockPos bePosition = bc.bePositions.getFirst(); BlockState air = Blocks.AIR.defaultBlockState(); SegmentAngles[] segments = bc.getBakedSegments(); - renderGirder(level, bc, ms, vb, tePosition); + renderGirder(level, bc, ms, vb, bePosition); for (int i = 1; i < segments.length; i++) { SegmentAngles segment = segments[i]; - int light = LevelRenderer.getLightColor(level, segment.lightPosition.offset(tePosition)); + int light = LevelRenderer.getLightColor(level, segment.lightPosition.offset(bePosition)); TrackMaterial.TrackModelHolder modelHolder = bc.getMaterial().getModelHolder(); @@ -68,7 +68,7 @@ public class TrackRenderer extends SafeBlockEntityRenderer { for (boolean first : Iterate.trueAndFalse) { Pose transform = segment.railTransforms.get(first); - CachedBufferer.partial(first ? modelHolder.segment_left() : modelHolder.segment_right(), air) + CachedBufferer.partial(first ? modelHolder.leftSegment() : modelHolder.rightSegment(), air) .mulPose(transform.pose()) .mulNormal(transform.normal()) .light(light) diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java index a478c1769e..c9bc26f041 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java @@ -123,7 +123,7 @@ public class TrackVisual extends AbstractBlockEntityVisual { private @Nullable GirderVisual girder; private BezierTrackVisual(BezierConnection bc) { - BlockPos tePosition = bc.tePositions.getFirst(); + BlockPos tePosition = bc.bePositions.getFirst(); girder = bc.hasGirder ? new GirderVisual(bc) : null; PoseStack pose = new PoseStack(); @@ -142,9 +142,9 @@ public class TrackVisual extends AbstractBlockEntityVisual { instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie())) .createInstances(ties); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_left())) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.leftSegment())) .createInstances(left); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.segment_right())) + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.rightSegment())) .createInstances(right); SegmentAngles[] segments = bc.getBakedSegments(); @@ -209,11 +209,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { private final BlockPos[] lightPos; private GirderVisual(BezierConnection bc) { - BlockPos tePosition = bc.tePositions.getFirst(); + BlockPos tePosition = bc.bePositions.getFirst(); PoseStack pose = new PoseStack(); TransformStack.of(pose) .translate(getVisualPosition()) - .nudge((int) bc.tePositions.getFirst() + .nudge((int) bc.bePositions.getFirst() .asLong()); int segCount = bc.getSegmentCount(); diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 1e1707e971..3e338b91e9 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -33,7 +33,7 @@ import net.minecraftforge.fluids.FluidType; public class FluidRenderer { public static VertexConsumer getFluidBuilder(MultiBufferSource buffer) { - return buffer.getBuffer(RenderTypes.getFluid()); + return buffer.getBuffer(RenderTypes.fluid()); } public static void renderFluidStream(FluidStack fluidStack, Direction direction, float radius, float progress, diff --git a/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java b/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java index 2618fd9bf6..86f8bbb28a 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java +++ b/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java @@ -1,6 +1,5 @@ package com.simibubi.create.foundation.gui; -import org.joml.Matrix4f; import org.joml.Vector3f; import com.mojang.blaze3d.systems.RenderSystem; @@ -10,7 +9,6 @@ public class CustomLightingSettings implements ILightingSettings { private Vector3f light1; private Vector3f light2; - private Matrix4f lightMatrix; protected CustomLightingSettings(float yRot, float xRot) { init(yRot, xRot, 0, 0, false); @@ -32,14 +30,11 @@ public class CustomLightingSettings implements ILightingSettings { } else { light2 = new Vector3f(); } - - lightMatrix = new Matrix4f(); - lightMatrix.identity(); } @Override public void applyLighting() { - RenderSystem.setupLevelDiffuseLighting(light1, light2, lightMatrix); + RenderSystem.setShaderLights(light1, light2); } public static Builder builder() { diff --git a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java index 4cc63f916c..c26ce914c2 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java @@ -171,8 +171,7 @@ public class GuiGameElement { Minecraft mc = Minecraft.getInstance(); BlockRenderDispatcher blockRenderer = mc.getBlockRenderer(); - MultiBufferSource.BufferSource buffer = mc.renderBuffers() - .bufferSource(); + MultiBufferSource.BufferSource buffer = graphics.bufferSource(); transformMatrix(matrixStack); @@ -264,11 +263,11 @@ public class GuiGameElement { PoseStack matrixStack = graphics.pose(); prepareMatrix(matrixStack); transformMatrix(matrixStack); - renderItemIntoGUI(matrixStack, stack, customLighting == null); + renderItemIntoGUI(graphics, matrixStack, stack, customLighting == null); cleanUpMatrix(matrixStack); } - public static void renderItemIntoGUI(PoseStack matrixStack, ItemStack stack, boolean useDefaultLighting) { + public static void renderItemIntoGUI(GuiGraphics graphics, PoseStack matrixStack, ItemStack stack, boolean useDefaultLighting) { ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); BakedModel bakedModel = renderer.getModel(stack, null, null, 0); @@ -282,7 +281,7 @@ public class GuiGameElement { matrixStack.translate(0, 0, 100.0F); matrixStack.translate(8.0F, -8.0F, 0.0F); matrixStack.scale(16.0F, 16.0F, 16.0F); - MultiBufferSource.BufferSource buffer = Minecraft.getInstance().renderBuffers().bufferSource(); + MultiBufferSource.BufferSource buffer = graphics.bufferSource(); boolean flatLighting = !bakedModel.usesBlockLight(); if (useDefaultLighting && flatLighting) { Lighting.setupForFlatItems(); diff --git a/src/main/java/com/simibubi/create/foundation/item/render/PartialItemModelRenderer.java b/src/main/java/com/simibubi/create/foundation/item/render/PartialItemModelRenderer.java index 9a07c3b006..b03db2b94e 100644 --- a/src/main/java/com/simibubi/create/foundation/item/render/PartialItemModelRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/item/render/PartialItemModelRenderer.java @@ -8,6 +8,7 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.Direction; @@ -41,19 +42,19 @@ public class PartialItemModelRenderer { } public void render(BakedModel model, int light) { - render(model, RenderTypes.getItemPartialTranslucent(), light); + render(model, Sheets.translucentCullBlockSheet(), light); } public void renderSolid(BakedModel model, int light) { - render(model, RenderTypes.getItemPartialSolid(), light); - } - - public void renderSolidGlowing(BakedModel model, int light) { - render(model, RenderTypes.getGlowingSolid(), light); + render(model, Sheets.solidBlockSheet(), light); } public void renderGlowing(BakedModel model, int light) { - render(model, RenderTypes.getGlowingTranslucent(), light); + render(model, RenderTypes.itemGlowingTranslucent(), light); + } + + public void renderSolidGlowing(BakedModel model, int light) { + render(model, RenderTypes.itemGlowingSolid(), light); } public void render(BakedModel model, RenderType type, int light) { diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/RenderSystemAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/RenderSystemAccessor.java new file mode 100644 index 0000000000..96b9ec1d1c --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/RenderSystemAccessor.java @@ -0,0 +1,15 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.joml.Vector3f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import com.mojang.blaze3d.systems.RenderSystem; + +@Mixin(RenderSystem.class) +public interface RenderSystemAccessor { + @Accessor("shaderLightDirections") + static Vector3f[] create$getShaderLightDirections() { + throw new AssertionError(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/outliner/AABBOutline.java b/src/main/java/com/simibubi/create/foundation/outliner/AABBOutline.java index ed94ace116..555a6704cf 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/AABBOutline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/AABBOutline.java @@ -70,7 +70,7 @@ public class AABBOutline extends Outline { if (lineWidth == 0) return; - VertexConsumer consumer = buffer.getBuffer(RenderTypes.getOutlineSolid()); + VertexConsumer consumer = buffer.getBuffer(RenderTypes.outlineSolid()); renderBoxEdges(ms, consumer, minPos, maxPos, lineWidth, color, lightmap, disableLineNormals); } @@ -94,7 +94,7 @@ public class AABBOutline extends Outline { return; AllSpecialTextures faceTexture = optionalFaceTexture.get(); - RenderType renderType = RenderTypes.getOutlineTranslucent(faceTexture.getLocation(), cull); + RenderType renderType = RenderTypes.outlineTranslucent(faceTexture.getLocation(), cull); VertexConsumer consumer = buffer.getLateBuffer(renderType); float alphaMult = highlighted ? 1 : 0.5f; diff --git a/src/main/java/com/simibubi/create/foundation/outliner/BlockClusterOutline.java b/src/main/java/com/simibubi/create/foundation/outliner/BlockClusterOutline.java index 59b8a4d00e..fc8b463167 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/BlockClusterOutline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/BlockClusterOutline.java @@ -63,7 +63,7 @@ public class BlockClusterOutline extends Outline { AllSpecialTextures faceTexture = optionalFaceTexture.get(); PoseStack.Pose pose = ms.last(); - RenderType renderType = RenderTypes.getOutlineTranslucent(faceTexture.getLocation(), true); + RenderType renderType = RenderTypes.outlineTranslucent(faceTexture.getLocation(), true); VertexConsumer consumer = buffer.getLateBuffer(renderType); cluster.visibleFaces.forEach((face, axisDirection) -> { @@ -89,7 +89,7 @@ public class BlockClusterOutline extends Outline { cluster.anchor.getZ() - camera.z); PoseStack.Pose pose = ms.last(); - VertexConsumer consumer = buffer.getBuffer(RenderTypes.getOutlineSolid()); + VertexConsumer consumer = buffer.getBuffer(RenderTypes.outlineSolid()); cluster.visibleEdges.forEach(edge -> { BlockPos pos = edge.pos; diff --git a/src/main/java/com/simibubi/create/foundation/outliner/LineOutline.java b/src/main/java/com/simibubi/create/foundation/outliner/LineOutline.java index 09cd2a6a00..aad99f336e 100644 --- a/src/main/java/com/simibubi/create/foundation/outliner/LineOutline.java +++ b/src/main/java/com/simibubi/create/foundation/outliner/LineOutline.java @@ -34,7 +34,7 @@ public class LineOutline extends Outline { if (width == 0) return; - VertexConsumer consumer = buffer.getBuffer(RenderTypes.getOutlineSolid()); + VertexConsumer consumer = buffer.getBuffer(RenderTypes.outlineSolid()); params.loadColor(colorTemp); Vector4f color = colorTemp; int lightmap = params.lightmap; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 703323873a..d35b796718 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -20,7 +20,6 @@ import org.apache.commons.lang3.mutable.MutableObject; import org.joml.Matrix4f; import org.joml.Vector4f; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; @@ -31,8 +30,6 @@ import com.simibubi.create.foundation.ponder.element.WorldSectionElement; import com.simibubi.create.foundation.ponder.instruction.HideAllInstruction; import com.simibubi.create.foundation.ponder.instruction.PonderInstruction; import com.simibubi.create.foundation.ponder.ui.PonderUI; -import com.simibubi.create.foundation.render.DiffuseLightCalculator; -import com.simibubi.create.foundation.render.ForcedDiffuseState; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Pair; @@ -40,6 +37,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.infrastructure.ponder.PonderIndex; +import dev.engine_room.flywheel.lib.transform.TransformStack; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.client.Camera; @@ -236,7 +234,6 @@ public class PonderScene { } public void renderScene(SuperRenderTypeBuffer buffer, PoseStack ms, float pt) { - ForcedDiffuseState.pushCalculator(DiffuseLightCalculator.DEFAULT); ms.pushPose(); Minecraft mc = Minecraft.getInstance(); @@ -256,7 +253,6 @@ public class PonderScene { outliner.renderOutlines(ms, buffer, Vec3.ZERO, pt); ms.popPose(); - ForcedDiffuseState.popCalculator(); } public void renderOverlay(PonderUI screen, GuiGraphics graphics, float partialTicks) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 36f8cc83b2..dc3f932a16 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -305,7 +305,7 @@ public class WorldSectionElement extends AnimatedSceneElement { public void renderFirst(PonderWorld world, MultiBufferSource buffer, PoseStack ms, float fade, float pt) { int light = -1; if (fade != 1) - light = (int) (Mth.lerp(fade, 5, 14)); + light = (int) (Mth.lerp(fade, 5, 15)); if (redraw) { renderedBlockEntities = null; tickableBlockEntities = null; @@ -359,14 +359,14 @@ public class WorldSectionElement extends AnimatedSceneElement { if (redraw) bufferCache.invalidate(DOC_WORLD_SECTION, key); - SuperByteBuffer contraptionBuffer = + SuperByteBuffer structureBuffer = bufferCache.get(DOC_WORLD_SECTION, key, () -> buildStructureBuffer(world, type)); - if (contraptionBuffer.isEmpty()) + if (structureBuffer.isEmpty()) return; - transformMS(contraptionBuffer.getTransforms(), pt); + transformMS(structureBuffer.getTransforms(), pt); int light = lightCoordsFromFade(fade); - contraptionBuffer + structureBuffer .light(light) .renderInto(ms, buffer.getBuffer(type)); } @@ -415,6 +415,7 @@ public class WorldSectionElement extends AnimatedSceneElement { sbbBuilder.begin(); world.setMask(this.section); + world.pushFakeLight(0); ModelBlockRenderer.enableCaching(); section.forEach(pos -> { BlockState state = world.getBlockState(pos); @@ -444,6 +445,7 @@ public class WorldSectionElement extends AnimatedSceneElement { } }); ModelBlockRenderer.clearCache(); + world.popLight(); world.clearMask(); return sbbBuilder.end(); diff --git a/src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java b/src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java deleted file mode 100644 index 755e42687f..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/DiffuseLightCalculator.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.simibubi.create.foundation.render; - -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraftforge.client.model.lighting.QuadLighter; - -public interface DiffuseLightCalculator { - DiffuseLightCalculator DEFAULT = DiffuseLightCalculator::diffuseLight; - DiffuseLightCalculator NETHER = DiffuseLightCalculator::diffuseLightNether; - - static DiffuseLightCalculator forLevel(ClientLevel level) { - return level.effects().constantAmbientLight() ? NETHER : DEFAULT; - } - - float getDiffuse(float normalX, float normalY, float normalZ, boolean shaded); - - static float diffuseLight(float x, float y, float z, boolean shaded) { - if (!shaded) { - return 1f; - } - return QuadLighter.calculateShade(x, y, z, false); - } - - static float diffuseLightNether(float x, float y, float z, boolean shaded) { - if (!shaded) { - return 0.9f; - } - return QuadLighter.calculateShade(x, y, z, true); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java b/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java deleted file mode 100644 index 3c94a6281f..0000000000 --- a/src/main/java/com/simibubi/create/foundation/render/ForcedDiffuseState.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.simibubi.create.foundation.render; - -import javax.annotation.Nullable; - -import it.unimi.dsi.fastutil.objects.ObjectArrayList; - -public final class ForcedDiffuseState { - private static final ThreadLocal> FORCED_DIFFUSE = ThreadLocal.withInitial(ObjectArrayList::new); - - private ForcedDiffuseState() { - } - - public static void pushCalculator(DiffuseLightCalculator calculator) { - FORCED_DIFFUSE.get().push(calculator); - } - - public static void popCalculator() { - FORCED_DIFFUSE.get().pop(); - } - - @Nullable - public static DiffuseLightCalculator getForcedCalculator() { - ObjectArrayList stack = FORCED_DIFFUSE.get(); - if (stack.isEmpty()) { - return null; - } - return stack.top(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java b/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java index 5a18d8298a..d0acb2cc3f 100644 --- a/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java @@ -1,43 +1,104 @@ package com.simibubi.create.foundation.render; import java.io.IOException; +import java.util.function.BiFunction; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.Create; +import net.minecraft.Util; import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.ShaderInstance; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceProvider; -import net.minecraft.world.inventory.InventoryMenu; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterShadersEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -// TODO 1.17: use custom shaders instead of vanilla ones public class RenderTypes extends RenderStateShard { - public static final RenderStateShard.ShaderStateShard GLOWING_SHADER = new RenderStateShard.ShaderStateShard(() -> Shaders.glowingShader); + private static final RenderType ENTITY_SOLID_BLOCK_MIPPED = RenderType.create(createLayerName("entity_solid_block_mipped"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, false, + RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_SOLID_SHADER) + .setTextureState(BLOCK_SHEET_MIPPED) + .setTransparencyState(NO_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + private static final RenderType ENTITY_CUTOUT_BLOCK_MIPPED = RenderType.create(createLayerName("entity_cutout_block_mipped"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, false, + RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_CUTOUT_SHADER) + .setTextureState(BLOCK_SHEET_MIPPED) + .setTransparencyState(NO_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + private static final RenderType ENTITY_TRANSLUCENT_BLOCK_MIPPED = RenderType.create(createLayerName("entity_translucent_block_mipped"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, + RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER) + .setTextureState(BLOCK_SHEET_MIPPED) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + private static final RenderType ADDITIVE = RenderType.create(createLayerName("additive"), DefaultVertexFormat.BLOCK, + VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_SOLID_SHADER) + .setTextureState(BLOCK_SHEET) + .setTransparencyState(ADDITIVE_TRANSPARENCY) + .setCullState(NO_CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + private static final RenderType FLUID = RenderType.create(createLayerName("fluid"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, false, true, RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER) + .setTextureState(BLOCK_SHEET_MIPPED) + .setCullState(NO_CULL) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + private static final RenderType ITEM_GLOWING_SOLID = RenderType.create(createLayerName("item_glowing_solid"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, false, RenderType.CompositeState.builder() + .setShaderState(GLOWING_SHADER) + .setTextureState(BLOCK_SHEET) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + private static final RenderType ITEM_GLOWING_TRANSLUCENT = RenderType.create(createLayerName("item_glowing_translucent"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() + .setShaderState(GLOWING_SHADER) + .setTextureState(BLOCK_SHEET) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + private static final RenderType OUTLINE_SOLID = RenderType.create(createLayerName("outline_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, false, false, RenderType.CompositeState.builder() .setShaderState(RENDERTYPE_ENTITY_SOLID_SHADER) .setTextureState(new RenderStateShard.TextureStateShard(AllSpecialTextures.BLANK.getLocation(), false, false)) - .setCullState(CULL) .setLightmapState(LIGHTMAP) .setOverlayState(OVERLAY) .createCompositeState(false)); - public static RenderType getOutlineSolid() { - return OUTLINE_SOLID; - } - - public static RenderType getOutlineTranslucent(ResourceLocation texture, boolean cull) { + private static final BiFunction OUTLINE_TRANSLUCENT = Util.memoize((texture, cull) -> { return RenderType.create(createLayerName("outline_translucent" + (cull ? "_cull" : "")), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, false, true, RenderType.CompositeState.builder() .setShaderState(cull ? RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER : RENDERTYPE_ENTITY_TRANSLUCENT_SHADER) @@ -48,96 +109,44 @@ public class RenderTypes extends RenderStateShard { .setOverlayState(OVERLAY) .setWriteMaskState(COLOR_WRITE) .createCompositeState(false)); + }); + + public static RenderType entitySolidBlockMipped() { + return ENTITY_SOLID_BLOCK_MIPPED; } - public static RenderType getGlowingSolid(ResourceLocation texture) { - return RenderType.create(createLayerName("glowing_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, - true, false, RenderType.CompositeState.builder() - .setShaderState(GLOWING_SHADER) - .setTextureState(new RenderStateShard.TextureStateShard(texture, false, false)) - .setCullState(CULL) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); + public static RenderType entityCutoutBlockMipped() { + return ENTITY_CUTOUT_BLOCK_MIPPED; } - private static final RenderType GLOWING_SOLID_DEFAULT = getGlowingSolid(InventoryMenu.BLOCK_ATLAS); - - public static RenderType getGlowingSolid() { - return GLOWING_SOLID_DEFAULT; + public static RenderType entityTranslucentBlockMipped() { + return ENTITY_TRANSLUCENT_BLOCK_MIPPED; } - public static RenderType getGlowingTranslucent(ResourceLocation texture) { - return RenderType.create(createLayerName("glowing_translucent"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, - 256, true, true, RenderType.CompositeState.builder() - .setShaderState(GLOWING_SHADER) - .setTextureState(new RenderStateShard.TextureStateShard(texture, false, false)) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); - } - - private static final RenderType ADDITIVE = RenderType.create(createLayerName("additive"), DefaultVertexFormat.BLOCK, - VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() - .setShaderState(RENDERTYPE_SOLID_SHADER) - .setTextureState(new RenderStateShard.TextureStateShard(InventoryMenu.BLOCK_ATLAS, false, false)) - .setTransparencyState(ADDITIVE_TRANSPARENCY) - .setCullState(NO_CULL) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); - - public static RenderType getAdditive() { + public static RenderType additive() { return ADDITIVE; } - private static final RenderType GLOWING_TRANSLUCENT_DEFAULT = getGlowingTranslucent(InventoryMenu.BLOCK_ATLAS); - - public static RenderType getGlowingTranslucent() { - return GLOWING_TRANSLUCENT_DEFAULT; - } - - private static final RenderType ITEM_PARTIAL_SOLID = - RenderType.create(createLayerName("item_partial_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, - false, RenderType.CompositeState.builder() - .setShaderState(RENDERTYPE_ENTITY_SOLID_SHADER) - .setTextureState(BLOCK_SHEET) - .setCullState(CULL) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); - - public static RenderType getItemPartialSolid() { - return ITEM_PARTIAL_SOLID; - } - - private static final RenderType ITEM_PARTIAL_TRANSLUCENT = RenderType.create(createLayerName("item_partial_translucent"), - DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() - .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER) - .setTextureState(BLOCK_SHEET) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); - - public static RenderType getItemPartialTranslucent() { - return ITEM_PARTIAL_TRANSLUCENT; - } - - private static final RenderType FLUID = RenderType.create(createLayerName("fluid"), - DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, false, true, RenderType.CompositeState.builder() - .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER) - .setTextureState(BLOCK_SHEET_MIPPED) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); - - public static RenderType getFluid() { + public static RenderType fluid() { return FLUID; } + public static RenderType itemGlowingSolid() { + return ITEM_GLOWING_SOLID; + } + + public static RenderType itemGlowingTranslucent() { + return ITEM_GLOWING_TRANSLUCENT; + } + + public static RenderType outlineSolid() { + return OUTLINE_SOLID; + } + + public static RenderType outlineTranslucent(ResourceLocation texture, boolean cull) { + return OUTLINE_TRANSLUCENT.apply(texture, cull); + } + private static String createLayerName(String name) { return Create.ID + ":" + name; } @@ -157,5 +166,4 @@ public class RenderTypes extends RenderStateShard { event.registerShader(new ShaderInstance(resourceProvider, Create.asResource("glowing_shader"), DefaultVertexFormat.NEW_ENTITY), shader -> glowingShader = shader); } } - } diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index c33d4a49b1..6c61512ff5 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -1,29 +1,32 @@ package com.simibubi.create.foundation.render; +import org.jetbrains.annotations.Nullable; import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Quaternionf; import org.joml.Vector3f; +import org.joml.Vector3fc; import org.joml.Vector4f; -import dev.engine_room.flywheel.lib.transform.TransformStack; -import dev.engine_room.flywheel.lib.util.ShadersModHandler; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import com.simibubi.create.foundation.mixin.accessor.RenderSystemAccessor; import com.simibubi.create.foundation.utility.Color; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.util.ShadersModHandler; import it.unimi.dsi.fastutil.longs.Long2IntMap; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.world.level.BlockAndTintGetter; public class SuperByteBuffer implements TransformStack { + private static final Long2IntMap WORLD_LIGHT_CACHE = new Long2IntOpenHashMap(); + private final TemplateMesh template; private final int[] shadeSwapVertices; @@ -31,32 +34,40 @@ public class SuperByteBuffer implements TransformStack { private final PoseStack transforms = new PoseStack(); // Vertex Coloring - private boolean shouldColor; private float r, g, b, a; - private boolean disableDiffuseMult; - private DiffuseLightCalculator diffuseCalculator; + private boolean disableDiffuse; // Vertex Texture Coords + @Nullable private SpriteShiftFunc spriteShiftFunc; - // Vertex Overlay Color - private int overlay = OverlayTexture.NO_OVERLAY; + // Vertex Overlay + private boolean hasCustomOverlay; + private int overlay; - // Vertex Lighting - private boolean useWorldLight; - private Matrix4f lightTransform; + // Vertex Light private boolean hasCustomLight; - private int packedLightCoords; - private boolean hybridLight; + private int packedLight; + private boolean useLevelLight; + @Nullable + private BlockAndTintGetter levelWithLight; + @Nullable + private Matrix4f lightTransform; - // Temporary - private static final Long2IntMap WORLD_LIGHT_CACHE = new Long2IntOpenHashMap(); + // Reused objects + private final Matrix4f modelMat = new Matrix4f(); + private final Matrix3f normalMat = new Matrix3f(); + private final Vector4f pos = new Vector4f(); + private final Vector3f normal = new Vector3f(); + private final Vector3f lightDir0 = new Vector3f(); + private final Vector3f lightDir1 = new Vector3f(); + private final ShiftOutput shiftOutput = new ShiftOutput(); + private final Vector4f lightPos = new Vector4f(); public SuperByteBuffer(TemplateMesh template, int[] shadeSwapVertices) { this.template = template; this.shadeSwapVertices = shadeSwapVertices; - - transforms.pushPose(); + reset(); } public SuperByteBuffer(TemplateMesh template) { @@ -64,56 +75,49 @@ public class SuperByteBuffer implements TransformStack { } public void renderInto(PoseStack input, VertexConsumer builder) { - if (isEmpty()) + if (isEmpty()) { return; + } - Matrix4f modelMat = new Matrix4f(input.last() + if (useLevelLight) { + WORLD_LIGHT_CACHE.clear(); + } + + Matrix4f modelMat = this.modelMat.set(input.last() .pose()); Matrix4f localTransforms = transforms.last() .pose(); modelMat.mul(localTransforms); - Matrix3f normalMat = new Matrix3f(input.last() + Matrix3f normalMat = this.normalMat.set(input.last() .normal()); Matrix3f localNormalTransforms = transforms.last() .normal(); normalMat.mul(localNormalTransforms); - if (useWorldLight) { - WORLD_LIGHT_CACHE.clear(); - } - - class ShiftOutput implements SpriteShiftFunc.Output { - public float u; - public float v; - - @Override - public void accept(float u, float v) { - this.u = u; - this.v = v; - } - }; - - final Vector4f pos = new Vector4f(); - final Vector3f normal = new Vector3f(); - final ShiftOutput shiftOutput = new ShiftOutput(); - final Vector4f lightPos = new Vector4f(); - - DiffuseLightCalculator diffuseCalculator = ForcedDiffuseState.getForcedCalculator(); - final boolean disableDiffuseMult = - this.disableDiffuseMult || (ShadersModHandler.isShaderPackInUse() && diffuseCalculator == null); - if (diffuseCalculator == null) { - diffuseCalculator = this.diffuseCalculator; - if (diffuseCalculator == null) { - diffuseCalculator = DiffuseLightCalculator.forLevel(Minecraft.getInstance().level); - } - } + Vector4f pos = this.pos; + Vector3f normal = this.normal; + ShiftOutput shiftOutput = this.shiftOutput; + Vector3f lightDir0 = this.lightDir0; + Vector3f lightDir1 = this.lightDir1; + Vector4f lightPos = this.lightPos; + boolean applyDiffuse = !disableDiffuse && !ShadersModHandler.isShaderPackInUse(); boolean shaded = true; int shadeSwapIndex = 0; int nextShadeSwapVertex = shadeSwapIndex < shadeSwapVertices.length ? shadeSwapVertices[shadeSwapIndex] : -1; + float unshadedDiffuse = 1; + if (applyDiffuse) { + lightDir0.set(RenderSystemAccessor.create$getShaderLightDirections()[0]).normalize(); + lightDir1.set(RenderSystemAccessor.create$getShaderLightDirections()[1]).normalize(); + if (shadeSwapVertices.length > 0) { + normal.set(0, 1, 0); + normal.mul(normalMat); + unshadedDiffuse = calculateDiffuse(normal, lightDir0, lightDir1); + } + } - final int vertexCount = template.vertexCount(); + int vertexCount = template.vertexCount(); for (int i = 0; i < vertexCount; i++) { if (i == nextShadeSwapVertex) { shaded = !shaded; @@ -133,27 +137,14 @@ public class SuperByteBuffer implements TransformStack { float normalZ = ((byte) ((packedNormal >>> 16) & 0xFF)) / 127.0f; normal.set(normalX, normalY, normalZ); normal.mul(normalMat); - normalX = normal.x(); - normalY = normal.y(); - normalZ = normal.z(); - float r, g, b, a; - if (shouldColor) { - r = this.r; - g = this.g; - b = this.b; - a = this.a; - } else { - int color = template.color(i); - r = (color & 0xFF) / 255.0f; - g = ((color >>> 8) & 0xFF) / 255.0f; - b = ((color >>> 16) & 0xFF) / 255.0f; - a = ((color >>> 24) & 0xFF) / 255.0f; - } - if (!disableDiffuseMult) { - // Transformed normal is in camera space, but it is needed in world space to calculate diffuse. - normal.mul(RenderSystem.getInverseViewRotationMatrix()); - float diffuse = diffuseCalculator.getDiffuse(normal.x(), normal.y(), normal.z(), shaded); + int color = template.color(i); + float r = (color & 0xFF) / 255.0f * this.r; + float g = ((color >>> 8) & 0xFF) / 255.0f * this.g; + float b = ((color >>> 16) & 0xFF) / 255.0f * this.b; + float a = ((color >>> 24) & 0xFF) / 255.0f * this.a; + if (applyDiffuse) { + float diffuse = shaded ? calculateDiffuse(normal, lightDir0, lightDir1) : unshadedDiffuse; r *= diffuse; g *= diffuse; b *= diffuse; @@ -167,28 +158,27 @@ public class SuperByteBuffer implements TransformStack { v = shiftOutput.v; } - int light; - if (useWorldLight) { + int overlay; + if (hasCustomOverlay) { + overlay = this.overlay; + } else { + overlay = template.overlay(i); + } + + int light = template.light(i); + if (hasCustomLight) { + light = maxLight(light, packedLight); + } + if (useLevelLight) { lightPos.set(((x - .5f) * 15 / 16f) + .5f, (y - .5f) * 15 / 16f + .5f, (z - .5f) * 15 / 16f + .5f, 1f); lightPos.mul(localTransforms); if (lightTransform != null) { lightPos.mul(lightTransform); } - - light = getLight(Minecraft.getInstance().level, lightPos); - if (hasCustomLight) { - light = maxLight(light, packedLightCoords); - } - } else if (hasCustomLight) { - light = packedLightCoords; - } else { - light = template.light(i); - } - if (hybridLight) { - light = maxLight(light, template.light(i)); + light = maxLight(light, getLight(levelWithLight, lightPos)); } - builder.vertex(pos.x(), pos.y(), pos.z(), r, g, b, a, u, v, overlay, light, normalX, normalY, normalZ); + builder.vertex(pos.x(), pos.y(), pos.z(), r, g, b, a, u, v, overlay, light, normal.x(), normal.y(), normal.z()); } reset(); @@ -199,20 +189,19 @@ public class SuperByteBuffer implements TransformStack { transforms.popPose(); transforms.pushPose(); - shouldColor = false; - r = 0; - g = 0; - b = 0; - a = 0; - disableDiffuseMult = false; - diffuseCalculator = null; + r = 1; + g = 1; + b = 1; + a = 1; + disableDiffuse = false; spriteShiftFunc = null; + hasCustomOverlay = false; overlay = OverlayTexture.NO_OVERLAY; - useWorldLight = false; - lightTransform = null; hasCustomLight = false; - packedLightCoords = 0; - hybridLight = false; + packedLight = 0; + useLevelLight = false; + levelWithLight = null; + lightTransform = null; return this; } @@ -271,7 +260,6 @@ public class SuperByteBuffer implements TransformStack { } public SuperByteBuffer color(float r, float g, float b, float a) { - shouldColor = true; this.r = r; this.g = g; this.b = b; @@ -293,18 +281,8 @@ public class SuperByteBuffer implements TransformStack { return color(c.getRGB()); } - /** - * Prevents vertex colors from being multiplied by the diffuse value calculated - * from the final transformed normal vector. Useful for entity rendering, when - * diffuse is applied automatically later. - */ public SuperByteBuffer disableDiffuse() { - disableDiffuseMult = true; - return this; - } - - public SuperByteBuffer diffuseCalculator(DiffuseLightCalculator diffuseCalculator) { - this.diffuseCalculator = diffuseCalculator; + disableDiffuse = true; return this; } @@ -346,40 +324,27 @@ public class SuperByteBuffer implements TransformStack { } public SuperByteBuffer overlay(int overlay) { + hasCustomOverlay = true; this.overlay = overlay; return this; } - public SuperByteBuffer light() { - useWorldLight = true; - return this; - } - - public SuperByteBuffer light(Matrix4f lightTransform) { - useWorldLight = true; - this.lightTransform = lightTransform; - return this; - } - - public SuperByteBuffer light(int packedLightCoords) { + public SuperByteBuffer light(int packedLight) { hasCustomLight = true; - this.packedLightCoords = packedLightCoords; + this.packedLight = packedLight; return this; } - public SuperByteBuffer light(Matrix4f lightTransform, int packedLightCoords) { - light(lightTransform); - light(packedLightCoords); + public SuperByteBuffer useLevelLight(BlockAndTintGetter level) { + useLevelLight = true; + levelWithLight = level; return this; } - /** - * Uses max light from calculated light (world light or custom light) and vertex - * light for the final light value. Ineffective if any other light method was - * not called. - */ - public SuperByteBuffer hybridLight() { - hybridLight = true; + public SuperByteBuffer useLevelLight(BlockAndTintGetter level, Matrix4f lightTransform) { + useLevelLight = true; + levelWithLight = level; + this.lightTransform = lightTransform; return this; } @@ -391,7 +356,14 @@ public class SuperByteBuffer implements TransformStack { return LightTexture.pack(Math.max(blockLight1, blockLight2), Math.max(skyLight1, skyLight2)); } - private static int getLight(Level world, Vector4f lightPos) { + // Adapted from minecraft:shaders/include/light.glsl + private static float calculateDiffuse(Vector3fc normal, Vector3fc lightDir0, Vector3fc lightDir1) { + float light0 = Math.max(0.0f, lightDir0.dot(normal)); + float light1 = Math.max(0.0f, lightDir1.dot(normal)); + return Math.min(1.0f, (light0 + light1) * 0.6f + 0.4f); + } + + private static int getLight(BlockAndTintGetter world, Vector4f lightPos) { BlockPos pos = BlockPos.containing(lightPos.x(), lightPos.y(), lightPos.z()); return WORLD_LIGHT_CACHE.computeIfAbsent(pos.asLong(), $ -> LevelRenderer.getLightColor(world, pos)); } @@ -405,8 +377,14 @@ public class SuperByteBuffer implements TransformStack { } } - @FunctionalInterface - public interface VertexLighter { - int getPackedLight(float x, float y, float z); - } + private class ShiftOutput implements SpriteShiftFunc.Output { + public float u; + public float v; + + @Override + public void accept(float u, float v) { + this.u = u; + this.v = v; + } + }; } diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperRenderTypeBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperRenderTypeBuffer.java index 57716c3824..0933e1c4eb 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperRenderTypeBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperRenderTypeBuffer.java @@ -79,10 +79,12 @@ public class SuperRenderTypeBuffer implements MultiBufferSource { put(map, RenderType.entityGlint()); put(map, RenderType.entityGlintDirect()); put(map, RenderType.waterMask()); - put(map, RenderTypes.getOutlineSolid()); ModelBakery.DESTROY_TYPES.forEach((p_173062_) -> { put(map, p_173062_); }); + + // extras + put(map, RenderTypes.outlineSolid()); }); private final MultiBufferSource.BufferSource bufferSource = MultiBufferSource.immediateWithBuffers(fixedBuffers, new BufferBuilder(256)); diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index 8bbf0dbc05..7b2cb55a74 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -62,9 +62,9 @@ public class VirtualRenderHelper { ShadedBlockSbbBuilder sbbBuilder = objects.sbbBuilder; sbbBuilder.begin(); - ModelData modelData = model.getModelData(VirtualEmptyBlockGetter.INSTANCE, BlockPos.ZERO, state, VIRTUAL_DATA); + ModelData modelData = model.getModelData(VirtualEmptyBlockGetter.FULL_DARK, BlockPos.ZERO, state, VIRTUAL_DATA); poseStack.pushPose(); - renderer.tesselateBlock(VirtualEmptyBlockGetter.INSTANCE, model, state, BlockPos.ZERO, poseStack, sbbBuilder, false, random, 42L, OverlayTexture.NO_OVERLAY, modelData, null); + renderer.tesselateBlock(VirtualEmptyBlockGetter.FULL_DARK, model, state, BlockPos.ZERO, poseStack, sbbBuilder, false, random, 42L, OverlayTexture.NO_OVERLAY, modelData, null); poseStack.popPose(); return sbbBuilder.end(); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index adc9a825c7..0e8cd5dda2 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -60,7 +60,7 @@ public abstract class Outline { if (lineWidth == 0) return; - VertexConsumer builder = buffer.getBuffer(RenderTypes.getOutlineSolid()); + VertexConsumer builder = buffer.getBuffer(RenderTypes.outlineSolid()); Vec3 diff = end.subtract(start); if (diff.x + diff.y + diff.z < 0) { diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index 8bfa48c302..dbea82de46 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -31,6 +31,7 @@ "accessor.GameRendererAccessor", "accessor.HumanoidArmorLayerAccessor", "accessor.ParticleEngineAccessor", + "accessor.RenderSystemAccessor", "client.BlockDestructionProgressMixin", "client.CameraMixin", "client.EntityContraptionInteractionMixin", From 05c2cbaf73684ce45df8928f36858dac5f94f988 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Thu, 18 Jul 2024 19:08:25 -0400 Subject: [PATCH 29/35] Flying the wheel away --- build.gradle | 11 +- gradle.properties | 2 +- .../harvester/HarvesterActorVisual.java | 5 - .../actors/psi/PSIActorVisual.java | 5 - .../contraptions/actors/psi/PSIVisual.java | 10 +- .../contraptions/bearing/BearingVisual.java | 8 +- .../bearing/StabilizedBearingVisual.java | 5 - .../contraptions/chassis/StickerVisual.java | 6 +- .../elevator/ElevatorPulleyVisual.java | 4 +- .../gantry/GantryCarriageVisual.java | 6 +- .../pulley/AbstractPulleyVisual.java | 13 +- .../contraptions/pulley/HosePulleyVisual.java | 4 +- .../contraptions/pulley/RopePulleyVisual.java | 4 +- .../render/ContraptionVisual.java | 67 ++-- .../equipment/armor/BacktankVisual.java | 4 +- .../equipment/toolbox/ToolBoxVisual.java | 15 +- .../fluids/pipes/valve/FluidValveVisual.java | 8 +- .../content/fluids/pump/PumpCogVisual.java | 4 +- .../kinetics/base/BackHalfShaftVisual.java | 4 +- .../kinetics/base/HalfShaftVisual.java | 4 +- .../base/HorizontalHalfShaftVisual.java | 4 +- .../base/KineticBlockEntityVisual.java | 4 +- .../kinetics/base/KineticInstance.java | 4 +- .../content/kinetics/base/ShaftVisual.java | 4 +- .../kinetics/base/SingleRotatingVisual.java | 8 +- .../kinetics/belt/BeltBlockEntity.java | 5 +- .../content/kinetics/belt/BeltVisual.java | 10 +- .../crafter/ShaftlessCogwheelVisual.java | 4 +- .../kinetics/crank/HandCrankVisual.java | 30 +- .../deployer/DeployerActorVisual.java | 5 - .../kinetics/deployer/DeployerVisual.java | 17 +- .../kinetics/drill/DrillActorVisual.java | 5 - .../content/kinetics/drill/DrillVisual.java | 4 +- .../content/kinetics/fan/FanVisual.java | 6 +- .../kinetics/flywheel/FlywheelVisual.java | 6 +- .../content/kinetics/gauge/GaugeVisual.java | 26 +- .../kinetics/gearbox/GearboxVisual.java | 9 +- .../kinetics/mechanicalArm/ArmVisual.java | 17 +- .../millstone/MillstoneCogVisual.java | 4 +- .../content/kinetics/mixer/MixerVisual.java | 15 +- .../content/kinetics/press/PressVisual.java | 15 +- .../content/kinetics/saw/SawVisual.java | 4 +- .../BracketedKineticBlockEntityVisual.java | 14 +- .../encased/EncasedCogVisual.java | 23 +- .../steamEngine/SteamEngineVisual.java | 6 +- .../transmission/SplitShaftVisual.java | 9 +- .../kinetics/waterwheel/WaterWheelVisual.java | 26 +- .../logistics/depot/EjectorVisual.java | 15 +- .../logistics/funnel/FunnelVisual.java | 9 +- .../logistics/tunnel/BeltTunnelVisual.java | 18 +- .../analogLever/AnalogLeverVisual.java | 13 +- .../redstone/diodes/BrassDiodeVisual.java | 10 +- .../cannon/SchematicannonVisual.java | 6 +- .../entity/CarriageContraptionVisual.java | 10 +- .../content/trains/track/TrackVisual.java | 30 +- .../foundation/render/AllInstanceTypes.java | 8 +- .../foundation/utility/flywheel/box/Box.java | 142 ++++++++ .../utility/flywheel/box/MutableBox.java | 329 ++++++++++++++++++ .../utility/flywheel/light/LightVolume.java | 219 ++++++++++++ 59 files changed, 948 insertions(+), 334 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java diff --git a/build.gradle b/build.gradle index c9b86a89a9..5af09b8554 100644 --- a/build.gradle +++ b/build.gradle @@ -104,10 +104,11 @@ repositories { name = "ModMaven" url = "https://modmaven.dev" }*/ - maven { - // location of the maven for Dynamic Trees - url = 'https://harleyoconnor.com/maven' - } + // Expired SSL cert, prevents building +// maven { +// // location of the maven for Dynamic Trees +// url = 'https://harleyoconnor.com/maven' +// } maven { // location of the maven for Curios API url = "https://maven.theillusivec4.top/" @@ -145,7 +146,7 @@ dependencies { jarJar("com.tterrag.registrate:Registrate:${registrate_version}") { jarJar.ranged(it, '[MC1.19.3-1.1.10,)') } - jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { + jarJar("dev.engine_room.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { jarJar.ranged(it, '[1.0,2.0)') } diff --git a/gradle.properties b/gradle.properties index c17e22e1ca..e1cf192593 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-89 +flywheel_version = 1.0.0-beta-97 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 81151d13ca..adb578b74e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -102,9 +102,4 @@ public class HarvesterActorVisual extends ActorVisual { protected double getRotation() { return AngleHelper.angleLerp(AnimationTickHolder.getPartialTicks(), previousRotation, rotation); } - - @Override - public void init(float partialTick) { - - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index 258799fbf2..1cb0e4f4ab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -32,9 +32,4 @@ public class PSIActorVisual extends ActorVisual { protected void _delete() { instance.remove(); } - - @Override - public void init(float partialTick) { - - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 2e9490fa2f..c871a8137b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -14,16 +14,12 @@ public class PSIVisual extends AbstractBlockEntityVisual e final Axis rotationAxis; final Quaternionf blockOrientation; - public BearingVisual(VisualizationContext context, B blockEntity) { - super(context, blockEntity); + public BearingVisual(VisualizationContext context, B blockEntity, float partialTick) { + super(context, blockEntity, partialTick); Direction facing = blockState.getValue(BlockStateProperties.FACING); rotationAxis = Axis.of(Direction.get(Direction.AxisDirection.POSITIVE, axis).step()); @@ -58,8 +58,8 @@ public class BearingVisual e } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos, topInstance); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 9e92a89926..e283bdb412 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -70,9 +70,4 @@ public class StabilizedBearingVisual extends ActorVisual { topInstance.delete(); shaft.delete(); } - - @Override - public void init(float partialTick) { - - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 0969bc7962..098be1b02d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -26,8 +26,8 @@ public class StickerVisual extends AbstractBlockEntityVisual private final TransformedInstance head; - public StickerVisual(VisualizationContext context, StickerBlockEntity blockEntity) { - super(context, blockEntity); + public StickerVisual(VisualizationContext context, StickerBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); head = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.STICKER_HEAD)).createInstance(); @@ -66,7 +66,7 @@ public class StickerVisual extends AbstractBlockEntityVisual } @Override - public void updateLight() { + public void updateLight(float partialTick) { relight(pos, head); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index ecd18a8b6e..be55b416a8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -8,8 +8,8 @@ import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO public class ElevatorPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { - public ElevatorPulleyVisual(VisualizationContext context, ElevatorPulleyBlockEntity blockEntity) { - super(context, blockEntity); + public ElevatorPulleyVisual(VisualizationContext context, ElevatorPulleyBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 4328d71198..767b5453a3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -31,8 +31,8 @@ public class GantryCarriageVisual extends ShaftVisual private float lastAngle = Float.NaN; - public GantryCarriageVisual(VisualizationContext context, GantryCarriageBlockEntity blockEntity) { - super(context, blockEntity); + public GantryCarriageVisual(VisualizationContext context, GantryCarriageBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); gantryCogs = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GANTRY_COGS)) .createInstance(); @@ -98,7 +98,7 @@ public class GantryCarriageVisual extends ShaftVisual } @Override - public void updateLight() { + public void updateLight(float partialTick) { relight(pos, gantryCogs, rotatingModel); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index 9538a9e774..88f41ed04e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -2,13 +2,14 @@ package com.simibubi.create.content.contraptions.pulley; import java.util.function.Consumer; +import com.simibubi.create.foundation.utility.flywheel.box.MutableBox; +import com.simibubi.create.foundation.utility.flywheel.light.LightVolume; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.box.MutableBox; import dev.engine_room.flywheel.lib.instance.OrientedInstance; -import dev.engine_room.flywheel.lib.light.LightVolume; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -34,8 +35,8 @@ public abstract class AbstractPulleyVisual extends private final MutableBox volume = new MutableBox(); private final LightVolume light; - public AbstractPulleyVisual(VisualizationContext dispatcher, T blockEntity) { - super(dispatcher, blockEntity); + public AbstractPulleyVisual(VisualizationContext dispatcher, T blockEntity, float partialTick) { + super(dispatcher, blockEntity, partialTick); rotatingAbout = Direction.get(Direction.AxisDirection.POSITIVE, axis); rotationAxis = Axis.of(rotatingAbout.step()); @@ -109,8 +110,8 @@ public abstract class AbstractPulleyVisual extends } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); light.copyLight(volume); relight(pos, coil); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index cb048089c6..e295bd3bce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -10,8 +10,8 @@ import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; public class HosePulleyVisual extends AbstractPulleyVisual { - public HosePulleyVisual(VisualizationContext dispatcher, HosePulleyBlockEntity blockEntity) { - super(dispatcher, blockEntity); + public HosePulleyVisual(VisualizationContext dispatcher, HosePulleyBlockEntity blockEntity, float partialTick) { + super(dispatcher, blockEntity, partialTick); } protected Instancer getRopeModel() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index 606fc50067..f18ed5223a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -11,8 +11,8 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.render.VirtualRenderHelper; public class RopePulleyVisual extends AbstractPulleyVisual { - public RopePulleyVisual(VisualizationContext context, PulleyBlockEntity blockEntity) { - super(context, blockEntity); + public RopePulleyVisual(VisualizationContext context, PulleyBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } protected Instancer getRopeModel() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index 8286b84eac..d31560822e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -2,7 +2,12 @@ package com.simibubi.create.content.contraptions.render; import java.util.ArrayList; import java.util.List; -import java.util.function.LongConsumer; + +import dev.engine_room.flywheel.api.visual.LightUpdatedVisual; + +import dev.engine_room.flywheel.api.visual.ShaderLightVisual; +import it.unimi.dsi.fastutil.longs.LongArraySet; +import it.unimi.dsi.fastutil.longs.LongSet; import org.apache.commons.lang3.tuple.MutablePair; @@ -10,7 +15,6 @@ import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.task.Plan; import dev.engine_room.flywheel.api.visual.BlockEntityVisual; import dev.engine_room.flywheel.api.visual.DynamicVisual; -import dev.engine_room.flywheel.api.visual.LitVisual; import dev.engine_room.flywheel.api.visual.TickableVisual; import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; import dev.engine_room.flywheel.api.visualization.VisualEmbedding; @@ -44,7 +48,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraftforge.client.model.data.ModelData; -public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LitVisual { +public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LightUpdatedVisual, ShaderLightVisual { protected static final int LIGHT_PADDING = 1; protected final VisualEmbedding embedding; @@ -55,18 +59,19 @@ public class ContraptionVisual extends Abst protected VirtualRenderWorld virtualRenderWorld; protected Model model; protected TransformedInstance structure; - protected Notifier notifier; + protected SectionCollector sectionCollector; protected long minSection, maxSection; protected long minBlock, maxBlock; private final PoseStack contraptionMatrix = new PoseStack(); - public ContraptionVisual(VisualizationContext ctx, E entity) { - super(ctx, entity); + public ContraptionVisual(VisualizationContext ctx, E entity, float partialTick) { + super(ctx, entity, partialTick); embedding = ctx.createEmbedding(); + + init(partialTick); } - @Override public void init(float partialTick) { setEmbeddingMatrices(partialTick); @@ -97,7 +102,7 @@ public class ContraptionVisual extends Abst setupActor(actor, partialTick); } - updateLight(); + updateLight(partialTick); } @SuppressWarnings("unchecked") @@ -107,11 +112,9 @@ public class ContraptionVisual extends Abst return; } - Level world = be.getLevel(); + Level level = be.getLevel(); be.setLevel(virtualRenderWorld); - BlockEntityVisual visual = visualizer.createVisual(this.embedding, be); - - visual.init(partialTicks); + BlockEntityVisual visual = visualizer.createVisual(this.embedding, be, partialTicks); children.add(visual); @@ -123,7 +126,7 @@ public class ContraptionVisual extends Abst tickableVisuals.add(tickable, tickable.planTick()); } - be.setLevel(world); + be.setLevel(level); } private void setupActor(MutablePair actor, float partialTick) { @@ -147,8 +150,6 @@ public class ContraptionVisual extends Abst return; } - visual.init(partialTick); - actors.add(visual); } @@ -174,14 +175,14 @@ public class ContraptionVisual extends Abst setEmbeddingMatrices(partialTick); if (hasMovedSections()) { - notifier.notifySectionsChanged(); + sectionCollector.sections(collectLightSections()); } if (hasMovedBlocks()) { // TODO: incremental light collection // TODO: optimize light collection for very large contraptions // by only collecting cuboids that contain faces - updateLight(); + updateLight(partialTick); } } @@ -198,27 +199,11 @@ public class ContraptionVisual extends Abst } @Override - public void updateLight() { - embedding.invalidateLight(); - // FIXME: Some blocks (e.g. large waterwheels) extend well beyond their actual block - // and might have lighting issues here - var boundingBox = entity.getBoundingBox(); - - int minX = minLight(boundingBox.minX); - int minY = minLight(boundingBox.minY); - int minZ = minLight(boundingBox.minZ); - int maxX = maxLight(boundingBox.maxX); - int maxY = maxLight(boundingBox.maxY); - int maxZ = maxLight(boundingBox.maxZ); - - minBlock = BlockPos.asLong(minX, minY, minZ); - maxBlock = BlockPos.asLong(maxX, maxY, maxZ); - - embedding.collectLight(level, minX, minY, minZ, maxX - minX, maxY - minY, maxZ - minZ); + public void updateLight(float partialTick) { + super.update(partialTick); } - @Override - public void collectLightSections(LongConsumer consumer) { + public LongSet collectLightSections() { var boundingBox = entity.getBoundingBox(); var minSectionX = minLightSection(boundingBox.minX); @@ -231,13 +216,17 @@ public class ContraptionVisual extends Abst minSection = SectionPos.asLong(minSectionX, minSectionY, minSectionZ); maxSection = SectionPos.asLong(maxSectionX, maxSectionY, maxSectionZ); + LongSet longSet = new LongArraySet(); + for (int x = 0; x <= maxSectionX - minSectionX; x++) { for (int y = 0; y <= maxSectionY - minSectionY; y++) { for (int z = 0; z <= maxSectionZ - minSectionZ; z++) { - consumer.accept(SectionPos.offset(minSection, x, y, z)); + longSet.add(SectionPos.offset(minSection, x, y, z)); } } } + + return longSet; } protected boolean hasMovedBlocks() { @@ -267,8 +256,8 @@ public class ContraptionVisual extends Abst } @Override - public void initLightSectionNotifier(Notifier notifier) { - this.notifier = notifier; + public void setSectionCollector(SectionCollector collector) { + this.sectionCollector = collector; } @Override diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java index d27487a862..f651169707 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java @@ -7,8 +7,8 @@ import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; public class BacktankVisual extends SingleRotatingVisual { - public BacktankVisual(VisualizationContext context, BacktankBlockEntity blockEntity) { - super(context, blockEntity); + public BacktankVisual(VisualizationContext context, BacktankBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 1220d09c0d..d4d62ab4aa 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -19,25 +19,20 @@ import net.minecraft.core.Direction; public class ToolBoxVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final Direction facing; - private TransformedInstance lid; - private TransformedInstance[] drawers; + private final TransformedInstance lid; + private final TransformedInstance[] drawers; - public ToolBoxVisual(VisualizationContext context, ToolboxBlockEntity blockEntity) { - super(context, blockEntity); + public ToolBoxVisual(VisualizationContext context, ToolboxBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); facing = blockState.getValue(ToolboxBlock.FACING) .getOpposite(); - } - @Override - public void init(float pt) { Instancer drawerModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_DRAWER)); drawers = new TransformedInstance[]{drawerModel.createInstance(), drawerModel.createInstance()}; lid = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor()))) .createInstance(); - - super.init(pt); } @Override @@ -78,7 +73,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual } @Override - public void updateLight() { + public void updateLight(float partialTick) { relight(pos, drawers); relight(pos, lid); } diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 2e57541ce2..3763824b13 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -26,8 +26,8 @@ public class FluidValveVisual extends ShaftVisual impleme protected final double yRot; protected final int pointerRotationOffset; - public FluidValveVisual(VisualizationContext dispatcher, FluidValveBlockEntity blockEntity) { - super(dispatcher, blockEntity); + public FluidValveVisual(VisualizationContext dispatcher, FluidValveBlockEntity blockEntity, float partialTick) { + super(dispatcher, blockEntity, partialTick); Direction facing = blockState.getValue(FluidValveBlock.FACING); @@ -75,8 +75,8 @@ public class FluidValveVisual extends ShaftVisual impleme } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos, pointer); } diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index 7dce277286..352df4be0b 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class PumpCogVisual extends SingleRotatingVisual { - public PumpCogVisual(VisualizationContext context, PumpBlockEntity blockEntity) { - super(context, blockEntity); + public PumpCogVisual(VisualizationContext context, PumpBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java index 4f04744ac7..74c748fef6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java @@ -6,8 +6,8 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class BackHalfShaftVisual extends HalfShaftVisual { - public BackHalfShaftVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); + public BackHalfShaftVisual(VisualizationContext context, T blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java index 61b5dc887d..f1d70425b5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java @@ -9,8 +9,8 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class HalfShaftVisual extends SingleRotatingVisual { - public HalfShaftVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); + public HalfShaftVisual(VisualizationContext context, T blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java index 1ef78ce730..80b76c8c77 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java @@ -7,8 +7,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class HorizontalHalfShaftVisual extends HalfShaftVisual { - public HorizontalHalfShaftVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); + public HorizontalHalfShaftVisual(VisualizationContext context, T blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java index b98f828e46..388d188f8b 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java @@ -14,8 +14,8 @@ public abstract class KineticBlockEntityVisual ext protected final Direction.Axis axis; - public KineticBlockEntityVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); + public KineticBlockEntityVisual(VisualizationContext context, T blockEntity, float partialTick) { + super(context, blockEntity, partialTick); axis = (blockState.getBlock() instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java index 755395786b..7d01abaf9e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java @@ -46,13 +46,13 @@ public class KineticInstance extends ColoredLitInstance { if (blockEntity.hasNetwork()) { setColor(Color.generateFromLong(blockEntity.network)); }else { - setColor(0xFF, 0xFF, 0xFF); + color(0xFF, 0xFF, 0xFF); } return this; } public KineticInstance setColor(Color c) { - setColor(c.getRed(), c.getGreen(), c.getBlue()); + color(c.getRed(), c.getGreen(), c.getBlue()); return this; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java index 1ee8ca5f98..5d7cd588bf 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java @@ -6,8 +6,8 @@ import com.simibubi.create.foundation.render.VirtualRenderHelper; public class ShaftVisual extends SingleRotatingVisual { - public ShaftVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); + public ShaftVisual(VisualizationContext context, T blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index 4e41dcd5e7..9a032359f9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -13,16 +13,14 @@ public class SingleRotatingVisual extends KineticB protected RotatingInstance rotatingModel; - public SingleRotatingVisual(VisualizationContext context, T blockEntity) { - super(context, blockEntity); + public SingleRotatingVisual(VisualizationContext context, T blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } - @Override public void init(float pt) { rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model()) .createInstance(); setup(rotatingModel); - super.init(pt); } @Override @@ -31,7 +29,7 @@ public class SingleRotatingVisual extends KineticB } @Override - public void updateLight() { + public void updateLight(float partialTick) { relight(pos, rotatingModel); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java index 57cf08fa95..2746bebd63 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java @@ -12,8 +12,6 @@ import java.util.Map; import java.util.Optional; import java.util.function.Function; -import dev.engine_room.flywheel.lib.box.Box; -import dev.engine_room.flywheel.lib.box.MutableBox; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -30,6 +28,9 @@ import com.simibubi.create.content.logistics.tunnel.BrassTunnelBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.flywheel.box.Box; +import com.simibubi.create.foundation.utility.flywheel.box.MutableBox; + import net.minecraft.client.renderer.LightTexture; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 1d7d930f60..eb82bc8803 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -3,6 +3,8 @@ package com.simibubi.create.content.kinetics.belt; import java.util.ArrayList; import java.util.function.Consumer; +import dev.engine_room.flywheel.lib.instance.FlatLit; + import org.joml.Quaternionf; import dev.engine_room.flywheel.api.instance.Instance; @@ -38,8 +40,8 @@ public class BeltVisual extends KineticBlockEntityVisual { protected ArrayList keys; protected RotatingInstance pulleyKey; - public BeltVisual(VisualizationContext context, BeltBlockEntity blockEntity) { - super(context, blockEntity); + public BeltVisual(VisualizationContext context, BeltBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); if (!AllBlocks.BELT.has(blockState)) return; @@ -99,8 +101,8 @@ public class BeltVisual extends KineticBlockEntityVisual { } @Override - public void updateLight() { - relight(pos, keys.stream()); + public void updateLight(float partialTick) { + relight(pos, keys.toArray(FlatLit[]::new)); if (pulleyKey != null) relight(pos, pulleyKey); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java index 7e2aa99d16..f5db9293d9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java @@ -13,8 +13,8 @@ import net.minecraft.core.Direction; public class ShaftlessCogwheelVisual extends SingleRotatingVisual { - public ShaftlessCogwheelVisual(VisualizationContext context, KineticBlockEntity blockEntity) { - super(context, blockEntity); + public ShaftlessCogwheelVisual(VisualizationContext context, KineticBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index e5549c9e64..4a458de179 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -16,15 +16,22 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class HandCrankVisual extends SingleRotatingVisual implements SimpleDynamicVisual { - private TransformedInstance crank; - private Direction facing; + private final TransformedInstance crank; + private final Direction facing; - public HandCrankVisual(VisualizationContext modelManager, HandCrankBlockEntity blockEntity) { - super(modelManager, blockEntity); + public HandCrankVisual(VisualizationContext modelManager, HandCrankBlockEntity blockEntity, float partialTick) { + super(modelManager, blockEntity, partialTick); facing = blockState.getValue(BlockStateProperties.FACING); Model model = blockEntity.getRenderedHandleInstance(); crank = instancerProvider.instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); + + rotateCrank(partialTick); + + if (blockEntity.shouldRenderShaft()) + setup(rotatingModel); + + updateLight(partialTick); } @Override @@ -47,17 +54,6 @@ public class HandCrankVisual extends SingleRotatingVisual .setChanged(); } - @Override - public void init(float pt) { - rotateCrank(pt); - - // FIXME: need to call super.super.init here - if (blockEntity.shouldRenderShaft()) - super.init(pt); - - updateLight(); - } - @Override protected void _delete() { if (blockEntity.shouldRenderShaft()) @@ -73,9 +69,9 @@ public class HandCrankVisual extends SingleRotatingVisual } @Override - public void updateLight() { + public void updateLight(float partialTick) { if (blockEntity.shouldRenderShaft()) - super.updateLight(); + super.updateLight(partialTick); if (crank != null) relight(pos, crank); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index 0ce7ad3b1f..88e1f03ec0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -124,9 +124,4 @@ public class DeployerActorVisual extends ActorVisual { hand.delete(); shaft.delete(); } - - @Override - public void init(float partialTick) { - - } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 3e5afc77ec..001d28d96a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -41,8 +41,8 @@ public class DeployerVisual extends ShaftVisual implements PartialModel currentHand; float progress; - public DeployerVisual(VisualizationContext context, DeployerBlockEntity blockEntity) { - super(context, blockEntity); + public DeployerVisual(VisualizationContext context, DeployerBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); facing = blockState.getValue(FACING); @@ -57,16 +57,11 @@ public class DeployerVisual extends ShaftVisual implements currentHand = this.blockEntity.getHandPose(); hand = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)).createInstance(); - } - @Override - public void init(float pt) { - progress = getProgress(pt); + progress = getProgress(partialTick); updateRotation(pole, hand, yRot, xRot, zRot); updatePosition(); - - super.init(pt); - } + } @Override public void tick(TickableVisual.Context context) { @@ -91,8 +86,8 @@ public class DeployerVisual extends ShaftVisual implements } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos, hand, pole); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index 4912fe5fbc..f42444f5e9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -66,9 +66,4 @@ public class DrillActorVisual extends ActorVisual { protected void _delete() { drillHead.delete(); } - - @Override - public void init(float partialTick) { - - } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java index 5f20113e58..c3fde3d4e1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java @@ -11,8 +11,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class DrillVisual extends SingleRotatingVisual { - public DrillVisual(VisualizationContext context, DrillBlockEntity blockEntity) { - super(context, blockEntity); + public DrillVisual(VisualizationContext context, DrillBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java index 4a9fc526cb..ec6c782cb2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java @@ -23,8 +23,8 @@ public class FanVisual extends KineticBlockEntityVisual { final Direction direction; private final Direction opposite; - public FanVisual(VisualizationContext context, EncasedFanBlockEntity blockEntity) { - super(context, blockEntity); + public FanVisual(VisualizationContext context, EncasedFanBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); direction = blockState.getValue(FACING); @@ -53,7 +53,7 @@ public class FanVisual extends KineticBlockEntityVisual { } @Override - public void updateLight() { + public void updateLight(float partialTick) { BlockPos behind = pos.relative(opposite); relight(behind, shaft); diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index f712eda486..0f7d332c53 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -24,8 +24,8 @@ public class FlywheelVisual extends KineticBlockEntityVisual implemen protected final PoseStack ms = new PoseStack(); - protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity) { - super(context, blockEntity); + protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); + + init(partialTick); } - @Override - public void init(float pt) { + public void init(float partialTick) { GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); @@ -54,8 +56,6 @@ public abstract class GaugeVisual extends ShaftVisual implemen face.setupTransform(msr, progress); } - - super.init(pt); } private DialFace makeFace(Direction face, Instancer dialModel, Instancer headModel) { @@ -77,11 +77,11 @@ public abstract class GaugeVisual extends ShaftVisual implemen } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos, faces.stream() - .flatMap(Couple::stream)); + .flatMap(Couple::stream).toArray(FlatLit[]::new)); } @Override @@ -155,8 +155,8 @@ public abstract class GaugeVisual extends ShaftVisual implemen } public static class Speed extends GaugeVisual { - public Speed(VisualizationContext context, GaugeBlockEntity blockEntity) { - super(context, blockEntity); + public Speed(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override @@ -166,8 +166,8 @@ public abstract class GaugeVisual extends ShaftVisual implemen } public static class Stress extends GaugeVisual { - public Stress(VisualizationContext context, GaugeBlockEntity blockEntity) { - super(context, blockEntity); + public Stress(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index e37c03321c..be8dfa0adf 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -7,6 +7,7 @@ import java.util.function.Consumer; import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; @@ -24,8 +25,8 @@ public class GearboxVisual extends KineticBlockEntityVisual protected final EnumMap keys; protected Direction sourceFacing; - public GearboxVisual(VisualizationContext context, GearboxBlockEntity blockEntity) { - super(context, blockEntity); + public GearboxVisual(VisualizationContext context, GearboxBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); keys = new EnumMap<>(Direction.class); @@ -87,8 +88,8 @@ public class GearboxVisual extends KineticBlockEntityVisual } @Override - public void updateLight() { - relight(pos, keys.values().stream()); + public void updateLight(float partialTick) { + relight(pos, keys.values().toArray(FlatLit[]::new)); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index f46e67ed83..e76c624933 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -9,6 +9,7 @@ import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; @@ -45,8 +46,8 @@ public class ArmVisual extends SingleRotatingVisual implements S private float upperArmAngle = Float.NaN; private float headAngle = Float.NaN; - public ArmVisual(VisualizationContext context, ArmBlockEntity blockEntity) { - super(context, blockEntity); + public ArmVisual(VisualizationContext context, ArmBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); base = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE)) .createInstance(); @@ -131,12 +132,12 @@ public class ArmVisual extends SingleRotatingVisual implements S ArmRenderer.transformLowerArm(msr, lowerArmAngle); lowerBody.setTransform(msLocal) - .setColor(color) + .color(color) .setChanged(); ArmRenderer.transformUpperArm(msr, upperArmAngle); upperBody.setTransform(msLocal) - .setColor(color) + .color(color) .setChanged(); ArmRenderer.transformHead(msr, headAngle); @@ -177,15 +178,15 @@ public class ArmVisual extends SingleRotatingVisual implements S claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) .createInstance(); models.add(claw); - updateLight(); + updateLight(pt); animateArm(); } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); - relight(pos, models.stream()); + relight(pos, models.toArray(FlatLit[]::new)); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java index 257fd5a061..f934bf5e22 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java @@ -8,8 +8,8 @@ import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; public class MillstoneCogVisual extends SingleRotatingVisual { - public MillstoneCogVisual(VisualizationContext context, MillstoneBlockEntity blockEntity) { - super(context, blockEntity); + public MillstoneCogVisual(VisualizationContext context, MillstoneBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 23b82a52d6..5305f20019 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -23,8 +23,8 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual private final OrientedInstance mixerPole; private final MechanicalMixerBlockEntity mixer; - public MixerVisual(VisualizationContext context, MechanicalMixerBlockEntity blockEntity) { - super(context, blockEntity, false); + public MixerVisual(VisualizationContext context, MechanicalMixerBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, false, partialTick); this.mixer = blockEntity; mixerHead = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.MECHANICAL_MIXER_HEAD)) @@ -34,13 +34,8 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual mixerPole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_MIXER_POLE)) .createInstance(); - } - @Override - public void init(float pt) { - super.init(pt); - - animate(pt); + animate(partialTick); } @Override @@ -76,8 +71,8 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos.below(), mixerHead); relight(pos, mixerPole); diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index c9aff6fa4d..91adb2a237 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -20,8 +20,8 @@ public class PressVisual extends ShaftVisual impleme private final OrientedInstance pressHead; - public PressVisual(VisualizationContext context, MechanicalPressBlockEntity blockEntity) { - super(context, blockEntity); + public PressVisual(VisualizationContext context, MechanicalPressBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); pressHead = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD)) .createInstance(); @@ -30,13 +30,8 @@ public class PressVisual extends ShaftVisual impleme .rotationDegrees(AngleHelper.horizontalAngle(blockState.getValue(MechanicalPressBlock.HORIZONTAL_FACING))); pressHead.setRotation(q); - } - @Override - public void init(float pt) { - super.init(pt); - - transformModels(pt); + transformModels(partialTick); } @Override @@ -59,8 +54,8 @@ public class PressVisual extends ShaftVisual impleme } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos, pressHead); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java index ec84c8bef4..418e619fc6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java @@ -14,8 +14,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class SawVisual extends SingleRotatingVisual { - public SawVisual(VisualizationContext context, SawBlockEntity blockEntity) { - super(context, blockEntity); + public SawVisual(VisualizationContext context, SawBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 7fb944dd69..62fb81b063 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -24,12 +24,13 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual { - private boolean large; + private final boolean large; protected RotatingInstance rotatingModel; protected Optional rotatingTopShaft; protected Optional rotatingBottomShaft; - public static EncasedCogVisual small(VisualizationContext modelManager, KineticBlockEntity blockEntity) { - return new EncasedCogVisual(modelManager, blockEntity, false); + public static EncasedCogVisual small(VisualizationContext modelManager, KineticBlockEntity blockEntity, float partialTick) { + return new EncasedCogVisual(modelManager, blockEntity, false, partialTick); } - public static EncasedCogVisual large(VisualizationContext modelManager, KineticBlockEntity blockEntity) { - return new EncasedCogVisual(modelManager, blockEntity, true); + public static EncasedCogVisual large(VisualizationContext modelManager, KineticBlockEntity blockEntity, float partialTick) { + return new EncasedCogVisual(modelManager, blockEntity, true, partialTick); } - public EncasedCogVisual(VisualizationContext modelManager, KineticBlockEntity blockEntity, boolean large) { - super(modelManager, blockEntity); + public EncasedCogVisual(VisualizationContext modelManager, KineticBlockEntity blockEntity, boolean large, float partialTick) { + super(modelManager, blockEntity, partialTick); this.large = large; + + init(partialTick); } - @Override - public void init(float pt) { + public void init(float partialTick) { var instancer = instancerProvider.instancer(AllInstanceTypes.ROTATING, getCogModel()); rotatingModel = setup(instancer.createInstance()); @@ -72,8 +73,6 @@ public class EncasedCogVisual extends KineticBlockEntityVisual relight(pos, d)); rotatingBottomShaft.ifPresent(d -> relight(pos, d)); diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index 84056e422d..bb36fefea5 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -24,8 +24,8 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual keys; - public SplitShaftVisual(VisualizationContext modelManager, SplitShaftBlockEntity blockEntity) { - super(modelManager, blockEntity); + public SplitShaftVisual(VisualizationContext modelManager, SplitShaftBlockEntity blockEntity, float partialTick) { + super(modelManager, blockEntity, partialTick); keys = new ArrayList<>(2); @@ -52,8 +53,8 @@ public class SplitShaftVisual extends KineticBlockEntityVisual extends KineticBl protected BlockState lastMaterial; protected RotatingInstance rotatingModel; - public WaterWheelVisual(VisualizationContext context, T blockEntity, boolean large) { - super(context, blockEntity); + public WaterWheelVisual(VisualizationContext context, T blockEntity, boolean large, float partialTick) { + super(context, blockEntity, partialTick); this.large = large; - } - public static WaterWheelVisual standard(VisualizationContext context, T blockEntity) { - return new WaterWheelVisual<>(context, blockEntity, false); - } - - public static WaterWheelVisual large(VisualizationContext context, T blockEntity) { - return new WaterWheelVisual<>(context, blockEntity, true); - } - - @Override - public void init(float pt) { setupInstance(); - super.init(pt); + } + + public static WaterWheelVisual standard(VisualizationContext context, T blockEntity, float partialTick) { + return new WaterWheelVisual<>(context, blockEntity, false, partialTick); + } + + public static WaterWheelVisual large(VisualizationContext context, T blockEntity, float partialTick) { + return new WaterWheelVisual<>(context, blockEntity, true, partialTick); } private void setupInstance() { @@ -62,7 +58,7 @@ public class WaterWheelVisual extends KineticBl } @Override - public void updateLight() { + public void updateLight(float partialTick) { relight(pos, rotatingModel); } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index 27c762e8b4..27c2aaeef9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -18,17 +18,12 @@ public class EjectorVisual extends ShaftVisual implements Si private float lastProgress = Float.NaN; - public EjectorVisual(VisualizationContext dispatcher, EjectorBlockEntity blockEntity) { - super(dispatcher, blockEntity); + public EjectorVisual(VisualizationContext dispatcher, EjectorBlockEntity blockEntity, float partialTick) { + super(dispatcher, blockEntity, partialTick); plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP)).createInstance(); - } - @Override - public void init(float pt) { - pivotPlate(getLidProgress(pt)); - - super.init(pt); + pivotPlate(getLidProgress(partialTick)); } @Override @@ -44,8 +39,8 @@ public class EjectorVisual extends ShaftVisual implements Si } @Override - public void updateLight() { - super.updateLight(); + public void updateLight(float partialTick) { + super.updateLight(partialTick); relight(pos, plate); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index cf67251b18..9cebffcfca 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -8,6 +8,7 @@ import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.model.baked.PartialModel; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; @@ -24,8 +25,8 @@ public class FunnelVisual extends AbstractBlockEntityVisual i private final ArrayList flaps; - public FunnelVisual(VisualizationContext context, FunnelBlockEntity blockEntity) { - super(context, blockEntity); + public FunnelVisual(VisualizationContext context, FunnelBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); flaps = new ArrayList<>(4); @@ -76,9 +77,9 @@ public class FunnelVisual extends AbstractBlockEntityVisual i } @Override - public void updateLight() { + public void updateLight(float partialTick) { if (flaps != null) - relight(pos, flaps.stream()); + relight(pos, flaps.toArray(FlatLit[]::new)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 5690edf67a..452a1d6696 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -11,6 +11,7 @@ import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; @@ -26,8 +27,10 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual> tunnelFlaps = new EnumMap<>(Direction.class); - public BeltTunnelVisual(VisualizationContext context, BeltTunnelBlockEntity blockEntity) { - super(context, blockEntity); + public BeltTunnelVisual(VisualizationContext context, BeltTunnelBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); + + setupFlaps(partialTick); } private void setupFlaps(float partialTick) { @@ -69,13 +72,6 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual bogeys; private Couple bogeyHidden; - public CarriageContraptionVisual(VisualizationContext context, CarriageContraptionEntity entity) { - super(context, entity); + public CarriageContraptionVisual(VisualizationContext context, CarriageContraptionEntity entity, float partialTick) { + super(context, entity, partialTick); bogeyHidden = Couple.create(() -> false); entity.bindInstance(this); } @@ -33,7 +33,7 @@ public class CarriageContraptionVisual extends ContraptionVisual bogey.getStyle() .createVisual(bogey, bogey.type.getSize(), manager), visualizationContext); - updateLight(); + updateLight(pt); } super.init(pt); @@ -86,8 +86,8 @@ public class CarriageContraptionVisual extends ContraptionVisual { - private List visuals; + private final List visuals; - public TrackVisual(VisualizationContext context, TrackBlockEntity track) { - super(context, track); - } + public TrackVisual(VisualizationContext context, TrackBlockEntity track, float partialTick) { + super(context, track, partialTick); - @Override - public void init(float partialTick) { visuals = blockEntity.connections.values() .stream() .map(this::createInstance) .filter(Objects::nonNull) .toList(); - - super.init(partialTick); } @Override @@ -53,12 +51,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { return; _delete(); - init(pt); - notifier.notifySectionsChanged(); + lightSections.sections(collectLightSections()); } @Override - public void updateLight() { + public void updateLight(float partialTick) { if (visuals == null) return; visuals.forEach(BezierTrackVisual::updateLight); @@ -78,10 +75,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { visuals.forEach(BezierTrackVisual::delete); } - @Override - public void collectLightSections(LongConsumer consumer) { + public LongSet collectLightSections() { + LongSet longSet = new LongArraySet(); + if (blockEntity.connections.isEmpty()) { - return; + return LongSet.of(); } int minX = Integer.MAX_VALUE; int minY = Integer.MAX_VALUE; @@ -99,7 +97,9 @@ public class TrackVisual extends AbstractBlockEntityVisual { } SectionPos.betweenClosedStream(SectionPos.blockToSectionCoord(minX), SectionPos.blockToSectionCoord(minY), SectionPos.blockToSectionCoord(minZ), SectionPos.blockToSectionCoord(maxX), SectionPos.blockToSectionCoord(maxY), SectionPos.blockToSectionCoord(maxZ)) .mapToLong(SectionPos::asLong) - .forEach(consumer); + .forEach(longSet::add); + + return longSet; } @Override diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index c11828e17c..9d0fa86978 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -36,8 +36,8 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, (short) (instance.packedLight & 0xFFFF)); - MemoryUtil.memPutShort(ptr + 6, (short) (instance.packedLight >> 16 & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 4, (short) (instance.light & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 6, (short) (instance.light >> 16 & 0xFFFF)); MemoryUtil.memPutInt(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); MemoryUtil.memPutFloat(ptr + 16, instance.y); @@ -70,8 +70,8 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, (short) (instance.packedLight & 0xFFFF)); - MemoryUtil.memPutShort(ptr + 6, (short) (instance.packedLight >> 16 & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 4, (short) (instance.light & 0xFFFF)); + MemoryUtil.memPutShort(ptr + 6, (short) (instance.light >> 16 & 0xFFFF)); MemoryUtil.memPutInt(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); MemoryUtil.memPutFloat(ptr + 16, instance.y); diff --git a/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java b/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java new file mode 100644 index 0000000000..2259c5f73d --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java @@ -0,0 +1,142 @@ +package com.simibubi.create.foundation.utility.flywheel.box; + +import net.minecraft.util.Mth; +import net.minecraft.world.phys.AABB; + +public interface Box { + int getMinX(); + + int getMinY(); + + int getMinZ(); + + int getMaxX(); + + int getMaxY(); + + int getMaxZ(); + + default int sizeX() { + return getMaxX() - getMinX(); + } + + default int sizeY() { + return getMaxY() - getMinY(); + } + + default int sizeZ() { + return getMaxZ() - getMinZ(); + } + + default int volume() { + return sizeX() * sizeY() * sizeZ(); + } + + default boolean isEmpty() { + // if any dimension has side length 0 this box contains no volume + return getMinX() == getMaxX() || getMinY() == getMaxY() || getMinZ() == getMaxZ(); + } + + default boolean sameAs(Box other) { + return getMinX() == other.getMinX() && getMinY() == other.getMinY() && getMinZ() == other.getMinZ() && getMaxX() == other.getMaxX() && getMaxY() == other.getMaxY() && getMaxZ() == other.getMaxZ(); + } + + default boolean sameAs(Box other, int margin) { + return getMinX() == other.getMinX() - margin && + getMinY() == other.getMinY() - margin && + getMinZ() == other.getMinZ() - margin && + getMaxX() == other.getMaxX() + margin && + getMaxY() == other.getMaxY() + margin && + getMaxZ() == other.getMaxZ() + margin; + } + + default boolean sameAs(AABB other) { + return getMinX() == Math.floor(other.minX) + && getMinY() == Math.floor(other.minY) + && getMinZ() == Math.floor(other.minZ) + && getMaxX() == Math.ceil(other.maxX) + && getMaxY() == Math.ceil(other.maxY) + && getMaxZ() == Math.ceil(other.maxZ); + } + + default boolean intersects(int minX, int minY, int minZ, int maxX, int maxY, int maxZ) { + return this.getMinX() < maxX && this.getMaxX() > minX && this.getMinY() < maxY && this.getMaxY() > minY && this.getMinZ() < maxZ && this.getMaxZ() > minZ; + } + + default boolean intersects(Box other) { + return this.intersects(other.getMinX(), other.getMinY(), other.getMinZ(), other.getMaxX(), other.getMaxY(), other.getMaxZ()); + } + + default boolean contains(int x, int y, int z) { + return x >= getMinX() + && x <= getMaxX() + && y >= getMinY() + && y <= getMaxY() + && z >= getMinZ() + && z <= getMaxZ(); + } + + default boolean contains(Box other) { + return other.getMinX() >= this.getMinX() + && other.getMaxX() <= this.getMaxX() + && other.getMinY() >= this.getMinY() + && other.getMaxY() <= this.getMaxY() + && other.getMinZ() >= this.getMinZ() + && other.getMaxZ() <= this.getMaxZ(); + } + + default void forEachContained(CoordinateConsumer func) { + int minX = getMinX(); + int minY = getMinY(); + int minZ = getMinZ(); + int maxX = getMaxX(); + int maxY = getMaxY(); + int maxZ = getMaxZ(); + + for (int x = minX; x < maxX; x++) { + for (int y = minY; y < maxY; y++) { + for (int z = minZ; z < maxZ; z++) { + func.accept(x, y, z); + } + } + } + } + + default boolean hasPowerOf2Sides() { + // this is only true if all individual side lengths are powers of 2 + return Mth.isPowerOfTwo(volume()); + } + + default MutableBox union(Box other) { + int minX = Math.min(this.getMinX(), other.getMinX()); + int minY = Math.min(this.getMinY(), other.getMinY()); + int minZ = Math.min(this.getMinZ(), other.getMinZ()); + int maxX = Math.max(this.getMaxX(), other.getMaxX()); + int maxY = Math.max(this.getMaxY(), other.getMaxY()); + int maxZ = Math.max(this.getMaxZ(), other.getMaxZ()); + return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); + } + + default MutableBox intersect(Box other) { + int minX = Math.max(this.getMinX(), other.getMinX()); + int minY = Math.max(this.getMinY(), other.getMinY()); + int minZ = Math.max(this.getMinZ(), other.getMinZ()); + int maxX = Math.min(this.getMaxX(), other.getMaxX()); + int maxY = Math.min(this.getMaxY(), other.getMaxY()); + int maxZ = Math.min(this.getMaxZ(), other.getMaxZ()); + return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); + } + + default AABB toAABB() { + return new AABB(getMinX(), getMinY(), getMinZ(), getMaxX(), getMaxY(), getMaxZ()); + } + + default MutableBox copy() { + return new MutableBox(getMinX(), getMinY(), getMinZ(), getMaxX(), getMaxY(), getMaxZ()); + } + + @FunctionalInterface + interface CoordinateConsumer { + void accept(int x, int y, int z); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java b/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java new file mode 100644 index 0000000000..85d77f9d06 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java @@ -0,0 +1,329 @@ +package com.simibubi.create.foundation.utility.flywheel.box; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; +import net.minecraft.core.Vec3i; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.AABB; + +import java.util.Collection; + +public class MutableBox implements Box { + protected int minX; + protected int minY; + protected int minZ; + protected int maxX; + protected int maxY; + protected int maxZ; + + public MutableBox() { + } + + public MutableBox(int minX, int minY, int minZ, int maxX, int maxY, int maxZ) { + this.minX = minX; + this.minY = minY; + this.minZ = minZ; + this.maxX = maxX; + this.maxY = maxY; + this.maxZ = maxZ; + } + + public static MutableBox from(AABB aabb) { + int minX = (int) Math.floor(aabb.minX); + int minY = (int) Math.floor(aabb.minY); + int minZ = (int) Math.floor(aabb.minZ); + int maxX = (int) Math.ceil(aabb.maxX); + int maxY = (int) Math.ceil(aabb.maxY); + int maxZ = (int) Math.ceil(aabb.maxZ); + return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); + } + + public static MutableBox from(Vec3i pos) { + return new MutableBox(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); + } + + public static MutableBox from(SectionPos pos) { + return new MutableBox(pos.minBlockX(), pos.minBlockY(), pos.minBlockZ(), pos.maxBlockX() + 1, pos.maxBlockY() + 1, pos.maxBlockZ() + 1); + } + + public static MutableBox from(Vec3i start, Vec3i end) { + return new MutableBox(start.getX(), start.getY(), start.getZ(), end.getX() + 1, end.getY() + 1, end.getZ() + 1); + } + + public static MutableBox ofRadius(int radius) { + return new MutableBox(-radius, -radius, -radius, radius + 1, radius + 1, radius + 1); + } + + public static Box containingAll(Collection positions) { + if (positions.isEmpty()) { + return new MutableBox(); + } + int minX = Integer.MAX_VALUE; + int minY = Integer.MAX_VALUE; + int minZ = Integer.MAX_VALUE; + int maxX = Integer.MIN_VALUE; + int maxY = Integer.MIN_VALUE; + int maxZ = Integer.MIN_VALUE; + for (BlockPos pos : positions) { + minX = Math.min(minX, pos.getX()); + minY = Math.min(minY, pos.getY()); + minZ = Math.min(minZ, pos.getZ()); + maxX = Math.max(maxX, pos.getX()); + maxY = Math.max(maxY, pos.getY()); + maxZ = Math.max(maxZ, pos.getZ()); + } + return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); + } + + @Override + public int getMinX() { + return minX; + } + + @Override + public int getMinY() { + return minY; + } + + @Override + public int getMinZ() { + return minZ; + } + + @Override + public int getMaxX() { + return maxX; + } + + @Override + public int getMaxY() { + return maxY; + } + + @Override + public int getMaxZ() { + return maxZ; + } + + public void setMinX(int minX) { + this.minX = minX; + } + + public void setMinY(int minY) { + this.minY = minY; + } + + public MutableBox setMinZ(int minZ) { + this.minZ = minZ; + return this; + } + + public void setMaxX(int maxX) { + this.maxX = maxX; + } + + public void setMaxY(int maxY) { + this.maxY = maxY; + } + + public void setMaxZ(int maxZ) { + this.maxZ = maxZ; + } + + public void setMin(int x, int y, int z) { + minX = x; + minY = y; + minZ = z; + } + + public void setMax(int x, int y, int z) { + maxX = x; + maxY = y; + maxZ = z; + } + + public void setMin(Vec3i v) { + setMin(v.getX(), v.getY(), v.getZ()); + } + + public void setMax(Vec3i v) { + setMax(v.getX(), v.getY(), v.getZ()); + } + + public void assign(Box other) { + minX = other.getMinX(); + minY = other.getMinY(); + minZ = other.getMinZ(); + maxX = other.getMaxX(); + maxY = other.getMaxY(); + maxZ = other.getMaxZ(); + } + + public void assign(AABB other) { + minX = (int) Math.floor(other.minX); + minY = (int) Math.floor(other.minY); + minZ = (int) Math.floor(other.minZ); + maxX = (int) Math.ceil(other.maxX); + maxY = (int) Math.ceil(other.maxY); + maxZ = (int) Math.ceil(other.maxZ); + } + + public void assign(Vec3i start, Vec3i end) { + minX = start.getX(); + minY = start.getY(); + minZ = start.getZ(); + maxX = end.getX() + 1; + maxY = end.getY() + 1; + maxZ = end.getZ() + 1; + } + + public void unionAssign(Box other) { + minX = Math.min(this.minX, other.getMinX()); + minY = Math.min(this.minY, other.getMinY()); + minZ = Math.min(this.minZ, other.getMinZ()); + maxX = Math.max(this.maxX, other.getMaxX()); + maxY = Math.max(this.maxY, other.getMaxY()); + maxZ = Math.max(this.maxZ, other.getMaxZ()); + } + + public void unionAssign(AABB other) { + minX = Math.min(this.minX, (int) Math.floor(other.minX)); + minY = Math.min(this.minY, (int) Math.floor(other.minY)); + minZ = Math.min(this.minZ, (int) Math.floor(other.minZ)); + maxX = Math.max(this.maxX, (int) Math.ceil(other.maxX)); + maxY = Math.max(this.maxY, (int) Math.ceil(other.maxY)); + maxZ = Math.max(this.maxZ, (int) Math.ceil(other.maxZ)); + } + + public void intersectAssign(Box other) { + minX = Math.max(this.minX, other.getMinX()); + minY = Math.max(this.minY, other.getMinY()); + minZ = Math.max(this.minZ, other.getMinZ()); + maxX = Math.min(this.maxX, other.getMaxX()); + maxY = Math.min(this.maxY, other.getMaxY()); + maxZ = Math.min(this.maxZ, other.getMaxZ()); + } + + public void fixMinMax() { + int minX = Math.min(this.minX, this.maxX); + int minY = Math.min(this.minY, this.maxY); + int minZ = Math.min(this.minZ, this.maxZ); + int maxX = Math.max(this.minX, this.maxX); + int maxY = Math.max(this.minY, this.maxY); + int maxZ = Math.max(this.minZ, this.maxZ); + + this.minX = minX; + this.minY = minY; + this.minZ = minZ; + this.maxX = maxX; + this.maxY = maxY; + this.maxZ = maxZ; + } + + public void translate(int x, int y, int z) { + minX = minX + x; + maxX = maxX + x; + minY = minY + y; + maxY = maxY + y; + minZ = minZ + z; + maxZ = maxZ + z; + } + + public void translate(Vec3i by) { + translate(by.getX(), by.getY(), by.getZ()); + } + + public void grow(int x, int y, int z) { + minX = minX - x; + minY = minY - y; + minZ = minZ - z; + maxX = maxX + x; + maxY = maxY + y; + maxZ = maxZ + z; + } + + public void grow(int s) { + this.grow(s, s, s); + } + + /** + * Grow this box to have power of 2 side lengths, scaling from the minimum coords. + */ + public void nextPowerOf2() { + int sizeX = Mth.smallestEncompassingPowerOfTwo(sizeX()); + int sizeY = Mth.smallestEncompassingPowerOfTwo(sizeY()); + int sizeZ = Mth.smallestEncompassingPowerOfTwo(sizeZ()); + + maxX = minX + sizeX; + maxY = minY + sizeY; + maxZ = minZ + sizeZ; + } + + /** + * Grow this box to have power of 2 side length, scaling from the center. + */ + public void nextPowerOf2Centered() { + int sizeX = sizeX(); + int sizeY = sizeY(); + int sizeZ = sizeZ(); + + int newSizeX = Mth.smallestEncompassingPowerOfTwo(sizeX); + int newSizeY = Mth.smallestEncompassingPowerOfTwo(sizeY); + int newSizeZ = Mth.smallestEncompassingPowerOfTwo(sizeZ); + + int diffX = newSizeX - sizeX; + int diffY = newSizeY - sizeY; + int diffZ = newSizeZ - sizeZ; + + minX = minX - diffX / 2; // floor division for the minimums + minY = minY - diffY / 2; + minZ = minZ - diffZ / 2; + maxX = maxX + (diffX + 1) / 2; // ceiling divison for the maximums + maxY = maxY + (diffY + 1) / 2; + maxZ = maxZ + (diffZ + 1) / 2; + } + + public void mirrorAbout(Direction.Axis axis) { + Vec3i axisVec = Direction.get(Direction.AxisDirection.POSITIVE, axis) + .getNormal(); + int flipX = axisVec.getX() - 1; + int flipY = axisVec.getY() - 1; + int flipZ = axisVec.getZ() - 1; + + int maxX = this.maxX * flipX; + int maxY = this.maxY * flipY; + int maxZ = this.maxZ * flipZ; + this.maxX = this.minX * flipX; + this.maxY = this.minY * flipY; + this.maxZ = this.minZ * flipZ; + this.minX = maxX; + this.minY = maxY; + this.minZ = maxZ; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null) return false; + if (!(o instanceof Box that)) return false; + + return this.sameAs(that); + } + + @Override + public int hashCode() { + int result = minX; + result = 31 * result + minY; + result = 31 * result + minZ; + result = 31 * result + maxX; + result = 31 * result + maxY; + result = 31 * result + maxZ; + return result; + } + + @Override + public String toString() { + return "(" + minX + ", " + minY + ", " + minZ + ")->(" + maxX + ", " + maxY + ", " + maxZ + ')'; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java b/src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java new file mode 100644 index 0000000000..2da7cacef8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java @@ -0,0 +1,219 @@ +package com.simibubi.create.foundation.utility.flywheel.light; + +import com.simibubi.create.foundation.utility.flywheel.box.Box; +import com.simibubi.create.foundation.utility.flywheel.box.MutableBox; + +import dev.engine_room.flywheel.lib.memory.MemoryBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; +import net.minecraft.world.level.BlockAndTintGetter; + +import net.minecraft.world.level.LightLayer; + +import org.lwjgl.system.MemoryUtil; + +public class LightVolume implements Box { + protected final BlockAndTintGetter level; + protected final MutableBox box = new MutableBox(); + protected MemoryBlock lightData; + + public LightVolume(BlockAndTintGetter level, Box sampleVolume) { + this.level = level; + this.setBox(sampleVolume); + + this.lightData = MemoryBlock.malloc(this.box.volume() * 2); + } + + public Box getVolume() { + return box; + } + + @Override + public int getMinX() { + return box.getMinX(); + } + + @Override + public int getMinY() { + return box.getMinY(); + } + + @Override + public int getMinZ() { + return box.getMinZ(); + } + + @Override + public int getMaxX() { + return box.getMaxX(); + } + + @Override + public int getMaxY() { + return box.getMaxY(); + } + + @Override + public int getMaxZ() { + return box.getMaxZ(); + } + + public boolean isInvalid() { + return lightData == null; + } + + protected void setBox(Box box) { + this.box.assign(box); + } + + public short getPackedLight(int x, int y, int z) { + if (box.contains(x, y, z)) { + return MemoryUtil.memGetShort(levelPosToPtr(x, y, z)); + } else { + return 0; + } + } + + public void move(Box newSampleVolume) { + if (lightData == null) return; + + setBox(newSampleVolume); + int neededCapacity = box.volume() * 2; + if (neededCapacity > lightData.size()) { + lightData = lightData.realloc(neededCapacity); + } + initialize(); + } + + /** + * Completely (re)populate this volume with block and sky lighting data. + * This is expensive and should be avoided. + */ + public void initialize() { + if (lightData == null) return; + + copyLight(getVolume()); + markDirty(); + } + + protected void markDirty() { + // noop + } + + public void delete() { + lightData.free(); + lightData = null; + } + + /** + * Copy all light from the level into this volume. + * + * @param levelVolume the region in the level to copy data from. + */ + public void copyLight(Box levelVolume) { + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + int xShift = box.getMinX(); + int yShift = box.getMinY(); + int zShift = box.getMinZ(); + + levelVolume.forEachContained((x, y, z) -> { + pos.set(x, y, z); + + int block = this.level.getBrightness(LightLayer.BLOCK, pos); + int sky = this.level.getBrightness(LightLayer.SKY, pos); + + writeLight(x - xShift, y - yShift, z - zShift, block, sky); + }); + } + + protected void writeLight(int x, int y, int z, int block, int sky) { + byte b = (byte) ((block & 0xF) << 4); + byte s = (byte) ((sky & 0xF) << 4); + + long ptr = boxPosToPtr(x, y, z); + MemoryUtil.memPutByte(ptr, b); + MemoryUtil.memPutByte(ptr + 1, s); + } + + /** + * Copy block light from the level into this volume. + * + * @param levelVolume the region in the level to copy data from. + */ + public void copyBlock(Box levelVolume) { + var pos = new BlockPos.MutableBlockPos(); + + int xShift = box.getMinX(); + int yShift = box.getMinY(); + int zShift = box.getMinZ(); + + levelVolume.forEachContained((x, y, z) -> { + int light = this.level.getBrightness(LightLayer.BLOCK, pos.set(x, y, z)); + + writeBlock(x - xShift, y - yShift, z - zShift, light); + }); + } + + protected void writeBlock(int x, int y, int z, int block) { + byte b = (byte) ((block & 0xF) << 4); + + MemoryUtil.memPutByte(boxPosToPtr(x, y, z), b); + } + + /** + * Copy sky light from the level into this volume. + * + * @param levelVolume the region in the level to copy data from. + */ + public void copySky(Box levelVolume) { + var pos = new BlockPos.MutableBlockPos(); + + int xShift = box.getMinX(); + int yShift = box.getMinY(); + int zShift = box.getMinZ(); + + levelVolume.forEachContained((x, y, z) -> { + int light = this.level.getBrightness(LightLayer.SKY, pos.set(x, y, z)); + + writeSky(x - xShift, y - yShift, z - zShift, light); + }); + } + + protected void writeSky(int x, int y, int z, int sky) { + byte s = (byte) ((sky & 0xF) << 4); + + MemoryUtil.memPutByte(boxPosToPtr(x, y, z) + 1, s); + } + + protected long levelPosToPtr(int x, int y, int z) { + return lightData.ptr() + levelPosToPtrOffset(x, y, z); + } + + protected long boxPosToPtr(int x, int y, int z) { + return lightData.ptr() + boxPosToPtrOffset(x, y, z); + } + + protected int levelPosToPtrOffset(int x, int y, int z) { + x -= box.getMinX(); + y -= box.getMinY(); + z -= box.getMinZ(); + return boxPosToPtrOffset(x, y, z); + } + + protected int boxPosToPtrOffset(int x, int y, int z) { + return (x + box.sizeX() * (y + z * box.sizeY())) * 2; + } + + public void onLightUpdate(LightLayer type, SectionPos pos) { + if (lightData == null) return; + + MutableBox vol = MutableBox.from(pos); + if (!vol.intersects(getVolume())) return; + vol.intersectAssign(getVolume()); // compute the region contained by us that has dirty lighting data. + + if (type == LightLayer.BLOCK) copyBlock(vol); + else if (type == LightLayer.SKY) copySky(vol); + markDirty(); + } +} From 73661845fe60bf317539e750d5888c9f13062046 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 19 Jul 2024 17:05:19 -0400 Subject: [PATCH 30/35] fix instances & update flywheel --- gradle.properties | 2 +- .../content/fluids/pipes/valve/FluidValveVisual.java | 7 +------ .../create/content/kinetics/base/SingleRotatingVisual.java | 3 --- .../create/content/kinetics/gauge/GaugeVisual.java | 5 ++--- .../simpleRelays/BracketedKineticBlockEntityVisual.java | 5 ++--- 5 files changed, 6 insertions(+), 16 deletions(-) diff --git a/gradle.properties b/gradle.properties index e1cf192593..cf58cf9476 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-97 +flywheel_version = 1.0.0-beta-98 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 3763824b13..f273ead4ad 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -42,13 +42,8 @@ public class FluidValveVisual extends ShaftVisual impleme settled = false; pointer = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER)).createInstance(); - } - @Override - public void init(float pt) { - super.init(pt); - - transformPointer(pt); + transformPointer(partialTick); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index 9a032359f9..d40cc781e9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -15,9 +15,6 @@ public class SingleRotatingVisual extends KineticB public SingleRotatingVisual(VisualizationContext context, T blockEntity, float partialTick) { super(context, blockEntity, partialTick); - } - - public void init(float pt) { rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model()) .createInstance(); setup(rotatingModel); diff --git a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java index f71e133770..e5096911ce 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gauge/GaugeVisual.java @@ -31,11 +31,10 @@ public abstract class GaugeVisual extends ShaftVisual implemen protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { super(context, blockEntity, partialTick); - - init(partialTick); + init(); } - public void init(float partialTick) { + public void init() { GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 62fb81b063..c901e549a6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -26,11 +26,10 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual Date: Fri, 19 Jul 2024 18:26:13 -0700 Subject: [PATCH 31/35] Crank it! - Fix valve handle visual rendering a ghost instance - Fix drills rendering garbage --- .../render/ContraptionVisual.java | 34 +++++++-------- .../kinetics/crank/HandCrankVisual.java | 42 ++++++++----------- .../foundation/render/AllInstanceTypes.java | 20 ++++----- 3 files changed, 42 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index d31560822e..7fae4c77ce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -3,18 +3,24 @@ package com.simibubi.create.content.contraptions.render; import java.util.ArrayList; import java.util.List; -import dev.engine_room.flywheel.api.visual.LightUpdatedVisual; - -import dev.engine_room.flywheel.api.visual.ShaderLightVisual; -import it.unimi.dsi.fastutil.longs.LongArraySet; -import it.unimi.dsi.fastutil.longs.LongSet; - import org.apache.commons.lang3.tuple.MutablePair; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllMovementBehaviours; +import com.simibubi.create.content.contraptions.AbstractContraptionEntity; +import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; +import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; +import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.foundation.utility.worldWrappers.WrappedBlockAndTintGetter; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.task.Plan; import dev.engine_room.flywheel.api.visual.BlockEntityVisual; import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visual.LightUpdatedVisual; +import dev.engine_room.flywheel.api.visual.ShaderLightVisual; import dev.engine_room.flywheel.api.visual.TickableVisual; import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; import dev.engine_room.flywheel.api.visualization.VisualEmbedding; @@ -28,16 +34,8 @@ import dev.engine_room.flywheel.lib.task.NestedPlan; import dev.engine_room.flywheel.lib.task.PlanMap; import dev.engine_room.flywheel.lib.task.RunnablePlan; import dev.engine_room.flywheel.lib.visual.AbstractEntityVisual; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.AllMovementBehaviours; -import com.simibubi.create.content.contraptions.AbstractContraptionEntity; -import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.Contraption.RenderedBlocks; -import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; -import com.simibubi.create.content.contraptions.behaviour.MovementContext; -import com.simibubi.create.foundation.utility.worldWrappers.WrappedBlockAndTintGetter; -import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; - +import it.unimi.dsi.fastutil.longs.LongArraySet; +import it.unimi.dsi.fastutil.longs.LongSet; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.util.Mth; @@ -179,9 +177,6 @@ public class ContraptionVisual extends Abst } if (hasMovedBlocks()) { - // TODO: incremental light collection - // TODO: optimize light collection for very large contraptions - // by only collecting cuboids that contain faces updateLight(partialTick); } } @@ -200,7 +195,6 @@ public class ContraptionVisual extends Abst @Override public void updateLight(float partialTick) { - super.update(partialTick); } public LongSet collectLightSections() { diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 4a458de179..d4f4360b54 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -2,6 +2,11 @@ package com.simibubi.create.content.kinetics.crank; import java.util.function.Consumer; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; +import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.render.VirtualRenderHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visual.DynamicVisual; @@ -9,13 +14,11 @@ import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HandCrankVisual extends SingleRotatingVisual implements SimpleDynamicVisual { - +public class HandCrankVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { + protected RotatingInstance rotatingModel; private final TransformedInstance crank; private final Direction facing; @@ -23,22 +26,21 @@ public class HandCrankVisual extends SingleRotatingVisual super(modelManager, blockEntity, partialTick); facing = blockState.getValue(BlockStateProperties.FACING); Model model = blockEntity.getRenderedHandleInstance(); + crank = instancerProvider.instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); rotateCrank(partialTick); - if (blockEntity.shouldRenderShaft()) + if (blockEntity.shouldRenderShaft()) { + rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(blockState)) + .createInstance(); setup(rotatingModel); - - updateLight(partialTick); + } } @Override public void beginFrame(DynamicVisual.Context ctx) { - if (crank == null) - return; - rotateCrank(ctx.partialTick()); } @@ -56,31 +58,23 @@ public class HandCrankVisual extends SingleRotatingVisual @Override protected void _delete() { - if (blockEntity.shouldRenderShaft()) - super._delete(); - if (crank != null) - crank.delete(); + crank.delete(); } @Override public void update(float pt) { - if (blockEntity.shouldRenderShaft()) - super.update(pt); + if (rotatingModel != null) + updateRotation(rotatingModel); } @Override public void updateLight(float partialTick) { - if (blockEntity.shouldRenderShaft()) - super.updateLight(partialTick); - if (crank != null) - relight(pos, crank); + relight(pos, crank, rotatingModel); } @Override public void collectCrumblingInstances(Consumer consumer) { - super.collectCrumblingInstances(consumer); - if (crank != null) { - consumer.accept(crank); - } + consumer.accept(crank); + consumer.accept(rotatingModel); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 9d0fa86978..8531591e41 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -4,16 +4,16 @@ import static com.simibubi.create.Create.asResource; import org.lwjgl.system.MemoryUtil; -import dev.engine_room.flywheel.api.instance.InstanceType; -import dev.engine_room.flywheel.api.layout.FloatRepr; -import dev.engine_room.flywheel.api.layout.IntegerRepr; -import dev.engine_room.flywheel.api.layout.LayoutBuilder; -import dev.engine_room.flywheel.lib.instance.SimpleInstanceType; import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.belt.BeltInstance; import com.simibubi.create.content.logistics.flwdata.FlapInstance; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.api.layout.FloatRepr; +import dev.engine_room.flywheel.api.layout.IntegerRepr; +import dev.engine_room.flywheel.api.layout.LayoutBuilder; +import dev.engine_room.flywheel.lib.instance.SimpleInstanceType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -117,11 +117,11 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 24, instance.rotation.x); MemoryUtil.memPutFloat(ptr + 28, instance.rotation.y); MemoryUtil.memPutFloat(ptr + 32, instance.rotation.z); - MemoryUtil.memPutFloat(ptr + 34, instance.rotation.w); - MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterX); - MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterY); - MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterZ); - MemoryUtil.memPutFloat(ptr + 42, instance.speed); + MemoryUtil.memPutFloat(ptr + 36, instance.rotation.w); + MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterX); + MemoryUtil.memPutByte(ptr + 41, instance.rotationCenterY); + MemoryUtil.memPutByte(ptr + 42, instance.rotationCenterZ); + MemoryUtil.memPutFloat(ptr + 44, instance.speed); }) .register(); From 3071e46ddcfabd32e01829c628dc0af59af1bd6f Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:00:25 -0600 Subject: [PATCH 32/35] More Flywheel fixes and clean up - Remove BeltLighter - Replace AbstractPulleyVisual's usage of LightVolume with new LightCache - Remove Box, MutableBox, and LightVolume - Use AbstractBlockEntityVisual#relight without the pos parameter when possible - Use ExtraMemoryOps where appropriate - Remove unnecessary init methods - Organize imports --- .../com/simibubi/create/AllPartialModels.java | 2 +- .../category/animations/AnimatedCrafter.java | 2 +- .../category/animations/AnimatedKinetics.java | 2 +- .../ControlledContraptionEntity.java | 2 +- .../DirectionalExtenderScrollOptionSlot.java | 2 +- .../OrientedContraptionEntity.java | 2 +- .../contraptions/actors/ActorInstance.java | 1 - .../ContraptionControlsBlockEntity.java | 2 +- .../ContraptionControlsRenderer.java | 2 +- .../harvester/HarvesterActorVisual.java | 10 +- .../harvester/HarvesterMovementBehaviour.java | 4 +- .../contraptions/actors/psi/PIInstance.java | 4 +- .../actors/psi/PSIActorVisual.java | 3 +- .../contraptions/actors/psi/PSIVisual.java | 2 +- .../psi/PortableStorageInterfaceMovement.java | 4 +- .../actors/roller/RollerActorVisual.java | 10 +- .../actors/roller/RollerBlockEntity.java | 2 +- .../roller/RollerMovementBehaviour.java | 4 +- .../contraptions/bearing/BearingRenderer.java | 4 +- .../contraptions/bearing/BearingVisual.java | 14 +- .../bearing/StabilizedBearingVisual.java | 8 +- .../behaviour/MovementBehaviour.java | 2 +- .../chassis/StickerBlockEntity.java | 2 +- .../contraptions/chassis/StickerRenderer.java | 2 +- .../contraptions/chassis/StickerVisual.java | 8 +- .../elevator/ElevatorPulleyVisual.java | 3 +- .../gantry/GantryCarriageRenderer.java | 2 +- .../gantry/GantryCarriageVisual.java | 14 +- .../minecart/CouplingRenderer.java | 2 +- .../pulley/AbstractPulleyVisual.java | 240 +++++++------ .../contraptions/pulley/HosePulleyVisual.java | 13 +- .../contraptions/pulley/PulleyRenderer.java | 2 +- .../contraptions/pulley/RopePulleyVisual.java | 14 +- .../render/ContraptionEntityRenderer.java | 4 +- .../render/ContraptionRenderInfo.java | 4 +- .../render/ContraptionRenderInfoManager.java | 2 +- .../render/ContraptionVisual.java | 4 +- .../decoration/placard/PlacardRenderer.java | 2 +- .../slidingDoor/SlidingDoorRenderer.java | 2 +- .../steamWhistle/WhistleRenderer.java | 2 +- .../equipment/armor/BacktankRenderer.java | 2 +- .../equipment/armor/BacktankVisual.java | 3 +- .../bell/AbstractBellBlockEntity.java | 2 +- .../bell/CustomRotationParticle.java | 2 +- .../bell/HauntedBellBlockEntity.java | 2 +- .../bell/PeculiarBellBlockEntity.java | 2 +- .../blueprint/BlueprintRenderer.java | 4 +- .../extendoGrip/ExtendoGripItemRenderer.java | 4 +- .../extendoGrip/ExtendoGripRenderHandler.java | 4 +- .../PotatoCannonItemRenderer.java | 4 +- .../PotatoCannonRenderHandler.java | 2 +- .../PotatoProjectileRenderMode.java | 2 +- .../SymmetryWandItemRenderer.java | 2 +- .../symmetryWand/mirror/CrossPlaneMirror.java | 4 +- .../symmetryWand/mirror/EmptyMirror.java | 2 +- .../symmetryWand/mirror/PlaneMirror.java | 4 +- .../symmetryWand/mirror/SymmetryMirror.java | 2 +- .../mirror/TriplePlaneMirror.java | 2 +- .../equipment/toolbox/RadialToolboxMenu.java | 2 +- .../equipment/toolbox/ToolBoxVisual.java | 10 +- .../equipment/toolbox/ToolboxScreen.java | 2 +- .../equipment/wrench/WrenchItemRenderer.java | 2 +- .../WorldshaperItemRenderer.java | 2 +- .../fluids/drain/ItemDrainRenderer.java | 2 +- .../fluids/hosePulley/HosePulleyRenderer.java | 2 +- .../pipes/SmartFluidPipeBlockEntity.java | 2 +- .../pipes/valve/FluidValveRenderer.java | 2 +- .../fluids/pipes/valve/FluidValveVisual.java | 12 +- .../content/fluids/pump/PumpCogVisual.java | 6 +- .../content/fluids/spout/SpoutRenderer.java | 2 +- .../fluids/tank/FluidTankRenderer.java | 2 +- .../kinetics/base/BackHalfShaftVisual.java | 1 - .../kinetics/base/HalfShaftVisual.java | 4 +- .../base/HorizontalHalfShaftVisual.java | 1 - .../kinetics/base/KineticBlockEntity.java | 2 +- .../base/KineticBlockEntityVisual.java | 4 +- .../kinetics/base/KineticInstance.java | 4 +- .../kinetics/base/RotatingInstance.java | 1 - .../content/kinetics/base/ShaftVisual.java | 3 +- .../kinetics/base/SingleRotatingVisual.java | 2 +- .../kinetics/belt/BeltBlockEntity.java | 113 ------ .../content/kinetics/belt/BeltInstance.java | 4 +- .../content/kinetics/belt/BeltRenderer.java | 28 +- .../content/kinetics/belt/BeltVisual.java | 21 +- .../kinetics/clock/CuckooClockRenderer.java | 2 +- .../crafter/MechanicalCrafterRenderer.java | 6 +- .../crafter/ShaftlessCogwheelVisual.java | 8 +- .../kinetics/crank/HandCrankBlockEntity.java | 4 +- .../kinetics/crank/HandCrankRenderer.java | 2 +- .../kinetics/crank/HandCrankVisual.java | 2 +- .../crank/ValveHandleBlockEntity.java | 2 +- .../deployer/DeployerActorVisual.java | 12 +- .../deployer/DeployerBlockEntity.java | 2 +- .../kinetics/deployer/DeployerFilterSlot.java | 2 +- .../deployer/DeployerMovementBehaviour.java | 4 +- .../kinetics/deployer/DeployerVisual.java | 12 +- .../kinetics/drill/DrillActorVisual.java | 4 +- .../drill/DrillMovementBehaviour.java | 4 +- .../content/kinetics/drill/DrillVisual.java | 6 +- .../content/kinetics/fan/FanVisual.java | 6 +- .../kinetics/flywheel/FlywheelRenderer.java | 2 +- .../kinetics/flywheel/FlywheelVisual.java | 16 +- .../content/kinetics/gauge/GaugeRenderer.java | 4 +- .../content/kinetics/gauge/GaugeVisual.java | 187 +++++----- .../kinetics/gearbox/GearboxRenderer.java | 2 +- .../kinetics/gearbox/GearboxVisual.java | 12 +- .../mechanicalArm/ArmBlockEntity.java | 2 +- .../kinetics/mechanicalArm/ArmRenderer.java | 4 +- .../kinetics/mechanicalArm/ArmVisual.java | 16 +- .../millstone/MillstoneCogVisual.java | 5 +- .../mixer/MechanicalMixerRenderer.java | 2 +- .../content/kinetics/mixer/MixerVisual.java | 12 +- .../motor/CreativeMotorBlockEntity.java | 2 +- .../press/MechanicalPressRenderer.java | 2 +- .../content/kinetics/press/PressVisual.java | 12 +- .../content/kinetics/saw/SawFilterSlot.java | 2 +- .../content/kinetics/saw/SawVisual.java | 6 +- .../BracketedKineticBlockEntityVisual.java | 14 +- .../encased/EncasedCogVisual.java | 84 ++--- .../steamEngine/SteamEngineRenderer.java | 4 +- .../steamEngine/SteamEngineValueBox.java | 2 +- .../steamEngine/SteamEngineVisual.java | 10 +- .../transmission/SplitShaftRenderer.java | 2 +- .../transmission/SplitShaftVisual.java | 12 +- .../kinetics/waterwheel/WaterWheelVisual.java | 2 +- .../logistics/chute/ChuteRenderer.java | 2 +- .../crate/CreativeCrateBlockEntity.java | 2 +- .../logistics/depot/DepotRenderer.java | 2 +- .../logistics/depot/EjectorBlockEntity.java | 2 +- .../logistics/depot/EjectorVisual.java | 7 +- .../logistics/flwdata/FlapInstance.java | 1 - .../logistics/funnel/FunnelBlockEntity.java | 2 +- .../funnel/FunnelFilterSlotPositioning.java | 2 +- .../logistics/funnel/FunnelRenderer.java | 6 +- .../logistics/funnel/FunnelVisual.java | 12 +- .../tunnel/BeltTunnelBlockEntity.java | 2 +- .../logistics/tunnel/BeltTunnelRenderer.java | 4 +- .../logistics/tunnel/BeltTunnelVisual.java | 12 +- .../processing/basin/BasinRenderer.java | 2 +- .../burner/BlazeBurnerRenderer.java | 2 +- .../redstone/FilteredDetectorFilterSlot.java | 2 +- .../analogLever/AnalogLeverRenderer.java | 2 +- .../analogLever/AnalogLeverVisual.java | 10 +- .../redstone/diodes/BrassDiodeScrollSlot.java | 2 +- .../redstone/diodes/BrassDiodeVisual.java | 7 +- .../displayLink/DisplayLinkScreen.java | 2 +- .../link/RedstoneLinkFrequencySlot.java | 2 +- .../controller/LecternControllerRenderer.java | 2 +- .../LinkedControllerItemRenderer.java | 4 +- .../cannon/SchematicannonRenderer.java | 2 +- .../cannon/SchematicannonVisual.java | 8 +- .../schematics/client/SchematicRenderer.java | 4 +- .../client/SchematicTransformation.java | 2 +- .../schematics/client/tools/DeployTool.java | 2 +- .../trains/bogey/BackupBogeyRenderer.java | 2 +- .../content/trains/bogey/BogeyRenderer.java | 12 +- .../content/trains/bogey/BogeyStyle.java | 2 +- .../content/trains/bogey/BogeyVisual.java | 2 +- .../trains/bogey/StandardBogeyRenderer.java | 2 +- .../trains/display/FlapDisplayRenderer.java | 2 +- .../content/trains/entity/CarriageBogey.java | 2 +- .../CarriageContraptionEntityRenderer.java | 4 +- .../entity/CarriageContraptionVisual.java | 27 +- .../observer/TrackObserverBlockEntity.java | 2 +- .../observer/TrackObserverRenderer.java | 2 +- .../trains/schedule/ScheduleScreen.java | 2 +- .../content/trains/signal/SignalRenderer.java | 2 +- .../trains/station/AbstractStationScreen.java | 4 +- .../trains/station/AssemblyScreen.java | 2 +- .../trains/station/StationRenderer.java | 6 +- .../content/trains/station/StationScreen.java | 2 +- .../trains/track/BezierConnection.java | 2 +- .../content/trains/track/ITrackBlock.java | 2 +- .../content/trains/track/TrackBlock.java | 4 +- .../trains/track/TrackBlockEntity.java | 2 +- .../trains/track/TrackBlockOutline.java | 2 +- .../content/trains/track/TrackMaterial.java | 2 +- .../trains/track/TrackMaterialFactory.java | 2 +- .../content/trains/track/TrackRenderer.java | 2 +- .../trains/track/TrackTargetingBehaviour.java | 2 +- .../trains/track/TrackTargetingClient.java | 2 +- .../content/trains/track/TrackVisual.java | 18 +- .../behaviour/ValueBoxRenderer.java | 2 +- .../behaviour/ValueBoxTransform.java | 2 +- .../ColoredOverlayBlockEntityRenderer.java | 2 +- .../data/CreateBlockEntityBuilder.java | 2 +- .../foundation/data/CreateEntityBuilder.java | 2 +- .../foundation/fluid/FluidRenderer.java | 2 +- .../gui/element/GuiGameElement.java | 2 +- .../foundation/outliner/ItemOutline.java | 2 +- .../create/foundation/outliner/Outline.java | 2 +- .../ponder/element/AnimatedSceneElement.java | 2 +- .../ponder/element/MinecartElement.java | 2 +- .../ponder/element/ParrotElement.java | 2 +- .../ponder/element/WorldSectionElement.java | 6 +- .../foundation/render/AllInstanceTypes.java | 24 +- .../render/BlockEntityRenderHelper.java | 6 +- .../foundation/render/CachedBufferer.java | 4 +- .../render/VirtualRenderHelper.java | 4 +- .../foundation/utility/flywheel/box/Box.java | 142 -------- .../utility/flywheel/box/MutableBox.java | 329 ------------------ .../utility/flywheel/light/LightVolume.java | 219 ------------ .../foundation/utility/outliner/Outline.java | 2 +- .../virtualWorld/VirtualRenderWorld.java | 1 - .../debugInfo/DebugInformation.java | 6 +- .../gui/CreateMainMenuScreen.java | 2 +- 206 files changed, 713 insertions(+), 1475 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java delete mode 100644 src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java delete mode 100644 src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index e35e254490..c79d8b0c64 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -6,12 +6,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.content.fluids.FluidTransportBehaviour; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index 6da76887d7..c969e4efc3 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -1,10 +1,10 @@ package com.simibubi.create.compat.jei.category.animations; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.AllGuiTextures; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.gui.GuiGraphics; public class AnimatedCrafter extends AnimatedKinetics { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java index dada5469d9..16cde6f09c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java @@ -1,6 +1,5 @@ package com.simibubi.create.compat.jei.category.animations; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.gui.CustomLightingSettings; @@ -8,6 +7,7 @@ import com.simibubi.create.foundation.gui.ILightingSettings; import com.simibubi.create.foundation.gui.element.GuiGameElement; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import mezz.jei.api.gui.drawable.IDrawable; import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java index 5375b9df3c..79f0b07497 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions; import static com.simibubi.create.foundation.utility.AngleHelper.angleLerp; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.bearing.BearingContraption; @@ -11,6 +10,7 @@ import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java index dc8e34f5e0..5b19e632ad 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/DirectionalExtenderScrollOptionSlot.java @@ -2,11 +2,11 @@ package com.simibubi.create.content.contraptions; import java.util.function.BiPredicate; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java index a78c6be339..1f4c5fb487 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java @@ -7,7 +7,6 @@ import java.util.UUID; import javax.annotation.Nullable; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.bearing.StabilizedContraption; @@ -22,6 +21,7 @@ import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java index 0ec48869a9..5d1b1ddfb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/ActorInstance.java @@ -7,7 +7,6 @@ import org.joml.Vector3f; import dev.engine_room.flywheel.api.instance.InstanceHandle; import dev.engine_room.flywheel.api.instance.InstanceType; import dev.engine_room.flywheel.lib.instance.AbstractInstance; - import net.minecraft.core.BlockPos; public class ActorInstance extends AbstractInstance { diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java index f902586922..6b9c2d0c97 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; import java.util.List; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.contraptions.actors.trainControls.ControlsBlock; @@ -17,6 +16,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java index 0356d3feed..f281b623a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.actors.contraptionControls; import java.util.Random; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; @@ -21,6 +20,7 @@ import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index adb578b74e..412a0c41bb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -1,10 +1,5 @@ package com.simibubi.create.content.contraptions.actors.harvester; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.instance.InstanceTypes; -import dev.engine_room.flywheel.lib.instance.TransformedInstance; -import dev.engine_room.flywheel.lib.model.Models; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; @@ -13,6 +8,11 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java index ae9bb59fda..8680025d71 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java @@ -4,8 +4,6 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableBoolean; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; @@ -16,6 +14,8 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.BlockPos; import net.minecraft.tags.BlockTags; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index beee6389d0..e0ffab6175 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; +import com.simibubi.create.foundation.utility.AngleHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.instance.InstancerProvider; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.foundation.utility.AngleHelper; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index 1cb0e4f4ab..130d8dc82a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -1,12 +1,13 @@ package com.simibubi.create.content.contraptions.actors.psi; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; + public class PSIActorVisual extends ActorVisual { private final PIInstance instance; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index c871a8137b..e92d39b744 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -34,7 +34,7 @@ public class PSIVisual extends AbstractBlockEntityVisual e @Override public void updateLight(float partialTick) { super.updateLight(partialTick); - relight(pos, topInstance); + relight(topInstance); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index e283bdb412..5fdc2b2731 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -2,10 +2,6 @@ package com.simibubi.create.content.contraptions.bearing; import org.joml.Quaternionf; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.instance.InstanceTypes; -import dev.engine_room.flywheel.lib.instance.OrientedInstance; -import dev.engine_room.flywheel.lib.model.Models; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -15,6 +11,10 @@ import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java index c76e23dcdf..02f502258f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementBehaviour.java @@ -2,12 +2,12 @@ package com.simibubi.create.content.contraptions.behaviour; import javax.annotation.Nullable; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ContraptionMatrices; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.item.ItemEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java index 90d742f6a9..9fb15efa30 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.List; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; @@ -12,6 +11,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java index 4b10f10e0b..8245657d41 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.chassis; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; @@ -9,6 +8,7 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 098be1b02d..d845f2249e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -2,6 +2,9 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.foundation.utility.AngleHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -10,9 +13,6 @@ import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.foundation.utility.AngleHelper; - import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; import net.minecraft.util.Mth; @@ -67,7 +67,7 @@ public class StickerVisual extends AbstractBlockEntityVisual @Override public void updateLight(float partialTick) { - relight(pos, head); + relight(head); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index be55b416a8..75a09da8c5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -1,9 +1,10 @@ package com.simibubi.create.content.contraptions.elevator; +import com.simibubi.create.content.kinetics.base.ShaftVisual; + import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO public class ElevatorPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java index be47efbc2c..b27a04ca10 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.gantry; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 767b5453a3..7390bec614 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -2,6 +2,12 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.content.kinetics.base.ShaftVisual; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.Iterate; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -9,12 +15,6 @@ import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.content.kinetics.base.ShaftVisual; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.Iterate; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; @@ -99,7 +99,7 @@ public class GantryCarriageVisual extends ShaftVisual @Override public void updateLight(float partialTick) { - relight(pos, gantryCogs, rotatingModel); + relight(gantryCogs, rotatingModel); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java index fb1f0d8895..c0fc44402e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/minecart/CouplingRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.minecart; import static net.minecraft.util.Mth.lerp; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -16,6 +15,7 @@ import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.LevelRenderer; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index 88f41ed04e..a0d05e5466 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -2,15 +2,6 @@ package com.simibubi.create.content.contraptions.pulley; import java.util.function.Consumer; -import com.simibubi.create.foundation.utility.flywheel.box.MutableBox; -import com.simibubi.create.foundation.utility.flywheel.light.LightVolume; - -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.instance.Instancer; -import dev.engine_room.flywheel.api.visual.DynamicVisual; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.instance.OrientedInstance; -import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.ShaftVisual; @@ -18,22 +9,36 @@ import com.simibubi.create.foundation.render.ConditionalInstance; import com.simibubi.create.foundation.render.GroupInstance; import com.simibubi.create.foundation.render.SelectInstance; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visual.DynamicVisual; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.math.MoreMath; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; +import it.unimi.dsi.fastutil.bytes.ByteArrayList; +import it.unimi.dsi.fastutil.bytes.ByteList; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import it.unimi.dsi.fastutil.longs.LongSet; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; import net.minecraft.util.Mth; +import net.minecraft.world.level.LightLayer; public abstract class AbstractPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { + private final OrientedInstance coil; + private final SelectInstance magnet; + private final GroupInstance rope; + private final ConditionalInstance halfRope; - final OrientedInstance coil; - final SelectInstance magnet; - final GroupInstance rope; - final ConditionalInstance halfRope; - - protected float offset; protected final Direction rotatingAbout; protected final Axis rotationAxis; - private final MutableBox volume = new MutableBox(); - private final LightVolume light; + private final LightCache lightCache = new LightCache(1); + + private float offset; public AbstractPulleyVisual(VisualizationContext dispatcher, T blockEntity, float partialTick) { super(dispatcher, blockEntity, partialTick); @@ -52,78 +57,7 @@ public abstract class AbstractPulleyVisual extends rope = new GroupInstance<>(getRopeModel()); halfRope = new ConditionalInstance<>(getHalfRopeModel()).withCondition(this::shouldRenderHalfRope); - updateOffset(0); - updateVolume(); - - light = new LightVolume(level, volume); - light.initialize(); - } - - @Override - public void beginFrame(DynamicVisual.Context ctx) { - updateOffset(ctx.partialTick()); - coil.setRotation(rotationAxis.rotationDegrees(offset * 180)) - .setChanged(); - - int neededRopeCount = getNeededRopeCount(); - rope.resize(neededRopeCount); - - magnet.update() - .get() - .ifPresent(data -> { - int i = Math.max(0, Mth.floor(offset)); - short packed = light.getPackedLight(pos.getX(), pos.getY() - i, pos.getZ()); - data.setPosition(getVisualPosition()) - .nudgePosition(0, -offset, 0) - .light(packed) - .setChanged(); - }); - - halfRope.update() - .get() - .ifPresent(rope1 -> { - float f = offset % 1; - float halfRopeNudge = f > .75f ? f - 1 : f; - - short packed = light.getPackedLight(pos.getX(), pos.getY(), pos.getZ()); - rope1.setPosition(getVisualPosition()) - .nudgePosition(0, -halfRopeNudge, 0) - .light(packed) - .setChanged(); - }); - - if (isRunning()) { - int size = rope.size(); - int bottomY = pos.getY() - size; - for (int i = 0; i < size; i++) { - short packed = light.getPackedLight(pos.getX(), bottomY + i, pos.getZ()); - - rope.get(i) - .setPosition(getVisualPosition()) - .nudgePosition(0, -offset + i + 1, 0) - .light(packed) - .setChanged(); - } - } else { - rope.clear(); - } - } - - @Override - public void updateLight(float partialTick) { - super.updateLight(partialTick); - light.copyLight(volume); - relight(pos, coil); - } - - @Override - protected void _delete() { - super._delete(); - coil.delete(); - magnet.delete(); - rope.clear(); - halfRope.delete(); - light.delete(); + updateOffset(partialTick); } protected abstract Instancer getRopeModel(); @@ -140,27 +74,66 @@ public abstract class AbstractPulleyVisual extends protected abstract boolean isRunning(); - public boolean tickLightListener() { - if (updateVolume()) { - light.move(volume); - return true; + @Override + public void beginFrame(DynamicVisual.Context ctx) { + updateOffset(ctx.partialTick()); + coil.setRotation(rotationAxis.rotationDegrees(offset * 180)) + .setChanged(); + + int neededRopeCount = getNeededRopeCount(); + rope.resize(neededRopeCount); + + magnet.update() + .get() + .ifPresent(data -> { + int i = Math.max(0, Mth.floor(offset)); + int light = lightCache.getPackedLight(i); + data.setPosition(getVisualPosition()) + .nudgePosition(0, -offset, 0) + .light(light) + .setChanged(); + }); + + halfRope.update() + .get() + .ifPresent(rope1 -> { + float f = offset % 1; + float halfRopeNudge = f > .75f ? f - 1 : f; + + int light = lightCache.getPackedLight(0); + rope1.setPosition(getVisualPosition()) + .nudgePosition(0, -halfRopeNudge, 0) + .light(light) + .setChanged(); + }); + + if (isRunning()) { + int size = rope.size(); + for (int i = 0; i < size; i++) { + int light = lightCache.getPackedLight(size - 1 - i); + + rope.get(i) + .setPosition(getVisualPosition()) + .nudgePosition(0, -offset + i + 1, 0) + .light(light) + .setChanged(); + } + } else { + rope.clear(); } - return false; } - private boolean updateVolume() { - int length = Mth.ceil(offset) + 2; + @Override + public void updateLight(float partialTick) { + super.updateLight(partialTick); + relight(coil); - if (volume.sizeY() < length) { - volume.assign(pos.below(length), pos); - volume.fixMinMax(); - return true; - } - return false; + lightCache.update(); } private void updateOffset(float pt) { offset = getOffset(pt); + lightCache.setSize(Mth.ceil(offset) + 2); } private int getNeededRopeCount() { @@ -188,4 +161,67 @@ public abstract class AbstractPulleyVisual extends rope.forEach(consumer); halfRope.forEach(consumer); } + + @Override + protected void _delete() { + super._delete(); + coil.delete(); + magnet.delete(); + rope.clear(); + halfRope.delete(); + } + + private class LightCache { + private final ByteList data; + private final LongSet sections = new LongOpenHashSet(); + private final BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + private int sectionCount; + + public LightCache(int initialSize) { + data = new ByteArrayList(initialSize); + setSize(initialSize); + } + + public void setSize(int size) { + if (size != data.size()) { + data.size(size); + + int sectionCount = MoreMath.ceilingDiv(size + 15 - pos.getY() + pos.getY() / 4 * 4, SectionPos.SECTION_SIZE); + if (sectionCount != this.sectionCount) { + this.sectionCount = sectionCount; + sections.clear(); + int sectionX = SectionPos.blockToSectionCoord(pos.getX()); + int sectionY = SectionPos.blockToSectionCoord(pos.getY()); + int sectionZ = SectionPos.blockToSectionCoord(pos.getZ()); + for (int i = 0; i < sectionCount; i++) { + sections.add(SectionPos.asLong(sectionX, sectionY - i, sectionZ)); + } + lightSections.sections(sections); + } + } + } + + public void update() { + mutablePos.set(pos); + + for (int i = 0; i < data.size(); i++) { + int blockLight = level.getBrightness(LightLayer.BLOCK, mutablePos); + int skyLight = level.getBrightness(LightLayer.SKY, mutablePos); + int light = ((skyLight << 4) & 0xF) | (blockLight & 0xF); + data.set(i, (byte) light); + mutablePos.move(Direction.DOWN); + } + } + + public int getPackedLight(int offset) { + if (offset < 0 || offset >= data.size()) { + return 0; + } + + int light = Byte.toUnsignedInt(data.getByte(offset)); + int blockLight = light & 0xF; + int skyLight = (light >>> 4) & 0xF; + return LightTexture.pack(blockLight, skyLight); + } + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index e295bd3bce..7857e22dbe 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -1,43 +1,50 @@ package com.simibubi.create.content.contraptions.pulley; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; + import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.OrientedInstance; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity; public class HosePulleyVisual extends AbstractPulleyVisual { - public HosePulleyVisual(VisualizationContext dispatcher, HosePulleyBlockEntity blockEntity, float partialTick) { super(dispatcher, blockEntity, partialTick); } + @Override protected Instancer getRopeModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE)); } + @Override protected Instancer getMagnetModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET)); } + @Override protected Instancer getHalfMagnetModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET)); } + @Override protected Instancer getCoilModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_COIL, rotatingAbout)); } + @Override protected Instancer getHalfRopeModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF)); } + @Override protected float getOffset(float pt) { return blockEntity.getInterpolatedOffset(pt); } + @Override protected boolean isRunning() { return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java index 232fbb0838..0b201bc2eb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/PulleyRenderer.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.contraptions.pulley; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.core.Direction.Axis; import net.minecraft.util.Mth; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index f18ed5223a..6b13def27f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -1,44 +1,52 @@ package com.simibubi.create.content.contraptions.pulley; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.foundation.render.VirtualRenderHelper; + import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.OrientedInstance; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.foundation.render.VirtualRenderHelper; public class RopePulleyVisual extends AbstractPulleyVisual { public RopePulleyVisual(VisualizationContext context, PulleyBlockEntity blockEntity, float partialTick) { super(context, blockEntity, partialTick); } + @Override protected Instancer getRopeModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState())); } + @Override protected Instancer getMagnetModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState())); } + @Override protected Instancer getHalfMagnetModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET)); } + @Override protected Instancer getCoilModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_COIL, rotatingAbout)); } + @Override protected Instancer getHalfRopeModel() { return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF)); } + @Override protected float getOffset(float pt) { return PulleyRenderer.getBlockEntityOffset(pt, blockEntity); } + @Override protected boolean isRunning() { return PulleyRenderer.isPulleyRunning(blockEntity); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java index 30daf394d6..e19c50135b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.contraptions.render; import org.apache.commons.lang3.tuple.Pair; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllMovementBehaviours; @@ -15,6 +13,8 @@ import com.simibubi.create.foundation.render.BlockEntityRenderHelper; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.culling.Frustum; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java index daed4afc01..1979d80011 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfo.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.contraptions.render; import org.apache.commons.lang3.tuple.Pair; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.ModelUtil; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.Contraption; @@ -14,6 +12,8 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.ModelUtil; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.ModelBlockRenderer; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java index 9d2d9899b8..81ab6c4b36 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderInfoManager.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.contraptions.render; -import dev.engine_room.flywheel.api.event.ReloadLevelRendererEvent; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.foundation.utility.WorldAttached; +import dev.engine_room.flywheel.api.event.ReloadLevelRendererEvent; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index 7fae4c77ce..a134681b92 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -70,7 +70,7 @@ public class ContraptionVisual extends Abst init(partialTick); } - public void init(float partialTick) { + protected void init(float partialTick) { setEmbeddingMatrices(partialTick); Contraption contraption = entity.getContraption(); @@ -99,8 +99,6 @@ public class ContraptionVisual extends Abst for (var actor : contraption.getActors()) { setupActor(actor, partialTick); } - - updateLight(partialTick); } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java index 5874947cf0..b8654c0caf 100644 --- a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardRenderer.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.decoration.placard; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java index 5c95059cdf..d98af77ecc 100644 --- a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.decoration.slidingDoor; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; diff --git a/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java b/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java index 0f9a411d24..168fdcf1b8 100644 --- a/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java +++ b/src/main/java/com/simibubi/create/content/decoration/steamWhistle/WhistleRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.decoration.steamWhistle; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.decoration.steamWhistle.WhistleBlock.WhistleSize; @@ -9,6 +8,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java index 047a3e6ae2..9ab3170c55 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.equipment.armor; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; @@ -10,6 +9,7 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java index f651169707..8f8b9fca87 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankVisual.java @@ -1,9 +1,10 @@ package com.simibubi.create.content.equipment.armor; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; public class BacktankVisual extends SingleRotatingVisual { diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java index 5e1baefa7d..7b6283af09 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/AbstractBellBlockEntity.java @@ -2,11 +2,11 @@ package com.simibubi.create.content.equipment.bell; import java.util.List; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java b/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java index 110835fe82..227b68f7e0 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/CustomRotationParticle.java @@ -3,10 +3,10 @@ package com.simibubi.create.content.equipment.bell; import org.joml.Quaternionf; import org.joml.Vector3f; -import dev.engine_room.flywheel.lib.util.ShadersModHandler; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; +import dev.engine_room.flywheel.lib.util.ShadersModHandler; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.SimpleAnimatedParticle; diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java index 0882cc1953..7a1242b4e3 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/HauntedBellBlockEntity.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.equipment.bell; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; diff --git a/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java index 64c4993c20..8a0259fe91 100644 --- a/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/bell/PeculiarBellBlockEntity.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.equipment.bell; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java index d561edddcd..041ff5a5e7 100644 --- a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintRenderer.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.equipment.blueprint; import org.joml.Matrix3f; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.equipment.blueprint.BlueprintEntity.BlueprintSection; @@ -11,6 +9,8 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.Couple; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.Sheets; diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java index 5674a1ca30..a3c02e2ff6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.equipment.extendoGrip; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.Create; @@ -10,6 +8,8 @@ import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRendere import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemDisplayContext; diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java index c7653eba45..37b8952726 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripRenderHandler.java @@ -1,13 +1,13 @@ package com.simibubi.create.content.equipment.extendoGrip; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.player.LocalPlayer; diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java index f33bc1baa5..9ec1e33a6f 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.equipment.potatoCannon; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; @@ -11,6 +9,8 @@ import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRendere import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java index 310e4d779e..34821232fc 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonRenderHandler.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.equipment.potatoCannon; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllItems; import com.simibubi.create.content.equipment.zapper.ShootableGadgetRenderHandler; import com.simibubi.create.foundation.particle.AirParticleData; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.particles.ItemParticleOption; diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java index b98adcac2a..a71ff17bd6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoProjectileRenderMode.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.equipment.potatoCannon; import static com.simibubi.create.content.equipment.potatoCannon.PotatoProjectileRenderMode.entityRandom; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java index 6c8b6e95c1..4bb2fc38ef 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.equipment.symmetryWand; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; @@ -9,6 +8,7 @@ import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRendere import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.util.Mth; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java index eb330dd2da..96fce78468 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/CrossPlaneMirror.java @@ -5,12 +5,12 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java index 7f5f5e34b3..85d79136af 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/EmptyMirror.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java index 0339b1b857..84589b5261 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/PlaneMirror.java @@ -5,12 +5,12 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java index efa66b89e2..a90fb724ca 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/SymmetryMirror.java @@ -5,10 +5,10 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java index 9a2a4abc82..3dd228eadd 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/mirror/TriplePlaneMirror.java @@ -5,10 +5,10 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java index d58ce57d94..cccb3b102d 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/RadialToolboxMenu.java @@ -6,7 +6,6 @@ import java.util.List; import javax.annotation.Nullable; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; @@ -22,6 +21,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.ChatFormatting; import net.minecraft.client.KeyMapping; import net.minecraft.client.gui.GuiGraphics; diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index d4d62ab4aa..347e8943e9 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -2,6 +2,9 @@ package com.simibubi.create.content.equipment.toolbox; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.foundation.utility.Iterate; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; @@ -11,9 +14,6 @@ import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.foundation.utility.Iterate; - import net.minecraft.core.Direction; public class ToolBoxVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { @@ -74,8 +74,8 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual @Override public void updateLight(float partialTick) { - relight(pos, drawers); - relight(pos, lid); + relight(drawers); + relight(lid); } @Override diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java index a846df0374..1411d0302a 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java @@ -4,7 +4,6 @@ import java.util.Collections; import java.util.List; import com.google.common.collect.ImmutableList; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; @@ -18,6 +17,7 @@ import com.simibubi.create.foundation.gui.widget.IconButton; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java index 62f2a17800..e58f374be4 100644 --- a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.equipment.wrench; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; @@ -10,6 +9,7 @@ import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRendere import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java index e91303e7e1..53a7cd2594 100644 --- a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.equipment.zapper.terrainzapper; import static java.lang.Math.max; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.Create; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.item.render.CustomRenderedItemModel; import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.LightTexture; diff --git a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java index 93de0952dc..22bcb65ad7 100644 --- a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.fluids.drain; import java.util.Random; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.content.fluids.transfer.GenericItemEmptying; @@ -14,6 +13,7 @@ import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRende import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java b/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java index e61de76b4c..2344690c5d 100644 --- a/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/hosePulley/HosePulleyRenderer.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.fluids.hosePulley; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.pulley.AbstractPulleyRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java b/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java index 441b1a701b..4824558da3 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/SmartFluidPipeBlockEntity.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.fluids.pipes; import java.util.List; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.fluids.FluidPropagator; import com.simibubi.create.content.fluids.pipes.StraightPipeBlockEntity.StraightPipeFluidTransportBehaviour; @@ -13,6 +12,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringB import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java index 23156e5b50..9cf7f99f19 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.fluids.pipes.valve; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -8,6 +7,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index f273ead4ad..af5c78e858 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -2,6 +2,11 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.content.kinetics.base.ShaftVisual; +import com.simibubi.create.foundation.utility.AngleHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -9,11 +14,6 @@ import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.content.kinetics.base.ShaftVisual; -import com.simibubi.create.foundation.utility.AngleHelper; - import net.minecraft.core.Direction; import net.minecraft.util.Mth; @@ -72,7 +72,7 @@ public class FluidValveVisual extends ShaftVisual impleme @Override public void updateLight(float partialTick) { super.updateLight(partialTick); - relight(pos, pointer); + relight(pointer); } @Override diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index 352df4be0b..c94099d615 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.fluids.pump; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java index 7effeca204..c4502024c3 100644 --- a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.fluids.spout; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour; @@ -9,6 +8,7 @@ import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRender import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.render.CachedBufferer; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java index 22684745c2..28ce39b00d 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.fluids.tank; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -10,6 +9,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.animation.LerpedFloat; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java index 74c748fef6..5a464e698c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/BackHalfShaftVisual.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.kinetics.base; import dev.engine_room.flywheel.api.visualization.VisualizationContext; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java index f1d70425b5..d20ec91a9d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HalfShaftVisual.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.kinetics.base; +import com.simibubi.create.AllPartialModels; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.AllPartialModels; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java index 80b76c8c77..48effc0247 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/HorizontalHalfShaftVisual.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.kinetics.base; import dev.engine_room.flywheel.api.visualization.VisualizationContext; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java index 7d64e5ddfa..ee228ccf6e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java @@ -7,7 +7,6 @@ import java.util.List; import javax.annotation.Nullable; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.Create; import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; import com.simibubi.create.content.equipment.goggles.IHaveHoveringInformation; @@ -28,6 +27,7 @@ import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.ChatFormatting; import net.minecraft.client.resources.language.I18n; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java index 388d188f8b..da80dd7943 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntityVisual.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.kinetics.base; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel; import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java index 7d01abaf9e..f8b716dc82 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticInstance.java @@ -2,11 +2,11 @@ package com.simibubi.create.content.kinetics.base; import org.joml.Vector3f; +import com.simibubi.create.foundation.utility.Color; + import dev.engine_room.flywheel.api.instance.InstanceHandle; import dev.engine_room.flywheel.api.instance.InstanceType; import dev.engine_room.flywheel.lib.instance.ColoredLitInstance; -import com.simibubi.create.foundation.utility.Color; - import net.minecraft.core.BlockPos; public class KineticInstance extends ColoredLitInstance { diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java b/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java index 8ddada0d05..56d998c008 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/RotatingInstance.java @@ -4,7 +4,6 @@ import org.joml.Vector3f; import dev.engine_room.flywheel.api.instance.InstanceHandle; import dev.engine_room.flywheel.api.instance.InstanceType; - import net.minecraft.core.Direction; public class RotatingInstance extends KineticInstance { diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java index 5d7cd588bf..1c4666886e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/ShaftVisual.java @@ -1,8 +1,9 @@ package com.simibubi.create.content.kinetics.base; +import com.simibubi.create.foundation.render.VirtualRenderHelper; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import com.simibubi.create.foundation.render.VirtualRenderHelper; public class ShaftVisual extends SingleRotatingVisual { diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index d40cc781e9..ba5ec60ec3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -27,7 +27,7 @@ public class SingleRotatingVisual extends KineticB @Override public void updateLight(float partialTick) { - relight(pos, rotatingModel); + relight(rotatingModel); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java index 2746bebd63..190378dae9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlockEntity.java @@ -28,22 +28,15 @@ import com.simibubi.create.content.logistics.tunnel.BrassTunnelBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; -import com.simibubi.create.foundation.utility.flywheel.box.Box; -import com.simibubi.create.foundation.utility.flywheel.box.MutableBox; - -import net.minecraft.client.renderer.LightTexture; import net.minecraft.core.BlockPos; -import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; -import net.minecraft.core.SectionPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.world.entity.Entity; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -51,16 +44,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.IItemHandler; public class BeltBlockEntity extends KineticBlockEntity { - public Map passengers; public Optional color; public int beltLength; @@ -75,9 +64,6 @@ public class BeltBlockEntity extends KineticBlockEntity { public CompoundTag trackerUpdateTag; - @OnlyIn(Dist.CLIENT) - public BeltLighter lighter; - public static enum CasingType { NONE, ANDESITE, BRASS; } @@ -116,11 +102,6 @@ public class BeltBlockEntity extends KineticBlockEntity { if (!isController()) return; - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - if (beltLength > 0 && lighter == null) { - lighter = new BeltLighter(); - } - }); invalidateRenderBoundingBox(); getInventory().tick(); @@ -222,7 +203,6 @@ public class BeltBlockEntity extends KineticBlockEntity { @Override protected void read(CompoundTag compound, boolean clientPacket) { - int prevBeltLength = beltLength; super.read(compound, clientPacket); if (compound.getBoolean("IsController")) @@ -237,13 +217,6 @@ public class BeltBlockEntity extends KineticBlockEntity { trackerUpdateTag = compound; index = compound.getInt("Index"); beltLength = compound.getInt("Length"); - if (prevBeltLength != beltLength) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - if (lighter != null) { - lighter.initializeLight(); - } - }); - } } if (isController()) @@ -574,92 +547,6 @@ public class BeltBlockEntity extends KineticBlockEntity { return state != null && state.hasProperty(BeltBlock.PART) && state.getValue(BeltBlock.PART) == BeltPart.START; } - /** - * Hide this behavior in an inner class to avoid loading LightListener on servers. - */ - @OnlyIn(Dist.CLIENT) - class BeltLighter { - private byte[] light; - - public BeltLighter() { - initializeLight(); - } - - /** - * Get the number of belt segments represented by the lighter. - * @return The number of segments. - */ - public int lightSegments() { - return light == null ? 0 : light.length / 2; - } - - /** - * Get the light value for a given segment. - * @param segment The segment to get the light value for. - * @return The light value. - */ - public int getPackedLight(int segment) { - return light == null ? 0 : LightTexture.pack(light[segment * 2], light[segment * 2 + 1]); - } - - public Box getVolume() { - BlockPos endPos = BeltHelper.getPositionForOffset(BeltBlockEntity.this, beltLength - 1); - var bb = MutableBox.from(worldPosition, endPos); - bb.fixMinMax(); - return bb; - } - - public void onLightUpdate(LightLayer type, SectionPos pos) { - if (remove) - return; - if (level == null) - return; - - initializeLight(); - } - - private void initializeLight() { - light = new byte[beltLength * 2]; - - Vec3i vec = getBeltFacing().getNormal(); - BeltSlope slope = getBlockState().getValue(BeltBlock.SLOPE); - int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; - - MutableBlockPos pos = new MutableBlockPos(controller.getX(), controller.getY(), controller.getZ()); - for (int i = 0; i < beltLength * 2; i += 2) { - light[i] = (byte) level.getBrightness(LightLayer.BLOCK, pos); - light[i + 1] = (byte) level.getBrightness(LightLayer.SKY, pos); - pos.move(vec.getX(), verticality, vec.getZ()); - } - } - - private void updateBlockLight() { - Vec3i vec = getBeltFacing().getNormal(); - BeltSlope slope = getBlockState().getValue(BeltBlock.SLOPE); - int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; - - MutableBlockPos pos = new MutableBlockPos(controller.getX(), controller.getY(), controller.getZ()); - for (int i = 0; i < beltLength * 2; i += 2) { - light[i] = (byte) level.getBrightness(LightLayer.BLOCK, pos); - - pos.move(vec.getX(), verticality, vec.getZ()); - } - } - - private void updateSkyLight() { - Vec3i vec = getBeltFacing().getNormal(); - BeltSlope slope = getBlockState().getValue(BeltBlock.SLOPE); - int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; - - MutableBlockPos pos = new MutableBlockPos(controller.getX(), controller.getY(), controller.getZ()); - for (int i = 1; i < beltLength * 2; i += 2) { - light[i] = (byte) level.getBrightness(LightLayer.SKY, pos); - - pos.move(vec.getX(), verticality, vec.getZ()); - } - } - } - public void setCovered(boolean blockCoveringBelt) { if (blockCoveringBelt == covered) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java index 7afda12e6d..1359862b63 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltInstance.java @@ -3,11 +3,11 @@ package com.simibubi.create.content.kinetics.belt; import org.joml.Quaternionf; import org.joml.Quaternionfc; -import dev.engine_room.flywheel.api.instance.InstanceHandle; -import dev.engine_room.flywheel.api.instance.InstanceType; import com.simibubi.create.content.kinetics.base.KineticInstance; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; public class BeltInstance extends KineticInstance { diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index 8139c65dc9..a6fe2ae8fa 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -3,9 +3,6 @@ package com.simibubi.create.content.kinetics.belt; import java.util.Random; import java.util.function.Supplier; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -24,11 +21,16 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; import net.minecraft.core.Vec3i; @@ -192,6 +194,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; boolean slopeAlongX = beltFacing .getAxis() == Direction.Axis.X; + MutableBlockPos mutablePos = new MutableBlockPos(); boolean onContraption = be.getLevel() instanceof WrappedWorld; @@ -236,7 +239,15 @@ public class BeltRenderer extends SafeBlockEntityRenderer { sideOffset *= -1; ms.translate(alongX ? sideOffset : 0, 0, alongX ? 0 : sideOffset); - int stackLight = onContraption ? light : getPackedLight(be, offset); + int stackLight; + if (onContraption) { + stackLight = light; + } else { + int segment = (int) Math.floor(offset); + mutablePos.set(be.getBlockPos()).move(directionVec.getX() * segment, verticality * segment, directionVec.getZ() * segment); + stackLight = LevelRenderer.getLightColor(be.getLevel(), mutablePos); + } + ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); boolean renderUpright = BeltHelper.isItemUpright(transported.stack); @@ -304,13 +315,4 @@ public class BeltRenderer extends SafeBlockEntityRenderer { } ms.popPose(); } - - protected int getPackedLight(BeltBlockEntity controller, float beltPos) { - int segment = (int) Math.floor(beltPos); - if (controller.lighter == null || segment >= controller.lighter.lightSegments() || segment < 0) - return 0; - - return controller.lighter.getPackedLight(segment); - } - } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index eb82bc8803..625c790927 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -3,17 +3,8 @@ package com.simibubi.create.content.kinetics.belt; import java.util.ArrayList; import java.util.function.Consumer; -import dev.engine_room.flywheel.lib.instance.FlatLit; - import org.joml.Quaternionf; -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.instance.Instancer; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.instance.AbstractInstance; -import dev.engine_room.flywheel.lib.model.Models; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; @@ -22,6 +13,14 @@ import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.item.DyeColor; @@ -102,9 +101,9 @@ public class BeltVisual extends KineticBlockEntityVisual { @Override public void updateLight(float partialTick) { - relight(pos, keys.toArray(FlatLit[]::new)); + relight(keys.toArray(FlatLit[]::new)); - if (pulleyKey != null) relight(pos, pulleyKey); + if (pulleyKey != null) relight(pulleyKey); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java index dfa4545ef7..985e3989d4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/clock/CuckooClockRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.kinetics.clock; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -10,6 +9,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java index f85ee6bb31..146539b5c2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterRenderer.java @@ -3,9 +3,6 @@ package com.simibubi.create.content.kinetics.crafter; import static com.simibubi.create.content.kinetics.base.HorizontalKineticBlock.HORIZONTAL_FACING; import static com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer.standardKineticRotationTransform; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -20,6 +17,9 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Pointing; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java index f5db9293d9..2707f3795e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/ShaftlessCogwheelVisual.java @@ -1,14 +1,14 @@ package com.simibubi.create.content.kinetics.crafter; -import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.model.Models; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; public class ShaftlessCogwheelVisual extends SingleRotatingVisual { diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java index 4407bd44aa..3e9bab1353 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankBlockEntity.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.kinetics.crank; -import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllSoundEvents; @@ -10,6 +8,8 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java index a8042c1ead..7dbfdad3be 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankRenderer.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.kinetics.crank; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index d4f4360b54..203d8ee3e6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -69,7 +69,7 @@ public class HandCrankVisual extends KineticBlockEntityVisual implements @Override public void updateLight(float partialTick) { super.updateLight(partialTick); - relight(pos, hand, pole); + relight(hand, pole); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index f42444f5e9..0ebdad2e87 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.kinetics.drill; import org.joml.Quaternionf; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -13,6 +11,8 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java index 5db9c48dcc..d98bb572c2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillMovementBehaviour.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.kinetics.drill; import javax.annotation.Nullable; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.render.ActorVisual; @@ -13,6 +11,8 @@ import com.simibubi.create.foundation.damageTypes.CreateDamageSources; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.BlockPos; import net.minecraft.world.damagesource.DamageSource; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java index c3fde3d4e1..1d5dbb60c1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillVisual.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.kinetics.drill; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java index ec6c782cb2..2a1a030f77 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java @@ -4,14 +4,14 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert import java.util.function.Consumer; -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java index a80eca8209..047f649c3e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.kinetics.flywheel; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -8,6 +7,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index 0f7d332c53..930f952d19 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -2,6 +2,13 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; +import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.render.VirtualRenderHelper; +import com.simibubi.create.foundation.utility.AngleHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -9,13 +16,6 @@ import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.transform.TransformStack; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; -import com.simibubi.create.content.kinetics.base.RotatingInstance; -import com.simibubi.create.foundation.render.AllInstanceTypes; -import com.simibubi.create.foundation.render.VirtualRenderHelper; -import com.simibubi.create.foundation.utility.AngleHelper; - import net.minecraft.core.Direction; public class FlywheelVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { @@ -71,7 +71,7 @@ public class FlywheelVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { - protected final ArrayList faces = new ArrayList<>(2); + protected final ArrayList faces = new ArrayList<>(2); - protected final PoseStack ms = new PoseStack(); + protected final PoseStack ms = new PoseStack(); - protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { - super(context, blockEntity, partialTick); - init(); - } + protected GaugeVisual(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); - public void init() { GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); @@ -58,120 +55,120 @@ public abstract class GaugeVisual extends ShaftVisual implemen } private DialFace makeFace(Direction face, Instancer dialModel, Instancer headModel) { - return new DialFace(face, dialModel.createInstance(), headModel.createInstance()); - } + return new DialFace(face, dialModel.createInstance(), headModel.createInstance()); + } - @Override - public void beginFrame(DynamicVisual.Context ctx) { - if (Mth.equal(blockEntity.prevDialState, blockEntity.dialState)) - return; + @Override + public void beginFrame(DynamicVisual.Context ctx) { + if (Mth.equal(blockEntity.prevDialState, blockEntity.dialState)) + return; - float progress = Mth.lerp(ctx.partialTick(), blockEntity.prevDialState, blockEntity.dialState); + float progress = Mth.lerp(ctx.partialTick(), blockEntity.prevDialState, blockEntity.dialState); - var msr = TransformStack.of(ms); + var msr = TransformStack.of(ms); - for (DialFace faceEntry : faces) { - faceEntry.updateTransform(msr, progress); - } - } + for (DialFace faceEntry : faces) { + faceEntry.updateTransform(msr, progress); + } + } - @Override - public void updateLight(float partialTick) { - super.updateLight(partialTick); + @Override + public void updateLight(float partialTick) { + super.updateLight(partialTick); - relight(pos, faces.stream() + relight(faces.stream() .flatMap(Couple::stream).toArray(FlatLit[]::new)); - } + } - @Override - protected void _delete() { - super._delete(); + @Override + protected void _delete() { + super._delete(); - faces.forEach(DialFace::delete); - } + faces.forEach(DialFace::delete); + } @Override public void collectCrumblingInstances(Consumer consumer) { super.collectCrumblingInstances(consumer); - for (DialFace face : faces) { - face.forEach(consumer); - } - } + for (DialFace face : faces) { + face.forEach(consumer); + } + } protected abstract Instancer getHeadModel(); - protected class DialFace extends Couple { + protected class DialFace extends Couple { - Direction face; + Direction face; - public DialFace(Direction face, TransformedInstance first, TransformedInstance second) { - super(first, second); - this.face = face; - } + public DialFace(Direction face, TransformedInstance first, TransformedInstance second) { + super(first, second); + this.face = face; + } - private void setupTransform(TransformStack msr, float progress) { - float dialPivot = 5.75f / 16; + private void setupTransform(TransformStack msr, float progress) { + float dialPivot = 5.75f / 16; - msr.pushPose(); - rotateToFace(msr); + msr.pushPose(); + rotateToFace(msr); - getSecond().setTransform(ms).setChanged(); + getSecond().setTransform(ms).setChanged(); - msr.translate(0, dialPivot, dialPivot) - .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) - .translate(0, -dialPivot, -dialPivot); + msr.translate(0, dialPivot, dialPivot) + .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) + .translate(0, -dialPivot, -dialPivot); - getFirst().setTransform(ms).setChanged(); + getFirst().setTransform(ms).setChanged(); - msr.popPose(); - } + msr.popPose(); + } - private void updateTransform(TransformStack msr, float progress) { - float dialPivot = 5.75f / 16; + private void updateTransform(TransformStack msr, float progress) { + float dialPivot = 5.75f / 16; - msr.pushPose(); + msr.pushPose(); - rotateToFace(msr) - .translate(0, dialPivot, dialPivot) - .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) - .translate(0, -dialPivot, -dialPivot); + rotateToFace(msr) + .translate(0, dialPivot, dialPivot) + .rotate((float) (Math.PI / 2 * -progress), Direction.EAST) + .translate(0, -dialPivot, -dialPivot); - getFirst().setTransform(ms).setChanged(); + getFirst().setTransform(ms).setChanged(); - msr.popPose(); - } + msr.popPose(); + } - protected TransformStack rotateToFace(TransformStack msr) { - return msr.center() - .rotate((float) ((-face.toYRot() - 90) / 180 * Math.PI), Direction.UP) - .uncenter(); - } + protected TransformStack rotateToFace(TransformStack msr) { + return msr.center() + .rotate((float) ((-face.toYRot() - 90) / 180 * Math.PI), Direction.UP) + .uncenter(); + } - private void delete() { - getFirst().delete(); - getSecond().delete(); - } - } + private void delete() { + getFirst().delete(); + getSecond().delete(); + } + } - public static class Speed extends GaugeVisual { - public Speed(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { - super(context, blockEntity, partialTick); - } + public static class Speed extends GaugeVisual { + public Speed(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); + } - @Override - protected Instancer getHeadModel() { - return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED)); - } - } + @Override + protected Instancer getHeadModel() { + return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED)); + } + } - public static class Stress extends GaugeVisual { - public Stress(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { - super(context, blockEntity, partialTick); - } + public static class Stress extends GaugeVisual { + public Stress(VisualizationContext context, GaugeBlockEntity blockEntity, float partialTick) { + super(context, blockEntity, partialTick); + } - @Override - protected Instancer getHeadModel() { - return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS)); - } - } + @Override + protected Instancer getHeadModel() { + return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS)); + } + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java index 646992fc51..4f0f4854d0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.kinetics.gearbox; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; @@ -9,6 +8,7 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index be8dfa0adf..eaf39e2151 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -4,17 +4,17 @@ import java.util.EnumMap; import java.util.Map; import java.util.function.Consumer; -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.instance.AbstractInstance; -import dev.engine_room.flywheel.lib.instance.FlatLit; -import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.AbstractInstance; +import dev.engine_room.flywheel.lib.instance.FlatLit; +import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; @@ -89,7 +89,7 @@ public class GearboxVisual extends KineticBlockEntityVisual @Override public void updateLight(float partialTick) { - relight(pos, keys.values().toArray(FlatLit[]::new)); + relight(keys.values().toArray(FlatLit[]::new)); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java index e04fa6a581..f66690ddfa 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java @@ -5,7 +5,6 @@ import java.util.List; import javax.annotation.Nullable; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.ITransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; @@ -26,6 +25,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.SectionPos; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java index 81ade8abad..ee439a38eb 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmRenderer.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.kinetics.mechanicalArm; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -13,6 +11,8 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Iterate; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index e76c624933..dc8e5aae22 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -4,6 +4,13 @@ import java.util.ArrayList; import java.util.function.Consumer; import com.google.common.collect.Lists; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.Color; +import com.simibubi.create.foundation.utility.Iterate; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visual.DynamicVisual; @@ -15,13 +22,6 @@ import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.transform.TransformStack; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; -import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.Color; -import com.simibubi.create.foundation.utility.Iterate; - import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.util.Mth; @@ -186,7 +186,7 @@ public class ArmVisual extends SingleRotatingVisual implements S public void updateLight(float partialTick) { super.updateLight(partialTick); - relight(pos, models.toArray(FlatLit[]::new)); + relight(models.toArray(FlatLit[]::new)); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java index f934bf5e22..cc2a6aea18 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/millstone/MillstoneCogVisual.java @@ -1,10 +1,11 @@ package com.simibubi.create.content.kinetics.millstone; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.model.Models; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; public class MillstoneCogVisual extends SingleRotatingVisual { diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java index 7c9750c9a4..297c94024d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MechanicalMixerRenderer.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.kinetics.mixer; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -9,6 +8,7 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 5305f20019..83275c57e2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -2,6 +2,11 @@ package com.simibubi.create.content.kinetics.mixer; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.RotatingInstance; +import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogVisual; +import com.simibubi.create.foundation.render.AllInstanceTypes; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.visual.DynamicVisual; @@ -10,11 +15,6 @@ import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.OrientedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.RotatingInstance; -import com.simibubi.create.content.kinetics.simpleRelays.encased.EncasedCogVisual; -import com.simibubi.create.foundation.render.AllInstanceTypes; - import net.minecraft.core.Direction; public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual { @@ -75,7 +75,7 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual super.updateLight(partialTick); relight(pos.below(), mixerHead); - relight(pos, mixerPole); + relight(mixerPole); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java index dd09e38b0f..9de85be0f7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/motor/CreativeMotorBlockEntity.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.kinetics.motor; import java.util.List; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; @@ -13,6 +12,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java index 8c3f98448a..8f80fe23bb 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/MechanicalPressRenderer.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.kinetics.press; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 91adb2a237..b1779e1096 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -4,6 +4,11 @@ import java.util.function.Consumer; import org.joml.Quaternionf; +import com.mojang.math.Axis; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.ShaftVisual; +import com.simibubi.create.foundation.utility.AngleHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -11,10 +16,6 @@ import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.OrientedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.mojang.math.Axis; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.ShaftVisual; -import com.simibubi.create.foundation.utility.AngleHelper; public class PressVisual extends ShaftVisual implements SimpleDynamicVisual { @@ -56,8 +57,7 @@ public class PressVisual extends ShaftVisual impleme @Override public void updateLight(float partialTick) { super.updateLight(partialTick); - - relight(pos, pressHead); + relight(pressHead); } @Override diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java index 74385a0596..dfa8ed72db 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawFilterSlot.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.kinetics.saw; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; diff --git a/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java index 418e619fc6..fc6a29aab7 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/saw/SawVisual.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.kinetics.saw; -import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.model.Models; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.render.VirtualRenderHelper; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index c901e549a6..35af391de0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -2,12 +2,6 @@ package com.simibubi.create.content.kinetics.simpleRelays; import java.util.function.Consumer; -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.instance.Instancer; -import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.model.Models; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.AllPartialModels; @@ -16,6 +10,12 @@ import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.base.SingleRotatingVisual; import com.simibubi.create.foundation.render.AllInstanceTypes; +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.instance.Instancer; +import dev.engine_room.flywheel.api.model.Model; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.model.Models; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.AxisDirection; @@ -79,7 +79,7 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual rotatingTopShaft; - protected Optional rotatingBottomShaft; + protected final RotatingInstance rotatingModel; + @Nullable + protected final RotatingInstance rotatingTopShaft; + @Nullable + protected final RotatingInstance rotatingBottomShaft; public static EncasedCogVisual small(VisualizationContext modelManager, KineticBlockEntity blockEntity, float partialTick) { return new EncasedCogVisual(modelManager, blockEntity, false, partialTick); @@ -47,53 +49,51 @@ public class EncasedCogVisual extends KineticBlockEntityVisual relight(pos, d)); - rotatingBottomShaft.ifPresent(d -> relight(pos, d)); + relight(rotatingModel, rotatingTopShaft, rotatingBottomShaft); } @Override protected void _delete() { rotatingModel.delete(); - rotatingTopShaft.ifPresent(AbstractInstance::delete); - rotatingBottomShaft.ifPresent(AbstractInstance::delete); + if (rotatingTopShaft != null) rotatingTopShaft.delete(); + if (rotatingBottomShaft != null) rotatingBottomShaft.delete(); } protected Model getCogModel() { @@ -114,9 +114,9 @@ public class EncasedCogVisual extends KineticBlockEntityVisual consumer) { + public void collectCrumblingInstances(Consumer<@Nullable Instance> consumer) { consumer.accept(rotatingModel); - rotatingTopShaft.ifPresent(consumer); - rotatingBottomShaft.ifPresent(consumer); + consumer.accept(rotatingTopShaft); + consumer.accept(rotatingBottomShaft); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java index 904fc2927c..e797a611e0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineRenderer.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.kinetics.steamEngine; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -11,6 +9,8 @@ import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java index 809a079f2f..e880153b14 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineValueBox.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.kinetics.steamEngine; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Pointing; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index bb36fefea5..b0d2e2270d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -2,6 +2,10 @@ package com.simibubi.create.content.kinetics.steamEngine; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.foundation.utility.AngleHelper; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -10,10 +14,6 @@ import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; -import com.simibubi.create.foundation.utility.AngleHelper; - import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.util.Mth; @@ -92,7 +92,7 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual extends KineticBl @Override public void updateLight(float partialTick) { - relight(pos, rotatingModel); + relight(rotatingModel); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java index 7c59a0d00e..3b3f2c219e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteRenderer.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.logistics.chute; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.logistics.chute.ChuteBlock.Shape; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java index 2dc5462d25..d2327aae1e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/crate/CreativeCrateBlockEntity.java @@ -2,13 +2,13 @@ package com.simibubi.create.content.logistics.crate; import java.util.List; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.entity.BlockEntityType; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java index b9a6994589..f8db27de5c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/DepotRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.logistics.depot; import java.util.Random; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.belt.BeltHelper; @@ -11,6 +10,7 @@ import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java index e3585a4edf..ab778e3978 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorBlockEntity.java @@ -6,7 +6,6 @@ import java.util.List; import javax.annotation.Nullable; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; @@ -29,6 +28,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index 27c2aaeef9..8b38caa1c0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -2,6 +2,9 @@ package com.simibubi.create.content.logistics.depot; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.ShaftVisual; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -9,8 +12,6 @@ import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.kinetics.base.ShaftVisual; public class EjectorVisual extends ShaftVisual implements SimpleDynamicVisual { @@ -41,7 +42,7 @@ public class EjectorVisual extends ShaftVisual implements Si @Override public void updateLight(float partialTick) { super.updateLight(partialTick); - relight(pos, plate); + relight(plate); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java index 6e216de33e..30e5251262 100644 --- a/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/flwdata/FlapInstance.java @@ -6,7 +6,6 @@ import dev.engine_room.flywheel.api.instance.InstanceHandle; import dev.engine_room.flywheel.api.instance.InstanceType; import dev.engine_room.flywheel.lib.instance.AbstractInstance; import dev.engine_room.flywheel.lib.instance.FlatLit; - import net.minecraft.client.renderer.LightTexture; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java index 3331b3394c..9aadd7ef68 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java @@ -5,7 +5,6 @@ import java.util.List; import org.apache.commons.lang3.mutable.MutableBoolean; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllSoundEvents; @@ -28,6 +27,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java index 65e4426144..671d459261 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelFilterSlotPositioning.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.logistics.funnel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.logistics.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java index d0bb5fc968..4be0b1b428 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelRenderer.java @@ -1,8 +1,5 @@ package com.simibubi.create.content.logistics.funnel; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -12,6 +9,9 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 9cebffcfca..527d2d48bb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -3,6 +3,11 @@ package com.simibubi.create.content.logistics.funnel; import java.util.ArrayList; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.logistics.flwdata.FlapInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; @@ -13,11 +18,6 @@ import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.model.baked.PartialModel; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.logistics.flwdata.FlapInstance; -import com.simibubi.create.foundation.render.AllInstanceTypes; -import com.simibubi.create.foundation.utility.AnimationTickHolder; - import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; @@ -79,7 +79,7 @@ public class FunnelVisual extends AbstractBlockEntityVisual i @Override public void updateLight(float partialTick) { if (flaps != null) - relight(pos, flaps.toArray(FlatLit[]::new)); + relight(flaps.toArray(FlatLit[]::new)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java index 54de554f03..6d12475976 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java @@ -9,7 +9,6 @@ import java.util.Set; import org.apache.commons.lang3.tuple.Pair; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.content.logistics.funnel.BeltFunnelBlock; @@ -20,6 +19,7 @@ import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java index 90895cc306..6cfa1c5c49 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelRenderer.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.logistics.tunnel; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllPartialModels; @@ -12,6 +10,8 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 452a1d6696..288dbf54dc 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -6,6 +6,11 @@ import java.util.EnumMap; import java.util.Map; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.logistics.flwdata.FlapInstance; +import com.simibubi.create.foundation.render.AllInstanceTypes; +import com.simibubi.create.foundation.utility.animation.LerpedFloat; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; @@ -15,11 +20,6 @@ import dev.engine_room.flywheel.lib.instance.FlatLit; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.content.logistics.flwdata.FlapInstance; -import com.simibubi.create.foundation.render.AllInstanceTypes; -import com.simibubi.create.foundation.utility.animation.LerpedFloat; - import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; @@ -97,7 +97,7 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual & Rotate> T transform(T msr) { diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java index fb7f9768dd..c7306af4e3 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeScrollSlot.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.redstone.diodes; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java index 9edd6d8cb3..76b42ec019 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java @@ -2,6 +2,9 @@ package com.simibubi.create.content.redstone.diodes; import java.util.function.Consumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.foundation.utility.Color; + import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visual.TickableVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -10,8 +13,6 @@ import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleTickableVisual; -import com.simibubi.create.AllPartialModels; -import com.simibubi.create.foundation.utility.Color; public class BrassDiodeVisual extends AbstractBlockEntityVisual implements SimpleTickableVisual { @@ -44,7 +45,7 @@ public class BrassDiodeVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { @@ -71,7 +71,7 @@ public class SchematicannonVisual extends AbstractBlockEntityVisual { private final PoseStack ms = new PoseStack(); @@ -27,13 +28,12 @@ public class CarriageContraptionVisual extends ContraptionVisual bogey.getStyle() .createVisual(bogey, bogey.type.getSize(), manager), visualizationContext); - updateLight(pt); } super.init(pt); @@ -47,20 +47,22 @@ public class CarriageContraptionVisual extends ContraptionVisual> 16 & 0xFFFF)); - MemoryUtil.memPutInt(ptr + 8, instance.overlay); + ExtraMemoryOps.put2x16(ptr + 4, instance.light); + ExtraMemoryOps.put2x16(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); MemoryUtil.memPutFloat(ptr + 16, instance.y); MemoryUtil.memPutFloat(ptr + 20, instance.z); @@ -70,18 +70,14 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, (short) (instance.light & 0xFFFF)); - MemoryUtil.memPutShort(ptr + 6, (short) (instance.light >> 16 & 0xFFFF)); - MemoryUtil.memPutInt(ptr + 8, instance.overlay); + ExtraMemoryOps.put2x16(ptr + 4, instance.light); + ExtraMemoryOps.put2x16(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); MemoryUtil.memPutFloat(ptr + 16, instance.y); MemoryUtil.memPutFloat(ptr + 20, instance.z); MemoryUtil.memPutFloat(ptr + 24, instance.rotationalSpeed); MemoryUtil.memPutFloat(ptr + 28, instance.rotationOffset); - MemoryUtil.memPutFloat(ptr + 32, instance.rotation.x); - MemoryUtil.memPutFloat(ptr + 36, instance.rotation.y); - MemoryUtil.memPutFloat(ptr + 40, instance.rotation.z); - MemoryUtil.memPutFloat(ptr + 44, instance.rotation.w); + ExtraMemoryOps.putQuaternionf(ptr + 32, instance.rotation); MemoryUtil.memPutFloat(ptr + 48, instance.sourceU); MemoryUtil.memPutFloat(ptr + 52, instance.sourceV); MemoryUtil.memPutFloat(ptr + 56, instance.minU); @@ -114,10 +110,7 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisX); MemoryUtil.memPutByte(ptr + 21, instance.rotationAxisY); MemoryUtil.memPutByte(ptr + 22, instance.rotationAxisZ); - MemoryUtil.memPutFloat(ptr + 24, instance.rotation.x); - MemoryUtil.memPutFloat(ptr + 28, instance.rotation.y); - MemoryUtil.memPutFloat(ptr + 32, instance.rotation.z); - MemoryUtil.memPutFloat(ptr + 36, instance.rotation.w); + ExtraMemoryOps.putQuaternionf(ptr + 24, instance.rotation); MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterX); MemoryUtil.memPutByte(ptr + 41, instance.rotationCenterY); MemoryUtil.memPutByte(ptr + 42, instance.rotationCenterZ); @@ -143,8 +136,7 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr, instance.x); MemoryUtil.memPutFloat(ptr + 4, instance.y); MemoryUtil.memPutFloat(ptr + 8, instance.z); - MemoryUtil.memPutShort(ptr + 12, (short) (instance.packedLight & 0xFFFF)); - MemoryUtil.memPutShort(ptr + 14, (short) (instance.packedLight >> 16 & 0xFFFF)); + ExtraMemoryOps.put2x16(ptr + 12, instance.packedLight); MemoryUtil.memPutFloat(ptr + 16, instance.segmentOffsetX); MemoryUtil.memPutFloat(ptr + 20, instance.segmentOffsetY); MemoryUtil.memPutFloat(ptr + 24, instance.segmentOffsetZ); diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 8f57a794e7..47cf0ebe8f 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -7,9 +7,6 @@ import javax.annotation.Nullable; import org.joml.Matrix4f; import org.joml.Vector4f; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; -import dev.engine_room.flywheel.lib.transform.TransformStack; -import dev.engine_room.flywheel.lib.visual.VisualizationHelper; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -17,6 +14,9 @@ import com.simibubi.create.foundation.utility.RegisteredObjects; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; import com.simibubi.create.infrastructure.config.AllConfigs; +import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.transform.TransformStack; +import dev.engine_room.flywheel.lib.visual.VisualizationHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java index fe7ccb4d33..528dc7f91b 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/CachedBufferer.java @@ -6,13 +6,13 @@ import java.util.function.Supplier; import org.apache.commons.lang3.tuple.Pair; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.render.SuperByteBufferCache.Compartment; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index 7b2cb55a74..7099e537da 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -4,13 +4,13 @@ import java.nio.ByteBuffer; import org.jetbrains.annotations.Nullable; +import com.mojang.blaze3d.vertex.PoseStack; + import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.lib.model.ModelCache; import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.baked.ForgeBakedModelBuilder; import dev.engine_room.flywheel.lib.model.baked.VirtualEmptyBlockGetter; -import com.mojang.blaze3d.vertex.PoseStack; - import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; diff --git a/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java b/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java deleted file mode 100644 index 2259c5f73d..0000000000 --- a/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/Box.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.simibubi.create.foundation.utility.flywheel.box; - -import net.minecraft.util.Mth; -import net.minecraft.world.phys.AABB; - -public interface Box { - int getMinX(); - - int getMinY(); - - int getMinZ(); - - int getMaxX(); - - int getMaxY(); - - int getMaxZ(); - - default int sizeX() { - return getMaxX() - getMinX(); - } - - default int sizeY() { - return getMaxY() - getMinY(); - } - - default int sizeZ() { - return getMaxZ() - getMinZ(); - } - - default int volume() { - return sizeX() * sizeY() * sizeZ(); - } - - default boolean isEmpty() { - // if any dimension has side length 0 this box contains no volume - return getMinX() == getMaxX() || getMinY() == getMaxY() || getMinZ() == getMaxZ(); - } - - default boolean sameAs(Box other) { - return getMinX() == other.getMinX() && getMinY() == other.getMinY() && getMinZ() == other.getMinZ() && getMaxX() == other.getMaxX() && getMaxY() == other.getMaxY() && getMaxZ() == other.getMaxZ(); - } - - default boolean sameAs(Box other, int margin) { - return getMinX() == other.getMinX() - margin && - getMinY() == other.getMinY() - margin && - getMinZ() == other.getMinZ() - margin && - getMaxX() == other.getMaxX() + margin && - getMaxY() == other.getMaxY() + margin && - getMaxZ() == other.getMaxZ() + margin; - } - - default boolean sameAs(AABB other) { - return getMinX() == Math.floor(other.minX) - && getMinY() == Math.floor(other.minY) - && getMinZ() == Math.floor(other.minZ) - && getMaxX() == Math.ceil(other.maxX) - && getMaxY() == Math.ceil(other.maxY) - && getMaxZ() == Math.ceil(other.maxZ); - } - - default boolean intersects(int minX, int minY, int minZ, int maxX, int maxY, int maxZ) { - return this.getMinX() < maxX && this.getMaxX() > minX && this.getMinY() < maxY && this.getMaxY() > minY && this.getMinZ() < maxZ && this.getMaxZ() > minZ; - } - - default boolean intersects(Box other) { - return this.intersects(other.getMinX(), other.getMinY(), other.getMinZ(), other.getMaxX(), other.getMaxY(), other.getMaxZ()); - } - - default boolean contains(int x, int y, int z) { - return x >= getMinX() - && x <= getMaxX() - && y >= getMinY() - && y <= getMaxY() - && z >= getMinZ() - && z <= getMaxZ(); - } - - default boolean contains(Box other) { - return other.getMinX() >= this.getMinX() - && other.getMaxX() <= this.getMaxX() - && other.getMinY() >= this.getMinY() - && other.getMaxY() <= this.getMaxY() - && other.getMinZ() >= this.getMinZ() - && other.getMaxZ() <= this.getMaxZ(); - } - - default void forEachContained(CoordinateConsumer func) { - int minX = getMinX(); - int minY = getMinY(); - int minZ = getMinZ(); - int maxX = getMaxX(); - int maxY = getMaxY(); - int maxZ = getMaxZ(); - - for (int x = minX; x < maxX; x++) { - for (int y = minY; y < maxY; y++) { - for (int z = minZ; z < maxZ; z++) { - func.accept(x, y, z); - } - } - } - } - - default boolean hasPowerOf2Sides() { - // this is only true if all individual side lengths are powers of 2 - return Mth.isPowerOfTwo(volume()); - } - - default MutableBox union(Box other) { - int minX = Math.min(this.getMinX(), other.getMinX()); - int minY = Math.min(this.getMinY(), other.getMinY()); - int minZ = Math.min(this.getMinZ(), other.getMinZ()); - int maxX = Math.max(this.getMaxX(), other.getMaxX()); - int maxY = Math.max(this.getMaxY(), other.getMaxY()); - int maxZ = Math.max(this.getMaxZ(), other.getMaxZ()); - return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); - } - - default MutableBox intersect(Box other) { - int minX = Math.max(this.getMinX(), other.getMinX()); - int minY = Math.max(this.getMinY(), other.getMinY()); - int minZ = Math.max(this.getMinZ(), other.getMinZ()); - int maxX = Math.min(this.getMaxX(), other.getMaxX()); - int maxY = Math.min(this.getMaxY(), other.getMaxY()); - int maxZ = Math.min(this.getMaxZ(), other.getMaxZ()); - return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); - } - - default AABB toAABB() { - return new AABB(getMinX(), getMinY(), getMinZ(), getMaxX(), getMaxY(), getMaxZ()); - } - - default MutableBox copy() { - return new MutableBox(getMinX(), getMinY(), getMinZ(), getMaxX(), getMaxY(), getMaxZ()); - } - - @FunctionalInterface - interface CoordinateConsumer { - void accept(int x, int y, int z); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java b/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java deleted file mode 100644 index 85d77f9d06..0000000000 --- a/src/main/java/com/simibubi/create/foundation/utility/flywheel/box/MutableBox.java +++ /dev/null @@ -1,329 +0,0 @@ -package com.simibubi.create.foundation.utility.flywheel.box; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.SectionPos; -import net.minecraft.core.Vec3i; -import net.minecraft.util.Mth; -import net.minecraft.world.phys.AABB; - -import java.util.Collection; - -public class MutableBox implements Box { - protected int minX; - protected int minY; - protected int minZ; - protected int maxX; - protected int maxY; - protected int maxZ; - - public MutableBox() { - } - - public MutableBox(int minX, int minY, int minZ, int maxX, int maxY, int maxZ) { - this.minX = minX; - this.minY = minY; - this.minZ = minZ; - this.maxX = maxX; - this.maxY = maxY; - this.maxZ = maxZ; - } - - public static MutableBox from(AABB aabb) { - int minX = (int) Math.floor(aabb.minX); - int minY = (int) Math.floor(aabb.minY); - int minZ = (int) Math.floor(aabb.minZ); - int maxX = (int) Math.ceil(aabb.maxX); - int maxY = (int) Math.ceil(aabb.maxY); - int maxZ = (int) Math.ceil(aabb.maxZ); - return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); - } - - public static MutableBox from(Vec3i pos) { - return new MutableBox(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); - } - - public static MutableBox from(SectionPos pos) { - return new MutableBox(pos.minBlockX(), pos.minBlockY(), pos.minBlockZ(), pos.maxBlockX() + 1, pos.maxBlockY() + 1, pos.maxBlockZ() + 1); - } - - public static MutableBox from(Vec3i start, Vec3i end) { - return new MutableBox(start.getX(), start.getY(), start.getZ(), end.getX() + 1, end.getY() + 1, end.getZ() + 1); - } - - public static MutableBox ofRadius(int radius) { - return new MutableBox(-radius, -radius, -radius, radius + 1, radius + 1, radius + 1); - } - - public static Box containingAll(Collection positions) { - if (positions.isEmpty()) { - return new MutableBox(); - } - int minX = Integer.MAX_VALUE; - int minY = Integer.MAX_VALUE; - int minZ = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int maxY = Integer.MIN_VALUE; - int maxZ = Integer.MIN_VALUE; - for (BlockPos pos : positions) { - minX = Math.min(minX, pos.getX()); - minY = Math.min(minY, pos.getY()); - minZ = Math.min(minZ, pos.getZ()); - maxX = Math.max(maxX, pos.getX()); - maxY = Math.max(maxY, pos.getY()); - maxZ = Math.max(maxZ, pos.getZ()); - } - return new MutableBox(minX, minY, minZ, maxX, maxY, maxZ); - } - - @Override - public int getMinX() { - return minX; - } - - @Override - public int getMinY() { - return minY; - } - - @Override - public int getMinZ() { - return minZ; - } - - @Override - public int getMaxX() { - return maxX; - } - - @Override - public int getMaxY() { - return maxY; - } - - @Override - public int getMaxZ() { - return maxZ; - } - - public void setMinX(int minX) { - this.minX = minX; - } - - public void setMinY(int minY) { - this.minY = minY; - } - - public MutableBox setMinZ(int minZ) { - this.minZ = minZ; - return this; - } - - public void setMaxX(int maxX) { - this.maxX = maxX; - } - - public void setMaxY(int maxY) { - this.maxY = maxY; - } - - public void setMaxZ(int maxZ) { - this.maxZ = maxZ; - } - - public void setMin(int x, int y, int z) { - minX = x; - minY = y; - minZ = z; - } - - public void setMax(int x, int y, int z) { - maxX = x; - maxY = y; - maxZ = z; - } - - public void setMin(Vec3i v) { - setMin(v.getX(), v.getY(), v.getZ()); - } - - public void setMax(Vec3i v) { - setMax(v.getX(), v.getY(), v.getZ()); - } - - public void assign(Box other) { - minX = other.getMinX(); - minY = other.getMinY(); - minZ = other.getMinZ(); - maxX = other.getMaxX(); - maxY = other.getMaxY(); - maxZ = other.getMaxZ(); - } - - public void assign(AABB other) { - minX = (int) Math.floor(other.minX); - minY = (int) Math.floor(other.minY); - minZ = (int) Math.floor(other.minZ); - maxX = (int) Math.ceil(other.maxX); - maxY = (int) Math.ceil(other.maxY); - maxZ = (int) Math.ceil(other.maxZ); - } - - public void assign(Vec3i start, Vec3i end) { - minX = start.getX(); - minY = start.getY(); - minZ = start.getZ(); - maxX = end.getX() + 1; - maxY = end.getY() + 1; - maxZ = end.getZ() + 1; - } - - public void unionAssign(Box other) { - minX = Math.min(this.minX, other.getMinX()); - minY = Math.min(this.minY, other.getMinY()); - minZ = Math.min(this.minZ, other.getMinZ()); - maxX = Math.max(this.maxX, other.getMaxX()); - maxY = Math.max(this.maxY, other.getMaxY()); - maxZ = Math.max(this.maxZ, other.getMaxZ()); - } - - public void unionAssign(AABB other) { - minX = Math.min(this.minX, (int) Math.floor(other.minX)); - minY = Math.min(this.minY, (int) Math.floor(other.minY)); - minZ = Math.min(this.minZ, (int) Math.floor(other.minZ)); - maxX = Math.max(this.maxX, (int) Math.ceil(other.maxX)); - maxY = Math.max(this.maxY, (int) Math.ceil(other.maxY)); - maxZ = Math.max(this.maxZ, (int) Math.ceil(other.maxZ)); - } - - public void intersectAssign(Box other) { - minX = Math.max(this.minX, other.getMinX()); - minY = Math.max(this.minY, other.getMinY()); - minZ = Math.max(this.minZ, other.getMinZ()); - maxX = Math.min(this.maxX, other.getMaxX()); - maxY = Math.min(this.maxY, other.getMaxY()); - maxZ = Math.min(this.maxZ, other.getMaxZ()); - } - - public void fixMinMax() { - int minX = Math.min(this.minX, this.maxX); - int minY = Math.min(this.minY, this.maxY); - int minZ = Math.min(this.minZ, this.maxZ); - int maxX = Math.max(this.minX, this.maxX); - int maxY = Math.max(this.minY, this.maxY); - int maxZ = Math.max(this.minZ, this.maxZ); - - this.minX = minX; - this.minY = minY; - this.minZ = minZ; - this.maxX = maxX; - this.maxY = maxY; - this.maxZ = maxZ; - } - - public void translate(int x, int y, int z) { - minX = minX + x; - maxX = maxX + x; - minY = minY + y; - maxY = maxY + y; - minZ = minZ + z; - maxZ = maxZ + z; - } - - public void translate(Vec3i by) { - translate(by.getX(), by.getY(), by.getZ()); - } - - public void grow(int x, int y, int z) { - minX = minX - x; - minY = minY - y; - minZ = minZ - z; - maxX = maxX + x; - maxY = maxY + y; - maxZ = maxZ + z; - } - - public void grow(int s) { - this.grow(s, s, s); - } - - /** - * Grow this box to have power of 2 side lengths, scaling from the minimum coords. - */ - public void nextPowerOf2() { - int sizeX = Mth.smallestEncompassingPowerOfTwo(sizeX()); - int sizeY = Mth.smallestEncompassingPowerOfTwo(sizeY()); - int sizeZ = Mth.smallestEncompassingPowerOfTwo(sizeZ()); - - maxX = minX + sizeX; - maxY = minY + sizeY; - maxZ = minZ + sizeZ; - } - - /** - * Grow this box to have power of 2 side length, scaling from the center. - */ - public void nextPowerOf2Centered() { - int sizeX = sizeX(); - int sizeY = sizeY(); - int sizeZ = sizeZ(); - - int newSizeX = Mth.smallestEncompassingPowerOfTwo(sizeX); - int newSizeY = Mth.smallestEncompassingPowerOfTwo(sizeY); - int newSizeZ = Mth.smallestEncompassingPowerOfTwo(sizeZ); - - int diffX = newSizeX - sizeX; - int diffY = newSizeY - sizeY; - int diffZ = newSizeZ - sizeZ; - - minX = minX - diffX / 2; // floor division for the minimums - minY = minY - diffY / 2; - minZ = minZ - diffZ / 2; - maxX = maxX + (diffX + 1) / 2; // ceiling divison for the maximums - maxY = maxY + (diffY + 1) / 2; - maxZ = maxZ + (diffZ + 1) / 2; - } - - public void mirrorAbout(Direction.Axis axis) { - Vec3i axisVec = Direction.get(Direction.AxisDirection.POSITIVE, axis) - .getNormal(); - int flipX = axisVec.getX() - 1; - int flipY = axisVec.getY() - 1; - int flipZ = axisVec.getZ() - 1; - - int maxX = this.maxX * flipX; - int maxY = this.maxY * flipY; - int maxZ = this.maxZ * flipZ; - this.maxX = this.minX * flipX; - this.maxY = this.minY * flipY; - this.maxZ = this.minZ * flipZ; - this.minX = maxX; - this.minY = maxY; - this.minZ = maxZ; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - if (!(o instanceof Box that)) return false; - - return this.sameAs(that); - } - - @Override - public int hashCode() { - int result = minX; - result = 31 * result + minY; - result = 31 * result + minZ; - result = 31 * result + maxX; - result = 31 * result + maxY; - result = 31 * result + maxZ; - return result; - } - - @Override - public String toString() { - return "(" + minX + ", " + minY + ", " + minZ + ")->(" + maxX + ", " + maxY + ", " + maxZ + ')'; - } -} diff --git a/src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java b/src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java deleted file mode 100644 index 2da7cacef8..0000000000 --- a/src/main/java/com/simibubi/create/foundation/utility/flywheel/light/LightVolume.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.simibubi.create.foundation.utility.flywheel.light; - -import com.simibubi.create.foundation.utility.flywheel.box.Box; -import com.simibubi.create.foundation.utility.flywheel.box.MutableBox; - -import dev.engine_room.flywheel.lib.memory.MemoryBlock; -import net.minecraft.core.BlockPos; -import net.minecraft.core.SectionPos; -import net.minecraft.world.level.BlockAndTintGetter; - -import net.minecraft.world.level.LightLayer; - -import org.lwjgl.system.MemoryUtil; - -public class LightVolume implements Box { - protected final BlockAndTintGetter level; - protected final MutableBox box = new MutableBox(); - protected MemoryBlock lightData; - - public LightVolume(BlockAndTintGetter level, Box sampleVolume) { - this.level = level; - this.setBox(sampleVolume); - - this.lightData = MemoryBlock.malloc(this.box.volume() * 2); - } - - public Box getVolume() { - return box; - } - - @Override - public int getMinX() { - return box.getMinX(); - } - - @Override - public int getMinY() { - return box.getMinY(); - } - - @Override - public int getMinZ() { - return box.getMinZ(); - } - - @Override - public int getMaxX() { - return box.getMaxX(); - } - - @Override - public int getMaxY() { - return box.getMaxY(); - } - - @Override - public int getMaxZ() { - return box.getMaxZ(); - } - - public boolean isInvalid() { - return lightData == null; - } - - protected void setBox(Box box) { - this.box.assign(box); - } - - public short getPackedLight(int x, int y, int z) { - if (box.contains(x, y, z)) { - return MemoryUtil.memGetShort(levelPosToPtr(x, y, z)); - } else { - return 0; - } - } - - public void move(Box newSampleVolume) { - if (lightData == null) return; - - setBox(newSampleVolume); - int neededCapacity = box.volume() * 2; - if (neededCapacity > lightData.size()) { - lightData = lightData.realloc(neededCapacity); - } - initialize(); - } - - /** - * Completely (re)populate this volume with block and sky lighting data. - * This is expensive and should be avoided. - */ - public void initialize() { - if (lightData == null) return; - - copyLight(getVolume()); - markDirty(); - } - - protected void markDirty() { - // noop - } - - public void delete() { - lightData.free(); - lightData = null; - } - - /** - * Copy all light from the level into this volume. - * - * @param levelVolume the region in the level to copy data from. - */ - public void copyLight(Box levelVolume) { - BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); - - int xShift = box.getMinX(); - int yShift = box.getMinY(); - int zShift = box.getMinZ(); - - levelVolume.forEachContained((x, y, z) -> { - pos.set(x, y, z); - - int block = this.level.getBrightness(LightLayer.BLOCK, pos); - int sky = this.level.getBrightness(LightLayer.SKY, pos); - - writeLight(x - xShift, y - yShift, z - zShift, block, sky); - }); - } - - protected void writeLight(int x, int y, int z, int block, int sky) { - byte b = (byte) ((block & 0xF) << 4); - byte s = (byte) ((sky & 0xF) << 4); - - long ptr = boxPosToPtr(x, y, z); - MemoryUtil.memPutByte(ptr, b); - MemoryUtil.memPutByte(ptr + 1, s); - } - - /** - * Copy block light from the level into this volume. - * - * @param levelVolume the region in the level to copy data from. - */ - public void copyBlock(Box levelVolume) { - var pos = new BlockPos.MutableBlockPos(); - - int xShift = box.getMinX(); - int yShift = box.getMinY(); - int zShift = box.getMinZ(); - - levelVolume.forEachContained((x, y, z) -> { - int light = this.level.getBrightness(LightLayer.BLOCK, pos.set(x, y, z)); - - writeBlock(x - xShift, y - yShift, z - zShift, light); - }); - } - - protected void writeBlock(int x, int y, int z, int block) { - byte b = (byte) ((block & 0xF) << 4); - - MemoryUtil.memPutByte(boxPosToPtr(x, y, z), b); - } - - /** - * Copy sky light from the level into this volume. - * - * @param levelVolume the region in the level to copy data from. - */ - public void copySky(Box levelVolume) { - var pos = new BlockPos.MutableBlockPos(); - - int xShift = box.getMinX(); - int yShift = box.getMinY(); - int zShift = box.getMinZ(); - - levelVolume.forEachContained((x, y, z) -> { - int light = this.level.getBrightness(LightLayer.SKY, pos.set(x, y, z)); - - writeSky(x - xShift, y - yShift, z - zShift, light); - }); - } - - protected void writeSky(int x, int y, int z, int sky) { - byte s = (byte) ((sky & 0xF) << 4); - - MemoryUtil.memPutByte(boxPosToPtr(x, y, z) + 1, s); - } - - protected long levelPosToPtr(int x, int y, int z) { - return lightData.ptr() + levelPosToPtrOffset(x, y, z); - } - - protected long boxPosToPtr(int x, int y, int z) { - return lightData.ptr() + boxPosToPtrOffset(x, y, z); - } - - protected int levelPosToPtrOffset(int x, int y, int z) { - x -= box.getMinX(); - y -= box.getMinY(); - z -= box.getMinZ(); - return boxPosToPtrOffset(x, y, z); - } - - protected int boxPosToPtrOffset(int x, int y, int z) { - return (x + box.sizeX() * (y + z * box.sizeY())) * 2; - } - - public void onLightUpdate(LightLayer type, SectionPos pos) { - if (lightData == null) return; - - MutableBox vol = MutableBox.from(pos); - if (!vol.intersects(getVolume())) return; - vol.intersectAssign(getVolume()); // compute the region contained by us that has dirty lighting data. - - if (type == LightLayer.BLOCK) copyBlock(vol); - else if (type == LightLayer.SKY) copySky(vol); - markDirty(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index 0e8cd5dda2..d392d51475 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -6,7 +6,6 @@ import javax.annotation.Nullable; import org.joml.Matrix3f; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllSpecialTextures; @@ -16,6 +15,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.VecHelper; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.Direction; diff --git a/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java index f20993e8b2..2eddcd9d7d 100644 --- a/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/virtualWorld/VirtualRenderWorld.java @@ -10,7 +10,6 @@ import java.util.Set; import javax.annotation.Nullable; import dev.engine_room.flywheel.api.visualization.VisualizationLevel; - import it.unimi.dsi.fastutil.objects.Object2ShortMap; import it.unimi.dsi.fastutil.objects.Object2ShortOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java index 6d95075791..731a38e3fa 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java @@ -9,9 +9,6 @@ import java.util.stream.Stream; import javax.annotation.Nullable; import com.google.common.collect.ImmutableMap; -import dev.engine_room.flywheel.api.Flywheel; -import dev.engine_room.flywheel.api.backend.Backend; -import dev.engine_room.flywheel.api.backend.BackendManager; import com.mojang.blaze3d.platform.GlUtil; import com.simibubi.create.Create; import com.simibubi.create.foundation.mixin.accessor.SystemReportAccessor; @@ -19,6 +16,9 @@ import com.simibubi.create.infrastructure.debugInfo.element.DebugInfoSection; import com.simibubi.create.infrastructure.debugInfo.element.InfoElement; import com.simibubi.create.infrastructure.debugInfo.element.InfoEntry; +import dev.engine_room.flywheel.api.Flywheel; +import dev.engine_room.flywheel.api.backend.Backend; +import dev.engine_room.flywheel.api.backend.BackendManager; import net.minecraft.SharedConstants; import net.minecraft.SystemReport; import net.minecraft.Util; diff --git a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java index 0ba7faa2b8..3923a40eb9 100644 --- a/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/infrastructure/gui/CreateMainMenuScreen.java @@ -1,6 +1,5 @@ package com.simibubi.create.infrastructure.gui; -import dev.engine_room.flywheel.lib.transform.TransformStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -20,6 +19,7 @@ import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; +import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.ChatFormatting; import net.minecraft.Util; import net.minecraft.client.gui.GuiGraphics; From b3aba936650274897089d48bda41803a3f790789 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Mon, 22 Jul 2024 15:26:26 -0700 Subject: [PATCH 33/35] 93 days late - Add BlazeBurnerVisual - Offload blaze burner's tickAnimation to flywheel when enabled - Add generic scrolling instance type for the flame, to be re-used for belts - Mark flame model json as cutout --- .../simibubi/create/AllBlockEntityTypes.java | 2 + .../burner/BlazeBurnerBlockEntity.java | 16 +- .../burner/BlazeBurnerRenderer.java | 21 +- .../processing/burner/BlazeBurnerVisual.java | 256 ++++++++++++++++++ .../processing/burner/ScrollInstance.java | 35 +++ .../foundation/render/AllInstanceTypes.java | 35 +++ .../flywheel/instance/cull/scrolling.glsl | 4 + .../create/flywheel/instance/scrolling.vert | 14 + .../models/block/blaze_burner/flame.json | 5 +- 9 files changed, 373 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java create mode 100644 src/main/java/com/simibubi/create/content/processing/burner/ScrollInstance.java create mode 100644 src/main/resources/assets/create/flywheel/instance/cull/scrolling.glsl create mode 100644 src/main/resources/assets/create/flywheel/instance/scrolling.vert diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index 790445320b..d0cccbc369 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -175,6 +175,7 @@ import com.simibubi.create.content.processing.basin.BasinBlockEntity; import com.simibubi.create.content.processing.basin.BasinRenderer; import com.simibubi.create.content.processing.burner.BlazeBurnerBlockEntity; import com.simibubi.create.content.processing.burner.BlazeBurnerRenderer; +import com.simibubi.create.content.processing.burner.BlazeBurnerVisual; import com.simibubi.create.content.redstone.analogLever.AnalogLeverBlockEntity; import com.simibubi.create.content.redstone.analogLever.AnalogLeverRenderer; import com.simibubi.create.content.redstone.analogLever.AnalogLeverVisual; @@ -662,6 +663,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry HEATER = REGISTRATE .blockEntity("blaze_heater", BlazeBurnerBlockEntity::new) + .visual(() -> BlazeBurnerVisual::new, false) .validBlocks(AllBlocks.BLAZE_BURNER) .renderer(() -> BlazeBurnerRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerBlockEntity.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerBlockEntity.java index 64873b435c..88395a783f 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerBlockEntity.java @@ -14,6 +14,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import dev.engine_room.flywheel.api.backend.BackendManager; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; @@ -75,7 +76,8 @@ public class BlazeBurnerBlockEntity extends SmartBlockEntity { super.tick(); if (level.isClientSide) { - tickAnimation(); + if (shouldTickAnimation()) + tickAnimation(); if (!isVirtual()) spawnParticles(getHeatLevelFromBlock(), 1); return; @@ -102,7 +104,13 @@ public class BlazeBurnerBlockEntity extends SmartBlockEntity { } @OnlyIn(Dist.CLIENT) - private void tickAnimation() { + private boolean shouldTickAnimation() { + // Offload the animation tick to the visual when flywheel in enabled + return !BackendManager.isBackendOn(); + } + + @OnlyIn(Dist.CLIENT) + void tickAnimation() { boolean active = getHeatLevelFromBlock().isAtLeast(HeatLevel.FADING) && isValidBlockAbove(); if (!active) { @@ -305,14 +313,14 @@ public class BlazeBurnerBlockEntity extends SmartBlockEntity { Vec3 c = VecHelper.getCenterOf(worldPosition); Vec3 v = c.add(VecHelper.offsetRandomly(Vec3.ZERO, r, .125f) .multiply(1, 0, 1)); - + if (r.nextInt(4) != 0) return; boolean empty = level.getBlockState(worldPosition.above()) .getCollisionShape(level, worldPosition.above()) .isEmpty(); - + if (empty || r.nextInt(8) == 0) level.addParticle(ParticleTypes.LARGE_SMOKE, v.x, v.y, v.z, 0, 0, 0); diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java index 5dba7cca20..002b4c9366 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerRenderer.java @@ -124,15 +124,7 @@ public class BlazeBurnerRenderer extends SafeBlockEntityRenderer implements SimpleDynamicVisual, SimpleTickableVisual { + + private final BlazeBurnerBlock.HeatLevel heatLevel; + + private final TransformedInstance head; + private final TransformedInstance smallRods; + private final TransformedInstance largeRods; + + private final boolean isInert; + + @Nullable + private ScrollInstance flame; + @Nullable + private TransformedInstance goggles; + @Nullable + private TransformedInstance hat; + + private boolean validBlockAbove; + + public BlazeBurnerVisual(VisualizationContext ctx, BlazeBurnerBlockEntity blockEntity, float partialTick) { + super(ctx, blockEntity, partialTick); + + heatLevel = blockEntity.getHeatLevelFromBlock(); + validBlockAbove = blockEntity.isValidBlockAbove(); + + PartialModel blazeModel = BlazeBurnerRenderer.getBlazeModel(heatLevel, validBlockAbove); + isInert = blazeModel == AllPartialModels.BLAZE_INERT; + + head = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blazeModel)) + .createInstance(); + + head.light(LightTexture.FULL_BRIGHT); + + if (heatLevel.isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) { + PartialModel rodsModel = heatLevel == BlazeBurnerBlock.HeatLevel.SEETHING ? AllPartialModels.BLAZE_BURNER_SUPER_RODS + : AllPartialModels.BLAZE_BURNER_RODS; + PartialModel rodsModel2 = heatLevel == BlazeBurnerBlock.HeatLevel.SEETHING ? AllPartialModels.BLAZE_BURNER_SUPER_RODS_2 + : AllPartialModels.BLAZE_BURNER_RODS_2; + + smallRods = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(rodsModel)) + .createInstance(); + largeRods = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(rodsModel2)) + .createInstance(); + + smallRods.light(LightTexture.FULL_BRIGHT); + largeRods.light(LightTexture.FULL_BRIGHT); + } else { + smallRods = null; + largeRods = null; + } + } + + @Override + public void tick(TickableVisual.Context context) { + blockEntity.tickAnimation(); + } + + @Override + public void beginFrame(DynamicVisual.Context ctx) { + if (!isVisible(ctx.frustum()) || doDistanceLimitThisFrame(ctx)) { + return; + } + + float animation = blockEntity.headAnimation.getValue(ctx.partialTick()) * .175f; + + boolean validBlockAbove = animation > 0.125f; + + if (validBlockAbove != this.validBlockAbove) { + this.validBlockAbove = validBlockAbove; + + PartialModel blazeModel = BlazeBurnerRenderer.getBlazeModel(heatLevel, validBlockAbove); + instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blazeModel)) + .stealInstance(head); + } + + // Switch between showing/hiding the flame + if (validBlockAbove && flame == null) { + setupFlameInstance(); + } else if (!validBlockAbove && flame != null) { + flame.delete(); + flame = null; + } + + if (blockEntity.goggles && goggles == null) { + goggles = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(isInert ? AllPartialModels.BLAZE_GOGGLES_SMALL : AllPartialModels.BLAZE_GOGGLES)) + .createInstance(); + goggles.light(LightTexture.FULL_BRIGHT); + } else if (!blockEntity.goggles && goggles != null) { + goggles.delete(); + goggles = null; + } + + if (blockEntity.hat && hat == null) { + hat = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TRAIN_HAT)) + .createInstance(); + hat.light(LightTexture.FULL_BRIGHT); + } else if (!blockEntity.hat && hat != null) { + hat.delete(); + hat = null; + } + + var hashCode = blockEntity.hashCode(); + float time = AnimationTickHolder.getRenderTime(level); + float renderTick = time + (hashCode % 13) * 16f; + float offsetMult = heatLevel.isAtLeast(BlazeBurnerBlock.HeatLevel.FADING) ? 64 : 16; + float offset = Mth.sin((float) ((renderTick / 16f) % (2 * Math.PI))) / offsetMult; + float headY = offset - (animation * .75f); + + float horizontalAngle = AngleHelper.rad(blockEntity.headAngle.getValue(ctx.partialTick())); + + head.loadIdentity() + .translate(getVisualPosition()) + .translateY(headY) + .translate(Translate.CENTER) + .rotateY(horizontalAngle) + .translateBack(Translate.CENTER) + .setChanged(); + + if (goggles != null) { + goggles.loadIdentity() + .translate(getVisualPosition()) + .translateY(headY + 8 / 16f) + .translate(Translate.CENTER) + .rotateY(horizontalAngle) + .translateBack(Translate.CENTER) + .setChanged(); + } + + if (hat != null) { + hat.loadIdentity() + .translate(getVisualPosition()) + .translateY(headY); + if (isInert) { + hat.translateY(0.5f) + .center() + .scale(0.75f) + .uncenter(); + } else { + hat.translateY(0.75f); + } + hat.rotateCentered(horizontalAngle + Mth.PI, Direction.UP) + .translate(0.5f, 0, 0.5f) + .light(LightTexture.FULL_BRIGHT); + + hat.setChanged(); + } + + if (smallRods != null) { + float offset1 = Mth.sin((float) ((renderTick / 16f + Math.PI) % (2 * Math.PI))) / offsetMult; + + smallRods.loadIdentity() + .translate(getVisualPosition()) + .translateY(offset1 + animation + .125f) + .setChanged(); + } + + if (largeRods != null) { + float offset2 = Mth.sin((float) ((renderTick / 16f + Math.PI / 2) % (2 * Math.PI))) / offsetMult; + + largeRods.loadIdentity() + .translate(getVisualPosition()) + .translateY(offset2 + animation - 3 / 16f) + .setChanged(); + } + } + + private void setupFlameInstance() { + flame = instancerProvider.instancer(AllInstanceTypes.SCROLLING, Models.partial(AllPartialModels.BLAZE_BURNER_FLAME)) + .createInstance(); + + flame.position(getVisualPosition()) + .light(LightTexture.FULL_BRIGHT); + + SpriteShiftEntry spriteShift = + heatLevel == BlazeBurnerBlock.HeatLevel.SEETHING ? AllSpriteShifts.SUPER_BURNER_FLAME : AllSpriteShifts.BURNER_FLAME; + + float spriteWidth = spriteShift.getTarget() + .getU1() + - spriteShift.getTarget() + .getU0(); + + float spriteHeight = spriteShift.getTarget() + .getV1() + - spriteShift.getTarget() + .getV0(); + + float speed = 1 / 32f + 1 / 64f * heatLevel.ordinal(); + + flame.speedU = speed / 2; + flame.speedV = speed; + + flame.scaleU = spriteWidth / 2; + flame.scaleV = spriteHeight / 2; + + flame.diffU = spriteShift.getTarget().getU0() - spriteShift.getOriginal().getU0(); + flame.diffV = spriteShift.getTarget().getV0() - spriteShift.getOriginal().getV0(); + } + + @Override + public void updateLight(float partialTick) { + } + + @Override + public void collectCrumblingInstances(Consumer<@Nullable Instance> consumer) { + + } + + @Override + protected void _delete() { + head.delete(); + if (smallRods != null) { + smallRods.delete(); + } + if (largeRods != null) { + largeRods.delete(); + } + if (flame != null) { + flame.delete(); + } + if (goggles != null) { + goggles.delete(); + } + if (hat != null) { + hat.delete(); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/processing/burner/ScrollInstance.java b/src/main/java/com/simibubi/create/content/processing/burner/ScrollInstance.java new file mode 100644 index 0000000000..12bcc25e1a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/processing/burner/ScrollInstance.java @@ -0,0 +1,35 @@ +package com.simibubi.create.content.processing.burner; + +import org.joml.Quaternionf; + +import dev.engine_room.flywheel.api.instance.InstanceHandle; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.lib.instance.ColoredLitInstance; +import net.minecraft.core.Vec3i; + +public class ScrollInstance extends ColoredLitInstance { + public float x; + public float y; + public float z; + public final Quaternionf rotation = new Quaternionf(); + + public float speedU; + public float speedV; + + public float diffU; + public float diffV; + + public float scaleU; + public float scaleV; + + public ScrollInstance(InstanceType type, InstanceHandle handle) { + super(type, handle); + } + + public ScrollInstance position(Vec3i position) { + this.x = position.getX(); + this.y = position.getY(); + this.z = position.getZ(); + return this; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 44424329c1..dde9646d15 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -8,6 +8,7 @@ import com.simibubi.create.content.contraptions.actors.ActorInstance; import com.simibubi.create.content.kinetics.base.RotatingInstance; import com.simibubi.create.content.kinetics.belt.BeltInstance; import com.simibubi.create.content.logistics.flwdata.FlapInstance; +import com.simibubi.create.content.processing.burner.ScrollInstance; import dev.engine_room.flywheel.api.instance.InstanceType; import dev.engine_room.flywheel.api.layout.FloatRepr; @@ -88,6 +89,40 @@ public class AllInstanceTypes { }) .register(); + // TODO: use this for belts too + public static final InstanceType SCROLLING = SimpleInstanceType.builder(ScrollInstance::new) + .cullShader(asResource("instance/cull/scrolling.glsl")) + .vertexShader(asResource("instance/scrolling.vert")) + .layout(LayoutBuilder.create() + .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) + .vector("light", IntegerRepr.SHORT, 2) + .vector("overlay", IntegerRepr.SHORT, 2) + .vector("pos", FloatRepr.FLOAT, 3) + .vector("rotation", FloatRepr.FLOAT, 4) + .vector("speed", FloatRepr.FLOAT, 2) + .vector("diff", FloatRepr.FLOAT, 2) + .vector("scale", FloatRepr.FLOAT, 2) + .build()) + .writer((ptr, instance) -> { + MemoryUtil.memPutByte(ptr, instance.r); + MemoryUtil.memPutByte(ptr + 1, instance.g); + MemoryUtil.memPutByte(ptr + 2, instance.b); + MemoryUtil.memPutByte(ptr + 3, instance.a); + ExtraMemoryOps.put2x16(ptr + 4, instance.light); + ExtraMemoryOps.put2x16(ptr + 8, instance.overlay); + MemoryUtil.memPutFloat(ptr + 12, instance.x); + MemoryUtil.memPutFloat(ptr + 16, instance.y); + MemoryUtil.memPutFloat(ptr + 20, instance.z); + ExtraMemoryOps.putQuaternionf(ptr + 24, instance.rotation); + MemoryUtil.memPutFloat(ptr + 40, instance.speedU); + MemoryUtil.memPutFloat(ptr + 44, instance.speedV); + MemoryUtil.memPutFloat(ptr + 48, instance.diffU); + MemoryUtil.memPutFloat(ptr + 52, instance.diffV); + MemoryUtil.memPutFloat(ptr + 56, instance.scaleU); + MemoryUtil.memPutFloat(ptr + 60, instance.scaleV); + }) + .register(); + public static final InstanceType ACTOR = SimpleInstanceType.builder(ActorInstance::new) .cullShader(asResource("instance/cull/actor.glsl")) .vertexShader(asResource("instance/actor.vert")) diff --git a/src/main/resources/assets/create/flywheel/instance/cull/scrolling.glsl b/src/main/resources/assets/create/flywheel/instance/cull/scrolling.glsl new file mode 100644 index 0000000000..f16aeef0f9 --- /dev/null +++ b/src/main/resources/assets/create/flywheel/instance/cull/scrolling.glsl @@ -0,0 +1,4 @@ +void flw_transformBoundingSphere(in FlwInstance instance, inout vec3 center, inout float radius) { + radius += length(center - 0.5); + center += instance.pos; +} diff --git a/src/main/resources/assets/create/flywheel/instance/scrolling.vert b/src/main/resources/assets/create/flywheel/instance/scrolling.vert new file mode 100644 index 0000000000..73a97f002e --- /dev/null +++ b/src/main/resources/assets/create/flywheel/instance/scrolling.vert @@ -0,0 +1,14 @@ +#include "flywheel:util/quaternion.glsl" +#include "flywheel:util/matrix.glsl" + +void flw_instanceVertex(in FlwInstance instance) { + flw_vertexPos = vec4(rotateByQuaternion(flw_vertexPos.xyz - .5, instance.rotation) + instance.pos + .5, 1.); + + flw_vertexNormal = rotateByQuaternion(flw_vertexNormal, instance.rotation); + + vec2 scroll = fract(instance.speed * flw_renderTicks) * instance.scale; + + flw_vertexTexCoord = flw_vertexTexCoord + instance.diff + scroll; + flw_vertexLight = vec2(instance.light) / 256.; + flw_vertexOverlay = instance.overlay; +} diff --git a/src/main/resources/assets/create/models/block/blaze_burner/flame.json b/src/main/resources/assets/create/models/block/blaze_burner/flame.json index c111c8b3a1..209ec4d796 100644 --- a/src/main/resources/assets/create/models/block/blaze_burner/flame.json +++ b/src/main/resources/assets/create/models/block/blaze_burner/flame.json @@ -3,7 +3,8 @@ "loader": "forge:obj", "flip_v": true, "model": "create:models/block/blaze_burner/blaze_flame.obj", - "textures": { + "render_type": "minecraft:cutout", + "textures": { "0": "create:block/blaze_burner_flame" } -} \ No newline at end of file +} From 5be92fcde8bf1a2faeefeabadf93708cedd07239 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 27 Jul 2024 17:43:24 -0700 Subject: [PATCH 34/35] Bumpy road - Bump flywheel build - Directly rotate the last pose and normal matrix in SBB --- gradle.properties | 2 +- .../com/simibubi/create/AllPartialModels.java | 4 ++-- .../harvester/HarvesterActorVisual.java | 2 +- .../contraptions/actors/psi/PIInstance.java | 4 ++-- .../actors/roller/RollerActorVisual.java | 4 ++-- .../contraptions/bearing/BearingVisual.java | 6 ++--- .../bearing/StabilizedBearingVisual.java | 6 ++--- .../chassis/StickerBlockEntity.java | 4 ++-- .../contraptions/chassis/StickerVisual.java | 2 +- .../gantry/GantryCarriageVisual.java | 2 +- .../pulley/AbstractPulleyVisual.java | 16 ++++++------- .../render/ContraptionVisual.java | 7 ++---- .../extendoGrip/ExtendoGripItemRenderer.java | 10 ++++---- .../PotatoCannonItemRenderer.java | 2 +- .../SymmetryWandItemRenderer.java | 6 ++--- .../equipment/toolbox/ToolBoxVisual.java | 4 ++-- .../equipment/wrench/WrenchItemRenderer.java | 2 +- .../WorldshaperItemRenderer.java | 6 ++--- .../fluids/pipes/valve/FluidValveVisual.java | 2 +- .../kinetics/base/KineticBlockEntity.java | 6 ++--- .../kinetics/crank/HandCrankVisual.java | 2 +- .../kinetics/deployer/DeployerVisual.java | 8 +++---- .../mechanicalArm/ArmBlockEntity.java | 4 ++-- .../kinetics/mechanicalArm/ArmVisual.java | 4 ++-- .../content/kinetics/mixer/MixerVisual.java | 4 ++-- .../content/kinetics/press/PressVisual.java | 6 ++--- .../steamEngine/SteamEngineVisual.java | 8 +++---- .../logistics/depot/EjectorVisual.java | 2 +- .../logistics/funnel/FunnelBlockEntity.java | 4 ++-- .../tunnel/BeltTunnelBlockEntity.java | 4 ++-- .../processing/burner/BlazeBurnerVisual.java | 10 ++++---- .../analogLever/AnalogLeverVisual.java | 6 ++--- .../redstone/diodes/BrassDiodeVisual.java | 6 ++--- .../LinkedControllerItemRenderer.java | 4 ++-- .../content/trains/bogey/BogeyRenderer.java | 18 +++++++------- .../trains/track/TrackBlockEntity.java | 4 ++-- .../trains/track/TrackMaterialFactory.java | 6 ++--- .../data/CreateBlockEntityBuilder.java | 2 +- .../foundation/data/CreateEntityBuilder.java | 2 +- .../foundation/render/AllInstanceTypes.java | 24 +++++++++---------- .../render/BlockEntityRenderHelper.java | 4 ++-- .../foundation/render/SuperByteBuffer.java | 16 ++++++++----- .../debugInfo/DebugInformation.java | 2 +- 43 files changed, 124 insertions(+), 123 deletions(-) diff --git a/gradle.properties b/gradle.properties index cf58cf9476..944938715e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-98 +flywheel_version = 1.0.0-beta-103 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index c79d8b0c64..9a5b37c76f 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -219,11 +219,11 @@ public class AllPartialModels { } private static PartialModel block(String path) { - return new PartialModel(Create.asResource("block/" + path)); + return PartialModel.of(Create.asResource("block/" + path)); } private static PartialModel entity(String path) { - return new PartialModel(Create.asResource("entity/" + path)); + return PartialModel.of(Create.asResource("entity/" + path)); } public static void init() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index 412a0c41bb..7427392456 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -83,7 +83,7 @@ public class HarvesterActorVisual extends ActorVisual { @Override public void beginFrame() { - harvester.loadIdentity() + harvester.setIdentityTransform() .translate(context.localPos) .center() .rotateYDegrees(horizontalAngle) diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java index e0ffab6175..4f7e371cfa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PIInstance.java @@ -42,14 +42,14 @@ public class PIInstance { } public void beginFrame(float progress) { - middle.loadIdentity() + middle.setIdentityTransform() .translate(instancePos) .center() .rotateYDegrees(angleY) .rotateXDegrees(angleX) .uncenter(); - top.loadIdentity() + top.setIdentityTransform() .translate(instancePos) .center() .rotateYDegrees(angleY) diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java index b14128a086..e692cd1bab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java @@ -27,7 +27,7 @@ public class RollerActorVisual extends HarvesterActorVisual { @Override public void beginFrame() { - harvester.loadIdentity() + harvester.setIdentityTransform() .translate(context.localPos) .center() .rotateYDegrees(horizontalAngle) @@ -38,7 +38,7 @@ public class RollerActorVisual extends HarvesterActorVisual { .rotateYDegrees(90) .setChanged(); - frame.loadIdentity() + frame.setIdentityTransform() .translate(context.localPos) .center() .rotateYDegrees(horizontalAngle + 180) diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index 31e295b979..67edcfe3db 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -41,8 +41,8 @@ public class BearingVisual e topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top)) .createInstance(); - topInstance.setPosition(getVisualPosition()) - .setRotation(blockOrientation) + topInstance.position(getVisualPosition()) + .rotation(blockOrientation) .setChanged(); } @@ -53,7 +53,7 @@ public class BearingVisual e rot.mul(blockOrientation); - topInstance.setRotation(rot) + topInstance.rotation(rot) .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 5fdc2b2731..81e11bfc65 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -42,8 +42,8 @@ public class StabilizedBearingVisual extends ActorVisual { .createInstance(); int blockLight = localBlockLight(); - topInstance.setPosition(movementContext.localPos) - .setRotation(blockOrientation) + topInstance.position(movementContext.localPos) + .rotation(blockOrientation) .light(blockLight, 0); shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite())) @@ -62,7 +62,7 @@ public class StabilizedBearingVisual extends ActorVisual { rotation.mul(blockOrientation); - topInstance.setRotation(rotation); + topInstance.rotation(rotation); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java index 9fb15efa30..131113c78f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerBlockEntity.java @@ -11,7 +11,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -70,7 +70,7 @@ public class StickerBlockEntity extends SmartBlockEntity { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> playSound(false)); piston.chase(target, .4f, Chaser.LINEAR); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); } public boolean isAttachedToBlock() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index d845f2249e..d44a3e95d7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -54,7 +54,7 @@ public class StickerVisual extends AbstractBlockEntityVisual } private void animateHead(float offset) { - head.loadIdentity() + head.setIdentityTransform() .translate(getVisualPosition()) .nudge(blockEntity.hashCode()) .center() diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 7390bec614..4f18219907 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -64,7 +64,7 @@ public class GantryCarriageVisual extends ShaftVisual } private void animateCogs(float cogAngle) { - gantryCogs.loadIdentity() + gantryCogs.setIdentityTransform() .translate(getVisualPosition()) .center() .rotateYDegrees(AngleHelper.horizontalAngle(facing)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index a0d05e5466..395dce1fed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -47,7 +47,7 @@ public abstract class AbstractPulleyVisual extends rotationAxis = Axis.of(rotatingAbout.step()); coil = getCoilModel().createInstance() - .setPosition(getVisualPosition()); + .position(getVisualPosition()); coil.setChanged(); magnet = new SelectInstance<>(this::getMagnetModelIndex); @@ -77,7 +77,7 @@ public abstract class AbstractPulleyVisual extends @Override public void beginFrame(DynamicVisual.Context ctx) { updateOffset(ctx.partialTick()); - coil.setRotation(rotationAxis.rotationDegrees(offset * 180)) + coil.rotation(rotationAxis.rotationDegrees(offset * 180)) .setChanged(); int neededRopeCount = getNeededRopeCount(); @@ -88,8 +88,8 @@ public abstract class AbstractPulleyVisual extends .ifPresent(data -> { int i = Math.max(0, Mth.floor(offset)); int light = lightCache.getPackedLight(i); - data.setPosition(getVisualPosition()) - .nudgePosition(0, -offset, 0) + data.position(getVisualPosition()) + .translatePosition(0, -offset, 0) .light(light) .setChanged(); }); @@ -101,8 +101,8 @@ public abstract class AbstractPulleyVisual extends float halfRopeNudge = f > .75f ? f - 1 : f; int light = lightCache.getPackedLight(0); - rope1.setPosition(getVisualPosition()) - .nudgePosition(0, -halfRopeNudge, 0) + rope1.position(getVisualPosition()) + .translatePosition(0, -halfRopeNudge, 0) .light(light) .setChanged(); }); @@ -113,8 +113,8 @@ public abstract class AbstractPulleyVisual extends int light = lightCache.getPackedLight(size - 1 - i); rope.get(i) - .setPosition(getVisualPosition()) - .nudgePosition(0, -offset + i + 1, 0) + .position(getVisualPosition()) + .translatePosition(0, -offset + i + 1, 0) .light(light) .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index a134681b92..6b3a038c98 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -38,6 +38,7 @@ import it.unimi.dsi.fastutil.longs.LongArraySet; import it.unimi.dsi.fastutil.longs.LongSet; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; +import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.Level; @@ -65,7 +66,7 @@ public class ContraptionVisual extends Abst public ContraptionVisual(VisualizationContext ctx, E entity, float partialTick) { super(ctx, entity, partialTick); - embedding = ctx.createEmbedding(); + embedding = ctx.createEmbedding(Vec3i.ZERO); init(partialTick); } @@ -258,10 +259,6 @@ public class ContraptionVisual extends Abst actors.forEach(ActorVisual::delete); - if (model != null) { - model.delete(); - } - if (structure != null) { structure.delete(); } diff --git a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java index a3c02e2ff6..d1a928e199 100644 --- a/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/extendoGrip/ExtendoGripItemRenderer.java @@ -18,11 +18,11 @@ import net.minecraft.world.phys.Vec3; public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { - protected static final PartialModel COG = new PartialModel(Create.asResource("item/extendo_grip/cog")); - protected static final PartialModel THIN_SHORT = new PartialModel(Create.asResource("item/extendo_grip/thin_short")); - protected static final PartialModel WIDE_SHORT = new PartialModel(Create.asResource("item/extendo_grip/wide_short")); - protected static final PartialModel THIN_LONG = new PartialModel(Create.asResource("item/extendo_grip/thin_long")); - protected static final PartialModel WIDE_LONG = new PartialModel(Create.asResource("item/extendo_grip/wide_long")); + protected static final PartialModel COG = PartialModel.of(Create.asResource("item/extendo_grip/cog")); + protected static final PartialModel THIN_SHORT = PartialModel.of(Create.asResource("item/extendo_grip/thin_short")); + protected static final PartialModel WIDE_SHORT = PartialModel.of(Create.asResource("item/extendo_grip/wide_short")); + protected static final PartialModel THIN_LONG = PartialModel.of(Create.asResource("item/extendo_grip/thin_long")); + protected static final PartialModel WIDE_LONG = PartialModel.of(Create.asResource("item/extendo_grip/wide_long")); private static final Vec3 ROTATION_OFFSET = new Vec3(0, 1 / 2f, 1 / 2f); private static final Vec3 COG_ROTATION_OFFSET = new Vec3(0, 1 / 16f, 0); diff --git a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java index 9ec1e33a6f..22983f9366 100644 --- a/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/potatoCannon/PotatoCannonItemRenderer.java @@ -23,7 +23,7 @@ import net.minecraft.world.item.ItemStack; public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer { - protected static final PartialModel COG = new PartialModel(Create.asResource("item/potato_cannon/cog")); + protected static final PartialModel COG = PartialModel.of(Create.asResource("item/potato_cannon/cog")); @Override protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java index 4bb2fc38ef..90b3a321da 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItemRenderer.java @@ -17,9 +17,9 @@ import net.minecraft.world.item.ItemStack; public class SymmetryWandItemRenderer extends CustomRenderedItemModelRenderer { - protected static final PartialModel BITS = new PartialModel(Create.asResource("item/wand_of_symmetry/bits")); - protected static final PartialModel CORE = new PartialModel(Create.asResource("item/wand_of_symmetry/core")); - protected static final PartialModel CORE_GLOW = new PartialModel(Create.asResource("item/wand_of_symmetry/core_glow")); + protected static final PartialModel BITS = PartialModel.of(Create.asResource("item/wand_of_symmetry/bits")); + protected static final PartialModel CORE = PartialModel.of(Create.asResource("item/wand_of_symmetry/core")); + protected static final PartialModel CORE_GLOW = PartialModel.of(Create.asResource("item/wand_of_symmetry/core_glow")); @Override protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType, diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 347e8943e9..c3d3557403 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -51,7 +51,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual float lidAngle = blockEntity.lid.getValue(partialTicks); float drawerOffset = blockEntity.drawers.getValue(partialTicks); - lid.loadIdentity() + lid.setIdentityTransform() .translate(getVisualPosition()) .center() .rotateYDegrees(-facing.toYRot()) @@ -62,7 +62,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual .setChanged(); for (int offset : Iterate.zeroAndOne) { - drawers[offset].loadIdentity() + drawers[offset].setIdentityTransform() .translate(getVisualPosition()) .center() .rotateYDegrees(-facing.toYRot()) diff --git a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java index e58f374be4..f5863190e3 100644 --- a/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItemRenderer.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.ItemStack; public class WrenchItemRenderer extends CustomRenderedItemModelRenderer { - protected static final PartialModel GEAR = new PartialModel(Create.asResource("item/wrench/gear")); + protected static final PartialModel GEAR = PartialModel.of(Create.asResource("item/wrench/gear")); @Override protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType, diff --git a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java index 53a7cd2594..3074f12773 100644 --- a/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/equipment/zapper/terrainzapper/WorldshaperItemRenderer.java @@ -22,9 +22,9 @@ import net.minecraft.world.item.ItemStack; public class WorldshaperItemRenderer extends ZapperItemRenderer { - protected static final PartialModel CORE = new PartialModel(Create.asResource("item/handheld_worldshaper/core")); - protected static final PartialModel CORE_GLOW = new PartialModel(Create.asResource("item/handheld_worldshaper/core_glow")); - protected static final PartialModel ACCELERATOR = new PartialModel(Create.asResource("item/handheld_worldshaper/accelerator")); + protected static final PartialModel CORE = PartialModel.of(Create.asResource("item/handheld_worldshaper/core")); + protected static final PartialModel CORE_GLOW = PartialModel.of(Create.asResource("item/handheld_worldshaper/core_glow")); + protected static final PartialModel ACCELERATOR = PartialModel.of(Create.asResource("item/handheld_worldshaper/accelerator")); @Override protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType, diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index af5c78e858..1201365619 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -59,7 +59,7 @@ public class FluidValveVisual extends ShaftVisual impleme float pointerRotation = Mth.lerp(value, 0, -90); settled = (value == 0 || value == 1) && blockEntity.pointer.settled(); - pointer.loadIdentity() + pointer.setIdentityTransform() .translate(getVisualPosition()) .center() .rotateYDegrees((float) yRot) diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java index ee228ccf6e..f5bae223eb 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/KineticBlockEntity.java @@ -27,7 +27,7 @@ import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.infrastructure.config.AllConfigs; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.resources.language.I18n; import net.minecraft.core.BlockPos; @@ -265,7 +265,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI effects.triggerOverStressedEffect(); if (clientPacket) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); } public float getGeneratedSpeed() { @@ -578,7 +578,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI public void requestModelDataUpdate() { super.requestModelDataUpdate(); if (!this.remove) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 203d8ee3e6..59d1b099e1 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -48,7 +48,7 @@ public class HandCrankVisual extends KineticBlockEntityVisual implements float y = blockPos.getY() + ((float) facingVec.getY()) * distance; float z = blockPos.getZ() + ((float) facingVec.getZ()) * distance; - pole.setPosition(x, y, z).setChanged(); - hand.setPosition(x, y, z).setChanged(); + pole.position(x, y, z).setChanged(); + hand.position(x, y, z).setChanged(); } static void updateRotation(OrientedInstance pole, OrientedInstance hand, float yRot, float xRot, float zRot) { @@ -130,12 +130,12 @@ public class DeployerVisual extends ShaftVisual implements Quaternionf q = Axis.YP.rotationDegrees(yRot); q.mul(Axis.XP.rotationDegrees(xRot)); - hand.setRotation(q) + hand.rotation(q) .setChanged(); q.mul(Axis.ZP.rotationDegrees(zRot)); - pole.setRotation(q) + pole.rotation(q) .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java index f66690ddfa..81a60f8682 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java @@ -25,7 +25,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.infrastructure.config.AllConfigs; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.SectionPos; @@ -552,7 +552,7 @@ public class ArmBlockEntity extends KineticBlockEntity implements ITransformable return; if (hadGoggles != goggles) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); boolean ceiling = isOnCeiling(); if (interactionPointTagBefore == null || interactionPointTagBefore.size() != interactionPointTag.size()) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index dc8e5aae22..47e1e40e15 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -132,12 +132,12 @@ public class ArmVisual extends SingleRotatingVisual implements S ArmRenderer.transformLowerArm(msr, lowerArmAngle); lowerBody.setTransform(msLocal) - .color(color) + .colorRgb(color) .setChanged(); ArmRenderer.transformUpperArm(msr, upperArmAngle); upperBody.setTransform(msLocal) - .color(color) + .colorRgb(color) .setChanged(); ArmRenderer.transformHead(msr, headAngle); diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 83275c57e2..74aeb1c4e4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -65,8 +65,8 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual } private void transformPole(float renderedHeadOffset) { - mixerPole.setPosition(getVisualPosition()) - .nudgePosition(0, -renderedHeadOffset, 0) + mixerPole.position(getVisualPosition()) + .translatePosition(0, -renderedHeadOffset, 0) .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index b1779e1096..e733943439 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -30,7 +30,7 @@ public class PressVisual extends ShaftVisual impleme Quaternionf q = Axis.YP .rotationDegrees(AngleHelper.horizontalAngle(blockState.getValue(MechanicalPressBlock.HORIZONTAL_FACING))); - pressHead.setRotation(q); + pressHead.rotation(q); transformModels(partialTick); } @@ -43,8 +43,8 @@ public class PressVisual extends ShaftVisual impleme private void transformModels(float pt) { float renderedHeadOffset = getRenderedHeadOffset(pt); - pressHead.setPosition(getVisualPosition()) - .nudgePosition(0, -renderedHeadOffset, 0) + pressHead.position(getVisualPosition()) + .translatePosition(0, -renderedHeadOffset, 0) .setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index b0d2e2270d..ed592d1992 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -39,9 +39,9 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual implements Si private void pivotPlate(float lidProgress) { float angle = lidProgress * 70; - EjectorRenderer.applyLidAngle(blockEntity, angle, plate.loadIdentity().translate(getVisualPosition())); + EjectorRenderer.applyLidAngle(blockEntity, angle, plate.setIdentityTransform().translate(getVisualPosition())); plate.setChanged(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java index 9aadd7ef68..733c8301d8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java @@ -27,7 +27,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; import com.simibubi.create.infrastructure.config.AllConfigs; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -363,7 +363,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering extractionCooldown = compound.getInt("TransferCooldown"); if (clientPacket) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); } public void onTransfer(ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java index 6d12475976..9a932ce55b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelBlockEntity.java @@ -19,7 +19,7 @@ import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; @@ -109,7 +109,7 @@ public class BeltTunnelBlockEntity extends SmartBlockEntity { sides.addAll(flaps.keySet()); super.read(compound, clientPacket); if (clientPacket) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); } private LerpedFloat createChasingFlap() { diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java index 62967b1203..32f6971b91 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java @@ -137,7 +137,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual buttons; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java index 8b9ded2930..8c01ad8e5e 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java @@ -7,9 +7,9 @@ import java.util.Map; import java.util.stream.IntStream; import org.jetbrains.annotations.Nullable; -import org.joml.Matrix3f; -import org.joml.Matrix4f; -import org.joml.Quaternionf; +import org.joml.Matrix3fc; +import org.joml.Matrix4fc; +import org.joml.Quaternionfc; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -304,7 +304,7 @@ public abstract class BogeyRenderer { */ private String keyFromModel(PartialModel partialModel) { - return partialModel.getLocation().toString(); + return partialModel.modelLocation().toString(); } /** @@ -348,7 +348,7 @@ public abstract class BogeyRenderer { public BogeyModelData setEmptyTransform() { if (this.transform instanceof TransformedInstance model) - model.setEmptyTransform() + model.setZeroTransform() .setChanged(); return this; } @@ -367,19 +367,19 @@ public abstract class BogeyRenderer { } @Override - public BogeyModelData mulPose(Matrix4f pose) { + public BogeyModelData mulPose(Matrix4fc pose) { this.transform.mulPose(pose); return this; } @Override - public BogeyModelData mulNormal(Matrix3f normal) { + public BogeyModelData mulNormal(Matrix3fc normal) { this.transform.mulNormal(normal); return this; } @Override - public BogeyModelData rotate(Quaternionf quaternion) { + public BogeyModelData rotate(Quaternionfc quaternion) { this.transform.rotate(quaternion); return this; } @@ -391,7 +391,7 @@ public abstract class BogeyRenderer { } @Override - public BogeyModelData translate(double x, double y, double z) { + public BogeyModelData translate(float x, float y, float z) { this.transform.translate(x, y, z); return this; } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java index 9c9f1806c9..43e8a7d09c 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java @@ -22,7 +22,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; -import dev.engine_room.flywheel.api.visualization.VisualizationManager; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction.Axis; import net.minecraft.core.registries.Registries; @@ -225,7 +225,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 16); } - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this)); if (hasInteractableConnections()) registerToCurveInteraction(); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java index 7e69bf3ed4..d5d7054649 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackMaterialFactory.java @@ -100,9 +100,9 @@ public class TrackMaterialFactory { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { String namespace = id.getNamespace(); String prefix = "block/track/" + id.getPath() + "/"; - tieModel = new PartialModel(new ResourceLocation(namespace, prefix + "tie")); - leftSegmentModel = new PartialModel(new ResourceLocation(namespace, prefix + "segment_left")); - rightSegmentModel = new PartialModel(new ResourceLocation(namespace, prefix + "segment_right")); + tieModel = PartialModel.of(new ResourceLocation(namespace, prefix + "tie")); + leftSegmentModel = PartialModel.of(new ResourceLocation(namespace, prefix + "segment_left")); + rightSegmentModel = PartialModel.of(new ResourceLocation(namespace, prefix + "segment_right")); }); return this; } diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java index a1c4c7da2d..8f61275bdc 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateBlockEntityBuilder.java @@ -13,7 +13,7 @@ import com.tterrag.registrate.builders.BuilderCallback; import com.tterrag.registrate.util.OneTimeEventReceiver; import com.tterrag.registrate.util.nullness.NonNullSupplier; -import dev.engine_room.flywheel.lib.visual.SimpleBlockEntityVisualizer; +import dev.engine_room.flywheel.lib.visualization.SimpleBlockEntityVisualizer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java index c9109d9e40..944508939c 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateEntityBuilder.java @@ -10,7 +10,7 @@ import com.tterrag.registrate.builders.EntityBuilder; import com.tterrag.registrate.util.OneTimeEventReceiver; import com.tterrag.registrate.util.nullness.NonNullSupplier; -import dev.engine_room.flywheel.lib.visual.SimpleEntityVisualizer; +import dev.engine_room.flywheel.lib.visualization.SimpleEntityVisualizer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index dde9646d15..7d1b430bb0 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -34,10 +34,10 @@ public class AllInstanceTypes { .vector("axis", FloatRepr.NORMALIZED_BYTE, 3) .build()) .writer((ptr, instance) -> { - MemoryUtil.memPutByte(ptr, instance.r); - MemoryUtil.memPutByte(ptr + 1, instance.g); - MemoryUtil.memPutByte(ptr + 2, instance.b); - MemoryUtil.memPutByte(ptr + 3, instance.a); + MemoryUtil.memPutByte(ptr, instance.red); + MemoryUtil.memPutByte(ptr + 1, instance.green); + MemoryUtil.memPutByte(ptr + 2, instance.blue); + MemoryUtil.memPutByte(ptr + 3, instance.alpha); ExtraMemoryOps.put2x16(ptr + 4, instance.light); ExtraMemoryOps.put2x16(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); @@ -67,10 +67,10 @@ public class AllInstanceTypes { .scalar("scrollMult", FloatRepr.FLOAT) .build()) .writer((ptr, instance) -> { - MemoryUtil.memPutByte(ptr, instance.r); - MemoryUtil.memPutByte(ptr + 1, instance.g); - MemoryUtil.memPutByte(ptr + 2, instance.b); - MemoryUtil.memPutByte(ptr + 3, instance.a); + MemoryUtil.memPutByte(ptr, instance.red); + MemoryUtil.memPutByte(ptr + 1, instance.green); + MemoryUtil.memPutByte(ptr + 2, instance.blue); + MemoryUtil.memPutByte(ptr + 3, instance.alpha); ExtraMemoryOps.put2x16(ptr + 4, instance.light); ExtraMemoryOps.put2x16(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); @@ -104,10 +104,10 @@ public class AllInstanceTypes { .vector("scale", FloatRepr.FLOAT, 2) .build()) .writer((ptr, instance) -> { - MemoryUtil.memPutByte(ptr, instance.r); - MemoryUtil.memPutByte(ptr + 1, instance.g); - MemoryUtil.memPutByte(ptr + 2, instance.b); - MemoryUtil.memPutByte(ptr + 3, instance.a); + MemoryUtil.memPutByte(ptr, instance.red); + MemoryUtil.memPutByte(ptr + 1, instance.green); + MemoryUtil.memPutByte(ptr + 2, instance.blue); + MemoryUtil.memPutByte(ptr + 3, instance.alpha); ExtraMemoryOps.put2x16(ptr + 4, instance.light); ExtraMemoryOps.put2x16(ptr + 8, instance.overlay); MemoryUtil.memPutFloat(ptr + 12, instance.x); diff --git a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java index 47cf0ebe8f..43fd54a935 100644 --- a/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/BlockEntityRenderHelper.java @@ -16,7 +16,7 @@ import com.simibubi.create.infrastructure.config.AllConfigs; import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.lib.transform.TransformStack; -import dev.engine_room.flywheel.lib.visual.VisualizationHelper; +import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; @@ -50,7 +50,7 @@ public class BlockEntityRenderHelper { Iterator iterator = customRenderBEs.iterator(); while (iterator.hasNext()) { BlockEntity blockEntity = iterator.next(); - if (VisualizationManager.supportsVisualization(world) && VisualizationHelper.shouldSkipRender(blockEntity)) + if (VisualizationManager.supportsVisualization(world) && VisualizationHelper.skipVanillaRender(blockEntity)) continue; BlockEntityRenderer renderer = Minecraft.getInstance().getBlockEntityRenderDispatcher().getRenderer(blockEntity); diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index 6c61512ff5..1f77d787c3 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -2,8 +2,10 @@ package com.simibubi.create.foundation.render; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3f; +import org.joml.Matrix3fc; import org.joml.Matrix4f; -import org.joml.Quaternionf; +import org.joml.Matrix4fc; +import org.joml.Quaternionfc; import org.joml.Vector3f; import org.joml.Vector3fc; import org.joml.Vector4f; @@ -220,19 +222,21 @@ public class SuperByteBuffer implements TransformStack { } @Override - public SuperByteBuffer rotate(Quaternionf quaternion) { - transforms.mulPose(quaternion); + public SuperByteBuffer rotate(Quaternionfc quaternion) { + var last = transforms.last(); + last.pose().rotate(quaternion); + last.normal().rotate(quaternion); return this; } @Override - public SuperByteBuffer translate(double x, double y, double z) { + public SuperByteBuffer translate(float x, float y, float z) { transforms.translate(x, y, z); return this; } @Override - public SuperByteBuffer mulPose(Matrix4f pose) { + public SuperByteBuffer mulPose(Matrix4fc pose) { transforms.last() .pose() .mul(pose); @@ -240,7 +244,7 @@ public class SuperByteBuffer implements TransformStack { } @Override - public SuperByteBuffer mulNormal(Matrix3f normal) { + public SuperByteBuffer mulNormal(Matrix3fc normal) { transforms.last() .normal() .mul(normal); diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java index 731a38e3fa..4927bb4232 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/DebugInformation.java @@ -80,7 +80,7 @@ public class DebugInformation { .getVersion() .toString()) .orElse("None")) - .put("Flywheel Backend", () -> Backend.REGISTRY.getIdOrThrow(BackendManager.getBackend()).toString()) + .put("Flywheel Backend", () -> Backend.REGISTRY.getIdOrThrow(BackendManager.currentBackend()).toString()) .put("OpenGL Renderer", GlUtil::getRenderer) .put("OpenGL Version", GlUtil::getOpenGLVersion) .put("Graphics Mode", () -> Minecraft.getInstance().options.graphicsMode().toString()) From eae8cd467b46ced02e5518a04b1406597465df92 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 27 Jul 2024 18:30:40 -0700 Subject: [PATCH 35/35] Cranking out fixes - Fix hand crank not deleting its rotatingModel - Fix exception setting up pulley lightcache - Bump flywheel build to fix garbage models --- gradle.properties | 2 +- .../pulley/AbstractPulleyVisual.java | 24 ++++++++++++------- .../kinetics/crank/HandCrankVisual.java | 4 ++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/gradle.properties b/gradle.properties index 944938715e..aa6866da26 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-103 +flywheel_version = 1.0.0-beta-104 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index 395dce1fed..d5dd84a903 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -36,7 +36,7 @@ public abstract class AbstractPulleyVisual extends protected final Direction rotatingAbout; protected final Axis rotationAxis; - private final LightCache lightCache = new LightCache(1); + private final LightCache lightCache = new LightCache(); private float offset; @@ -60,6 +60,12 @@ public abstract class AbstractPulleyVisual extends updateOffset(partialTick); } + @Override + public void setSectionCollector(SectionCollector sectionCollector) { + super.setSectionCollector(sectionCollector); + lightCache.updateSections(); + } + protected abstract Instancer getRopeModel(); protected abstract Instancer getMagnetModel(); @@ -172,16 +178,11 @@ public abstract class AbstractPulleyVisual extends } private class LightCache { - private final ByteList data; + private final ByteList data = new ByteArrayList(); private final LongSet sections = new LongOpenHashSet(); private final BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); private int sectionCount; - public LightCache(int initialSize) { - data = new ByteArrayList(initialSize); - setSize(initialSize); - } - public void setSize(int size) { if (size != data.size()) { data.size(size); @@ -196,11 +197,18 @@ public abstract class AbstractPulleyVisual extends for (int i = 0; i < sectionCount; i++) { sections.add(SectionPos.asLong(sectionX, sectionY - i, sectionZ)); } - lightSections.sections(sections); + // Will be null during initialization + if (lightSections != null) { + updateSections(); + } } } } + public void updateSections() { + lightSections.sections(sections); + } + public void update() { mutablePos.set(pos); diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 59d1b099e1..1eebee84b6 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -59,6 +59,10 @@ public class HandCrankVisual extends KineticBlockEntityVisual