aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2022-01-04 01:19:56 +0800
committerGitHub <noreply@github.com>2022-01-03 18:19:56 +0100
commit5cf9aa8a9033d19ea7dd2b8739384c08006f4da2 (patch)
tree369f3d482f200e7fdcee1df9eb62f4365d6be0e7 /src/main/java
parentce70eef5b55ee411800606f621af8bafd7eff70e (diff)
downloadGT5-Unofficial-5cf9aa8a9033d19ea7dd2b8739384c08006f4da2.tar.gz
GT5-Unofficial-5cf9aa8a9033d19ea7dd2b8739384c08006f4da2.tar.bz2
GT5-Unofficial-5cf9aa8a9033d19ea7dd2b8739384c08006f4da2.zip
Allow drag and drop from NEI to set output hatch locking (#845)
* Allow drag and drop from NEI to set output hatch locking also cleaned up the output hatch networking code * Add not locked indicator
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer.java15
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SetLockedFluid.java91
-rw-r--r--src/main/java/gregtech/common/GT_Network.java3
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java74
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java5
-rw-r--r--src/main/java/gregtech/nei/GT_NEI_GuiAdapter.java24
-rw-r--r--src/main/java/gregtech/nei/NEI_GT_Config.java1
7 files changed, 137 insertions, 76 deletions
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer.java b/src/main/java/gregtech/api/gui/GT_GUIContainer.java
index b122b33a73..af6c37a8dd 100644
--- a/src/main/java/gregtech/api/gui/GT_GUIContainer.java
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer.java
@@ -3,9 +3,12 @@ package gregtech.api.gui;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.inventory.Container;
+import net.minecraft.inventory.Slot;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Mouse;
+import static gregtech.GT_Mod.GT_FML_LOGGER;
+
/**
* NEVER INCLUDE THIS FILE IN YOUR MOD!!!
* <p/>
@@ -69,6 +72,18 @@ public class GT_GUIContainer extends GuiContainer {
protected void onMouseWheel(int mx, int my, int delta) {
}
+ public boolean isMouseOverSlot(int slotIndex, int mx, int my)
+ {
+ int size = inventorySlots.inventorySlots.size();
+ if (slotIndex < 0 || slotIndex >= size) {
+ // slot does not exist somehow. log and carry on
+ GT_FML_LOGGER.error("Slot {} required where only {} is present", slotIndex, size);
+ return false;
+ }
+ Slot slot = inventorySlots.getSlot(slotIndex);
+ return this.func_146978_c(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mx, my);
+ }
+
/*
@Override
protected void drawSlotInventory(Slot par1Slot) {
diff --git a/src/main/java/gregtech/api/net/GT_Packet_SetLockedFluid.java b/src/main/java/gregtech/api/net/GT_Packet_SetLockedFluid.java
new file mode 100644
index 0000000000..deea71feab
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_SetLockedFluid.java
@@ -0,0 +1,91 @@
+package gregtech.api.net;
+
+import com.google.common.io.ByteArrayDataInput;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.network.INetHandler;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_Packet_SetLockedFluid extends GT_Packet_New {
+ protected int mX;
+ protected short mY;
+ protected int mZ;
+
+ protected int mFluidID;
+
+ private EntityPlayerMP mPlayer;
+
+ public GT_Packet_SetLockedFluid() {
+ super(true);
+ }
+
+ public GT_Packet_SetLockedFluid(IGregTechTileEntity aTile, FluidStack aSource) {
+ this(aTile.getXCoord(), aTile.getYCoord(), aTile.getZCoord(), aSource.getFluidID());
+ }
+
+ public GT_Packet_SetLockedFluid(int x, short y, int z, int aFluidID) {
+ super(false);
+
+ this.mX = x;
+ this.mY = y;
+ this.mZ = z;
+
+ this.mFluidID = aFluidID;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 14;
+ }
+
+ @Override
+ public void encode(ByteBuf aOut) {
+ aOut.writeInt(mX);
+ aOut.writeShort(mY);
+ aOut.writeInt(mZ);
+
+ aOut.writeInt(mFluidID);
+ }
+
+ @Override
+ public void setINetHandler(INetHandler aHandler) {
+ if (aHandler instanceof NetHandlerPlayServer) {
+ mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity;
+ }
+ }
+
+ @Override
+ public GT_Packet_New decode(ByteArrayDataInput aData) {
+ return new GT_Packet_SetLockedFluid(
+ aData.readInt(),
+ aData.readShort(),
+ aData.readInt(),
+
+ aData.readInt());
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (mPlayer == null) return;
+ World world = mPlayer.worldObj;
+ TileEntity tile = world.getTileEntity(mX, mY, mZ);
+ if (!(tile instanceof IGregTechTileEntity) || ((IGregTechTileEntity) tile).isDead()) return;
+ IMetaTileEntity mte = ((IGregTechTileEntity) tile).getMetaTileEntity();
+ if (!(mte instanceof GT_MetaTileEntity_Hatch_Output)) return;
+ Fluid tFluid = FluidRegistry.getFluid(mFluidID);
+ if (tFluid == null) return;
+ ((GT_MetaTileEntity_Hatch_Output) mte).setLockedFluidName(tFluid.getName());
+ GT_Utility.sendChatToPlayer(mPlayer, String.format(GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_151.4", "Sucessfully locked Fluid to %s", false), new FluidStack(tFluid, 1).getLocalizedName()));
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java
index 96ca384949..d3387209c3 100644
--- a/src/main/java/gregtech/common/GT_Network.java
+++ b/src/main/java/gregtech/common/GT_Network.java
@@ -49,7 +49,8 @@ public class GT_Network extends MessageToMessageCodec<FMLProxyPacket, GT_Packet>
new GT_Packet_WirelessRedstoneCover(),
new GT_Packet_TileEntityCoverNew(),
new GT_Packet_SetConfigurationCircuit(),
- new GT_Packet_UpdateItem()
+ new GT_Packet_UpdateItem(),
+ new GT_Packet_SetLockedFluid()
);
}
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 31a6224535..6651d7875a 100644
--- a/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
+++ b/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
@@ -1,7 +1,5 @@
package gregtech.common.gui;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.gui.GT_Container_BasicTank;
import gregtech.api.gui.GT_Slot_Output;
import gregtech.api.gui.GT_Slot_Render;
@@ -10,21 +8,12 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Outpu
import gregtech.api.util.GT_Utility;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
-import java.nio.ByteBuffer;
-
public class GT_Container_OutputHatch extends GT_Container_BasicTank {
- private ByteBuffer buffer;
- private String fluidName = "";
- private byte mMode;
-
public GT_Container_OutputHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
super(aInventoryPlayer, aTileEntity);
}
@@ -48,76 +37,13 @@ public class GT_Container_OutputHatch extends GT_Container_BasicTank {
tHatch.setLockedFluidName(null);
GT_Utility.sendChatToPlayer(aPlayer, trans("300", "Fluid Lock Cleared."));
tHatch.mMode = 0;
- fluidName = "";
}
else {
tHatch.setLockedFluidName(tReadyLockFluid.getFluid().getName());
GT_Utility.sendChatToPlayer(aPlayer, String.format(trans("151.4", "Sucessfully locked Fluid to %s"), tReadyLockFluid.getLocalizedName()));
tHatch.mMode = 9;
- fluidName = tReadyLockFluid.getUnlocalizedName();
}
}
return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
}
-
- @Override
- public void addCraftingToCrafters(ICrafting clientHandle) {
- buffer.putInt(0, fluidName.length());
- buffer.put(Integer.BYTES, mMode);
- for (int i = 0; i < fluidName.length(); i++) {
- buffer.putChar(Integer.BYTES + Character.BYTES * i + 1, fluidName.charAt(i));
- }
- sendStateUpdate(clientHandle);
- super.addCraftingToCrafters(clientHandle);
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if (buffer == null) {
- buffer = ByteBuffer.allocate(256);
- }
- if(mTileEntity.isServerSide()) {
- GT_MetaTileEntity_Hatch_Output tile = (GT_MetaTileEntity_Hatch_Output) mTileEntity.getMetaTileEntity();
- if (tile == null) return;
- fluidName = tile.getLockedFluidName() == null ? "" : tile.getLockedFluidName();
- mMode = tile.getMode();
- buffer.putInt(0, fluidName.length());
- buffer.put(Integer.BYTES, mMode);
- for (int i = 0; i < fluidName.length(); i++) {
- buffer.putChar(Integer.BYTES + Character.BYTES * i + 1, fluidName.charAt(i));
- }
- for (Object clientHandle : this.crafters) {
- sendStateUpdate((ICrafting) clientHandle);
- }
- }
- }
-
- private void sendStateUpdate(ICrafting clientHandle) {
- final int bytes = Character.BYTES * fluidName.length() + Integer.BYTES + 1;
- for (int i = 0; i < bytes; i++) {
- clientHandle.sendProgressBarUpdate(this, i + 110, buffer.get(i));
- }
- }
-
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int index, int value) {
- super.updateProgressBar(index, value);
- index = index - 110;
- if(index >= 0 && index < buffer.capacity()) {
- buffer.put(index, (byte) value);
- }
- }
-
- @SideOnly(Side.CLIENT)
- public String getFluidName() {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < buffer.getInt(0); ++i) {
- sb.append(buffer.getChar(i * Character.BYTES + Integer.BYTES + 1));
- }
- byte mode = buffer.get(Integer.BYTES);
- FluidStack tFluid = FluidRegistry.getFluidStack(sb.toString(), 1);
- if (tFluid == null || mode < 8) return "Empty";
- return tFluid.getLocalizedName().replace("fluid.", "");
- }
} \ No newline at end of file
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 1adf66c1b7..5c29c3d7a6 100644
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java
@@ -4,6 +4,7 @@ import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Utility;
import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
import net.minecraft.util.StatCollector;
import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
@@ -25,7 +26,9 @@ public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine
fontRendererObj.drawString("Liquid Amount", 10, 20, 16448255);
fontRendererObj.drawString(GT_Utility.parseNumberToString(((GT_Container_OutputHatch) mContainer).mContent), 10, 30, 16448255);
fontRendererObj.drawString("Locked Fluid", 101, 20, 16448255);
- fontRendererObj.drawString(((GT_Container_OutputHatch) mContainer).getFluidName(), 101, 30, 16448255);
+ ItemStack tLockedDisplayStack = (ItemStack) mContainer.getInventory().get(3);
+ String fluidName = tLockedDisplayStack == null ? "None" : tLockedDisplayStack.getDisplayName();
+ fontRendererObj.drawString(fluidName, 101, 30, 16448255);
}
}
diff --git a/src/main/java/gregtech/nei/GT_NEI_GuiAdapter.java b/src/main/java/gregtech/nei/GT_NEI_GuiAdapter.java
new file mode 100644
index 0000000000..f70462110d
--- /dev/null
+++ b/src/main/java/gregtech/nei/GT_NEI_GuiAdapter.java
@@ -0,0 +1,24 @@
+package gregtech.nei;
+
+import codechicken.nei.api.INEIGuiAdapter;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.net.GT_Packet_SetLockedFluid;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_GUIContainer_OutputHatch;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_NEI_GuiAdapter extends INEIGuiAdapter {
+ @Override
+ public boolean handleDragNDrop(GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button) {
+ if (gui instanceof GT_GUIContainer_OutputHatch && ((GT_GUIContainer_OutputHatch) gui).isMouseOverSlot(3, mousex, mousey)) {
+ FluidStack tFluidStack = GT_Utility.getFluidForFilledItem(draggedStack, true);
+ if (tFluidStack != null) {
+ GT_Values.NW.sendToServer(new GT_Packet_SetLockedFluid(((GT_GUIContainer_OutputHatch) gui).mContainer.mTileEntity, tFluidStack));
+ return true;
+ }
+ }
+ return super.handleDragNDrop(gui, mousex, mousey, draggedStack, button);
+ }
+}
diff --git a/src/main/java/gregtech/nei/NEI_GT_Config.java b/src/main/java/gregtech/nei/NEI_GT_Config.java
index 0b4476eeef..b5cf8776e1 100644
--- a/src/main/java/gregtech/nei/NEI_GT_Config.java
+++ b/src/main/java/gregtech/nei/NEI_GT_Config.java
@@ -62,6 +62,7 @@ public class NEI_GT_Config implements IConfigureNEI {
handlers.forEach(NEI_GT_Config::addHandler);
codechicken.nei.api.API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1));
+ codechicken.nei.api.API.registerNEIGuiHandler(new GT_NEI_GuiAdapter());
}
sIsAdded = true;
}