package com.harry9137.ct.tileentity;
import com.harry9137.ct.energy.IEnergyContainer;
import com.harry9137.ct.utillity.ListHelper;
import com.harry9137.ct.utillity.TileHelper;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class TileEntityOreGen extends TileEntity implements IEnergyContainer, ITickUpdater {
private int Tick = 0;
public int PowerStored = 0;
private boolean end = false;
private boolean generatedOre = false;
@Override
public void updateEntity(){
ArrayList<ItemStack> ores = new ArrayList<ItemStack>(1);
for(String oreName : OreDictionary.getOreNames()){
if(oreName.toLowerCase().startsWith("ore")) {
ores = ListHelper.combine2(new ArrayList<ItemStack>(OreDictionary.getOres(oreName)), ores);
}
}
if(Tick == 40 && PowerStored > 0){
Tick = 0;
int randomInt = 0;
Random randomGenerator = new Random();
if(ores.size() > 0) {
randomInt = randomGenerator.nextInt(ores.size());
}
ItemStack oreToGen = ores.get(randomInt);
for(TileEntity entity : TileHelper.getBlockSides(this)){
if(entity instanceof IInventory && end == false){
int size = ((IInventory) entity).getSizeInventory();
for(int i = 0; i < size; i++){
if(generatedOre == false) {
try {
if (((IInventory) entity).getStackInSlot(i) != null) {
if (((IInventory) entity).getStackInSlot(i).getItem().equals(oreToGen.getItem()) && ((IInventory) entity).getStackInSlot(i).stackSize < ((IInventory) entity).getInventoryStackLimit()) {
if(!worldObj.isRemote) {
((IInventory) entity).getStackInSlot(i).stackSize++;
this.setPowerLevel(this.getEnergyLevel() - 50);
}
generatedOre = true;
}
} else if (((IInventory) entity).getStackInSlot(i) == null) {
if(!worldObj.isRemote) {
((IInventory) entity).setInventorySlotContents(i, oreToGen);
this.setPowerLevel(this.getEnergyLevel() - 50);
}
generatedOre = true;
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
this.generatedOre = false;
this.end = true;
}
}
this.end = false;
}
Tick++;
}
@Override
public int getEnergyLevel() {
return PowerStored;
}
@Override
public boolean getCanSendPower() {
return false;
}
@Override
public boolean getCanReceivePower() {
if(PowerStored > this.getEnergyMax()) {
return false;
}
else{
return true;
}
}
@Override
public int getEnergyMax() {
return 1000;
}
@Override
public void onEnergyUpdate() {
}
@Override
public void setPowerLevel(int powerLevel) {
this.PowerStored = powerLevel;
}
@Override
public void readFromNBT(NBTTagCompound tagCompound){
super.readFromNBT(tagCompound);
this.PowerStored = tagCompound.getInteger("PowerStored");
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
tagCompound.setInteger("PowerStored", this.PowerStored);
}
}