mods and attribute modifiers for armors

This commit is contained in:
Bob 2021-01-28 23:46:46 +01:00
parent 956a7bb106
commit 565133eefb
16 changed files with 241 additions and 7 deletions

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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