From 38947ac97a24add7198ecb374200ede323d6b82b Mon Sep 17 00:00:00 2001 From: Adam <92393622+Adam29Adam29@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:14:15 +0200 Subject: [PATCH 1/6] GUI Texture Change for Electric Furnace --- .../hbm/textures/gui/GUIElectricFurnace.png | Bin 3724 -> 2575 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/GUIElectricFurnace.png b/src/main/resources/assets/hbm/textures/gui/GUIElectricFurnace.png index 8fc1e10beb5b9ebc3ab23b9f7a778482229ab3bb..a0aa8fd26627c6f56da46477bccee8f0bab41994 100644 GIT binary patch literal 2575 zcmcgtc~BF17Jl7Hha}vBsHhNzVaO^b;Sf|9(p+-L5jiBNAUGOCD0BchRG=9OfkFk9 z1w24p2Ju7`L=lx16;T*r#2GmR!^*6HqJXR70oh;BncA8^_K&Tt{Z)6r_x;}czOP?* zS9P|;+f|*b&jkQ=cQH-rE)+`-EM;C!y?r!WHH z_YzNk7ZmezlkVIo%gV~~@$m@=2rxD_7K_EsPGV3P!3UF0PZxOm7ey_=xBx~h6bi!w zdlO;E8h*1?C=}2yhR04#^xvS%6&`v*y98PS;7$jC@yZG}K3(N)P7CM+~9BR6}QR*&pcV7T(1PIW_i0Sw1 zfzaG9IeO*5#~9Q5ILgg29JEnfjn0Tn=Jb9P%9V?Z$6yeB8NbIry8@tMo(eEgugJnu zgq42QRen=M>1VA1lq(mGl=10K-=#}X_Jw6G5-F>)liN+!51U8;R07?d9sCnRMv6Iw zhplxp_F2j{RYVv6+8cPutHUa|BiZZSHLs@%#dq6FNM0o~U9I!NwuV@GAS~=+wiJ`%b$t;u)??7s@9O^GW}aO=V!|F zYhFhVdsM*P)LppXO{QU_ZX5@3NNR0McQy5rwFt|F#3G5NDUZJX%|KTf( z)}*ruX;7&%I=eJ~wR`lnGmYmm##E`?#$3h&S%A<~Kp$l7vui7Xfj#SHd7M3W&m;x2 zIWPHHFVFaj@j%ksuX$UpvhxI01<_iUsLFrdx7uWnKlERHp#sVuZuiT7np)-+dMic4 zjPy%RN*g9IABF`!&~1A9uLg|S=Z}`L`G)s=go_!39fNX|x+W$8h`rhE_oSdAGg^^TSAM1 zDf{oMU)<(nLfqpD#g-P%4HwEy$n6cDFeAkz-DoW-HSK5Ygn8Q`s>3A@PiBc(fu)TxYv>MU*|Bk%Z@)h#dZQ~j@o zz==t!_WyczdNX(;Q=;n6xCGK z6>%klCYY1g!$d>|s`p)6BkW+0s$ABqD88Y`v%l1{d6A5yOWsVP2L68x@?oucN}aZ=1#=1@6P zqQA9!&T-vQPWzEs%=oS49%^qq>$$!pWO6t4tt`za?ZcT!(R#5FezkdOb4NsY6|>oJ z5!OHJMjNQ<-qXcfk9XV`l~ZjPLQH&k+P^eBZ8>dFP0s=r_qO(ExvASZN`|Z*Tsxz!#IduN3oo}X8R44Rk^4J8kx$Z`?t!ka-`T}bPQByaQFSk`1=(M->;r>Pu z-%c~X5skNZYw;6A(HUN*b}`o^HvOO?qN?b z&|Td!reoFl^{I8%_!JY>`|&Gc&fc=gr{e*d?T@GeszE7hfXf;ek{vTfZKyQIY!AwA zt*P8ld5bal6oFVPIaR4^ude{sY*pgc*W^(x!U~U4cW2WP?eBttvD+jDLntrPgM2pM zNKI5AB_@_8U`|uLylKW) zU=MzL(xTxW>)l&(KY501$v}hyCUsNi(vF)Ypy!*8Zx<)rVwFrXH`GVPE^7_t*_MAg ztkN;J9XB|_{mJI|T`g?FV$2cKC9&C|X6TBJf8UUBCNz_>GQJD^hu)}G=dD%8fLr?I zP!s9>k#kF_%!$CU!<`E(Rq45+>pLu@OQJSLW8Q^1XQ#zKEB|5f8NQrf^j{H{sPieD zkDg$838B@N9Aq}H*5VR`cW3`6ui#Fl*EIEkUg+eqQ+J!=56*kHp~!)>YKV+tA9$8K zl(0t~^GUU{oHt%m3T8jDh)|=&d{904r)OG~r>{$8JpBK+?4LC%UJ$lY#%nt=qWs;u MyLdZSI)?u6FI&Xz3IG5A literal 3724 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 G5q}5F`M7`p From 90d99a32892e9303262b3d662c6f533b0bb1874e Mon Sep 17 00:00:00 2001 From: Adam <92393622+Adam29Adam29@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:15:52 +0200 Subject: [PATCH 2/6] Electric Furnace Texture Change --- .../blocks/machine_electric_furnace_bottom.png | Bin 510 -> 640 bytes .../machine_electric_furnace_front_off.png | Bin 528 -> 633 bytes .../machine_electric_furnace_front_on.png | Bin 588 -> 695 bytes .../blocks/machine_electric_furnace_side.png | Bin 577 -> 715 bytes .../blocks/machine_electric_furnace_top.png | Bin 490 -> 655 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_bottom.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_bottom.png index b56c4a73c376cc03ff254211adf8bede3ae5993b..fad5a9e3c5157ef171852d9940cf4d395f8c811e 100644 GIT binary patch literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Li00G|+7BO_B~WmR=`Ej>L0RaFf$GfP!fHFb3j2?1 z>Nq>Q3knJb1_moBDcjpS`}+s@`ueM>X+#+%odP<5v%n*=n1O-sAP6(=n3(+*C@5Lt z8c`CQpH@C!ZXd&Q;UHE$YEuWVq|4t z1hTwr6KemYTQP)gOHA!N8fb0s{Zdr6*J8dE z^793k&h_(E-ZYQ#q<_IgV*}~;>L=#}HU89&2r*SX_H_56bH~%)`sdHQ>8`ukgSG5e w_0q{Ek4@HEUvSNp37*dK>QU_Lw`Kni$a}N#b;`E~J_C8d)78&qol`;+0Mk6F0{{R3 delta 455 zcmV;&0XY7E1^xq&L4UVUOjJcHD<>2b6c!d08X6iQAs{L$Cn+f>BqSpuA|fLrBNrDJ z7#J8F92+SqDMv>~Nl8geOiWEpO+`gT92^`L78X4{Jv%!)9UUDL6B8L388tOE5D*Yg zPftTbLqK3&zDpyN;z*BtxJw z$VmaGDKF*!zkjQS%*%{M+8rH$>?MDFd;cg3QA#O4p;Ah3x~}ml0&%!rF?*Ott&;+(h;cR&+QUDm`LjJ1@rWX>{ULimGa xy=`lfMvO5c?<*-HI;Hj`ftVBZ4nm2^WdDM=8HfE8O0NI_002ovPDHLkV1oD$oGkzV diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_off.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_off.png index 529db01dd4cc1c75bd766ab273f7aace9ad36ae7..2864bfb0007433a8a64d89f8b6536b8f140be990 100644 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh_0G|-oy1Jr*g0$r1D06ddQ&TNtV+{iXH8V4<_3PKSx3}lzCB??Z+S(d9 zI-2_XJ5*HU0QHH9iA6^TOG!xu270NesELb9n3-7_8k$;L+dDbA8yT5ONJt6_3aY7T zC@LzesHjUyO7ZaU{4}XH1#0Fj@Q5sCVBk9p!i>lBSEK+1B}-f*N`mv#O3D+9QW*jg zGxJLH{9Hp6O!W-)42^^t-AjOqcBDplrg?g5F>nAmtPE0&tPG4mmKP99L)oA(&|qW+ zi!%Y)hKx)Mfb0?2~uGBhv%$=+N(YwF4E-0?u>22U5q5RG8dlhI{|6?hl| z8S9R)tO${s@Z?nP-v6%OW~h9wWM`Q3`JOfVdnb;>SNKy#QI9^c_Fsz(sY-vV^_KCs zxi*)VyW`Vshx58ltZ3>vVb-v2m-G3YL~HH){^+jjdVlcz zh4p%^kH_O_K-;#M4u=ErzivTL6a}U*oV>oikhg8;)WH9f5N~hqieg85L7Jv{p08Fb z4xXNVxFVj%FhT?m5BHQ?EEbqGIYSf0Eu%ZvFqPo>`KNr)iTnMY3zB1 zmVF6B)pedRQQMxPh?{=b^^-|Jv^G&Hp!dyYqph{Z#BXowrs+RE-s`%Bm*uaKj3PGR zmOv*woW!PSghP0E5$Q)n&+GMeyB&JfIFNwM3PF)0Nr~)Jr>W(DDUnzXDpG~TDj+3t zgviGIJU@qBTwEpzTTK|++OJs_vy(W^NYBokXpF6@J^z@xy86cdM~!in5c%M^Uw$?@ bQc8US$!Gky{4b{%00000NkvXXu0mjfOz`Mq diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_on.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_on.png index 614e746ff8ac24cbc62f061b5d069face21f8184..24bcd75cd9e4330d4dc715cf4459ef1e270087b3 100644 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh?0X`wFb#+Ar1!>92QRe2_rlwlP#u^3&YG!6y>({SuZ*R}bONxz+wY4>J zbTsw%cc`ey0qPSI6N`=xmXeZ^mlO>Q^iok#6Bm~-GqVb_){b{JPVuyiw%50|wl^{| zm5`A9vyVYgQ1H(~hEiwc27kR8FU|k|8PwD?D&5o+6_r&~)FmaQ-fm>z;o-56<#bdN zwo&9Qm~?qB&>GGHkH}&M2EM}}%y>M1MG8<*vcxr_Bsf2%FBlnn|k4Mt|LI1`X<$jHPX z2&AKcIJ2DvEDrK32qXY8NI#55x0Qhb7~&Jy8CZa742+Bo7#Bdy1?gd305NMCkPQM% zK$DojDuXO7fGnskLjwbl?9Jt~rk>o+9S>w4@pN$v(Fis@b2IF)f{4RK?vxCT1vhS- zNZ@J_h`v4P|9>m-70(OpWf&Ydl6wUHxN|7_UM^emzS@aPhV9q#fIlF4(5)!LL9 zD>5~N*P9;GbY$J}hxKG;H{fxm3Cuj|#c?r1T! xc)h;hcUbxISlj#BHuEf>*WUj==kw={e;F!lMf;1+xX6P1=IQF^vd$@?2>@ODyq5p~ delta 546 zcmV+-0^R+$14^MSTtHHCloO|n3)xD>RE|;(KJg1b(9zqE4uIoq-@H9;khm@Y3Eq}u> zM8X*3oDb@l&h>C=mavHV{dYKqRHQzW$E9t{Yty{BMGIeEcd& zVzehb&znxCtJMk%7Z>03A%tKULkvz&PjK8~v4EH%$IysIZARCseky~@%eA>s7qcwG z29rZNaYr-H4rlKE#18h{N4}#)On;w?<^krqZV&{6dZJpJcWu)MDIKZZG?SX zw7A=BneY40eRclkYD%k*?{0n;Z&x=h-&Ocv)e0d-FB>Vby4H^2^CVy}#a3dF- zoDi!mct}ub?rTF(%v-JnTGp}ccB`8uq>uPgL;^H^a z=!?KpmO73@4-Q^htUY?H9DCGcNvE8uuF1$%O}X2Z-N>b7X5!7Jxr=i;pTEHW!vTYp kAOI{L{KaQ8OO(=ItQqK#iw|jsy8r+H07*qoM6N<$g3Yr8DgXcg diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_side.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_side.png index 0000233838fb796fa731223a3db64228f5f6aa37..5015a4155bfd86ade525a13f9383d9bbb76054a5 100644 GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LgT0X`wFb#+Dg`AJ1ZX%!XOH8lm*)j*VAS(#T+k(-qjpP!%H)Kuo|Y;IIe!7T3g$yt83`$8Yn3#o0(av zsHhtnnwpyf8LFzPYHDg4^8=DOfv)8&@Q5sCVBk9l!i+m6X1@grN|v}rlmzFem6RtI zr7{F0X6BXX`MHKDnCcno85#*Qx|aYI?MRLAO!M^AV&DLBSQ(@kSs56CEH5CIhO$9{ zr@_b!7H0yo4H=mj1c7uE5NEctfW>owY!J9v#>nsj7{)Lf-Btz$pyUL01{R=N10!Pt z#sv^_L3Xk(fS5H6$OZu>pvg>Nl|hykKo(S&p@9KNwr#gT*p@4d8-UD{o-U3d8o{ck z-})Uk;Au@{W@XFa?2XOXme(uUxiF7I{`TMdQeNNxS!|L!$xu*Qd)egd+q-|WzJB2N zu;t#2SzF6;dl)n3MYnr+#JaCFX3$^1?t5sB`#N)m+p<+k@vVP0uv@(0D2#DZiB6Qr z;8A3edvP}J;ReS;hBEz)C#!$+8FtphIJjI=KjP^+eR`y8@VW(7MxSj~zY1@&5fz=9 z8e-uzFKT&|*TtZy&<6#Q;n>6t=uvB`c-= Z0g4q>WZ^qXO#lD@07*qoLNS%LhD0G|-oy1JtL{G_6yw2F%Cnwo;@Y9Pw5tjw#Z$j!=%&(BY8YASPfHa9cV zGB8kcax!ytG+n=beS3R*TwG9Oq+dvgS3yCFrKN6cY-~b8XklThxw&>)TBNJ1Wo2dV z|5%2EgpmJJLrP0CYikQDDso(0EZp3z3JX)xbP^?jZs08Nh%9Dc;5z`qj9J$@Ie~(b zC9V-A!TD(=<%vb93;~Imc_n&&t|1DhdWL$2M#7BlB|t?xQX@RmJUz7-IDi~h1}R2X z21X#u3y7tmY*3JBFfxP1nSg9VMkWS9ARPt7ne8lK@f;u<1ooFPGQ0qW9E?V{m4N{$ zIf0#l1*q1*$k>2!0mNL8ovaHWW=#XKL4XNpG80&3kfjBX1=VF}U;vWkY~Rvo(Nm%f zWN!C#aSYK2*6qI-bl8B0g`Xo}!8GCfmM*>>nRB=O|KBcf*fzt&TKTM8L;LaN>t4@` zkK=FOUjE>*M2>&Y$BZ-?P}Q#ZGz9QZL)?S5za(vuCBeWur_e|pLtkv{Ql_rxyi z2(d`br7f=aKem_#Y$>vvuJFBrk;(QyUxWPn{Y4xhR?f_jlKJl zHm7L?N(IFm9y7T(H*49(q&LZ%cg5vz56g39eYNfGd(j_v>lte12xlIU|JV=mj;E`i J%Q~loCICZs!V~}i delta 435 zcmV;k0Zjgn1?mHkL4T-FOjJciMmjt^Fg-mnLP9o2M>|VPKTJ$OKtMD>K{ZlRMsRRs za&l&Mb!m2XYHn^~MMXJ3KQm@#T4ZEcUS3i;IW2g2Y(qmsMn*V1HC$VO4o~Z9zdnARr(p zC@45MI89AKPEJA`92`SKH+p(*dwXvwDJeumICpnz<@y3)00009a7bBm000ib000ib z0l1NC?EnA(%Sl8*R47wTj^U1iKn#SttSps-0t+fxP(fKx6ahK${om{W{c)2tX(sb^ z3cw7$GKFcH!hb?U4r|-~aa_ltk310H?JE!bKrYmh55ow=#$9iBagrqI-Xnq;5r_PE z%unZHF;GhXkm<70X%=0s6H>e4cGrz=9vRF>TcR$>ORY=QKWD=Vq!s6tZYtGBp^Tud zf4lgVD)mqWCmNx%?RMW6SuqU~J;9f9#W~{07&F4Dr7RmZ?_n5f_wzcRTmB1S$)n|u d-Z)Xr_yg?76v`UCxsm_?002ovPDHLkV1hCLr!)Wn From aff1d337ca8051be006396ad848bb01b596fdc88 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 8 Jul 2026 15:15:31 +0200 Subject: [PATCH 3/6] here i come sanfrandisco --- .../container/ContainerElectricFurnace.java | 12 ++++++------ .../container/ContainerPneumoStorageAccess.java | 2 +- .../container/ContainerPneumoStorageMono.java | 1 - .../inventory/gui/GUIMachineElectricFurnace.java | 15 ++++++++------- .../hbm/inventory/gui/GUIScreenRadioAUTOCAL.java | 15 ++------------- .../com/hbm/render/tileentity/RenderLandmine.java | 2 ++ .../network/TileEntityCraneExtractor.java | 1 - 7 files changed, 19 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java b/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java index 593b1feb5..995454958 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java @@ -22,20 +22,20 @@ public class ContainerElectricFurnace extends Container { diFurnace = tedf; - this.addSlotToContainer(new Slot(tedf, 0, 56, 53)); - this.addSlotToContainer(new Slot(tedf, 1, 56, 17)); - this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 2, 116, 35)); + this.addSlotToContainer(new Slot(tedf, 0, 152, 54)); + this.addSlotToContainer(new Slot(tedf, 1, 20, 35)); + this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 2, 80, 35)); //Upgrades - this.addSlotToContainer(new SlotUpgrade(tedf, 3, 147, 34)); + this.addSlotToContainer(new SlotUpgrade(tedf, 3, 111, 34)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java index d3fd06ff5..f012f0445 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java @@ -225,7 +225,7 @@ public class ContainerPneumoStorageAccess extends Container implements ICustomPa held = slot.getStack().copy(); held.stackSize = 1; } - if(held.stackSize <= 0) held = null; + if(held != null && held.stackSize <= 0) held = null; this.player.inventory.setItemStack(held); sendClickToServer(ClickType.RIGHT_CLICK, hash); return null; diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java index a99bb56da..2848dd059 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java @@ -36,7 +36,6 @@ public class ContainerPneumoStorageMono extends ContainerBase { if(index < 0 || index >= 3) { return super.slotClick(index, button, mode, player); } - Slot slot = this.getSlot(index); TileEntityPneumoStorageMono mono = (TileEntityPneumoStorageMono) this.tile; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java index bfb80de4b..01bf13c3c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java @@ -23,7 +23,7 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { diFurnace = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 186; } @Override @@ -62,18 +62,19 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { diFurnace = (TileEntityMachineElectricFurnace) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); if(diFurnace.hasPower()) { - int i = (int)diFurnace.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 20, guiTop + 69 - i, 200, 52 - i, 16, i); + int i = (int)diFurnace.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 152, guiTop + 52 - i, 176, 64 - i, 16, i); } if(diFurnace.getWorldObj().getBlock(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) == ModBlocks.machine_electric_furnace_on) { - drawTexturedModalRect(guiLeft + 56, guiTop + 35, 176, 0, 16, 16); + drawTexturedModalRect(guiLeft + 45, guiTop + 20, 192, 12, 18, 16); + drawTexturedModalRect(guiLeft + 45, guiTop + 47, 192, 36, 18, 16); } - int j1 = diFurnace.getProgressScaled(24); - drawTexturedModalRect(guiLeft + 79, guiTop + 34, 176, 17, j1 + 1, 17); + int j1 = diFurnace.getProgressScaled(28); + drawTexturedModalRect(guiLeft + 43, guiTop + 36, 176, 0, j1, 12); - this.drawInfoPanel(guiLeft + 151, guiTop + 19, 8, 8, 8); + this.drawInfoPanel(guiLeft + 116, guiTop + 20, 8, 8, 8); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java index b27f2e7bb..febe5c862 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java @@ -103,7 +103,7 @@ public class GUIScreenRadioAUTOCAL extends GuiScreen { if(checkClick(x, y, 144, 36, 18, 18)) { try { File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); - File doc = new File(uploadFolder, "documentation.md"); + File doc = new File(uploadFolder, "documentation_v1.1.md"); if(!uploadFolder.exists()) uploadFolder.mkdir(); if(!doc.exists()) { doc.createNewFile(); @@ -127,18 +127,7 @@ public class GUIScreenRadioAUTOCAL extends GuiScreen { script.setExecutable(false); return; } - /*FileReader reader = new FileReader(script); - BufferedReader buffer = new BufferedReader(reader); - String[] lines = buffer.lines().toArray(String[]::new); - buffer.close(); - // this is going to blow the fuck up once we hit the max packet size, but let's ignore that for now - data = new NBTTagCompound(); - StringBuilder builder = new StringBuilder(); - for(int l = 0; l < lines.length; l++) { - builder.append(lines[i]); - if(l < lines.length - 1) builder.append("\n"); // yeah why the fuck not - } - data.setString("payload", builder.toString());*/ + byte[] bytes = Files.readAllBytes(Paths.get(script.toURI())); data = new NBTTagCompound(); data.setString("payload", new String(bytes, StandardCharsets.UTF_8)); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLandmine.java b/src/main/java/com/hbm/render/tileentity/RenderLandmine.java index d2889e9e7..e84d97175 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLandmine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLandmine.java @@ -51,8 +51,10 @@ public class RenderLandmine extends TileEntitySpecialRenderer { } if(block == ModBlocks.mine_fat) { GL11.glScaled(0.25D, 0.25D, 0.25D); + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.mine_fat_tex); ResourceManager.mine_fat.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); } if(block == ModBlocks.mine_naval) { GL11.glScaled(1D, 1D, 1D); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index d57e98720..cc6c1011a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -294,4 +294,3 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU return new int[] {0, 9}; } } - From 090c046ff48a1ce451eb50bea83b1aa3394fd215 Mon Sep 17 00:00:00 2001 From: Adam <92393622+Adam29Adam29@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:26:09 +0200 Subject: [PATCH 4/6] GUI change of the Burner Press and Electric Press --- .../assets/hbm/textures/gui/gui_epress.png | Bin 1874 -> 2361 bytes .../assets/hbm/textures/gui/gui_press.png | Bin 2279 -> 4460 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/gui_epress.png b/src/main/resources/assets/hbm/textures/gui/gui_epress.png index d920d4447e9405f2973b92c058aabd3516868207..601b9c143537ebfe2270fd2d0f64f563f2d1cb83 100644 GIT binary patch literal 2361 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 apS4P8y!bHrfT{G^1sg&(1z!%LfB8EGS|Div diff --git a/src/main/resources/assets/hbm/textures/gui/gui_press.png b/src/main/resources/assets/hbm/textures/gui/gui_press.png index 5e98f8a54083406514343a801a576b4b7525086b..83eb133fd6f57ff7cde75936054a8cc6ce46441e 100644 GIT binary patch literal 4460 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 literal 2279 zcmb7Gc~sL^7XAeip-fl;awr5ufz}~|VgXGg7Q_hzuw|1_#6lvni;=|%$P!?Hf&xh$ zWE-HM5kYp@B`iUdh%6BW0%8Ecf=m*YV!#0Tr5WwabdH|m>HX)vcka92yYIdGedk?q zal$Jr=_mmJpzL6ea{~Z~YzP4qcgfuM5fuS42aP=8;I1gMI7Pp708sqN0cYbLT_oh$ zoJTHcE3D!T^!Ez1>{ZH=-aMVY`L=%iMn?7*Xq(#Ds_eq!51T9mxw!`hc3m=Vj^)>w zj2{T~{bw>Sx$L5v{bces%&{ve=Et%}v@fO_EDV>#lD%p}nMAr@r}Xlo-VnnvZdBD% zIj13tYDwQ?|8K&MY#M`zMsf?B5#h`Zh0 z`e%*849C_KEUjO;b;fCsygvi%zX6W>$^q&cz>oPr;sYpP^d+$OD+q9fhl*A3aINtu zj4iZEbgG8cGf3x^h7n=iXucatxj4E1S?BUs+QCF!QwF%U>3GI9dh*5xKgnh5W@ zyf!u}s#1ey+0ENo&xAC?rN-aBgggm7g4avn2XYJyZgzEQBM@n^_~a}f0jX^j;8dLGkZY#OZo!)x;i*H>>694&=OV>UXi`9#2h=Nv zX4T)<*Z0_3A>x!q7>!1!*EM+~vVGWW_LtnY>kYH#1(iuSpE4+mFq1#cLN6Zn(=kkh zrU2R3)d5+jlyn%I#t3vN)D%GLD>-|dVwjKdcaVcIhAMd2JU*V0D30=~GoH@`)XmgM z6{|r0n+4`_L_i>vPcMt$VGj&4+687FbZ_pW?Vi*ufb8W>IbFrB<*ys0m9;AYy9aau zjXNj*-5QD<> z-Z;q0DuAZ^j+P%_$ryV?#9*y&ZSkGT8G6FO7qmKOV$sPJSU#IejIz`d1_drqUWDJn zI6>YK`(p^dasGqQ?Q!{hE|+*7k2NWG#J$;;P;n{u|5TmwQmb)!Wd#qP?j3w&{9noV zApL)8^0Cm7W+TtW$&NMCAPb$5rAtkW;)1EkiHWvw?DwG|01gfU=#h}-o6nYl@L2O! zhC6Q#1N*%~eGK!1gA{tHmcDD=_BGQH8pYEoC;j#2wj@2>S;@3Q@m8^a&|;izDTS$r zKx}VsBa$}{nY$tEu_tF}SC40$Q~8K6eqvkOy+V_CtcfiB`ROf+JJd^8GpVWZjj%$o z3A6BCT0epCe}e1|eLDQKwRi5D8b#=Uy=|#DTnV`H8^Edk5CUv`*sLkC3w3CnfvTtE zcIjn5%b4H&$IB*=-j`j;s@5eWEwcafsw_us6=?ze48rw}J4!-sTnW-mj^cJ1jeXFy411bpuf zI&lB|O6L}5@_;kfTD;kPb;7h180)DAji#kSE+aMB1#?tS8xH3()d4=kQt+zIO6qIT zgH}vsu7Uj=JW{1rT2k~GjMPj>TLf!}I~y-5v!g{~Ee5_>)d~gY-`)cIgZJx~%p$Rm z=?Axq4@w_lL@`SpBViih%0vBJ+SIl0LyuEXx z#seu~R-UHr^2|KbImN?J#byRw`UiH}Ob&W(#N%|4FqTf+VLmUKN9NY_*3aF}g>?@m oE2xs+3=sCp$vz^Vwo+ZGLW$W_PL-x>%fDAU*gD~APmuopE1^8#p8x;= From 55a40919ccf2175aff9214fadd1642f6c4b9a61c Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 9 Jul 2026 11:59:11 +0200 Subject: [PATCH 5/6] now with extra non-glooby slime --- changelog | 14 +++- .../com/hbm/blocks/generic/BlockPedestal.java | 70 ++++++++++++++++++- .../hbm/entity/mob/glyphid/EntityGlyphid.java | 7 ++ .../com/hbm/handler/BossSpawnHandler.java | 21 +++++- .../gui/GUIMachineElectricFurnace.java | 30 ++++---- .../com/hbm/items/armor/ItemModDefuser.java | 7 +- .../java/com/hbm/items/armor/ItemModMilk.java | 6 +- .../java/com/hbm/items/tool/ItemDefuser.java | 2 +- .../java/com/hbm/main/ModEventHandler.java | 24 ++++--- src/main/java/com/hbm/potion/HbmPotion.java | 2 +- .../tileentity/IControlReceiverFilter.java | 9 +-- .../hbm/tileentity/TileEntityDoorGeneric.java | 20 +++--- .../machine/rbmk/TileEntityRBMKTerminal.java | 45 +++++++++++- .../TileEntityPneumoStorageExporter.java | 14 +++- .../TileEntityPneumoStorageMono.java | 11 ++- .../com/hbm/world/gen/MapGenChainloader.java | 2 - .../com/hbm/world/gen/NTMWorldGenerator.java | 46 ++++++------ .../hbm/world/generator/TimedGenerator.java | 4 +- 18 files changed, 253 insertions(+), 81 deletions(-) diff --git a/changelog b/changelog index e80502e33..be0317ad2 100644 --- a/changelog +++ b/changelog @@ -11,7 +11,9 @@ * Filters can be set using items or RoR commands * Requests can be configured to take as much as possible, to only take full stacks, or to only take full requests * In combination with assembler recipe switching, using RoR logic, this means that on-demand recipe automation is now possible - * Still in testing, there's no recpes for any of the parts yet + * Still in testing, there's no recipes for any of the parts yet +* Cargo door + * Steel grate door which goes well with the cargo elevators ## Changed * Updated chinese localization @@ -71,6 +73,15 @@ * Standard control units now use rubber instead of speed I upgrades * Advanced control units now use hardplastics instead of speed III upgrades * Quantum computers now use speed III upgrades instead of overdrive I +* Updated electric furnace GUI +* The RoR terminal can now accept RoR controller input, allowing the terminal screen to be written directly and RoR terminal commands to be executed via incoming RoR signals + * The last part seems redundant, why would you need to send RoR by sending RoR? The answer being, the terminal can be toggled to send polling signals, which will run independently of the source + * For AUTOCALs, this means that they can now send polling signals "in parallel", i.e. independently of the code that actually runs on said AUTOCAL, by simply toggling polling on a terminal + * Since AUTOCALs now have a proper screen to output things with, it is now theoretically possible to program a functioning arcade machine (with terminal graphics) +* Glyphids will now try to target new players every 5 seconds if their current target is farther away than any other potential target + * 1/3 of glyphids do not have this behavior, this means that larger groups of glyphids cannot be trapped indefinitely by triggering target changes on purpose +* Pedestal blocks fitted with charms now have a 200x200 block square area around them where the charm effect of repelling meteors applies to all players +* Pedestal blocks fitted with golden defusers now have a 50x50 block area around them where creepers are automatically defused ## Fixed * Fixed AUTOCAL's number comparison functions not working with variable substitution as advertised @@ -85,3 +96,4 @@ * Fixed AUTOCAL's $buffer$ substitution not working * Fixed meteorite sword localization still being broken * Fixed missing localization on the FM radio +* Fixed mufflers not working on large doors diff --git a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java index 82a2b46bb..a1d1207dd 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java @@ -1,14 +1,19 @@ package com.hbm.blocks.generic; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.recipes.PedestalRecipes; import com.hbm.inventory.recipes.PedestalRecipes.PedestalRecipe; +import com.hbm.items.ModItems; +import com.hbm.items.armor.ItemModDefuser; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.particle.helper.ExplosionSmallCreator; import com.hbm.util.Compat; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -18,6 +23,7 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -194,8 +200,24 @@ public class BlockPedestal extends BlockContainer { public ItemStack item; - @Override public boolean canUpdate() { return false; } - + @Override + public void updateEntity() { + + if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 20 == 0) { + + if(this.item != null) { + if(item.getItem() == ModItems.protection_charm) pushPedestalEntry(worldObj, PedestalEntryType.CHARM_OF_PROTECTION, xCoord, yCoord, zCoord); + if(item.getItem() == ModItems.meteor_charm) pushPedestalEntry(worldObj, PedestalEntryType.METEORITE_CHARM, xCoord, yCoord, zCoord); + if(worldObj.getTotalWorldTime() % 60 == 0 && item.getItem() == ModItems.defuser) castrateCreepers(); + } + } + } + + public void castrateCreepers() { + List creepers = worldObj.getEntitiesWithinAABB(EntityCreeper.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1).expand(25, 25, 25)); + for(EntityCreeper creeper : creepers) ItemModDefuser.castrateCreeper(creeper, null, false); + } + @Override public Packet getDescriptionPacket() { NBTTagCompound nbt = new NBTTagCompound(); @@ -224,4 +246,48 @@ public class BlockPedestal extends BlockContainer { } } } + + public static HashMap> pedestalEntries = new HashMap(); + + public static void pushPedestalEntry(World world, PedestalEntryType type, int x, int y, int z) { + PedestalEntry entry = new PedestalEntry(type, x, y, z, world.getTotalWorldTime()); + + int dim = world.provider.dimensionId; + List entries = pedestalEntries.get(dim); + + if(entries == null) { + entries = new ArrayList(); + pedestalEntries.put(dim, entries); + } + entries.add(entry); + } + + public static final int timeout = 60; //3 seconds + + public static void checkPedestalEntries(int dim, long currentTime) { + List entries = getEntriesForDimension(dim); + if(entries == null) return; + entries.removeIf(x -> { return x.timestamp < currentTime - timeout; }); + } + + public static List getEntriesForDimension(int dim) { + return pedestalEntries.get(dim); + } + + public static class PedestalEntry { + public PedestalEntryType type; + public BlockPos pos; + public long timestamp; + + public PedestalEntry(PedestalEntryType type, int x, int y, int z, long timestamp) { + this.type = type; + this.pos = new BlockPos(x, y, z); + this.timestamp = timestamp; + } + } + + public static enum PedestalEntryType { + CHARM_OF_PROTECTION, + METEORITE_CHARM + } } diff --git a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java index ac2f90e7d..95d1e6578 100644 --- a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java +++ b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java @@ -223,6 +223,13 @@ public class EntityGlyphid extends EntityMob implements IResistanceProvider { @Override protected void updateEntityActionState() { super.updateEntityActionState(); + + // re-scan for new targets every so often + // every third glyphid does not do this, so you cannot "juggle" hordes on purpose + if(this.getEntityId() % 3 > 0 && (this.getEntityId() + this.ticksExisted) % 100 == 0) { + Entity newTarget = this.findPlayerToAttack(); + if(newTarget != null) this.setTarget(newTarget); + } if(!this.isPotionActive(Potion.blindness)) { if (!this.hasPath()) { diff --git a/src/main/java/com/hbm/handler/BossSpawnHandler.java b/src/main/java/com/hbm/handler/BossSpawnHandler.java index a73a36bbe..4b77a265c 100644 --- a/src/main/java/com/hbm/handler/BossSpawnHandler.java +++ b/src/main/java/com/hbm/handler/BossSpawnHandler.java @@ -1,8 +1,12 @@ package com.hbm.handler; +import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.BlockPedestal.PedestalEntry; +import com.hbm.blocks.generic.BlockPedestal.PedestalEntryType; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; import com.hbm.config.WorldConfig; @@ -231,9 +235,22 @@ public class BossSpawnHandler { } } } + + // only check if either charm is not present + if(!repell || strike) { + int x = (int) Math.floor(p.posX); + int z = (int) Math.floor(p.posZ); + + List entries = BlockPedestal.getEntriesForDimension(world.provider.dimensionId); + if(entries != null) for(PedestalEntry entry : entries) { + if(Math.abs(entry.pos.getX() - x) <= 100 && Math.abs(entry.pos.getZ() - z) <= 100) { + if(entry.type == PedestalEntryType.CHARM_OF_PROTECTION) repell = true; + if(entry.type == PedestalEntryType.METEORITE_CHARM) strike = false; + } + } + } - if(strike) - spawnMeteorAtPlayer(p, repell); + if(strike) spawnMeteorAtPlayer(p, repell); } } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java index 01bf13c3c..e31ed7ed4 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java @@ -16,11 +16,11 @@ import com.hbm.util.i18n.I18nUtil; public class GUIMachineElectricFurnace extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/GUIElectricFurnace.png"); - private TileEntityMachineElectricFurnace diFurnace; + private TileEntityMachineElectricFurnace furnace; - public GUIMachineElectricFurnace(InventoryPlayer invPlayer, TileEntityMachineElectricFurnace tedf) { - super(new ContainerElectricFurnace(invPlayer, tedf)); - diFurnace = tedf; + public GUIMachineElectricFurnace(InventoryPlayer invPlayer, TileEntityMachineElectricFurnace furnace) { + super(new ContainerElectricFurnace(invPlayer, furnace)); + this.furnace = furnace; this.xSize = 176; this.ySize = 186; @@ -30,18 +30,18 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 20, guiTop + 69 - 52, 16, 52, diFurnace.power, diFurnace.maxPower); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 52 - 34, 16, 34, furnace.power, furnace.maxPower); String[] upgradeText = new String[3]; upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade"); upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed"); upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power"); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 151, guiTop + 19, 8, 8, mouseX, mouseY, upgradeText); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 116, guiTop + 20, 8, 8, mouseX, mouseY, upgradeText); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + String name = this.furnace.hasCustomInventoryName() ? this.furnace.getInventoryName() : I18n.format(this.furnace.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); @@ -58,21 +58,21 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { //if initial ZE is still present, it'll be used instead //works so that container packets can still be used //efficiency! - if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineElectricFurnace) - diFurnace = (TileEntityMachineElectricFurnace) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); + if(furnace.isInvalid() && furnace.getWorldObj().getTileEntity(furnace.xCoord, furnace.yCoord, furnace.zCoord) instanceof TileEntityMachineElectricFurnace) + furnace = (TileEntityMachineElectricFurnace) furnace.getWorldObj().getTileEntity(furnace.xCoord, furnace.yCoord, furnace.zCoord); - if(diFurnace.hasPower()) { - int i = (int)diFurnace.getPowerScaled(34); - drawTexturedModalRect(guiLeft + 152, guiTop + 52 - i, 176, 64 - i, 16, i); + if(furnace.hasPower()) { + int p = (int) furnace.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 152, guiTop + 52 - p, 176, 64 - p, 16, p); } - if(diFurnace.getWorldObj().getBlock(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) == ModBlocks.machine_electric_furnace_on) { + if(furnace.getWorldObj().getBlock(furnace.xCoord, furnace.yCoord, furnace.zCoord) == ModBlocks.machine_electric_furnace_on) { drawTexturedModalRect(guiLeft + 45, guiTop + 20, 192, 12, 18, 16); drawTexturedModalRect(guiLeft + 45, guiTop + 47, 192, 36, 18, 16); } - int j1 = diFurnace.getProgressScaled(28); - drawTexturedModalRect(guiLeft + 43, guiTop + 36, 176, 0, j1, 12); + int p = furnace.getProgressScaled(28); + drawTexturedModalRect(guiLeft + 43, guiTop + 36, 176, 0, p, 12); this.drawInfoPanel(guiLeft + 116, guiTop + 20, 8, 8, 8); } diff --git a/src/main/java/com/hbm/items/armor/ItemModDefuser.java b/src/main/java/com/hbm/items/armor/ItemModDefuser.java index fafc290f1..ea7426817 100644 --- a/src/main/java/com/hbm/items/armor/ItemModDefuser.java +++ b/src/main/java/com/hbm/items/armor/ItemModDefuser.java @@ -42,10 +42,11 @@ public class ItemModDefuser extends ItemArmorMod { List creepers = entity.worldObj.getEntitiesWithinAABB(EntityCreeper.class, entity.boundingBox.expand(5, 5, 5)); - for(EntityCreeper creeper : creepers) defuse(creeper, entity, true); + for(EntityCreeper creeper : creepers) castrateCreeper(creeper, entity, true); } - public static boolean defuse(EntityCreeper creeper, EntityLivingBase entity, boolean dropItem) { + /** my bualls */ + public static boolean castrateCreeper(EntityCreeper creeper, EntityLivingBase entity, boolean dropItem) { creeper.setCreeperState(-1); creeper.getDataWatcher().updateObject(18, new Byte((byte) 0)); @@ -66,7 +67,7 @@ public class ItemModDefuser extends ItemArmorMod { if(dropItem) { creeper.worldObj.playSoundEffect(creeper.posX, creeper.posY, creeper.posZ, "hbm:item.pinBreak", 1.0F, 1.0F); creeper.dropItem(ModItems.safety_fuse, 1); - creeper.attackEntityFrom(DamageSource.causeMobDamage(entity), 1.0F); + creeper.attackEntityFrom(entity != null ? DamageSource.causeMobDamage(entity) : DamageSource.magic, 1.0F); creeper.addPotionEffect(new PotionEffect(Potion.weakness.id, 0, 200)); } creeper.getEntityData().setBoolean("hfr_defused", true); diff --git a/src/main/java/com/hbm/items/armor/ItemModMilk.java b/src/main/java/com/hbm/items/armor/ItemModMilk.java index 1985c6b17..5350516f6 100644 --- a/src/main/java/com/hbm/items/armor/ItemModMilk.java +++ b/src/main/java/com/hbm/items/armor/ItemModMilk.java @@ -38,11 +38,9 @@ public class ItemModMilk extends ItemArmorMod { public void modUpdate(EntityLivingBase entity, ItemStack armor) { List ints = new ArrayList(); - Iterator iterator = ((Collection) entity.getActivePotionEffects()).iterator(); while(iterator.hasNext()) { - PotionEffect eff = (PotionEffect) iterator.next(); if(HbmPotion.getIsBadEffect(Potion.potionTypes[eff.getPotionID()])) { @@ -50,8 +48,6 @@ public class ItemModMilk extends ItemArmorMod { } } - for(Integer i : ints) { - entity.removePotionEffect(i); - } + for(Integer i : ints) entity.removePotionEffect(i); } } diff --git a/src/main/java/com/hbm/items/tool/ItemDefuser.java b/src/main/java/com/hbm/items/tool/ItemDefuser.java index 9a1aa6d9b..c2a04c3b9 100644 --- a/src/main/java/com/hbm/items/tool/ItemDefuser.java +++ b/src/main/java/com/hbm/items/tool/ItemDefuser.java @@ -27,7 +27,7 @@ public class ItemDefuser extends ItemTooling { public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) { if(entity instanceof EntityCreeper) { - return ItemModDefuser.defuse((EntityCreeper) entity, player, true); + return ItemModDefuser.castrateCreeper((EntityCreeper) entity, player, true); } if(entity instanceof EntityGlyphidNuclear) { diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index e4d50949d..a6f3cb7fe 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -5,6 +5,7 @@ import com.google.common.collect.Multimap; import com.hbm.blocks.IStepTickReceiver; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockAshes; +import com.hbm.blocks.generic.BlockPedestal; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; import com.hbm.config.RadiationConfig; @@ -508,7 +509,7 @@ public class ModEventHandler { public void onLivingUpdate(LivingUpdateEvent event) { if(event.entityLiving instanceof EntityCreeper && event.entityLiving.getEntityData().getBoolean("hfr_defused")) { - ItemModDefuser.defuse((EntityCreeper) event.entityLiving, null, false); + ItemModDefuser.castrateCreeper((EntityCreeper) event.entityLiving, null, false); } ItemStack[] prevArmor = event.entityLiving.previousEquipment; @@ -586,12 +587,15 @@ public class ModEventHandler { @SubscribeEvent public void worldTick(WorldTickEvent event) { + + World world = event.world; + long time = world.getTotalWorldTime(); - if(event.world != null && !event.world.isRemote) { + if(world != null && !world.isRemote) { if(reference != null) { - for(Object player : event.world.playerEntities) { - if(((EntityPlayer) player).ridingEntity != null && event.world.getTotalWorldTime() % (1 * 60 * 20) == 0) { + for(Object player : world.playerEntities) { + if(((EntityPlayer) player).ridingEntity != null && time % (1 * 60 * 20) == 0) { ((EntityPlayer) player).mountEntity(null); didSit = true; } @@ -605,7 +609,7 @@ public class ModEventHandler { int tickrate = Math.max(1, ServerConfig.ITEM_HAZARD_DROP_TICKRATE.get()); - if(event.world.getTotalWorldTime() % tickrate == 0) { + if(time % tickrate == 0) { List loadedEntityList = new ArrayList(); loadedEntityList.addAll(event.world.loadedEntityList); // ConcurrentModificationException my balls @@ -618,13 +622,17 @@ public class ModEventHandler { } } - EntityRailCarBase.updateMotion(event.world); + EntityRailCarBase.updateMotion(world); + } + + if(time % 20 == 0) { + BlockPedestal.checkPedestalEntries(world.provider.dimensionId, time); } } if(event.phase == Phase.START) { - BossSpawnHandler.rollTheDice(event.world); - TimedGenerator.automaton(event.world, 100); + BossSpawnHandler.rollTheDice(world); + TimedGenerator.automaton(world, 100); } } diff --git a/src/main/java/com/hbm/potion/HbmPotion.java b/src/main/java/com/hbm/potion/HbmPotion.java index c1189b8b6..0e03d6458 100644 --- a/src/main/java/com/hbm/potion/HbmPotion.java +++ b/src/main/java/com/hbm/potion/HbmPotion.java @@ -176,7 +176,7 @@ public class HbmPotion extends Potion { public static boolean getIsBadEffect(Potion potion) { try { - Field isBadEffect = ReflectionHelper.findField(Potion.class, "isBadEffect", "field_76418_K"); + Field isBadEffect = ReflectionHelper.findField(Potion.class, "isBadEffect", "field_76418_K"); //TODO: use an AT for this boolean ret = isBadEffect.getBoolean(potion); return ret; diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index b007be844..5801d7bd4 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -15,11 +15,6 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); - /* - default ModulePatternMatcher getMatcher(){ - - }*/ - @Override default void receiveControl(NBTTagCompound data) { if(data.hasKey("slot")) { @@ -44,11 +39,11 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } /** * Used for the copy tool - * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE + * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE // seven, what the fuck? */ int[] getFilterSlots(); - @Override + @Override default NBTTagCompound getSettings(World world, int x, int y, int z) { IInventory inv = (IInventory) this; NBTTagCompound nbt = new NBTTagCompound(); diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index 29bfb46ae..ffda38e6b 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -243,18 +243,18 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } if(doorType.getOpenSoundLoop() != null) { - audio = MainRegistry.proxy.getLoopedSound(doorType.getOpenSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio = MainRegistry.proxy.getLoopedSound(doorType.getOpenSoundLoop(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio.startSound(); } if(doorType.getOpenSoundStart() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundStart(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundStart(), getVolume(), 1F, false); } if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); - audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio2.startSound(); } } @@ -265,18 +265,18 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } if(doorType.getCloseSoundLoop() != null) { - audio = MainRegistry.proxy.getLoopedSound(doorType.getCloseSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio = MainRegistry.proxy.getLoopedSound(doorType.getCloseSoundLoop(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio.startSound(); } if(doorType.getCloseSoundStart() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundStart(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundStart(), getVolume(), 1F, false); } if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); - audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio2.startSound(); } } @@ -294,13 +294,13 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { if(this.state == STATE_OPENING && state == STATE_OPEN) { // Door finished transitioning to open if(doorType.getOpenSoundEnd() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), getVolume(), 1F, false); } } if(this.state == STATE_CLOSING && state == STATE_CLOSED) { // Door finished transitioning to closed if(doorType.getCloseSoundEnd() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), getVolume(), 1F, false); } } @@ -313,6 +313,10 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } } } + + public float getVolume() { + return getVolume(doorType.getSoundVolume()); + } public int getSkinIndex() { return skinIndex; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java index 493ff0a21..c53d8b088 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java @@ -12,6 +12,7 @@ import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.tileentity.network.RTTYSystem; import com.hbm.util.BufferUtil; +import api.hbm.redstoneoverradio.IRORInteractive; import cpw.mods.fml.common.Optional; import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; @@ -24,7 +25,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityRBMKTerminal extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityRBMKTerminal extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent, IRORInteractive { public String[] history = new String[17]; public String channel = ""; @@ -249,4 +250,46 @@ public class TileEntityRBMKTerminal extends TileEntityLoadedBase implements IGUI markDirty(); return new Object[] {true}; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "clear", + PREFIX_FUNCTION + "write" + NAME_SEPARATOR + "text", + PREFIX_FUNCTION + "set" + NAME_SEPARATOR + "text", + PREFIX_FUNCTION + "submit" + NAME_SEPARATOR + "command", + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "clear").equals(name)) { + for(int i = 0; i < history.length; i++) history[i] = ""; + this.markChanged(); + return null; + } + + String allParams = String.join(" ", params); + + if((PREFIX_FUNCTION + "write").equals(name)) { + this.push(allParams); + this.markChanged(); + return null; + } + + if(name.startsWith(PREFIX_FUNCTION + "set")) { + int line = IRORInteractive.parseInt(name.substring(3), 1, 17) - 1; + this.history[line] = allParams; + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "submit").equals(name)) { + this.eval(allParams); + return null; + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java index e2e0165ce..631ea9879 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java @@ -4,6 +4,7 @@ package com.hbm.tileentity.network.pneumatic; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerPneumoStorageExporter; import com.hbm.inventory.gui.GUIPneumoStorageExporter; +import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.network.RTTYSystem; import com.hbm.util.BobMathUtil; @@ -18,7 +19,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class TileEntityPneumoStorageExporter extends TileEntityPneumaticMachineBase implements IRORInteractive, IControlReceiver { +public class TileEntityPneumoStorageExporter extends TileEntityPneumaticMachineBase implements IRORInteractive, IControlReceiver, IControlReceiverFilter { /** If requests should be pulled repeatedly every tick */ public boolean continuousRequest = false; @@ -303,9 +304,20 @@ public class TileEntityPneumoStorageExporter extends TileEntityPneumaticMachineB if(data.hasKey("ror")) { this.rorConfiguredMode = !this.rorConfiguredMode; } + if(data.hasKey("slot")) { + setFilterContents(data); + } this.markChanged(); } + @Override + public int[] getFilterSlots() { + return new int[] {0, 9}; + } + + @Override + public void nextMode(int i) { } + @Override public String[] getFunctionInfo() { return new String[] { diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java index 30f7c62e4..dcf4d5552 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.network.pneumatic; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerPneumoStorageMono; import com.hbm.inventory.gui.GUIPneumoStorageMono; +import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; @@ -15,7 +16,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class TileEntityPneumoStorageMono extends TileEntityPneumaticStorageBase implements IPneumaticConnector, IFluidStandardReceiverMK2, ISlotMonitorProvider, IControlReceiver, IGUIProvider { +public class TileEntityPneumoStorageMono extends TileEntityPneumaticStorageBase implements IPneumaticConnector, IFluidStandardReceiverMK2, ISlotMonitorProvider, IControlReceiver, IGUIProvider, IControlReceiverFilter { public static final int CAPACITY = 100_000; public int[] amounts; @@ -86,4 +87,12 @@ public class TileEntityPneumoStorageMono extends TileEntityPneumaticStorageBase } @Override public long setupType(int index, ItemStack zeroStack, long amount) { return amount; } + + @Override + public void nextMode(int i) { } + + @Override + public int[] getFilterSlots() { + return new int[] {0, 3}; + } } diff --git a/src/main/java/com/hbm/world/gen/MapGenChainloader.java b/src/main/java/com/hbm/world/gen/MapGenChainloader.java index 01a605a4c..143b827b6 100644 --- a/src/main/java/com/hbm/world/gen/MapGenChainloader.java +++ b/src/main/java/com/hbm/world/gen/MapGenChainloader.java @@ -116,7 +116,5 @@ public class MapGenChainloader extends MapGenBase { blockMetas = event.metaArray; } } - } - } diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index dbf6922fa..051b11d1e 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -35,43 +35,45 @@ public class NTMWorldGenerator implements IWorldGenerator { boolean regTest = false; - public static boolean isInvalidBiome(BiomeGenBase biome) { - return BiomeDictionary.isBiomeOfType(biome, Type.OCEAN) || BiomeDictionary.isBiomeOfType(biome, Type.RIVER); + /** Includes all biomes tagged as ocean or river */ + public static boolean isWaterBiome(BiomeGenBase biome) { + return BiomeDictionary.isBiomeOfType(biome, Type.WATER); } + /** Includes biomes with little height variation and sparse vegetation, excludes water biomes */ public static boolean isFlatBiome(BiomeGenBase biome) { - return biome.heightVariation <= 0.2F && !isInvalidBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SPARSE); + return biome.heightVariation <= 0.2F && !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SPARSE); } public NTMWorldGenerator() { /// SPIRE /// NBTStructure.registerStructure(0, new SpawnCondition("spire") {{ - canSpawn = biome -> biome.heightVariation <= 0.05F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.05F && !isWaterBiome(biome); structure = new JigsawPiece("spire", StructureManager.spire, -1); spawnWeight = StructureConfig.spireSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("features") {{ - canSpawn = biome -> !isInvalidBiome(biome); + canSpawn = biome -> !isWaterBiome(biome); start = d -> new MapGenNTMFeatures.Start(d.getW(), d.getX(), d.getY(), d.getZ()); spawnWeight = StructureConfig.featuresSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("bunker") {{ - canSpawn = biome -> !isInvalidBiome(biome); + canSpawn = biome -> !isWaterBiome(biome); start = d -> new BunkerStart(d.getW(), d.getX(), d.getY(), d.getZ()); spawnWeight = StructureConfig.bunkerSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("vertibird") {{ - canSpawn = biome -> !isInvalidBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); + canSpawn = biome -> !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); structure = new JigsawPiece("vertibird", StructureManager.vertibird, -3); spawnWeight = StructureConfig.vertibirdSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("crashed_vertibird") {{ - canSpawn = biome -> !isInvalidBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); + canSpawn = biome -> !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); structure = new JigsawPiece("crashed_vertibird", StructureManager.crashed_vertibird, -10); spawnWeight = StructureConfig.vertibirdCrashedSpawnWeight; }}); @@ -116,7 +118,7 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("forestchem") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("forest_chem", StructureManager.forest_chem, -9); spawnWeight = StructureConfig.forestChemSpawnWeight; }}); @@ -130,7 +132,7 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("forest_post") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("forest_post", StructureManager.forest_post, -10); spawnWeight = StructureConfig.forestPostSpawnWeight; }}); @@ -160,13 +162,13 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("plane1") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("crashed_plane_1", StructureManager.plane1, -5); spawnWeight = StructureConfig.plane1SpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("plane2") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("crashed_plane_2", StructureManager.plane2, -8); spawnWeight = StructureConfig.plane2SpawnWeight; }}); @@ -190,52 +192,52 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinA") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsA", StructureManager.ntmruinsA, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsASpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinB") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsB", StructureManager.ntmruinsB, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsBSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinC") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsC", StructureManager.ntmruinsC, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsCSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinD") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsD", StructureManager.ntmruinsD, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsDSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinE") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsE", StructureManager.ntmruinsE, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsESpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinF") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsF", StructureManager.ntmruinsF, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsFSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinG") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsG", StructureManager.ntmruinsG, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsGSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinH") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsH", StructureManager.ntmruinsH, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsHSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinI") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsI", StructureManager.ntmruinsI, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsISpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinJ") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsJ", StructureManager.ntmruinsJ, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); diff --git a/src/main/java/com/hbm/world/generator/TimedGenerator.java b/src/main/java/com/hbm/world/generator/TimedGenerator.java index 9501bbc8d..a9269c8a6 100644 --- a/src/main/java/com/hbm/world/generator/TimedGenerator.java +++ b/src/main/java/com/hbm/world/generator/TimedGenerator.java @@ -3,10 +3,12 @@ package com.hbm.world.generator; import java.util.ArrayList; import java.util.HashMap; +import com.hbm.interfaces.NotableComments; import com.hbm.interfaces.Spaghetti; import net.minecraft.world.World; +@NotableComments @Deprecated @Spaghetti("this class should be destroyed") public class TimedGenerator { @@ -46,7 +48,7 @@ public class TimedGenerator { list.add(job); } - //should i be doing this? probably not, but watch me go + //should i be doing this? probably not, but watch me go // no for the love of fucking god don't do this public interface ITimedJob { public void work(); From 775126f0bae222ffb85d89e56c4cc8ef3ce6ecfc Mon Sep 17 00:00:00 2001 From: HbmMods Date: Thu, 9 Jul 2026 21:33:49 +0200 Subject: [PATCH 6/6] obligatory beach episode --- changelog | 8 ++++- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 10 +++--- .../com/hbm/blocks/generic/BlockPedestal.java | 2 +- .../hbm/handler/nei/PressRecipeHandler.java | 23 ++++++++----- .../container/ContainerMachineEPress.java | 14 ++++---- .../ContainerPneumoStorageExporter.java | 31 +++++++++++++++++- .../java/com/hbm/inventory/fluid/Fluids.java | 2 +- .../hbm/inventory/gui/GUIMachineEPress.java | 10 +++--- .../gui/GUIMachineElectricFurnace.java | 2 +- .../hbm/inventory/gui/GuiInfoContainer.java | 21 ++++++++++-- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../hbm/render/item/ItemRenderLibrary.java | 3 +- .../hbm/render/tileentity/RenderEPress.java | 12 +++---- .../java/com/hbm/tileentity/DoorDecl.java | 2 +- .../machine/TileEntityMachineEPress.java | 9 ++--- src/main/resources/assets/hbm/lang/de_DE.lang | 4 ++- src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ .../textures/blocks/brick_forgotten_bw.png | Bin 0 -> 370 bytes .../blocks/brick_forgotten_bw_top.png | Bin 0 -> 294 bytes .../playground/nullstone_demo_0_wip.png | Bin 0 -> 331 bytes .../assets/hbm/textures/gui/gui_epress.png | Bin 2361 -> 2357 bytes .../assets/hbm/textures/gui/gui_slab.png | Bin 4295 -> 4131 bytes .../gui/processing/gui_supercomputer.png | Bin 4136 -> 4194 bytes .../assets/hbm/textures/items/drives.png | Bin 0 -> 574 bytes .../textures/models/machines/cyclotron.png | Bin 9213 -> 8089 bytes .../models/machines/cyclotron_ashes.png | Bin 595 -> 299 bytes .../machines/cyclotron_ashes_filled.png | Bin 623 -> 318 bytes .../models/machines/cyclotron_book.png | Bin 538 -> 249 bytes .../models/machines/cyclotron_book_filled.png | Bin 557 -> 266 bytes .../models/machines/cyclotron_coin.png | Bin 582 -> 296 bytes .../models/machines/cyclotron_coin_filled.png | Bin 620 -> 323 bytes .../models/machines/cyclotron_gavel.png | Bin 605 -> 313 bytes .../machines/cyclotron_gavel_filled.png | Bin 635 -> 327 bytes .../models/machines/supercomputer.png | Bin 7778 -> 8152 bytes 35 files changed, 106 insertions(+), 53 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_0_wip.png create mode 100644 src/main/resources/assets/hbm/textures/items/drives.png diff --git a/changelog b/changelog index be0317ad2..49a10e560 100644 --- a/changelog +++ b/changelog @@ -73,7 +73,7 @@ * Standard control units now use rubber instead of speed I upgrades * Advanced control units now use hardplastics instead of speed III upgrades * Quantum computers now use speed III upgrades instead of overdrive I -* Updated electric furnace GUI +* Updated electric furnace, burner press and electric press GUIs * The RoR terminal can now accept RoR controller input, allowing the terminal screen to be written directly and RoR terminal commands to be executed via incoming RoR signals * The last part seems redundant, why would you need to send RoR by sending RoR? The answer being, the terminal can be toggled to send polling signals, which will run independently of the source * For AUTOCALs, this means that they can now send polling signals "in parallel", i.e. independently of the code that actually runs on said AUTOCAL, by simply toggling polling on a terminal @@ -82,6 +82,11 @@ * 1/3 of glyphids do not have this behavior, this means that larger groups of glyphids cannot be trapped indefinitely by triggering target changes on purpose * Pedestal blocks fitted with charms now have a 200x200 block square area around them where the charm effect of repelling meteors applies to all players * Pedestal blocks fitted with golden defusers now have a 50x50 block area around them where creepers are automatically defused +* Disabled GTNH-NEI filter drag functionality because GTNH-NEI breaks the pattern slots of the new pneumatics stuff and the person who added it originally was too bald to fix it despite being told multiple times + * 70k it's 70k and he's bald bald haha bald head + * baldie baldie hahaha he bald he has the no of hair + * follically challenged baldie bald head +* Increased flue gas burn value from 10kTU to 25kTU ## Fixed * Fixed AUTOCAL's number comparison functions not working with variable substitution as advertised @@ -97,3 +102,4 @@ * Fixed meteorite sword localization still being broken * Fixed missing localization on the FM radio * Fixed mufflers not working on large doors +* Fixed the electric press not displaying the currently pressed item in the model diff --git a/gradle.properties b/gradle.properties index fc85e5e78..105ca8208 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5719 +mod_build_number=5751 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 537d02097..91c3537de 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1907,11 +1907,11 @@ public class ModBlocks { pneumatic_tube = new PneumoTube().setBlockName("pneumatic_tube").setStepSound(ModSoundTypes.pipe).setHardness(2F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_tube"); pneumatic_tube_paintable = new PneumoTubePaintableBlock().setBlockName("pneumatic_tube_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - pneumatic_storage_access = new PneumoStorageAccess().setBlockName("pneumatic_storage_access").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_access"); - pneumatic_storage_clutter = new PneumoStorageClutter().setBlockName("pneumatic_storage_clutter").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_clutter"); - pneumatic_storage_mono = new PneumoStorageMono().setBlockName("pneumatic_storage_mono").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_mono"); - pneumatic_storage_importer = new PneumoStorageImporter().setBlockName("pneumatic_storage_importer").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_importer"); - pneumatic_storage_exporter = new PneumoStorageExporter().setBlockName("pneumatic_storage_exporter").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_exporter"); + pneumatic_storage_access = new PneumoStorageAccess().setBlockName("pneumatic_storage_access").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_access"); + pneumatic_storage_clutter = new PneumoStorageClutter().setBlockName("pneumatic_storage_clutter").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_clutter"); + pneumatic_storage_mono = new PneumoStorageMono().setBlockName("pneumatic_storage_mono").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_mono"); + pneumatic_storage_importer = new PneumoStorageImporter().setBlockName("pneumatic_storage_importer").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_importer"); + pneumatic_storage_exporter = new PneumoStorageExporter().setBlockName("pneumatic_storage_exporter").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_exporter"); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java index a1d1207dd..0333505dc 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java @@ -208,7 +208,7 @@ public class BlockPedestal extends BlockContainer { if(this.item != null) { if(item.getItem() == ModItems.protection_charm) pushPedestalEntry(worldObj, PedestalEntryType.CHARM_OF_PROTECTION, xCoord, yCoord, zCoord); if(item.getItem() == ModItems.meteor_charm) pushPedestalEntry(worldObj, PedestalEntryType.METEORITE_CHARM, xCoord, yCoord, zCoord); - if(worldObj.getTotalWorldTime() % 60 == 0 && item.getItem() == ModItems.defuser) castrateCreepers(); + if(worldObj.getTotalWorldTime() % 60 == 0 && item.getItem() == ModItems.defuser_gold) castrateCreepers(); } } } diff --git a/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java index f0b2adefb..0dc48dddf 100644 --- a/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java @@ -41,9 +41,11 @@ public class PressRecipeHandler extends TemplateRecipeHandler implements ICompat return "pressing"; } public LinkedList transferRectsRec = new LinkedList(); - public LinkedList transferRectsGui = new LinkedList(); + public LinkedList transferRectsPress = new LinkedList(); + public LinkedList transferRectsEPress = new LinkedList(); public LinkedList> guiRec = new LinkedList>(); - public LinkedList> guiGui = new LinkedList>(); + public LinkedList> guiPress = new LinkedList>(); + public LinkedList> guiEPress = new LinkedList>(); public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe { PositionedStack input; @@ -130,21 +132,24 @@ public class PressRecipeHandler extends TemplateRecipeHandler implements ICompat @Override public Class getGuiClass() { - // return GUIMachineShredder.class; return null; } @Override public void loadTransferRects() { - transferRectsGui = new LinkedList(); - guiGui = new LinkedList>(); + transferRectsPress = new LinkedList(); + transferRectsEPress = new LinkedList(); + guiPress = new LinkedList>(); + guiEPress = new LinkedList>(); transferRects.add(new RecipeTransferRect(new Rectangle(74 + 6, 23, 24, 18), "pressing")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(74 + 6 + 18, 23, 24, 18), "pressing")); - guiGui.add(GUIMachinePress.class); - guiGui.add(GUIMachineEPress.class); + transferRectsPress.add(new RecipeTransferRect(new Rectangle(74 + 6 + 18, 23, 24, 18), "pressing")); + transferRectsEPress.add(new RecipeTransferRect(new Rectangle(13 + 6 + 18, 23, 24, 18), "pressing")); + guiPress.add(GUIMachinePress.class); + guiEPress.add(GUIMachineEPress.class); RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); - RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + RecipeTransferRectHandler.registerRectsToGuis(guiPress, transferRectsPress); + RecipeTransferRectHandler.registerRectsToGuis(guiEPress, transferRectsEPress); } @Override diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java b/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java index 020eb7ac4..4f6a38ae8 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java @@ -23,24 +23,24 @@ private TileEntityMachineEPress nukeBoy; nukeBoy = tedf; //Battery - this.addSlotToContainer(new Slot(tedf, 0, 44, 53)); + this.addSlotToContainer(new Slot(tedf, 0, 152, 54)); //Stamp - this.addSlotToContainer(new Slot(tedf, 1, 80, 17)); + this.addSlotToContainer(new Slot(tedf, 1, 19, 15)); //Input - this.addSlotToContainer(new Slot(tedf, 2, 80, 53)); + this.addSlotToContainer(new Slot(tedf, 2, 19, 51)); //Output - this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 140, 35)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 79, 33)); //Upgrade - this.addSlotToContainer(new SlotUpgrade(tedf, 4, 44, 21)); + this.addSlotToContainer(new SlotUpgrade(tedf, 4, 111, 32)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java index 4928ba349..4e80cbb46 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java @@ -17,7 +17,7 @@ public class ContainerPneumoStorageExporter extends ContainerBase { this.addSlotToContainer(new SlotPattern(exporter, i, 17 + (i % 3) * 18, 17 + (i / 3) * 18).allowStackSize()); } - addSlots(exporter, 9, 80, 17, 3, 3); + addTakeOnlySlots(exporter, 9, 80, 17, 3, 3); playerInv(invPlayer, 103); } @@ -41,4 +41,33 @@ public class ContainerPneumoStorageExporter extends ContainerBase { slot.putStack(held); return ret; } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + return null; + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 18f7908cc..99d05b0ac 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -412,7 +412,7 @@ public class Fluids { CONCRETE = new FluidType("CONCRETE", 0xA2A2A2, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); DHC = new FluidType("DHC", 0xD2AFFF, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); AIRBLAST = new FluidType("AIRBLAST", 0xFFDADA, 0, 3, 0, EnumSymbol.NONE).setTemp(1_200).addTraits(GASEOUS); - FLUE = new FluidType(155, "FLUE", 0x131313, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFF4545, 0xFFE97F)).addTraits(new FT_Flammable(10_000), GASEOUS, new FT_Polluting().burn(PollutionType.SOOT, SOOT_GAS).release(PollutionType.SOOT, SOOT_GAS * 25)); + FLUE = new FluidType(155, "FLUE", 0x131313, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFF4545, 0xFFE97F)).addTraits(new FT_Flammable(25_000), GASEOUS, new FT_Polluting().burn(PollutionType.SOOT, SOOT_GAS).release(PollutionType.SOOT, SOOT_GAS * 25)); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java b/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java index 383d5bb3d..4d4f54caa 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java @@ -20,14 +20,14 @@ public class GUIMachineEPress extends GuiInfoContainer { press = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 186; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 17, guiTop + 69 - 52, 16, 52, press.power, press.maxPower); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 52 - 34, 16, 34, press.power, press.maxPower); } @Override @@ -44,10 +44,10 @@ public class GUIMachineEPress extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int i = (int) (press.power * 52 / press.maxPower); - drawTexturedModalRect(guiLeft + 17, guiTop + 69 - i, 176, 52 - i, 16, i); + int i = (int) (press.power * 34 / press.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 52 - i, 176, 34 - i, 16, i); int k = (int) (press.renderPress * 16 / press.maxPress); - this.drawTexturedModalRect(guiLeft + 79, guiTop + 35, 192, 0, 18, k); + this.drawTexturedModalRect(guiLeft + 18, guiTop + 33, 192, 0, 18, k); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java index e31ed7ed4..06d37ff96 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java @@ -68,7 +68,7 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { if(furnace.getWorldObj().getBlock(furnace.xCoord, furnace.yCoord, furnace.zCoord) == ModBlocks.machine_electric_furnace_on) { drawTexturedModalRect(guiLeft + 45, guiTop + 20, 192, 12, 18, 16); - drawTexturedModalRect(guiLeft + 45, guiTop + 47, 192, 36, 18, 16); + drawTexturedModalRect(guiLeft + 46, guiTop + 47, 192, 28, 18, 16); } int p = furnace.getProgressScaled(28); diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index f99f75244..b5f3f1718 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -341,7 +341,24 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa @Override @Optional.Method(modid = "NotEnoughItems") public boolean handleDragNDrop(GuiContainer gui, int x, int y, ItemStack stack, int button) { - if(gui instanceof GuiInfoContainer && stack != null){ + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + + /*if(gui instanceof GuiInfoContainer && stack != null){ Slot slot = getSlotAtPosition(x,y); if(slot instanceof SlotPattern){ if(inventorySlots instanceof ContainerBase) { @@ -357,7 +374,7 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa return true; } } - } + }*/ return false; } //all credits for impl to GTNH's EnderCore fork diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 6fb156cc0..d09072c7a 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5719)"; + public static final String VERSION = "1.0.27 BETA (5751)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 9160ac8cf..578119be5 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -43,7 +43,8 @@ public class ItemRenderLibrary { renderers.put(Item.getItemFromBlock(ModBlocks.machine_cyclotron), new ItemRenderBase() { public void renderInventory() { - GL11.glScaled(2.25, 2.25, 2.25); + GL11.glTranslated(0, -1, 0); + GL11.glScaled(2.75, 2.75, 2.75); } public void renderCommon() { GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/render/tileentity/RenderEPress.java b/src/main/java/com/hbm/render/tileentity/RenderEPress.java index cf8915ef8..dc8f818b0 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderEPress.java +++ b/src/main/java/com/hbm/render/tileentity/RenderEPress.java @@ -80,14 +80,10 @@ public class RenderEPress extends TileEntitySpecialRenderer { GL11.glRotatef(180, 0F, 1F, 0F); switch(tileentity.getBlockMetadata() - BlockDummyable.offset) { - case 2: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 4: - GL11.glRotatef(0, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(180, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; } GL11.glRotatef(90, 0F, 1F, 0F); diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index e9b62b3fb..f56176c2a 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -666,7 +666,7 @@ public abstract class DoorDecl { return null; } - @Override public int timeToOpen() { return 120; } + @Override public int timeToOpen() { return 60; } @Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, -1, 0, 3, 3, 1 } }; } @Override public int[] getDimensions() { return new int[] { 2, 0, 0, 0, 1, 1 }; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 4dc4df595..0becdf9fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -147,10 +147,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE super.serialize(buf); buf.writeLong(power); buf.writeInt(press); - if (slots[2] == null) - buf.writeShort(-1); // indicate that the NBT doesn't actually exist to avoid null pointer errors. - else - BufferUtil.writeNBT(buf, slots[2].stackTagCompound); + BufferUtil.writeItemStack(buf, slots[2]); } @Override @@ -158,9 +155,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE super.deserialize(buf); this.power = buf.readLong(); this.syncPress = buf.readInt(); - - NBTTagCompound stack = BufferUtil.readNBT(buf); - this.syncStack = ItemStack.loadItemStackFromNBT(stack); + this.syncStack = BufferUtil.readItemStack(buf); this.turnProgress = 2; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index cf50d61fe..336065b4e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -359,7 +359,8 @@ container.paSource=Teilchenquelle container.plasmaHeater=Plasmaerhitzer container.pneumoStorageAccess=PLS Zugangsterminal container.pneumoStorageClutter=PLS Gerümpelkiste -container.pneumoStorageImporter=PSN Importer +container.pneumoStorageExporter=PLS Exporter +container.pneumoStorageImporter=PLS Importer container.pneumoStorageMono=PLS Massenspeicher container.pneumoTube=Rohrpost container.press=Befeuerte Presse @@ -4742,6 +4743,7 @@ tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur tile.pneumatic_storage_access.name=Pneumatisches Lagersystem - Zugangsterminal tile.pneumatic_storage_clutter.name=Pneumatisches Lagersystem - Gerümpelkiste +tile.pneumatic_storage_exporter.name=Pneumatisches Lagersystem - Exporter tile.pneumatic_storage_importer.name=Pneumatisches Lagersystem - Importer tile.pneumatic_storage_mono.name=Pneumatisches Lagersystem - Massenspeicher tile.pneumatic_tube.name=Rohrpost diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index dc5e332c1..ba4ad5547 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -761,6 +761,7 @@ container.paSource=Particle Source container.plasmaHeater=Plasma Heater container.pneumoStorageAccess=PSN Access Terminal container.pneumoStorageClutter=PSN Clutter Storage +container.pneumoStorageExporter=PSN Exporter container.pneumoStorageImporter=PSN Importer container.pneumoStorageMono=PSN Bulk Storage container.pneumoTube=Pneumatic Tube @@ -6003,6 +6004,7 @@ tile.plasma_heater.name=Plasma Heater tile.plushie.name=%s Plushie tile.pneumatic_storage_access.name=Pneumatic Storage Network - Access Terminal tile.pneumatic_storage_clutter.name=Pneumatic Storage Network - Clutter Storage +tile.pneumatic_storage_exporter.name=Pneumatic Storage Network - Exporter tile.pneumatic_storage_importer.name=Pneumatic Storage Network - Importer tile.pneumatic_storage_mono.name=Pneumatic Storage Network - Bulk Storage tile.pneumatic_tube.name=Pneumatic Tube diff --git a/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw.png b/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..7365aff7deb31123dfd104e5183555111444dd78 GIT binary patch literal 370 zcmV-&0ge8NP)u3;n?rsEg0(Dn8#eo8C zT!OG6EdD({K2NpQv$Y0*s*-cY%-FUKw^}OzW=8Lw=kq!8XEPfKUhF|HHnZ^#P)Zs3 zvv-aj7zlhSFua?Yy&Lr22mF}mZz4j@naAUSh>Qj~XO`GCPP?zJ$vtn$R$}sE?T%-DFqQ>0WQ16 z{Yxn$=Ii8~X|0XRe68#Hol@dBj#0R-D0oneEP)U=8QBR{TlFL) zgz@t)?46Fz^Kt2}G9Hnrz5?gR^R_wARA+J`;!ty?1WFqt+TG ssVe)vhgjaoNOI26;B4Z5oU@7TpMBq`ttnO@_y7O^07*qoM6N<$g1O9ke*gdg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_0_wip.png b/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_0_wip.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe7ed29d8952d0a545752701b867458df0a90c8 GIT binary patch literal 331 zcmV-R0kr;!P)wXI3z*HeFtEU?3}T<&Q{F zl)UWwegS~H!^|Ke;28jV?{IgB$Q0x5=)I#b@C_J=kK>r`NnFef0PX-T5;0?rBXMD7 zUPh?|hzL{_z4u2ch2RK?UJ#H=tmpqy&5_Z(9!HcRFU6Q^=Bf%Q6l#d9Pg+` zRZ$48wcdfbl@XNNTB74rLlq+OAfYOf6mD`mW0qJ(t#$HjX{}xEJ`GYHX}+1+V?vkK z+Wi;uW6u7TxwbPq_9M{S>I&({C|002ovPDHLkV1n%0i^u=~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/gui_epress.png b/src/main/resources/assets/hbm/textures/gui/gui_epress.png index 601b9c143537ebfe2270fd2d0f64f563f2d1cb83..0079b6484035c9d738d879dd6fc4d5e0bcf4c969 100644 GIT binary patch literal 2357 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 z zE(z&h`}(z$ik8`}V#zjn)p1BWNfcP~$9Pu>gq-F4C zR%W!NU1;o1$+AE#HS%M@kM@84kB1vQRat~&>QNj#9(BQ(e^SW6ZUqwNIcESe0VzXH zCps%g_s8?@^#l|`_;)C~<#6y{ zAw;i*pPPSEO4CnM@@RWyP#4sH0Iv?=$@y7Me{}&Yf#ih(0(qmz9-|&<`&X`xAe9c;nng$FVdkA za^aAEg;ce84N(yLqlKy{gtR( z66a5|O_z5t<%daNy*OrFRdPlL2OkH`%$kbb7Rks7D~~y7m$H{nr|hDHQG6-iV9T%1 zwG0T^vqz*#jLl_`WHmm4qDL9<7(*TACU@i($C<1fc%N;EC>DR8+w)qeo~7g{bZ{X?Uts_-^^ z>qhY@CL!D5F^t)owW}H1{WC6Cqp`mhC5&a>3rz}dn7}0qrX%VIa9({w{ga>w?%L#u z?S04Ojj_H?Pb&R@ofM)R&f0MTc1Puc(*$IVy>QaQ>Yg0w zUm1ju(Z+|FH)aK3aK+YyY+Ee7;`ti)qRzDYdAH*wydoC zZ+UY@Q9Vz@I#Eh|yDQ;Te|DheN~A!zaM5p!c5F3b$t!myUhudyJ74Teo9?{6$vePj0cq?vVu_pW~PWz!GyvZtf*B?Du2I;}WepmLH6sO!kUOnp30SEalDqF+++MY(vb$oq*rE{vY=Tbr<}Ov4wU_Y%{F`okkb0}=&WZ7l9s^<}+4gywcX2aM?-)&U!Uq62szXs!w#$9r$T$Sn^fW6CKc6dpW&*XjF-$@3k{CUH$|)ULna&@ zJGyR}-L$%GcJq|W1HHLs_M5fg#etm(5=Q7qK0}FNr!@oLnvd8bEXy=s`8xk)y#o55mdN6T zj*wGDZ?Bg2?COj1>+g?v3?q+!fKH5KP}BkAm2am8J{{+_fc*(qot`7j9?4U!xH7cX zKGSHHDcW^SZg?s`+w@r6M-0;0}D{1_|RMf2S0xozXJC3{2L9=DQ%7Bd5AEH87G`(4E;GVQD%MN7Q=NdVVm8?Bx}bul#O_HT0kRWwD*k)OP@dF zM8}fub+#^-cymgY7d=(=SN+-8Hl=K|x#Y5d0b;ooZP6D*UKM+=>#E{B2gaR}$FIs; z=y6aKdd@ekn8_FYQSC){dTYGLj&Z%-qu?T6wzv%@IvcQLQTZ&fq1uuYIhkx|u_yKS zV&!9S5lXiUzRmM)XK{)px28O)*=O0Wgf|eB`;R@1emgT8x=Uj2$gnw4R*F=e3ebAomh`%25LCkC14?8LrBSDb~jP_e%jvFd;Ij&&lI@>nbVAB5&MFTyA literal 4295 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 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png index a68dda7ab3cc93e4605826eb7d08c1afac99cdf5..2703b7dc15516140f2a43d7213c3c07b5a6c24b1 100644 GIT binary patch literal 4194 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 Y<(-rp<7#;{|J#%Cg-Zq{=aJ$6169(pl>h($ literal 4136 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 D1_ggS diff --git a/src/main/resources/assets/hbm/textures/items/drives.png b/src/main/resources/assets/hbm/textures/items/drives.png new file mode 100644 index 0000000000000000000000000000000000000000..c1fb4d94a6d789a94e81801068417accad48f4f1 GIT binary patch literal 574 zcmV-E0>S->P)E3Gy^vpoOh%&~k$MKU5L1L3;9f+rFe*A$a5Mu;DaG^ zgLC_UF?U<(9pKyz3jB0gqSCjdSwKWB>pF M07*qoM6N<$f=jRncK`qY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png index 90064e6180182c0982bd4ddda6743533d38e92a5..35ccca0c43e60a77c0bed490917cf1a89f33870b 100644 GIT binary patch literal 8089 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 bdm-0wX{LDaiSjg1YX_+*Ybg~gS_c0g%(Ml) literal 9213 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 diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes.png index e291026a4f940b07dc2ee47020c0f9e656d38bbc..ae3417eb446a6df9beba40f5df228424362b5255 100644 GIT binary patch delta 272 zcmV+r0q_3P1gip&B!2{RLP=Bz2nYy#2xN!=0081iL_t(YiS5_h4Z|P|1yECU9`;}c z50V)egc-bt7izyOrA~MlC{3i^KTwhrW08jgl@P*9&y9qL+6uhEt3qZz9sj WbNl}v5)uFa00{s|MNUMnLSTZ>s(45M literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^GC-`r!3HE5w@NsHsNx`ZCx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjVd?$3P6lGsB>j zQ(8j4M|y$xjQ#u^?w@lbAWT&TV%W>ew(cjYNe+H~ldU1Sp z-3Lw+YX+IV=bqYo;{1%mJ&MKhlo%X#ygj#XOX-57yq$IFigf-6PkCA>uPjyZ2?4YsY>kn@JwqqHbru?6q39 ze{O7MyU4~1)1Pw3i}4z6yI;6RyjS1;!_%|E-M_1MF*Akt=CT{5PX~pJr>mdKI;Vst E04ANK_5c6? diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes_filled.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes_filled.png index 8b1cc1a0282d001c3e8636aa003aa339bd9c8020..0f15363f8e76c5d63c1d28fdb1dccd4f44c5af11 100644 GIT binary patch delta 291 zcmV+;0o?xY1ik{0B!2{RLP=Bz2nYy#2xN!=008w#L_t(YiS5_X5rZHM24L*<*%_E1 z6S#moxQ8>i2RpFGzfk*>J50eQNNK(6{|49c8Pci@PGp|vhnzc;7~_zRZ!H(sN_eIB?InvQ`xW$d13?Lyo*cYxw(e$GTVe2eScC-G5^<2*54N;=K1&e<2gd z7yvhpqYELJQ8k!i93nEKDlmuDqHnN%1LoXa(Fc;7fJywVg}CuGS_%oTnc>YA@}HPuS)6vUMeTn pb!~dK*tYG*&Kwq>>K&(hg-?#7g(drV2e|+M002ovPDHLkV1nT@fe-)y literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^GC-`r!3HE5w@NsHsNx`ZCx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjVdC&eO#)#KZgTbVI%-1Ch4+p2eMU2Uy(IQVPuE z4mj#L9C{(y)BKUAPc6=Yo&SL#S8)GgX1ic54|&t13;K#rwzl+N{}x!Vz;L$yx~kc{ z(?6dKeB38h(=xmGXXD!^(8o`YQU4|v@TfI6|Rc89IRQ+Y_YqyQg(g{gzdCs1*a^eOLw}Pcp z4}}{wDc5S6OcY#pDQKY&YumdM9&R%{yj$nVCm7A$`08wmi&yK8{Ra+f)QMD0jCs3y z5~D+S{sl$NLYp_mf3xDJ@|12bP0l+XkK|KYkB diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book.png index b1d2ac286058c95b232efb7915ec133672281d34..b16030be78f10d9c9a42de2db2d6399cec87c3b7 100644 GIT binary patch delta 221 zcmV<303!dI1o;7wB!2{RLP=Bz2nYy#2xN!=006K_L_t(YiS3us4Z|P|M4{?Dw}*G| z9?ZZ*-op#EUzS=o60YJ9K6rn&NRHzoIn?4HqL=TTK}70j{m6WIgr{!+NEHx~uX?(} zYMGg{EQhLkSl^$a;dl5i_Pjr_bsTykjwAVp1XcCt^FD%^hgKUK9%)o8%JdAk;1=A1 zTW|qE0ELLs1VhsTKw;+Ly2uDiore+bpZMk^%aLdPf2nV@)>7{lz4yiL7FT6wOn3MO XYbZBfl-<0S00000NkvXXu0mjf{G(=4 literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^GC-`r!3HE5w@NsHsNx`ZCx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjSsD^mK6y@$gPgabWJ-*ZBY9Q4Pl5=Ihg4o*63^ zzhDf=Nl!>fII${o(JKDsTd(kL;7=@Ewle?30U%hA$*@q9^}7BX_owkKAK3f(FUERk zHT>jAd)M%DLI(HxcpHBKVdjVntQ#6%i=Q`sbAOLqtOPU5QFXx{t|mK`Yeq?oj@&DG z-E@~&No<|)D&dOLs^){~3zzLvY+jtNu*=|P!waq%GnTP$l8X^FxF|M>t02z<3OZL#k;8IHb9e{g~$4H$_~h92vSN9+4~0~3a|Ceb8-uJ*+4{B z0U~;aVW7kw&ZUT>}S10&RHFUi0Z;rK^D^{ zVnL1N8E(NXxCOW1eAK-Z5uvpPF-90;%ok))M1+hwq oQA%-rThv-F_O_Un9kblw6G(MH-E3%;o&W#<07*qoM6N<$f|U(t6951J literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^GC-`r!3HE5w@NsHsNx`ZCx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjSs@@pN$v@$gPgabWJ-*ZBY9Q4Pl5=Ihg4o*63^ zzhDf=Nl!>fII${o(JKDsTd(kL;7=@Ewle?30U%hA$*@q9^}7BX_owkKAK3f(FUERk zHT>jAd)M%DLI(HxcpHBKVdjVntQ#6%i=Q`UIjX*pdvU{S@pHx*QW8QvTupW@k!61m zRsNabAuqIL!mWfWPOF*&xmWVJ=`OL7s1eJ0C2h1O+M@sA>ErwoTbWmyvNCIm8W{TW zr`Q^}F9<*2678XNAXV|8!cwyX9~5~e2_|=e_unzeqk><-)3yN!+lcP!lt^n$zVYhvVZ%kR~QnkwKjz`E+SB) zo!0P^*pUzd=X|;~_HsysyF}a(fhP?!lZX(}qxG#2 z5q_O@pQS2b<0!+oMKAj`&1_y$swo>yU5oYqr8W>_ocgv%DQ)()_*U(d!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjSr&^>lFz@$h~+-IuG`K)}tuS~~oias`99lYig~ zUN7;b<^ok*3%g|wD6i1&zpVF0#Q12+r62CK0x51Ee+njpk5v07uXA4Py7=wzwskGU)#M5nzwodH}@UR0|kbstDnm{r-UW|hg+_V diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin_filled.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin_filled.png index 5dc70b950665b118542cf07a6f788512a7f0dbd3..7af3192d397463ef175c0db27f6952259e0e0146 100644 GIT binary patch delta 296 zcmV+@0oVTQ1j7Q5B!2{RLP=Bz2nYy#2xN!=008<)L_t(YiQSjY5riNNg>h%kmO>x) zU?0?AAM`*UslXa&z&*X4m|Z1|k!AMX!XO_n;YS81G)>bc+pZ|3H1POgIk-ko+2Fl5 z1*DXAadU?QY6fRk4vFY%{QDY0a)!0S_cCM69rlybBgs_PE`KsL5TJRUckMC8DzFMj zL~oFE$S0s#Xhk4kM}rZO%Q?GsT~GT#CW~eqM|Iy*V96bq_uj=Ai?#g!eb^UJTNmf_ z^;SE~IcvL~s<;o~lE+;91Txw9fB?kd0CBJhkPj%&(%O6T@@-M8zP803`ba5Kb~SZJ uYX4s<8$t-CZy}3iSvq@L+*LcMxx*LgnQ*t=t>rKP0000Bz literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^GC-`r!3HE5w@NsHsNx`ZCx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjVdC+SA1`#KSu|#eunRU*rFaM>QCKo3BrId1kCw z{DLtcCp{q{;l!%UMXUIiZ@t31fj_Zu*~bAzZmPG z)$o%e?Onsqf)CLZe;-wf_-HBIa+<;F_|a2iMo4$$1=bCWGhBHhgoJ%$X3Lm4Txd5q zy)NFO|LTF);^&O#*zK5~c=u4H%hSXrF(KxPAFLNz3z+tZDgEvfxNyZ><<#^F-6gCN z55yTtD3+&U|nD-FBm|lhlmL0c>=)tWvl{vgILeMY1q{r?f{;6m&(L-U9NwN k7~`M)E$-?aYZtr2FW4TJ>?~yj9smFU07*qoM6N<$f<}yeYybcN literal 605 zcmeAS@N?(olHy`uVBq!ia0vp^GC-`r!3HE5w@NsHsNx`ZCx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjVd?$J50z#KZgP^|QQ91`@|UvTuLMDcQ(qv7yaa zg8vw=$DF1XXZ8e^2S+Tb6!bOMe|!AYx#yq$vfhX8$(OHitT8z)Uz6v#b)8aijRE`o zj77``Ue?5xwtl~z`dsu<{<23b3=8@WKfm;A+swY*iGOUhpX6)whPj--o7=ki;J)l* z+ozduzuC>UbzQ(~ubwW)LmHY|OqOn*0fH~IL_{04{3fJX&X?nMbX9oj9J_ofhe`SK zJ1z?AHB9F_1!g_h6y>>9rm@g<IMo-9D1QH zU=84fhAbKn)CELDNGVl|Lo2k)p#`1i*{oJwF)SC2*1qrN7~N^1r?7R^{w-}aNX;1$ zK}rdT=y=ak6R?(h<>0NbCSXgVhb8{ms^S7(0W*ODjf4RhF+{}UiGrCxfb+Y4P4}N^ y%F1zt#-B@d$0fS1p?8aI+a7kexGHv{;SRq7Bgvgce~=9T0000!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjVdC%hSa%#KZgPbVI%-2LV_6dxu?4uWeASVBp@{ zz_~QtKp}P1e!ym(+~L4`m5un^_Wg+7@%4zxr^) zeb%%)hRyy7HyIPGqD`V6W?AO%bo!O1)x*f3wM+K(qRm(OK1ctt75yaWwXo~O&b6UG zHU&J-G|b}E=PaFTtg|JN*IF$C` wsAdg2f3?)1Id@7kYW+X6Tj$UFv2*`&Z3VA~R~(bd4M8F3>FVdQ&MBb@0Ihw!kpKVy diff --git a/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png b/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png index 23f523d4ac00c8e1dfcece1b528a048ebe95c3ec..6ee264221a0ffa97e19cee234c375260fb770076 100644 GIT binary patch literal 8152 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 literal 7778 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