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            ForgeChunkManager.loadEntity(event.entity);
023        }
024
025        Entity entity = event.entity;
026        if (entity.getClass().equals(EntityItem.class))
027        {
028            ItemStack stack = entity.getDataWatcher().getWatchableObjectItemStack(10);
029
030            if (stack == null)
031            {
032                //entity.setDead();
033                //event.setCanceled(true);
034                return;
035            }
036
037            Item item = stack.getItem();
038            if (item == null)
039            {
040                FMLLog.warning("Attempted to add a EntityItem to the world with a invalid item: ID %d at " +
041                    "(%2.2f,  %2.2f, %2.2f), this is most likely a config issue between you and the server. Please double check your configs",
042                    stack.itemID, entity.posX, entity.posY, entity.posZ);
043                entity.setDead();
044                event.setCanceled(true);
045                return;
046            }
047
048            if (item.hasCustomEntity(stack))
049            {
050                Entity newEntity = item.createEntity(event.world, entity, stack);
051                if (newEntity != null)
052                {
053                    entity.setDead();
054                    event.setCanceled(true);
055                    event.world.spawnEntityInWorld(newEntity);
056                }
057            }
058        }
059    }
060
061    @ForgeSubscribe(priority = EventPriority.HIGHEST)
062    public void onDimensionLoad(WorldEvent.Load event)
063    {
064        ForgeChunkManager.loadWorld(event.world);
065    }
066
067    @ForgeSubscribe(priority = EventPriority.HIGHEST)
068    public void onDimensionSave(WorldEvent.Save event)
069    {
070        ForgeChunkManager.saveWorld(event.world);
071    }
072
073    @ForgeSubscribe(priority = EventPriority.HIGHEST)
074    public void onDimensionUnload(WorldEvent.Unload event)
075    {
076        ForgeChunkManager.unloadWorld(event.world);
077    }
078}