BloodMagic/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralContainer.java

150 lines
4 KiB
Java
Raw Normal View History

package WayofTime.alchemicalWizardry.common.tileEntity;
import net.minecraft.block.Block;
2015-07-29 08:23:01 -04:00
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
2015-07-29 08:23:01 -04:00
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity;
2015-07-29 08:23:01 -04:00
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.IFluidBlock;
2015-07-29 08:23:01 -04:00
import WayofTime.alchemicalWizardry.ModBlocks;
2015-07-29 08:23:01 -04:00
public class TESpectralContainer extends TileEntity implements IUpdatePlayerListBox
{
private ItemStack[] inv;
2014-10-13 22:33:20 +02:00
private int ticksRemaining;
public TESpectralContainer()
{
this.inv = new ItemStack[1];
ticksRemaining = 0;
}
@Override
public void readFromNBT(NBTTagCompound par1NBTTagCompound)
{
super.readFromNBT(par1NBTTagCompound);
NBTTagList tagList = par1NBTTagCompound.getTagList("Inventory", Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < tagList.tagCount(); i++)
{
NBTTagCompound tag = tagList.getCompoundTagAt(i);
int slot = tag.getByte("Slot");
if (slot >= 0 && slot < inv.length)
{
inv[slot] = ItemStack.loadItemStackFromNBT(tag);
}
}
ticksRemaining = par1NBTTagCompound.getInteger("ticksRemaining");
}
@Override
public void writeToNBT(NBTTagCompound par1NBTTagCompound)
{
super.writeToNBT(par1NBTTagCompound);
NBTTagList itemList = new NBTTagList();
for (int i = 0; i < inv.length; i++)
{
if (inv[i] != null)
{
NBTTagCompound tag = new NBTTagCompound();
tag.setByte("Slot", (byte) i);
inv[i].writeToNBT(tag);
itemList.appendTag(tag);
}
}
par1NBTTagCompound.setTag("Inventory", itemList);
2014-10-13 22:33:20 +02:00
par1NBTTagCompound.setInteger("ticksRemaining", ticksRemaining);
}
2014-10-13 22:33:20 +02:00
@Override
2015-07-29 08:23:01 -04:00
public void update()
{
this.ticksRemaining--;
2014-10-13 22:33:20 +02:00
if (this.ticksRemaining <= 0)
{
2014-10-13 22:33:20 +02:00
this.returnContainedBlock();
}
2014-10-13 22:33:20 +02:00
}
2015-07-29 08:23:01 -04:00
public static boolean createSpectralBlockAtLocation(World world, BlockPos pos, int duration)
{
2015-07-29 08:23:01 -04:00
IBlockState state = world.getBlockState(pos);
Block block = state.getBlock();
2014-10-13 22:33:20 +02:00
if (block == null)
{
return false;
}
2015-07-29 08:23:01 -04:00
if (world.getTileEntity(pos) == null || block instanceof IFluidBlock)
2014-10-13 22:33:20 +02:00
{
2015-07-29 08:23:01 -04:00
int meta = block.getMetaFromState(state);
2014-10-13 22:33:20 +02:00
ItemStack item = new ItemStack(block, 1, meta);
2015-07-29 08:23:01 -04:00
world.setBlockState(pos, ModBlocks.blockSpectralContainer.getDefaultState());
TileEntity tile = world.getTileEntity(pos);
2014-10-13 22:33:20 +02:00
if (tile instanceof TESpectralContainer)
{
((TESpectralContainer) tile).setContainedItem(item);
((TESpectralContainer) tile).setDuration(duration);
return true;
}
}
return false;
}
2014-10-13 22:33:20 +02:00
public void setDuration(int dur)
{
2014-10-13 22:33:20 +02:00
this.ticksRemaining = dur;
}
2014-10-13 22:33:20 +02:00
public void resetDuration(int dur)
{
2014-10-13 22:33:20 +02:00
if (this.ticksRemaining < dur)
{
this.ticksRemaining = dur;
}
}
2014-10-13 22:33:20 +02:00
public void setContainedItem(ItemStack item)
{
2014-10-13 22:33:20 +02:00
this.inv[0] = item;
}
2014-10-13 22:33:20 +02:00
public void returnContainedBlock()
{
2014-10-13 22:33:20 +02:00
ItemStack item = this.inv[0];
if (item != null)
{
if (item.getItem() instanceof ItemBlock)
{
2015-07-29 08:23:01 -04:00
Block block = ((ItemBlock) item.getItem()).getBlock();
2014-10-13 22:33:20 +02:00
int meta = item.getItemDamage();
if (block != null)
{
2015-07-29 08:23:01 -04:00
this.worldObj.setBlockState(pos, block.getStateFromMeta(meta), 6);
2014-10-13 22:33:20 +02:00
}
}
} else
{
2015-07-29 08:23:01 -04:00
this.worldObj.setBlockToAir(pos);
2014-10-13 22:33:20 +02:00
}
}
}