100 lines
3.5 KiB
Java
100 lines
3.5 KiB
Java
package resonantinduction.atomic.fission;
|
|
|
|
import java.util.List;
|
|
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
import net.minecraftforge.fluids.FluidStack;
|
|
import resonant.api.IReactor;
|
|
import resonant.api.IReactorComponent;
|
|
import resonantinduction.atomic.Atomic;
|
|
import resonantinduction.core.Settings;
|
|
import universalelectricity.api.vector.Vector3;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
/** Fissile fuel rod */
|
|
public class ItemFissileFuel extends ItemRadioactive implements IReactorComponent
|
|
{
|
|
public static final int DECAY = 2500;
|
|
|
|
/** Temperature at which the fuel rod will begin to re-enrich itself. */
|
|
public static final int BREEDING_TEMP = 1200;
|
|
|
|
/** The energy in one KG of uranium is: 72PJ, 100TJ in one cell of uranium. */
|
|
public static final long ENERGY = 100000000000L;
|
|
|
|
/** Approximately 20,000,000J per tick. 400 MW. */
|
|
public static final long ENERGY_PER_TICK = ENERGY / 50000;
|
|
|
|
public ItemFissileFuel(int itemID)
|
|
{
|
|
super(itemID);
|
|
this.setMaxStackSize(1);
|
|
this.setMaxDamage(DECAY);
|
|
this.setNoRepair();
|
|
}
|
|
|
|
@Override
|
|
public void onReact(ItemStack itemStack, IReactor reactor)
|
|
{
|
|
TileEntity tileEntity = (TileEntity) reactor;
|
|
World worldObj = tileEntity.worldObj;
|
|
int reactors = 0;
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
Vector3 checkPos = new Vector3(tileEntity).translate(ForgeDirection.getOrientation(i));
|
|
TileEntity tile = checkPos.getTileEntity(worldObj);
|
|
|
|
// Check that the other reactors not only exist but also are running.
|
|
if (tile instanceof IReactor && ((IReactor) tile).getTemperature() > BREEDING_TEMP)
|
|
{
|
|
reactors++;
|
|
}
|
|
}
|
|
|
|
// Only three reactor cells are required to begin the uranium breeding process instead of four.
|
|
if (reactors >= 3)
|
|
{
|
|
// Begin the process of re-enriching the uranium rod but not consistently.
|
|
if (worldObj.rand.nextInt(1000) <= 100 && reactor.getTemperature() > BREEDING_TEMP)
|
|
{
|
|
// Cells can regain a random amount of health per tick.
|
|
int healAmt = worldObj.rand.nextInt(5);
|
|
itemStack.setItemDamage(Math.max(itemStack.getItemDamage() - healAmt, 0));
|
|
// System.out.println("[Atomic Science] [Reactor Cell] Breeding " + String.valueOf(healAmt) + " back into fissle rod. " + String.valueOf(itemStack.getItemDamage()) + " / " + String.valueOf(itemStack.getMaxDamage()));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
reactor.heat(ENERGY_PER_TICK);
|
|
|
|
if (reactor.world().getWorldTime() % 20 == 0)
|
|
{
|
|
itemStack.setItemDamage(Math.min(itemStack.getItemDamage() + 1, itemStack.getMaxDamage()));
|
|
}
|
|
|
|
// Create toxic waste.
|
|
if (Settings.allowToxicWaste && worldObj.rand.nextFloat() > 0.5)
|
|
{
|
|
FluidStack fluid = Atomic.FLUIDSTACK_TOXIC_WASTE.copy();
|
|
fluid.amount = 1;
|
|
reactor.fill(ForgeDirection.UNKNOWN, fluid, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
|
|
{
|
|
par3List.add(new ItemStack(par1, 1, 0));
|
|
par3List.add(new ItemStack(par1, 1, getMaxDamage() - 1));
|
|
}
|
|
|
|
}
|