aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Robertz <dream-master@gmx.net>2021-11-27 20:26:14 +0100
committerGitHub <noreply@github.com>2021-11-27 20:26:14 +0100
commitf05038a7947f6d02cedb3ddd72420dad6ca8b00f (patch)
treee3f945b88bd9cb3f6a73660817372fa6a0417c53
parent781215081b498f633dfb11c4be31c4702efd44cb (diff)
parent875afd0dc22915795ec74279f1708d79cab0cac8 (diff)
downloadGT5-Unofficial-f05038a7947f6d02cedb3ddd72420dad6ca8b00f.tar.gz
GT5-Unofficial-f05038a7947f6d02cedb3ddd72420dad6ca8b00f.tar.bz2
GT5-Unofficial-f05038a7947f6d02cedb3ddd72420dad6ca8b00f.zip
Merge pull request #751 from GTNewHorizons/tankchest-rework
add info display and fluid container feature to filled tank
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Machines.java91
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;
+ }
}