From 458500f35e4c4c6d44b8a609605dec1d9af833c9 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 21 Jan 2022 15:21:16 +0100 Subject: [PATCH] some improved damage handling code for armor --- .../java/com/hbm/extprop/HbmLivingProps.java | 4 ++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../java/com/hbm/items/armor/ArmorHat.java | 39 ++++++++++++++++- .../com/hbm/items/armor/IAttackHandler.java | 9 ++++ .../com/hbm/items/armor/IDamageHandler.java | 9 ++++ src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/main/ModEventHandler.java | 43 +++++++++++++++---- 7 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/hbm/items/armor/IAttackHandler.java create mode 100644 src/main/java/com/hbm/items/armor/IDamageHandler.java diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index 04b94c556..419f0f2e4 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import com.hbm.entity.mob.EntityDuck; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; @@ -115,6 +116,9 @@ public class HbmLivingProps implements IExtendedEntityProperties { public static void setDigamma(EntityLivingBase entity, float digamma) { + if(entity instanceof EntityDuck) + digamma = 0.0F; + getData(entity).digamma = digamma; float healthMod = (float)Math.pow(0.5, digamma) - 1F; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index a671930a8..e7719947d 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -4666,7 +4666,7 @@ public class ModItems { gas_mask_olde = new ArmorGasMask().setUnlocalizedName("gas_mask_olde").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_olde"); mask_rag = new ModArmor(aMatRags, 7, 0).setUnlocalizedName("mask_rag").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_rag"); mask_piss = new ModArmor(aMatRags, 7, 0).setUnlocalizedName("mask_piss").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_piss"); - hat = new ArmorHat(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("nossy_hat").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":hat"); + hat = new ArmorHat(MainRegistry.aMatAlloy, 7, 0).setUnlocalizedName("nossy_hat").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":hat"); beta = new ItemDrop().setUnlocalizedName("beta").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":beta"); //oxy_mask = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("oxy_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":oxy_mask"); diff --git a/src/main/java/com/hbm/items/armor/ArmorHat.java b/src/main/java/com/hbm/items/armor/ArmorHat.java index d97c543b1..b76fbe16b 100644 --- a/src/main/java/com/hbm/items/armor/ArmorHat.java +++ b/src/main/java/com/hbm/items/armor/ArmorHat.java @@ -1,8 +1,15 @@ package com.hbm.items.armor; -import net.minecraft.entity.item.EntityItem; +import java.util.List; -public class ArmorHat extends ArmorModel { +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +public class ArmorHat extends ArmorModel implements IAttackHandler, IDamageHandler { public ArmorHat(ArmorMaterial armorMaterial, int renderIndex, int armorType) { super(armorMaterial, renderIndex, armorType); @@ -14,4 +21,32 @@ public class ArmorHat extends ArmorModel { return true; } + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.BLUE + "+2 DT"); + } + + @Override + public void handleDamage(LivingHurtEvent event, ItemStack stack) { + + if(event.source.isUnblockable()) + return; + + event.ammount -= 2F; + + if(event.ammount < 0) + event.ammount = 0; + } + + @Override + public void handleAttack(LivingAttackEvent event, ItemStack armor) { + + if(event.source.isUnblockable()) + return; + + if(event.ammount <= 2F) { + event.entityLiving.worldObj.playSoundAtEntity(event.entityLiving, "random.break", 5F, 1.0F + event.entityLiving.getRNG().nextFloat() * 0.5F); + event.setCanceled(true); + } + } } diff --git a/src/main/java/com/hbm/items/armor/IAttackHandler.java b/src/main/java/com/hbm/items/armor/IAttackHandler.java new file mode 100644 index 000000000..68fbb3a44 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/IAttackHandler.java @@ -0,0 +1,9 @@ +package com.hbm.items.armor; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingAttackEvent; + +public interface IAttackHandler { + + public void handleAttack(LivingAttackEvent event, ItemStack armor); +} diff --git a/src/main/java/com/hbm/items/armor/IDamageHandler.java b/src/main/java/com/hbm/items/armor/IDamageHandler.java new file mode 100644 index 000000000..45e670160 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/IDamageHandler.java @@ -0,0 +1,9 @@ +package com.hbm.items.armor; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +public interface IDamageHandler { + + public void handleDamage(LivingHurtEvent event, ItemStack stack); +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 358a84a13..3f300ce7a 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -493,6 +493,7 @@ public class MainRegistry { EntityRegistry.registerGlobalEntityID(EntityFBI.class, "entity_ntm_fbi", EntityRegistry.findGlobalUniqueEntityId(), 0x008000, 0x404040); EntityRegistry.registerGlobalEntityID(EntityRADBeast.class, "entity_ntm_radiation_blaze", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x008000); EntityRegistry.registerGlobalEntityID(EntitySiegeZombie.class, "entity_meme_zombie", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x008000); + EntityRegistry.registerGlobalEntityID(EntitySiegeSkeleton.class, "entity_meme_skeleton", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x000080); EntityRegistry.registerGlobalEntityID(EntitySiegeUFO.class, "entity_meme_ufo", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x800000); EntityRegistry.registerModEntity(EntitySPV.class, "entity_self_propelled_vehicle_mark_1", 160, this, 1000, 1, true); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 52a5fd106..5c85e2a64 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -38,6 +38,8 @@ import com.hbm.handler.SiegeOrchestrator; import com.hbm.items.IEquipReceiver; import com.hbm.items.ModItems; import com.hbm.items.armor.ArmorFSB; +import com.hbm.items.armor.IAttackHandler; +import com.hbm.items.armor.IDamageHandler; import com.hbm.items.armor.ItemArmorMod; import com.hbm.items.armor.ItemModRevive; import com.hbm.items.armor.ItemModShackles; @@ -882,13 +884,24 @@ public class ModEventHandler { EntityLivingBase e = event.entityLiving; - if(e instanceof EntityPlayer && ArmorUtil.checkArmor((EntityPlayer)e, ModItems.euphemium_helmet, ModItems.euphemium_plate, ModItems.euphemium_legs, ModItems.euphemium_boots)) { - e.worldObj.playSoundAtEntity(e, "random.break", 5F, 1.0F + e.getRNG().nextFloat() * 0.5F); - event.setCanceled(true); + if(e instanceof EntityPlayer) { + + EntityPlayer player = (EntityPlayer) e; + + if(ArmorUtil.checkArmor(player, ModItems.euphemium_helmet, ModItems.euphemium_plate, ModItems.euphemium_legs, ModItems.euphemium_boots)) { + e.worldObj.playSoundAtEntity(e, "random.break", 5F, 1.0F + e.getRNG().nextFloat() * 0.5F); + event.setCanceled(true); + } + + if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof ArmorFSB) + ((ArmorFSB)player.inventory.armorInventory[2].getItem()).handleAttack(event); + + for(ItemStack stack : player.inventory.armorInventory) { + if(stack != null && stack.getItem() instanceof IAttackHandler) { + ((IAttackHandler)stack.getItem()).handleAttack(event, stack); + } + } } - - if(e instanceof EntityPlayer && ((EntityPlayer)e).inventory.armorInventory[2] != null && ((EntityPlayer)e).inventory.armorInventory[2].getItem() instanceof ArmorFSB) - ((ArmorFSB)((EntityPlayer)e).inventory.armorInventory[2].getItem()).handleAttack(event); } @SubscribeEvent @@ -932,9 +945,21 @@ public class ModEventHandler { } } - /// FSB ARMOR /// - if(e instanceof EntityPlayer && ((EntityPlayer)e).inventory.armorInventory[2] != null && ((EntityPlayer)e).inventory.armorInventory[2].getItem() instanceof ArmorFSB) - ((ArmorFSB)((EntityPlayer)e).inventory.armorInventory[2].getItem()).handleHurt(event); + if(e instanceof EntityPlayer) { + + EntityPlayer player = (EntityPlayer) e; + + /// FSB ARMOR /// + if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof ArmorFSB) + ((ArmorFSB)player.inventory.armorInventory[2].getItem()).handleHurt(event); + + + for(ItemStack stack : player.inventory.armorInventory) { + if(stack != null && stack.getItem() instanceof IDamageHandler) { + ((IDamageHandler)stack.getItem()).handleDamage(event, stack); + } + } + } } @SubscribeEvent