package eiteam.esteemedinnovation.transport.item;
import eiteam.esteemedinnovation.api.tile.SteamTransporterTileEntity;
import eiteam.esteemedinnovation.commons.EsteemedInnovation;
import eiteam.esteemedinnovation.transport.TransportationModule;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
public class TileEntityItemMortar extends SteamTransporterTileEntity implements IInventory {
public int xTarget;
public int zTarget;
public boolean hasTarget = false;
public int fireTicks = 0;
private ItemStack inventory;
public TileEntityItemMortar() {
super(new EnumFacing[] {
EnumFacing.DOWN,
EnumFacing.NORTH,
EnumFacing.SOUTH,
EnumFacing.EAST,
EnumFacing.WEST
});
addSidesToGaugeBlacklist(EnumFacing.VALUES);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
xTarget = nbt.getShort("xTarget");
zTarget = nbt.getShort("zTarget");
fireTicks = nbt.getShort("fireTicks");
hasTarget = nbt.getBoolean("hasTarget");
if (nbt.hasKey("inventory")) {
inventory = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("inventory"));
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setShort("xTarget", (short) xTarget);
nbt.setShort("zTarget", (short) zTarget);
nbt.setShort("fireTicks", (short) fireTicks);
nbt.setBoolean("hasTarget", hasTarget);
if (inventory != null) {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
inventory.writeToNBT(nbttagcompound1);
nbt.setTag("inventory", nbttagcompound1);
}
return nbt;
}
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
NBTTagCompound access = super.getUpdateTag();
access.setInteger("fireTicks", fireTicks);
access.setInteger("xTarget", xTarget);
access.setInteger("zTarget", zTarget);
return new SPacketUpdateTileEntity(pos, 1, access);
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
super.onDataPacket(net, pkt);
NBTTagCompound access = pkt.getNbtCompound();
xTarget = access.getInteger("xTarget");
zTarget = access.getInteger("zTarget");
fireTicks = access.getInteger("fireTicks");
}
@Override
public boolean canUpdate(IBlockState target) {
return target.getBlock() == TransportationModule.ITEM_MORTAR;
}
@Override
public void safeUpdate() {
if (!worldObj.isRemote) {
BlockPos thisPos = new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ());
ItemStack stackInSlotZero = getStackInSlot(0);
if ((stackInSlotZero != null && worldObj.canBlockSeeSky(thisPos)) || fireTicks >= 60) {
ItemStack stack = null;
if (fireTicks < 60 && stackInSlotZero != null) {
stack = stackInSlotZero.copy();
}
if (getSteamShare() > 2000 && hasTarget) {
if (fireTicks == 0) {
markForResync();
}
fireTicks++;
if (fireTicks == 10) {
worldObj.playSound(pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F,
EsteemedInnovation.SOUND_HISS, SoundCategory.BLOCKS, Blocks.ANVIL.getSoundType().getVolume(), 0.9F, false);
}
if (fireTicks == 60 && stack != null) {
worldObj.playSound(pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F,
EsteemedInnovation.SOUND_CANNON, SoundCategory.BLOCKS, 2F, 0.8F, false);
decrSteam(2000);
ItemStack stack2 = stack.copy();
stack2.stackSize = 1;
EntityMortarItem entityItem = new EntityMortarItem(worldObj, pos.getX() + 0.5F,
pos.getY() + 1.25F, pos.getZ() + 0.5F, stack2, xTarget, zTarget);
worldObj.spawnEntityInWorld(entityItem);
entityItem.motionY = 1.0F;
if (stack.stackSize > 1) {
stack.stackSize--;
setInventorySlotContents(0, stack);
} else {
setInventorySlotContents(0, null);
}
}
if (fireTicks == 80) {
fireTicks = 0;
}
} else {
fireTicks = 0;
markForResync();
}
} else {
fireTicks = 0;
markForResync();
}
} else {
if (fireTicks > 0) {
fireTicks++;
if (fireTicks == 80) {
fireTicks = 0;
}
}
}
super.safeUpdate();
}
@Override
public int getSizeInventory() {
return 1;
}
@Override
public ItemStack getStackInSlot(int slot) {
return this.inventory;
}
@Override
public ItemStack decrStackSize(int slot, int var2) {
if (inventory != null) {
ItemStack itemstack;
if (inventory.stackSize <= var2) {
itemstack = inventory;
inventory = null;
return itemstack;
} else {
itemstack = inventory.splitStack(var2);
if (inventory.stackSize == 0) {
inventory = null;
}
return itemstack;
}
} else {
return null;
}
}
@Override
public ItemStack removeStackFromSlot(int slot) {
return inventory;
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack) {
inventory = stack;
}
@Override
public String getName() {
return null;
}
@Override
public boolean hasCustomName() {
return false;
}
@Override
public ITextComponent getDisplayName() {
return null;
}
@Override
public int getInventoryStackLimit() {
return 1;
}
@Override
public boolean isUseableByPlayer(EntityPlayer var1) {
return true;
}
@Override
public void openInventory(EntityPlayer player) {
}
@Override
public void closeInventory(EntityPlayer player) {}
@Override
public boolean isItemValidForSlot(int var1, ItemStack var2) {
return true;
}
@Override
public int getField(int id) {
switch (id) {
case 0: {
return fireTicks;
}
case 1: {
return xTarget;
}
case 2: {
return zTarget;
}
default: {
return 0;
}
}
}
@Override
public void setField(int id, int value) {
switch (id) {
case 0: {
fireTicks = value;
return;
}
case 1: {
xTarget = value;
return;
}
case 2: {
zTarget = value;
return;
}
default: {}
}
}
@Override
public int getFieldCount() {
return 3;
}
@Override
public void clear() {
inventory = null;
}
}