From 7b8dd1bad6cb2ffb76c3f744e70e597cc0b523b9 Mon Sep 17 00:00:00 2001 From: Jika Date: Sun, 17 Aug 2025 14:14:53 +0200 Subject: [PATCH] Update models to use gt base texture --- .gitignore | 1 + models/lathe.bbmodel | 1 + .../assets/ibg/textures/block/ev_lathe.png | Bin 0 -> 929 bytes .../assets/ibg/textures/block/hv_lathe.png | Bin 0 -> 932 bytes .../assets/ibg/textures/block/iv_lathe.png | Bin 0 -> 889 bytes .../assets/ibg/textures/block/luv_lathe.png | Bin 0 -> 896 bytes .../assets/ibg/textures/block/lv_lathe.png | Bin 0 -> 804 bytes .../assets/ibg/textures/block/max_lathe.png | Bin 0 -> 854 bytes .../assets/ibg/textures/block/mv_lathe.png | Bin 0 -> 843 bytes .../assets/ibg/textures/block/opv_lathe.png | Bin 0 -> 965 bytes .../assets/ibg/textures/block/uev_lathe.png | Bin 0 -> 961 bytes .../assets/ibg/textures/block/uhv_lathe.png | Bin 0 -> 883 bytes .../assets/ibg/textures/block/uiv_lathe.png | Bin 0 -> 922 bytes .../assets/ibg/textures/block/uv_lathe.png | Bin 0 -> 981 bytes .../assets/ibg/textures/block/uxv_lathe.png | Bin 0 -> 970 bytes .../assets/ibg/textures/block/zpm_lathe.png | Bin 0 -> 968 bytes src/main/java/com/imbgt/ibg/IBG.java | 13 + .../java/com/imbgt/ibg/block/MachineSets.java | 10 +- .../entity/client/AnimatedBlockModel.java | 7 +- .../ibg/datagen/TierTextureBakeProvider.java | 232 ++++++++++++++++++ .../mixin/MetaMachineBlockEntityGeoMixin.java | 5 - .../assets/ibg/blockstates/lathe.json | 5 - .../resources/assets/ibg/geo/lathe.geo.json | 18 +- .../assets/ibg/textures/block/lathe.png | Bin 499 -> 271 bytes .../ibg/textures/block/lathe_overlay.png | Bin 0 -> 504 bytes 25 files changed, 271 insertions(+), 21 deletions(-) create mode 100644 models/lathe.bbmodel create mode 100644 src/generated/resources/assets/ibg/textures/block/ev_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/hv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/iv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/luv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/lv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/max_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/mv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/opv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/uev_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/uhv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/uiv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/uv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/uxv_lathe.png create mode 100644 src/generated/resources/assets/ibg/textures/block/zpm_lathe.png create mode 100644 src/main/java/com/imbgt/ibg/datagen/TierTextureBakeProvider.java delete mode 100644 src/main/resources/assets/ibg/blockstates/lathe.json create mode 100644 src/main/resources/assets/ibg/textures/block/lathe_overlay.png diff --git a/.gitignore b/.gitignore index cf326b8..2de2800 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ src/generated/resources/.cache/ *.DS_Store .factorypath +run-data diff --git a/models/lathe.bbmodel b/models/lathe.bbmodel new file mode 100644 index 0000000..15ecdf6 --- /dev/null +++ b/models/lathe.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"animated_entity_model","box_uv":true},"name":"lathe","model_identifier":"","visible_box":[4,3.5,1.25],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"geckolib_modid":"ibg","geckolib_model_type":"Block","geckolib_filepath_cache":{"model":"/home/jika/Projects/gt/ibg/src/main/resources/assets/ibg/geo/lathe.geo.json","animation":"/home/jika/Projects/gt/ibg/src/main/resources/assets/ibg/animations/lathe.animation.json","display":"/home/jika/Documents/mc/animated_block/models/block/animated_block.json"},"resolution":{"width":128,"height":128},"elements":[{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[6,7,-1],"to":[8,18,1],"autouv":0,"color":6,"rotation":[90,90,0],"origin":[7,18,0],"uv_offset":[0,30],"faces":{"north":{"uv":[2,32,4,43],"texture":0},"east":{"uv":[0,32,2,43],"texture":0},"south":{"uv":[6,32,8,43],"texture":0},"west":{"uv":[4,32,6,43],"texture":0},"up":{"uv":[4,32,2,30],"texture":0},"down":{"uv":[6,30,4,32],"texture":0}},"type":"cube","uuid":"7141d37a-992c-8b3d-c86d-1dd3baa85c78"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-24,0,-8],"to":[8,14,8],"autouv":0,"color":2,"origin":[-7,0,-7],"faces":{"north":{"uv":[16,16,48,30],"texture":0},"east":{"uv":[0,16,16,30],"texture":0},"south":{"uv":[64,16,96,30],"texture":0},"west":{"uv":[48,16,64,30],"texture":0},"up":{"uv":[48,16,16,0],"texture":0},"down":{"uv":[80,0,48,16],"texture":0}},"type":"cube","uuid":"937f44ad-7716-a358-b30f-6835d5d06ef6"}],"outliner":[{"name":"bone","origin":[-7,6,0],"color":0,"uuid":"428f1f9e-e4b2-7c5c-065b-40b7286eed4a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["937f44ad-7716-a358-b30f-6835d5d06ef6"]},{"name":"bone2","origin":[-17,18,0],"color":0,"uuid":"bcfb751a-5b73-7ffc-1692-1a4a99ecaaa0","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["7141d37a-992c-8b3d-c86d-1dd3baa85c78"]}],"textures":[{"path":"/home/jika/Projects/gt/ibg/src/main/resources/assets/ibg/textures/block/lathe_overlay.png","name":"lathe_overlay.png","folder":"block","namespace":"","id":"0","group":"","width":128,"height":128,"uv_width":128,"uv_height":128,"particle":true,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"0940fe30-d3a9-4a87-ed7b-9acbdb7bea56","relative_path":"../src/main/resources/assets/ibg/textures/block/lathe_overlay.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAMdSURBVHhe7Zs9SkNBFEZfQFBIbwIRURTcgr2LcAluxlhoZZUV2LmIYJ1GEPxBIRHbFFaaJ76ghUXehZmRc9Lfmfm+Ofnmvkxepwp+riePH8EhQuWj4UWoPlp8NTrtRMfIWR9efA3A4f5WFg3ju+eqBmDQ62eZ/2U2rQRAAMJfoiz0fk8aXrwJ4BHgEZDzKxyc2wQIGGgPsDDPI8AjwCMgkCK5Sz0CAjvgEeAR4O8A9gD2APYAgWMkd6k9QGAH7AHsAewB7AHsAbwODhwjuUs7R9NhaAP7k5OsGi5vzkPzrx2/heqjxRt7Z+E+LLKGLwAOe5utxhjPXqsagJ1+t1V9tOhhOq9qALq7262Gmt8/VTUA64ODVvXRoveX20oAAi4KQMC85v8AJoAJ4BHgEWAPEA/T1UewB1jds18V9gBBAxflPgX4FOBjoI+B/g4Qz9IWI9gDtDDtZ4k9QNBAewB/CbQJtAn0MigepO1HyH4X0Cy9ecu3edv2v7/02H5LWJXLq0gBYG18o3b5f4DmXr+5X2/uyXNHFHNb0qkWgHReFzmTABS5LekWJQDpvC5yJgEoclvSLUoA0nld5EwCUOS2pFuUAKTzusiZBKDIbUm3KAFI53WRMwlAkduSblFZX0tKJ9OZ/nJAAOBsCIAAwB2AyzcBBADuAFy+CSAAcAfg8k0AAYA7AJdvAggA3AG4fBNAAOAOwOWbAAIAdwAu3wQQALgDcPkmgADAHYDLNwEEAO4AXL4JIABwB+DyTQABgDsAl28CCADcAbh8E0AA4A7A5ZsAAgB3AC7fBBAAuANw+SaAAMAdgMs3AQQA7gBcvgkgAHAH4PJNAAGAOwCXbwIIANwBuHwTQADgDsDlmwACAHcALt8EEAC4A3D5JoAAwB2AyzcBBADuAFy+CSAAcAfg8k0AAYA7AJdvAggA3AG4fBNAAOAOwOWbAAIAdwAu3wQQALgDcPkmgADAHYDLNwEEAO4AXL4JIABwB+DyTQABgDsAl28CCADcAbh8E0AA4A7A5ZsAAgB3AC7fBBAAuANw+SaAAMAdgMs3AeAAfAJCWyqfkCdYUQAAAABJRU5ErkJggg=="},{"path":"/home/jika/Projects/gt/ibg/src/main/resources/assets/ibg/textures/block/lathe.png","name":"lathe.png","folder":"block","namespace":"","id":"1","group":"","width":128,"height":128,"uv_width":128,"uv_height":128,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"3707482b-6125-b672-1035-e8b10449f811","relative_path":"../src/main/resources/assets/ibg/textures/block/lathe.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAALTSURBVHhe7ZihUWQBFATZqhOEgCeUC4IQSAYQoE4RAY4o0CSAQ5ADFJ8q1InWPb3m19Yf0zO9T+zprM90A6dp+uDPEmBcggRIgPEGxvG7AAkw3sA4fhcgAcYbGMfvAiTAeAPj+F2ABBhvYBy/C5AA4w2M43cBEmC8gXH8LkACjDcwjt8FSIDxBsbxuwAJMN7AOH4XIAHGGxjH7wIkwHgD4/hdgAQYb2AcvwuQAD8NPL++fX4/H28fju9PjzfJMSDH78gJMLD2fxBPf99vj1/+xev18frfy/3x/HP1cTzPL++6BGI3EkA8LkFLANKSOJMA4nEJWgKQlsSZBBCPS9ASgLQkziSAeFyClgCkJXEmAcTjErQEIC2JM/3NKx6XoCUAaUmcSQDxuAQtAUhL4kwCiMclaAlAWhJnEkA8LkFLANKSOJMA4nEJWgKQlsSZBBCPS9ASgLQkziSAeFyClgCkJXEmAcTjErQEIC2JMwkgHpegJQBpSZxJAPG4BC0BSEviTAKIxyVoCUBaEmcSQDwuQUsA0pI4kwDicQlaApCWxJkEEI9L0BKAtCTOJIB4XIKWAKQlcSYBxOMStAQgLYkzCSAel6AlAGlJnEkA8bgELQFIS+JMAojHJWgJQFoSZxJAPC5BSwDSkjiTAOJxCVoCkJbEmQQQj0vQEoC0JM4kgHhcgpYApCVxJgHE4xK0BCAtiTMJIB6XoCUAaUmcSQDxuAQtAUhL4kwCiMclaAlAWhJnEkA8LkFLANKSOJMA4nEJWgKQlsSZBBCPS9ASgLQkziSAeFyClgCkJXEmAcTjErQEIC2JMwkgHpegJQBpSZxJAPG4BC0BSEviTAKIxyVoCUBaEmcSQDwuQUsA0pI4kwDicQlaApCWxJkEEI9L0BKAtCTOJIB4XIKWAKQlcSYBxOMStAQgLYkzCSAel6AlAGlJnEkA8bgELQFIS+JMAojHJWhfrQJmgRuLWtwAAAAASUVORK5CYII="}],"animations":[{"uuid":"d0f5e957-f0c8-cd4c-fb8d-7dffc499601d","name":"idle","loop":"loop","override":false,"length":0.25,"snapping":24,"selected":false,"saved":true,"path":"/home/jika/Documents/mc/animated_block/animations/animated_block.animation.json","anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{"bcfb751a-5b73-7ffc-1692-1a4a99ecaaa0":{"name":"bone2","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"ea9857fb-0989-8369-5216-46906cd0487c","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"180","y":"\n","z":"0"}],"uuid":"420400a2-62af-f264-0c52-d49a02e47d88","time":0.125,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"360","y":"0","z":"0"}],"uuid":"434a4408-8e86-a447-9aaa-066fed113dd1","time":0.25,"color":-1,"interpolation":"linear"}]}}}]} \ No newline at end of file diff --git a/src/generated/resources/assets/ibg/textures/block/ev_lathe.png b/src/generated/resources/assets/ibg/textures/block/ev_lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..33ae9557587bc1172ebc16494d2c6aaefd7ddde3 GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrV9xM#aSW-5dwYFvSBRsC>%&U( z`wq&10?E8CJU%@~PP!Nv8XC?EU}iS_z{qmY<${AxO#|ndsIbG+jN8pN=uf$F<=282 zzb~_|D!aP&c5Tt7i*uvDm-WB1+jn8dwAYsV>b^c}eOzT%Tzfv*vgOOyxBYitKYw37 z|J=Se{l(|huNU=yd-(LY{ddm7Z@=apFXEVBFweGTWA)c3IrlA|SDkxZ`0n#xp95#U z+V(#c;PZEDTKI8F!MXH9k1U?wS*#{(05+E8#IzXO#-Q-2WWGr}#uR>hP+EPow57t1*X~ zXnLR}^zfNVrZwMxvz&@}``3tv5h2@%tWN{RM9beJ( z%X*4i!q=B4zp~8GErEH6V`Ps07c-{4PiIP72Q*9F zeo=*2g;vF^A5Wt0t(5s*U1JY*N@f4G^Y=Jb$t{0+3ls`3zc_w9_-#T_%=xwU`}Unb zUQl8bEz|ow`d(p8+Ue7Ockvo=yxxBG`%j5J#wE@_CmuGu{{Ne@2D2B#HTn4a&yy{z zrt^J1+;&WB>EfS^Q?hr?pY@9+qCTc}e*eQ4JkggDHt`6f@tW2+T8i9bWL|9<>hYuC0|c#WG?ymhqo z{OriHKl7M2{QCh?f0c2`=28R8^9-;4$~Aob9|v;DJ?E0H+?DGt-TKL+ur@F8TK?+y zpABPT58m9Cm7cx2c~M(q#QwD)AFg>|)lf2t@A}o*uO%I}89=Q4%>vsHJ3KE ze$0fpDwXx}!Zi_6bFE9}IHq!Mu8RhG>;JQ}&)-|$+IpM++uHlrRi86OT$wuGzkG}I z`*Yvl{`pdJzpi%o{`|kcccsKIbQd$~oMYW!A%5TyCdXrviYEmqvvNP9L+pjStDKKc Q0%ko1Pgg&ebxsLQ06I?3#Q*>R literal 0 HcmV?d00001 diff --git a/src/generated/resources/assets/ibg/textures/block/hv_lathe.png b/src/generated/resources/assets/ibg/textures/block/hv_lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..2714d7b35c1206ce1a0dbc6e7bfae52796bb0af2 GIT binary patch literal 932 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 wt+-_O}yUju@&)%mEqW>FVdQ&MBb@0Kku(ZvX%Q literal 0 HcmV?d00001 diff --git a/src/generated/resources/assets/ibg/textures/block/mv_lathe.png b/src/generated/resources/assets/ibg/textures/block/mv_lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..723162aee8ab08ab993e5d67eaebcb2e70b6cf9a GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU>5RpaSW-5dwXkRmx!ZC>%&^} zS|;A!5Fg&K`3{M~g2MA13=G6s1f7*Pi}v!kFbi+yJ>%wgc;cfAmyK`pF5UY5{{tgi zzt|nMtEzL{{Qb;!75+c??%iVb;Mo1e@85simv#L`#g~6)7R#^}{(F4=-QVf&gEh|I ztC`bxyXxn|&mq6o#J>OF{_ecZslp7t=O0&Z-(33Z&(V;#Rrv=_{GI7;`Ah1{^+ioZ z7W=Ymp8q&6v+TFqd!X9D0xq|OGF<16N3H(8j~T2zu;JJ53ygAH{!4eSxZ5!Cw{d@w z%mQaikvKMss`_Vv=VBVXAEq`e{+=%PG^OEq%l0jdi@yTd8V;=s1NwON%@dx09Lave z&Ly=#^4_K39~mI)xdIq1r|{?<{v5TpirEe1%!~bsTrN)=rX9Mx`ugwVQ@|Ge5m;Iv z^C-sBWa{sg$Z;_rbzxT@g$|;N2JF+g!>i-_P?)>+i zcG}mU|BjhI_4Vi4b>~lgoq4>VL}?dyh?S!J`_*N=hiClGiNE-N{@;2g-c3*MAAWiN z+Wg-a=eB<<`1xTnzvJ5~c8CAJ{@v++_r>(ddR5+651+|3mAsi;DF65NuVVXMmmf&^ zILk`igM`qF`1>Hueh&5WKUw&A*Ix>~!v@t}!zB0W!iP$xFZr*}|9z47j%8ZgdEo{1 z(e>}#%PX0V^XwO4_&XgW<)^+N(d5d;!|4oP*1rexOqJM!d#<)2Hz25=ROwjq4; z4p*;@lV$k(`ZvfO{en^+PZ_7TT?Yjh&#&v>pVyTv*N)&flsczw7%ms}^y@xmu=75i z-}CQF?($ugzaNJDv|MMQ*RW{a-Cf)VPR3`Trv07$_1?+N{<$A-n4D& zhR^&SiQ7L(TTDOsF|0fx)#yII%(_mw8Gp~7Sy#Sot?tDq&kkSx`7U_jF)O~7S?}!j zE?c&1nG^4J{#L7trD|6aeiuxw-hY0v1=qXZPmaI3{bKj4n+FaH+;~3mdvBCv+`728 zwUS;B*UJ2k+AI4j!1l(@5ZPBYLQUs)-hUn_!@A-@NO5hsQ^T*2yRUcOUU74tcjEPk z3iIms=4uMh>*l)`iac=ozt*k7zs#O%>4luU{nOBO@Djf~{nHRlUjS^Z&%I!iR@$O|Eo2wsnFE9L-E5W-w8|>1>vMI+Ga~bjlER1X@ ztk7q(4>hlvAC@fL-zGbw7-V~4#x28Nkq^wX4`M z{EB}4{d1u8ZU*TJn~L4JnHPRtdH*Kk3cEvnHpr0W+#Z$ke)UoN=l9=w+2F*y{r2?u zogW{V7HIEg_;vZ$-)W%ohp|{)t-=lD>aUTh!e7{9m6x-x~1me)8NzMv*?& q01GjPhY<{|$rv19o}vUaJo?Mpvh9gpm~inNkU5^NelF{r5}E*xp4Aip literal 0 HcmV?d00001 diff --git a/src/generated/resources/assets/ibg/textures/block/uev_lathe.png b/src/generated/resources/assets/ibg/textures/block/uev_lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..65ff33b6e73bd68a7b6daadc554d1aa57878e436 GIT binary patch literal 961 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrVD9jAaSW-5dpmPspGcs9>v!t{ z4W5Gw1XvscIz&B$CjDg;;*fIQlqV|Hd8p~OzC*I0glI&K{uS93{yF!b;p@x&4>x3*J^y!f_1ePsZ*Pj2-siPQtNmptQ^oUZ zqsHQ#zH4@t``&FWTDx0s?^e5=*O&U+w>hVskeJ(dYfn$reX02euKn8iEVkY5uLR%B zh3B26SEQYt`Fu`}gZJNk&$eD$E`K(8h(w7xV;N`5Kc_x9|L)o-^ma&zwK;=TE!O#zyvkEv&W(+TYr;u;xzc6`9!^ z-`t_{ry0ZFqS|kZt*dx`ZVdU)bNSZf z*RSKWuUmb2{pDu=yA=|m%U+gz)C*Z(YP>JM*Pr3n(_e4g%WZbvYv}%drHZ+<`PvPJ zFQ>nPmDVZ-HtOvWdw=rkU#YJw3*y(EuPZrzc||~AX_M&IjNBvFzeE8INCg{kaBD{X zvEV(~O&8Z+PPgB+n71M;HYfHvZ$&ZOz#S5zE1dRzs}{H4&Iogj_{v3D7pp=KZmo#j ze2fihg?*An%mVWVi}rqNo3c9ltGmFL(-61Ub_N#SJF%}|AH?0q>mPsKE-!s_^Jeql zC$&2s8Zb0}`tkgz+s8kjvbt7({;XM7TW{<7>@aULql64wLV-lX!9)hOb_@rfxG ZJvUe5diQ&Km7F@ra8Fl1mvv4FO#nNI&PD(L literal 0 HcmV?d00001 diff --git a/src/generated/resources/assets/ibg/textures/block/uhv_lathe.png b/src/generated/resources/assets/ibg/textures/block/uhv_lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ab630b84170dcf23a5b7d536a7e4b0d35eedf6 GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrV7BsfaSW-5dwat$@3wOaBFwW}oXz0%w!MT3KfBc|jO?q%HjpWP;6kp<)T zy-N?gc$Bno_3G7s&z?QI`O-({tv7T2UH$s?Yl+V0>{IFXZHv=v?d;x_@4g#y@_6j+ zw`E$Xdiwgy)7D$g|0~fawc^;F`}h67e)v$ZrDoo&7mRB_!hX36-f`VmT(xs|dLBde z8IU1tUGMnJJ$l!~uijVvXJ_2&9qbpZ>T@dAe!kiN@WsIuW*=0WSM%n~wKv^!?dO~0 z1)Cb>7R-KfQ1;jB=Z zJ)%FA`Mwg|MD~fd9L$f`7ccndbNuRoYd>Ye_T__&P?vs@xHIr;E#HTC@7~>HnD*@T zf={)7%cGxemOmWG{PjUuR)O5S^J|$i=7yi;U0-VV+fc^*0<+asoB6YuBeFr<`qp21 zU+-Fn+pXtII16%W4f{&P%I80BEDTz9uQB^9$g}E+f0d>!eZ2L`8lC!SH%)&7q98J||Kw-b2jr?_8d{^u8d+!tE+epB@5E?_<} zfByN(l5p__u`gv;&APp}m{;NdubOj<>fK%^N9bkaDN?_T78|}^NVxE0`zz6TgR`n??nvM1;yMKSgRPn zM(8#C*#t8CuR@^sgYM7wVX+m8T?k(Bb@sg%!-q2SWmc&-#=dOp*L4weRWAi+imvUk<($ z{a@Z@+4kM?A$!BG+8&mZef#q5;@Pt&Ki{tAe0}+&uYaWvr$1YxY5)47tmw->Z(cro z^ZD?@;^KdAmA;ho-hKT0%gaaWEy1z@M}K_$ckbEc)wln*ocmd0`|WSufmxq7%iaCR zS2VG%eoy(vU>U3DpSO0Dvad4*>X;jKKPGLpY^lvUHTc>|L%(W zi;&M*4>vVbk*3;HUSb-e;UZK7@ z?1^>s!)H4itisD5O!_(9H2>wFHSXoF_*NbL{P@;!y?KYOPpMw=W$u zfub>U4}>;<->9~5jt;}m-Os_AzwG<8DkP&pa^3=`<69Y?oIiiQ&Sbjqg@ol{>(n1s zALnxTm-q8#|Fc)hXM{gA91qL$Yxwi`(`NaznF6yMVt4NBdi|i(ck;E;|9ooob#>ns zTdq&wJ=1*k!LhJ)?>@48DZk73NlG#k0?A4*xNy=;VEfV;t6U zq++?_kBLhU<{DSnANs?m0yE5iQ5&0;*uMRBoJ#d^b>ANExBU63c5%g@H%|pBWv|O{ zF9_zZ+j~=EUX6w9qc1-yI_%@)c_w~;JS&m0q>uH2rI^F>2!^@I7#v_mp#(I%`^$P} W-Qs7_9gRmp=6JgLxvXYS{D~PZ)Y|p0H?O-sEZ;wD5h>hgmo8Illfs@5@%> zy|F?6SG~Krv8H5;a=G07yLYO;J?OvmBS!YV{l8c_@3)FCFZY+7STp^-zu9u}^x)bb zC3Q<}-c^16SfZ7g@@U~}kgS8`;`8n5{_Cz>-mbrF)%RalVrITz__lC++5KN%7R#Ci z9D5P6B4>tw*V(Uo*Jm>*f3;gWFaEe2M60b-=9DwZAU% z&0KIffmw9I;mws&#T8~7*$jgA>+ZP-cEknsP{osTs*183%#4{Omfjb;mjTl8m+zKC zd-~^+c>lG>O~R!lExg{p-`=`hYNfyZtw83ItCL?9&EN}>itWF0U&W>$?0^Z4cA{UO zT)SYC_PM4>=0L{ZZ6DlT0fQlgId@X?=E}*Du6%&8x{JJfN^DjmI6F#lFdDEZREPl`Vbuu#7 zP0hoL)s~9=J^OX$@mCoezY6|X|DWG||7^R@5wfNWT3;H+H+*`!d>_k7PU(iaogh*3 z1+AIkt4d+z=#OJJH zd@=nsSoOV?QA@jj`Pb9s zRzG&1A-1^nXYfd>9;HcA`GWIIqv^vwXsucfXE;4EJ>P Kb6Mw<&;$VS{=~Nc literal 0 HcmV?d00001 diff --git a/src/generated/resources/assets/ibg/textures/block/uxv_lathe.png b/src/generated/resources/assets/ibg/textures/block/uxv_lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..1cec3702101522d0440d6a94731dfc079aaf389a GIT binary patch literal 970 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrV4mpd;uum9_jaaX-Zcl27Uhcy zd=t1G`ZFf3xO9Qh$s|BgDvO1EfhVhK`U9pZGR@PP`k0q2_WjpjC;fYketq8O zU)8nup5yPdGFf*S*|kqDUR-f^;;`==YP$W5~Qo6&xzs{Z@Icb892 zUTJ4v{WZMu&ew?($cc1yx?g1D(>7Y>F#&Z^KlJM|@B z!jgZRKFB=K0BNh`IO(u|(d(026D8;Q&*hO>THY|dbvom^tIOrzu3)=1Ir{LI8P9Gw z^!`3wHKlI;2e;Rk`^!$S%w>}d_Rq6DX=)SBn=s{GX<)@-kVQEQ;urF*Zc{%jlfb)! z&A@5DKScaX^#-;VA67-0Z9g~Bjjiumyx2X6nkd#l@!SL0K2yuRm{N=H9(_{ejj0>Meei{yLLfe5FBb+5BR8$6|S>S*z7@7=Aqk ziQWN<#=dmDJ~!%k>Drx{48Kw#YU4uhEsU#(t=aoMFYK}z!{4IXXB#bl37llx6P^9? zXAJX;>o1M_&#vUXGWS(lNL)>>+v9(mT=&P!ugvKaTX^>c>-E-Oaok~*cg`a$D$mS4 z@O>+zy+88>{mbccvlriY-pZ)!^R!xbo8CQM&&6yP)`NtDr9Ygzvi1Gl2I)^bOnx!B z?e_y2D)r&e9*_4i(~rN}lLd8p7ISIi&L6iPRI)ADzsv6P4VnFiwn*r2GBYe+yYnZP z%YL8vm4D3l)%@NVY+L)YY*h{4br~~&*>kDyCVkp0cQ(2W32L-gw?E6rwwMcry zlRs&G(R6q6b(8>h6?W-BXC%#wzwhC-4D|S(qIY>S z=I&o#x%M;A&Wr66xnDf1jFw)0Ve;c_y@c0)oX=*@o&WWPpYDS07so9Bly5c*`2ItC zPw2nYS=X%~4)Ax*jmTYgsP}f*foVUdXU4sTxFGvuOn~TmyMtY^ycsk1ude(jeNPLd z;jcmv_lmVjv%_Yue0?gAG5WcD);#GOAgQ@J3$|^IymkHB@vRM3d2{PmKpYjw7^+}? zj`#H1+0$9~bp5G?xTuf&McU4an_Hx;=7T)28lv{2_7&dCmpAIy#P4gGJ`3pZKCTsq zRw#7+Qhi%|`;hK~LfzV{{c~e~bNL=(Rj9A2 z`<7f*%Jk3txV%N&+FRExkFR5z@c;eKoBcO4nW{oFORGM_t(Dxhta{6O&)p19`p=)Q zJL4y>Hp?M)snmk-eB1Ew?dlHyw)}Z>{EZDG?}f=14(v_Z&U;VzOSr+$$DcRLZ@$d3 zManjT|J-lOA65O_4*z~Ym7ZIDd2-;DgV#?mO|aLq|7~dfSK*=P8pp~Hx5L(Lvs#{g z>LLroFR^|Hny)(Sje1=;x1sMO#CvKFL|=zSvCn&6#Pr1fG|)-sgg-Qx96KnYM5$L1;&puy&FMag0xqSPH*E^m?FwCv`^Z2sc$4{q^3Wz^{ z?)>M^x5SP;^4EE|7ZmF>oZHA?b)4yi3 DEFINITIONS = List.of( + public final List DEFINITIONS = List.of( new Definition( "lathe", FootprintSpec.builder() @@ -31,17 +31,17 @@ public final class MachineSets { .build())); /** Does this machine belong to any configured family? */ - public static boolean matches(ResourceLocation id) { + public boolean matches(ResourceLocation id) { return DEFINITIONS.stream().anyMatch(f -> f.matches(id)); } /** The footprint spec for this machine, or null. */ - public static FootprintSpec getSpec(ResourceLocation id) { + public FootprintSpec getSpec(ResourceLocation id) { return DEFINITIONS.stream().filter(f -> f.matches(id)).map(Definition::spec).findFirst().orElse(null); } /** Asset key (filename stem) for this machine, or fallback to last segment. */ - public static String assetKeyFor(ResourceLocation id) { + public String assetKeyFor(ResourceLocation id) { return DEFINITIONS.stream().filter(f -> f.matches(id)).map(Definition::suffix).findFirst() .orElseGet(() -> { var p = id.getPath(); diff --git a/src/main/java/com/imbgt/ibg/block/entity/client/AnimatedBlockModel.java b/src/main/java/com/imbgt/ibg/block/entity/client/AnimatedBlockModel.java index c3daad2..f3fd85e 100644 --- a/src/main/java/com/imbgt/ibg/block/entity/client/AnimatedBlockModel.java +++ b/src/main/java/com/imbgt/ibg/block/entity/client/AnimatedBlockModel.java @@ -28,8 +28,11 @@ public class AnimatedBlockModel extends GeoModel { @Override public ResourceLocation getTextureResource(T anim) { - String key = keyFrom(anim); - return new ResourceLocation(IBG.MOD_ID, "textures/block/" + key + ".png"); + if (anim instanceof MetaMachineBlockEntity mme) { + var id = mme.getMetaMachine().getDefinition().getId(); + return new ResourceLocation(IBG.MOD_ID, "textures/block/" + id.getPath() + ".png"); + } + return new ResourceLocation("ibg", "textures/block/fallback.png"); } @Override diff --git a/src/main/java/com/imbgt/ibg/datagen/TierTextureBakeProvider.java b/src/main/java/com/imbgt/ibg/datagen/TierTextureBakeProvider.java new file mode 100644 index 0000000..e59e29d --- /dev/null +++ b/src/main/java/com/imbgt/ibg/datagen/TierTextureBakeProvider.java @@ -0,0 +1,232 @@ +// src/main/java/com/imbgt/ibg/datagen/TierTextureBakeProvider.java +package com.imbgt.ibg.datagen; + +import com.imbgt.ibg.block.MachineSets; + +import com.gregtechceu.gtceu.api.GTValues; + +import net.minecraft.Util; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraftforge.common.data.ExistingFileHelper; + +import com.google.common.hash.HashCode; +import com.google.common.hash.Hashing; +import com.google.gson.*; + +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.*; +import java.nio.file.Path; +import java.util.Locale; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +import javax.imageio.ImageIO; + +public final class TierTextureBakeProvider implements DataProvider { + + private record TierTiles(BufferedImage side, BufferedImage top, BufferedImage bottom) {} + + private final PackOutput out; + private final ExistingFileHelper ef; + + public TierTextureBakeProvider(PackOutput out, ExistingFileHelper ef) { + this.out = out; + this.ef = ef; + } + + @Override + public String getName() { + return "IBG tier texture baker"; + } + + @Override + public CompletableFuture run(CachedOutput cache) { + return CompletableFuture.runAsync(() -> { + try { + for (var def : MachineSets.DEFINITIONS) { + String key = def.suffix(); + for (int tierId = GTValues.LV; tierId <= GTValues.MAX; tierId++) { + String tier = GTValues.VN[tierId].toLowerCase(Locale.ROOT); + + JsonObject geo = readJson("ibg", "geo/" + key + ".geo.json"); + + JsonObject geometry0 = geo.getAsJsonArray("minecraft:geometry").get(0).getAsJsonObject(); + JsonObject description = geometry0.getAsJsonObject("description"); + int atlasW = description.get("texture_width").getAsInt(); + int atlasH = description.get("texture_height").getAsInt(); + + BufferedImage atlas = new BufferedImage(atlasW, atlasH, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = atlas.createGraphics(); + + TierTiles tiles = loadTierTiles("gtceu", tier) + .orElseThrow( + () -> new FileNotFoundException("Missing GTCEu casing tiles for tier " + tier)); + + paintCasingFromGeo(g, tiles, geo); + + BufferedImage overlay = tryReadPng("ibg", "textures/block/" + key + ".png"); + if (overlay != null) + g.drawImage(overlay, 0, 0, null); + g.dispose(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(atlas, "PNG", baos); + byte[] bytes = baos.toByteArray(); + HashCode hash = Hashing.sha256().hashBytes(bytes); + + Path dst = out.getOutputFolder() + .resolve("assets/ibg/textures/block/" + tier + "_" + + key + ".png"); + + // No need to create directories manually; writeIfNeeded will. + cache.writeIfNeeded(dst, bytes, hash); + } + } + } catch (IOException ex) { + throw new UncheckedIOException(ex); + } + }, Util.backgroundExecutor()); + } + + // ---------- resource helpers ---------- + private JsonObject readJson(String ns, String path) throws IOException { + try (InputStream is = open(ns, path).orElseThrow(() -> new FileNotFoundException(ns + ":" + path))) { + return JsonParser.parseReader(new InputStreamReader(is)).getAsJsonObject(); + } + } + + private BufferedImage tryReadPng(String ns, String path) throws IOException { + var opt = open(ns, path); + if (opt.isEmpty()) + return null; + try (InputStream is = opt.get()) { + return ImageIO.read(is); + } + } + + private Optional loadTierTiles(String ns, String tier) throws IOException { + String base = "textures/block/casings/voltage/" + tier + "/"; + BufferedImage side = tryReadPng(ns, base + "side.png"); + BufferedImage top = tryReadPng(ns, base + "top.png"); + BufferedImage bot = tryReadPng(ns, base + "bottom.png"); + if (side != null && top != null && bot != null) + return Optional.of(new TierTiles(side, top, bot)); + return Optional.empty(); + } + + private Optional open(String ns, String path) throws IOException { + try { + var rl = new ResourceLocation(ns, path); + var res = ef.getResource(rl, PackType.CLIENT_RESOURCES); + if (res != null) + return Optional.of(res.open()); + } catch (FileNotFoundException e) { + String cpPath = "assets/" + ns + "/" + path; + var cl = Thread.currentThread().getContextClassLoader(); + InputStream is = cl.getResourceAsStream(cpPath); + return Optional.ofNullable(is); + } + return Optional.empty(); + } + + // ---------- painting ---------- + private static void paintTile(Graphics2D g, BufferedImage tile, int x, int y, int w, int h) { + int tw0 = tile.getWidth(); + int th0 = tile.getHeight(); + for (int yy = 0; yy < h; yy += th0) { + for (int xx = 0; xx < w; xx += tw0) { + int tw = Math.min(tw0, w - xx); + int th = Math.min(th0, h - yy); + g.drawImage(tile, x + xx, y + yy, x + xx + tw, y + yy + th, 0, 0, tw, th, null); + } + } + } + + private static void paintFace(Graphics2D g, BufferedImage tile, int atlasW, int atlasH, + int u, int v, int us, int vs) { + int x0 = us >= 0 ? u : u + us; + int y0 = vs >= 0 ? v : v + vs; + int w = Math.abs(us); + int h = Math.abs(vs); + // clamp to atlas + if (x0 < 0) { + w += x0; + x0 = 0; + } + if (y0 < 0) { + h += y0; + y0 = 0; + } + if (x0 >= atlasW || y0 >= atlasH || w <= 0 || h <= 0) + return; + if (x0 + w > atlasW) + w = atlasW - x0; + if (y0 + h > atlasH) + h = atlasH - y0; + + paintTile(g, tile, x0, y0, w, h); + } + + private void paintCasingFromGeo(Graphics2D g, TierTiles tiles, JsonObject geo) { + var geos = geo.getAsJsonArray("minecraft:geometry"); + if (geos == null) + return; + + // atlas size from description + JsonObject description = geos.get(0).getAsJsonObject().getAsJsonObject("description"); + int atlasW = description.get("texture_width").getAsInt(); + int atlasH = description.get("texture_height").getAsInt(); + + for (var ge : geos) { + var bones = ge.getAsJsonObject().getAsJsonArray("bones"); + if (bones == null) + continue; + + for (var bEl : bones) { + var cubes = bEl.getAsJsonObject().getAsJsonArray("cubes"); + if (cubes == null || !bEl.getAsJsonObject().get("name").getAsString().equals("bone")) + continue; + + for (var cEl : cubes) { + var cube = cEl.getAsJsonObject(); + + if (cube.has("uv") && cube.get("uv").isJsonObject()) { + var uv = cube.getAsJsonObject("uv"); + for (var e : uv.entrySet()) { + String face = e.getKey(); // north/east/south/west/up/down + var f = e.getValue().getAsJsonObject(); + int u = f.getAsJsonArray("uv").get(0).getAsInt(); + int v = f.getAsJsonArray("uv").get(1).getAsInt(); + int us = f.getAsJsonArray("uv_size").get(0).getAsInt(); + int vs = f.getAsJsonArray("uv_size").get(1).getAsInt(); + + BufferedImage tile = switch (face) { + case "up" -> tiles.top(); + case "down" -> tiles.bottom(); + default -> tiles.side(); + }; + paintFace(g, tile, atlasW, atlasH, u, v, us, vs); + } + } else if (cube.has("uv") && cube.get("uv").isJsonArray() && cube.has("size")) { + // Better fallback: use cube sizes per face like Bedrock layout + var size = cube.getAsJsonArray("size"); + int sx = size.get(0).getAsInt(); + int sy = size.get(1).getAsInt(); + int sz = size.get(2).getAsInt(); + + int u = cube.getAsJsonArray("uv").get(0).getAsInt(); + int v = cube.getAsJsonArray("uv").get(1).getAsInt(); + + // Minimal conservative mapping: fill a sx×sy area with side tile at (u,v) + paintFace(g, tiles.side(), atlasW, atlasH, u, v, sx, sy); + } + } + } + } + } +} diff --git a/src/main/java/com/imbgt/ibg/mixin/MetaMachineBlockEntityGeoMixin.java b/src/main/java/com/imbgt/ibg/mixin/MetaMachineBlockEntityGeoMixin.java index a0da5f9..78694b7 100644 --- a/src/main/java/com/imbgt/ibg/mixin/MetaMachineBlockEntityGeoMixin.java +++ b/src/main/java/com/imbgt/ibg/mixin/MetaMachineBlockEntityGeoMixin.java @@ -8,8 +8,6 @@ import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import net.minecraftforge.common.util.LazyOptional; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -41,16 +39,13 @@ public abstract class MetaMachineBlockEntityGeoMixin implements GeoBlockEntity { @Unique private static boolean ibg$isActuallyRunning(MetaMachine m) { - // Manually enabled? boolean enabled = MetaMachineBlockEntity.getCapability(m, GTCapability.CAPABILITY_CONTROLLABLE, null) .map(IControllable::isWorkingEnabled).orElse(true); - boolean active = MetaMachineBlockEntity.getCapability(m, GTCapability.CAPABILITY_WORKABLE, null) .map(IWorkable::isActive).orElse(false); return enabled && active; - } @Unique diff --git a/src/main/resources/assets/ibg/blockstates/lathe.json b/src/main/resources/assets/ibg/blockstates/lathe.json deleted file mode 100644 index 097eecf..0000000 --- a/src/main/resources/assets/ibg/blockstates/lathe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "ibg:block/animated_block" } - } -} diff --git a/src/main/resources/assets/ibg/geo/lathe.geo.json b/src/main/resources/assets/ibg/geo/lathe.geo.json index 7a2fccc..8089dec 100644 --- a/src/main/resources/assets/ibg/geo/lathe.geo.json +++ b/src/main/resources/assets/ibg/geo/lathe.geo.json @@ -13,17 +13,27 @@ "bones": [ { "name": "bone", - "pivot": [17, 18, 0], + "pivot": [7, 6, 0], "cubes": [ - {"origin": [-7, 1, -7], "size": [30, 12, 14], "inflate": 1, "uv": [0, 0]} + { + "origin": [-8, 0, -8], + "size": [32, 14, 16], + "uv": { + "north": {"uv": [16, 16], "uv_size": [32, 14]}, + "east": {"uv": [0, 16], "uv_size": [16, 14]}, + "south": {"uv": [64, 16], "uv_size": [32, 14]}, + "west": {"uv": [48, 16], "uv_size": [16, 14]}, + "up": {"uv": [16, 0], "uv_size": [32, 16]}, + "down": {"uv": [48, 16], "uv_size": [32, -16]} + } + } ] }, { "name": "bone2", - "parent": "bone", "pivot": [17, 18, 0], "cubes": [ - {"origin": [-8, 7, -1], "size": [2, 11, 2], "pivot": [-7, 18, 0], "rotation": [-90, -90, 0], "uv": [0, 26]} + {"origin": [-8, 7, -1], "size": [2, 11, 2], "pivot": [-7, 18, 0], "rotation": [-90, -90, 0], "uv": [0, 30]} ] } ] diff --git a/src/main/resources/assets/ibg/textures/block/lathe.png b/src/main/resources/assets/ibg/textures/block/lathe.png index 4f4350f7c6cf89d80b2ae54222bc3c0ce91cf559..6f072b643b8cdad621a314bed59f79a6db29d7b3 100644 GIT binary patch delta 178 zcmey&+|M+@p`KxVdxSDica3hs3q3GzeJb+ SnYnTz*d9+;KbLh*2~7ZEr9Ykk delta 420 zcmeBY`pi7Rp`LNBr;B4q#hkad_h*R&N*sGwo~q!qi{qq|3y)M0_se3zxTd|=6Lq$1 z;?i_lRTAgovDa7Okvvb%5wq6NHEtU@cW-{2bLP9v--mM^9e?*h_MC=n?Tnh8FL#v* zvj2WRZDXz1?X_{`2v^bB2>IcjtRfI@|kk!SA@ZdSCXt`5ye!Y8j?^ zGaThyV8JM&-tdSeU=BlUuKGP|yXN=p*;jj?XKmlA z{qFAjk{N&R&h_aAf6m4`6#7<6SJ+feQL(%e=RHZLwx)FQoxitr#2$-d_lpH112UL+ gPkQ157V&_~`WELLmBj>@H-cn6UHx3vIVCg!0Dw5hMF0Q* diff --git a/src/main/resources/assets/ibg/textures/block/lathe_overlay.png b/src/main/resources/assets/ibg/textures/block/lathe_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..8039496034c31e8405f68d26bc0014ab04554505 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#Vf;uumf=k4u{St5=y$3Nb0Wo<2CJLBjSu;>TZ%g+LKO?%HL>TK~6)j6Uy zmtQa_URguRut4y($jV7si_>{#{o9sToH^xZSLZz`C->a!Gxc>FbBx|kxfZ40u#F{P4nvo)Lm`uf zAHz}31s04V>J5(&f_alJANUutZtDMsK;q`VPYG8l|J8iVS+$j?sNz@Fl^^e3_IHLE zow<8=y6=AV7n4%*KmS{BP+k1~WEK8ruP?97V2z(P-E-2{cI)P2@pb=ZsqEbRHD#0O z+DEVcI8Uyue`=4@VxVhEPoB5^yYQFo&#+%W`d=H6k>|hYSM