emerald fluid pipes can now filter the liquid
This commit is contained in:
parent
82391bf728
commit
b299537a13
17 changed files with 297 additions and 47 deletions
Binary file not shown.
After Width: | Height: | Size: 497 B |
|
@ -32,7 +32,7 @@ import buildcraft.api.tools.IToolWrench;
|
|||
import buildcraft.core.BlockBuildCraft;
|
||||
import buildcraft.core.CreativeTabBuildCraft;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.fluids.FluidUtils;
|
||||
import buildcraft.core.fluids.TankUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
||||
public class BlockBuilder extends BlockBuildCraft {
|
||||
|
@ -116,7 +116,7 @@ public class BlockBuilder extends BlockBuildCraft {
|
|||
}
|
||||
|
||||
return true;
|
||||
} else if (builder != null && FluidUtils.handleRightClick(builder, ForgeDirection.UNKNOWN, entityplayer, true, false)) {
|
||||
} else if (builder != null && TankUtils.handleRightClick(builder, ForgeDirection.UNKNOWN, entityplayer, true, false)) {
|
||||
return true;
|
||||
} else {
|
||||
if (!world.isRemote) {
|
||||
|
|
|
@ -32,6 +32,7 @@ public final class GuiIds {
|
|||
public static final int GATES = 51;
|
||||
public static final int PIPE_EMERALD_ITEM = 52;
|
||||
public static final int PIPE_LOGEMERALD_ITEM = 53;
|
||||
public static final int PIPE_EMERALD_FLUID = 54;
|
||||
|
||||
public static final int FILTERED_BUFFER = 60;
|
||||
|
||||
|
|
|
@ -25,12 +25,12 @@ import net.minecraftforge.fluids.IFluidTank;
|
|||
import buildcraft.core.TileBuffer;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
|
||||
public final class FluidUtils {
|
||||
public final class TankUtils {
|
||||
|
||||
/**
|
||||
* Deactivate constructor
|
||||
*/
|
||||
private FluidUtils() {
|
||||
private TankUtils() {
|
||||
}
|
||||
|
||||
public static boolean handleRightClick(IFluidHandler tank, ForgeDirection side, EntityPlayer player, boolean fill, boolean drain) {
|
31
common/buildcraft/core/utils/FluidUtils.java
Normal file
31
common/buildcraft/core/utils/FluidUtils.java
Normal file
|
@ -0,0 +1,31 @@
|
|||
package buildcraft.core.utils;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
import net.minecraftforge.fluids.IFluidContainerItem;
|
||||
|
||||
public final class FluidUtils {
|
||||
private FluidUtils () {
|
||||
|
||||
}
|
||||
|
||||
public static Fluid getFluidFromItemStack(ItemStack stack) {
|
||||
if (stack != null) {
|
||||
if (stack.getItem() instanceof IFluidContainerItem) {
|
||||
IFluidContainerItem ctr = (IFluidContainerItem) stack.getItem();
|
||||
if (ctr.getFluid(stack) != null) {
|
||||
return ctr.getFluid(stack).getFluid();
|
||||
}
|
||||
} else if (FluidContainerRegistry.isFilledContainer(stack) &&
|
||||
FluidContainerRegistry.getFluidForFilledItem(stack) != null) {
|
||||
return FluidContainerRegistry.getFluidForFilledItem(stack).getFluid();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isFluidContainer(ItemStack stack) {
|
||||
return stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isFilledContainer(stack);
|
||||
}
|
||||
}
|
|
@ -28,7 +28,7 @@ import buildcraft.api.fuels.IFuel;
|
|||
import buildcraft.api.fuels.ISolidCoolant;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.IItemPipe;
|
||||
import buildcraft.core.fluids.FluidUtils;
|
||||
import buildcraft.core.fluids.TankUtils;
|
||||
import buildcraft.core.fluids.Tank;
|
||||
import buildcraft.core.fluids.TankManager;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
|
@ -76,7 +76,7 @@ public class TileEngineIron extends TileEngineWithInventory implements IFluidHan
|
|||
return false;
|
||||
}
|
||||
if (!worldObj.isRemote) {
|
||||
if (FluidUtils.handleRightClick(this, side, player, true, true)) {
|
||||
if (TankUtils.handleRightClick(this, side, player, true, true)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -33,7 +33,7 @@ import buildcraft.api.tools.IToolWrench;
|
|||
import buildcraft.core.BlockBuildCraft;
|
||||
import buildcraft.core.CreativeTabBuildCraft;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.fluids.FluidUtils;
|
||||
import buildcraft.core.fluids.TankUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
||||
public class BlockRefinery extends BlockBuildCraft {
|
||||
|
@ -126,7 +126,7 @@ public class BlockRefinery extends BlockBuildCraft {
|
|||
|
||||
if (current != null && current.getItem() != Items.bucket) {
|
||||
if (!world.isRemote) {
|
||||
if (FluidUtils.handleRightClick((TileRefinery) tile, ForgeDirection.getOrientation(side), player, true, false)) {
|
||||
if (TankUtils.handleRightClick((TileRefinery) tile, ForgeDirection.getOrientation(side), player, true, false)) {
|
||||
return true;
|
||||
}
|
||||
} else if (FluidContainerRegistry.isContainer(current)) {
|
||||
|
|
|
@ -29,7 +29,7 @@ import net.minecraftforge.fluids.IFluidHandler;
|
|||
import buildcraft.api.core.BlockIndex;
|
||||
import buildcraft.api.core.BuildCraftAPI;
|
||||
import buildcraft.core.TileBuildCraft;
|
||||
import buildcraft.core.fluids.FluidUtils;
|
||||
import buildcraft.core.fluids.TankUtils;
|
||||
import buildcraft.core.fluids.Tank;
|
||||
import buildcraft.core.utils.BlockUtil;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
@ -108,7 +108,7 @@ public class TileFloodGate extends TileBuildCraft implements IFluidHandler {
|
|||
|
||||
if (canPlaceFluidAt(block, x, y, z)) {
|
||||
boolean placed;
|
||||
Block b = FluidUtils.getFluidBlock(fluid, true);
|
||||
Block b = TankUtils.getFluidBlock(fluid, true);
|
||||
|
||||
if (b instanceof BlockFluidBase) {
|
||||
BlockFluidBase blockFluid = (BlockFluidBase) b;
|
||||
|
|
|
@ -19,7 +19,6 @@ import io.netty.buffer.ByteBuf;
|
|||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
|
@ -37,7 +36,7 @@ import buildcraft.core.EntityBlock;
|
|||
import buildcraft.core.RFBattery;
|
||||
import buildcraft.core.TileBuffer;
|
||||
import buildcraft.core.TileBuildCraft;
|
||||
import buildcraft.core.fluids.FluidUtils;
|
||||
import buildcraft.core.fluids.TankUtils;
|
||||
import buildcraft.core.fluids.SingleUseTank;
|
||||
import buildcraft.core.network.PacketPayload;
|
||||
import buildcraft.core.network.PacketUpdate;
|
||||
|
@ -160,7 +159,7 @@ public class TilePump extends TileBuildCraft implements IHasWork, IFluidHandler
|
|||
cache = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false);
|
||||
}
|
||||
|
||||
FluidUtils.pushFluidToConsumers(tank, 400, cache);
|
||||
TankUtils.pushFluidToConsumers(tank, 400, cache);
|
||||
}
|
||||
|
||||
private void createTube() {
|
||||
|
|
|
@ -19,15 +19,18 @@ import cpw.mods.fml.common.network.IGuiHandler;
|
|||
import buildcraft.api.core.BCLog;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.transport.gui.ContainerDiamondPipe;
|
||||
import buildcraft.transport.gui.ContainerEmeraldFluidPipe;
|
||||
import buildcraft.transport.gui.ContainerEmeraldPipe;
|
||||
import buildcraft.transport.gui.ContainerEmzuliPipe;
|
||||
import buildcraft.transport.gui.ContainerFilteredBuffer;
|
||||
import buildcraft.transport.gui.ContainerGateInterface;
|
||||
import buildcraft.transport.gui.GuiDiamondPipe;
|
||||
import buildcraft.transport.gui.GuiEmeraldFluidPipe;
|
||||
import buildcraft.transport.gui.GuiEmeraldPipe;
|
||||
import buildcraft.transport.gui.GuiEmzuliPipe;
|
||||
import buildcraft.transport.gui.GuiFilteredBuffer;
|
||||
import buildcraft.transport.gui.GuiGateInterface;
|
||||
import buildcraft.transport.pipes.PipeFluidsEmerald;
|
||||
import buildcraft.transport.pipes.PipeItemsDiamond;
|
||||
import buildcraft.transport.pipes.PipeItemsEmerald;
|
||||
import buildcraft.transport.pipes.PipeItemsEmzuli;
|
||||
|
@ -68,6 +71,9 @@ public class GuiHandler implements IGuiHandler {
|
|||
case GuiIds.PIPE_LOGEMERALD_ITEM:
|
||||
return new ContainerEmzuliPipe(player.inventory, (PipeItemsEmzuli) pipe.pipe);
|
||||
|
||||
case GuiIds.PIPE_EMERALD_FLUID:
|
||||
return new ContainerEmeraldFluidPipe(player.inventory, (PipeFluidsEmerald) pipe.pipe);
|
||||
|
||||
case GuiIds.GATES:
|
||||
return new ContainerGateInterface(player.inventory, pipe.pipe);
|
||||
|
||||
|
@ -114,6 +120,9 @@ public class GuiHandler implements IGuiHandler {
|
|||
case GuiIds.PIPE_LOGEMERALD_ITEM:
|
||||
return new GuiEmzuliPipe(player.inventory, (PipeItemsEmzuli) pipe.pipe);
|
||||
|
||||
case GuiIds.PIPE_EMERALD_FLUID:
|
||||
return new GuiEmeraldFluidPipe(player.inventory, (PipeFluidsEmerald) pipe.pipe);
|
||||
|
||||
case GuiIds.GATES:
|
||||
return new GuiGateInterface(player.inventory, pipe.pipe);
|
||||
|
||||
|
|
38
common/buildcraft/transport/IEmeraldPipe.java
Normal file
38
common/buildcraft/transport/IEmeraldPipe.java
Normal file
|
@ -0,0 +1,38 @@
|
|||
package buildcraft.transport;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public interface IEmeraldPipe extends IFilteredPipe {
|
||||
|
||||
public enum FilterMode {
|
||||
WHITE_LIST, BLACK_LIST, ROUND_ROBIN;
|
||||
}
|
||||
|
||||
public class EmeraldPipeSettings {
|
||||
private FilterMode filterMode;
|
||||
|
||||
public EmeraldPipeSettings(FilterMode defaultMode) {
|
||||
filterMode = defaultMode;
|
||||
}
|
||||
|
||||
public FilterMode getFilterMode() {
|
||||
return filterMode;
|
||||
}
|
||||
|
||||
public void setFilterMode(FilterMode mode) {
|
||||
filterMode = mode;
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
filterMode = FilterMode.values()[nbt.getByte("filterMode")];
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
nbt.setByte("filterMode", (byte) filterMode.ordinal());
|
||||
}
|
||||
}
|
||||
|
||||
EmeraldPipeSettings getSettings();
|
||||
|
||||
boolean isValidFilterMode(FilterMode mode);
|
||||
}
|
9
common/buildcraft/transport/IFilteredPipe.java
Normal file
9
common/buildcraft/transport/IFilteredPipe.java
Normal file
|
@ -0,0 +1,9 @@
|
|||
package buildcraft.transport;
|
||||
|
||||
import buildcraft.core.network.IClientState;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
public interface IFilteredPipe extends IClientState {
|
||||
IInventory getFilters();
|
||||
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/**
|
||||
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import buildcraft.core.gui.BuildCraftContainer;
|
||||
import buildcraft.core.gui.slots.SlotPhantom;
|
||||
import buildcraft.transport.pipes.PipeFluidsEmerald;
|
||||
|
||||
public class ContainerEmeraldFluidPipe extends BuildCraftContainer {
|
||||
|
||||
private final PipeFluidsEmerald pipe;
|
||||
private final IInventory playerInv;
|
||||
private final IInventory filterInv;
|
||||
|
||||
public ContainerEmeraldFluidPipe(IInventory playerInventory, PipeFluidsEmerald pipe) {
|
||||
super(pipe.getFilters().getSizeInventory());
|
||||
this.pipe = pipe;
|
||||
this.playerInv = playerInventory;
|
||||
this.filterInv = pipe.getFilters();
|
||||
|
||||
addSlotToContainer(new SlotPhantom(filterInv, 0, 80, 18));
|
||||
|
||||
for (int l = 0; l < 3; l++) {
|
||||
for (int k1 = 0; k1 < 9; k1++) {
|
||||
addSlotToContainer(new Slot(playerInventory, k1 + l * 9 + 9, 8 + k1 * 18, 50 + l * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i1 = 0; i1 < 9; i1++) {
|
||||
addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 108));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer entityplayer) {
|
||||
return pipe.container.isUseableByPlayer(entityplayer);
|
||||
}
|
||||
}
|
45
common/buildcraft/transport/gui/GuiEmeraldFluidPipe.java
Normal file
45
common/buildcraft/transport/gui/GuiEmeraldFluidPipe.java
Normal file
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gui;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import buildcraft.core.DefaultProps;
|
||||
import buildcraft.core.gui.GuiBuildCraft;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.pipes.PipeFluidsEmerald;
|
||||
|
||||
public class GuiEmeraldFluidPipe extends GuiBuildCraft {
|
||||
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/generic_one_slot.png");
|
||||
IInventory playerInventory;
|
||||
IInventory filterInventory;
|
||||
|
||||
public GuiEmeraldFluidPipe(IInventory playerInventory, PipeFluidsEmerald pipe) {
|
||||
super(new ContainerEmeraldFluidPipe(playerInventory, pipe), pipe.getFilters(), TEXTURE);
|
||||
this.playerInventory = playerInventory;
|
||||
this.filterInventory = pipe.getFilters();
|
||||
xSize = 176;
|
||||
ySize = 132;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
|
||||
fontRendererObj.drawString(filterInventory.getInventoryName(), getCenteredOffset(filterInventory.getInventoryName()), 6, 0x404040);
|
||||
fontRendererObj.drawString(StringUtils.localize("gui.inventory"), 8, ySize - 97, 0x404040);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float f, int x, int y) {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
mc.renderEngine.bindTexture(TEXTURE);
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@ import buildcraft.api.core.IIconProvider;
|
|||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.inventory.SimpleInventory;
|
||||
import buildcraft.core.network.IClientState;
|
||||
import buildcraft.core.utils.FluidUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.transport.BlockGenericPipe;
|
||||
import buildcraft.transport.IDiamondPipe;
|
||||
|
@ -46,8 +47,7 @@ public class PipeFluidsDiamond extends Pipe<PipeTransportFluids> implements IDia
|
|||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int slot, ItemStack stack) {
|
||||
return stack == null || stack.getItem() instanceof IFluidContainerItem
|
||||
|| FluidContainerRegistry.isFilledContainer(stack);
|
||||
return stack == null || FluidUtils.isFluidContainer(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -58,23 +58,9 @@ public class PipeFluidsDiamond extends Pipe<PipeTransportFluids> implements IDia
|
|||
}
|
||||
|
||||
for (int i = 0; i < 54; i++) {
|
||||
fluids[i] = null;
|
||||
ItemStack stack = getStackInSlot(i);
|
||||
if (stack != null) {
|
||||
if (stack.getItem() instanceof IFluidContainerItem) {
|
||||
IFluidContainerItem ctr = (IFluidContainerItem) stack.getItem();
|
||||
if (ctr.getFluid(stack) != null) {
|
||||
fluids[i] = ctr.getFluid(stack).getFluid();
|
||||
filteredDirections[i / 9] = true;
|
||||
}
|
||||
} else if (FluidContainerRegistry.isFilledContainer(stack) &&
|
||||
FluidContainerRegistry.getFluidForFilledItem(stack) != null) {
|
||||
fluids[i] = FluidContainerRegistry.getFluidForFilledItem(stack).getFluid();
|
||||
filteredDirections[i / 9] = true;
|
||||
}
|
||||
}
|
||||
fluids[i] = FluidUtils.getFluidFromItemStack(getStackInSlot(i));
|
||||
if (fluids[i] != null) {
|
||||
System.out.println("fluid at " + i + " is " + fluids[i].getName());
|
||||
filteredDirections[i / 9] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,11 +8,28 @@
|
|||
*/
|
||||
package buildcraft.transport.pipes;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.inventory.SimpleInventory;
|
||||
import buildcraft.core.network.IClientState;
|
||||
import buildcraft.core.utils.FluidUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.transport.BlockGenericPipe;
|
||||
import buildcraft.transport.PipeIconProvider;
|
||||
|
||||
public class PipeFluidsEmerald extends PipeFluidsWood {
|
||||
public class PipeFluidsEmerald extends PipeFluidsWood implements IClientState {
|
||||
private SimpleInventory filters = new SimpleInventory(1, "Filters", 1);
|
||||
|
||||
public PipeFluidsEmerald(Item item) {
|
||||
super(item);
|
||||
|
@ -23,4 +40,70 @@ public class PipeFluidsEmerald extends PipeFluidsWood {
|
|||
transport.initFromPipe(getClass());
|
||||
transport.travelDelay = 4;
|
||||
}
|
||||
|
||||
public IInventory getFilters() {
|
||||
return filters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int extractFluid(IFluidHandler fluidHandler, ForgeDirection side) {
|
||||
Fluid targetFluid = FluidUtils.getFluidFromItemStack(filters.getStackInSlot(0));
|
||||
if (targetFluid == null) {
|
||||
return super.extractFluid(fluidHandler, side);
|
||||
}
|
||||
|
||||
int flowRate = transport.flowRate;
|
||||
FluidStack toExtract = new FluidStack(targetFluid, liquidToExtract > flowRate ? flowRate : liquidToExtract);
|
||||
FluidStack extracted = fluidHandler.drain(side.getOpposite(), toExtract, false);
|
||||
|
||||
if (extracted != null) {
|
||||
toExtract.amount = transport.fill(side, extracted, true);
|
||||
fluidHandler.drain(side.getOpposite(), toExtract, true);
|
||||
}
|
||||
return toExtract.amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean blockActivated(EntityPlayer entityplayer) {
|
||||
if (entityplayer.getCurrentEquippedItem() != null) {
|
||||
if (Block.getBlockFromItem(entityplayer.getCurrentEquippedItem().getItem()) instanceof BlockGenericPipe) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (super.blockActivated(entityplayer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!container.getWorldObj().isRemote) {
|
||||
entityplayer.openGui(BuildCraftTransport.instance, GuiIds.PIPE_EMERALD_FLUID, container.getWorldObj(), container.xCoord, container.yCoord, container.zCoord);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeData(ByteBuf data) {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
writeToNBT(nbt);
|
||||
Utils.writeNBT(data, nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readData(ByteBuf data) {
|
||||
NBTTagCompound nbt = Utils.readNBT(data);
|
||||
readFromNBT(nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
filters.readFromNBT(nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
filters.writeToNBT(nbt);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import cpw.mods.fml.relauncher.Side;
|
|||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
|
@ -94,20 +95,7 @@ public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergy
|
|||
TileEntity tile = container.getTile(side);
|
||||
|
||||
if (tile instanceof IFluidHandler) {
|
||||
IFluidHandler fluidHandler = (IFluidHandler) tile;
|
||||
|
||||
int flowRate = transport.flowRate;
|
||||
|
||||
FluidStack extracted = fluidHandler.drain(side.getOpposite(), liquidToExtract > flowRate ? flowRate : liquidToExtract, false);
|
||||
|
||||
int inserted = 0;
|
||||
if (extracted != null) {
|
||||
inserted = transport.fill(side, extracted, true);
|
||||
|
||||
fluidHandler.drain(side.getOpposite(), inserted, true);
|
||||
}
|
||||
|
||||
liquidToExtract -= inserted;
|
||||
liquidToExtract -= extractFluid((IFluidHandler) tile, side);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,6 +120,20 @@ public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergy
|
|||
}
|
||||
}
|
||||
|
||||
public int extractFluid(IFluidHandler fluidHandler, ForgeDirection side) {
|
||||
int flowRate = transport.flowRate;
|
||||
FluidStack extracted = fluidHandler.drain(side.getOpposite(), liquidToExtract > flowRate ? flowRate : liquidToExtract, false);
|
||||
|
||||
int inserted = 0;
|
||||
|
||||
if (extracted != null) {
|
||||
inserted = transport.fill(side, extracted, true);
|
||||
|
||||
fluidHandler.drain(side.getOpposite(), inserted, true);
|
||||
}
|
||||
return inserted;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIconProvider getIconProvider() {
|
||||
|
|
Loading…
Reference in a new issue