Fixed fluid errors

This commit is contained in:
Calclavia 2014-11-07 08:35:29 +08:00
parent 780250cda0
commit c98e3ffe72
5 changed files with 28 additions and 52 deletions

View file

@ -13,15 +13,15 @@ import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids.{Fluid, FluidContainerRegistry, FluidRegistry, FluidStack}
import resonant.api.IRotatable
import resonant.lib.config.Config
import resonant.lib.prefab.fluid.NodeFluid
import resonant.lib.transform.vector.Vector3
import resonant.lib.utility.FluidUtility
import resonantinduction.archaic.fluid.grate.TileGrate._
import resonantinduction.core.Reference
import resonantinduction.core.prefab.node.TilePressureNode
import resonant.lib.transform.vector.Vector3
import resonantinduction.core.prefab.node.{NodePressure, TileFluidProvider}
object TileGrate
{
@Config(comment = "The multiplier for the influence of the grate. Dependent on pressure.")
private var grateEffectMultiplier: Double = 5
@ -50,9 +50,9 @@ object TileGrate
}
class TileGrate extends TilePressureNode(Material.rock) with IRotatable
class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
{
override protected val fluidNode = new NodePressure(this)
private var gratePath: GratePathfinder = _
private var fillOver: Boolean = true
isOpaqueCube = false
@ -95,10 +95,10 @@ class TileGrate extends TilePressureNode(Material.rock) with IRotatable
{
if (ticks % 10 == 0)
{
val pressure = getPressure(getDirection)
val pressure = fluidNode.pressure(getDirection)
val blockEffect = Math.abs(pressure * grateEffectMultiplier).toInt
setCapacity(Math.max(blockEffect * FluidContainerRegistry.BUCKET_VOLUME * grateDrainSpeedMultiplier,
FluidContainerRegistry.BUCKET_VOLUME).toInt)
FluidContainerRegistry.BUCKET_VOLUME).toInt)
if (pressure > 0)
{
if (getFluidAmount >= FluidContainerRegistry.BUCKET_VOLUME)
@ -230,7 +230,7 @@ class TileGrate extends TilePressureNode(Material.rock) with IRotatable
return 0
}
val didFill = FluidUtility.fillBlock(TileGrate.this.worldObj, next.position, new FluidStack(fluidType,
amount), true)
amount), true)
filled += didFill
if (FluidUtility.getFluidAmountFromBlock(TileGrate.this.worldObj, next.position) >
0 ||
@ -342,7 +342,7 @@ class TileGrate extends TilePressureNode(Material.rock) with IRotatable
null ||
this.fluidType.getID !=
FluidUtility.getFluidFromBlock(TileGrate.this.worldObj, fluidCoord.position)
.getID)
.getID)
{
this.drainNodes.poll()
}

View file

