package joshie.progression.criteria.filters.entity; import com.google.common.collect.Lists; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.IHasEventBus; import joshie.progression.helpers.EntityHelper; import joshie.progression.helpers.ListHelper; import joshie.progression.helpers.PlayerHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.fml.common.eventhandler.EventBus; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.HashMap; import java.util.List; import java.util.UUID; @ProgressionRule(name="lastKilled", color=0xFFB25900) public class FilterLastKilledEntity extends FilterBaseEntity implements IHasEventBus { private static final HashMap<UUID, EntityLivingBase> cache = new HashMap(); @SubscribeEvent(priority = EventPriority.LOW) public void onEvent(LivingDeathEvent event) { if (!event.getEntityLiving().worldObj.isRemote) { Entity source = event.getSource().getSourceOfDamage(); if (source instanceof EntityPlayer) { cache.put(PlayerHelper.getUUIDForPlayer((EntityPlayer) source), event.getEntityLiving()); } } } @Override public EventBus getEventBus() { return MinecraftForge.EVENT_BUS; } @Override public List<EntityLivingBase> getRandom(EntityPlayer player) { if (cache.get(PlayerHelper.getUUIDForPlayer(player)) != null) { EntityLivingBase existing = cache.get(PlayerHelper.getUUIDForPlayer(player)); NBTTagCompound tag = new NBTTagCompound(); existing.writeToNBT(tag); return ListHelper.newArrayList(EntityHelper.clone(player.worldObj, existing, tag, this)); } return Lists.newArrayList(); } @Override protected boolean matches(EntityLivingBase entity) { return true; } }