226 lines
6.3 KiB
Java
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;
|
|
}
|
|
}
|