Converted plasma heater to scala, and fixed compile errors
This commit is contained in:
parent
6c07d98cf4
commit
9b74eeae49
12 changed files with 330 additions and 374 deletions
|
@ -18,14 +18,14 @@ object TileFilterable
|
||||||
final val BATERY_DRAIN_SLOT: Int = 1
|
final val BATERY_DRAIN_SLOT: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class TileFilterable extends TileInventory(Material.wood) with IRotatable with IFilterable
|
abstract class TileFilterable(material: Material) extends TileInventory(material: Material) with IRotatable with IFilterable
|
||||||
{
|
{
|
||||||
private var filterItem: ItemStack = null
|
private var filterItem: ItemStack = null
|
||||||
private var inverted: Boolean = false
|
private var inverted: Boolean = false
|
||||||
|
|
||||||
def this(material: Material)
|
def this()
|
||||||
{
|
{
|
||||||
this(material)
|
this(Material.wood)
|
||||||
this.setSizeInventory(2)
|
this.setSizeInventory(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import universalelectricity.core.transform.vector.VectorWorld
|
||||||
object PathfinderCrate
|
object PathfinderCrate
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
abstract trait IPathCallBack
|
abstract trait IPathCallBack
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -39,23 +40,32 @@ object PathfinderCrate
|
||||||
|
|
||||||
class PathfinderCrate
|
class PathfinderCrate
|
||||||
{
|
{
|
||||||
def this()
|
/**
|
||||||
{
|
* A pathfinding call back interface used to call back on paths.
|
||||||
this()
|
*/
|
||||||
this.callBackCheck = new PathfinderCrate.IPathCallBack
|
var callBackCheck: PathfinderCrate.IPathCallBack = null
|
||||||
{
|
/**
|
||||||
def isValidNode(finder: PathfinderCrate, direction: ForgeDirection, provider: TileEntity, node: TileEntity): Boolean =
|
* A list of nodes that the pathfinder went through.
|
||||||
{
|
*/
|
||||||
return node.isInstanceOf[TileCrate]
|
var iteratedNodes: List[TileEntity] = null
|
||||||
}
|
/**
|
||||||
|
* The results and findings found by the pathfinder.
|
||||||
|
*/
|
||||||
|
var results: List[Any] = null
|
||||||
|
|
||||||
def onSearch(finder: PathfinderCrate, provider: TileEntity): Boolean =
|
this.callBackCheck = new PathfinderCrate.IPathCallBack
|
||||||
{
|
{
|
||||||
return false
|
def isValidNode(finder: PathfinderCrate, direction: ForgeDirection, provider: TileEntity, node: TileEntity): Boolean =
|
||||||
}
|
{
|
||||||
|
return node.isInstanceOf[TileCrate]
|
||||||
|
}
|
||||||
|
|
||||||
|
def onSearch(finder: PathfinderCrate, provider: TileEntity): Boolean =
|
||||||
|
{
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
this.clear
|
|
||||||
}
|
}
|
||||||
|
this.clear
|
||||||
|
|
||||||
def findNodes(provider: TileEntity): Boolean =
|
def findNodes(provider: TileEntity): Boolean =
|
||||||
{
|
{
|
||||||
|
@ -98,20 +108,9 @@ class PathfinderCrate
|
||||||
def clear: PathfinderCrate =
|
def clear: PathfinderCrate =
|
||||||
{
|
{
|
||||||
this.iteratedNodes = new ArrayList[TileEntity]
|
this.iteratedNodes = new ArrayList[TileEntity]
|
||||||
this.results = new ArrayList[_]
|
this.results = new ArrayList[Any]
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A pathfinding call back interface used to call back on paths.
|
|
||||||
*/
|
|
||||||
var callBackCheck: PathfinderCrate.IPathCallBack = null
|
|
||||||
/**
|
|
||||||
* A list of nodes that the pathfinder went through.
|
|
||||||
*/
|
|
||||||
var iteratedNodes: List[TileEntity] = null
|
|
||||||
/**
|
|
||||||
* The results and findings found by the pathfinder.
|
|
||||||
*/
|
|
||||||
var results: List[_] = null
|
|
||||||
}
|
}
|
|
@ -27,8 +27,8 @@ class ItemAntimatter extends ItemCell
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister)
|
@SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister)
|
||||||
{
|
{
|
||||||
this.itemIcon = iconRegister.registerIcon(this.getUnlocalizedName.replace("item.", "") + "_milligram")
|
this.itemIcon = iconRegister.registerIcon(Reference.prefix + "antimatter_milligram")
|
||||||
this.iconGram = iconRegister.registerIcon(this.getUnlocalizedName.replace("item.", "") + "_gram")
|
this.iconGram = iconRegister.registerIcon(Reference.prefix + "antimatter_gram")
|
||||||
}
|
}
|
||||||
|
|
||||||
override def getIconFromDamage(metadata: Int): IIcon =
|
override def getIconFromDamage(metadata: Int): IIcon =
|
||||||
|
|
|
@ -22,11 +22,11 @@ class ItemCell extends ItemTooltip
|
||||||
|
|
||||||
override def getUnlocalizedName(itemstack: ItemStack): String =
|
override def getUnlocalizedName(itemstack: ItemStack): String =
|
||||||
{
|
{
|
||||||
val localized: String = LanguageUtility.getLocal(getUnlocalizedName + "." + itemstack.getItemDamage + ".name")
|
val localized: String = LanguageUtility.getLocal(getUnlocalizedName() + "." + itemstack.getItemDamage + ".name")
|
||||||
if (localized != null && !localized.isEmpty)
|
if (localized != null && !localized.isEmpty)
|
||||||
{
|
{
|
||||||
return getUnlocalizedName + "." + itemstack.getItemDamage
|
return getUnlocalizedName() + "." + itemstack.getItemDamage
|
||||||
}
|
}
|
||||||
return getUnlocalizedName
|
return getUnlocalizedName()
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -24,7 +24,7 @@ class ItemHazmat(slot: Int) extends ItemArmor(ItemHazmat.hazmatArmorMaterial, At
|
||||||
{
|
{
|
||||||
def this(name: String, slot: Int)
|
def this(name: String, slot: Int)
|
||||||
{
|
{
|
||||||
this(ItemHazmat.hazmatArmorMaterial, Atomic.proxy.getArmorIndex("hazmat"), slot)
|
this(slot)
|
||||||
this.setUnlocalizedName(Reference.prefix + name)
|
this.setUnlocalizedName(Reference.prefix + name)
|
||||||
this.setCreativeTab(ResonantTab.tab)
|
this.setCreativeTab(ResonantTab.tab)
|
||||||
this.setMaxDamage(200000)
|
this.setMaxDamage(200000)
|
||||||
|
|
|
@ -35,9 +35,9 @@ class ItemUranium extends ItemRadioactive
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def getUnlocalizedName(itemStack: ItemStack): String =
|
override def getUnlocalizedName(itemStack: ItemStack): java.lang.String =
|
||||||
{
|
{
|
||||||
return this.getUnlocalizedName + "." + itemStack.getItemDamage
|
return super.getUnlocalizedName() + "." + itemStack.getItemDamage
|
||||||
}
|
}
|
||||||
|
|
||||||
override def getSubItems(item: Item, par2CreativeTabs: CreativeTabs, list: List[_])
|
override def getSubItems(item: Item, par2CreativeTabs: CreativeTabs, list: List[_])
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class RenderPlasmaHeater extends RenderTaggedTile
|
||||||
bindTexture(TEXTURE);
|
bindTexture(TEXTURE);
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glRotated(Math.toDegrees(tileEntity.rotation), 0, 1, 0);
|
GL11.glRotated(Math.toDegrees(tileEntity.rotation()), 0, 1, 0);
|
||||||
MODEL.renderOnly("rrot", "srot");
|
MODEL.renderOnly("rrot", "srot");
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
package resonantinduction.atomic.machine.plasma;
|
|
||||||
|
|
||||||
import net.minecraft.block.material.Material;
|
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.init.Blocks;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.DamageSource;
|
|
||||||
import net.minecraft.world.IBlockAccess;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
import resonant.api.event.PlasmaEvent.SpawnPlasmaEvent;
|
|
||||||
import resonant.content.prefab.java.TileAdvanced;
|
|
||||||
import resonant.engine.grid.thermal.ThermalGrid;
|
|
||||||
import resonant.lib.config.Config;
|
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
|
||||||
import universalelectricity.core.transform.vector.VectorWorld;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class TilePlasma extends TileAdvanced
|
|
||||||
{
|
|
||||||
@Config
|
|
||||||
public static int plasmaMaxTemperature = 1000000;
|
|
||||||
private float temperature = plasmaMaxTemperature;
|
|
||||||
|
|
||||||
public TilePlasma()
|
|
||||||
{
|
|
||||||
super(Material.lava);
|
|
||||||
textureName_$eq("plasma");
|
|
||||||
isOpaqueCube(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getLightValue(IBlockAccess access)
|
|
||||||
{
|
|
||||||
return 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isSolid(IBlockAccess access, int side)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ArrayList<ItemStack> getDrops(int metadata, int fortune)
|
|
||||||
{
|
|
||||||
return new ArrayList<ItemStack>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getRenderBlockPass()
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void collide(Entity entity)
|
|
||||||
{
|
|
||||||
entity.attackEntityFrom(DamageSource.inFire, 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update()
|
|
||||||
{
|
|
||||||
super.update();
|
|
||||||
ThermalGrid.addTemperature(new VectorWorld(this), (temperature - ThermalGrid.getTemperature(new VectorWorld(this))) * 0.1f);
|
|
||||||
|
|
||||||
if (ticks() % 20 == 0)
|
|
||||||
{
|
|
||||||
temperature /= 1.5;
|
|
||||||
|
|
||||||
if (temperature <= plasmaMaxTemperature / 10)
|
|
||||||
{
|
|
||||||
worldObj.setBlock(xCoord, yCoord, zCoord, Blocks.fire, 0, 3);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
// Randomize spread direction.
|
|
||||||
if (worldObj.rand.nextFloat() > 0.4)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 diDian = new Vector3(this);
|
|
||||||
diDian.add(ForgeDirection.getOrientation(i));
|
|
||||||
|
|
||||||
TileEntity tileEntity = diDian.getTileEntity(worldObj);
|
|
||||||
|
|
||||||
if (!(tileEntity instanceof TilePlasma))
|
|
||||||
{
|
|
||||||
MinecraftForge.EVENT_BUS.post(new SpawnPlasmaEvent(worldObj, diDian.xi(), diDian.yi(), diDian.zi(), (int) temperature));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTemperature(int newTemperature)
|
|
||||||
{
|
|
||||||
temperature = newTemperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package resonantinduction.atomic.machine.plasma
|
||||||
|
|
||||||
|
import java.util.ArrayList
|
||||||
|
|
||||||
|
import net.minecraft.block.material.Material
|
||||||
|
import net.minecraft.entity.Entity
|
||||||
|
import net.minecraft.init.Blocks
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
import net.minecraft.util.DamageSource
|
||||||
|
import net.minecraft.world.IBlockAccess
|
||||||
|
import net.minecraftforge.common.MinecraftForge
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection
|
||||||
|
import resonant.api.event.PlasmaEvent
|
||||||
|
import resonant.content.prefab.java.TileAdvanced
|
||||||
|
import resonant.engine.grid.thermal.ThermalGrid
|
||||||
|
import resonant.lib.config.Config
|
||||||
|
import universalelectricity.core.transform.vector.{Vector3, VectorWorld}
|
||||||
|
|
||||||
|
object TilePlasma
|
||||||
|
{
|
||||||
|
@Config var plasmaMaxTemperature: Int = 1000000
|
||||||
|
}
|
||||||
|
|
||||||
|
class TilePlasma extends TileAdvanced(Material.lava)
|
||||||
|
{
|
||||||
|
private var temperature: Double = TilePlasma.plasmaMaxTemperature
|
||||||
|
|
||||||
|
//Constructor
|
||||||
|
textureName_$eq("plasma")
|
||||||
|
isOpaqueCube(false)
|
||||||
|
|
||||||
|
override def getLightValue(access: IBlockAccess): Int =
|
||||||
|
{
|
||||||
|
return 7
|
||||||
|
}
|
||||||
|
|
||||||
|
override def isSolid(access: IBlockAccess, side: Int): Boolean =
|
||||||
|
{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override def getDrops(metadata: Int, fortune: Int): ArrayList[ItemStack] =
|
||||||
|
{
|
||||||
|
return new ArrayList[ItemStack]
|
||||||
|
}
|
||||||
|
|
||||||
|
override def getRenderBlockPass: Int =
|
||||||
|
{
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
override def collide(entity: Entity)
|
||||||
|
{
|
||||||
|
entity.attackEntityFrom(DamageSource.inFire, 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def update
|
||||||
|
{
|
||||||
|
super.update
|
||||||
|
ThermalGrid.addTemperature(new VectorWorld(this), ((temperature - ThermalGrid.getTemperature(new VectorWorld(this))) * 0.1f).asInstanceOf[Float])
|
||||||
|
if (ticks % 20 == 0)
|
||||||
|
{
|
||||||
|
temperature /= 1.5
|
||||||
|
if (temperature <= TilePlasma.plasmaMaxTemperature / 10)
|
||||||
|
{
|
||||||
|
worldObj.setBlock(xCoord, yCoord, zCoord, Blocks.fire, 0, 3)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for (i <- 0 to 6)
|
||||||
|
{
|
||||||
|
if (worldObj.rand.nextFloat < 0.4)
|
||||||
|
{
|
||||||
|
val diDian: Vector3 = new Vector3(this)
|
||||||
|
diDian.add(ForgeDirection.getOrientation(i))
|
||||||
|
val tileEntity: TileEntity = diDian.getTileEntity(worldObj)
|
||||||
|
if (!(tileEntity.isInstanceOf[TilePlasma]))
|
||||||
|
{
|
||||||
|
MinecraftForge.EVENT_BUS.post(new PlasmaEvent.SpawnPlasmaEvent(worldObj, diDian.xi, diDian.yi, diDian.zi, temperature.asInstanceOf[Int]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def setTemperature(newTemperature: Int)
|
||||||
|
{
|
||||||
|
temperature = newTemperature
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,221 +0,0 @@
|
||||||
package resonantinduction.atomic.machine.plasma;
|
|
||||||
|
|
||||||
import cpw.mods.fml.common.network.ByteBufUtils;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import net.minecraft.block.material.Material;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.network.Packet;
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
import net.minecraftforge.fluids.*;
|
|
||||||
import resonant.api.ITagRender;
|
|
||||||
import resonant.engine.ResonantEngine;
|
|
||||||
import resonant.lib.config.Config;
|
|
||||||
import resonant.lib.content.prefab.java.TileElectric;
|
|
||||||
import resonant.lib.network.discriminator.PacketTile;
|
|
||||||
import resonant.lib.network.discriminator.PacketType;
|
|
||||||
import resonant.lib.network.handle.IPacketReceiver;
|
|
||||||
import resonant.lib.utility.FluidUtility;
|
|
||||||
import resonant.lib.utility.LanguageUtility;
|
|
||||||
import resonantinduction.atomic.AtomicContent;
|
|
||||||
import universalelectricity.api.UnitDisplay;
|
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
public class TilePlasmaHeater extends TileElectric implements IPacketReceiver, ITagRender, IFluidHandler
|
|
||||||
{
|
|
||||||
public static long joules = 10000000000L;
|
|
||||||
|
|
||||||
@Config
|
|
||||||
public static int plasmaHeatAmount = 100;
|
|
||||||
|
|
||||||
public final FluidTank tankInputDeuterium = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10);
|
|
||||||
public final FluidTank tankInputTritium = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10);
|
|
||||||
public final FluidTank tankOutput = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10);
|
|
||||||
|
|
||||||
public float rotation = 0;
|
|
||||||
|
|
||||||
public TilePlasmaHeater()
|
|
||||||
{
|
|
||||||
super(Material.iron);
|
|
||||||
energy().setCapacity(joules);
|
|
||||||
energy().setMaxTransfer(joules / 20);
|
|
||||||
normalRender(false);
|
|
||||||
isOpaqueCube(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update()
|
|
||||||
{
|
|
||||||
super.update();
|
|
||||||
|
|
||||||
rotation += energy().getEnergy() / 10000f;
|
|
||||||
|
|
||||||
if (!worldObj.isRemote)
|
|
||||||
{
|
|
||||||
if (energy().checkExtract())
|
|
||||||
{
|
|
||||||
// Creates plasma if there is enough Deuterium, Tritium AND Plasma output is not full.
|
|
||||||
if (tankInputDeuterium.getFluidAmount() >= plasmaHeatAmount &&
|
|
||||||
tankInputTritium.getFluidAmount() >= plasmaHeatAmount &&
|
|
||||||
tankOutput.getFluidAmount() < tankOutput.getCapacity())
|
|
||||||
{
|
|
||||||
tankInputDeuterium.drain(plasmaHeatAmount, true);
|
|
||||||
tankInputTritium.drain(plasmaHeatAmount, true);
|
|
||||||
tankOutput.fill(new FluidStack(AtomicContent.FLUID_PLASMA(), tankOutput.getCapacity()), true);
|
|
||||||
energy().extractEnergy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ticks() % 80 == 0)
|
|
||||||
{
|
|
||||||
world().markBlockForUpdate(x(), y(), z());
|
|
||||||
//PacketHandler.sendPacketToClients(getDescriptionPacket(), worldObj, new Vector3(this), 25);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Packet getDescriptionPacket()
|
|
||||||
{
|
|
||||||
NBTTagCompound nbt = new NBTTagCompound();
|
|
||||||
writeToNBT(nbt);
|
|
||||||
return ResonantEngine.instance.packetHandler.toMCPacket(new PacketTile(this, nbt));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void read(ByteBuf data, EntityPlayer player, PacketType type)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
readFromNBT(ByteBufUtils.readTag(data));
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads a tile entity from NBT.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void readFromNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.readFromNBT(nbt);
|
|
||||||
NBTTagCompound deuterium = nbt.getCompoundTag("tankInputDeuterium");
|
|
||||||
tankInputDeuterium.setFluid(FluidStack.loadFluidStackFromNBT(deuterium));
|
|
||||||
NBTTagCompound tritium = nbt.getCompoundTag("tankInputTritium");
|
|
||||||
tankInputTritium.setFluid(FluidStack.loadFluidStackFromNBT(tritium));
|
|
||||||
NBTTagCompound output = nbt.getCompoundTag("tankOutput");
|
|
||||||
tankOutput.setFluid(FluidStack.loadFluidStackFromNBT(output));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes a tile entity to NBT.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void writeToNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.writeToNBT(nbt);
|
|
||||||
|
|
||||||
if (tankInputDeuterium.getFluid() != null)
|
|
||||||
{
|
|
||||||
NBTTagCompound compound = new NBTTagCompound();
|
|
||||||
tankInputDeuterium.getFluid().writeToNBT(compound);
|
|
||||||
nbt.setTag("tankInputDeuterium", compound);
|
|
||||||
}
|
|
||||||
if (tankInputTritium.getFluid() != null)
|
|
||||||
{
|
|
||||||
NBTTagCompound compound = new NBTTagCompound();
|
|
||||||
tankInputTritium.getFluid().writeToNBT(compound);
|
|
||||||
nbt.setTag("tankInputTritium", compound);
|
|
||||||
}
|
|
||||||
if (tankOutput.getFluid() != null)
|
|
||||||
{
|
|
||||||
NBTTagCompound compound = new NBTTagCompound();
|
|
||||||
tankOutput.getFluid().writeToNBT(compound);
|
|
||||||
nbt.setTag("tankOutput", compound);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public float addInformation(HashMap<String, Integer> map, EntityPlayer player)
|
|
||||||
{
|
|
||||||
if (energy() != null)
|
|
||||||
{
|
|
||||||
map.put(LanguageUtility.getLocal("tooltip.energy") + ": " + new UnitDisplay(UnitDisplay.Unit.JOULES, energy().getEnergy()), 0xFFFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tankInputDeuterium.getFluidAmount() > 0)
|
|
||||||
{
|
|
||||||
map.put(LanguageUtility.getLocal("fluid.deuterium") + ": " + tankInputDeuterium.getFluidAmount() + " L", 0xFFFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tankInputTritium.getFluidAmount() > 0)
|
|
||||||
{
|
|
||||||
map.put(LanguageUtility.getLocal("fluid.tritium") + ": " + tankInputTritium.getFluidAmount() + " L", 0xFFFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tankOutput.getFluidAmount() > 0)
|
|
||||||
{
|
|
||||||
map.put(LanguageUtility.getLocal("fluid.plasma") + ": " + tankOutput.getFluidAmount() + " L", 0xFFFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1.5f;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
|
|
||||||
{
|
|
||||||
if (resource.isFluidEqual(AtomicContent.FLUIDSTACK_DEUTERIUM()))
|
|
||||||
{
|
|
||||||
return tankInputDeuterium.fill(resource, doFill);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resource.isFluidEqual(AtomicContent.FLUIDSTACK_TRITIUM()))
|
|
||||||
{
|
|
||||||
return tankInputTritium.fill(resource, doFill);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
|
|
||||||
{
|
|
||||||
return drain(from, resource.amount, doDrain);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
|
|
||||||
{
|
|
||||||
return tankOutput.drain(maxDrain, doDrain);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canFill(ForgeDirection from, Fluid fluid)
|
|
||||||
{
|
|
||||||
return fluid.getID() == AtomicContent.FLUID_DEUTERIUM().getID() || fluid.getID() == AtomicContent.FLUID_TRITIUM().getID();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canDrain(ForgeDirection from, Fluid fluid)
|
|
||||||
{
|
|
||||||
return fluid == AtomicContent.FLUID_PLASMA();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidTankInfo[] getTankInfo(ForgeDirection from)
|
|
||||||
{
|
|
||||||
return new FluidTankInfo[]
|
|
||||||
{ tankInputDeuterium.getInfo(), tankInputTritium.getInfo(), tankOutput.getInfo() };
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean use(EntityPlayer player, int side, Vector3 hit)
|
|
||||||
{
|
|
||||||
return FluidUtility.playerActivatedFluidItem(world(), x(), y(), z(), player, side);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
package resonantinduction.atomic.machine.plasma
|
||||||
|
|
||||||
|
import java.util.HashMap
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.network.ByteBufUtils
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
import net.minecraft.block.material.Material
|
||||||
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
|
import net.minecraft.network.Packet
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection
|
||||||
|
import net.minecraftforge.fluids._
|
||||||
|
import resonant.api.ITagRender
|
||||||
|
import resonant.engine.ResonantEngine
|
||||||
|
import resonant.lib.config.Config
|
||||||
|
import resonant.lib.content.prefab.java.TileElectric
|
||||||
|
import resonant.lib.network.discriminator.{PacketTile, PacketType}
|
||||||
|
import resonant.lib.network.handle.IPacketReceiver
|
||||||
|
import resonant.lib.utility.{FluidUtility, LanguageUtility}
|
||||||
|
import resonantinduction.atomic.AtomicContent
|
||||||
|
import universalelectricity.api.UnitDisplay
|
||||||
|
import universalelectricity.core.transform.vector.Vector3
|
||||||
|
|
||||||
|
object TilePlasmaHeater
|
||||||
|
{
|
||||||
|
var joules: Long = 10000000000L
|
||||||
|
@Config var plasmaHeatAmount: Int = 100
|
||||||
|
}
|
||||||
|
|
||||||
|
class TilePlasmaHeater(joules: Double) extends TileElectric(Material.iron) with IPacketReceiver with ITagRender with IFluidHandler
|
||||||
|
{
|
||||||
|
final val tankInputDeuterium: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10)
|
||||||
|
final val tankInputTritium: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10)
|
||||||
|
final val tankOutput: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10)
|
||||||
|
var rotation: Float = 0
|
||||||
|
|
||||||
|
//Constructor
|
||||||
|
energy.setCapacity(joules)
|
||||||
|
energy.setMaxTransfer(joules / 20)
|
||||||
|
normalRender(false)
|
||||||
|
isOpaqueCube(false)
|
||||||
|
|
||||||
|
override def update
|
||||||
|
{
|
||||||
|
super.update
|
||||||
|
rotation = (rotation + energy.getEnergy / 10000f).asInstanceOf[Float]
|
||||||
|
if (!worldObj.isRemote)
|
||||||
|
{
|
||||||
|
if (energy.checkExtract)
|
||||||
|
{
|
||||||
|
if (tankInputDeuterium.getFluidAmount >= TilePlasmaHeater.plasmaHeatAmount && tankInputTritium.getFluidAmount >= TilePlasmaHeater.plasmaHeatAmount && tankOutput.getFluidAmount < tankOutput.getCapacity)
|
||||||
|
{
|
||||||
|
tankInputDeuterium.drain(TilePlasmaHeater.plasmaHeatAmount, true)
|
||||||
|
tankInputTritium.drain(TilePlasmaHeater.plasmaHeatAmount, true)
|
||||||
|
tankOutput.fill(new FluidStack(AtomicContent.FLUID_PLASMA, tankOutput.getCapacity), true)
|
||||||
|
energy.extractEnergy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ticks % 80 == 0)
|
||||||
|
{
|
||||||
|
world.markBlockForUpdate(x, y, z)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override def getDescriptionPacket: Packet =
|
||||||
|
{
|
||||||
|
val nbt: NBTTagCompound = new NBTTagCompound
|
||||||
|
writeToNBT(nbt)
|
||||||
|
return ResonantEngine.instance.packetHandler.toMCPacket(new PacketTile(this, nbt))
|
||||||
|
}
|
||||||
|
|
||||||
|
def read(data: ByteBuf, player: EntityPlayer, `type`: PacketType)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
readFromNBT(ByteBufUtils.readTag(data))
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
case e: Exception =>
|
||||||
|
{
|
||||||
|
e.printStackTrace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a tile entity from NBT.
|
||||||
|
*/
|
||||||
|
override def readFromNBT(nbt: NBTTagCompound)
|
||||||
|
{
|
||||||
|
super.readFromNBT(nbt)
|
||||||
|
val deuterium: NBTTagCompound = nbt.getCompoundTag("tankInputDeuterium")
|
||||||
|
tankInputDeuterium.setFluid(FluidStack.loadFluidStackFromNBT(deuterium))
|
||||||
|
val tritium: NBTTagCompound = nbt.getCompoundTag("tankInputTritium")
|
||||||
|
tankInputTritium.setFluid(FluidStack.loadFluidStackFromNBT(tritium))
|
||||||
|
val output: NBTTagCompound = nbt.getCompoundTag("tankOutput")
|
||||||
|
tankOutput.setFluid(FluidStack.loadFluidStackFromNBT(output))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a tile entity to NBT.
|
||||||
|
*/
|
||||||
|
override def writeToNBT(nbt: NBTTagCompound)
|
||||||
|
{
|
||||||
|
super.writeToNBT(nbt)
|
||||||
|
if (tankInputDeuterium.getFluid != null)
|
||||||
|
{
|
||||||
|
val compound: NBTTagCompound = new NBTTagCompound
|
||||||
|
tankInputDeuterium.getFluid.writeToNBT(compound)
|
||||||
|
nbt.setTag("tankInputDeuterium", compound)
|
||||||
|
}
|
||||||
|
if (tankInputTritium.getFluid != null)
|
||||||
|
{
|
||||||
|
val compound: NBTTagCompound = new NBTTagCompound
|
||||||
|
tankInputTritium.getFluid.writeToNBT(compound)
|
||||||
|
nbt.setTag("tankInputTritium", compound)
|
||||||
|
}
|
||||||
|
if (tankOutput.getFluid != null)
|
||||||
|
{
|
||||||
|
val compound: NBTTagCompound = new NBTTagCompound
|
||||||
|
tankOutput.getFluid.writeToNBT(compound)
|
||||||
|
nbt.setTag("tankOutput", compound)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def addInformation(map: HashMap[String, Integer], player: EntityPlayer): Float =
|
||||||
|
{
|
||||||
|
if (energy != null)
|
||||||
|
{
|
||||||
|
map.put(LanguageUtility.getLocal("tooltip.energy") + ": " + new UnitDisplay(UnitDisplay.Unit.JOULES, energy.getEnergy), 0xFFFFFF)
|
||||||
|
}
|
||||||
|
if (tankInputDeuterium.getFluidAmount > 0)
|
||||||
|
{
|
||||||
|
map.put(LanguageUtility.getLocal("fluid.deuterium") + ": " + tankInputDeuterium.getFluidAmount + " L", 0xFFFFFF)
|
||||||
|
}
|
||||||
|
if (tankInputTritium.getFluidAmount > 0)
|
||||||
|
{
|
||||||
|
map.put(LanguageUtility.getLocal("fluid.tritium") + ": " + tankInputTritium.getFluidAmount + " L", 0xFFFFFF)
|
||||||
|
}
|
||||||
|
if (tankOutput.getFluidAmount > 0)
|
||||||
|
{
|
||||||
|
map.put(LanguageUtility.getLocal("fluid.plasma") + ": " + tankOutput.getFluidAmount + " L", 0xFFFFFF)
|
||||||
|
}
|
||||||
|
return 1.5f
|
||||||
|
}
|
||||||
|
|
||||||
|
def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int =
|
||||||
|
{
|
||||||
|
if (resource.isFluidEqual(AtomicContent.FLUIDSTACK_DEUTERIUM))
|
||||||
|
{
|
||||||
|
return tankInputDeuterium.fill(resource, doFill)
|
||||||
|
}
|
||||||
|
if (resource.isFluidEqual(AtomicContent.FLUIDSTACK_TRITIUM))
|
||||||
|
{
|
||||||
|
return tankInputTritium.fill(resource, doFill)
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
def drain(from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack =
|
||||||
|
{
|
||||||
|
return drain(from, resource.amount, doDrain)
|
||||||
|
}
|
||||||
|
|
||||||
|
def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack =
|
||||||
|
{
|
||||||
|
return tankOutput.drain(maxDrain, doDrain)
|
||||||
|
}
|
||||||
|
|
||||||
|
def canFill(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||||
|
{
|
||||||
|
return fluid.getID == AtomicContent.FLUID_DEUTERIUM.getID || fluid.getID == AtomicContent.FLUID_TRITIUM.getID
|
||||||
|
}
|
||||||
|
|
||||||
|
def canDrain(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||||
|
{
|
||||||
|
return fluid eq AtomicContent.FLUID_PLASMA
|
||||||
|
}
|
||||||
|
|
||||||
|
def getTankInfo(from: ForgeDirection): Array[FluidTankInfo] =
|
||||||
|
{
|
||||||
|
return Array[FluidTankInfo](tankInputDeuterium.getInfo, tankInputTritium.getInfo, tankOutput.getInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def use(player: EntityPlayer, side: Int, hit: Vector3): Boolean =
|
||||||
|
{
|
||||||
|
return FluidUtility.playerActivatedFluidItem(world, x, y, z, player, side)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -186,25 +186,26 @@ class TileThermometer extends TileAdvanced(Material.piston) with SimpleComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
@Optional.Method(modid = "OpenComputers") def getTemperature(context: Context, args: Arguments): Array[AnyRef] =
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
def getTemperature(context: Context, args: Arguments): Array[Any] =
|
||||||
{
|
{
|
||||||
return Array[AnyRef](this.detectedTemperature)
|
return Array[Any](this.detectedTemperature)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
@Optional.Method(modid = "OpenComputers") def getWarningTemperature(context: Context, args: Arguments): Array[AnyRef] =
|
@Optional.Method(modid = "OpenComputers") def getWarningTemperature(context: Context, args: Arguments): Array[Any] =
|
||||||
{
|
{
|
||||||
return Array[AnyRef](this.getThershold)
|
return Array[Any](this.getThershold)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
@Optional.Method(modid = "OpenComputers") def isAboveWarningTemperature(context: Context, args: Arguments): Array[AnyRef] =
|
@Optional.Method(modid = "OpenComputers") def isAboveWarningTemperature(context: Context, args: Arguments): Array[Any] =
|
||||||
{
|
{
|
||||||
return Array[AnyRef](this.isOverThreshold)
|
return Array[Any](this.isOverThreshold)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
@Optional.Method(modid = "OpenComputers") def setWarningTemperature(context: Context, args: Arguments): Array[AnyRef] =
|
@Optional.Method(modid = "OpenComputers") def setWarningTemperature(context: Context, args: Arguments): Array[Any] =
|
||||||
{
|
{
|
||||||
if (args.count <= 0)
|
if (args.count <= 0)
|
||||||
{
|
{
|
||||||
|
@ -222,7 +223,7 @@ class TileThermometer extends TileAdvanced(Material.piston) with SimpleComponent
|
||||||
{
|
{
|
||||||
this.setThreshold(args.checkInteger(0))
|
this.setThreshold(args.checkInteger(0))
|
||||||
}
|
}
|
||||||
return Array[AnyRef](this.threshold == args.checkInteger(0))
|
return Array[Any](this.threshold == args.checkInteger(0))
|
||||||
}
|
}
|
||||||
|
|
||||||
def getComponentName: String =
|
def getComponentName: String =
|
||||||
|
|
Loading…
Reference in a new issue