diff options
author | Johannes Gäßler <updrn@student.kit.edu> | 2017-08-05 18:50:22 +0200 |
---|---|---|
committer | Dream-Master <dream-master@gmx.net> | 2017-08-06 10:55:41 +0200 |
commit | 357ccde9dafa2d55937f7ee41407ae3cf90e4639 (patch) | |
tree | 2d9ac628dc1ae5773c31f90536079563bd87a1cb /src | |
parent | e0357982093121371a301f60c7f99376839455bf (diff) | |
download | GT5-Unofficial-357ccde9dafa2d55937f7ee41407ae3cf90e4639.tar.gz GT5-Unofficial-357ccde9dafa2d55937f7ee41407ae3cf90e4639.tar.bz2 GT5-Unofficial-357ccde9dafa2d55937f7ee41407ae3cf90e4639.zip |
cherry pick
Commit: cbcb04d11717c2884d9565404997d123f3efd85e [cbcb04d]
Currently not working as intended
Diffstat (limited to 'src')
2 files changed, 70 insertions, 31 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java index b36e0fbdd4..c381c7a055 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java @@ -11,10 +11,12 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch { + private String lockedFluidName = null; public byte mMode = 0; public GT_MetaTileEntity_Hatch_Output(int aID, String aName, String aNameRegional, int aTier) { @@ -153,32 +155,47 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch { public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (!getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), getBaseMetaTileEntity())) return; - mMode = (byte) ((mMode + 1) % 8); + if (aPlayer.isSneaking()) { + mMode = (byte) ((mMode + 9) % 10); + } else { + mMode = (byte) ((mMode + 1) % 10); + } switch (mMode) { case 0: - GT_Utility.sendChatToPlayer(aPlayer, trans("108","Outputs Liquids, Steam and Items")); + GT_Utility.sendChatToPlayer(aPlayer, trans("108","Outputs misc. Fluids, Steam and Items")); break; case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("109","Outputs Steam and Items")); break; case 2: - GT_Utility.sendChatToPlayer(aPlayer, trans("110","Outputs Steam and Liquids")); + GT_Utility.sendChatToPlayer(aPlayer, trans("110","Outputs Steam and misc. Fluids")); break; case 3: GT_Utility.sendChatToPlayer(aPlayer, trans("111","Outputs Steam")); break; case 4: - GT_Utility.sendChatToPlayer(aPlayer, trans("112","Outputs Liquids and Items")); + GT_Utility.sendChatToPlayer(aPlayer, trans("112","Outputs misc. Fluids and Items")); break; case 5: GT_Utility.sendChatToPlayer(aPlayer, trans("113","Outputs only Items")); break; case 6: - GT_Utility.sendChatToPlayer(aPlayer, trans("114","Outputs only Liquids")); + GT_Utility.sendChatToPlayer(aPlayer, trans("114","Outputs only misc. Fluids")); break; case 7: GT_Utility.sendChatToPlayer(aPlayer, trans("115","Outputs nothing")); break; + case 8: + this.setLockedFluidName(this.getDrainableStack().getUnlocalizedName()); + GT_Utility.sendChatToPlayer(aPlayer, trans("115.1", String.format("Outputs items and 1 specific Fluid (%s)", mFluid == null ? + trans("115.3","currently none, will be locked to the next that is put in"): + mFluid.getLocalizedName()))); + break; + case 9: + GT_Utility.sendChatToPlayer(aPlayer, trans("115.2", String.format("Outputs 1 specific Fluid (%s)", mFluid == null ? + trans("115.3","currently none, will be locked to the next that is put in"): + mFluid.getLocalizedName()))); + break; } } @@ -191,11 +208,23 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch { } public boolean outputsLiquids() { - return mMode % 2 == 0; + return mMode % 2 == 0 || mMode == 9; } public boolean outputsItems() { - return mMode % 4 < 2; + return mMode % 4 < 2 && mMode != 9; + } + + public boolean isFluidLocked(){ + return mMode == 8 || mMode == 9; + } + + public String getLockedFluidName() { + return lockedFluidName; + } + + public void setLockedFluidName(String lockedFluidName) { + this.lockedFluidName = lockedFluidName; } @Override diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java index 6ea6df7b4c..1db313aed7 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java @@ -582,36 +582,46 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity { return false; } - public boolean addOutput(FluidStack aLiquid) { - if (aLiquid == null) return false; - FluidStack tLiquid = aLiquid.copy(); + private boolean dumpFluid(FluidStack copiedFluidStack, boolean restrictiveHatchesOnly){ for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) { - if (isValidMetaTileEntity(tHatch) && GT_ModHandler.isSteam(aLiquid) ? tHatch.outputsSteam() : tHatch.outputsLiquids()) { - int tAmount = tHatch.fill(tLiquid, false); - if (tAmount >= tLiquid.amount) { - return tHatch.fill(tLiquid, true) >= tLiquid.amount; - } else if (tAmount > 0) { - tLiquid.amount = tLiquid.amount - tHatch.fill(tLiquid, true); - } + if (!isValidMetaTileEntity(tHatch) || (restrictiveHatchesOnly && tHatch.mMode == 0)) { + continue; + } + if (GT_ModHandler.isSteam(copiedFluidStack)) { + if (!tHatch.outputsSteam()) { + continue; + } + } else { + if (!tHatch.outputsLiquids()) { + continue; + } + if (tHatch.isFluidLocked() && tHatch.getLockedFluidName() != null && tHatch.getLockedFluidName() != copiedFluidStack.getUnlocalizedName()) { + continue; + } + } + int tAmount = tHatch.fill(copiedFluidStack, false); + if (tAmount >= copiedFluidStack.amount) { + tHatch.setLockedFluidName(copiedFluidStack.getUnlocalizedName()); + return tHatch.fill(copiedFluidStack, true) >= copiedFluidStack.amount; + } else if (tAmount > 0) { + tHatch.setLockedFluidName(copiedFluidStack.getUnlocalizedName()); + copiedFluidStack.amount = copiedFluidStack.amount - tHatch.fill(copiedFluidStack, true); } } return false; } + + public boolean addOutput(FluidStack aLiquid) { + if (aLiquid == null) return false; + FluidStack copiedFluidStack = aLiquid.copy(); + dumpFluid(copiedFluidStack, true); + dumpFluid(copiedFluidStack, false); + return false; + } - protected void addFluidOutputs(FluidStack[] mOutputFluids) { - for (FluidStack outputFluidStack : mOutputFluids) { - if (outputFluidStack != null) { - FluidStack copiedStack = outputFluidStack.copy(); - for (GT_MetaTileEntity_Hatch_Output outputhatch : mOutputHatches) { - if (copiedStack.amount <= 0) { - break; - } - if (!isValidMetaTileEntity(outputhatch)) { - continue; - } - copiedStack.amount -= outputhatch.fill(copiedStack, true); - } - } + protected void addFluidOutputs(FluidStack[] mOutputFluids2) { + for (FluidStack outputFluidStack : mOutputFluids2) { + addOutput(outputFluidStack); } } |