package joshie.progression.criteria.filters.location; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.IHasEventBus; import joshie.progression.helpers.PlayerHelper; import joshie.progression.lib.WorldLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.BlockEvent; 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.UUID; @ProgressionRule(name="playerBroken", color=0xFFBBBBBB) public class FilterPlayerLastBroken extends FilterLocationBase implements IHasEventBus { private static final HashMap<UUID, BlockPos> cache = new HashMap(); @SubscribeEvent(priority = EventPriority.LOWEST) public void onBlockBroken(BlockEvent.BreakEvent event) { if (event.getPlayer() != null) { cache.put(PlayerHelper.getUUIDForPlayer(event.getPlayer()), event.getPos()); } } @Override public EventBus getEventBus() { return MinecraftForge.EVENT_BUS; } @Override public WorldLocation getRandom(EntityPlayer player) { UUID uuid = PlayerHelper.getUUIDForPlayer(player); if (cache.get(uuid) == null) return null; else return new WorldLocation(player.dimension, cache.get(uuid)); } @Override public boolean matches(WorldLocation location) { return true; } }