package openmods.entity;
import com.google.common.base.Supplier;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
import java.util.WeakHashMap;
import net.minecraft.entity.Entity;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
public class DelayedEntityLoadManager {
public static final DelayedEntityLoadManager instance = new DelayedEntityLoadManager();
private DelayedEntityLoadManager() {}
private Multimap<Integer, IEntityLoadListener> delayedLoads = Multimaps.newSetMultimap(
new HashMap<Integer, Collection<IEntityLoadListener>>(),
new Supplier<Set<IEntityLoadListener>>() {
@Override
public Set<IEntityLoadListener> get() {
return Sets.newSetFromMap(new WeakHashMap<IEntityLoadListener, Boolean>());
}
});
@SubscribeEvent
public void onEntityCreate(EntityJoinWorldEvent evt) {
final Entity entity = evt.entity;
for (IEntityLoadListener callback : delayedLoads.removeAll(entity.getEntityId()))
callback.onEntityLoaded(entity);
}
public void registerLoadListener(World world, IEntityLoadListener listener, int entityId) {
Entity entity = world.getEntityByID(entityId);
if (entity == null) delayedLoads.put(entityId, listener);
else listener.onEntityLoaded(entity);
}
}