From ac59ef27e828825345e6b650c0d65adf99b6d80d Mon Sep 17 00:00:00 2001 From: asiekierka Date: Mon, 3 Aug 2015 17:23:34 +0200 Subject: [PATCH] fix #2929 --- buildcraft_resources/changelog/7.0.18 | 2 ++ common/buildcraft/builders/TileBuilder.java | 4 ++++ common/buildcraft/builders/gui/GuiBuilder.java | 2 ++ .../core/builders/BuildingSlotMapIterator.java | 17 ++++++++++++++++- .../core/builders/TileAbstractBuilder.java | 5 +++++ .../buildcraft/core/lib/utils/FluidUtils.java | 12 ++++++++++-- 6 files changed, 39 insertions(+), 3 deletions(-) diff --git a/buildcraft_resources/changelog/7.0.18 b/buildcraft_resources/changelog/7.0.18 index 68bdb250..bd18e24e 100644 --- a/buildcraft_resources/changelog/7.0.18 +++ b/buildcraft_resources/changelog/7.0.18 @@ -6,8 +6,10 @@ Improvements: Bugs fixed: * [#2935, attempted] Programming Table robot board mixups (asie) +* [#2929] Builders unable to place liquid in survival mode (asie) * [#2914] Advanced Crafting Table excess tick times in certain circumstances (asie) * [#2898] Robot crash on chunk unload/reload (hea3ven) +* Fluid tanks rendering incorrectly in Builder (asie) * Knight/Butcher not emitting Forge attack events (asie) * Restoring robot block breaking state could fail (hea3ven) * Stripes pipes placing extra blocks, and the behaviour of the stripes robot placing blocks (hea3ven) diff --git a/common/buildcraft/builders/TileBuilder.java b/common/buildcraft/builders/TileBuilder.java index 28722446..7c37579e 100644 --- a/common/buildcraft/builders/TileBuilder.java +++ b/common/buildcraft/builders/TileBuilder.java @@ -967,4 +967,8 @@ public class TileBuilder extends TileAbstractBuilder implements IHasWork, IFluid box.readData(stream); fluidTank.readData(stream); } + + public Tank[] getFluidTanks() { + return fluidTanks; + } } diff --git a/common/buildcraft/builders/gui/GuiBuilder.java b/common/buildcraft/builders/gui/GuiBuilder.java index 6511fc8b..3efe4cc2 100644 --- a/common/buildcraft/builders/gui/GuiBuilder.java +++ b/common/buildcraft/builders/gui/GuiBuilder.java @@ -26,6 +26,7 @@ import buildcraft.core.lib.gui.AdvancedSlot; import buildcraft.core.lib.gui.GuiAdvancedInterface; import buildcraft.core.lib.network.command.CommandWriter; import buildcraft.core.lib.network.command.PacketCommand; +import buildcraft.core.lib.render.FluidRenderer; import buildcraft.core.lib.utils.StringUtils; public class GuiBuilder extends GuiAdvancedInterface { @@ -128,6 +129,7 @@ public class GuiBuilder extends GuiAdvancedInterface { for (int i = 0; i < builder.fluidTanks.length; i++) { Tank tank = builder.fluidTanks[i]; if (tank.getFluid() != null && tank.getFluid().amount > 0) { + mc.renderEngine.bindTexture(FluidRenderer.getFluidSheet(tank.getFluid())); drawFluid(tank.getFluid(), guiLeft + 179 + 18 * i, guiTop + 145, 16, 47, tank.getCapacity()); drawTexturedModalRect(guiLeft + 179 + 18 * i, guiTop + 145, 0, 54, 16, 47); } diff --git a/common/buildcraft/core/builders/BuildingSlotMapIterator.java b/common/buildcraft/core/builders/BuildingSlotMapIterator.java index 8f1659fd..ea705c50 100755 --- a/common/buildcraft/core/builders/BuildingSlotMapIterator.java +++ b/common/buildcraft/core/builders/BuildingSlotMapIterator.java @@ -14,7 +14,14 @@ import java.util.List; import java.util.Map; import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; import net.minecraft.world.WorldSettings; +import net.minecraftforge.fluids.FluidStack; +import buildcraft.core.lib.fluids.Tank; +import buildcraft.core.lib.utils.FluidUtils; public class BuildingSlotMapIterator { private static final int MAX_PER_ITEM = 80; @@ -39,7 +46,15 @@ public class BuildingSlotMapIterator { if (builder != null) { availablePairs.add(new BuilderItemMetaPair(null)); for (int i = 0; i < builder.getSizeInventory(); i++) { - availablePairs.add(new BuilderItemMetaPair(builder.getStackInSlot(i))); + ItemStack stack = builder.getStackInSlot(i); + if (stack != null) { + availablePairs.add(new BuilderItemMetaPair(stack)); + } + } + for (Tank t : builder.getFluidTanks()) { + if (t.getFluid() != null && t.getFluid().getFluid().getBlock() != null) { + availablePairs.add(new BuilderItemMetaPair(new ItemStack(t.getFluid().getFluid().getBlock()))); + } } } diff --git a/common/buildcraft/core/builders/TileAbstractBuilder.java b/common/buildcraft/core/builders/TileAbstractBuilder.java index dc2b0ab4..b464e414 100755 --- a/common/buildcraft/core/builders/TileAbstractBuilder.java +++ b/common/buildcraft/core/builders/TileAbstractBuilder.java @@ -28,6 +28,7 @@ import buildcraft.core.LaserData; import buildcraft.core.internal.IBoxProvider; import buildcraft.core.lib.RFBattery; import buildcraft.core.lib.block.TileBuildCraft; +import buildcraft.core.lib.fluids.Tank; import buildcraft.core.lib.network.Packet; import buildcraft.core.lib.network.command.CommandWriter; import buildcraft.core.lib.network.command.ICommandReceiver; @@ -189,4 +190,8 @@ public abstract class TileAbstractBuilder extends TileBuildCraft implements ITil public boolean drainBuild(FluidStack fluidStack, boolean realDrain) { return false; } + + public Tank[] getFluidTanks() { + return new Tank[0]; + } } diff --git a/common/buildcraft/core/lib/utils/FluidUtils.java b/common/buildcraft/core/lib/utils/FluidUtils.java index b1b0deff..bda8da0f 100644 --- a/common/buildcraft/core/lib/utils/FluidUtils.java +++ b/common/buildcraft/core/lib/utils/FluidUtils.java @@ -1,10 +1,12 @@ package buildcraft.core.lib.utils; import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fluids.IFluidContainerItem; @@ -23,8 +25,14 @@ public final class FluidUtils { return FluidContainerRegistry.getFluidForFilledItem(stack); } else if (stack.getItem() instanceof ItemBlock) { Block b = Block.getBlockFromItem(stack.getItem()); - if (b != null && b instanceof IFluidBlock && ((IFluidBlock) b).getFluid() != null) { - return new FluidStack(((IFluidBlock) b).getFluid(), 1000); + if (b != null) { + if (b instanceof IFluidBlock && ((IFluidBlock) b).getFluid() != null) { + return new FluidStack(((IFluidBlock) b).getFluid(), 1000); + } else if (b == Blocks.lava) { + return new FluidStack(FluidRegistry.getFluid("lava"), 1000); + } else if (b == Blocks.water) { + return new FluidStack(FluidRegistry.getFluid("water"), 1000); + } } } }