From 6af5a8eb35e0207cec77ba331c1e33a317fbadd5 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 31 Mar 2022 16:36:26 +0200 Subject: [PATCH] some small fixes, ore rendering with layers --- src/main/java/api/hbm/energy/PowerNet.java | 12 +- .../java/com/hbm/blocks/ILookOverlay.java | 1 + src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../blocks/generic/BlockMotherOfAllOres.java | 109 ++++++++++++ .../hbm/items/machine/ItemChemistryIcon.java | 9 +- .../render/block/RenderBlockMultipass.java | 3 - .../com/hbm/render/model/ModelGasMask.java | 18 +- src/main/java/com/hbm/util/ColorUtil.java | 159 ++++++++++++++++++ .../java/com/hbm/world/feature/OreCave.java | 1 + .../assets/hbm/textures/blocks/ore_cobalt.png | Bin 382 -> 326 bytes .../assets/hbm/textures/blocks/ore_copper.png | Bin 288 -> 229 bytes .../hbm/textures/blocks/ore_random_1.png | Bin 0 -> 190 bytes .../hbm/textures/blocks/ore_random_10.png | Bin 0 -> 269 bytes .../hbm/textures/blocks/ore_random_2.png | Bin 0 -> 234 bytes .../hbm/textures/blocks/ore_random_3.png | Bin 0 -> 153 bytes .../hbm/textures/blocks/ore_random_4.png | Bin 0 -> 211 bytes .../hbm/textures/blocks/ore_random_5.png | Bin 0 -> 257 bytes .../hbm/textures/blocks/ore_random_6.png | Bin 0 -> 213 bytes .../hbm/textures/blocks/ore_random_7.png | Bin 0 -> 168 bytes .../hbm/textures/blocks/ore_random_8.png | Bin 0 -> 234 bytes .../hbm/textures/blocks/ore_random_9.png | Bin 0 -> 250 bytes 21 files changed, 304 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java create mode 100644 src/main/java/com/hbm/util/ColorUtil.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_1.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_10.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_2.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_3.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_4.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_5.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_6.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_7.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_8.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_9.png diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index 12012eb1e..2969e9e4d 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -96,12 +96,18 @@ public class PowerNet implements IPowerNet { return this.valid; } + public long lastCleanup = System.currentTimeMillis(); + @Override public long transferPower(long power) { - this.subscribers.removeIf(x -> - x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid() - ); + if(lastCleanup + 45 < System.currentTimeMillis()) { + this.subscribers.removeIf(x -> + x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid() || !x.isLoaded() + ); + + lastCleanup = System.currentTimeMillis(); + } if(this.subscribers.isEmpty()) return power; diff --git a/src/main/java/com/hbm/blocks/ILookOverlay.java b/src/main/java/com/hbm/blocks/ILookOverlay.java index 47ff64eea..d100ed767 100644 --- a/src/main/java/com/hbm/blocks/ILookOverlay.java +++ b/src/main/java/com/hbm/blocks/ILookOverlay.java @@ -49,6 +49,7 @@ public interface ILookOverlay { } GL11.glDisable(GL11.GL_BLEND); + GL11.glColor3f(1F, 1F, 1F); GL11.glPopMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 5420a428a..4e768e7ed 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -83,6 +83,8 @@ public class ModBlocks { public static Block ore_cinnebar; public static Block ore_coltan; public static Block ore_alexandrite; + + public static Block ore_random; public static Block ore_bedrock_coltan; @@ -1342,6 +1344,8 @@ public class ModBlocks { cluster_depth_titanium = new BlockDepthOre().setBlockName("cluster_depth_titanium").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cluster_depth_titanium"); cluster_depth_tungsten = new BlockDepthOre().setBlockName("cluster_depth_tungsten").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cluster_depth_tungsten"); ore_alexandrite = new BlockDepthOre().setBlockName("ore_alexandrite").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ore_alexandrite"); + + ore_random = new BlockMotherOfAllOres().setBlockName("ore_random").setCreativeTab(MainRegistry.blockTab); depth_brick = new BlockDepth().setBlockName("depth_brick").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":depth_brick"); depth_tiles = new BlockDepth().setBlockName("depth_tiles").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":depth_tiles"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java new file mode 100644 index 000000000..6a093fe80 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java @@ -0,0 +1,109 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiPass { + + public BlockMotherOfAllOres() { + super(Material.rock); + this.blockIcon = Blocks.stone.getIcon(0, 0); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityRandomOre(); + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + return ((TileEntityRandomOre) te).getStack().copy(); + } + + return super.getPickBlock(target, world, x, y, z); + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } + + @Override + public int getPasses() { + return 2; + } + + private IIcon[] overlays = new IIcon[10]; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + for(int i = 0; i < overlays.length; i++) { + overlays[i] = reg.registerIcon(RefStrings.MODID + ":ore_random_" + (i + 1)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + + if(RenderBlockMultipass.currentPass == 0) + return this.blockIcon; + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + TileEntityRandomOre ore = (TileEntityRandomOre) te; + ItemStack item = ore.getStack(); + + if(item != null) { + ComparableStack stack = new ComparableStack(item); + int index = stack.hashCode() % overlays.length; + return overlays[index]; + } + } + + return this.getIcon(side, world.getBlockMetadata(x, y, z)); + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(IBlockAccess world, int x, int y, int z) { + + if(RenderBlockMultipass.currentPass == 0) + return 0xffffff; + + return super.colorMultiplier(world, x, y, z); + } + + public static class TileEntityRandomOre extends TileEntity { + + public ItemStack getStack() { + return new ItemStack(Blocks.dirt); + } + + @Override + public boolean canUpdate() { + return false; + } + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java index 6e67efada..f3e190dc5 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java @@ -13,7 +13,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; public class ItemChemistryIcon extends Item { @@ -59,6 +58,12 @@ public class ItemChemistryIcon extends Item { @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int i) { - return this.icons[ChemplantRecipes.indexMapping.get(i).listing % this.icons.length]; + ChemRecipe rec = ChemplantRecipes.indexMapping.get(i); + + if(rec != null) { + return this.icons[rec.listing % this.icons.length]; + } else { + return ModItems.nothing.getIconFromDamage(i); + } } } diff --git a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java index bd4090f1e..9a3e26d03 100644 --- a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java +++ b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java @@ -66,7 +66,6 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { Tessellator tessellator = Tessellator.instance; - //int meta = world.getBlockMetadata(x, y, z); tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); @@ -82,8 +81,6 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { for(int i = 0; i < passes; i++) { currentPass = i; - //System.out.println(multi.getColorFromPass(world, x, y, z, false)); - //tessellator.setColorOpaque_I(multi.getColorFromPass(world, x, y, z, false)); renderer.renderStandardBlock(block, x, y, z); } diff --git a/src/main/java/com/hbm/render/model/ModelGasMask.java b/src/main/java/com/hbm/render/model/ModelGasMask.java index 3fc9d8bd3..a32833c9b 100644 --- a/src/main/java/com/hbm/render/model/ModelGasMask.java +++ b/src/main/java/com/hbm/render/model/ModelGasMask.java @@ -100,10 +100,20 @@ public class ModelGasMask extends ModelBiped { @Override public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7) { setRotationAngles(par2, par3, par4, par5, par6, par7, par1Entity); - GL11.glPushMatrix(); - GL11.glScalef(1.15F, 1.15F, 1.15F); - this.mask.render(par7); - GL11.glPopMatrix(); + + if(this.isChild) { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * par7, 0.0F); + this.mask.render(par7); + GL11.glPopMatrix(); + } else { + GL11.glPushMatrix(); + GL11.glScalef(1.15F, 1.15F, 1.15F); + this.mask.render(par7); + GL11.glPopMatrix(); + } } protected void convertToChild(ModelRenderer parParent, ModelRenderer parChild) { diff --git a/src/main/java/com/hbm/util/ColorUtil.java b/src/main/java/com/hbm/util/ColorUtil.java new file mode 100644 index 000000000..60779593e --- /dev/null +++ b/src/main/java/com/hbm/util/ColorUtil.java @@ -0,0 +1,159 @@ +package com.hbm.util; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import javax.imageio.ImageIO; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class ColorUtil { + + @SideOnly(Side.CLIENT) + public static BufferedImage getImageFromStack(ItemStack stack) throws IOException { + String iconName = stack.getItem().getIconFromDamage(stack.getItemDamage()).getIconName(); + String domain = "minecraft"; + + if(iconName.contains(":")) { + String[] parts = iconName.split(":"); + domain = parts[0]; + iconName = parts[1]; + } + + ResourceLocation loc = new ResourceLocation(domain, "textures/items/" + iconName + ".png"); + + return ImageIO.read(Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream()); + } + + @SideOnly(Side.CLIENT) + public static int getAverageColorFromStack(ItemStack stack) { + + try { + BufferedImage tex = getImageFromStack(stack); + + int r = 0; + int g = 0; + int b = 0; + int pixels = 0; + + for(int i = 0; i < tex.getWidth(); i++) { + for(int j = 0; j < tex.getHeight(); j++) { + + Color pixel = new Color(tex.getRGB(i, j)); + + if(pixel.getAlpha() == 255) { + r += pixel.getRed(); + g += pixel.getGreen(); + b += pixel.getBlue(); + pixels++; + } + } + } + + int avgR = r / pixels; + int avgG = g / pixels; + int avgB = b / pixels; + + return (r << 16) | (g << 8) | b; + + } catch(Exception ex) { + return 0xFFFFFF; + } + } + + @SideOnly(Side.CLIENT) + public static int getMedianBrightnessColorFromStack(ItemStack stack) { + + try { + BufferedImage tex = getImageFromStack(stack); + + HashMap brightMap = new HashMap(); + List brightnesses = new ArrayList(); + + for(int i = 0; i < tex.getWidth(); i++) { + for(int j = 0; j < tex.getHeight(); j++) { + + Color pixel = new Color(tex.getRGB(i, j)); + int brightness = pixel.getRed() * pixel.getRed() + pixel.getGreen() * pixel.getGreen() + pixel.getBlue() * pixel.getBlue(); + brightnesses.add(brightness); + brightMap.put(brightness, pixel); //overlap possible, but we don't differentiate between colors anyway. + } + } + + Collections.sort(brightnesses); + int median = brightnesses.get(brightnesses.size() / 2); + Color medianColor = brightMap.get(median); + + return medianColor.getRGB(); + + } catch(Exception ex) { + return 0xFFFFFF; + } + } + + /** + * Decides whether a color is considered "colorful", i.e. weeds out colors that are too dark or too close to gray. + * @param hex + * @return + */ + public static boolean isColorColorful(int hex) { + Color color = new Color(hex); + + /*double r = color.getRed(); + double g = color.getBlue(); + double b = color.getGreen(); + + if(r < 50 && g < 50 && b < 50) + return false; + + if(r / g > 1.5) return true; + if(r / b > 1.5) return true; + if(g / r > 1.5) return true; + if(g / b > 1.5) return true; + if(b / r > 1.5) return true; + if(b / g > 1.5) return true;*/ + + float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[0]); + + // saturation brightness + return hsb[1] > 0.25 && hsb[2] > 0.25; + } + + /** + * Raises the highest RGB component to the specified limit, scaling the other components with it. + * @param hex + * @param limit + * @return + */ + public static int amplifyColor(int hex, int limit) { + Color color = new Color(hex); + int r = color.getRed(); + int g = color.getGreen(); + int b = color.getBlue(); + int max = Math.max(r, Math.max(g, b)); + + r = r * limit / max; + g = g * limit / max; + b = b * limit / max; + + return new Color(r, g, b).getRGB(); + } + + /** + * Same as the regular amplifyColor but it uses 255 as the limit. + * @param hex + * @return + */ + public static int amplifyColor(int hex) { + return amplifyColor(hex, 255); + } +} diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java index 26a701d02..0dba4397b 100644 --- a/src/main/java/com/hbm/world/feature/OreCave.java +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -64,6 +64,7 @@ public class OreCave { return this; } + @SuppressWarnings("incomplete-switch") @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png b/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png index 63c77c56f5907b20fcf5b1f0c001ed24a33849e3..2553fad8480e107443760fcf1333db0a14afeca2 100644 GIT binary patch delta 300 zcmV+{0n`5e0>%Q6BYyw{b3#c}2nYxWdzq_*Vt4xr2M$dp_y#5j^kR_v20_Nm7Ji2oiA|LzZQPAPDG- zHCLa)0rCMuHp+UnI--X>kOm+NH|O~k=JPk>F|#pPkye0(?SJ+geE$fZ_X4ff6SUh? zqj5aWp;mivTX4y?VOwlA1IkC0e^Q9Zj0|>I_!}FgZv@v=Ijvx+r5fFYwcYLqCX*91 z8ouFQZb)yzW?rv9;BdG=x4Wbvoz6211}XIWE0TW`V!i&TckW8P*NcpB8On7?|M_Q& zH-}^=&SBxVQe7G9x>TpihC&w7^b7X;U)sA2&9-EO$jpnyJ4Df$d@`h(&E^wkv)B8F zBw>3-Hrxi^iV-5Fiz(j=(zaqK;7gQDF5j*TMf?E;O>EtCMNV)40000M{oII24%(Oc)O~@AO8HbW&?rgJKOy}u1ZfxP?*D~!F1yitE2kfnN$D7 zUvQZE@NesF9&x{WNeMtOVTwr7g}j>`E5*Z4?T&hE@1QwJf`MUyWSsD#t2Z_Q9m?S8 L>gTe~DWM4fCns6q literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFto{fBm3`CgaC9NKJ7^zRYv@T@TjZD?D5S43c&Hoqt zKi_<`*}r_6;MJcJscSf`TH=>9LA`fp>p#+ zDEumQGQL)AyYeEFa_GF@{0}#um3uS2rZS*@?x~9n>kOOYkDL_WoU`_;Ey&59u6{1- HoD!M diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_1.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4734b44ffb26f8eb394fd87ed2d78253ee8bc46e GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfTfhJt$iSd;z9d8vfFWw8bJHh1m;C%>@N0;#ODp=G$+x^TuYH>m;|!M+l?g6P-NN#+r&gG(n#w-yV#=Of=1Lz$ zeuaEGm)2Wx|9f+3Ipg)RsJpK!c6ep3eQGxUM2dWcWvble8>_{m?$$8|`3s)87rt&c P&_4{Gu6{1-oD!M#v=?m^b|r@qBaE6M$nm%jdQgJ=_{YTjnGsJTG189ZJ6T-G@yGywny`7<~G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_4.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_4.png new file mode 100644 index 0000000000000000000000000000000000000000..df4ffe5c16a3383ee2e0d6ff773b7d86f5865d6d GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf9_0HQI70~(SEQ*K-(JQxDI}Yindt}Xhry?EP9O*#L+x@BC8Hgp9_uXqJ?6@#a%pUXO@ GgeCwgSW!#> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_5.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_5.png new file mode 100644 index 0000000000000000000000000000000000000000..34b4c9d9ab69d46330d54f5e194b67a032d6caee GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf{fFB!z3vyk;s>ex zc|!NT^CtI5m7i>#S-ED>RyGEOMeFj`{$2S=$W-Z-3Im7YjB8RsUYCFCbqee{bYt~| zCmCyB%oH{FY+3i!<#5U)4-x+*a}95<_&2e;N9&k{<`kfF@BOy(QhN3O_Rpy7o0iv4 zZVfBt4|x+~UsY5T+HuQB@%fqMxzXQ~y2GEC|6t;0ozkqd=GYsc9~eAc{an^LB{Ts5 Dy)I-9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_6.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_6.png new file mode 100644 index 0000000000000000000000000000000000000000..64be59eba2d8cb99f15fe3d35af1db2acfd66c73 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfTf?TujiUy$BVpPVM8<{@;l@KWFL zeH*s6opEttU{Ffht*$vKKRvi4=uYhNU+*^kGR&%3;Xa9B!L_a+E~DaZ!Hd;}-~NO? zI-eT%>{H65U7u&pn}2j>XKJLwrrBDa@BZy&Z`U^6yz`v#9)>%~>5IRGoc02`i^0>? K&t;ucLK6UQ+f|$Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_7.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9983624756e9f33b30f4a47fd2f16aa447aad97b GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfSg?0xX+ zd0WK7wB|ofNbBeb%1dKl2(?|t#8B{k<$_7~Sr+eH#P#Cw^xNUmy`z8fWI=hMUyXgE|TW&q}mzQv0{nxUpC~CrzRY5Kl%6k^f@maO? z+t!%}?=mtd1$C|3v^A{h%{zgKLWcqc773?EhhKJk5^q@csb%(Dftc&9C-yy)Tm0?K zMdz{zj{Rr hDLHZS{pmS>8RYw~oJtFsBLs9TgQu&X%Q~loCIBBJVeS9` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_9.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_9.png new file mode 100644 index 0000000000000000000000000000000000000000..78fb424b2166c265b5c041ea3192b69bc3ce04b8 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf