    001package net.minecraftforge.common;
    002
    003import java.util.UUID;
    004
    005import cpw.mods.fml.common.FMLLog;
    006
    007import net.minecraft.entity.Entity;
    008import net.minecraft.entity.item.EntityItem;
    009import net.minecraft.item.Item;
    010import net.minecraft.item.ItemStack;
    011import net.minecraftforge.event.*;
    012import net.minecraftforge.event.entity.*;
    013import net.minecraftforge.event.world.WorldEvent;
    014
    015public class ForgeInternalHandler
    016{
    017    @ForgeSubscribe(priority = EventPriority.HIGHEST)
    018    public void onEntityJoinWorld(EntityJoinWorldEvent event)
    019    {
    020        if (!event.world.isRemote)
    021        {
    022            if (event.entity.getPersistentID() == null)
    023            {
    024                event.entity.generatePersistentID();
    025            }
    026            else
    027            {
    028                ForgeChunkManager.loadEntity(event.entity);
    029            }
    030        }
    031
    032        Entity entity = event.entity;
    033        if (entity.getClass().equals(EntityItem.class))
    034        {
    035            ItemStack stack = entity.getDataWatcher().getWatchableObjectItemStack(10);
    036
    037            if (stack == null)
    038            {
    039                //entity.setDead();
    040                //event.setCanceled(true);
    041                return;
    042            }
    043
    044            Item item = stack.getItem();
    045            if (item == null)
    046            {
    047                FMLLog.warning("Attempted to add a EntityItem to the world with a invalid item: ID %d at " +
    048                    "(%2.2f,  %2.2f, %2.2f), this is most likely a config issue between you and the server. Please double check your configs",
    049                    stack.itemID, entity.posX, entity.posY, entity.posZ);
    050                entity.setDead();
    051                event.setCanceled(true);
    052                return;
    053            }
    054
    055            if (item.hasCustomEntity(stack))
    056            {
    057                Entity newEntity = item.createEntity(event.world, entity, stack);
    058                if (newEntity != null)
    059                {
    060                    entity.setDead();
    061                    event.setCanceled(true);
    062                    event.world.spawnEntityInWorld(newEntity);
    063                }
    064            }
    065        }
    066    }
    067
    068    @ForgeSubscribe(priority = EventPriority.HIGHEST)
    069    public void onDimensionLoad(WorldEvent.Load event)
    070    {
    071        ForgeChunkManager.loadWorld(event.world);
    072    }
    073
    074    @ForgeSubscribe(priority = EventPriority.HIGHEST)
    075    public void onDimensionSave(WorldEvent.Save event)
    076    {
    077        ForgeChunkManager.saveWorld(event.world);
    078    }
    079
    080    @ForgeSubscribe(priority = EventPriority.HIGHEST)
    081    public void onDimensionUnload(WorldEvent.Unload event)
    082    {
    083        ForgeChunkManager.unloadWorld(event.world);
    084    }
    085}