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.ListHelper; import joshie.progression.helpers.PlayerHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.AttackEntityEvent; 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="lastHit", color=0xFFB25900) public class FilterLastHitEntity extends FilterBaseEntity implements IHasEventBus { private static final HashMap<UUID, EntityLivingBase> cache = new HashMap(); @SubscribeEvent(priority = EventPriority.LOW) public void onEvent(AttackEntityEvent event) { if (!event.getTarget().getEntityWorld().isRemote) { if (event.getTarget() instanceof EntityLivingBase) { cache.put(PlayerHelper.getUUIDForPlayer(event.getEntityPlayer()), (EntityLivingBase) event.getTarget()); } } } @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)); return ListHelper.newArrayList(existing); } return Lists.newArrayList(); } @Override protected boolean matches(EntityLivingBase entity) { return true; } }