aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
authormiozune <miozune@gmail.com>2022-09-02 20:57:30 +0900
committerGitHub <noreply@github.com>2022-09-02 13:57:30 +0200
commit41d1832928fb89accc49b384ddec71375daaed71 (patch)
treecb2cc16e52458a892b2798f28c3305d3b3f05a9f /src/main/java/gregtech/common
parent233b0f321a0d0b9594f6e0f55dd0d7ae789f9c31 (diff)
downloadGT5-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')
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java6
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java40
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java59
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,