From c4eee6990d8cf2ad02921eae1e5b61668f3de36a Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 13 Oct 2021 13:49:56 +0200 Subject: [PATCH] cleaned up meteor spawn code, protection charm armor mod --- .../com/hbm/crafting/ConsumableRecipes.java | 6 +- .../com/hbm/handler/BossSpawnHandler.java | 84 ++++++++++++++ src/main/java/com/hbm/items/ModItems.java | 106 +++++++++--------- .../com/hbm/items/armor/ItemArmorMod.java | 6 +- .../com/hbm/items/armor/ItemModCharm.java | 53 +++++++++ .../com/hbm/items/tool/ItemMeteorRemote.java | 11 +- .../java/com/hbm/main/ModEventHandler.java | 40 ------- .../assets/hbm/textures/armor/dnt_arm_50.png | Bin 0 -> 2797 bytes .../assets/hbm/textures/armor/dnt_arm_70.png | Bin 0 -> 2672 bytes .../hbm/textures/armor/dnt_chest_50.png | Bin 0 -> 4869 bytes .../hbm/textures/armor/dnt_chest_70.png | Bin 0 -> 4616 bytes .../hbm/textures/armor/dnt_helmet_50.png | Bin 0 -> 4708 bytes .../hbm/textures/armor/dnt_helmet_70.png | Bin 0 -> 4479 bytes .../assets/hbm/textures/armor/dnt_leg_50.png | Bin 0 -> 2526 bytes .../assets/hbm/textures/armor/dnt_leg_70.png | Bin 0 -> 2439 bytes .../hbm/textures/items/ingot_bakelite.png | Bin 0 -> 266 bytes .../hbm/textures/items/meteor_charm.png | Bin 0 -> 373 bytes .../hbm/textures/items/protection_charm.png | Bin 0 -> 357 bytes src/main/resources/mcmod.info | 2 +- 19 files changed, 205 insertions(+), 103 deletions(-) create mode 100644 src/main/java/com/hbm/items/armor/ItemModCharm.java create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_arm_50.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_arm_70.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_chest_50.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_chest_70.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_helmet_50.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_helmet_70.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_leg_50.png create mode 100644 src/main/resources/assets/hbm/textures/armor/dnt_leg_70.png create mode 100644 src/main/resources/assets/hbm/textures/items/ingot_bakelite.png create mode 100644 src/main/resources/assets/hbm/textures/items/meteor_charm.png create mode 100644 src/main/resources/assets/hbm/textures/items/protection_charm.png diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index e0f013374..f98ff750a 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -174,11 +174,13 @@ public class ConsumableRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.ink, 1), new Object[] { "FPF", "PIP", "FPF", 'F', new ItemStack(Blocks.red_flower, 1, OreDictionary.WILDCARD_VALUE), 'P', ModItems.armor_polish, 'I', "dyeBlack" })); GameRegistry.addRecipe(new ItemStack(ModItems.bathwater_mk2, 1), new Object[] { "MWM", "WBW", "MWM", 'M', ModItems.bottle_mercury, 'W', ModItems.nuclear_waste, 'B', ModItems.bathwater }); GameRegistry.addRecipe(new ItemStack(ModItems.back_tesla, 1), new Object[] { "DGD", "GTG", "DGD", 'D', ModItems.ducttape, 'G', ModItems.wire_gold, 'T', ModBlocks.tesla }); - GameRegistry.addRecipe(new ItemStack(ModItems.medal_liquidator, 1), new Object[] { "GBG", "BFB", "GBG", 'G', ModItems.nugget_au198, 'B', ModItems.ingot_boron, 'F', ModItems.debris_fuel }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.medal_liquidator, 1), new Object[] { "GBG", "BFB", "GBG", 'G', "nuggetGold198", 'B', "ingotBoron", 'F', ModItems.debris_fuel })); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.injector_5htp, 1), new Object[] { ModItems.five_htp, ModItems.circuit_targeting_tier1, ModItems.plate_saturnite }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.injector_knife, 1), new Object[] { ModItems.injector_5htp, Items.iron_sword }); GameRegistry.addRecipe(new ItemStack(ModItems.shackles, 1), new Object[] { "CIC", "C C", "I I", 'I', ModItems.ingot_chainsteel, 'C', ModBlocks.chain }); - GameRegistry.addRecipe(new ItemStack(ModItems.black_diamond, 1), new Object[] { "NIN", "IGI", "NIN", 'N', ModItems.nugget_au198, 'I', ModItems.ink, 'G', ModItems.gem_volcanic }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.black_diamond, 1), new Object[] { "NIN", "IGI", "NIN", 'N', "nuggetGold198", 'I', ModItems.ink, 'G', "gemVolcanic" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.protection_charm, 1), new Object[] { " M ", "MDM", " M ", 'M', ModItems.fragment_meteorite, 'D', "gemDiamond" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.meteor_charm, 1), new Object[] { " M ", "MDM", " M ", 'M', ModItems.fragment_meteorite, 'D', "gemVolcanic" })); //Stealth boy GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stealth_boy, 1), new Object[] { " B", "LI", "LC", 'B', Item.getItemFromBlock(Blocks.stone_button), 'L', Items.leather, 'I', "ingotSteel", 'C', ModItems.circuit_red_copper })); diff --git a/src/main/java/com/hbm/handler/BossSpawnHandler.java b/src/main/java/com/hbm/handler/BossSpawnHandler.java index 9d3da8781..fed9a282d 100644 --- a/src/main/java/com/hbm/handler/BossSpawnHandler.java +++ b/src/main/java/com/hbm/handler/BossSpawnHandler.java @@ -1,14 +1,22 @@ package com.hbm.handler; +import java.util.Random; + +import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; +import com.hbm.config.WorldConfig; import com.hbm.entity.mob.EntityFBI; import com.hbm.entity.mob.EntityMaskMan; import com.hbm.entity.mob.EntityRADBeast; +import com.hbm.entity.projectile.EntityMeteor; +import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; import com.hbm.util.ContaminationUtil; import cpw.mods.fml.common.eventhandler.Event.Result; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; @@ -18,6 +26,9 @@ import net.minecraftforge.event.ForgeEventFactory; public class BossSpawnHandler { + //because some dimwit keeps resetting the world rand + private static final Random meteorRand = new Random(); + public static void rollTheDice(World world) { if(MobConfig.enableMaskman) { @@ -103,6 +114,10 @@ public class BossSpawnHandler { } } } + + if(GeneralConfig.enableMeteorStrikes && !world.isRemote) { + meteorUpdate(world); + } } private static void trySpawn(World world, float x, float y, float z, EntityLiving e) { @@ -123,4 +138,73 @@ public class BossSpawnHandler { if(!player.worldObj.isRemote) player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setLong("fbiMark", player.worldObj.getTotalWorldTime() + 20 * 60 * 20); } + + public static int meteorShower = 0; + private static void meteorUpdate(World world) { + + if(meteorRand.nextInt(meteorShower > 0 ? WorldConfig.meteorShowerChance : WorldConfig.meteorStrikeChance) == 0) { + + if(!world.playerEntities.isEmpty()) { + + EntityPlayer p = (EntityPlayer)world.playerEntities.get(meteorRand.nextInt(world.playerEntities.size())); + + if(p != null && p.dimension == 0) { + + boolean repell = false; + boolean strike = true; + + if(p.getCurrentArmor(2) != null && ArmorModHandler.hasMods(p.getCurrentArmor(2))) { + ItemStack mod = ArmorModHandler.pryMods(p.getCurrentArmor(2))[ArmorModHandler.helmet_only]; + + if(mod != null) { + if(mod.getItem() == ModItems.protection_charm) { + repell = true; + } + if(mod.getItem() == ModItems.meteor_charm) { + repell = true; + strike = meteorRand.nextInt(4) == 0; + } + } + } + + if(strike) + spawnMeteorAtPlayer(p, repell); + } + } + } + + if(meteorShower > 0) { + meteorShower--; + if(meteorShower == 0 && GeneralConfig.enableDebugMode) + MainRegistry.logger.info("Ended meteor shower."); + } + + if(meteorRand.nextInt(WorldConfig.meteorStrikeChance * 100) == 0 && GeneralConfig.enableMeteorShowers) { + meteorShower = (int)(WorldConfig.meteorShowerDuration * 0.75 + WorldConfig.meteorShowerDuration * 0.25 * meteorRand.nextFloat()); + + if(GeneralConfig.enableDebugMode) + MainRegistry.logger.info("Started meteor shower! Duration: " + meteorShower); + } + } + + public static void spawnMeteorAtPlayer(EntityPlayer player, boolean repell) { + + EntityMeteor meteor = new EntityMeteor(player.worldObj); + meteor.setPositionAndRotation(player.posX + meteorRand.nextInt(201) - 100, 384, player.posZ + meteorRand.nextInt(201) - 100, 0, 0); + + Vec3 vec; + if(repell) { + vec = Vec3.createVectorHelper(meteor.posX - player.posX, 0, meteor.posZ - player.posZ).normalize(); + vec.xCoord = vec.xCoord * meteorRand.nextDouble() - 0.5D; + vec.zCoord = vec.zCoord * meteorRand.nextDouble() - 0.5D; + } else { + vec = Vec3.createVectorHelper(meteorRand.nextDouble() - 0.5D, 0, 0); + vec.rotateAroundY((float) (Math.PI * meteorRand.nextDouble())); + } + + meteor.motionX = vec.xCoord; + meteor.motionY = -2.5; + meteor.motionZ = vec.zCoord; + player.worldObj.spawnEntityInWorld(meteor); + } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 809518cf1..2d055ee29 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2160,6 +2160,8 @@ public class ModItems { public static Item injector_knife; public static Item medal_liquidator; public static Item v1; + public static Item protection_charm; + public static Item meteor_charm; public static Item hazmat_helmet; public static Item hazmat_plate; @@ -3204,56 +3206,58 @@ public class ModItems { cbt_device = new ItemSyringe().setUnlocalizedName("cbt_device").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":cbt_device"); cigarette = new ItemCigarette().setUnlocalizedName("cigarette").setFull3D().setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cigarette"); - attachment_mask = new ItemModGasmask().setUnlocalizedName("attachment_mask").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":attachment_mask"); - attachment_mask_mono = new ItemModGasmask().setUnlocalizedName("attachment_mask_mono").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":attachment_mask_mono"); - back_tesla = new ItemModTesla().setUnlocalizedName("back_tesla").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":back_tesla"); - servo_set = new ItemModServos().setUnlocalizedName("servo_set").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":servo_set"); - servo_set_desh = new ItemModServos().setUnlocalizedName("servo_set_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":servo_set_desh"); - pads_rubber = new ItemModPads(0.5F).setUnlocalizedName("pads_rubber").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pads_rubber"); - pads_slime = new ItemModPads(0.25F).setUnlocalizedName("pads_slime").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pads_slime"); - pads_static = new ItemModPads(0.75F).setUnlocalizedName("pads_static").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pads_static"); - cladding_paint = new ItemModCladding(0.025).setUnlocalizedName("cladding_paint").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_paint"); - cladding_rubber = new ItemModCladding(0.005).setUnlocalizedName("cladding_rubber").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_rubber"); - cladding_lead = new ItemModCladding(0.1).setUnlocalizedName("cladding_lead").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_lead"); - cladding_desh = new ItemModCladding(0.2).setUnlocalizedName("cladding_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_desh"); - cladding_iron = new ItemModIron().setUnlocalizedName("cladding_iron").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_iron"); - cladding_obsidian = new ItemModObsidian().setUnlocalizedName("cladding_obsidian").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_obsidian"); - insert_kevlar = new ItemModInsert(1500, 1F, 0.9F, 1F, 1F).setUnlocalizedName("insert_kevlar").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_kevlar"); - insert_sapi = new ItemModInsert(1750, 1F, 0.85F, 1F, 1F).setUnlocalizedName("insert_sapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_sapi"); - insert_esapi = new ItemModInsert(2000, 0.95F, 0.8F, 1F, 1F).setUnlocalizedName("insert_esapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_esapi"); - insert_xsapi = new ItemModInsert(2500, 0.9F, 0.75F, 1F, 1F).setUnlocalizedName("insert_xsapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_xsapi"); - insert_steel = new ItemModInsert(1000, 1F, 0.95F, 0.75F, 0.95F).setUnlocalizedName("insert_steel").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_steel"); - insert_du = new ItemModInsert(1500, 0.9F, 0.85F, 0.5F, 0.9F).setUnlocalizedName("insert_du").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_du"); - insert_polonium = new ItemModInsert(500, 0.9F, 1F, 0.95F, 0.9F).setUnlocalizedName("insert_polonium").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_polonium"); - insert_era = new ItemModInsert(25, 0.5F, 1F, 0.25F, 1F).setUnlocalizedName("insert_era").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_era"); - insert_yharonite = new ItemModInsert(9999, 0.01F, 1F, 1F, 1F).setUnlocalizedName("insert_yharonite").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_yharonite"); - insert_doxium = new ItemModInsert(9999, 5.0F, 1F, 1F, 1F).setUnlocalizedName("insert_doxium").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_doxium"); - armor_polish = new ItemModPolish().setUnlocalizedName("armor_polish").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":armor_polish"); - bandaid = new ItemModBandaid().setUnlocalizedName("bandaid").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bandaid"); - serum = new ItemModSerum().setUnlocalizedName("serum").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":serum"); - quartz_plutonium = new ItemModQuartz().setUnlocalizedName("quartz_plutonium").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":quartz_plutonium"); - morning_glory = new ItemModMorningGlory().setUnlocalizedName("morning_glory").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":morning_glory"); - lodestone = new ItemModLodestone(5).setUnlocalizedName("lodestone").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":lodestone"); - horseshoe_magnet = new ItemModLodestone(8).setUnlocalizedName("horseshoe_magnet").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":horseshoe_magnet"); - industrial_magnet = new ItemModLodestone(12).setUnlocalizedName("industrial_magnet").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":industrial_magnet"); - bathwater = new ItemModBathwater().setUnlocalizedName("bathwater").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bathwater"); - bathwater_mk2 = new ItemModBathwater().setUnlocalizedName("bathwater_mk2").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bathwater_mk2"); - spider_milk = new ItemModMilk().setUnlocalizedName("spider_milk").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spider_milk"); - ink = new ItemModInk().setUnlocalizedName("ink").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ink"); - heart_piece = new ItemModHealth(5F).setUnlocalizedName("heart_piece").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":heart_piece"); - heart_container = new ItemModHealth(20F).setUnlocalizedName("heart_container").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":heart_container"); - heart_booster = new ItemModHealth(40F).setUnlocalizedName("heart_booster").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":heart_booster"); - heart_fab = new ItemModHealth(60F).setUnlocalizedName("heart_fab").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":heart_fab"); - black_diamond = new ItemModHealth(40F).setUnlocalizedName("black_diamond").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":black_diamond"); - wd40 = new ItemModWD40().setUnlocalizedName("wd40").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":wd40"); - scrumpy = new ItemModRevive(1).setUnlocalizedName("scrumpy").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":scrumpy"); - wild_p = new ItemModRevive(3).setUnlocalizedName("wild_p").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":wild_p"); - fabsols_vodka = new ItemModRevive(9999).setUnlocalizedName("fabsols_vodka").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":fabsols_vodka"); - shackles = new ItemModShackles().setUnlocalizedName("shackles").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":shackles"); - injector_5htp = new ItemModAuto().setUnlocalizedName("injector_5htp").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":injector_5htp"); - injector_knife = new ItemModKnife().setUnlocalizedName("injector_knife").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":injector_knife"); - medal_liquidator = new ItemModMedal().setUnlocalizedName("medal_liquidator").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":medal_liquidator"); - v1 = new ItemModV1().setUnlocalizedName("v1").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":v1"); + attachment_mask = new ItemModGasmask().setUnlocalizedName("attachment_mask").setTextureName(RefStrings.MODID + ":attachment_mask"); + attachment_mask_mono = new ItemModGasmask().setUnlocalizedName("attachment_mask_mono").setTextureName(RefStrings.MODID + ":attachment_mask_mono"); + back_tesla = new ItemModTesla().setUnlocalizedName("back_tesla").setTextureName(RefStrings.MODID + ":back_tesla"); + servo_set = new ItemModServos().setUnlocalizedName("servo_set").setTextureName(RefStrings.MODID + ":servo_set"); + servo_set_desh = new ItemModServos().setUnlocalizedName("servo_set_desh").setTextureName(RefStrings.MODID + ":servo_set_desh"); + pads_rubber = new ItemModPads(0.5F).setUnlocalizedName("pads_rubber").setTextureName(RefStrings.MODID + ":pads_rubber"); + pads_slime = new ItemModPads(0.25F).setUnlocalizedName("pads_slime").setTextureName(RefStrings.MODID + ":pads_slime"); + pads_static = new ItemModPads(0.75F).setUnlocalizedName("pads_static").setTextureName(RefStrings.MODID + ":pads_static"); + cladding_paint = new ItemModCladding(0.025).setUnlocalizedName("cladding_paint").setTextureName(RefStrings.MODID + ":cladding_paint"); + cladding_rubber = new ItemModCladding(0.005).setUnlocalizedName("cladding_rubber").setTextureName(RefStrings.MODID + ":cladding_rubber"); + cladding_lead = new ItemModCladding(0.1).setUnlocalizedName("cladding_lead").setTextureName(RefStrings.MODID + ":cladding_lead"); + cladding_desh = new ItemModCladding(0.2).setUnlocalizedName("cladding_desh").setTextureName(RefStrings.MODID + ":cladding_desh"); + cladding_iron = new ItemModIron().setUnlocalizedName("cladding_iron").setTextureName(RefStrings.MODID + ":cladding_iron"); + cladding_obsidian = new ItemModObsidian().setUnlocalizedName("cladding_obsidian").setTextureName(RefStrings.MODID + ":cladding_obsidian"); + insert_kevlar = new ItemModInsert(1500, 1F, 0.9F, 1F, 1F).setUnlocalizedName("insert_kevlar").setTextureName(RefStrings.MODID + ":insert_kevlar"); + insert_sapi = new ItemModInsert(1750, 1F, 0.85F, 1F, 1F).setUnlocalizedName("insert_sapi").setTextureName(RefStrings.MODID + ":insert_sapi"); + insert_esapi = new ItemModInsert(2000, 0.95F, 0.8F, 1F, 1F).setUnlocalizedName("insert_esapi").setTextureName(RefStrings.MODID + ":insert_esapi"); + insert_xsapi = new ItemModInsert(2500, 0.9F, 0.75F, 1F, 1F).setUnlocalizedName("insert_xsapi").setTextureName(RefStrings.MODID + ":insert_xsapi"); + insert_steel = new ItemModInsert(1000, 1F, 0.95F, 0.75F, 0.95F).setUnlocalizedName("insert_steel").setTextureName(RefStrings.MODID + ":insert_steel"); + insert_du = new ItemModInsert(1500, 0.9F, 0.85F, 0.5F, 0.9F).setUnlocalizedName("insert_du").setTextureName(RefStrings.MODID + ":insert_du"); + insert_polonium = new ItemModInsert(500, 0.9F, 1F, 0.95F, 0.9F).setUnlocalizedName("insert_polonium").setTextureName(RefStrings.MODID + ":insert_polonium"); + insert_era = new ItemModInsert(25, 0.5F, 1F, 0.25F, 1F).setUnlocalizedName("insert_era").setTextureName(RefStrings.MODID + ":insert_era"); + insert_yharonite = new ItemModInsert(9999, 0.01F, 1F, 1F, 1F).setUnlocalizedName("insert_yharonite").setTextureName(RefStrings.MODID + ":insert_yharonite"); + insert_doxium = new ItemModInsert(9999, 5.0F, 1F, 1F, 1F).setUnlocalizedName("insert_doxium").setTextureName(RefStrings.MODID + ":insert_doxium"); + armor_polish = new ItemModPolish().setUnlocalizedName("armor_polish").setTextureName(RefStrings.MODID + ":armor_polish"); + bandaid = new ItemModBandaid().setUnlocalizedName("bandaid").setTextureName(RefStrings.MODID + ":bandaid"); + serum = new ItemModSerum().setUnlocalizedName("serum").setTextureName(RefStrings.MODID + ":serum"); + quartz_plutonium = new ItemModQuartz().setUnlocalizedName("quartz_plutonium").setTextureName(RefStrings.MODID + ":quartz_plutonium"); + morning_glory = new ItemModMorningGlory().setUnlocalizedName("morning_glory").setTextureName(RefStrings.MODID + ":morning_glory"); + lodestone = new ItemModLodestone(5).setUnlocalizedName("lodestone").setTextureName(RefStrings.MODID + ":lodestone"); + horseshoe_magnet = new ItemModLodestone(8).setUnlocalizedName("horseshoe_magnet").setTextureName(RefStrings.MODID + ":horseshoe_magnet"); + industrial_magnet = new ItemModLodestone(12).setUnlocalizedName("industrial_magnet").setTextureName(RefStrings.MODID + ":industrial_magnet"); + bathwater = new ItemModBathwater().setUnlocalizedName("bathwater").setTextureName(RefStrings.MODID + ":bathwater"); + bathwater_mk2 = new ItemModBathwater().setUnlocalizedName("bathwater_mk2").setTextureName(RefStrings.MODID + ":bathwater_mk2"); + spider_milk = new ItemModMilk().setUnlocalizedName("spider_milk").setTextureName(RefStrings.MODID + ":spider_milk"); + ink = new ItemModInk().setUnlocalizedName("ink").setTextureName(RefStrings.MODID + ":ink"); + heart_piece = new ItemModHealth(5F).setUnlocalizedName("heart_piece").setTextureName(RefStrings.MODID + ":heart_piece"); + heart_container = new ItemModHealth(20F).setUnlocalizedName("heart_container").setTextureName(RefStrings.MODID + ":heart_container"); + heart_booster = new ItemModHealth(40F).setUnlocalizedName("heart_booster").setTextureName(RefStrings.MODID + ":heart_booster"); + heart_fab = new ItemModHealth(60F).setUnlocalizedName("heart_fab").setTextureName(RefStrings.MODID + ":heart_fab"); + black_diamond = new ItemModHealth(40F).setUnlocalizedName("black_diamond").setTextureName(RefStrings.MODID + ":black_diamond"); + wd40 = new ItemModWD40().setUnlocalizedName("wd40").setTextureName(RefStrings.MODID + ":wd40"); + scrumpy = new ItemModRevive(1).setUnlocalizedName("scrumpy").setTextureName(RefStrings.MODID + ":scrumpy"); + wild_p = new ItemModRevive(3).setUnlocalizedName("wild_p").setTextureName(RefStrings.MODID + ":wild_p"); + fabsols_vodka = new ItemModRevive(9999).setUnlocalizedName("fabsols_vodka").setTextureName(RefStrings.MODID + ":fabsols_vodka"); + shackles = new ItemModShackles().setUnlocalizedName("shackles").setTextureName(RefStrings.MODID + ":shackles"); + injector_5htp = new ItemModAuto().setUnlocalizedName("injector_5htp").setTextureName(RefStrings.MODID + ":injector_5htp"); + injector_knife = new ItemModKnife().setUnlocalizedName("injector_knife").setTextureName(RefStrings.MODID + ":injector_knife"); + medal_liquidator = new ItemModMedal().setUnlocalizedName("medal_liquidator").setTextureName(RefStrings.MODID + ":medal_liquidator"); + v1 = new ItemModV1().setUnlocalizedName("v1").setTextureName(RefStrings.MODID + ":v1"); + protection_charm = new ItemModCharm().setUnlocalizedName("protection_charm").setTextureName(RefStrings.MODID + ":protection_charm"); + meteor_charm = new ItemModCharm().setUnlocalizedName("meteor_charm").setTextureName(RefStrings.MODID + ":meteor_charm"); can_empty = new Item().setUnlocalizedName("can_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_empty"); can_smart = new ItemEnergy().setUnlocalizedName("can_smart").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_smart"); @@ -7404,6 +7408,8 @@ public class ModItems { GameRegistry.registerItem(coin_siege, coin_siege.getUnlocalizedName()); GameRegistry.registerItem(medal_liquidator, medal_liquidator.getUnlocalizedName()); GameRegistry.registerItem(v1, v1.getUnlocalizedName()); + GameRegistry.registerItem(protection_charm, protection_charm.getUnlocalizedName()); + GameRegistry.registerItem(meteor_charm, meteor_charm.getUnlocalizedName()); //Chaos GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ItemArmorMod.java b/src/main/java/com/hbm/items/armor/ItemArmorMod.java index 639f8bf20..b3924f557 100644 --- a/src/main/java/com/hbm/items/armor/ItemArmorMod.java +++ b/src/main/java/com/hbm/items/armor/ItemArmorMod.java @@ -4,6 +4,7 @@ import java.util.List; import com.google.common.collect.Multimap; import com.hbm.handler.ArmorModHandler; +import com.hbm.main.MainRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -29,8 +30,11 @@ public class ItemArmorMod extends Item { this.chestplate = chestplate; this.leggings = leggings; this.boots = boots; + + this.setMaxStackSize(1); + this.setCreativeTab(MainRegistry.consumableTab); } - + @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { list.add(EnumChatFormatting.DARK_PURPLE + "Applicable to:"); diff --git a/src/main/java/com/hbm/items/armor/ItemModCharm.java b/src/main/java/com/hbm/items/armor/ItemModCharm.java new file mode 100644 index 000000000..2c545e4f3 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/ItemModCharm.java @@ -0,0 +1,53 @@ +package com.hbm.items.armor; + +import java.util.List; + +import com.hbm.handler.ArmorModHandler; +import com.hbm.items.ModItems; +import com.hbm.lib.ModDamageSource; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +public class ItemModCharm extends ItemArmorMod { + + public ItemModCharm() { + super(ArmorModHandler.helmet_only, false, true, false, false); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + list.add(EnumChatFormatting.AQUA + "You feel blessed."); + list.add(EnumChatFormatting.AQUA + "Diverts meteors away from the player."); + + if(this == ModItems.protection_charm) { + list.add(EnumChatFormatting.AQUA + "Halves broadcaster damage"); + } + if(this == ModItems.meteor_charm) { + list.add(EnumChatFormatting.AQUA + "Reduces meteor spawning by 75%."); + list.add(EnumChatFormatting.AQUA + "Negates broadcaster damage"); + } + + super.addInformation(stack, player, list, bool); + } + + @Override + public void addDesc(List list, ItemStack stack, ItemStack armor) { + list.add(EnumChatFormatting.GOLD + " " + stack.getDisplayName()); + } + + @Override + public void modDamage(LivingHurtEvent event, ItemStack armor) { + + if(event.source == ModDamageSource.broadcast) { + + if(this == ModItems.protection_charm) + event.ammount *= 0.5F; + if(this == ModItems.meteor_charm) + event.ammount = 0F; + } + } +} diff --git a/src/main/java/com/hbm/items/tool/ItemMeteorRemote.java b/src/main/java/com/hbm/items/tool/ItemMeteorRemote.java index d162d509e..958936b9f 100644 --- a/src/main/java/com/hbm/items/tool/ItemMeteorRemote.java +++ b/src/main/java/com/hbm/items/tool/ItemMeteorRemote.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Random; import com.hbm.entity.projectile.EntityMeteor; +import com.hbm.handler.BossSpawnHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -31,15 +32,7 @@ public class ItemMeteorRemote extends Item { stack.damageItem(1, player); if(!world.isRemote) { - EntityMeteor meteor = new EntityMeteor(world); - meteor.setPositionAndRotation(player.posX + world.rand.nextInt(201) - 100, 384, player.posZ + world.rand.nextInt(201) - 100, 0, 0); - meteor.motionX = world.rand.nextDouble() - 0.5; - meteor.motionY = -2.5; - meteor.motionZ = world.rand.nextDouble() - 0.5; - world.spawnEntityInWorld(meteor); - } - - if(world.isRemote) { + BossSpawnHandler.spawnMeteorAtPlayer(player, false); player.addChatMessage(new ChatComponentText("Watch your head!")); } diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 7aead8abd..e31322094 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -126,8 +126,6 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; import net.minecraftforge.event.world.BlockEvent.BreakEvent; public class ModEventHandler { - - public static int meteorShower = 0; static Random rand = new Random(); @SubscribeEvent @@ -520,44 +518,6 @@ public class ModEventHandler { @SubscribeEvent public void worldTick(WorldTickEvent event) { - - ///// - //try { - ///// - - /// METEOR SHOWER START /// - if(event.world != null && !event.world.isRemote && event.world.provider.isSurfaceWorld() && GeneralConfig.enableMeteorStrikes) { - if(event.world.rand.nextInt(meteorShower > 0 ? WorldConfig.meteorShowerChance : WorldConfig.meteorStrikeChance) == 0) { - if(!event.world.playerEntities.isEmpty()) { - EntityPlayer p = (EntityPlayer)event.world.playerEntities.get(event.world.rand.nextInt(event.world.playerEntities.size())); - - if(p != null && p.dimension == 0) { - EntityMeteor meteor = new EntityMeteor(event.world); - meteor.setPositionAndRotation(p.posX + event.world.rand.nextInt(201) - 100, 384, p.posZ + event.world.rand.nextInt(201) - 100, 0, 0); - meteor.motionX = event.world.rand.nextDouble() - 0.5; - meteor.motionY = -2.5; - meteor.motionZ = event.world.rand.nextDouble() - 0.5; - event.world.spawnEntityInWorld(meteor); - } - } - } - - if(meteorShower > 0) { - meteorShower--; - if(meteorShower == 0 && GeneralConfig.enableDebugMode) - MainRegistry.logger.info("Ended meteor shower."); - } - - if(event.world.rand.nextInt(WorldConfig.meteorStrikeChance * 100) == 0 && GeneralConfig.enableMeteorShowers) { - meteorShower = - (int)(WorldConfig.meteorShowerDuration * 0.75 + - WorldConfig.meteorShowerDuration * 0.25 * event.world.rand.nextFloat()); - - if(GeneralConfig.enableDebugMode) - MainRegistry.logger.info("Started meteor shower! Duration: " + meteorShower); - } - } - /// METEOR SHOWER END /// /// RADIATION STUFF START /// if(event.world != null && !event.world.isRemote && GeneralConfig.enableRads) { diff --git a/src/main/resources/assets/hbm/textures/armor/dnt_arm_50.png b/src/main/resources/assets/hbm/textures/armor/dnt_arm_50.png new file mode 100644 index 0000000000000000000000000000000000000000..f1833a46a63ebb1efec9d67121ac50c6e8fc0f27 GIT binary patch literal 2797 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/armor/dnt_arm_70.png b/src/main/resources/assets/hbm/textures/armor/dnt_arm_70.png new file mode 100644 index 0000000000000000000000000000000000000000..0dac102cf684d0aeb190ec0fe654ae8e458da913 GIT binary patch literal 2672 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 z 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 R{p|n%002ovPDHLkV1k#k+7$o* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/armor/dnt_leg_50.png b/src/main/resources/assets/hbm/textures/armor/dnt_leg_50.png new file mode 100644 index 0000000000000000000000000000000000000000..906795e9227a946a79ab3d6e7d4b6cf2a92ebca0 GIT binary patch literal 2526 zcmV<42_g20P)l9DVj$lhY4=3ts3 zND$I6)ZOdu27tcK#l4TD!0dPqQZQO5b4i}TX&m23!E4Q6mT1N?(2SrHgSD2zc%(@& z`dZI=<#DaMiWtaKL7pdAZ%9O75EGhhMNO$N#_75uwzfVX^`gs!4f-f8T$d(Ia(V~vf||7il*y$>(=obDY)CWzW0p} zV?-cCL@GrDL>Q6Mu-&w1V=#$C8%0+Sm?CEwJYsBdAySkDuap0akH0VAi6sufqf-eY z5Q9T&fix*D3Y1ZdO-=NUuI-6J;QAI}EiOvZBzf)p#n=^;L6D${t>fghM+8NlmrTl( zB!R=l422;C!Qt^C-okR#Fv(K-rrYt&$>te;J})?2%otkxTwX@8m;cMVXS;&C-=I(u z?_qXOFb}bw`pZre(^(;+&5j zWPmyb(oEx#d%Tc>S)R}j9_Io{rns?4pDm~*6sabgW^|pUZF)9MWNbUU2ckghl*oWo z3Eo*6C#Z^oTZd> z1f6F%8wp+#g<>2VywtQYK`Tj;3baY^ZlviPDx7cLuD7q9e`W?JRmJJ!Q<@=CxN7R>TQc3HfSw( ze3hwZ_*aI#aqRc<+u?GFcQe>~iHHFm0`o$%Uam-!0vjaS)GV=_D7@NmX@JD#_&md&OnD--_u?|-oCwfCv3 z7Biv{_^u}ghXVWvT5CEP>Fr1gWK~Kc1>y4L1?)v_x{(u6)$`+ zKRN=Fla~cg^56Z#KaK!D{D;307kpNf)Lmq|s(BgzynMM@){NFuRCBU&&U8LU=LNIH zAwrqmR4c7WQiGN-&kb3cFrCdAhrnvRrKsivarq53Sxz~bad>!uPD>`!2}x?0Rs~74 z1n+kIi}H1r8Imj~FUy^e6-7?lb;MX)zD-(Tv>?U=g5uWgV}`+#Wro>o0#YKm)c&kY zC^Jo2RjsdD*+Io%BL@dlCbJ3o6F&H4zI?uqd9;>Db2%eV``mVUO264W z>vOvY`XV13uHb{0`BDW>-*ohKhigZglMTPTdq!6e#3=Za_dkpPd1hFitO-F7MdZI9 zobX?te8y03>6?zTN2j>y~@>AM>(&?V@L1B?x)$ zb6KXik!z$ethWu(pWCgCii1VTwjD@~=H`t#vuTBpf+RYmO4)2`0B$T&vOK{#hm{aU zhmVRh6WA^=+MY?3AZ3D!o}xPU!RO`6yeQ~x-1%TJpP-VI7zAA>SuZ<2_?>UXAqs*{ ziGWlINm>w0!PESoe(+&bNeWTWwu1GtV|4H|?}MOm;u-!TzioO>PkZE>^10W=YcEpD zO748_Ngw=;FTcgM-qMdFL+|%|Fwb)q^MYmwJ0E;_{}Ig)IXawCRR!~^z zMF-FHV7kX^9U%mKaOfnV*=`tYAj_(~^Tnt0y#w8~j;>pSwOH#}9M8#xAvnjfYe_Rj zbR9}+hQ22PXOBy$ms^h5C8FF@n?75iw{2gly|=THlKX@E8cnc9q!%xjKBTYpS{xQ z>y;0WKKkZ&W0q*N&WO5TI-g;T;b@jp%?>bH^U*gyie)NEGELN)ap-YFk8|$j0bek# ze0Vf;Ee8ivOt?!QI=0J5sF!s4Az`~>Qr%{~+z?aGI682S5CZssG3Mm~|I>m+nUjnA z40hnIy-9L&1~&zjGUS_IV1`fW>IrV{>22WNX$N+s9|xqm)+yhs72K|B(wSp(_?wtp zH?fn9ERj%mJo)Co0jyBMMRE%JwEzGB07*qoM6N<$f@w_TdH?_b literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/armor/dnt_leg_70.png b/src/main/resources/assets/hbm/textures/armor/dnt_leg_70.png new file mode 100644 index 0000000000000000000000000000000000000000..aad67016252e91314e4a991a82e4280c1b9814f5 GIT binary patch literal 2439 zcmV;233&F2P)rZGR#n%V@?%RkSLRfNTSMqY0y(G#Pm z?=uK2PftJSY|kGsRl|UTn+G65E)arI>p;JWFD0Np&yRz5g5E)D$zmPc(OU17@3ByPpH^0KA?)=R9K&{$is$;(nev{I4q}^67act&`^pQ387yP z1TU04G7cGW?iU}h)hnpM;bM#XByIYFGK8mLq9IAB&u z!?xE-8j(^cDBimdoWESVfRml8d8lrY!dM+232>9NaiMWZKTCCfvAnlNefx zDF=%=X-GSM?D|Le!^1sp937I!@>qV-Os>^GIbH1n?s`x}387)yHtY*DlL@67%jFq0 z7Yc&+f~sISbL-{-DOI{vM{GPINCUQ~#|k#eOJ zqvnytEIfJ#oj?pqoHnTUjKfIRB{r)>sgO-D=P^LkQ%x8ugcwQHZ~~22;-p306@LA6 zek`Du_3!hK1gr`!1Zn}Rf{9YfKow;$kE-Cj;M7rTW=It^K`?46R0WNJQVg@}{P;dR zR;ejdWn2G}e`JfBrs4SB31c=waQNU*VA?1p2~rKRk;la9VgqcLP9r9s*m#m*c`wN>L9&zL7fX#6Kc9p`} z`8mZh|M2av?s8pw)wQz;Ak>t=Dhkw6QFWL)QqCCQ8iy0er63ryX`tUkJo3K$?!;(3 zO_Xc=n3Xn9SasdiNY`y9Mo;vD4+^T}lqfk-YX#(~KKL~La*YM_3NJ3;^#T9HfOQ_%> zt?ztY0RH6lFPUI0&pJZ0J?&%DaLIr3&A$_XPk-_+?J7UtpJNEr%KPz;tFKOB>_@~o zCX05vl?v17KxG&1Q-AP=UHV|0&%p&k6S>NN_Vq6sz_$veNzr^{)`oV(`0`tj& z*hKoGI5N&DPK}e}Gg37U4sX$~*3_y`tnY(&OeQUh#okuNFhrG$iwoN6gD*9wic>+o z2UTv}JR;{x83rbk7DN#q^iPP6b{bji?bB`&>bE|)-gKbKqzU9=93CD}&4@8Rw!S{> zV~A}J%= zx}KAh72}XGgg^b`t!W4EIJtL9HDNRK+`V&;AN}}Uy7M#AkT`zt9(CLvy1)DJ&)Frf zQgM#0Qr-8#&_w#p$mw~9)=D17C)W4X>elB}82Uu;$|5LZhPo=4ZHpF!qoaM!E;<&| zDbpB8sURZsn>CZ^oU^lY02Z@A2-|b6luFGNGsOqcVe5l!>zPa<6(csDl!r`> zLq6EV2Ir=1R*6sl(Hr)#&&_5F;&gG%2cuX1?Dm&Uou_Rlh_pK&OeUCy2R>L~sPd=} zUi#>mSgkTD7$udRk6rb_oPP!%Y@`qpHL$?l?#mD$yEzBm4ire|%*pGCpk=bm{{@#N9`IJec%o-4@SlasF`eFmM zGMjp;cw+mQ`YP-%rl{9~sxS^CB96vy_dmvf2E{iXtC>wdvfga)Zu>5swUKIq*X_m9 zFl_mtq-;ArG@e=t>prpW*LVj*f$1b*6@nI=>SOAATu^+U3Nag-Wrr9zGt?`0?<{vd zC-;4B`&P&tELu*w)owmGWFu6eT>4xT?%uh3#Rm;BV;Ht#aj@T#ijh#>J2?l0YId#u zSSxunQ&Iez5z}N(4@UhaCuLr_ z^Y+f?;-$|yCB%k4z4-L?nFFd*x>W~zE!S$^RCM#eWn2=PlgDl0_;^r&A7(_F3lNU>MHvQ{DMs zsfAK2w4VEg+B(f|8Cr0#2oLup_F0;NrUwr8SRfX01f|>y; z>(xN5Kne_f!bK&-$X|c`8v^jJKYSN}|NOt7zIZy|{{hkJcNRXidK~}&002ovPDHLk FV1nei!5;ts literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ingot_bakelite.png b/src/main/resources/assets/hbm/textures/items/ingot_bakelite.png new file mode 100644 index 0000000000000000000000000000000000000000..a74b71c8e7014dffbb289edf1320343db30a0552 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyU#8Te@e*HAcm0O$tIbExpxDj_V&Nx_mHT+uN{l z)wWwY(_H?o6MA)e;=1(0Gf!)R)DF}=HJszerCOP>|I?0T{tSzL^D-zJUfFSZX{za# zB|Nv(`1f*Oc6nib!h6+%Kdrk?sxU7KP)|VI~M%%!9A2GytF4Uh<4 zAOeNSx@0DkS%br5rl_r;nySwMRKk!F6-6Tm84RAW0@I22N0d~7x%RQOH za=Fxbo&!+V^ zRV)?@%Ce*=ik7>Z*L7WO;QV6+!1LR-HEEir$2bq+{rdXw`aWnfx?j@|oF2X}_G?yS zY5Qt7FiKyp)gNhagwnqmJY-oWx~>BN zOw)8)Ez3fZBt_e{rAmk4005=bxB-BKw{83QXF>=FA*xqR z^L<}