some improved damage handling code for armor

This commit is contained in:
Boblet 2022-01-21 15:21:16 +01:00
parent 503e5169bc
commit 458500f35e
7 changed files with 95 additions and 12 deletions

View File

@ -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;

View File

@ -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");

View File

@ -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);
}
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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