001    package net.minecraftforge.common;
002    
003    import java.util.UUID;
004    
005    import cpw.mods.fml.common.FMLLog;
006    
007    import net.minecraft.entity.Entity;
008    import net.minecraft.entity.item.EntityItem;
009    import net.minecraft.item.Item;
010    import net.minecraft.item.ItemStack;
011    import net.minecraftforge.event.*;
012    import net.minecraftforge.event.entity.*;
013    import net.minecraftforge.event.world.WorldEvent;
014    
015    public 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    }