aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/common/tileentities/GTMTE_TFFT.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/common/tileentities/GTMTE_TFFT.java')
-rw-r--r--src/main/java/common/tileentities/GTMTE_TFFT.java787
1 files changed, 0 insertions, 787 deletions
diff --git a/src/main/java/common/tileentities/GTMTE_TFFT.java b/src/main/java/common/tileentities/GTMTE_TFFT.java
deleted file mode 100644
index 18867c0656..0000000000
--- a/src/main/java/common/tileentities/GTMTE_TFFT.java
+++ /dev/null
@@ -1,787 +0,0 @@
-package common.tileentities;
-
-import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
-import static gregtech.api.enums.GT_HatchElement.Energy;
-import static gregtech.api.enums.GT_HatchElement.InputHatch;
-import static gregtech.api.enums.GT_HatchElement.Maintenance;
-import static gregtech.api.enums.GT_HatchElement.OutputHatch;
-import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
-import static java.lang.Math.min;
-import static net.minecraft.util.StatCollector.translateToLocal;
-
-import java.math.BigInteger;
-import java.text.MessageFormat;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.world.World;
-import net.minecraftforge.common.util.ForgeDirection;
-import net.minecraftforge.fluids.FluidRegistry;
-import net.minecraftforge.fluids.FluidStack;
-import net.minecraftforge.fluids.FluidTankInfo;
-
-import com.gtnewhorizon.structurelib.StructureLibAPI;
-import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
-import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
-import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment;
-import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
-import com.gtnewhorizon.structurelib.structure.IStructureElement;
-import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
-import com.gtnewhorizon.structurelib.structure.StructureUtility;
-import com.gtnewhorizon.structurelib.util.ItemStackPredicate;
-import common.Blocks;
-
-import gregtech.api.enums.Textures;
-import gregtech.api.fluid.FluidTankGT;
-import gregtech.api.interfaces.IHatchElement;
-import gregtech.api.interfaces.IIconContainer;
-import gregtech.api.interfaces.ITexture;
-import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
-import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
-import gregtech.api.util.GT_Utility;
-import gregtech.api.util.IGT_HatchAdder;
-import gregtech.common.items.GT_IntegratedCircuit_Item;
-
-public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_TFFT> implements ISurvivalConstructable {
-
- public enum Field {
-
- T1(1_000_000L, 1), // LV
- T2(4_000_000L, 2), // MV
- T3(16_000_000L, 5), // HV
- T4(64_000_000L, 14), // EV
- T5(256_000_000L, 42), // IV
-
- T6(2_048_000_000L, 132), // LuV
- T7(131_072_000_000L, 429), // UV
- T8(8_388_608_000_000L, 1430), // UEV
- T9(536_870_912_000_000L, 4862), // UMV
-
- T10(1_099_511_627_776_000_000L, 0); // UXV
-
- public static final GTMTE_TFFT.Field[] VALUES = values();
- private final long capacity;
- private final int cost;
-
- Field(long capacity, int cost) {
- this.capacity = capacity;
- this.cost = cost;
- }
-
- public long getCapacity() {
- return capacity;
- }
-
- public int getCost() {
- return cost;
- }
- }
-
- private enum TFFTMultiHatch implements IHatchElement<GTMTE_TFFT> {
-
- INSTANCE;
-
- private final List<? extends Class<? extends IMetaTileEntity>> mteClasses;
-
- @SafeVarargs
- TFFTMultiHatch(Class<? extends IMetaTileEntity>... mteClasses) {
- this.mteClasses = Arrays.asList(mteClasses);
- }
-
- @Override
- public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
- return mteClasses;
- }
-
- @Override
- public IGT_HatchAdder<? super GTMTE_TFFT> adder() {
- return GTMTE_TFFT::addMultiHatchToMachineList;
- }
-
- @Override
- public long count(GTMTE_TFFT t) {
- return t.tfftHatch == null ? 0 : 1;
- }
- }
-
- private enum TFFTStorageFieldElement implements IStructureElement<GTMTE_TFFT> {
-
- INSTANCE;
-
- @Override
- public boolean check(GTMTE_TFFT t, World world, int x, int y, int z) {
- Block worldBlock = world.getBlock(x, y, z);
- int meta = worldBlock.getDamageValue(world, x, y, z);
- if (TFFT_FIELD != worldBlock || meta == 0) return false;
- t.FIELDS[meta - 1]++;
- return true;
- }
-
- private int getHint(ItemStack stack) {
- return Math.min(Field.VALUES.length, ChannelDataAccessor.getChannelData(stack, "field"));
- }
-
- @Override
- public boolean spawnHint(GTMTE_TFFT t, World world, int x, int y, int z, ItemStack trigger) {
- StructureLibAPI.hintParticle(world, x, y, z, TFFT_FIELD, getHint(trigger));
- return true;
- }
-
- @Override
- public boolean placeBlock(GTMTE_TFFT t, World world, int x, int y, int z, ItemStack trigger) {
- world.setBlock(x, y, z, TFFT_FIELD, getHint(trigger), 3);
- return true;
- }
-
- @Override
- public PlaceResult survivalPlaceBlock(GTMTE_TFFT t, World world, int x, int y, int z, ItemStack trigger,
- AutoPlaceEnvironment env) {
- if (check(t, world, x, y, z)) return PlaceResult.SKIP;
- int fieldTier = getHint(trigger);
- ItemStack result = env.getSource()
- .takeOne(
- s -> s != null && s.stackSize >= 0
- && s.getItem() == TFFT_FIELD_ITEM
- && s.getItemDamage() != CASING_META
- && s.getItemDamage() <= fieldTier,
- true);
- if (result == null) return PlaceResult.REJECT;
-
- return StructureUtility.survivalPlaceBlock(
- result,
- ItemStackPredicate.NBTMode.EXACT,
- null,
- true,
- world,
- x,
- y,
- z,
- env.getSource(),
- env.getActor(),
- env.getChatter());
- }
- }
-
- private static final IIconContainer TEXTURE_TFFT = new Textures.BlockIcons.CustomIcon("iconsets/TFFT");
- private static final IIconContainer TEXTURE_TFFT_ACTIVE = new Textures.BlockIcons.CustomIcon(
- "iconsets/TFFT_ACTIVE");
- private static final IIconContainer TEXTURE_TFFT_ACTIVE_GLOW = new Textures.BlockIcons.CustomIcon(
- "iconsets/TFFT_ACTIVE_GLOW");
- private static final int CASING_TEXTURE_ID_1 = (12 << 7) | 127;
- private static final int CASING_TEXTURE_ID_2 = 176;
-
- private static final Block TFFT_FIELD = Blocks.tfftStorageField;
- private static final Item TFFT_FIELD_ITEM = Item.getItemFromBlock(TFFT_FIELD);
- public static final int MAX_DISTINCT_FLUIDS = 25;
- private static final BigInteger MAX_CAPACITY = BigInteger.valueOf(Long.MAX_VALUE)
- .multiply(BigInteger.valueOf(25));
- private static final int CASING_META = 0;
- private static final int MIN_CASING_AMOUNT = 20;
- private static final int MAX_LAYER_AMOUNT = 13;
- private static final int DEFAULT_LAYER_AMOUNT = 3;
-
- private static final String STRUCTURE_PIECE_TOP = "top";
- private static final String STRUCTURE_PIECE_MID = "mid";
- private static final String STRUCTURE_PIECE_BOTTOM = "bottom";
-
- @Override
- public String[] getStructureDescription(ItemStack stackSize) {
- return description;
- }
-
- private static final String[] description = new String[] {
- translateToLocal("tile.kekztech_tfftstoragefield_block.hint.1"), // Casing
- translateToLocal("tile.kekztech_tfftstoragefield_block.hint.2"), // Casing, Maintenance Hatch, T.F.F.T Multi
- // I/O Hatch, Input/Output Hatch, Energy
- // Hatch
- translateToLocal("tile.kekztech_tfftstoragefield_block.hint.3"), // Glass, T.F.F.T Multi I/O Hatch,
- // Input/Output Hatch
- translateToLocal("tile.kekztech_tfftstoragefield_block.hint.4"), // Glass
- };
-
- // height channel for height
- // field channel for field
- private static final IStructureDefinition<GTMTE_TFFT> STRUCTURE_DEFINITION = IStructureDefinition
- .<GTMTE_TFFT>builder()
- .addShape(
- STRUCTURE_PIECE_TOP,
- transpose(new String[][] { { "ccccc" }, { "cCCCc" }, { "cC~Cc" }, { "cCCCc" }, { "ccccc" } }))
- .addShape(
- STRUCTURE_PIECE_MID,
- transpose(new String[][] { { "gGGGg" }, { "GfffG" }, { "GfffG" }, { "GfffG" }, { "gGGGg" } }))
- .addShape(
- STRUCTURE_PIECE_BOTTOM,
- transpose(new String[][] { { "ccccc" }, { "cCCCc" }, { "cCCCc" }, { "cCCCc" }, { "ccccc" } }))
- .addElement(
- 'c',
- buildHatchAdder(GTMTE_TFFT.class).atLeast(Energy, Maintenance)
- .casingIndex(CASING_TEXTURE_ID_1)
- .dot(1)
- .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(TFFT_FIELD, CASING_META))))
- .addElement(
- 'C',
- buildHatchAdder(GTMTE_TFFT.class).casingIndex(CASING_TEXTURE_ID_1)
- .atLeast(
- Energy,
- Maintenance,
- InputHatch.or(TFFTMultiHatch.INSTANCE),
- OutputHatch.or(TFFTMultiHatch.INSTANCE))
- .dot(2)
- .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(TFFT_FIELD, CASING_META))))
- .addElement(
- 'G',
- buildHatchAdder(GTMTE_TFFT.class)
- .atLeast(InputHatch.or(TFFTMultiHatch.INSTANCE), OutputHatch.or(TFFTMultiHatch.INSTANCE))
- .casingIndex(CASING_TEXTURE_ID_2)
- .dot(3)
- .buildAndChain(
- ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false),
- ofGlassTieredMixed((byte) 4, (byte) 127, 3)))
- .addElement(
- 'g',
- ofChain(
- ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false),
- ofGlassTieredMixed((byte) 4, (byte) 127, 4)))
- .addElement('f', ofChain(TFFTStorageFieldElement.INSTANCE))
- .build();
-
- public final FluidTankGT[] STORE = new FluidTankGT[MAX_DISTINCT_FLUIDS];
-
- {
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- STORE[i] = new FluidTankGT(0);
- }
- }
-
- private final int[] FIELDS = new int[Field.VALUES.length];
-
- private BigInteger capacity = BigInteger.ZERO;
- private long capacityPerFluid = 0L;
- private int casingAmount = 0;
- private int runningCost = 0;
-
- private boolean locked = true;
- private boolean doVoidExcess = false;
- private byte fluidSelector = -1;
-
- private GTMTE_TFFTHatch tfftHatch = null;
-
- public GTMTE_TFFT(String aName) {
- super(aName);
- }
-
- public GTMTE_TFFT(int aID, String aName, String aNameRegional) {
- super(aID, aName, aNameRegional);
- }
-
- @Override
- public IStructureDefinition<GTMTE_TFFT> getStructureDefinition() {
- return STRUCTURE_DEFINITION;
- }
-
- @Override
- public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
- return new GTMTE_TFFT(super.mName);
- }
-
- @Override
- public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
- int colorIndex, boolean aActive, boolean aRedstone) {
- if (side == facing) {
- if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1),
- TextureFactory.builder()
- .addIcon(TEXTURE_TFFT_ACTIVE)
- .extFacing()
- .build(),
- TextureFactory.builder()
- .addIcon(TEXTURE_TFFT_ACTIVE_GLOW)
- .extFacing()
- .glow()
- .build() };
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1),
- TextureFactory.builder()
- .addIcon(TEXTURE_TFFT)
- .extFacing()
- .build() };
- }
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1) };
- }
-
- @Override
- protected GT_Multiblock_Tooltip_Builder createTooltip() {
- final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
- tt.addMachineType("Fluid Tank")
- .addInfo("High-Tech fluid tank that can hold up to 25 different fluids!")
- .addInfo("Has 1/25th of the total capacity as capacity for each fluid.")
- .addInfo("Right clicking the controller with a screwdriver will turn on excess voiding.")
- .addInfo("Fluid storage amount and running cost depends on the storage field blocks used.")
- .addSeparator()
- .addInfo("Note on hatch locking:")
- .addInfo("Use an Integrated Circuit in the GUI slot to limit which fluid is output.")
- .addInfo("The index of a stored fluid can be obtained through the Tricorder.")
- .addSeparator()
- .beginVariableStructureBlock(5, 5, 5, 15, 5, 5, false)
- .addController("Top Center")
- .addCasingInfoMin("T.F.F.T Casing", MIN_CASING_AMOUNT, false)
- .addOtherStructurePart("Storage Field Blocks (Tier I-X)", "Inner 3xhx3 solid pillar")
- .addStructureInfo("Energy hatch is not required when running cost is 0")
- .addOtherStructurePart("EV+ Tier Glass/Warded Glass/Reinforced Glass", "Outer 5xhx5 glass shell")
- .addMaintenanceHatch("Any top or bottom casing")
- .addEnergyHatch("Any top or bottom casing")
- .addInputHatch("Instead of any casing or glass, has to touch storage field block")
- .addOutputHatch("Instead of any casing or glass, has to touch storage field block")
- .addStructureInfo("You can have a bunch of hatches")
- .addOtherStructurePart(
- "Multi I/O Hatches",
- "Instead of any casing or glass, has to touch storage field block")
- .addStructureInfo("Use MIOH with conduits or fluid storage busses to see all fluids at once.")
- .addSubChannelUsage("field", "Maximum Field Tier")
- .addSubChannelUsage("height", "Height of structure")
- .toolTipFinisher("KekzTech");
- return tt;
- }
-
- @Override
- public void construct(ItemStack stackSize, boolean hintsOnly) {
- int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1);
- buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, 2, 0);
- for (int i = -1; i >= 1 - layer; i--) buildPiece(STRUCTURE_PIECE_MID, stackSize, hintsOnly, 2, 2, i);
- buildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, hintsOnly, 2, 2, -layer);
- }
-
- @Override
- public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
- if (mMachine) return -1;
- int build = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, elementBudget, env, false, true);
- if (build >= 0) return build;
- int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1);
- for (int i = -1; i >= 1 - layer; i--) {
- build = survivialBuildPiece(STRUCTURE_PIECE_MID, stackSize, 2, 2, i, elementBudget, env, false, true);
- if (build >= 0) return build;
- }
- return survivialBuildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, 2, 2, -layer, elementBudget, env, false, true);
- }
-
- @Override
- public boolean isCorrectMachinePart(ItemStack aStack) {
- return true;
- }
-
- @Override
- public void clearHatches() {
- super.clearHatches();
- if (tfftHatch != null) {
- tfftHatch.unbind();
- tfftHatch = null;
- }
- }
-
- @Override
- public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
- Arrays.fill(FIELDS, 0);
-
- this.capacity = BigInteger.ZERO;
- this.capacityPerFluid = 0L;
- this.casingAmount = 0;
- this.runningCost = 0;
-
- if (!checkPiece(STRUCTURE_PIECE_TOP, 2, 2, 0)) return false;
-
- int layer = 1;
- while (checkPiece(STRUCTURE_PIECE_MID, 2, 2, -layer)) layer++;
- if (layer - 1 > MAX_LAYER_AMOUNT || layer - 1 < DEFAULT_LAYER_AMOUNT) return false;
- if (!checkPiece(STRUCTURE_PIECE_BOTTOM, 2, 2, -layer)) return false;
- if (casingAmount >= MIN_CASING_AMOUNT
- && (tfftHatch != null || (!mInputHatches.isEmpty() && !mOutputHatches.isEmpty()))
- && mInputHatches.size() + mOutputHatches.size() <= MAX_DISTINCT_FLUIDS * 2
- && mMaintenanceHatches.size() == 1) {
- BigInteger tempCap = BigInteger.ZERO;
- for (int i = 0; i < this.FIELDS.length; i++) {
- tempCap = tempCap.add(
- BigInteger.valueOf(Field.VALUES[i].getCapacity())
- .multiply(BigInteger.valueOf(this.FIELDS[i])));
- this.runningCost += Field.VALUES[i].getCost() * this.FIELDS[i];
- }
- this.setCapacity(tempCap);
-
- if (tfftHatch != null) tfftHatch.bind(this);
-
- if (this.runningCost == 0) {
- return true;
- }
-
- return !mEnergyHatches.isEmpty();
- }
- return false;
- }
-
- @Override
- public boolean checkRecipe(ItemStack itemStack) {
- mEfficiency = getCurrentEfficiency(null);
- mEfficiencyIncrease = 10000;
- mEUt = this.runningCost;
- mMaxProgresstime = 20;
-
- this.fluidSelector = (itemStack != null && itemStack.getItem() instanceof GT_IntegratedCircuit_Item)
- ? (byte) itemStack.getItemDamage()
- : -1;
-
- // Suck in fluids
- final ArrayList<FluidStack> inputFluids = getStoredFluids();
-
- if (!inputFluids.isEmpty()) {
- for (FluidStack aFluid : inputFluids) {
- final FluidStack toDeplete = aFluid.copy();
- toDeplete.amount = this.pull(aFluid, true);
- depleteInput(toDeplete);
- }
- }
-
- // Push out fluids
- if (!this.mOutputHatches.isEmpty()) {
- final FluidTankGT sFluid = this.getSelectedFluid();
- boolean isFluidSelected = this.fluidSelector != -1;
-
- if (!isFluidSelected || !sFluid.isEmpty()) {
- for (GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) {
- int hatchCapacity = tHatch.getCapacity();
- int hatchAmount = tHatch.getFluidAmount();
- int remaining = hatchCapacity - hatchAmount;
-
- if (remaining <= 0) continue;
-
- final FluidStack tFluid = tHatch.getFluid();
-
- String lockedFluidName = tHatch.getLockedFluidName() == null ? "" : tHatch.getLockedFluidName();
- String tFluidName = tFluid == null ? ""
- : tFluid.getFluid()
- .getName();
-
- boolean isFluidLocked = tHatch.isFluidLocked();
- boolean isFluidEmpty = tFluid == null || tHatch.getFluidAmount() == 0;
-
- if (isFluidLocked && !this.contains(lockedFluidName)) continue;
- if (!isFluidEmpty && !this.contains(tFluid)) continue;
- if ((isFluidLocked && !isFluidEmpty) && !lockedFluidName.equals(tFluidName)) continue;
-
- if (isFluidSelected) {
- if (isFluidLocked && !lockedFluidName.equals(sFluid.name())) continue;
- if (!isFluidEmpty && !sFluid.contains(tFluid)) continue;
-
- tHatch.fill(this.push(sFluid.get(remaining), true), true);
- } else if (isFluidLocked) {
- if (!isFluidEmpty && !lockedFluidName.equals(
- tFluid.getFluid()
- .getName()))
- continue;
-
- FluidStack aFluid = FluidRegistry.getFluidStack(lockedFluidName, remaining);
- tHatch.fill(this.push(aFluid, true), true);
- } else if (isFluidEmpty) {
- if (this.firstNotNull() != null) tHatch.fill(this.push(hatchCapacity, true), true);
- } else {
- tHatch.fill(this.push(new FluidStack(tFluid, remaining), true), true);
- }
- }
- }
- }
-
- if (this.mEUt > 0) this.mEUt = -this.mEUt;
-
- return true;
- }
-
- @Override
- public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
- super.onPostTick(aBaseMetaTileEntity, aTick);
- if (aBaseMetaTileEntity.isServerSide()) this.locked = !aBaseMetaTileEntity.isActive();
- }
-
- @Override
- public String[] getInfoData() {
- ArrayList<String> ll = new ArrayList<>();
- NumberFormat nf = NumberFormat.getNumberInstance();
-
- ll.add(EnumChatFormatting.YELLOW + "Stored Fluids:" + EnumChatFormatting.RESET);
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- FluidTankGT tank = STORE[i];
- if (tank.isEmpty()) {
- ll.add(MessageFormat.format("{0} - {1}: {2}L ({3}%)", i, "NULL", 0, 0));
- } else {
- String localizedName = STORE[i].get()
- .getLocalizedName();
- String amount = nf.format(STORE[i].amount());
- String percentage = capacityPerFluid > 0 ? String.valueOf(STORE[i].amount() * 100 / capacityPerFluid)
- : "";
-
- ll.add(MessageFormat.format("{0} - {1}: {2}L ({3}%)", i, localizedName, amount, percentage));
- }
- }
- ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET);
- ll.add("Used Capacity: " + nf.format(getStoredAmount()) + "L");
- ll.add("Total Capacity: " + nf.format(capacity) + "L");
- ll.add("Per-Fluid Capacity: " + nf.format(capacityPerFluid) + "L");
- ll.add("Running Cost: " + getActualEnergyUsage() + "EU/t");
- ll.add("Auto-voiding: " + doVoidExcess);
- ll.add(
- "Maintenance Status: " + ((getRepairStatus() == getIdealStatus())
- ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET
- : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET));
- ll.add("---------------------------------------------");
-
- return ll.toArray(new String[0]);
- }
-
- @Override
- public void saveNBTData(NBTTagCompound aNBT) {
- aNBT.setByteArray("capacity", capacity.toByteArray());
- aNBT.setBoolean("doVoidExcess", doVoidExcess);
- aNBT.setInteger("runningCost", runningCost);
- aNBT.setBoolean("lockFluid", locked);
- aNBT.setByte("fluidSelector", fluidSelector);
-
- NBTTagCompound fluidNBT = new NBTTagCompound();
- aNBT.setTag("STORE", fluidNBT);
-
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- STORE[i].writeToNBT(fluidNBT, String.valueOf(i));
- }
-
- super.saveNBTData(aNBT);
- }
-
- @Override
- public void loadNBTData(NBTTagCompound aNBT) {
- this.setCapacity(new BigInteger(aNBT.getByteArray("capacity")));
- this.setDoVoidExcess(aNBT.getBoolean("doVoidExcess"));
- this.runningCost = aNBT.getInteger("runningCost");
- this.locked = aNBT.getBoolean("lockFluid");
- this.fluidSelector = aNBT.getByte("fluidSelector");
-
- NBTTagCompound fluidNBT = (NBTTagCompound) aNBT.getTag("STORE");
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- STORE[i].readFromNBT(fluidNBT, String.valueOf(i));
- }
-
- super.loadNBTData(aNBT);
- }
-
- @Override
- public boolean isGivingInformation() {
- return true;
- }
-
- @Override
- public int getMaxEfficiency(ItemStack stack) {
- return 10000;
- }
-
- @Override
- public int getPollutionPerTick(ItemStack stack) {
- return 0;
- }
-
- @Override
- public int getDamageToComponent(ItemStack stack) {
- return 0;
- }
-
- @Override
- public boolean explodesOnComponentBreak(ItemStack stack) {
- return false;
- }
-
- @Override
- public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ);
- this.setDoVoidExcess(!doVoidExcess);
- GT_Utility.sendChatToPlayer(aPlayer, "Auto-voiding " + (this.doVoidExcess ? "enabled" : "disabled"));
- }
-
- private boolean addMultiHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
- if (aTileEntity != null) {
- final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
- if (aMetaTileEntity instanceof GTMTE_TFFTHatch) {
- if (this.tfftHatch != null) return false;
- this.tfftHatch = (GTMTE_TFFTHatch) aMetaTileEntity;
- this.tfftHatch.updateTexture(aBaseCasingIndex);
- return true;
- }
- }
- return false;
- }
-
- public int pull(FluidStack aFluid, boolean doPull) {
- if (locked) return 0;
- int index = getFluidPosition(aFluid);
- if (index >= 0) {
- return STORE[index].fill(aFluid, doPull);
- } else if (fluidCount() < MAX_DISTINCT_FLUIDS) {
- return STORE[getNullSlot()].setCapacity(capacityPerFluid)
- .fill(aFluid, doPull);
- }
- return 0;
- }
-
- public long pull(FluidStack aFluid, long amount, boolean doPull) {
- if (locked) return 0;
- int index = getFluidPosition(aFluid);
- if (index >= 0) {
- FluidTankGT tank = STORE[index];
- if (doPull) return tank.add(amount);
- return doVoidExcess ? amount
- : tank.amount() + amount > tank.capacity() ? tank.capacity() - tank.amount() : amount;
- } else if (fluidCount() < MAX_DISTINCT_FLUIDS) {
- FluidTankGT tank = STORE[getNullSlot()];
- if (doPull) return tank.add(amount, aFluid);
- return doVoidExcess ? amount : Math.min(amount, tank.capacity());
- }
- return 0;
- }
-
- public FluidStack push(FluidStack aFluid, boolean doPush) {
- if (locked) return null;
- int index = getFluidPosition(aFluid);
- if (index < 0) return null;
- return STORE[index].drain(aFluid.amount, doPush);
- }
-
- public FluidStack push(int amount, boolean doPush) {
- if (locked) return null;
- int index = firstNotNullSlot();
- if (index < 0) return null;
- return STORE[index].drain(amount, doPush);
- }
-
- public long push(FluidStack aFluid, long amount, boolean doPush) {
- if (locked) return 0;
- int index = getFluidPosition(aFluid);
- if (index < 0) return 0;
- if (doPush) return STORE[index].remove(amount);
- return STORE[index].amount(amount);
- }
-
- public long getCapacityPerFluid() {
- return this.capacityPerFluid;
- }
-
- public void setCapacity(BigInteger capacity) {
- if (capacity.compareTo(MAX_CAPACITY) > 0) {
- this.capacity = MAX_CAPACITY;
- this.capacityPerFluid = Long.MAX_VALUE;
- } else {
- this.capacity = capacity;
- this.capacityPerFluid = capacity.divide(BigInteger.valueOf(MAX_DISTINCT_FLUIDS))
- .longValue();
- }
-
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- FluidTankGT tank = STORE[i];
- if (tank.setCapacity(capacityPerFluid)
- .amount() > capacityPerFluid) {
- STORE[i] = new FluidTankGT(tank.get(), capacityPerFluid, capacityPerFluid);
- }
- }
- }
-
- public int fluidCount() {
- int tCount = 0;
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- if (!STORE[i].isEmpty()) tCount++;
- }
- return tCount;
- }
-
- public int getFluidPosition(String fluidName) {
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- if (!STORE[i].isEmpty() && STORE[i].name()
- .equals(fluidName)) return i;
- }
- return -1;
- }
-
- public int getFluidPosition(FluidStack aFluid) {
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- if (STORE[i].contains(aFluid)) return i;
- }
- return -1;
- }
-
- public int getNullSlot() {
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- if (STORE[i].isEmpty()) return i;
- }
- return -1;
- }
-
- public boolean contains(String fluidName) {
- return getFluidPosition(fluidName) >= 0;
- }
-
- public boolean contains(FluidStack aFluid) {
- return getFluidPosition(aFluid) >= 0;
- }
-
- public int firstNotNullSlot() {
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- if (!STORE[i].isEmpty()) return i;
- }
- return -1;
- }
-
- public FluidTankGT firstNotNull() {
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- if (!STORE[i].isEmpty()) return STORE[i];
- }
- return null;
- }
-
- public BigInteger getStoredAmount() {
- BigInteger amount = BigInteger.ZERO;
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- amount = amount.add(BigInteger.valueOf(STORE[i].amount()));
- }
- return amount;
- }
-
- public byte getFluidSelector() {
- return fluidSelector;
- }
-
- public FluidTankGT getSelectedFluid() {
- return fluidSelector != -1 ? STORE[fluidSelector] : null;
- }
-
- public void setDoVoidExcess(boolean doVoidExcess) {
- this.doVoidExcess = doVoidExcess;
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- STORE[i].setVoidExcess(doVoidExcess);
- }
- }
-
- public FluidTankInfo[] getTankInfo() {
- FluidTankInfo[] info = new FluidTankInfo[MAX_DISTINCT_FLUIDS];
- for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) {
- STORE[i].getFluid(); //
- info[i] = STORE[i].getInfo();
- }
- return info;
- }
-}