diff options
author | GlodBlock <1356392126@qq.com> | 2021-11-21 21:44:24 +0800 |
---|---|---|
committer | GlodBlock <1356392126@qq.com> | 2021-11-21 21:44:24 +0800 |
commit | 875afd0dc22915795ec74279f1708d79cab0cac8 (patch) | |
tree | dfc0ce33dd8603f5c5cf588de5e791b51accfe6c /src/main/java/gregtech/common/blocks/GT_Item_Machines.java | |
parent | 81f0b4801dfb0bd2d2a863e7a60f27af0daba463 (diff) | |
download | GT5-Unofficial-875afd0dc22915795ec74279f1708d79cab0cac8.tar.gz GT5-Unofficial-875afd0dc22915795ec74279f1708d79cab0cac8.tar.bz2 GT5-Unofficial-875afd0dc22915795ec74279f1708d79cab0cac8.zip |
add info display for filled tank and fluid container feature
Diffstat (limited to 'src/main/java/gregtech/common/blocks/GT_Item_Machines.java')
-rw-r--r-- | src/main/java/gregtech/common/blocks/GT_Item_Machines.java | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java index 55743f445d..b59dd1d848 100644 --- a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java @@ -30,10 +30,12 @@ import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; import java.util.List; -public class GT_Item_Machines extends ItemBlock { +public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { private static final String[] directionNames = {"Bottom", "Top", "North", "South", "West", "East"}; @@ -89,6 +91,15 @@ public class GT_Item_Machines extends ItemBlock { } aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_STORE", "Capacity: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.BLUE + GT_Utility.formatNumbers(tTileEntity.getEUCapacity()) + EnumChatFormatting.GRAY); } + if (GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_QuantumTank || GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_SuperTank) { + if (aStack.hasTagCompound() && aStack.stackTagCompound.hasKey("mFluid")) { + FluidStack tContents = FluidStack.loadFluidStackFromNBT(aStack.stackTagCompound.getCompoundTag("mFluid")); + if (tContents != null && tContents.amount > 0) { + aList.add(GT_LanguageManager.addStringLocalization("TileEntity_TANK_INFO", "Contains Fluid: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.YELLOW + tContents.getLocalizedName() + EnumChatFormatting.GRAY); + aList.add(GT_LanguageManager.addStringLocalization("TileEntity_TANK_AMOUNT", "Fluid Amount: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(tContents.amount) + " L" + EnumChatFormatting.GRAY); + } + } + } } NBTTagCompound aNBT = aStack.getTagCompound(); if (aNBT != null) { @@ -240,4 +251,82 @@ public class GT_Item_Machines extends ItemBlock { } } } + + @Override + public FluidStack getFluid(ItemStack container) { + if (container != null) { + NBTTagCompound tNBT = container.stackTagCompound; + if (tNBT != null && tNBT.hasKey("mFluid", 10)) { + return FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); + } + } + return null; + } + + @Override + public int getCapacity(ItemStack container) { + if (container != null) { + int tDamage = container.getItemDamage(); + IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; + if (tMetaTile != null) + return tMetaTile.getCapacity(); + } + return 0; + } + + @Override + public int fill(ItemStack container, FluidStack resource, boolean doFill) { + if (container != null && resource != null) { + int tDamage = container.getItemDamage(); + IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; + if (!(tMetaTile instanceof GT_MetaTileEntity_QuantumTank || tMetaTile instanceof GT_MetaTileEntity_SuperTank)) { + return 0; + } + if (container.stackTagCompound == null) container.stackTagCompound = new NBTTagCompound(); + FluidStack tStoredFluid = getFluid(container); + int tCapacity = getCapacity(container); + if (tCapacity <= 0) return 0; + if (tStoredFluid != null && tStoredFluid.isFluidEqual(resource)) { + int tAmount = Math.min(tCapacity - tStoredFluid.amount, resource.amount); + if (doFill) { + FluidStack tNewFluid = new FluidStack(tStoredFluid, tAmount + tStoredFluid.amount); + container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); + } + return tAmount; + } + if (tStoredFluid == null) { + int tAmount = Math.min(tCapacity, resource.amount); + if (doFill) { + FluidStack tNewFluid = new FluidStack(resource, tAmount); + container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); + } + return tAmount; + } + } + return 0; + } + + @Override + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { + if (container != null) { + int tDamage = container.getItemDamage(); + IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; + if (!(tMetaTile instanceof GT_MetaTileEntity_QuantumTank || tMetaTile instanceof GT_MetaTileEntity_SuperTank)) { + return null; + } + if (container.stackTagCompound == null) container.stackTagCompound = new NBTTagCompound(); + FluidStack tStoredFluid = getFluid(container); + if (tStoredFluid != null) { + int tAmount = Math.min(maxDrain, tStoredFluid.amount); + FluidStack tNewFluid = new FluidStack(tStoredFluid, tStoredFluid.amount - tAmount); + FluidStack tOutputFluid = new FluidStack(tStoredFluid, tAmount); + if (doDrain) { + if (tNewFluid.amount <= 0) container.stackTagCompound.removeTag("mFluid"); + else container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); + } + return tOutputFluid; + } + } + return null; + } } |