Firebox can now boil water above it into steam
This commit is contained in:
parent
a0ec8a83c0
commit
f2275bf689
2 changed files with 51 additions and 15 deletions
|
@ -2,6 +2,7 @@ package resonantinduction.archaic.firebox;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.renderer.texture.IconRegister;
|
import net.minecraft.client.renderer.texture.IconRegister;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
@ -102,24 +103,31 @@ public class BlockFirebox extends BlockRI
|
||||||
|
|
||||||
if (((TileFirebox) tileEntity).isBurning())
|
if (((TileFirebox) tileEntity).isBurning())
|
||||||
{
|
{
|
||||||
int l = world.getBlockMetadata(x, y, z);
|
float xDisplace = x + 0.5F;
|
||||||
float f = x + 0.5F;
|
float yDisplace = y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
|
||||||
float f1 = y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
|
float zDisplace = z + 0.5F;
|
||||||
float f2 = z + 0.5F;
|
float modifier = 0.52F;
|
||||||
float f3 = 0.52F;
|
float randomValue = par5Random.nextFloat() * 0.6F - 0.3F;
|
||||||
float f4 = par5Random.nextFloat() * 0.6F - 0.3F;
|
|
||||||
|
|
||||||
world.spawnParticle("smoke", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("smoke", xDisplace - modifier, yDisplace, zDisplace + randomValue, 0.0D, 0.0D, 0.0D);
|
||||||
world.spawnParticle("flame", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("flame", xDisplace - modifier, yDisplace, zDisplace + randomValue, 0.0D, 0.0D, 0.0D);
|
||||||
|
|
||||||
world.spawnParticle("smoke", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("smoke", xDisplace + modifier, yDisplace, zDisplace + randomValue, 0.0D, 0.0D, 0.0D);
|
||||||
world.spawnParticle("flame", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("flame", xDisplace + modifier, yDisplace, zDisplace + randomValue, 0.0D, 0.0D, 0.0D);
|
||||||
|
|
||||||
world.spawnParticle("smoke", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("smoke", xDisplace + randomValue, yDisplace, zDisplace - modifier, 0.0D, 0.0D, 0.0D);
|
||||||
world.spawnParticle("flame", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("flame", xDisplace + randomValue, yDisplace, zDisplace - modifier, 0.0D, 0.0D, 0.0D);
|
||||||
|
|
||||||
world.spawnParticle("smoke", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("smoke", xDisplace + randomValue, yDisplace, zDisplace + modifier, 0.0D, 0.0D, 0.0D);
|
||||||
world.spawnParticle("flame", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
|
world.spawnParticle("flame", xDisplace + randomValue, yDisplace, zDisplace + modifier, 0.0D, 0.0D, 0.0D);
|
||||||
|
|
||||||
|
int blockIDAbove = world.getBlockId(x, y + 1, z);
|
||||||
|
|
||||||
|
if (blockIDAbove == Block.waterStill.blockID || blockIDAbove == Block.waterMoving.blockID)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
world.spawnParticle("bubble", xDisplace + (par5Random.nextFloat() - 0.5), yDisplace + 1.5, zDisplace + (par5Random.nextFloat() - 0.5), 0.0D, 0.05D, 0.0D);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,16 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.packet.Packet;
|
import net.minecraft.network.packet.Packet;
|
||||||
import net.minecraft.tileentity.TileEntityFurnace;
|
import net.minecraft.tileentity.TileEntityFurnace;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||||
|
import net.minecraftforge.fluids.FluidRegistry;
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import resonantinduction.core.ResonantInduction;
|
import resonantinduction.core.ResonantInduction;
|
||||||
|
import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.network.IPacketReceiver;
|
import calclavia.lib.network.IPacketReceiver;
|
||||||
import calclavia.lib.network.IPacketSender;
|
import calclavia.lib.network.IPacketSender;
|
||||||
import calclavia.lib.prefab.tile.TileExternalInventory;
|
import calclavia.lib.prefab.tile.TileExternalInventory;
|
||||||
|
import calclavia.lib.thermal.BoilEvent;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
|
@ -24,12 +30,20 @@ import com.google.common.io.ByteArrayDataInput;
|
||||||
public class TileFirebox extends TileExternalInventory implements IPacketSender, IPacketReceiver
|
public class TileFirebox extends TileExternalInventory implements IPacketSender, IPacketReceiver
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
* One coal = 4MJ, one coal lasts 80 seconds. Therefore, we are producing 50000 watts.
|
||||||
* The power of the firebox in terms of thermal energy. The thermal energy can be transfered
|
* The power of the firebox in terms of thermal energy. The thermal energy can be transfered
|
||||||
* into fluids to increase their internal energy.
|
* into fluids to increase their internal energy.
|
||||||
*/
|
*/
|
||||||
private final int POWER = 50000;
|
private final long POWER = 50000;
|
||||||
private int burnTime;
|
private int burnTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* It takes 338260 J to boile water.
|
||||||
|
*/
|
||||||
|
private final long requiredBoilWaterEnergy = 338260;
|
||||||
|
private long boilEnergy = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateEntity()
|
public void updateEntity()
|
||||||
{
|
{
|
||||||
|
@ -44,6 +58,20 @@ public class TileFirebox extends TileExternalInventory implements IPacketSender,
|
||||||
worldObj.setBlock(xCoord, yCoord + 1, zCoord, Block.fire.blockID);
|
worldObj.setBlock(xCoord, yCoord + 1, zCoord, Block.fire.blockID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (blockID == Block.waterStill.blockID || blockID == Block.waterMoving.blockID)
|
||||||
|
{
|
||||||
|
boilEnergy += POWER / 20;
|
||||||
|
|
||||||
|
if (boilEnergy >= requiredBoilWaterEnergy)
|
||||||
|
{
|
||||||
|
if (FluidRegistry.getFluid("steam") != null)
|
||||||
|
MinecraftForge.EVENT_BUS.post(new BoilEvent(worldObj, new Vector3(this).translate(0, 1, 0), new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), new FluidStack(FluidRegistry.getFluid("steam"), FluidContainerRegistry.BUCKET_VOLUME), 2));
|
||||||
|
|
||||||
|
worldObj.setBlock(xCoord, yCoord + 1, zCoord, 0);
|
||||||
|
boilEnergy = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (--burnTime == 0)
|
if (--burnTime == 0)
|
||||||
{
|
{
|
||||||
if (blockID == Block.fire.blockID)
|
if (blockID == Block.fire.blockID)
|
||||||
|
|
Loading…
Reference in a new issue