From 565133eefb37a63e95bcd5f0bee5b7b391694fbf Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 28 Jan 2021 23:46:46 +0100 Subject: [PATCH] mods and attribute modifiers for armors --- src/main/java/assets/hbm/lang/de_DE.lang | 4 + src/main/java/assets/hbm/lang/en_US.lang | 4 + .../hbm/textures/items/cladding_obsidian.png | Bin 0 -> 280 bytes .../hbm/textures/items/heart_booster.png | Bin 0 -> 319 bytes .../hbm/textures/items/heart_container.png | Bin 0 -> 331 bytes .../assets/hbm/textures/items/heart_piece.png | Bin 0 -> 312 bytes .../com/hbm/crafting/ConsumableRecipes.java | 3 + .../java/com/hbm/handler/ArmorModHandler.java | 9 ++ .../java/com/hbm/inventory/RecipesCommon.java | 1 + src/main/java/com/hbm/items/ModItems.java | 22 +++-- .../com/hbm/items/armor/ItemArmorMod.java | 17 ++++ .../com/hbm/items/armor/ItemModHealth.java | 52 ++++++++++++ .../com/hbm/items/armor/ItemModInsert.java | 27 +++++- .../com/hbm/items/armor/ItemModObsidian.java | 28 ++++++ .../java/com/hbm/main/CraftingManager.java | 1 + .../java/com/hbm/main/ModEventHandler.java | 80 ++++++++++++++++++ 16 files changed, 241 insertions(+), 7 deletions(-) create mode 100644 src/main/java/assets/hbm/textures/items/cladding_obsidian.png create mode 100644 src/main/java/assets/hbm/textures/items/heart_booster.png create mode 100644 src/main/java/assets/hbm/textures/items/heart_container.png create mode 100644 src/main/java/assets/hbm/textures/items/heart_piece.png create mode 100644 src/main/java/com/hbm/items/armor/ItemModHealth.java create mode 100644 src/main/java/com/hbm/items/armor/ItemModObsidian.java diff --git a/src/main/java/assets/hbm/lang/de_DE.lang b/src/main/java/assets/hbm/lang/de_DE.lang index 003fe2911..b71dc333e 100644 --- a/src/main/java/assets/hbm/lang/de_DE.lang +++ b/src/main/java/assets/hbm/lang/de_DE.lang @@ -808,6 +808,7 @@ item.circuit_targeting_tier5.name=Militärische Schaltplatte (Stufe 5) item.circuit_targeting_tier6.name=Militärische Schaltplatte (Stufe 6) item.cladding_desh.name=Deshbeschlag item.cladding_lead.name=Bleibeschlag +item.cladding_obsidian.name=Obsidianhaut item.cladding_paint.name=Bleifarbe item.cladding_rubber.name=Gummibeschlag item.clip_bf.name=BF-Geschosse im Doppelpack @@ -1203,6 +1204,9 @@ item.hazmat_plate.name=Strahlenschutzbrustplatte item.hazmat_plate_grey.name=Hochleistungs-Strahlenschutzbrustplatte item.hazmat_plate_red.name=Verbesserte Strahlenschutzbrustplatte item.hazmat_red_kit.name=Lvl 2 Strahlenschutz-Kit +item.heart_booster.name=Herzbooster +item.heart_container.name=Herzcontainer +item.heart_piece.name=Herzteil item.hev_battery.name=Anzugs-Batterie item.hev_boots.name=HEV Mark IV Stiefel item.hev_plate.name=HEV Mark IV Brustpanzer diff --git a/src/main/java/assets/hbm/lang/en_US.lang b/src/main/java/assets/hbm/lang/en_US.lang index b9ccc7aeb..c1a86b62f 100644 --- a/src/main/java/assets/hbm/lang/en_US.lang +++ b/src/main/java/assets/hbm/lang/en_US.lang @@ -808,6 +808,7 @@ item.circuit_targeting_tier5.name=Military Grade Circuit Board (Tier 5) item.circuit_targeting_tier6.name=Military Grade Circuit Board (Tier 6) item.cladding_desh.name=Desh Cladding item.cladding_lead.name=Lead Cladding +item.cladding_obsidian.name=Obsidian Skin item.cladding_paint.name=Lead Paint item.cladding_rubber.name=Rubber Cladding item.clip_bf.name=BF-Shell Double Pack @@ -1203,6 +1204,9 @@ item.hazmat_plate.name=Hazmat Chestplate item.hazmat_plate_grey.name=High-Performance Hazmat Chestplate item.hazmat_plate_red.name=Advanced Hazmat Chestplate item.hazmat_red_kit.name=Advanced Hazmat Kit +item.heart_booster.name=Heart Booster +item.heart_container.name=Heart Container +item.heart_piece.name=Heart Piece item.hev_battery.name=Suit Battery item.hev_boots.name=HEV Mark IV Boots item.hev_plate.name=HEV Mark IV Chestplate diff --git a/src/main/java/assets/hbm/textures/items/cladding_obsidian.png b/src/main/java/assets/hbm/textures/items/cladding_obsidian.png new file mode 100644 index 0000000000000000000000000000000000000000..3f03a6668c8f84d074e14e3b273b7bc6fefcb122 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf`Tgm|`X9t+@;q1S`gO=u*-n7r(@i0UfG}2z{nrpZ}gFOUnk$q_Ox zeUda01(Ib74~6lvSsO$LuiBY?f4lJ4aPiQY*mzz#{ned|34N_WkZmLo(>s7d2JM8< zR0E-W`ZDTko$Q+m#N!sRYg0k#cf;TTJ<`_-vZDk}`GxG|jkwK?L5x#=f%^xx?{{H7 z7grw1Z+MIGQ#unXQShJQ*eJsI9Pz{RvoyIm97Af1b8+SQHJ|K*!P2SAHWEH570;#5 zHW*u^;<@x$w2HNgbtbl7t!=+rTW4aeVtT+*zWdH((kiL`qX9sgHYffc_yBd0c6&Ca RqelP$002ovPDHLkV1ltah|>T7 literal 0 HcmV?d00001 diff --git a/src/main/java/assets/hbm/textures/items/heart_container.png b/src/main/java/assets/hbm/textures/items/heart_container.png new file mode 100644 index 0000000000000000000000000000000000000000..cfab19be67a0784fc8104ebc35794915b18ec05c GIT binary patch literal 331 zcmV-R0kr;!P)F4xr6w3vPkf?e%PX?f^0EP!=m_bC&u!JPbW35KoMnE{^oi;3gQAO08yXlGcBCaE^>`kVGgLL$rw z3AxwP+MG}O9s1cmZEi}(Yy`AhRrD8+?uR z7|ag<9b~xvWgTe~DWM4fQJ{K! literal 0 HcmV?d00001 diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index adf13103b..dc9cb2711 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -127,6 +127,7 @@ public class ConsumableRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.cladding_rubber, 1), new Object[] { "RCR", "CDC", "RCR", 'R', ModItems.plate_polymer, 'C', "dustCoal", 'D', ModItems.ducttape })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.cladding_lead, 1), new Object[] { "DPD", "PRP", "DPD", 'R', ModItems.cladding_rubber, 'P', "plateLead", 'D', ModItems.ducttape })); GameRegistry.addRecipe(new ItemStack(ModItems.cladding_desh, 1), new Object[] { "DPD", "PRP", "DPD", 'R', ModItems.cladding_lead, 'P', ModItems.plate_desh, 'D', ModItems.ducttape }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.cladding_obsidian, 1), new Object[] { "OOO", "PDP", "OOO", 'O', Blocks.obsidian, 'P', "plateSteel", 'D', ModItems.ducttape })); //Inserts GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.insert_steel, 1), new Object[] { "DPD", "PSP", "DPD", 'D', ModItems.ducttape, 'P', "plateIron", 'S', "blockSteel" })); @@ -150,6 +151,8 @@ public class ConsumableRecipes { //Special Mods GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.horseshoe_magnet, 1), new Object[] { "L L", "I I", "ILI", 'L', ModItems.lodestone, 'I', "ingotIron" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', "ingotSteel", 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.fusion_conductor })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.heart_container, 1), new Object[] { "HAH", "ACA", "HAH", 'H', ModItems.heart_piece, 'A', "ingotAluminum", 'C', ModItems.coin_creeper })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.heart_booster, 1), new Object[] { "GHG", "MCM", "GHG", 'G', "ingotGold", 'H', ModItems.heart_container, 'M', ModItems.morning_glory, 'C', ModItems.coin_maskman })); //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/ArmorModHandler.java b/src/main/java/com/hbm/handler/ArmorModHandler.java index d1e59c615..21321291c 100644 --- a/src/main/java/com/hbm/handler/ArmorModHandler.java +++ b/src/main/java/com/hbm/handler/ArmorModHandler.java @@ -1,5 +1,7 @@ package com.hbm.handler; +import java.util.UUID; + import com.hbm.items.armor.ItemArmorMod; import net.minecraft.item.Item; @@ -18,6 +20,13 @@ public class ArmorModHandler { public static final int kevlar = 6; public static final int extra = 7; + public static final UUID[] UUIDs = new UUID[] { + UUID.fromString("8d6e5c77-133e-4056-9c80-a9e42a1a0b65"), + UUID.fromString("b1b7ee0e-1d14-4400-8037-f7f2e02f21ca"), + UUID.fromString("30b50d2a-4858-4e5b-88d4-3e3612224238"), + UUID.fromString("426ee0d0-7587-4697-aaef-4772ab202e78") + }; + //The key for the NBTTagCompound that holds the armor mods public static final String MOD_COMPOUND_KEY = "ntm_armor_mods"; //The key for the specific slot inside the armor mod NBT Tag diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index dc6598cf1..0240e12e7 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -3,6 +3,7 @@ package com.hbm.inventory; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d7fe86cee..e66fae718 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1803,6 +1803,7 @@ public class ModItems { public static Item cladding_rubber; public static Item cladding_lead; public static Item cladding_desh; + public static Item cladding_obsidian; public static Item insert_kevlar; public static Item insert_sapi; public static Item insert_esapi; @@ -1819,6 +1820,9 @@ public class ModItems { public static Item bathwater; public static Item bathwater_mk2; public static Item spider_milk; + public static Item heart_piece; + public static Item heart_container; + public static Item heart_booster; public static Item hazmat_helmet; public static Item hazmat_plate; @@ -2714,11 +2718,12 @@ public class ModItems { cladding_rubber = new ItemModCladding(0.075F).setUnlocalizedName("cladding_rubber").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_rubber"); cladding_lead = new ItemModCladding(0.2F).setUnlocalizedName("cladding_lead").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_lead"); cladding_desh = new ItemModCladding(0.4F).setUnlocalizedName("cladding_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_desh"); - insert_kevlar = new ItemModInsert(1F, 0.9F, 1F).setUnlocalizedName("insert_kevlar").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_kevlar"); - insert_sapi = new ItemModInsert(1F, 0.85F, 1F).setUnlocalizedName("insert_sapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_sapi"); - insert_esapi = new ItemModInsert(0.95F, 0.8F, 1F).setUnlocalizedName("insert_esapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_esapi"); - insert_xsapi = new ItemModInsert(0.9F, 0.75F, 1F).setUnlocalizedName("insert_xsapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_xsapi"); - insert_steel = new ItemModInsert(1F, 0.95F, 0.75F).setUnlocalizedName("insert_steel").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_steel"); + cladding_obsidian = new ItemModObsidian().setUnlocalizedName("cladding_obsidian").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_obsidian"); + insert_kevlar = new ItemModInsert(1F, 0.9F, 1F, 1F).setUnlocalizedName("insert_kevlar").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_kevlar"); + insert_sapi = new ItemModInsert(1F, 0.85F, 1F, 1F).setUnlocalizedName("insert_sapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_sapi"); + insert_esapi = new ItemModInsert(0.95F, 0.8F, 1F, 1F).setUnlocalizedName("insert_esapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_esapi"); + insert_xsapi = new ItemModInsert(0.9F, 0.75F, 1F, 1F).setUnlocalizedName("insert_xsapi").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_xsapi"); + insert_steel = new ItemModInsert(1F, 0.95F, 0.75F, 0.95F).setUnlocalizedName("insert_steel").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":insert_steel"); 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"); @@ -2730,6 +2735,9 @@ public class ModItems { 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"); + 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"); 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"); @@ -6147,6 +6155,7 @@ public class ModItems { GameRegistry.registerItem(cladding_rubber, cladding_rubber.getUnlocalizedName()); GameRegistry.registerItem(cladding_lead, cladding_lead.getUnlocalizedName()); GameRegistry.registerItem(cladding_desh, cladding_desh.getUnlocalizedName()); + GameRegistry.registerItem(cladding_obsidian, cladding_obsidian.getUnlocalizedName()); GameRegistry.registerItem(insert_kevlar, insert_kevlar.getUnlocalizedName()); GameRegistry.registerItem(insert_sapi, insert_sapi.getUnlocalizedName()); GameRegistry.registerItem(insert_esapi, insert_esapi.getUnlocalizedName()); @@ -6163,6 +6172,9 @@ public class ModItems { GameRegistry.registerItem(bathwater, bathwater.getUnlocalizedName()); GameRegistry.registerItem(bathwater_mk2, bathwater_mk2.getUnlocalizedName()); GameRegistry.registerItem(spider_milk, spider_milk.getUnlocalizedName()); + GameRegistry.registerItem(heart_piece, heart_piece.getUnlocalizedName()); + GameRegistry.registerItem(heart_container, heart_container.getUnlocalizedName()); + GameRegistry.registerItem(heart_booster, heart_booster.getUnlocalizedName()); //The Gadget GameRegistry.registerItem(gadget_explosive, gadget_explosive.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ItemArmorMod.java b/src/main/java/com/hbm/items/armor/ItemArmorMod.java index 788e5e367..639f8bf20 100644 --- a/src/main/java/com/hbm/items/armor/ItemArmorMod.java +++ b/src/main/java/com/hbm/items/armor/ItemArmorMod.java @@ -2,6 +2,9 @@ package com.hbm.items.armor; import java.util.List; +import com.google.common.collect.Multimap; +import com.hbm.handler.ArmorModHandler; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.EntityLivingBase; @@ -45,6 +48,18 @@ public class ItemArmorMod extends Item { if(boots) list.add(" Boots"); } + list.add(EnumChatFormatting.DARK_PURPLE + "Slot:"); + + switch(this.type) { + case ArmorModHandler.helmet_only: list.add(" Helmet"); break; + case ArmorModHandler.plate_only: list.add(" Chestplate"); break; + case ArmorModHandler.legs_only: list.add(" Leggings"); break; + case ArmorModHandler.boots_only: list.add(" Boots"); break; + case ArmorModHandler.servos: list.add(" Servos"); break; + case ArmorModHandler.cladding: list.add(" Cladding"); break; + case ArmorModHandler.kevlar: list.add(" Insert"); break; + case ArmorModHandler.extra: list.add(" Special"); break; + } } @SideOnly(Side.CLIENT) @@ -56,6 +71,8 @@ public class ItemArmorMod extends Item { public void modDamage(LivingHurtEvent event, ItemStack armor) { } + public Multimap getModifiers(ItemStack armor) { return null; } + @SideOnly(Side.CLIENT) public void modRender(RenderPlayerEvent.SetArmorModel event, ItemStack armor) { } } diff --git a/src/main/java/com/hbm/items/armor/ItemModHealth.java b/src/main/java/com/hbm/items/armor/ItemModHealth.java new file mode 100644 index 000000000..2cac42972 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/ItemModHealth.java @@ -0,0 +1,52 @@ +package com.hbm.items.armor; + +import java.util.List; + +import com.google.common.collect.Multimap; +import com.hbm.handler.ArmorModHandler; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemModHealth extends ItemArmorMod { + + float health; + + public ItemModHealth(float health) { + super(ArmorModHandler.extra, false, true, false, false); + this.health = health; + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + + String color = "" + (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE); + + list.add(color + "+" + (Math.round(health * 10 / 2) * 0.1) + " health"); + list.add(""); + super.addInformation(itemstack, player, list, bool); + } + + @Override + public void addDesc(List list, ItemStack stack, ItemStack armor) { + + String color = "" + (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE); + + list.add(color + " " + stack.getDisplayName() + " (+" + (Math.round(health * 10 / 2) * 0.1) + " health)"); + } + + @Override + public Multimap getModifiers(ItemStack armor) { + Multimap multimap = super.getItemAttributeModifiers(); + + multimap.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), + new AttributeModifier(ArmorModHandler.UUIDs[((ItemArmor)armor.getItem()).armorType], "NTM Armor Mod Health", health, 0)); + + return multimap; + } + +} diff --git a/src/main/java/com/hbm/items/armor/ItemModInsert.java b/src/main/java/com/hbm/items/armor/ItemModInsert.java index edd612e13..bae99a972 100644 --- a/src/main/java/com/hbm/items/armor/ItemModInsert.java +++ b/src/main/java/com/hbm/items/armor/ItemModInsert.java @@ -3,9 +3,13 @@ package com.hbm.items.armor; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.Multimap; import com.hbm.handler.ArmorModHandler; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.event.entity.living.LivingHurtEvent; @@ -15,12 +19,14 @@ public class ItemModInsert extends ItemArmorMod { float damageMod; float projectileMod; float explosionMod; + float speed; - public ItemModInsert(float damageMod, float projectileMod, float explosionMod) { + public ItemModInsert(float damageMod, float projectileMod, float explosionMod, float speed) { super(ArmorModHandler.kevlar, false, true, false, false); this.damageMod = damageMod; this.projectileMod = projectileMod; this.explosionMod = explosionMod; + this.speed = speed; } @Override @@ -32,6 +38,8 @@ public class ItemModInsert extends ItemArmorMod { list.add(EnumChatFormatting.YELLOW + "-" + Math.round((1F - projectileMod) * 100) + "% projectile damage"); if(explosionMod != 1F) list.add(EnumChatFormatting.YELLOW + "-" + Math.round((1F - explosionMod) * 100) + "% explosion damage"); + if(speed != 1F) + list.add(EnumChatFormatting.BLUE + "-" + Math.round((1F - speed) * 100) + "% speed"); list.add(""); super.addInformation(itemstack, player, list, bool); @@ -48,6 +56,8 @@ public class ItemModInsert extends ItemArmorMod { desc.add("-" + Math.round((1F - projectileMod) * 100) + "% proj"); if(explosionMod != 1F) desc.add("-" + Math.round((1F - explosionMod) * 100) + "% exp"); + if(explosionMod != 1F) + desc.add("-" + Math.round((1F - speed) * 100) + "% speed"); String join = String.join(" / ", desc); @@ -65,5 +75,18 @@ public class ItemModInsert extends ItemArmorMod { if(event.source.isExplosion()) event.ammount *= explosionMod; } - + + @Override + public Multimap getModifiers(ItemStack armor) { + + if(speed == 1) + return null; + + Multimap multimap = super.getItemAttributeModifiers(); + + multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), + new AttributeModifier(ArmorModHandler.UUIDs[((ItemArmor)armor.getItem()).armorType], "NTM Armor Mod Speed", -1F + speed, 2)); + + return multimap; + } } diff --git a/src/main/java/com/hbm/items/armor/ItemModObsidian.java b/src/main/java/com/hbm/items/armor/ItemModObsidian.java new file mode 100644 index 000000000..2227c1dd1 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/ItemModObsidian.java @@ -0,0 +1,28 @@ +package com.hbm.items.armor; + +import java.util.List; + +import com.hbm.handler.ArmorModHandler; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemModObsidian extends ItemArmorMod { + + public ItemModObsidian() { + super(ArmorModHandler.cladding, true, true, true, true); + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.DARK_PURPLE + "Makes dropped armor indestructible"); + list.add(""); + super.addInformation(itemstack, player, list, bool); + } + + @Override + public void addDesc(List list, ItemStack stack, ItemStack armor) { + list.add(EnumChatFormatting.DARK_PURPLE + " " + stack.getDisplayName() + " (Item indestructible)"); + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 02c5cf091..5ead7dc7c 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -866,6 +866,7 @@ public class CraftingManager { GameRegistry.addSmelting(ModItems.ingot_schraranium, new ItemStack(ModItems.nugget_schrabidium, 1), 2.0F); + GameRegistry.addSmelting(ModItems.lodestone, new ItemStack(ModItems.crystal_iron, 1), 5.0F); GameRegistry.addSmelting(ModItems.crystal_iron, new ItemStack(Items.iron_ingot, 2), 2.0F); GameRegistry.addSmelting(ModItems.crystal_gold, new ItemStack(Items.gold_ingot, 2), 2.0F); GameRegistry.addSmelting(ModItems.crystal_redstone, new ItemStack(Items.redstone, 6), 2.0F); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index d5c503f0b..cf9e2323d 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -11,6 +11,7 @@ import java.util.Random; import org.apache.commons.lang3.math.NumberUtils; +import com.google.common.collect.Multimap; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; @@ -54,10 +55,12 @@ import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySpider; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.passive.EntityCow; import net.minecraft.entity.passive.EntityMooshroom; @@ -67,12 +70,14 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EntityDamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.FoodStats; import net.minecraft.util.Vec3; @@ -81,6 +86,7 @@ import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityEvent.EnteringChunk; +import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; @@ -169,6 +175,15 @@ public class ModEventHandler player.triggerAchievement(MainRegistry.bobHidden); } } + + if(!event.entityLiving.worldObj.isRemote) { + + if(event.entityLiving instanceof EntitySpider && event.source instanceof EntityDamageSource && + ((EntityDamageSource)event.source).getEntity() instanceof EntityPlayer && event.entityLiving.getRNG().nextInt(500) == 0) { + + event.entityLiving.dropItem(ModItems.spider_milk, 1); + } + } } @SubscribeEvent @@ -216,19 +231,72 @@ public class ModEventHandler } } + @SubscribeEvent + public void onItemToss(ItemTossEvent event) { + + ItemStack yeet = event.entityItem.getEntityItem(); + + if(yeet.getItem() instanceof ItemArmor && ArmorModHandler.hasMods(yeet)) { + + ItemStack[] mods = ArmorModHandler.pryMods(yeet); + ItemStack cladding = mods[ArmorModHandler.cladding]; + + if(cladding != null && cladding.getItem() == ModItems.cladding_obsidian) { + + try { + ReflectionHelper.findField(Entity.class, "field_149500_a", "invulnerable").setBoolean(event.entityItem, true); + } catch(Exception e) { } + } + } + } + @SubscribeEvent public void onLivingUpdate(LivingUpdateEvent event) { + ItemStack[] prevArmor = null; + + try { + prevArmor = (ItemStack[]) ReflectionHelper.findField(EntityLivingBase.class, "field_82180_bT", "previousEquipment").get(event.entityLiving); + } catch(Exception e) { } + for(int i = 1; i < 5; i++) { + ItemStack prev = prevArmor!= null ? prevArmor[i] : null; ItemStack armor = event.entityLiving.getEquipmentInSlot(i); + boolean reapply = prevArmor != null && !ItemStack.areItemStacksEqual(prev, armor); + + if(reapply) { + + if(prev != null && ArmorModHandler.hasMods(prev)) { + + for(ItemStack mod : ArmorModHandler.pryMods(prev)) { + + if(mod != null && mod.getItem() instanceof ItemArmorMod) { + + Multimap map = ((ItemArmorMod)mod.getItem()).getModifiers(prev); + + if(map != null) + event.entityLiving.getAttributeMap().removeAttributeModifiers(map); + } + } + } + } + if(armor != null && ArmorModHandler.hasMods(armor)) { for(ItemStack mod : ArmorModHandler.pryMods(armor)) { if(mod != null && mod.getItem() instanceof ItemArmorMod) { ((ItemArmorMod)mod.getItem()).modUpdate(event.entityLiving, armor); + + if(reapply) { + + Multimap map = ((ItemArmorMod)mod.getItem()).getModifiers(armor); + + if(map != null) + event.entityLiving.getAttributeMap().applyAttributeModifiers(map); + } } } } @@ -621,6 +689,18 @@ public class ModEventHandler e.player.addStat(MainRegistry.bobNuclear, 1); } } + + @SubscribeEvent + public void itemSmelted(PlayerEvent.ItemSmeltedEvent e) { + + if(!e.player.worldObj.isRemote && e.smelting.getItem() == Items.iron_ingot && e.player.getRNG().nextInt(64) == 0) { + + if(!e.player.inventory.addItemStackToInventory(new ItemStack(ModItems.lodestone))) + e.player.dropPlayerItemWithRandomChoice(new ItemStack(ModItems.lodestone), false); + else + e.player.inventoryContainer.detectAndSendChanges(); + } + } @SubscribeEvent public void onBlockBreak(BreakEvent event) {