package com.arkcraft.module.core.common.handlers;
import java.util.Iterator;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.IGuiHandler;
import com.arkcraft.lib.LogHelper;
import com.arkcraft.module.blocks.client.gui.GUICompostBin;
import com.arkcraft.module.blocks.client.gui.GUICropPlot;
import com.arkcraft.module.blocks.client.gui.GUIForge;
import com.arkcraft.module.blocks.client.gui.GuiMP;
import com.arkcraft.module.blocks.client.gui.GuiPlayerCrafting;
import com.arkcraft.module.blocks.client.gui.GuiSmithy;
import com.arkcraft.module.blocks.common.container.ContainerInventoryCompostBin;
import com.arkcraft.module.blocks.common.container.ContainerInventoryCropPlot;
import com.arkcraft.module.blocks.common.container.ContainerInventoryForge;
import com.arkcraft.module.blocks.common.container.ContainerInventoryMP;
import com.arkcraft.module.blocks.common.container.ContainerInventoryPlayerCrafting;
import com.arkcraft.module.blocks.common.container.ContainerInventorySmithy;
import com.arkcraft.module.blocks.common.tile.TileInventoryCompostBin;
import com.arkcraft.module.blocks.common.tile.TileInventoryCropPlot;
import com.arkcraft.module.blocks.common.tile.TileInventoryForge;
import com.arkcraft.module.blocks.common.tile.TileInventoryMP;
import com.arkcraft.module.blocks.common.tile.TileInventorySmithy;
import com.arkcraft.module.core.GlobalAdditions;
import com.arkcraft.module.core.client.gui.book.BookData;
import com.arkcraft.module.core.client.gui.book.BookDataStore;
import com.arkcraft.module.core.client.gui.book.GuiDossier;
import com.arkcraft.module.creature.client.gui.GuiInventoryDino;
import com.arkcraft.module.creature.client.gui.GuiInventoryDodo;
import com.arkcraft.module.creature.client.gui.test.GuiInventoryTaming;
import com.arkcraft.module.creature.common.container.ContainerInventoryDino;
import com.arkcraft.module.creature.common.container.ContainerInventoryDodo;
import com.arkcraft.module.creature.common.container.test.ContainerInventoryTaming;
import com.arkcraft.module.creature.common.entity.EntityARKCreature;
import com.arkcraft.module.creature.common.entity.EntityTameableDinosaur;
import com.arkcraft.module.creature.common.entity.passive.EntityDodo;
import com.arkcraft.module.weapon.client.gui.GUIAttachment;
import com.arkcraft.module.weapon.common.container.ContainerInventoryAttachment;
import com.arkcraft.module.weapon.common.container.inventory.InventoryAttachment;
public class GuiHandler implements IGuiHandler
{
public static EntityARKCreature rightClickedEntity;
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if (world.isRemote)
{
LogHelper
.info("GuiHandler: getServerGuiElement called from client");
}
else
{
LogHelper
.info("GuiHandler: getServerGuiElement called from server");
}
if (ID == GlobalAdditions.GUI.SMITHY.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventorySmithy)
{
return new ContainerInventorySmithy(player.inventory,
(TileInventorySmithy) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getServerGuiElement: TileEntitySmithy not found!");
}
}
else if (ID == GlobalAdditions.GUI.PESTLE_AND_MORTAR.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryMP)
{
return new ContainerInventoryMP(player.inventory,
(TileInventoryMP) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getServerGuiElement: TileEntityMP not found!");
}
}
else if (ID == GlobalAdditions.GUI.COMPOST_BIN.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryCompostBin)
{
return new ContainerInventoryCompostBin(player.inventory,
(TileInventoryCompostBin) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntityCompostBin not found!");
}
}
else if (ID == GlobalAdditions.GUI.FORGE_GUI.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryForge)
{
return new ContainerInventoryForge(player.inventory,
(TileInventoryForge) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntityForge not found!");
}
}
else if (ID == GlobalAdditions.GUI.CROP_PLOT.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryCropPlot)
{
return new ContainerInventoryCropPlot(player.inventory,
(TileInventoryCropPlot) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getServerGuiElement: TileEntityCropPlot not found!");
}
}
else if (ID == GlobalAdditions.GUI.INV_DODO.getID())
{
Entity entity = getEntityAt(player, x, y, z);
if (entity != null && entity instanceof EntityDodo)
{
return new ContainerInventoryDodo(player.inventory,
((EntityDodo) entity).invDodo, (EntityDodo) entity);
}
else
{
LogHelper
.error("GuiHandler - getServerGuiElement: Did not find entity with inventory!");
}
}
// else if (ID == GlobalAdditions.GUI.SCOPE_GUI.getID()) {
// Entity entity = getEntityAt(player, x, y, z);
// if (entity != null && entity instanceof EntityDodo)
// return null;
// else
// LogHelper.error("GuiHandler - getServerGuiElement: Did not find entity with inventory!");
// }
else if (ID == GlobalAdditions.GUI.TAMING_GUI.getID())
{
// Entity entity = getEntityAt(player, x, y, z);
if (rightClickedEntity != null)
{
EntityARKCreature creature = rightClickedEntity;
rightClickedEntity = null;
// creature.setSitting(true);
// if (dino.invTaming.getTorporTime() == 0)
// {
// dino.invTaming.setTorporTime((short) 60);
// }
return new ContainerInventoryTaming(player, creature);
}
else
{
LogHelper
.error("GuiHandler - getServerGuiElement: Did not find entity to tame!");
}
}
else if (ID == GlobalAdditions.GUI.PLAYER.getID())
{
return new ContainerInventoryPlayerCrafting(player.inventory,
player);
}
else if (ID == GlobalAdditions.GUI.ATTACHMENT_GUI.getID())
{
return new ContainerInventoryAttachment(player, player.inventory,
InventoryAttachment.create(player.getHeldItem()));
}
else if (ID == GlobalAdditions.GUI.TAMED_DINO.getID())
{
Entity entity = getEntityAt(player, x, y, z);
if (entity != null && entity instanceof EntityTameableDinosaur)
{
EntityTameableDinosaur dino = (EntityTameableDinosaur) entity;
return new ContainerInventoryDino(player.inventory,
dino.invTamedDino, dino);
}
else
{
LogHelper
.error("GuiHandler - getServerGuiElement: Did not find tamed dino!");
}
}
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if (world.isRemote)
{
LogHelper
.info("GuiHandler: getClientGuiElement called from client");
}
else
{
LogHelper
.info("GuiHandler: getClientGuiElement called from server");
}
if (ID == GlobalAdditions.GUI.SMITHY.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventorySmithy)
{
return new GuiSmithy(player.inventory,
(TileInventorySmithy) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntitySmithy not found!");
}
}
else if (ID == GlobalAdditions.GUI.PESTLE_AND_MORTAR.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryMP)
{
return new GuiMP(player.inventory, (TileInventoryMP) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntityMP not found!");
}
}
else if (ID == GlobalAdditions.GUI.CROP_PLOT.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryCropPlot)
{
return new GUICropPlot(player.inventory,
(TileInventoryCropPlot) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntityCropPlot not found!");
}
}
else if (ID == GlobalAdditions.GUI.FORGE_GUI.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryForge)
{
return new GUIForge(player.inventory,
(TileInventoryForge) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntityForge not found!");
}
}
else if (ID == GlobalAdditions.GUI.COMPOST_BIN.getID())
{
BlockPos xyz = new BlockPos(x, y, z);
TileEntity tileEntity = world.getTileEntity(xyz);
if (tileEntity instanceof TileInventoryCompostBin)
{
return new GUICompostBin(player.inventory,
(TileInventoryCompostBin) tileEntity);
}
else
{
LogHelper
.info("GuiHandler - getClientGuiElement: TileEntityCompostBin not found!");
}
}
else if (ID == GlobalAdditions.GUI.BOOK_GUI.getID())
{
LogHelper
.info("GuiHandler - getClientGuiElement(): GuiDossier book trying to open.");
ItemStack stack = player.getCurrentEquippedItem();
if (stack == null)
{
LogHelper.info("Stack in GuiHandler is null!");
}
if (stack != null && stack.getUnlocalizedName() == null)
{
LogHelper.info("Stack in GuiHandler is null!");
}
return new GuiDossier(stack, GuiHandler.getBookDataFromStack(stack));
}
else if (ID == GlobalAdditions.GUI.INV_DODO.getID())
{
Entity entity = getEntityAt(player, x, y, z);
if (entity != null && entity instanceof EntityDodo)
{
return new GuiInventoryDodo(player.inventory,
((EntityDodo) entity).invDodo, (EntityDodo) entity);
}
else
{
LogHelper
.error("GuiHandler - getClientGuiElement: Did not find entity with inventory!");
}
}
// else if (ID == GlobalAdditions.GUI.SCOPE_GUI.getID()) {
// Entity entity = getEntityAt(player, x, y, z);
// if (entity != null && entity instanceof EntityDodo)
// return null;
// else
// LogHelper.error("GuiHandler - getServerGuiElement: Did not find entity with inventory!");
// }
else if (ID == GlobalAdditions.GUI.TAMING_GUI.getID())
{
Entity entity = getEntityAt(player, x, y, z);
if (entity != null)
{
EntityARKCreature dino = (EntityARKCreature) entity;
dino.setSitting(true);
// if (dino.invTaming.getTorporTime() == 0)
// {
// dino.invTaming.setTorporTime((short) 60);
// }
return new GuiInventoryTaming(player, dino);
}
else
{
LogHelper
.error("GuiHandler - getClientGuiElement: Did not find entity to tame!");
}
}
else if (ID == GlobalAdditions.GUI.PLAYER.getID())
{
return new GuiPlayerCrafting(player.inventory, player);
}
else if (ID == GlobalAdditions.GUI.ATTACHMENT_GUI.getID())
{
return new GUIAttachment(player, player.inventory,
InventoryAttachment.create(player.getHeldItem()));
}
else if (ID == GlobalAdditions.GUI.TAMED_DINO.getID())
{
Entity entity = getEntityAt(player, x, y, z);
if (entity != null && entity instanceof EntityTameableDinosaur)
{
EntityTameableDinosaur dino = (EntityTameableDinosaur) entity;
return new GuiInventoryDino(player.inventory,
((EntityTameableDinosaur) entity).invTamedDino, dino);
}
else
{
LogHelper
.error("GuiHandler - getClientGuiElement: Did not find tamed dino!");
}
}
return null;
}
private Entity getEntityAt(EntityPlayer player, int x, int y, int z)
{
AxisAlignedBB targetBox = new AxisAlignedBB(x - 1, y - 1, z - 1, x + 1,
y + 1, z + 1);
@SuppressWarnings("rawtypes")
List entities = player.worldObj.getEntitiesWithinAABBExcludingEntity(
player, targetBox);
@SuppressWarnings("rawtypes")
Iterator iterator = entities.iterator();
while (iterator.hasNext())
{
Entity entity = (Entity) iterator.next();
if (entity instanceof EntityARKCreature)
{
LogHelper.info("GuiHandler: Found entity!");
return entity;
}
}
return null;
}
private static BookData getBookDataFromStack(ItemStack stack)
{
return BookDataStore.getBookFromName(stack.getUnlocalizedName());
}
}