@ -14,18 +14,16 @@ import net.minecraftforge.client.model.{AdvancedModelLoader, IModelCustom}
import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids.{FluidRegistry, FluidStack, IFluidTank}
import org.lwjgl.opengl.GL11
import resonant.api.grid.INode
import resonant.api.recipe.{MachineRecipes, RecipeResource}
import resonant.content.factory.resources.RecipeType
import resonant.lib.prefab.fluid.NodeFluid
import resonant.lib.render.{FluidRenderUtility, RenderUtility}
import resonant.lib.transform.region.Cuboid
import resonant.lib.transform.vector.Vector3
import resonant.lib.utility.FluidUtility
import resonant.lib.utility.inventory.InventoryUtility
import resonant.lib.wrapper.BitmaskWrapper._
import resonantinduction.core.Reference
import resonantinduction.core.prefab.node.TilePressureNode
import resonant.lib.transform.region.Cuboid
import resonant.lib.transform.vector.Vector3
import resonantinduction.core.prefab.node.TileFluidProvider
object TileGutter
{
@ -38,16 +36,15 @@ object TileGutter
*
* @author Calclavia
*/
class TileGutter extends TilePressureNode(Material.rock)
class TileGutter extends TileFluidProvider(Material.rock)
{
fluidNode = new NodePressureGravity(this)
setTextureName("material_wood_surface")
override protected val fluidNode = new NodePressureGravity(this)
textureName = "material_wood_surface"
isOpaqueCube = false
normalRender = false
bounds = new Cuboid(0, 0, 0, 1, 0.99, 1)
override protected var fluidNode: NodeFluid = new NodePressureGravity(this)
override def getCollisionBoxes: java.lang.Iterable[Cuboid] =
{
val list: List[Cuboid] = new ArrayList[Cuboid]
@ -83,13 +80,13 @@ class TileGutter extends TilePressureNode(Material.rock)
for (i <- 2 to 6)
{
val dir: ForgeDirection = ForgeDirection.getOrientation(i)
val pressure: Int = getPressure(dir)
val _position: Vector3 = asVector3.add(dir)
val checkTile: TileEntity = _position.getTileEntity(world)
val pressure: Int = fluidNode.pressure(dir)
val pos: Vector3 = asVector3.add(dir)
val checkTile: TileEntity = pos.getTileEntity(world)
if (checkTile.isInstanceOf[TileGutter])
{
val deltaPressure: Int = pressure - (checkTile.asInstanceOf[TileGutter]).getPressure(dir.getOpposite)
val deltaPressure: Int = pressure - checkTile.asInstanceOf[TileGutter].fluidNode.pressure(dir.getOpposite)
entity.motionX += 0.01 * dir.offsetX * deltaPressure
entity.motionY += 0.01 * dir.offsetY * deltaPressure
entity.motionZ += 0.01 * dir.offsetZ * deltaPressure
@ -101,7 +98,7 @@ class TileGutter extends TilePressureNode(Material.rock)
}
else
{
entity.extinguish
entity.extinguish()
}
}
if (entity.isInstanceOf[EntityItem])
@ -121,8 +118,9 @@ class TileGutter extends TilePressureNode(Material.rock)
if (!world.isRemote)
{
val drainAmount: Int = 50 + world.rand.nextInt(50)
val _drain: FluidStack = drain(ForgeDirection.UP, drainAmount, false)
if (_drain != null && _drain.amount > 0 && world.rand.nextFloat > 0.9)
val drain: FluidStack = fluidNode.drain(ForgeDirection.UP, drainAmount, false)
if (drain != null && drain.amount > 0 && world.rand.nextFloat > 0.9)
{
if (world.rand.nextFloat > 0.1)
{
@ -138,7 +136,8 @@ class TileGutter extends TilePressureNode(Material.rock)
}
player.inventory.setInventorySlotContents(player.inventory.currentItem, itemStack)
}
drain(ForgeDirection.UP, drainAmount, true)
fluidNode.drain(ForgeDirection.UP, drainAmount, true)
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "liquid.water", 0.5f, 1)
}
return true

View file

@ -40,7 +40,7 @@ class TileTank extends TileFluidProvider(Material.iron) with ISneakPickup with R
itemBlock = classOf[ItemBlockTank]
setCapacity(TileTank.volume * FluidContainerRegistry.BUCKET_VOLUME)
override protected var fluidNode: NodeFluid = new NodePressure(this)
override protected val fluidNode = new NodePressure(this)
override val edgeTexture = Reference.prefix + "tankEdge"
override def shouldSideBeRendered(access: IBlockAccess, x: Int, y: Int, z: Int, side: Int): Boolean = access.getBlock(x, y, z) != getBlockType

View file

@ -25,7 +25,7 @@ abstract class TileFluidProvider(material: Material) extends TileAdvanced(materi
val descriptionPacket = 0
val renderPacket = 1
protected var fluidNode: NodeFluid
protected val fluidNode: NodeFluid
protected var colorID: Int = 0
protected var clientRenderMask = 0x00

View file

@ -1,23 +0,0 @@
package resonantinduction.core.prefab.node
import net.minecraft.block.material.Material
import net.minecraftforge.common.util.ForgeDirection
import resonant.lib.prefab.fluid.NodeFluid
class TilePressureNode(material: Material) extends TileFluidProvider(material: Material)
{
//Constructor
fluidNode == new NodePressure(this)
override protected var fluidNode: NodeFluid = new NodePressure(this)
def getPressureNode: NodePressure =
{
return fluidNode.asInstanceOf[NodePressure]
}
def getPressure(direction: ForgeDirection): Int =
{
return getPressureNode.pressure(direction)
}
}