diff options
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java')
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java | 731 |
1 files changed, 0 insertions, 731 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java b/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java deleted file mode 100644 index b2635d9c2b..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java +++ /dev/null @@ -1,731 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.*; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.YOTTAHatch; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.client.GUI.GG_UITextures; -import goodgenerator.loader.Loaders; -import goodgenerator.util.CharExchanger; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -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_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class YottaFluidTank extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); - private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_QTANK_GLOW"); - private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); - private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_QCHEST_GLOW"); - - protected IStructureDefinition<YottaFluidTank> multiDefinition = null; - protected final ArrayList<YOTTAHatch> mYottaHatch = new ArrayList<>(); - - private static final BigInteger ONE_HUNDRED = BigInteger.valueOf(100); - - /** Tank capacity */ - public BigInteger mStorage = BigInteger.ZERO; - /** Amount of fluid millibuckets currently in the tank */ - public BigInteger mStorageCurrent = BigInteger.ZERO; - /** - * Fluid type currently stored in the tank, can be null. Stack size is always 1, real amount is stored in - * mStorageCurrent. - */ - public FluidStack mFluid = null; - /** - * Fluid type currently the tank is currently locked to, can be null. Stack size is always 1, real amount is stored - * in mStorageCurrent. - */ - public FluidStack mLockedFluid = null; - protected boolean isFluidLocked = false; - protected int glassMeta; - protected int maxCell; - protected final String YOTTANK_BOTTOM = mName + "buttom"; - protected final String YOTTANK_MID = mName + "mid"; - protected final String YOTTANK_TOP = mName + "top"; - protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); - private int workTickCounter = 0; - - public static final BigInteger MAX_INT_BIGINT = BigInteger.valueOf(Integer.MAX_VALUE); - - protected boolean voidExcessEnabled = false; - - protected Parameters.Group.ParameterIn tickRateSettings; - - /** Name of the tick rate setting */ - private static final INameFunction<YottaFluidTank> TICK_RATE_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.YottaFluidTank.cfgi.0"); - /** Status of the tick rate setting */ - private static final IStatusFunction<YottaFluidTank> TICK_RATE_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 1, 0, 100, 100); - - @Override - protected void parametersInstantiation_EM() { - tickRateSettings = parametrization.getGroup(9, true) - .makeInParameter(1, 20, TICK_RATE_SETTING_NAME, TICK_RATE_STATUS); - } - - public YottaFluidTank(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public YottaFluidTank(String name) { - super(name); - } - - public int getMeta() { - return glassMeta; - } - - public void setMeta(int meta) { - glassMeta = meta; - } - - public String getCap() { - return mStorage.toString(10); - } - - public String getStored() { - return mStorageCurrent.toString(10); - } - - public String getFluidName() { - if (mFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.empty"); - return mFluid.getLocalizedName(); - } - - public String getLockedFluidName() { - if (!isFluidLocked) return StatCollector.translateToLocal("scanner.info.YOTTank.none"); - if (mLockedFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.next"); - return mLockedFluid.getLocalizedName(); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - String tAmount = aNBT.getString("mStorage"); - String tAmountCurrent = aNBT.getString("mStorageCurrent"); - if (StringUtils.isEmpty(tAmount)) tAmount = "0"; - if (StringUtils.isEmpty(tAmountCurrent)) tAmountCurrent = "0"; - mStorage = new BigInteger(tAmount, 10); - mStorageCurrent = new BigInteger(tAmountCurrent, 10); - mFluid = FluidRegistry.getFluidStack(aNBT.getString("mFluidName"), 1); - mLockedFluid = FluidRegistry.getFluidStack(aNBT.getString("mLockedFluidName"), 1); - voidExcessEnabled = aNBT.getBoolean("voidExcessEnabled"); - isFluidLocked = aNBT.getBoolean("isFluidLocked"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setString("mStorage", mStorage.toString(10)); - aNBT.setString("mStorageCurrent", mStorageCurrent.toString(10)); - aNBT.setString( - "mFluidName", - mFluid == null ? "" - : mFluid.getFluid() - .getName()); - aNBT.setString( - "mLockedFluidName", - mLockedFluid == null ? "" - : mLockedFluid.getFluid() - .getName()); - aNBT.setBoolean("voidExcessEnabled", voidExcessEnabled); - aNBT.setBoolean("isFluidLocked", isFluidLocked); - super.saveNBTData(aNBT); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - this.mEUt = 0; - this.mMaxProgresstime = 20; - return SimpleCheckRecipeResult.ofSuccess(""); - } - - public boolean getIsVoidExcessEnabled() { - return voidExcessEnabled; - } - - /** - * Attempts to remove {@code amount} of fluid from the tank if possible, does not do partial removals. - * - * @param amount The millibucket amount of the fluid to remove - * @return True if successfully removed amount, false if no fluid was removed. - */ - public boolean reduceFluid(long amount) { - final BigInteger bigAmount = BigInteger.valueOf(amount); - if (mStorageCurrent.compareTo(bigAmount) < 0) { - return false; - } else { - mStorageCurrent = mStorageCurrent.subtract(bigAmount); - return true; - } - } - - /** - * Attempts to put {@code amount} of fluid into the tank if possible, fails if there's not enough space for all of - * it. - * - * @param amount The millibucket amount of the fluid to insert - * @param doFill Whether to actually fill, or just simulate a fill - * @return True if successfully added the given amount of fluid to the tank, false if failed. - */ - public boolean addFluid(long amount, boolean doFill) { - final BigInteger bigAmount = BigInteger.valueOf(amount); - final BigInteger newTotal = mStorageCurrent.add(bigAmount); - if (newTotal.compareTo(mStorage) > 0) { - return false; - } else { - if (doFill) { - mStorageCurrent = newTotal; - } - return true; - } - } - - // Avoid allocating a new array on every query - private final FluidTankInfo[] tankInfoCache = new FluidTankInfo[1]; - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { - int fluidSize = mStorageCurrent.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorageCurrent.intValue(); - int tankCapacity = mStorage.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorage.intValue(); - final boolean cacheNeedsRecreation; - if (tankInfoCache[0] == null || tankInfoCache[0].capacity != tankCapacity) { - cacheNeedsRecreation = true; - } else if (tankInfoCache[0].fluid == null) { - cacheNeedsRecreation = (mFluid != null); - } else { - cacheNeedsRecreation = !tankInfoCache[0].fluid.isFluidEqual(mFluid); - } - if (cacheNeedsRecreation) { - final FluidStack storedFluid = mFluid.copy(); - storedFluid.amount = fluidSize; - tankInfoCache[0] = new FluidTankInfo(storedFluid, tankCapacity); - } else if (mFluid != null) { - tankInfoCache[0].fluid.amount = fluidSize; - } - return tankInfoCache; - } - - @Override - protected void clearHatches_EM() { - super.clearHatches_EM(); - mYottaHatch.clear(); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mStorage = BigInteger.ZERO; - glassMeta = 0; - maxCell = 0; - if (!structureCheck_EM(YOTTANK_BOTTOM, 2, 0, 0)) return false; - int cnt = 0; - while (structureCheck_EM(YOTTANK_MID, 2, cnt + 1, 0)) { - cnt++; - } - if (cnt > 15 || cnt < 1) return false; - if (!structureCheck_EM(YOTTANK_TOP, 2, cnt + 2, 0)) return false; - // maxCell+1 = Tier of highest Cell. glassMeta is the glass voltage tier - if (maxCell + 3 <= glassMeta) { - if (mStorage.compareTo(mStorageCurrent) < 0) mStorageCurrent = mStorage; - if (mFluid == null) { - mStorageCurrent = BigInteger.ZERO; - } - return true; - } - return false; - } - - @Override - public IStructureDefinition<YottaFluidTank> getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.<YottaFluidTank>builder() - .addShape( - YOTTANK_BOTTOM, - transpose( - new String[][] { { "MM~MM", "MCCCM", "MCCCM", "MCCCM", "MMMMM" }, - { " ", " OOO ", " OOO ", " OOO ", " " } })) - .addShape(YOTTANK_MID, transpose(new String[][] { { "GGGGG", "GRRRG", "GRRRG", "GRRRG", "GGGGG" } })) - .addShape( - YOTTANK_TOP, - transpose( - new String[][] { { "FFFFF", "F F", "F F", "F F", "FFFFF" }, - { "CCCCC", "CIIIC", "CIIIC", "CIIIC", "CCCCC" } })) - .addElement('C', ofBlock(Loaders.yottaFluidTankCasing, 0)) - .addElement( - 'G', - withChannel( - "glass", - BorosilicateGlass.ofBoroGlass( - (byte) 0, - (byte) 1, - Byte.MAX_VALUE, - YottaFluidTank::setMeta, - te -> (byte) te.getMeta()))) - .addElement('R', ofChain(cells(10))) - .addElement('F', ofFrame(Materials.Steel)) - .addElement( - 'I', - buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.InputHatch) - .casingIndex(1537) - .dot(1) - .buildAndChain(Loaders.yottaFluidTankCasing, 0)) - .addElement( - 'M', - buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.Maintenance) - .casingIndex(1537) - .dot(2) - .buildAndChain(Loaders.yottaFluidTankCasing, 0)) - .addElement( - 'O', - buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.OutputHatch) - .adder(YottaFluidTank::addOutput) - .casingIndex(1537) - .dot(1) - .buildAndChain(Loaders.yottaFluidTankCasing, 0)) - .build(); - } - return multiDefinition; - } - - public List<IStructureElement<YottaFluidTank>> cells(int num) { - List<IStructureElement<YottaFluidTank>> out = new ArrayList<>(); - for (int i = 0; i < num; ++i) { - int finalI = i; - out.add(onElementPass(x -> { - x.mStorage = x.mStorage.add(calStorage(finalI)); - x.maxCell = Math.max(x.maxCell, finalI); - }, ofBlock(Loaders.yottaFluidTankCell, i))); - } - return out; - } - - public final boolean addOutput(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } else { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } else if (aMetaTileEntity instanceof YOTTAHatch) { - // only one yothatch allowed - if (!this.mYottaHatch.isEmpty()) return false; - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((YOTTAHatch) aMetaTileEntity).setTank(this); - return this.mYottaHatch.add((YOTTAHatch) aMetaTileEntity); - } - } - } - return false; - } - - @Override - public String[] getInfoData() { - return new String[] { StatCollector.translateToLocal("scanner.info.YOTTank.1"), - StatCollector.translateToLocal( - EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getFluidName() + EnumChatFormatting.RESET)), - - StatCollector.translateToLocal("scanner.info.YOTTank.0"), - StatCollector.translateToLocal( - EnumChatFormatting.GREEN + CharExchanger.formatNumber(getCap()) + EnumChatFormatting.RESET + " L"), - - StatCollector.translateToLocal("scanner.info.YOTTank.2"), - StatCollector.translateToLocal( - EnumChatFormatting.GREEN + CharExchanger.formatNumber(getStored()) - + EnumChatFormatting.RESET - + " L" - + " (" - + EnumChatFormatting.GREEN - + getPercent() - + "%" - + EnumChatFormatting.RESET - + ")"), - - StatCollector.translateToLocal("scanner.info.YOTTank.3"), - StatCollector.translateToLocal( - EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getLockedFluidName()) - + EnumChatFormatting.RESET) }; - } - - private String getPercent() { - if (mStorage.signum() == 0) return "0"; - return mStorageCurrent.multiply(ONE_HUNDRED) - .divide(mStorage) - .toString(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fluid Tank") - .addInfo("Controller block for the YOTTank.") - .addInfo("The max output speed is decided by the amount of stored liquid and the output hatch's capacity.") - .addInfo("The max fluid cell tier is limited by the glass tier.") - .addInfo("HV glass for T1, EV glass for T2, IV glass for T3. . .") - .addInfo("The max height of the cell blocks is 15.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginVariableStructureBlock(5, 5, 1, 15, 5, 5, false) - .addController("Front of the second layer") - .addCasingInfoExactly("Steel Frame Box", 16, false) - .addCasingInfoRange("Glass (HV+)", 16, 240, true) - .addCasingInfoRange("Fluid Cell Block", 9, 135, true) - .addCasingInfoRange("YOTTank Casing", 25, 43, false) - .addInputHatch("Hint block with dot 1") - .addOutputHatch("Hint block with dot 3") - .toolTipFinisher("Good Generator"); - return tt; - } - - private static final BigInteger[] storageWithCells; - - static { - storageWithCells = new BigInteger[10]; - final BigInteger baseStorage = BigInteger.valueOf(1_000_000); - final BigInteger storageMultiplier = BigInteger.valueOf(100); - BigInteger currentStorage = baseStorage; - for (int i = 0; i < 10; i++) { - storageWithCells[i] = currentStorage; - currentStorage = currentStorage.multiply(storageMultiplier); - } - } - - public BigInteger calStorage(int meta) { - return storageWithCells[meta]; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - super.onRunningTick(aStack); - if (this.getBaseMetaTileEntity() - .isServerSide()) { - long tickRate = Math.min(100L, Math.max(1L, (long) tickRateSettings.get())); - ++workTickCounter; - if (workTickCounter < tickRate) { - return true; - } - workTickCounter = 0; - - List<FluidStack> tStore = getStoredFluids(); - for (FluidStack tFluid : tStore) { - if (tFluid == null) continue; - if (isFluidLocked) { - if (mLockedFluid != null) { - if (!tFluid.isFluidEqual(mLockedFluid)) continue;; - } else { - mLockedFluid = tFluid.copy(); - mLockedFluid.amount = 1; - } - } - if (mFluid == null || tFluid.isFluidEqual(mFluid)) { - if (mFluid == null) { - mFluid = tFluid.copy(); - mFluid.amount = 1; - } - if (addFluid(tFluid.amount, true)) { - tFluid.amount = 0; - } else { - if (voidExcessEnabled) { - tFluid.amount = 0; - } else { - final BigInteger delta = mStorage.subtract(mStorageCurrent); - tFluid.amount -= delta.intValueExact(); - } - mStorageCurrent = mStorage; - } - } - } - - if (mStorageCurrent.compareTo(BigInteger.ZERO) <= 0) { - mFluid = null; - } - - if (mFluid != null) { - // Try to drain 1% of the tank per tick - int outputAmount = mStorageCurrent.divide(ONE_HUNDRED) - .min(MAX_INT_BIGINT) - .max(BigInteger.ONE) - .intValueExact(); - if (outputAmount != 1) outputAmount = (int) Math.min(Integer.MAX_VALUE, (long) outputAmount * tickRate); - else outputAmount = Math.min(mStorageCurrent.intValueExact(), outputAmount * (int) tickRate); - - final int originalOutputAmount = outputAmount; - - for (final GT_MetaTileEntity_Hatch outputHatch : mOutputHatches) { - final FluidStack fluidInHatch = outputHatch.mFluid; - - final int remainingHatchSpace; - if (fluidInHatch != null) { - if (fluidInHatch.isFluidEqual(mFluid)) { - remainingHatchSpace = outputHatch.getCapacity() - fluidInHatch.amount; - } else { - continue; - } - } else { - remainingHatchSpace = outputHatch.getCapacity(); - } - - final int amountToFillHatch = Math.min(remainingHatchSpace, outputAmount); - if (amountToFillHatch <= 0) { - continue; - } - final FluidStack fillStack = mFluid.copy(); - fillStack.amount = amountToFillHatch; - final int transferredAmount = outputHatch.fill(fillStack, true); - outputAmount -= transferredAmount; - } - - final int totalDrainedAmount = originalOutputAmount - outputAmount; - if (totalDrainedAmount > 0) { - mStorageCurrent = mStorageCurrent.subtract(BigInteger.valueOf(totalDrainedAmount)); - if (mStorageCurrent.signum() < 0) { - throw new IllegalStateException( - "YOTTank drained beyond its fluid amount, indicating logic bug: " + mStorageCurrent); - } - } - } - } - return true; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(YOTTANK_BOTTOM, 2, 0, 0, stackSize, hintsOnly); - int height = stackSize.stackSize; - if (height > 15) height = 15; - structureBuild_EM(YOTTANK_TOP, 2, height + 2, 0, stackSize, hintsOnly); - while (height > 0) { - structureBuild_EM(YOTTANK_MID, 2, height, 0, stackSize, hintsOnly); - height--; - } - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack toolStack) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - voidExcessEnabled ^= true; - aPlayer.addChatMessage( - new ChatComponentTranslation( - voidExcessEnabled ? "yottank.chat.voidExcessEnabled" : "yottank.chat.voidExcessDisabled")); - return true; - } - return false; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack toolStack) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - if (mLockedFluid == null) { - if (mFluid != null) { - mLockedFluid = mFluid; - aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.1", getFluidName())); - } else { - aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.2")); - } - isFluidLocked = true; - } else { - mLockedFluid = null; - isFluidLocked = false; - aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.0")); - } - return true; - } - return false; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("YOTTank.hint", 8); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new YottaFluidTank(this.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(1537), - TextureFactory.of(textureFontOn), TextureFactory.builder() - .addIcon(textureFontOn_Glow) - .glow() - .build() }; - else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), - TextureFactory.of(textureFontOff), TextureFactory.builder() - .addIcon(textureFontOff_Glow) - .glow() - .build() }; - } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537) }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int built = 0; - built += survivialBuildPiece(YOTTANK_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); - int height = stackSize.stackSize; - if (height > 15) height = 15; - built += survivialBuildPiece(YOTTANK_TOP, stackSize, 2, height + 2, 0, elementBudget - built, env, false, true); - while (height > 0) { - built += survivialBuildPiece(YOTTANK_MID, stackSize, 2, height, 0, elementBudget - built, env, false, true); - height--; - } - return built; - } - - @Override - protected boolean shouldDisplayCheckRecipeResult() { - return false; - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements - .widget( - new TextWidget().setStringSupplier( - () -> StatCollector.translateToLocal("gui.YOTTank.0") + " " + numberFormat.format(mStorage) + " L") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorage, val -> mStorage = val)) - .widget( - new TextWidget() - .setStringSupplier(() -> StatCollector.translateToLocal("gui.YOTTank.1") + " " + getFluidName()) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocal("gui.YOTTank.2") + " " - + numberFormat.format(mStorageCurrent) - + " L") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorageCurrent, val -> mStorageCurrent = val)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocal("gui.YOTTank.3") + " " + getLockedFluidName()) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.FluidStackSyncer(() -> mLockedFluid, val -> mLockedFluid = val)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> isFluidLocked, val -> isFluidLocked = val)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> voidExcessEnabled, val -> voidExcessEnabled = val)); - } - - @Override - protected ButtonWidget createSafeVoidButton() { - return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - voidExcessEnabled = !voidExcessEnabled; - }) - .setPlayClickSound(false) - .setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - ret.add( - voidExcessEnabled ? TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON - : TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 132 : 156) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.void")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - - @Override - protected ButtonWidget createPowerPassButton() { - return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - isFluidLocked = !isFluidLocked; - if (!widget.getContext() - .isClient()) mLockedFluid = isFluidLocked ? mFluid : null; - }) - .setPlayClickSound(false) - .setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - ret.add(isFluidLocked ? GG_UITextures.OVERLAY_BUTTON_LOCK_ON : GG_UITextures.OVERLAY_BUTTON_LOCK_OFF); - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 116 : 140) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.locking")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} |