From 205742eda571c6d9f6c30f1f54dfd0e116ee47b9 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 27 Jun 2024 22:19:57 +0200 Subject: [PATCH] the almighty perlin noise --- .../java/com/hbm/crafting/ToolRecipes.java | 1 + .../inventory/recipes/ArcFurnaceRecipes.java | 8 +-- src/main/java/com/hbm/items/ModItems.java | 9 ++- .../hbm/items/special/ItemBedrockOreBase.java | 57 ++++++++++++++++++ .../hbm/items/special/ItemBedrockOreNew.java | 5 ++ .../hbm/items/tool/ItemOreDensityScanner.java | 42 +++++++++++++ .../java/com/hbm/main/ModEventHandler.java | 10 +++ .../machine/TileEntityMachineExcavator.java | 5 ++ .../assets/hbm/textures/items/bedrock_ore.png | Bin 2968 -> 3125 bytes .../hbm/textures/items/bedrock_ore_new.png | Bin 0 -> 552 bytes .../textures/items/bedrock_ore_new_base.png | Bin 0 -> 310 bytes .../textures/items/bedrock_ore_new_blank.png | Bin 0 -> 307 bytes .../textures/items/ore_density_scanner.png | Bin 0 -> 345 bytes 13 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/hbm/items/special/ItemBedrockOreBase.java create mode 100644 src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_new.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_new_base.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_new_blank.png create mode 100644 src/main/resources/assets/hbm/textures/items/ore_density_scanner.png diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 9b9f95a4d..28652267a 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -131,6 +131,7 @@ public class ToolRecipes { CraftingManager.addShapelessAuto(new ItemStack(ModBlocks.geiger), new Object[] { ModItems.geiger_counter }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.digamma_diagnostic), new Object[] { ModItems.geiger_counter, PO210.billet(), ASBESTOS.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pollution_detector, 1), new Object[] { "SFS", "SCS", " S ", 'S', STEEL.plate(), 'F', ModItems.filter_coal, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.ore_density_scanner, 1), new Object[] { "VVV", "CSC", "GGG", " S ", 'V', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_CHASSIS), 'G', GOLD.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.defuser, 1), new Object[] { " PS", "P P", " P ", 'P', ANY_PLASTIC.ingot(), 'S', STEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.coltan_tool, 1), new Object[] { "ACA", "CXC", "ACA", 'A', ALLOY.ingot(), 'C', CINNABAR.crystal(), 'X', Items.compass }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.reacher, 1), new Object[] { "BIB", "P P", "B B", 'B', W.bolt(), 'I', W.ingot(), 'P', ANY_RUBBER.ingot() }); diff --git a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java index 80db4da72..e99642cfa 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java @@ -57,10 +57,10 @@ public class ArcFurnaceRecipes extends SerializableRecipe { for(BedrockOreType type : BedrockOreType.values()) { recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_BYPRODUCT, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type, 2))); recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ROASTED, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type, 3))); - recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_BYPRODUCT, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type, 2))); - recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ROASTED, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type, 3))); - recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_BYPRODUCT, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type, 2))); - recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ROASTED, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type, 3))); + recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_BYPRODUCT, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ARC, type, 2))); + recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ROASTED, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ARC, type, 3))); + recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_BYPRODUCT, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ARC, type, 2))); + recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ROASTED, type)), new ArcFurnaceRecipe().solid(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ARC, type, 3))); recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_FIRST, type)), new ArcFurnaceRecipe().fluidNull(ItemBedrockOreNew.toFluid(type.primary1, MaterialShapes.INGOT.q(5)), ItemBedrockOreNew.toFluid(type.primary2, MaterialShapes.INGOT.q(2)))); recipes.put(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_SECOND, type)), new ArcFurnaceRecipe().fluidNull(ItemBedrockOreNew.toFluid(type.primary1, MaterialShapes.INGOT.q(2)), ItemBedrockOreNew.toFluid(type.primary2, MaterialShapes.INGOT.q(5)))); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 95cf47526..f58d01323 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -213,6 +213,7 @@ public class ModItems { public static Item ore_seared; //public static Item ore_radcleaned; public static Item ore_enriched; //final stage + public static Item bedrock_ore_base; public static Item bedrock_ore; public static Item billet_uranium; @@ -1262,6 +1263,7 @@ public class ModItems { public static Item geiger_counter; public static Item digamma_diagnostic; public static Item pollution_detector; + public static Item ore_density_scanner; public static Item survey_scanner; public static Item mirror_tool; public static Item rbmk_tool; @@ -2721,7 +2723,8 @@ public class ModItems { ore_seared = new ItemBedrockOre().setUnlocalizedName("ore_seared").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_seared"); //ore_radcleaned = new ItemBedrockOre().setUnlocalizedName("ore_radcleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_radcleaned"); ore_enriched = new ItemBedrockOre().setUnlocalizedName("ore_enriched").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_enriched"); - bedrock_ore = new ItemBedrockOreNew().setUnlocalizedName("bedrock_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_base"); + bedrock_ore_base = new ItemBedrockOreBase().setUnlocalizedName("bedrock_ore_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); + bedrock_ore = new ItemBedrockOreNew().setUnlocalizedName("bedrock_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); ingot_lanthanium = new ItemCustomLore().setUnlocalizedName("ingot_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_lanthanium"); ingot_actinium = new ItemCustomLore().setUnlocalizedName("ingot_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_actinium"); @@ -4602,6 +4605,7 @@ public class ModItems { geiger_counter = new ItemGeigerCounter().setUnlocalizedName("geiger_counter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":geiger_counter"); digamma_diagnostic = new ItemDigammaDiagnostic().setUnlocalizedName("digamma_diagnostic").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":digamma_diagnostic"); pollution_detector = new ItemPollutionDetector().setUnlocalizedName("pollution_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pollution_detector"); + ore_density_scanner = new ItemOreDensityScanner().setUnlocalizedName("ore_density_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ore_density_scanner"); survey_scanner = new ItemSurveyScanner().setUnlocalizedName("survey_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":survey_scanner"); mirror_tool = new ItemMirrorTool().setUnlocalizedName("mirror_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mirror_tool"); rbmk_tool = new ItemRBMKTool().setUnlocalizedName("rbmk_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rbmk_tool"); @@ -5939,9 +5943,9 @@ public class ModItems { GameRegistry.registerItem(ore_nitrocrystalline, ore_nitrocrystalline.getUnlocalizedName()); GameRegistry.registerItem(ore_deepcleaned, ore_deepcleaned.getUnlocalizedName()); GameRegistry.registerItem(ore_seared, ore_seared.getUnlocalizedName()); - //GameRegistry.registerItem(ore_radcleaned, ore_radcleaned.getUnlocalizedName()); GameRegistry.registerItem(ore_enriched, ore_enriched.getUnlocalizedName()); GameRegistry.registerItem(ore_byproduct, ore_byproduct.getUnlocalizedName()); + GameRegistry.registerItem(bedrock_ore_base, bedrock_ore_base.getUnlocalizedName()); GameRegistry.registerItem(bedrock_ore, bedrock_ore.getUnlocalizedName()); //Crystals @@ -6845,6 +6849,7 @@ public class ModItems { GameRegistry.registerItem(linker, linker.getUnlocalizedName()); GameRegistry.registerItem(reactor_sensor, reactor_sensor.getUnlocalizedName()); GameRegistry.registerItem(oil_detector, oil_detector.getUnlocalizedName()); + GameRegistry.registerItem(ore_density_scanner, ore_density_scanner.getUnlocalizedName()); GameRegistry.registerItem(survey_scanner, survey_scanner.getUnlocalizedName()); GameRegistry.registerItem(mirror_tool, mirror_tool.getUnlocalizedName()); GameRegistry.registerItem(rbmk_tool, rbmk_tool.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemBedrockOreBase.java b/src/main/java/com/hbm/items/special/ItemBedrockOreBase.java new file mode 100644 index 000000000..a20220d8e --- /dev/null +++ b/src/main/java/com/hbm/items/special/ItemBedrockOreBase.java @@ -0,0 +1,57 @@ +package com.hbm.items.special; + +import java.util.List; +import java.util.Random; + +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; +import com.hbm.items.tool.ItemOreDensityScanner; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.StatCollector; +import net.minecraft.world.gen.NoiseGeneratorPerlin; + +public class ItemBedrockOreBase extends Item { + + public static double getOreAmount(ItemStack stack, BedrockOreType type) { + if(!stack.hasTagCompound()) return 0; + NBTTagCompound data = stack.getTagCompound(); + return data.getDouble(type.suffix); + } + + public static void setOreAmount(ItemStack stack, int x, int z) { + if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + NBTTagCompound data = stack.getTagCompound(); + + for(BedrockOreType type : BedrockOreType.values()) { + data.setDouble(type.suffix, getOreLevel(x, z, type)); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + for(BedrockOreType type : BedrockOreType.values()) { + double amount = this.getOreAmount(stack, type); + String typeName = StatCollector.translateToLocalFormatted("item.bedrock_ore.type." + type.suffix + ".name"); + list.add(typeName + ": " + ((int) (amount * 100)) / 100D + " (" + ItemOreDensityScanner.translateDensity(amount) + EnumChatFormatting.RESET + ")"); + } + } + + private static NoiseGeneratorPerlin[] ores = new NoiseGeneratorPerlin[BedrockOreType.values().length]; + private static NoiseGeneratorPerlin level; + + public static double getOreLevel(int x, int z, BedrockOreType type) { + + if(level == null) level = new NoiseGeneratorPerlin(new Random(2114043), 4); + if(ores[type.ordinal()] == null) ores[type.ordinal()] = new NoiseGeneratorPerlin(new Random(2082127 + type.ordinal()), 4); + + double scale = 0.01D; + + return MathHelper.clamp_double(Math.abs(level.func_151601_a(x * scale, z * scale) * ores[type.ordinal()].func_151601_a(x * scale, z * scale)) * 0.05, 0, 2); + } +} diff --git a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java index 15f3550f9..da7713b81 100644 --- a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java +++ b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java @@ -32,6 +32,11 @@ import net.minecraftforge.oredict.OreDictionary; public class ItemBedrockOreNew extends Item { public IIcon[] icons = new IIcon[BedrockOreType.values().length * BedrockOreGrade.values().length]; + + public ItemBedrockOreNew() { + this.setHasSubtypes(true); + this.setMaxDamage(0); + } @Override @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java b/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java new file mode 100644 index 000000000..ffe5b17f0 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java @@ -0,0 +1,42 @@ +package com.hbm.items.tool; + +import com.hbm.items.special.ItemBedrockOreBase; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.PlayerInformPacket; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +public class ItemOreDensityScanner extends Item { + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) { + + if(!(entity instanceof EntityPlayerMP) || world.getTotalWorldTime() % 5 != 0) return; + + EntityPlayerMP player = (EntityPlayerMP) entity; + + for(BedrockOreType type : BedrockOreType.values()) { + double level = ItemBedrockOreBase.getOreLevel((int) Math.floor(player.posX), (int) Math.floor(player.posZ), type); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket( + StatCollector.translateToLocalFormatted("item.bedrock_ore.type." + type.suffix + ".name") + ": " + ((int) (level * 100) / 100D) + " (" + translateDensity(level) + EnumChatFormatting.RESET + ")", + 777 + type.ordinal(), 4000), player); + } + } + + public static String translateDensity(double density) { + if(density <= 0.1) return EnumChatFormatting.DARK_RED + "Very poor"; + if(density <= 0.35) return EnumChatFormatting.RED + "Poor"; + if(density <= 0.75) return EnumChatFormatting.GOLD + "Low"; + if(density >= 1.9) return EnumChatFormatting.AQUA + "Excellent"; + if(density >= 1.65) return EnumChatFormatting.BLUE + "Very high"; + if(density >= 1.25) return EnumChatFormatting.GREEN + "High"; + return EnumChatFormatting.YELLOW + "Moderate"; + } +} diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 35e25e94b..f3a2293ad 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -51,6 +51,8 @@ import com.hbm.items.armor.ItemArmorMod; import com.hbm.items.armor.ItemModRevive; import com.hbm.items.armor.ItemModShackles; import com.hbm.items.food.ItemConserve.EnumFoodType; +import com.hbm.items.special.ItemBedrockOreBase; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; import com.hbm.items.tool.ItemGuideBook.BookType; import com.hbm.items.weapon.ItemGunBase; import com.hbm.lib.HbmCollection; @@ -121,6 +123,7 @@ import net.minecraft.util.EntityDamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.FoodStats; import net.minecraft.util.MathHelper; +import net.minecraft.util.StatCollector; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; @@ -1088,6 +1091,13 @@ public class ModEventHandler { } } + // OREDBG + /*if(!event.player.worldObj.isRemote) { + for(BedrockOreType type : BedrockOreType.values()) { + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(StatCollector.translateToLocalFormatted("item.bedrock_ore.type." + type.suffix + ".name") + ": " + ((int) (ItemBedrockOreBase.getOreLevel((int) Math.floor(player.posX), (int) Math.floor(player.posZ), type) * 100) / 100D), 777 + type.ordinal()), (EntityPlayerMP) player); + } + }*/ + // PRISMDBG /*if(!event.player.worldObj.isRemote) { ChunkRadiationHandlerPRISM prism = (ChunkRadiationHandlerPRISM) ChunkRadiationManager.proxy; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index b1768c1ee..2f9414039 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -22,6 +22,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemDrillbit; import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.items.special.ItemBedrockOreBase; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; @@ -326,6 +327,10 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements ItemStack stack = ore.resource.copy(); List stacks = new ArrayList(); stacks.add(stack); + + if(stack.getItem() == ModItems.bedrock_ore_base) { + ItemBedrockOreBase.setOreAmount(stack, pos.getX(), pos.getZ()); + } ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore.png index e62d194c0add58a16bc781470bf8876dda628bdd..1de4e8d853107499c18b18c40657e6917b0a7c53 100644 GIT binary patch delta 3104 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 diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_new.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_new.png new file mode 100644 index 0000000000000000000000000000000000000000..269bb70396fd2f22f756b760c585cc2f6a50493e GIT binary patch literal 552 zcmV+@0@wYCP)Rq^7X z2d`fI7=orEr67t}X%hafE+b%!~1u*fei$c@rEv!;onN;1<4oRt;gx}@X#^uv&}X;P_FFwLuSOb|~_ zaq~u&m?H3-KIj@d)m#?>84=vOZOhW?eWD*dF2z(b=?u;t2cfB) z20bM3YG;>?2W6fbu*L9U|o<}mFvA_QbzkP<8Ho3KE(`b0SuYIL`d~*In8ekZP%x1G#mc_d_uMq-5 qDd~2*6Xz#l7=|hPxuLx(7jchAohj;0000FVwpq3|c?=uw?!XC!WTU03gZPR~OiD$pt z0vqGoW-1#WUq0`;EC)l>>yWO~n@Zw2XIN&fRctx2wLXxgVfBjL&CVQCSs0u+He3sv zw14+WCk~CJMl-T5n;eu7mUhh2V0<2nv@#X4SmX%vZQYV58uYHlc!ZrkhH_noRbJ#7fUCz7Ul>?|B#l!|iQ}k<)mVz0_2- z;c<>rj%PD=S6a28P-gRnIdAqJFO;!3zd1XuvE#wsTIH2nI-a)wjJ!8{b4A0)>z_D*zGm=r^>bP0l+XkK Dh!J`C literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ore_density_scanner.png b/src/main/resources/assets/hbm/textures/items/ore_density_scanner.png new file mode 100644 index 0000000000000000000000000000000000000000..c67517b88bd029d18343adb337b902975f6d2d8b GIT binary patch literal 345 zcmV-f0jB%9gB(yCs5e138F{j=M@!N3BXot|)g+}#VP|G}1lpZ?R}IkpY7)|-0J@5yrc!l2)4 rHmHZzn%B2?#|$f_08mO