BloodMagic/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMimicBlock.java
2015-07-28 13:49:26 -04:00

226 lines
6.3 KiB
Java

package WayofTime.alchemicalWizardry.common.tileEntity;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import WayofTime.alchemicalWizardry.ModBlocks;
import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent;
import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry;
import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm;
import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry;
public class TEMimicBlock extends TileEntity
{
private ItemStack[] inv;
public Reagent reagent;
private int ticksRemaining;
public TEMimicBlock()
{
this.inv = new ItemStack[1];
ticksRemaining = 0;
}
@Override
public Packet getDescriptionPacket()
{
NBTTagCompound nbttagcompound = new NBTTagCompound();
writeToNBT(nbttagcompound);
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, -999, nbttagcompound);
}
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
{
super.onDataPacket(net, packet);
readFromNBT(packet.func_148857_g());
}
@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");
reagent = ReagentRegistry.getReagentForKey(par1NBTTagCompound.getString("reagent"));
}
@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);
par1NBTTagCompound.setInteger("ticksRemaining", ticksRemaining);
par1NBTTagCompound.setString("reagent", ReagentRegistry.getKeyForReagent(reagent));
}
@Override
public void updateEntity()
{
super.updateEntity();
this.ticksRemaining--;
if (this.ticksRemaining <= 0)
{
this.returnContainedBlock();
}
}
public static boolean createMimicBlockAtLocation(World world, int x, int y, int z, int duration, Block block, int meta, Reagent reagent)
{
if (block == null)
{
return false;
}
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity == null && world.isAirBlock(x, y, z))
{
ItemStack item = new ItemStack(block, 1, meta);
world.setBlock(x, y, z, ModBlocks.blockMimic);
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TEMimicBlock)
{
((TEMimicBlock) tile).setContainedItem(item);
((TEMimicBlock) tile).setDuration(duration);
((TEMimicBlock) tile).reagent = reagent;
world.markBlockForUpdate(x, y, z);
return true;
}
}else
{
if(tileEntity instanceof TEMimicBlock)
{
if(((TEMimicBlock) tileEntity).getBlock() == block && ((TEMimicBlock) tileEntity).getMetaOfMimic() == meta)
{
((TEMimicBlock) tileEntity).ticksRemaining = Math.max(duration, ((TEMimicBlock) tileEntity).ticksRemaining);
}
}
}
return false;
}
public static boolean createMimicBlockAtLocation(World world, int x, int y, int z, int duration, Block block, int meta)
{
return createMimicBlockAtLocation(world, x, y, z, duration, block, meta);
}
public void setDuration(int dur)
{
this.ticksRemaining = dur;
}
public void resetDuration(int dur)
{
if (this.ticksRemaining < dur)
{
this.ticksRemaining = dur;
}
}
public void setContainedItem(ItemStack item)
{
this.inv[0] = item;
}
public void returnContainedBlock()
{
// ItemStack item = this.inv[0];
// if (item != null)
// {
// if (item.getItem() instanceof ItemBlock)
// {
// Block block = ((ItemBlock) item.getItem()).field_150939_a;
// int meta = item.getItemDamage();
//
// if (block != null)
// {
// this.worldObj.setBlock(xCoord, yCoord, zCoord, block, meta, 6);
// }
// }
//
// } else
{
this.worldObj.setBlockToAir(xCoord, yCoord, zCoord);
}
}
public Block getBlock()
{
ItemStack item = this.inv[0];
if(item != null)
{
if (item.getItem() instanceof ItemBlock)
{
return ((ItemBlock) item.getItem()).field_150939_a;
}
}
return null;
}
public int getMetaOfMimic()
{
ItemStack item = this.inv[0];
if(item != null)
{
return item.getItemDamage();
}
return 0;
}
public boolean getBlockEffectWhileInside(Entity entity, int x, int y, int z)
{
if(reagent != null)
{
OmegaParadigm paradigm = OmegaRegistry.getParadigmForReagent(reagent);
if(paradigm != null)
{
return paradigm.getBlockEffectWhileInside(entity, x, y, z);
}
}
return false;
}
}