From fc5766c06673ed0cfec511f23fd259f511fabdac Mon Sep 17 00:00:00 2001 From: Alkalus Date: Sat, 2 Sep 2017 15:38:35 +1000 Subject: $ Fixed tank fluid container handling. --- .../core/block/general/FluidTankInfinite.java | 76 +++++++++++++++++----- .../general/TileEntityInfiniteFluid.java | 9 +++ .../gtPlusPlus/core/util/player/PlayerUtils.java | 19 +++++- 3 files changed, 84 insertions(+), 20 deletions(-) (limited to 'src/Java/gtPlusPlus/core') diff --git a/src/Java/gtPlusPlus/core/block/general/FluidTankInfinite.java b/src/Java/gtPlusPlus/core/block/general/FluidTankInfinite.java index 722a915d58..fe698dfdd0 100644 --- a/src/Java/gtPlusPlus/core/block/general/FluidTankInfinite.java +++ b/src/Java/gtPlusPlus/core/block/general/FluidTankInfinite.java @@ -6,16 +6,21 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; import gtPlusPlus.core.tileentities.general.TileEntityInfiniteFluid; import gtPlusPlus.core.util.player.PlayerUtils; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.ItemFluidContainer; public class FluidTankInfinite extends BlockContainer { @@ -68,30 +73,65 @@ public class FluidTankInfinite extends BlockContainer { else { TileEntityInfiniteFluid tank = (TileEntityInfiniteFluid) world.getTileEntity(x, y, z); if (tank != null){ + Item handItem; + try { + handItem = player.getHeldItem().getItem(); + } + catch (Throwable t){ + handItem = null; + } + if (handItem != null && (handItem instanceof IFluidContainerItem || handItem instanceof ItemFluidContainer || FluidContainerRegistry.isFilledContainer(player.getHeldItem()))){ + if (tank.tank.getFluid() == null){ + try { + if (!FluidContainerRegistry.isFilledContainer(player.getHeldItem())){ + ItemStack handItemStack = player.getHeldItem(); + IFluidContainerItem container = (IFluidContainerItem) handItem; + FluidStack containerFluid = container.getFluid(handItemStack); + container.drain(handItemStack, container.getFluid(handItemStack).amount, true); + tank.tank.setFluid(containerFluid); + } + else { + ItemStack handItemStack = player.getHeldItem(); + FluidContainerRegistry.drainFluidContainer(handItemStack); + FluidStack containerFluid = FluidContainerRegistry.getFluidForFilledItem(handItemStack); + ItemStack emptyContainer = FluidContainerRegistry.drainFluidContainer(handItemStack); + player.setItemInUse(emptyContainer, 0); + + tank.tank.setFluid(containerFluid); + } + } + catch (Throwable t){ + t.printStackTrace(); + } + } + + } + if (tank.tank.getFluid() != null){ PlayerUtils.messagePlayer(player, "This tank contains "+tank.tank.getFluidAmount()+"L of "+tank.tank.getFluid().getLocalizedName()); } } - return true; } + return true; +} - @Override - public int getRenderBlockPass() { - return 1; - } +@Override +public int getRenderBlockPass() { + return 1; +} - @Override - public boolean isOpaqueCube() { - return false; - } +@Override +public boolean isOpaqueCube() { + return false; +} - @Override - public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { - return new TileEntityInfiniteFluid(); - } +@Override +public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { + return new TileEntityInfiniteFluid(); +} - @Override - public void onBlockAdded(World world, int x, int y, int z) { - super.onBlockAdded(world, x, y, z); - } +@Override +public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); +} } diff --git a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityInfiniteFluid.java b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityInfiniteFluid.java index 7a5be32ef4..3b50fe4dea 100644 --- a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityInfiniteFluid.java +++ b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityInfiniteFluid.java @@ -28,6 +28,7 @@ public class TileEntityInfiniteFluid extends TileEntity implements IFluidHandler } public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + needsUpdate = true; return this.tank.drain(resource.amount, doDrain); } @@ -72,6 +73,7 @@ public class TileEntityInfiniteFluid extends TileEntity implements IFluidHandler } public float getAdjustedVolume() { + needsUpdate = true; float amount = tank.getFluidAmount(); float capacity = tank.getCapacity(); float volume = (amount / capacity) * 0.8F; @@ -79,6 +81,13 @@ public class TileEntityInfiniteFluid extends TileEntity implements IFluidHandler } public void updateEntity() { + + if (this.tank.getFluid() != null){ + FluidStack bigStorage = this.tank.getFluid(); + bigStorage.amount = this.tank.getCapacity(); + this.tank.setFluid(bigStorage); + } + if (needsUpdate) { if (this.tank.getFluid() != null){ diff --git a/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java b/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java index 9c43b39f92..543fd65b71 100644 --- a/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java +++ b/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java @@ -101,7 +101,10 @@ public class PlayerUtils { public static ItemStack getItemStackInPlayersHand(final EntityPlayer player){ ItemStack heldItem = null; try{heldItem = player.getHeldItem(); - }catch(final NullPointerException e){return null;} + }catch(final NullPointerException e){ + e.printStackTrace(); + return null; + } if (heldItem != null){ return heldItem; } @@ -109,7 +112,7 @@ public class PlayerUtils { } @SideOnly(Side.CLIENT) - public static Item getItemInPlayersHand(){ + public static Item getItemInPlayersHandClient(){ final Minecraft mc = Minecraft.getMinecraft(); Item heldItem = null; @@ -123,6 +126,18 @@ public class PlayerUtils { return null; } + public static Item getItemInPlayersHand(EntityPlayer player){ + Item heldItem = null; + try{heldItem = player.getHeldItem().getItem(); + }catch(final NullPointerException e){return null;} + + if (heldItem != null){ + return heldItem; + } + + return null; + } + public final static EntityPlayer getPlayerEntityByName(String aPlayerName){ EntityPlayer player = PlayerUtils.getPlayer(aPlayerName); if (player != null){ -- cgit