From c0ff13b673c7f29e4d4e87ada06aaa697105b4c3 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Tue, 2 Dec 2014 21:00:03 +0800 Subject: [PATCH] Gutter now accepts water blocks from above --- .../archaic/fluid/gutter/TileGutter.scala | 33 +++++++++++++++++-- .../mech/turbine/TileWaterTurbine.scala | 4 +-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/main/scala/resonantinduction/archaic/fluid/gutter/TileGutter.scala b/src/main/scala/resonantinduction/archaic/fluid/gutter/TileGutter.scala index 363915a10..98a29b1f6 100644 --- a/src/main/scala/resonantinduction/archaic/fluid/gutter/TileGutter.scala +++ b/src/main/scala/resonantinduction/archaic/fluid/gutter/TileGutter.scala @@ -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) diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWaterTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWaterTurbine.scala index 12042d73a..dc75e3921 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWaterTurbine.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWaterTurbine.scala @@ -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)