diff options
Diffstat (limited to 'src/main/java/gregtech/api/gui')
4 files changed, 61 insertions, 24 deletions
diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java index fc0b3270d2..590d406ca4 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java @@ -4,6 +4,7 @@ import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Basi import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.IFluidAccess; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; @@ -221,7 +222,7 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank { tTank.setFillableStack(GT_Utility.getFluidFromDisplayStack(tTank.getStackInSlot(2))); } GT_MetaTileEntity_BasicTank tTank = (GT_MetaTileEntity_BasicTank) mTileEntity.getMetaTileEntity(); - BasicTankFluidAccess tFillableAccess = BasicTankFluidAccess.from(tTank, true); + IFluidAccess tFillableAccess = constructFluidAccess(tTank, true); GT_Recipe_Map recipes = machine.getRecipeList(); // If the machine has recipes but no fluid inputs, disallow filling this slot with fluids. ItemStack tToken = handleFluidSlotClick( diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java index 8d8d018cdc..27138511f0 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java @@ -54,7 +54,7 @@ public class GT_Container_BasicTank extends GT_ContainerMetaTile_Machine { tTank.setDrainableStack(GT_Utility.getFluidFromDisplayStack(tTank.getStackInSlot(2))); } GT_MetaTileEntity_BasicTank tTank = (GT_MetaTileEntity_BasicTank) mTileEntity.getMetaTileEntity(); - BasicTankFluidAccess tDrainableAccess = BasicTankFluidAccess.from(tTank, false); + IFluidAccess tDrainableAccess = constructFluidAccess(tTank, false); return handleFluidSlotClick( tDrainableAccess, aPlayer, aMouseclick == 0, true, !tTank.isDrainableStackSeparate()); } @@ -106,9 +106,13 @@ public class GT_Container_BasicTank extends GT_ContainerMetaTile_Machine { return 1; } + protected IFluidAccess constructFluidAccess(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) { + return new BasicTankFluidAccess(aTank, aIsFillableStack); + } + static class BasicTankFluidAccess implements IFluidAccess { - private final GT_MetaTileEntity_BasicTank mTank; - private final boolean mIsFillableStack; + protected final GT_MetaTileEntity_BasicTank mTank; + protected final boolean mIsFillableStack; public BasicTankFluidAccess(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) { this.mTank = aTank; @@ -132,22 +136,5 @@ public class GT_Container_BasicTank extends GT_ContainerMetaTile_Machine { public int getCapacity() { return mTank.getCapacity(); } - - @Override - public int getRealCapacity() { - if (mTank instanceof GT_MetaTileEntity_DigitalTankBase) { - return ((GT_MetaTileEntity_DigitalTankBase) mTank).getRealCapacity(); - } - return IFluidAccess.super.getRealCapacity(); - } - - static BasicTankFluidAccess from(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) { - return new BasicTankFluidAccess(aTank, aIsFillableStack); - } - - @Override - public void verifyFluidStack() { - if (!(mTank instanceof GT_MetaTileEntity_DigitalTankBase) && get() != null && get().amount <= 0) set(null); - } } } diff --git a/src/main/java/gregtech/api/gui/GT_Container_DigitalTank.java b/src/main/java/gregtech/api/gui/GT_Container_DigitalTank.java index bdc2b32c80..b4cdf698dc 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_DigitalTank.java +++ b/src/main/java/gregtech/api/gui/GT_Container_DigitalTank.java @@ -2,7 +2,9 @@ package gregtech.api.gui; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.IFluidAccess; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; import gregtech.api.util.GT_Utility; import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalTankBase; import net.minecraft.entity.player.EntityPlayer; @@ -53,15 +55,16 @@ public class GT_Container_DigitalTank extends GT_Container_BasicTank { mte.mLockFluid = !mte.mLockFluid; if (mte.mLockFluid) { if (mte.mFluid == null) { - mte.lockedFluidName = null; + mte.setLockedFluidName(null); inBrackets = GT_Utility.trans("264", "currently none, will be locked to the next that is put in"); } else { - mte.lockedFluidName = mte.getDrainableStack().getUnlocalizedName(); + mte.setLockedFluidName(mte.getDrainableStack().getFluid().getName()); inBrackets = mte.getDrainableStack().getLocalizedName(); } GT_Utility.sendChatToPlayer( aPlayer, String.format("%s (%s)", GT_Utility.trans("265", "1 specific Fluid"), inBrackets)); } else { + mte.setLockedFluidName(null); GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("266", "Lock Fluid Mode Disabled")); } return null; @@ -152,4 +155,24 @@ public class GT_Container_DigitalTank extends GT_Container_BasicTank { break; } } + + @Override + protected IFluidAccess constructFluidAccess(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) { + return new DigitalTankFluidAccess(aTank, aIsFillableStack); + } + + static class DigitalTankFluidAccess extends BasicTankFluidAccess { + + public DigitalTankFluidAccess(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) { + super(aTank, aIsFillableStack); + } + + @Override + public int getRealCapacity() { + return ((GT_MetaTileEntity_DigitalTankBase) mTank).getRealCapacity(); + } + + @Override + public void verifyFluidStack() {} + } } diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_DigitalTank.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_DigitalTank.java index 5d72c9ff51..c1e90ed68a 100644 --- a/src/main/java/gregtech/api/gui/GT_GUIContainer_DigitalTank.java +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_DigitalTank.java @@ -2,14 +2,21 @@ package gregtech.api.gui; import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.enums.GT_Values; +import gregtech.api.interfaces.IDragAndDropSupport; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.net.GT_Packet_SetLockedFluid; import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalTankBase; import java.util.ArrayList; import java.util.List; +import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; -public class GT_GUIContainer_DigitalTank extends GT_GUIContainerMetaTile_Machine { +public class GT_GUIContainer_DigitalTank extends GT_GUIContainerMetaTile_Machine implements IDragAndDropSupport { private final String mName; private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF), @@ -94,4 +101,23 @@ public class GT_GUIContainer_DigitalTank extends GT_GUIContainerMetaTile_Machine } } } + + @Override + public boolean handleDragAndDropGT( + GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button, boolean isGhost) { + if (!(gui instanceof GT_GUIContainer_DigitalTank) + || !((GT_GUIContainer_DigitalTank) gui).isMouseOverSlot(2, mousex, mousey) + || !isGhost) return false; + FluidStack fluidStack = GT_Utility.getFluidFromContainerOrFluidDisplay(draggedStack); + if (fluidStack == null) return false; + IGregTechTileEntity te = ((GT_GUIContainer_DigitalTank) gui).mContainer.mTileEntity; + GT_MetaTileEntity_DigitalTankBase mte = (GT_MetaTileEntity_DigitalTankBase) te.getMetaTileEntity(); + if (mte == null || !mte.allowChangingLockedFluid(fluidStack.getFluid().getName())) return false; + + GT_Values.NW.sendToServer(new GT_Packet_SetLockedFluid(te, fluidStack)); + draggedStack.stackSize = 0; + // propagate to client too + mte.setLockedFluidName(fluidStack.getFluid().getName()); + return true; + } } |