Gutter now accepts water blocks from above

This commit is contained in:
Calclavia 2014-12-02 21:00:03 +08:00
parent f19f7ab1ff
commit c0ff13b673
2 changed files with 32 additions and 5 deletions

View file

@ -3,6 +3,7 @@ package resonantinduction.archaic.fluid.gutter
import java.util.{ArrayList, List}
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.minecraft.block.Block
import net.minecraft.block.material.Material
import net.minecraft.entity.Entity
import net.minecraft.entity.item.EntityItem
@ -12,7 +13,7 @@ import net.minecraft.tileentity.TileEntity
import net.minecraft.util.ResourceLocation
import net.minecraftforge.client.model.AdvancedModelLoader
import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids.{Fluid, FluidRegistry, FluidStack, IFluidTank}
import net.minecraftforge.fluids._
import org.lwjgl.opengl.GL11
import resonant.api.recipe.{MachineRecipes, RecipeResource}
import resonant.content.factory.resources.RecipeType
@ -111,6 +112,31 @@ class TileGutter extends TileFluidProvider(Material.rock)
}
}
override def onNeighborChanged(block: Block)
{
super.onNeighborChanged(block)
if (!world.isRemote)
{
val posAbove = toVectorWorld + new Vector3(0, 1, 0)
val blockAbove = posAbove.getBlock
val tanks = findAllTanks
def drainAbove(doDrain: Boolean) =
{
val stack = FluidUtility.drainBlock(posAbove.world, posAbove, doDrain)
if (stack != null)
FluidUtility.fillAllTanks(tanks, stack, doDrain)
else
0
}
if (drainAbove(false) == FluidContainerRegistry.BUCKET_VOLUME)
drainAbove(true)
}
}
override def activate(player: EntityPlayer, side: Int, vector3: Vector3): Boolean =
{
if (player.getCurrentEquippedItem != null)
@ -147,8 +173,7 @@ class TileGutter extends TileFluidProvider(Material.rock)
return true
}
FluidUtility.playerActivatedFluidItem(findGutters().map(_.getPrimaryTank).toList, player, side)
return true
return FluidUtility.playerActivatedFluidItem(findAllTanks, player, side)
}
return true
}
@ -167,6 +192,8 @@ class TileGutter extends TileFluidProvider(Material.rock)
return foundGutters
}
private def findAllTanks = findGutters().map(_.getPrimaryTank).toList
override def onFillRain()
{
if (!world.isRemote)

View file

@ -3,7 +3,7 @@ package resonantinduction.mechanical.mech.turbine
import java.util.List
import cpw.mods.fml.relauncher.ReflectionHelper
import net.minecraft.block.{Block, BlockDynamicLiquid}
import net.minecraft.block.{BlockLiquid, Block, BlockDynamicLiquid}
import net.minecraft.creativetab.CreativeTabs
import net.minecraft.init.Blocks
import net.minecraft.item.{Item, ItemStack}
@ -89,7 +89,7 @@ class TileWaterTurbine extends TileTurbine
if (blockID == Blocks.water || blockID == Blocks.flowing_water)
{
val m = ReflectionHelper.findMethod(classOf[BlockDynamicLiquid], null, Array[String]("getFlowVector", "func_72202_i"), classOf[IBlockAccess], Integer.TYPE, Integer.TYPE, Integer.TYPE)
val m = ReflectionHelper.findMethod(classOf[BlockLiquid], null, Array[String]("getFlowVector", "func_72202_i"), classOf[IBlockAccess], Integer.TYPE, Integer.TYPE, Integer.TYPE)
val vector = new Vector3(m.invoke(Blocks.water, Array(worldObj, check.xi, check.yi, check.zi)).asInstanceOf[Vec3])
val invert = (currentDir.offsetZ > 0 && vector.x < 0) || (currentDir.offsetZ < 0 && vector.x > 0) || (currentDir.offsetX > 0 && vector.z > 0) || (currentDir.offsetX < 0 && vector.z < 0)