Fix GUIs not closing when the TileEntity is removed/destroyed

This commit is contained in:
Pahimar 2015-05-27 21:37:55 -04:00
parent a13833c18b
commit 38e9f313c5
22 changed files with 213 additions and 59 deletions

View File

@ -10,7 +10,6 @@ import com.pahimar.ee3.tileentity.TileEntityAlchemicalChestMedium;
import com.pahimar.ee3.tileentity.TileEntityAlchemicalChestSmall;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
@ -22,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.List;
public class BlockAlchemicalChest extends BlockEE implements ITileEntityProvider
public class BlockAlchemicalChest extends BlockTileEntityEE
{
public BlockAlchemicalChest()
{
@ -93,14 +92,6 @@ public class BlockAlchemicalChest extends BlockEE implements ITileEntityProvider
}
}
@Override
public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventData)
{
super.onBlockEventReceived(world, x, y, z, eventId, eventData);
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null && tileentity.receiveClientEvent(eventId, eventData);
}
@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list)

View File

@ -11,7 +11,6 @@ import com.pahimar.ee3.tileentity.TileEntityEE;
import com.pahimar.ee3.util.CommonSoundHelper;
import com.pahimar.ee3.util.EntityHelper;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@ -30,7 +29,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.Random;
public class BlockAlchemyArray extends BlockEE implements ITileEntityProvider
public class BlockAlchemyArray extends BlockTileEntityEE
{
public BlockAlchemyArray()
{

View File

@ -9,7 +9,6 @@ import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileEntityAludel;
import com.pahimar.ee3.tileentity.TileEntityGlassBell;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@ -22,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.Random;
public class BlockAludel extends BlockEE implements ITileEntityProvider
public class BlockAludel extends BlockTileEntityEE
{
public BlockAludel()
{
@ -126,14 +125,6 @@ public class BlockAludel extends BlockEE implements ITileEntityProvider
}
}
@Override
public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventData)
{
super.onBlockEventReceived(world, x, y, z, eventId, eventData);
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null && tileentity.receiveClientEvent(eventId, eventData);
}
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z)
{

View File

@ -5,13 +5,12 @@ import com.pahimar.ee3.reference.GUIs;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileEntityAugmentationTable;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockAugmentationTable extends BlockEE implements ITileEntityProvider
public class BlockAugmentationTable extends BlockTileEntityEE
{
public BlockAugmentationTable()
{

View File

@ -6,7 +6,6 @@ import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.Particles;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileEntityCalcinator;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
@ -15,7 +14,7 @@ import net.minecraft.world.World;
import java.util.Random;
public class BlockCalcinator extends BlockEE implements ITileEntityProvider
public class BlockCalcinator extends BlockTileEntityEE
{
public BlockCalcinator()
{
@ -56,21 +55,12 @@ public class BlockCalcinator extends BlockEE implements ITileEntityProvider
{
if (((TileEntityCalcinator) world.getTileEntity(x, y, z)).getState() == 1)
{
// Fire pot particles
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 0.5F, (double) y + 0.4F, (double) ((z + 0.5F) + (random.nextFloat() * 0.5F - 0.3F)), 0.0D, 0.0D, 0.0D);
world.spawnParticle(Particles.FLAME, (double) x + 0.5F, (double) y + 0.4F, (double) z + 0.5F, 0.0D, 0.0D, 0.0D);
}
}
}
@Override
public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventData)
{
super.onBlockEventReceived(world, x, y, z, eventId, eventData);
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null && tileentity.receiveClientEvent(eventId, eventData);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
{

View File

@ -6,7 +6,6 @@ import com.pahimar.ee3.tileentity.TileEntityAlchemyArray;
import com.pahimar.ee3.tileentity.TileEntityDummyArray;
import com.pahimar.ee3.tileentity.TileEntityEE;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@ -23,7 +22,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.Random;
public class BlockDummyArray extends BlockEE implements ITileEntityProvider
public class BlockDummyArray extends BlockTileEntityEE
{
public BlockDummyArray()
{

View File

@ -7,7 +7,6 @@ import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileEntityAludel;
import com.pahimar.ee3.tileentity.TileEntityEE;
import com.pahimar.ee3.tileentity.TileEntityGlassBell;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@ -19,7 +18,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockGlassBell extends BlockEE implements ITileEntityProvider
public class BlockGlassBell extends BlockTileEntityEE
{
public BlockGlassBell()
{

View File

@ -5,13 +5,12 @@ import com.pahimar.ee3.reference.GUIs;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileEntityResearchStation;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockResearchStation extends BlockEE implements ITileEntityProvider
public class BlockResearchStation extends BlockTileEntityEE
{
public BlockResearchStation()
{

View File

@ -0,0 +1,131 @@
package com.pahimar.ee3.block;
import com.pahimar.ee3.creativetab.CreativeTab;
import com.pahimar.ee3.reference.Textures;
import com.pahimar.ee3.tileentity.TileEntityEE;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.Random;
public abstract class BlockTileEntityEE extends BlockContainer
{
protected BlockTileEntityEE(Material material)
{
super(material);
this.setCreativeTab(CreativeTab.EE3_TAB);
}
@Override
public String getUnlocalizedName()
{
return String.format("tile.%s%s", Textures.RESOURCE_PREFIX, getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister)
{
blockIcon = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName())));
}
protected String getUnwrappedUnlocalizedName(String unlocalizedName)
{
return unlocalizedName.substring(unlocalizedName.indexOf(".") + 1);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta)
{
dropInventory(world, x, y, z);
super.breakBlock(world, x, y, z, block, meta);
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLiving, ItemStack itemStack)
{
super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack);
if (world.getTileEntity(x, y, z) instanceof TileEntityEE)
{
int direction = 0;
int facing = MathHelper.floor_double(entityLiving.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if (facing == 0)
{
direction = ForgeDirection.NORTH.ordinal();
}
else if (facing == 1)
{
direction = ForgeDirection.EAST.ordinal();
}
else if (facing == 2)
{
direction = ForgeDirection.SOUTH.ordinal();
}
else if (facing == 3)
{
direction = ForgeDirection.WEST.ordinal();
}
if (itemStack.hasDisplayName())
{
((TileEntityEE) world.getTileEntity(x, y, z)).setCustomName(itemStack.getDisplayName());
}
((TileEntityEE) world.getTileEntity(x, y, z)).setOrientation(direction);
}
}
protected void dropInventory(World world, int x, int y, int z)
{
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (!(tileEntity instanceof IInventory))
{
return;
}
IInventory inventory = (IInventory) tileEntity;
for (int i = 0; i < inventory.getSizeInventory(); i++)
{
ItemStack itemStack = inventory.getStackInSlot(i);
if (itemStack != null && itemStack.stackSize > 0)
{
Random rand = new Random();
float dX = rand.nextFloat() * 0.8F + 0.1F;
float dY = rand.nextFloat() * 0.8F + 0.1F;
float dZ = rand.nextFloat() * 0.8F + 0.1F;
EntityItem entityItem = new EntityItem(world, x + dX, y + dY, z + dZ, itemStack.copy());
if (itemStack.hasTagCompound())
{
entityItem.getEntityItem().setTagCompound((NBTTagCompound) itemStack.getTagCompound().copy());
}
float factor = 0.05F;
entityItem.motionX = rand.nextGaussian() * factor;
entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
entityItem.motionZ = rand.nextGaussian() * factor;
world.spawnEntityInWorld(entityItem);
itemStack.stackSize = 0;
}
}
}
}

View File

@ -6,7 +6,6 @@ import com.pahimar.ee3.reference.GUIs;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
@ -16,7 +15,7 @@ import net.minecraft.world.World;
import java.util.Random;
public class BlockTransmutationTablet extends BlockEE implements ITileEntityProvider
public class BlockTransmutationTablet extends BlockTileEntityEE
{
public BlockTransmutationTablet()
{

View File

@ -13,16 +13,16 @@ public class ModBlocks
{
public static final BlockEE chalkBlock = new BlockChalk();
public static final BlockEE alchemicalFuelBlock = new BlockAlchemicalFuel();
public static final BlockEE alchemicalChest = new BlockAlchemicalChest();
public static final BlockEE aludel = new BlockAludel();
public static final BlockEE calcinator = new BlockCalcinator();
public static final BlockEE glassBell = new BlockGlassBell();
public static final BlockEE researchStation = new BlockResearchStation();
public static final BlockEE augmentationTable = new BlockAugmentationTable();
public static final BlockTileEntityEE alchemicalChest = new BlockAlchemicalChest();
public static final BlockTileEntityEE aludel = new BlockAludel();
public static final BlockTileEntityEE calcinator = new BlockCalcinator();
public static final BlockTileEntityEE glassBell = new BlockGlassBell();
public static final BlockTileEntityEE researchStation = new BlockResearchStation();
public static final BlockTileEntityEE augmentationTable = new BlockAugmentationTable();
public static final BlockEE ashInfusedStone = new BlockAshInfusedStone();
public static final BlockEE alchemyArray = new BlockAlchemyArray();
public static final BlockEE dummyArray = new BlockDummyArray();
public static final BlockEE transmutationTablet = new BlockTransmutationTablet();
public static final BlockTileEntityEE alchemyArray = new BlockAlchemyArray();
public static final BlockTileEntityEE dummyArray = new BlockDummyArray();
public static final BlockTileEntityEE transmutationTablet = new BlockTransmutationTablet();
public static final Block ashInfusedStoneSlab = new BlockAshInfusedStoneSlab();
public static void init()

View File

@ -132,6 +132,12 @@ public class ContainerAlchemicalBag extends ContainerEE
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return true;
}
public boolean isItemStackParent(ItemStack itemStack)
{
if (NBTHelper.hasUUID(itemStack))

View File

@ -114,6 +114,12 @@ public class ContainerAlchemicalChest extends ContainerEE
tileEntityAlchemicalChest.closeInventory();
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileEntityAlchemicalChest.isUseableByPlayer(entityPlayer);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex)
{

View File

@ -131,6 +131,12 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return true;
}
public int getInventorySize()
{
return inventoryAlchemicalTome.getSizeInventory();

View File

@ -190,4 +190,10 @@ public class ContainerAludel extends ContainerEE
this.tileEntityAludel.itemCookTime = updatedValue;
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileEntityAludel.isUseableByPlayer(entityPlayer);
}
}

View File

@ -108,4 +108,10 @@ public class ContainerAugmentationTable extends ContainerEE
return itemStack;
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileEntityAugmentationTable.isUseableByPlayer(entityPlayer);
}
}

View File

@ -169,6 +169,12 @@ public class ContainerCalcinator extends ContainerEE
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileEntityCalcinator.isUseableByPlayer(entityPlayer);
}
private class SlotCalcinator extends Slot
{
public SlotCalcinator(IInventory inventory, int slotIndex, int x, int y)

View File

@ -1,7 +1,6 @@
package com.pahimar.ee3.inventory;
import com.pahimar.ee3.util.ItemHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
@ -11,12 +10,6 @@ public abstract class ContainerEE extends Container
protected final int PLAYER_INVENTORY_ROWS = 3;
protected final int PLAYER_INVENTORY_COLUMNS = 9;
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return true;
}
@Override
protected boolean mergeItemStack(ItemStack itemStack, int slotMin, int slotMax, boolean ascending)
{

View File

@ -8,8 +8,11 @@ import net.minecraft.item.ItemStack;
public class ContainerGlassBell extends ContainerEE
{
private TileEntityGlassBell tileGlassBell;
public ContainerGlassBell(InventoryPlayer inventoryPlayer, TileEntityGlassBell tileGlassBell)
{
this.tileGlassBell = tileGlassBell;
this.addSlotToContainer(new Slot(tileGlassBell, TileEntityGlassBell.DISPLAY_SLOT_INVENTORY_INDEX, 80, 26));
// Add the player's inventory slots to the container
@ -67,4 +70,10 @@ public class ContainerGlassBell extends ContainerEE
return itemStack;
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileGlassBell.isUseableByPlayer(entityPlayer);
}
}

View File

@ -133,6 +133,12 @@ public class ContainerResearchStation extends ContainerEE
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileEntityResearchStation.isUseableByPlayer(entityPlayer);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex)
{

View File

@ -1,5 +1,12 @@
package com.pahimar.ee3.inventory;
import net.minecraft.entity.player.EntityPlayer;
public class ContainerSymbolSelection extends ContainerEE
{
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return true;
}
}

View File

@ -119,4 +119,10 @@ public class ContainerTransmutationArray extends ContainerEE
return itemStack;
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer)
{
return this.tileEntityAlchemyArray.isUseableByPlayer(entityPlayer);
}
}