package openmods.world;
import com.google.common.collect.Lists;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
public class DropCapture {
public class CaptureContext {
private final AxisAlignedBB aabb;
private final List<EntityItem> drops = Lists.newArrayList();
public CaptureContext(AxisAlignedBB aabb) {
this.aabb = aabb;
}
private boolean check(EntityItem item) {
if (!item.isDead && aabb.intersectsWith(item.boundingBox)) {
drops.add(item);
return true;
}
return false;
}
public List<EntityItem> stop() {
captures.remove(this);
return drops;
}
}
public static final DropCapture instance = new DropCapture();
private final List<CaptureContext> captures = Lists.newArrayList();
public CaptureContext start(AxisAlignedBB aabb) {
CaptureContext context = new CaptureContext(aabb);
captures.add(context);
return context;
}
public CaptureContext start(int x, int y, int z) {
return start(AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1));
}
@SubscribeEvent
public void onEntityConstruct(EntityJoinWorldEvent evt) {
final Entity e = evt.entity;
if (e != null
&& e.getClass() == EntityItem.class
&& !e.worldObj.isRemote) {
final EntityItem ei = (EntityItem)e;
for (CaptureContext c : captures)
if (c.check(ei)) break;
}
}
}