diff options
author | miozune <miozune@gmail.com> | 2022-09-02 20:57:30 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-02 13:57:30 +0200 |
commit | 41d1832928fb89accc49b384ddec71375daaed71 (patch) | |
tree | cb2cc16e52458a892b2798f28c3305d3b3f05a9f /src/main/java/gregtech/common | |
parent | 233b0f321a0d0b9594f6e0f55dd0d7ae789f9c31 (diff) | |
download | GT5-Unofficial-41d1832928fb89accc49b384ddec71375daaed71.tar.gz GT5-Unofficial-41d1832928fb89accc49b384ddec71375daaed71.tar.bz2 GT5-Unofficial-41d1832928fb89accc49b384ddec71375daaed71.zip |
Add Drag-And-Drop support for digital tank (#1333)
* Add Drag-And-Drop support for digital tank
* lockedFluidName is null in old save
Diffstat (limited to 'src/main/java/gregtech/common')
3 files changed, 57 insertions, 48 deletions
diff --git a/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java b/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java index 954b8ab61b..135c20dafe 100644 --- a/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java +++ b/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java @@ -37,15 +37,15 @@ public class GT_Container_OutputHatch extends GT_Container_BasicTank { || (tMode >= 8 && tReadyLockFluid.getFluid().getName().equals(tHatch.getLockedFluidName()))) { tHatch.setLockedFluidName(null); GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("300", "Fluid Lock Cleared.")); - tHatch.mMode = 0; + tHatch.lockFluid(false); } else { tHatch.setLockedFluidName(tReadyLockFluid.getFluid().getName()); GT_Utility.sendChatToPlayer( aPlayer, String.format( - GT_Utility.trans("151.4", "Sucessfully locked Fluid to %s"), + GT_Utility.trans("151.4", "Successfully locked Fluid to %s"), tReadyLockFluid.getLocalizedName())); - tHatch.mMode = 9; + tHatch.lockFluid(true); } } return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java index 605fb5a463..7e27a7409a 100644 --- a/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java +++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java @@ -2,25 +2,19 @@ package gregtech.common.gui; import static gregtech.api.enums.GT_Values.RES_PATH_GUI; -import codechicken.nei.VisiblityData; -import codechicken.nei.api.INEIGuiHandler; -import codechicken.nei.api.TaggedInventoryArea; -import cpw.mods.fml.common.Optional; import gregtech.api.enums.GT_Values; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; +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 java.util.Collections; -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; -@Optional.Interface(modid = "NotEnoughItems", iface = "codechicken.nei.api.INEIGuiHandler") -public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine implements INEIGuiHandler { +public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine implements IDragAndDropSupport { private final String mName; private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF), @@ -62,31 +56,12 @@ public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine } @Override - @Optional.Method(modid = "NotEnoughItems") - public VisiblityData modifyVisiblity(GuiContainer gui, VisiblityData currentVisibility) { - return currentVisibility; - } - - @Override - public Iterable<Integer> getItemSpawnSlots(GuiContainer gui, ItemStack item) { - return Collections.emptyList(); - } - - @Override - public List<TaggedInventoryArea> getInventoryAreas(GuiContainer gui) { - return null; - } - - @Override - public boolean handleDragNDrop(GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button) { + public boolean handleDragAndDropGT( + GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button, boolean isGhost) { if (gui instanceof GT_GUIContainer_OutputHatch && ((GT_GUIContainer_OutputHatch) gui).isMouseOverSlot(3, mousex, mousey)) { // the instanceof check should be unnecessary, but we will do it regardless, just in case. - FluidStack tFluidStack; - tFluidStack = GT_Utility.getFluidForFilledItem(draggedStack, true); - if (tFluidStack == null) { - tFluidStack = GT_Utility.getFluidFromDisplayStack(draggedStack); - } + FluidStack tFluidStack = GT_Utility.getFluidFromContainerOrFluidDisplay(draggedStack); if (tFluidStack != null) { GT_Values.NW.sendToServer(new GT_Packet_SetLockedFluid( ((GT_GUIContainer_OutputHatch) gui).mContainer.mTileEntity, tFluidStack)); @@ -96,9 +71,4 @@ public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine } return false; } - - @Override - public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h) { - return false; - } } diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java index 765597283a..9a7c75cb83 100644 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java +++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java @@ -5,6 +5,7 @@ import static gregtech.api.enums.Textures.BlockIcons.*; import gregtech.api.gui.GT_Container_DigitalTank; import gregtech.api.gui.GT_GUIContainer_DigitalTank; import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IFluidLockable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; import gregtech.api.render.TextureFactory; @@ -15,13 +16,15 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntity_BasicTank { +public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntity_BasicTank implements IFluidLockable { public boolean mOutputFluid = false, mVoidFluidPart = false, mVoidFluidFull = false, mLockFluid = false; - public String lockedFluidName = null; + protected String lockedFluidName = null; private boolean voidBreak; public boolean mAllowInputFromOutputSide = false; @@ -77,15 +80,14 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit @Override public void setItemNBT(NBTTagCompound aNBT) { if (!voidBreak) { - if (mFluid != null && mFluid.amount > 0) { + if (mFluid != null && mFluid.amount >= 0) { aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); } aNBT.setBoolean("mOutputFluid", this.mOutputFluid); aNBT.setBoolean("mVoidOverflow", this.mVoidFluidPart); aNBT.setBoolean("mVoidFluidFull", this.mVoidFluidFull); aNBT.setBoolean("mLockFluid", mLockFluid); - if (lockedFluidName != null && lockedFluidName.length() != 0) - aNBT.setString("lockedFluidName", lockedFluidName); + if (GT_Utility.isStringValid(lockedFluidName)) aNBT.setString("lockedFluidName", lockedFluidName); else aNBT.removeTag("lockedFluidName"); aNBT.setBoolean("mAllowInputFromOutputSide", this.mAllowInputFromOutputSide); } @@ -99,8 +101,7 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit aNBT.setBoolean("mVoidOverflow", this.mVoidFluidPart); aNBT.setBoolean("mVoidFluidFull", this.mVoidFluidFull); aNBT.setBoolean("mLockFluid", mLockFluid); - if (lockedFluidName != null && lockedFluidName.length() != 0) - aNBT.setString("lockedFluidName", lockedFluidName); + if (GT_Utility.isStringValid(lockedFluidName)) aNBT.setString("lockedFluidName", lockedFluidName); else aNBT.removeTag("lockedFluidName"); aNBT.setBoolean("mAllowInputFromOutputSide", this.mAllowInputFromOutputSide); } @@ -113,13 +114,15 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit mVoidFluidFull = aNBT.getBoolean("mVoidFluidFull"); mLockFluid = aNBT.getBoolean("mLockFluid"); lockedFluidName = aNBT.getString("lockedFluidName"); - lockedFluidName = lockedFluidName.length() == 0 ? null : lockedFluidName; + lockedFluidName = GT_Utility.isStringInvalid(lockedFluidName) ? null : lockedFluidName; mAllowInputFromOutputSide = aNBT.getBoolean("mAllowInputFromOutputSide"); } @Override public boolean isFluidInputAllowed(FluidStack aFluid) { - return !mLockFluid || lockedFluidName == null || lockedFluidName.equals(aFluid.getUnlocalizedName()); + return !mLockFluid + || lockedFluidName == null + || lockedFluidName.equals(aFluid.getFluid().getName()); } @Override @@ -130,7 +133,7 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit @Override public void onEmptyingContainerWhenEmpty() { if (this.lockedFluidName == null && this.mFluid != null) { - this.lockedFluidName = this.mFluid.getUnlocalizedName(); + this.lockedFluidName = this.mFluid.getFluid().getName(); } } @@ -170,6 +173,42 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit } @Override + public void setLockedFluidName(String lockedFluidName) { + this.lockedFluidName = lockedFluidName; + if (lockedFluidName != null) { + Fluid fluid = FluidRegistry.getFluid(lockedFluidName); + if (fluid != null) { + // create new FluidStack, otherwise existing 0-amount FluidStack will + // prevent new fluid from being locked + setFillableStack(new FluidStack(fluid, getFluidAmount())); + mLockFluid = true; + } + } + // Don't unlock if lockedFluidName == null, + // as player might explicitly enable fluid locking with no fluid contained + } + + @Override + public String getLockedFluidName() { + return this.lockedFluidName; + } + + @Override + public void lockFluid(boolean lock) { + this.mLockFluid = lock; + } + + @Override + public boolean isFluidLocked() { + return this.mLockFluid; + } + + @Override + public boolean allowChangingLockedFluid(String name) { + return getFluidAmount() == 0; + } + + @Override public ITexture[] getTexture( IGregTechTileEntity aBaseMetaTileEntity, byte aSide, |