/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.util.misc; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import mods.railcraft.common.plugins.forge.ChatPlugin; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.util.DamageSource; import net.minecraft.util.IChatComponent; import net.minecraftforge.event.entity.living.LivingDropsEvent; /** * * @author CovertJaguar <http://www.railcraft.info/> */ public class RailcraftDamageSource extends DamageSource { public static final RailcraftDamageSource BORE = new RailcraftDamageSource("bore"); public static final RailcraftDamageSource CRUSHER = new RailcraftDamageSource("crusher", 8); public static final RailcraftDamageSource STEAM = new RailcraftDamageSource("steam"); public static final RailcraftDamageSource TRACK_ELECTRIC = new RailcraftDamageSource("track.electric"); public static final RailcraftDamageSource TRAIN = new RailcraftDamageSource("train"); static { BORE.setDamageBypassesArmor(); TRACK_ELECTRIC.setDamageBypassesArmor(); TRAIN.setDamageBypassesArmor(); } private final int numMessages; private RailcraftDamageSource(String tag) { this(tag, 6); } private RailcraftDamageSource(String tag, int numMessages) { super(tag); this.numMessages = numMessages; } @Override public IChatComponent func_151519_b(EntityLivingBase entity) { String locTag = "death.railcraft." + damageType + "." + (MiscTools.getRand().nextInt(numMessages) + 1); return ChatPlugin.chatComp(locTag, entity.getCommandSenderName()); } public static final EventHandler EVENT_HANDLER = new EventHandler(); public static class EventHandler { @SubscribeEvent public void modifyDrops(LivingDropsEvent event) { if (event.source == STEAM) for (EntityItem entityItem : event.drops) { ItemStack drop = entityItem.getEntityItem(); ItemStack cooked = FurnaceRecipes.smelting().getSmeltingResult(drop); if (cooked != null && MiscTools.RANDOM.nextDouble() < 0.5) { cooked = cooked.copy(); cooked.stackSize = drop.stackSize; entityItem.setEntityItemStack(cooked); } } } } }