From 8790e4fa3fbe35ff19f93f86cd05896b898b6b5c Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 12 Feb 2024 17:28:07 +1100 Subject: [PATCH] Add off variations to lights, activated by applying power (like redstone torches) --- src/main/java/com/hbm/blocks/ModBlocks.java | 15 ++- .../hbm/blocks/generic/ReinforcedLamp.java | 4 +- .../com/hbm/blocks/machine/Spotlight.java | 87 +++++++++++++++++- .../hbm/blocks/machine/SpotlightModular.java | 4 +- src/main/java/com/hbm/main/NEIConfig.java | 3 + .../assets/hbm/textures/blocks/cage_lamp.png | Bin 2178 -> 4858 bytes .../hbm/textures/blocks/cage_lamp_off.png | Bin 0 -> 4994 bytes .../hbm/textures/blocks/flood_lamp_off.png | Bin 0 -> 4921 bytes .../textures/blocks/fluorescent_lamp_off.png | Bin 0 -> 4650 bytes 9 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/cage_lamp_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/flood_lamp_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluorescent_lamp_off.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index b4d5d29e6..638c667a9 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -336,8 +336,11 @@ public class ModBlocks { public static Block lantern_behemoth; public static Block spotlight_incandescent; + public static Block spotlight_incandescent_off; public static Block spotlight_fluoro; + public static Block spotlight_fluoro_off; public static Block spotlight_halogen; + public static Block spotlight_halogen_off; public static Block spotlight_beam; public static Block reinforced_stone; @@ -1565,9 +1568,12 @@ public class ModBlocks { lantern = new BlockLantern().setBlockName("lantern").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); lantern_behemoth = new BlockLanternBehemoth().setBlockName("lantern_behemoth").setStepSound(Block.soundTypeMetal).setCreativeTab(null).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_rust"); - spotlight_incandescent = new Spotlight(Material.iron, 2, LightType.INCANDESCENT).setBlockName("spotlight_incandescent").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cage_lamp"); - spotlight_fluoro = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT).setBlockName("spotlight_fluoro").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp"); - spotlight_halogen = new Spotlight(Material.iron, 32, LightType.HALOGEN).setBlockName("spotlight_halogen").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":flood_lamp"); + spotlight_incandescent = new Spotlight(Material.iron, 2, LightType.INCANDESCENT, true).setBlockName("spotlight_incandescent").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cage_lamp"); + spotlight_incandescent_off = new Spotlight(Material.iron, 2, LightType.INCANDESCENT, false).setBlockName("spotlight_incandescent_off").setBlockTextureName(RefStrings.MODID + ":cage_lamp_off"); + spotlight_fluoro = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT, true).setBlockName("spotlight_fluoro").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp"); + spotlight_fluoro_off = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT, false).setBlockName("spotlight_fluoro_off").setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp_off"); + spotlight_halogen = new Spotlight(Material.iron, 32, LightType.HALOGEN, true).setBlockName("spotlight_halogen").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":flood_lamp"); + spotlight_halogen_off = new Spotlight(Material.iron, 32, LightType.HALOGEN, false).setBlockName("spotlight_halogen_off").setBlockTextureName(RefStrings.MODID + ":flood_lamp_off"); spotlight_beam = new SpotlightBeam().setBlockName("spotlight_beam"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); @@ -2749,8 +2755,11 @@ public class ModBlocks { GameRegistry.registerBlock(lantern, lantern.getUnlocalizedName()); GameRegistry.registerBlock(lantern_behemoth, lantern_behemoth.getUnlocalizedName()); GameRegistry.registerBlock(spotlight_incandescent, spotlight_incandescent.getUnlocalizedName()); + GameRegistry.registerBlock(spotlight_incandescent_off, spotlight_incandescent_off.getUnlocalizedName()); GameRegistry.registerBlock(spotlight_fluoro, spotlight_fluoro.getUnlocalizedName()); + GameRegistry.registerBlock(spotlight_fluoro_off, spotlight_fluoro_off.getUnlocalizedName()); GameRegistry.registerBlock(spotlight_halogen, spotlight_halogen.getUnlocalizedName()); + GameRegistry.registerBlock(spotlight_halogen_off, spotlight_halogen_off.getUnlocalizedName()); GameRegistry.registerBlock(spotlight_beam, spotlight_beam.getUnlocalizedName()); //Reinforced Blocks diff --git a/src/main/java/com/hbm/blocks/generic/ReinforcedLamp.java b/src/main/java/com/hbm/blocks/generic/ReinforcedLamp.java index b2de460b3..a3a7819b6 100644 --- a/src/main/java/com/hbm/blocks/generic/ReinforcedLamp.java +++ b/src/main/java/com/hbm/blocks/generic/ReinforcedLamp.java @@ -77,7 +77,7 @@ public class ReinforcedLamp extends Block { return new ItemStack(getOff()); } - private Block getOff() { + protected Block getOff() { if(this == ModBlocks.reinforced_lamp_on) return ModBlocks.reinforced_lamp_off; @@ -89,7 +89,7 @@ public class ReinforcedLamp extends Block { return this; } - private Block getOn() { + protected Block getOn() { if(this == ModBlocks.reinforced_lamp_off) return ModBlocks.reinforced_lamp_on; diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index f722c7ff4..1a5bf2fed 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -1,13 +1,20 @@ package com.hbm.blocks.machine; import com.hbm.blocks.ModBlocks; + +import java.util.Random; + import com.hbm.blocks.BlockEnums.LightType; import com.hbm.main.ResourceManager; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -16,15 +23,22 @@ import net.minecraftforge.common.util.ForgeDirection; public class Spotlight extends Block { + // I'd be extending the ReinforcedLamp class if it wasn't for the inverted behaviour of these specific lights + // I want these blocks to be eminently useful, so removing the need for redstone by default is desired, + // these act more like redstone torches, in that applying a signal turns them off + public boolean isOn; + public int beamLength; public LightType type; - public Spotlight(Material mat, int beamLength, LightType type) { + public Spotlight(Material mat, int beamLength, LightType type, boolean isOn) { super(mat); - setLightLevel(1.0F); - + this.beamLength = beamLength; this.type = type; + this.isOn = isOn; + + if (isOn) setLightLevel(1.0F); } public static int renderID = RenderingRegistry.getNextAvailableRenderId(); @@ -104,9 +118,25 @@ public class Spotlight extends Block { @Override public void onBlockAdded(World world, int x, int y, int z) { if (world.isRemote) return; + + if (updatePower(world, x, y, z)) return; + updateBeam(world, x, y, z); } + private boolean updatePower(World world, int x, int y, int z) { + boolean isPowered = world.isBlockIndirectlyGettingPowered(x, y, z); + if (isOn && isPowered) { + world.scheduleBlockUpdate(x, y, z, this, 4); + return true; + } else if (!isOn && !isPowered) { + world.setBlock(x, y, z, getOn(), world.getBlockMetadata(x, y, z), 2); + return true; + } + + return false; + } + @Override public void breakBlock(World world, int x, int y, int z, Block block, int metadata) { ForgeDirection dir = getDirection(metadata); @@ -117,6 +147,15 @@ public class Spotlight extends Block { unpropagateBeam(world, x, y, z, dir); } + @Override + public void updateTick(World world, int x, int y, int z, Random p_149674_5_) { + if (world.isRemote) return; + + if (isOn && world.isBlockIndirectlyGettingPowered(x, y, z)) { + world.setBlock(x, y, z, getOff(), world.getBlockMetadata(x, y, z), 2); + } + } + // Repropagate the beam if we've become unblocked @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block neighborBlock) { @@ -131,6 +170,8 @@ public class Spotlight extends Block { return; } + if (updatePower(world, x, y, z)) return; + updateBeam(world, x, y, z); } @@ -161,6 +202,8 @@ public class Spotlight extends Block { } private void updateBeam(World world, int x, int y, int z) { + if (!isOn) return; + ForgeDirection dir = getDirection(world, x, y, z); propagateBeam(world, x, y, z, dir, beamLength); } @@ -174,6 +217,22 @@ public class Spotlight extends Block { return ForgeDirection.getOrientation(metadata >> 1); } + @Override + public Item getItemDropped(int i, Random r, int j) { + return Item.getItemFromBlock(getOn()); + } + + @Override + @SideOnly(Side.CLIENT) + public Item getItem(World world, int x, int y, int z) { + return Item.getItemFromBlock(getOn()); + } + + @Override + protected ItemStack createStackedBlock(int e) { + return new ItemStack(getOn()); + } + // Recursively add beam blocks, updating any that already exist with new incoming light directions public static void propagateBeam(World world, int x, int y, int z, ForgeDirection dir, int distance) { distance--; @@ -230,5 +289,27 @@ public class Spotlight extends Block { backPropagate(world, x, y, z, dir); } + + protected Block getOff() { + if(this == ModBlocks.spotlight_incandescent) + return ModBlocks.spotlight_incandescent_off; + if(this == ModBlocks.spotlight_fluoro) + return ModBlocks.spotlight_fluoro_off; + if(this == ModBlocks.spotlight_halogen) + return ModBlocks.spotlight_halogen_off; + + return this; + } + + protected Block getOn() { + if(this == ModBlocks.spotlight_incandescent_off) + return ModBlocks.spotlight_incandescent; + if(this == ModBlocks.spotlight_fluoro_off) + return ModBlocks.spotlight_fluoro; + if(this == ModBlocks.spotlight_halogen_off) + return ModBlocks.spotlight_halogen; + + return this; + } } diff --git a/src/main/java/com/hbm/blocks/machine/SpotlightModular.java b/src/main/java/com/hbm/blocks/machine/SpotlightModular.java index c5244d242..5a0cddc2b 100644 --- a/src/main/java/com/hbm/blocks/machine/SpotlightModular.java +++ b/src/main/java/com/hbm/blocks/machine/SpotlightModular.java @@ -7,8 +7,8 @@ import net.minecraft.world.IBlockAccess; public class SpotlightModular extends Spotlight { - public SpotlightModular(Material mat, int beamLength, LightType type) { - super(mat, beamLength, type); + public SpotlightModular(Material mat, int beamLength, LightType type, boolean isOn) { + super(mat, beamLength, type, isOn); } @Override diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 45c3fdb6e..8ee671107 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -131,6 +131,9 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.pink_double_slab)); API.hideItem(new ItemStack(ModBlocks.pink_stairs)); + API.hideItem(new ItemStack(ModBlocks.spotlight_incandescent_off)); + API.hideItem(new ItemStack(ModBlocks.spotlight_fluoro_off)); + API.hideItem(new ItemStack(ModBlocks.spotlight_halogen_off)); API.hideItem(new ItemStack(ModBlocks.spotlight_beam)); API.registerHighlightIdentifier(ModBlocks.ore_random, new IHighlightHandler() { diff --git a/src/main/resources/assets/hbm/textures/blocks/cage_lamp.png b/src/main/resources/assets/hbm/textures/blocks/cage_lamp.png index 8932b2ffabe6a1915ca53412d5b08aaf1d05eed6..f78cb205e71fa2b16e538db58c73169205e3fad2 100644 GIT binary patch literal 4858 zcmeHLX;f3!7QVp<78@P{ML~)o&R~+8d5|!eU=lGH21NwKo0}WBNCuKX0;Qs&h^Pp* zh!Y?@qdc@K&!YI8pHr>YB2M6lV(auOT3WS2wI=};*Xvquxz_7Hv)0YM_ndEkd++b; zeO6AEDx;(%S6^2Mf=F_iBnI5w?bjeD@LgJ##s#-)xp6biF^Gk1FzPjU21YjL7%(zs z#WfIQy`oh{yB#GD`u(ogM5l$*`6bEw)V$UwF2#}B$&?W5bNBY1{V9(Pe0nlJ0Be_OOHCcSX?veMv!*7!-Ld#4rSd>dXB zee4&oDc~5p$jeE)d~t+rwzPFxlHvrxQu{ld#%)U6uvOdHy6tbCl^ceA$GRJRbRN_2 zaHEf6#+oMI?3S*BTV`)B%2HLI4Q$m+U8nI^EnsW(&s;85c57Zy^L+CNDZ5j7^vo%t z5JXsni^WR0So}IqkllvQ%S5uHVSdL`&ZkENF3fh%{6<;%pIS4ylsk(UNctX5Oe7JiLl$mXaF_(F~s_>e1%xbu{((=sT(h1chVD&yl zgnEt7eM!=pAL5U<2N4%FFAE@!(mXhIM&(`A@z6iy;Ejl!)z9{Zo}3>8`?Py5MW^y6 z+$P;_Q$*g~Kg~~r$pb>hRNdI#j-JJdnYsxNeROL? zR?m3jsXO)a%TNNRuGBB|`G}rJmnK9_+bgf(H+QM7j_3$83{B%?ba%JzP8>V`l}}TP z@Z~JeHQl2QoI6L69&YCvGOwSzBWgFg49jU5EjEq{Rn*KR-uV9B`kxO!rZyk?@#&=- zC+`m^wQXOmpI;!JQ!8nE=->J1;iI2!vVM9w4;s^AEFvwjeGBR_8wYhaQ!!PD>a{dP ztyf_*tJVMt5`uz5tp)_0iQm>D5kwHZ2-&?=%hc!l8EK1`>O9T4+e5oM-ANfzsk7@19D(_m_Z z70+f;LR`tgMzuy5BbnSs0p3KEG_%5Zv$hCm>o!%RApNd*Y1DMx2U ztW=$8q@ALdLxP!5BW^I`dL7x$iKz5hW)Xz~=E<+)(;5_tH}pDFp9(+^x)m|d88n!# z)zbT0n9LE`fTS;=KeaH$f%c`xU?zQ*5yc|1F`ap2e+o7F#@>)+%y6WmM(J1vrUg(F z@XC0{rBtp^zOk@Nkcw*!4l5w`J4iFGc`MdCvDs%F>GTf-n7`qD2mLyC2N<9f3ZX=g zX4%7&OGFgAf1z5B;%cGek-<~5*c_gkig1}ImCa|sQ~?J?sC{Ni9h65fI%45Q64TH*oH3*=!&f83JRXD3hq+7^i^1l+ z1w{eHrNDcEKUCNMO)l5Bhbc@4egRp)QR(27 zKms^sIjbV2632lH`c1qqA3S|zkR_NPXt0OJ!%yLD9%RQ%$oxPlom!FG( zAg2{_NqF42@29Ui9pxDf6}~e4c*a(NZ&_S3j7lsX8spWai9#RmQ+`cY; z&UsRhhX=WkxV&&@ccuRaw!x+LqIKB@;=v zOsh^~mK*u&KI48>U)*6hwWDjxuP)-xm)!grMb}pS^6BP)J%?^0i49G^c5MpNXsTwd zZquEfVoN_hay52maCutX%`3Um@ry5n^P&0Slf$;-O#DR0Ej813Md5lk`s@pyOJ#xO zqhN?6gM2r+5nVnT4#{X0)4fIyayl{Wu0LArzTjc*7hgOZ$I)*qb)UUrUt_?yHWU=(<>&7~>Xt{JycHCrU-Lkmy&#U9ue3^X8(;50urXbCE>SNg7$P86c|%@sphm}{?gb#+uGf0Vp(fd8BU zA@1z0L;pROu(4+6*}bU=W6)x}@baanS;<{ZJ7722H>QmwvZ_rZC=~wk9HSN8cyO3x&lqwd=Z`XygKxGwg1+XlNTKS O9mpf1B-I}FDF literal 2178 zcmds2jaL&_7Jmtd1OyS0wzvyvnpT7kosVQPiJxEsq$M;!u&7mhlbL}~NFtd6Ztc=4 zDpstec2W6g(Xw^HVnND>+S=W^#nttrRoJ7jqDNf?TUL>}>nT?E4cgG2J!k)bP3FzL zbAR{#=FYpnNj6zilY#;w0ssI(=44|!vLVv)_e1BX(FYKjgM5}*uvkD0@@Wz$H3pnC z5QGw)Np#S__jx!7rY0=>$tIaCRwWrn-~jl^NFYabVQBfwLV*vmGV}$q2ry~f2jEw- znO|PhU*ODdZ^J$xBc$FjQKyGZ%h)4+STSW{YX^pgd3>9qogqlhmf?<&>-&L65hISqh zPcnEL0*w-Aw%QgMj4u1D1&G>g1UZfZw}Ern9h_m@B?yLwG^xWhXy-8v&hQwkvy&L) zSuG^=B-Gn=uU@WQf%xWn`OHp_2%UBw@s$*~;~a<#a+HpswGd;qdJ5C%SPo+a9l8`q z!H$*=*V9cc`#=9hU+95z98Q@3v;HJL4)Ng}Nz;s$!*IQh#WWO0VW?3S!zoDftN>}d zR?9fsZy~+_sV`|~4DnVoAbUSqIEtb(yisdD6a`md0eH#bd^DvQIbNKuKZVq{V!pM;eSIyEsbYaHtj`JXXTT_t?UVkb@#LLXig( zBDN9KLlMUkgaO9`hPwWO%4ScLxj2Wg`hOSY<{g@aipHhj5luy+0oun!;(Rir|o5NIi?O9A(F74dS37$ujU~*|=S=MJm8C5^_jlEW=@Xfze|+ z+>Y)@Q;=cEl##L|)a0y*COwbj9-o6W3zCpx$6t13^rHdJKIEQ@UMP?}QBs`CqtT$B z4h$zToUsvl13E}@j?x>{+X&jAp$!x@5hMuje1@YAqshqsZ8pZ+m}vzWmKUd|h0Swa zv*dhK*KxKgy&~M_Zm&uqk2lH#dmdbRtM0yEr~1ayQXj?4#cK7!DVstToC(^LnWb#? zKbMd(X=&f7PtT4VZVY{F;KYg7r~}vk?zuScNOyPl%K_!dd-lOs#`bnTwsocT$noQW z$?u9ILAPXaK08bo)ox2h+TPyEl*8led)BRreybv{ckL^6s$y$*vpBWm@Ks#Xv+Pr)Edj&1xZ}xoUIzkgvdivpw(h$NmYoeZ22*e&?m8QZBHvw$K0TvDpo| znsWEKt+_qQH=?dLD6^xV3RNg8%h$#~1%8*<@OglWId`usC3aPLIJacO73Nayk^T8g zc}-1l-Iguid^58_S&}wQ9I%W{Sv)*NMg`yh{#Y!d&Mw;>ovVq6d^174%L+zE+is1S z8hz)bn!+Qh)~DaEw_IYHH@rc0&&3NA->0-5f7%$jy?%)0GSe5X>|2{zzcB%C`n76C zK3CFG`TX*K96WX5JipNh$K9jVpFKVT{6(m+2cDzI}Px z@ZCY<-AcV>Py1)L($#VN1#vZ+aU*9 zr^g(-`R$>Kp&=-WiS-V6xm}?SD{l&Jx7M5e$uqmhG6@5G=EkyT9*nhi?Rc~4hh(8m z<*D)i^PP2PmPIC4JooswxBrzsKRd5+epKuSnQ43fcFg)DjemV54r`wC)s^f$U+!8_ zZoW6YqP-Mf(P+Ey-Sy>HM;8qB42S=?Gv&^zs?_Z5Z66eFP!m1JXGMqK{(~(qIcQ)c z@&5MBr%%ky*%~=;=R{ja75uT&MJ}l_?tdY2BsFDf_25Tir6V)7V|Z)%`4;K5`v3Sl O24+*LabLp9wf_N$62;>H diff --git a/src/main/resources/assets/hbm/textures/blocks/cage_lamp_off.png b/src/main/resources/assets/hbm/textures/blocks/cage_lamp_off.png new file mode 100644 index 0000000000000000000000000000000000000000..c2bf59718c412e5841020b277dc6cdeb167b591a GIT binary patch literal 4994 zcmeHKYfuzd7H*J$K~YdlK#7c_;sbl8d*0nLAkLu7>L?qB_Xi)vB>I#ykzbBr+sF|y%cI8pb_)-JkVqUxDW6vrc;!;0!9xlb+q#t%Kxu#>vu=!$0+YfBMt=$>vCQ>yVc@-m#^2^N*Wt zEhBAB(C!6vp>L*Bq29Mnz3{?MF=aJ@E^9Au809iXUw{4r`Ci_=Mv8wGc1G>V*?xLjGb(sop5$SA>E?wwi&F0`w9K#BPK^FMZ``1v z8}bF&C$?pIWZ6Ga>?s)j(*P`I*rgA5UR{=Zxas^7pNa8-z6YxORL(QP`R{m%>I?qn zK44C)G;-z_Oi1H@{FB-ySkB)sOxsF1Nej04h5XmQt?}BVS+kF6b}KG7lQ;eEO)cQZ1r2 ztLS(pe1(OcyJA)pwIYGSbo`KD_aHkC2n;k!@a%>}qZPL+`3_zjJafZBKF2m0IEv!+XeT9*<)s$qR=&)qk$d2wwp`*I(%}JI- zM>sl4NGH+;0JVZu(OyeV*JvZUEjS6{7=zhi1;p-!WEuTyv3mK&%{ap8=?F0I=Iw=k z6}tlrP+BdnHc?5Odm6Qp&#jN^OcbNT9gnD7CzeR%I+&1&C|IIE5g3zF1gs!Xg@H*wZVHN(ZQ*p=duK+Cn`tea#Vpy zP?16=mWf`2=Ft`_s6~zyMFe7rV}?r%4#EM_5?rMM0>?Or23J{Vf;Cy9Or}I7pL2o7 zS$0orK||>XmQWKc4M-7@1V=$_a`R_hz@6^sJ4r(4lcaN1zobP={8$@m;B! z&>L@yr@1@;$zVhTcS(leh>S0M`{9XX7)GNs38RPwCNV zhlIyf#H;XvgxrSsDw#pT|4DZzpvMjhWa%6OJ2Tkmh21-SmtNeS`WAm(W%d?V0Mvbp zypg_ra`nmeMhd(UxUahUzaAP-AKgeWaZ13s-4<1gVKFMy(fsPHn$cOPC68{ zzhB0hmX;R1E9Ad=a%%g%*$|Z0AY1j~iI>-s%7F=RX0c$yvAF@}pHQvh0jC$7CSd!_vyYT9b2X%f` zd$T4LeOWm8vFG0lpH$yDy#n@T9ji{w%&FVA>rQdN zUS4dNL^xx@G5_L|btfVxdTsy6`ooUWGy9q+7Oe~4n7cjAZE7G^9lNc6lvW-2M6Y*k zj$C%$)!lVjAs<2-2M4c>6kW7FzWr=f!Qt(`e9t-c$9-g%CRYTzEJ?WZXkh{>omP6y z+iUR}XP#F<{r*w43!NJk28zQ_5Sj9Qmv;02x b3A?|#saf~0wIx~mxSG?1%~Btjx-|VaerrM< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/flood_lamp_off.png b/src/main/resources/assets/hbm/textures/blocks/flood_lamp_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b79c23c1d8b78c5b2c5233aa5373c6d55df33362 GIT binary patch literal 4921 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 Y=Vn)id-=_66RiUx62=HBC(O$JFUW5~qW}N^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/fluorescent_lamp_off.png b/src/main/resources/assets/hbm/textures/blocks/fluorescent_lamp_off.png new file mode 100644 index 0000000000000000000000000000000000000000..edc0193a7950e9f705e8824e285cafd1902279fb GIT binary patch literal 4650 zcmeHKc~BH*79SAN;9^klKv9}zl#SAJpDhFG%m@=08G((UxTdGO2O8#breOxMF+@=@ zDu=G3#uzZMmNlhWHD2+;0|*}RKwOWYgLvVAMn$5c?$-k%)TV07s?C2))l7f=eeeC= zd%t(oe2aBcqkVlw_^?#(su?be+);@iHIGM6=P3ErDO(x5!rvv>*tsCyU zrs@-CkVnf3dPVIB|9{uk^R`#BcNTy43EJnt4MPei(Y3#v#q!9fluDgOseBU;h+^HR zC5o6M6N9Q|*JY^3&CB+i^ONqYdmG@wjbEt$rMu*_8C{+Fysvh|@_=E{hjzGJHTwEP zRVmZ^O`qh~&YF{LO`uB#zb*}!anx!3rO44X+VOx@o{>XyQq!5wJ$!%Kx#rF z!`6##&pTR_S~_cPQ>rc5wFV3Qa(&o9|0NqatM;y5>ATXoP`06B#Ek*+(jh<3Tvwm* z)s6?XvxkpMA0N1-E=cJa8w2+pB)C&i<}+a03~@r-w^US1V{lgc2e#VloAOF<4{=3t zP}Fb1?JeiSr^fHml*>*()?W^8nrI!CE;hb+abf4ou)NoSyU(JpX85mu!QOx73>;nQ zl33?7oVl)W+4>F7IXgyaV@GMrlfAB-y8Y#&%7@75gEya^zf#lOr+DL*RhGQ@%8xgw zF5Vsepyh7M{j0+JujaDGp0ySDF4}ku)Lk|O>ML0rhvF6!2O}(clH)X4LE*7j5m8Pn zhG&vAq$krTvjTpw_aF>WgaV!}*7CGgC7DjeFrW#lDV-4D zO#!FVv=!xY9S#S_A>>$WXR3A8CU zfwWt)Y&faTCe3tccL)OS(zj;WjP7s6A-lntNb1&qcvJxmj**Y8fCJ&wE)>Y zBx%aYDx;p~YyKs9*zlq%~45YMLRAs@l8228$`T~0#%6_yL-hz5dcakmP$ktnHa$_f&>5(JtD(#Il?C; zGM-ea=0Nrf`0L@Jhw-U@w0+U%ef8B{)xBkVX~5`%(p0JRuXsQ|#O z0ir>bHWH&Pwj_(isDK%#AV#z6SPL48z-UZ`(If!n2}CGQfbs=Nd@0J8p<>y1J|E?E zleZ9*A?JTdGwlOKbR<27vIF}$?yZiVN+joWymh=9DR(nLkh?8V4DSfRj%AaC+fRVi zafGL1<}?z_kIsU9vrqj_F%TGEE&+*0q!L_=h$Lbh(eq_`1n2V!14)R*27>H~Znqd{ z2WBHDr2!rRSD--MTtR>COw|WHz`31Mei< zTV4M*x_sVVrbsjR2jl=(rMb_e!oW4lTOS*(a$mSu&y;&V1FQF}F)4NyYrtUU>v6VW zZadiQM{Bg|ez!gUk5NUp+u%E@Ow3lSTcZL2z>sGVwz7(8fw+ zn05Y%{5V%oN`e37*m1RS&%f7fo&T4V$IXwU!&mqQEVe;e@Jx8|<>1g=yQ1U~!KcT= zu{WPTA9bj*F(l`gpDX_A3c7H0Onlq^75)9E4dvIK4I8r^_SpRJ)lJX5oR;R3Hy56` z-u$fOnMio*A7)=}giIJ%(`UJCCiLEuwok4WS_rtqm=t>?Lmh(gzxbW zWrwux%jtW6NGY{%Y{sGb)*+>(r7vF{=A?eucrs(ztAAERzFrVrvh;jWpHspf#;(Y;VJ_ciR-3PqJ$po_^lYGU(g|W2A0j`TTIA$*&6I z99v7R-JLsIH+1=wkGAJ#e&M}-^pwK7bKh}X{X^FX3PZ2|^s;T{jImf^<``i~RYr2+ z-MHfmN!T-G)V(rQz>LiNN-@PQOkU-gp$J*53-{(+G6mdxABy+L9J$qaiYW<=da7#6 I