Skip to content

Commit

Permalink
add fluid craft support (#22)
Browse files Browse the repository at this point in the history
* Add fluid craft support

* spotless apply

Co-authored-by: GlodBlock <[email protected]>
  • Loading branch information
asdflj and GlodBlock authored Sep 23, 2022
1 parent 9a15d09 commit d0bfcf3
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 86 deletions.
3 changes: 2 additions & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ dependencies {
compile("com.github.GTNewHorizons:CodeChickenCore:1.1.6:dev")
compile("com.github.GTNewHorizons:NotEnoughItems:2.3.2-GTNH:dev")
compile("com.github.GTNewHorizons:Baubles:1.0.1.14:dev")
compile("com.github.GTNewHorizons:WirelessCraftingTerminal:1.8.8.8:dev")
compile("com.github.GTNewHorizons:WirelessCraftingTerminal:1.8.9.1:dev")

compileOnly("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.0.15-gtnh:dev") { transitive = false }
compileOnly("com.github.GTNewHorizons:Avaritiaddons:1.5.4-GTNH:dev") { transitive = false }
compileOnly("com.github.GTNewHorizons:BuildCraftCompat:7.1.12:dev") { transitive = false }
compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.40:dev") { transitive = false }
Expand Down
28 changes: 27 additions & 1 deletion src/main/java/com/github/vfyjxf/nee/NEINeeConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import com.github.vfyjxf.nee.processor.IRecipeProcessor;
import com.github.vfyjxf.nee.processor.RecipeProcessor;
import com.github.vfyjxf.nee.utils.ModIDs;
import com.glodblock.github.client.gui.GuiFluidPatternTerminal;
import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx;
import cpw.mods.fml.common.Loader;
import java.util.*;
import net.minecraft.client.gui.inventory.GuiContainer;
Expand Down Expand Up @@ -54,11 +56,35 @@ public void loadConfig() {

installWirelessCraftingTermSupport();

installPatternTerminalExSupport(identifiers);
installFluidPatternTerminalSupport(new HashSet<String>(identifiers));

installThaumicEnergisticsSupport();

installAvaritiaddonsSupport();

installPatternTerminalExSupport(new HashSet<String>(identifiers));

installFluidPatternTerminalExSupport(new HashSet<String>(identifiers));
}

private void installFluidPatternTerminalExSupport(Set<String> identifiers) {
if (Loader.isModLoaded(ModIDs.FC)) {
identifiers.remove("crafting");
identifiers.remove("crafting2x2");
for (String ident : identifiers) {
API.registerGuiOverlay(GuiFluidPatternTerminalEx.class, ident);
API.registerGuiOverlayHandler(GuiFluidPatternTerminalEx.class, new NEECraftingHandler(), ident);
}
}
}

private void installFluidPatternTerminalSupport(Set<String> identifiers) {
if (Loader.isModLoaded(ModIDs.FC)) {
for (String ident : identifiers) {
API.registerGuiOverlay(GuiFluidPatternTerminal.class, ident);
API.registerGuiOverlayHandler(GuiFluidPatternTerminal.class, NEECraftingHandler.INSTANCE, ident);
}
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class NotEnoughEnergistics {
public static final String NAME = "NotEnoughEnergistics";
public static final String VERSION = "GRADLETOKEN_VERSION";
public static final String DEPENDENCIES =
"required-after:NotEnoughItems;required-after:appliedenergistics2@[rv3.beta.22,),[rv3.beta-22,),[rv3-beta.22,),[rv3-beta-22,);after:ae2wct";
"required-after:NotEnoughItems;required-after:appliedenergistics2@[rv3.beta.22,),[rv3.beta-22,),[rv3-beta.22,),[rv3-beta-22,);after:ae2wct;after:ae2fc";
public static final String GUI_FACTORY = "com.github.vfyjxf.nee.config.NEEConfigGuiFactory";
public static final Logger logger = LogManager.getLogger("NotEnoughEnergistics");

Expand Down
6 changes: 2 additions & 4 deletions src/main/java/com/github/vfyjxf/nee/asm/AppengHelper.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.github.vfyjxf.nee.asm;

import static com.github.vfyjxf.nee.nei.NEECraftingHandler.INPUT_KEY;
import static com.github.vfyjxf.nee.utils.GuiUtils.isPatternTerm;

import appeng.client.gui.implementations.GuiInterface;
import appeng.client.gui.implementations.GuiPatternTerm;
import appeng.client.gui.implementations.GuiPatternTermEx;
import appeng.container.slot.SlotFake;
import codechicken.nei.NEIClientConfig;
import codechicken.nei.PositionedStack;
Expand Down Expand Up @@ -33,8 +32,7 @@ public class AppengHelper {
*/
public static boolean handleMouseWheelInput(int dWheel) {
Minecraft mc = Minecraft.getMinecraft();
boolean isPatternTerm =
mc.currentScreen instanceof GuiPatternTerm || mc.currentScreen instanceof GuiPatternTermEx;
boolean isPatternTerm = isPatternTerm(mc.currentScreen);
boolean isInterface = mc.currentScreen instanceof GuiInterface;
if (isPatternTerm || isInterface) {
if (dWheel != 0) {
Expand Down
14 changes: 11 additions & 3 deletions src/main/java/com/github/vfyjxf/nee/nei/NEECraftingHandler.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.github.vfyjxf.nee.nei;

import static com.github.vfyjxf.nee.processor.RecipeProcessor.NULL_IDENTIFIER;
import static com.github.vfyjxf.nee.utils.GuiUtils.isPatternTerm;

import appeng.client.gui.implementations.GuiPatternTerm;
import appeng.client.gui.implementations.GuiPatternTermEx;
import appeng.util.Platform;
import codechicken.nei.PositionedStack;
import codechicken.nei.api.IOverlayHandler;
Expand All @@ -18,6 +17,9 @@
import com.github.vfyjxf.nee.processor.IRecipeProcessor;
import com.github.vfyjxf.nee.processor.RecipeProcessor;
import com.github.vfyjxf.nee.utils.ItemUtils;
import com.github.vfyjxf.nee.utils.ModIDs;
import com.glodblock.github.nei.FluidPatternTerminalRecipeTransferHandler;
import cpw.mods.fml.common.Optional;
import java.util.*;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
Expand Down Expand Up @@ -64,10 +66,16 @@ public static boolean isCraftingTableRecipe(IRecipeHandler recipe) {
}
}

@Optional.Method(modid = ModIDs.FC)
private void fluidCraftOverlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) {
FluidPatternTerminalRecipeTransferHandler.INSTANCE.overlayRecipe(firstGui, recipe, recipeIndex, shift);
}

@Override
public void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) {
if (firstGui instanceof GuiPatternTerm || firstGui instanceof GuiPatternTermEx) {
if (isPatternTerm(firstGui)) {
NEENetworkHandler.getInstance().sendToServer(packRecipe(recipe, recipeIndex));
fluidCraftOverlayRecipe(firstGui, recipe, recipeIndex, shift);
} else {
knowledgeInscriberHandler(firstGui, recipe, recipeIndex);
extremeAutoCrafterHandler(firstGui, recipe, recipeIndex);
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/com/github/vfyjxf/nee/nei/NEECraftingHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

import static com.github.vfyjxf.nee.nei.NEECraftingHandler.INPUT_KEY;
import static com.github.vfyjxf.nee.nei.NEECraftingHandler.OUTPUT_KEY;
import static com.github.vfyjxf.nee.utils.GuiUtils.isGuiCraftingTerm;
import static com.github.vfyjxf.nee.utils.GuiUtils.isPatternTerm;

import appeng.client.gui.implementations.GuiCraftingTerm;
import appeng.client.gui.implementations.GuiPatternTerm;
import appeng.client.gui.implementations.GuiPatternTermEx;
import appeng.container.slot.SlotCraftingMatrix;
import appeng.container.slot.SlotFakeCraftingMatrix;
import appeng.core.AELog;
Expand Down Expand Up @@ -267,10 +267,8 @@ public void onActionPerformedEventPre(GuiScreenEvent.ActionPerformedEvent.Pre ev
}
if (event.button.id >= OVERLAY_BUTTON_ID_START
&& event.button.id < OVERLAY_BUTTON_ID_START + overlayButtons.size()) {
boolean isPatternTerm = guiRecipe.firstGui instanceof GuiPatternTerm
|| guiRecipe.firstGui instanceof GuiPatternTermEx;
boolean isCraftingTerm = guiRecipe.firstGui instanceof GuiCraftingTerm
|| GuiUtils.isGuiWirelessCrafting(guiRecipe.firstGui);
boolean isPatternTerm = isPatternTerm(guiRecipe.firstGui);
boolean isCraftingTerm = isGuiCraftingTerm(guiRecipe.firstGui);
if (isCraftingTerm || isPatternTerm) {
int recipesPerPage = 2;
IRecipeHandler handler = (IRecipeHandler) guiRecipe.currenthandlers.get(guiRecipe.recipetype);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@
import appeng.api.networking.IGridNode;
import appeng.api.networking.security.ISecurityGrid;
import appeng.api.networking.storage.IStorageGrid;
import appeng.container.AEBaseContainer;
import appeng.container.implementations.ContainerPatternTerm;
import appeng.container.implementations.ContainerPatternTermEx;
import appeng.helpers.IContainerCraftingPacket;
import com.github.vfyjxf.nee.utils.ModIDs;
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal;
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminalEx;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
Expand Down Expand Up @@ -67,11 +72,27 @@ public IMessage onMessage(PacketNEIPatternRecipe message, MessageContext ctx) {
((ContainerPatternTermEx) container).getPatternTerminal().setInverted(false);
message.processRecipeHandler((ContainerPatternTermEx) container, message);
}
addFluidCraftSupport(message, ctx);
return null;
}

@Optional.Method(modid = ModIDs.FC)
private void addFluidCraftSupport(PacketNEIPatternRecipe message, MessageContext ctx) {
EntityPlayerMP player = ctx.getServerHandler().playerEntity;
Container container = player.openContainer;
if (container instanceof ContainerFluidPatternTerminal && message.output == null) {
((ContainerFluidPatternTerminal) container).getPatternTerminal().setCraftingRecipe(true);
message.craftingTableRecipeHandler((ContainerFluidPatternTerminal) container, message);
} else if (container instanceof ContainerFluidPatternTerminal) {
((ContainerFluidPatternTerminal) container).getPatternTerminal().setCraftingRecipe(false);
message.processRecipeHandler((ContainerFluidPatternTerminal) container, message);
} else if (container instanceof ContainerFluidPatternTerminalEx) {
message.processRecipeHandler((ContainerFluidPatternTerminalEx) container, message);
}
}
}

private void craftingTableRecipeHandler(ContainerPatternTerm container, PacketNEIPatternRecipe message) {
private void craftingTableRecipeHandler(AEBaseContainer container, PacketNEIPatternRecipe message) {
ItemStack[] recipeInput = new ItemStack[9];
NBTTagCompound currentStack;

Expand All @@ -80,7 +101,7 @@ private void craftingTableRecipeHandler(ContainerPatternTerm container, PacketNE
recipeInput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}

final IContainerCraftingPacket cct = container;
final IContainerCraftingPacket cct = (IContainerCraftingPacket) container;
final IGridNode node = cct.getNetworkNode();

if (node != null) {
Expand All @@ -106,22 +127,8 @@ private void craftingTableRecipeHandler(ContainerPatternTerm container, PacketNE
}
}

private void processRecipeHandler(ContainerPatternTerm container, PacketNEIPatternRecipe message) {

ItemStack[] recipeInput = new ItemStack[9];
ItemStack[] recipeOutput = new ItemStack[3];

for (int i = 0; i < recipeInput.length; i++) {
NBTTagCompound currentStack = (NBTTagCompound) message.input.getTag("#" + i);
recipeInput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}

for (int i = 0; i < recipeOutput.length; i++) {
NBTTagCompound currentStack = (NBTTagCompound) message.output.getTag(OUTPUT_KEY + i);
recipeOutput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}

final IContainerCraftingPacket cct = container;
private void processRecipeHandler(AEBaseContainer container, PacketNEIPatternRecipe message) {
final IContainerCraftingPacket cct = (IContainerCraftingPacket) container;
final IGridNode node = cct.getNetworkNode();

if (node != null) {
Expand All @@ -133,68 +140,30 @@ private void processRecipeHandler(ContainerPatternTerm container, PacketNEIPatte
final ISecurityGrid security = grid.getCache(ISecurityGrid.class);
final IInventory craftMatrix = cct.getInventoryByName("crafting");
final IInventory outputMatrix = cct.getInventoryByName("output");
ItemStack[] recipeInput = new ItemStack[craftMatrix.getSizeInventory()];
ItemStack[] recipeOutput = new ItemStack[outputMatrix.getSizeInventory()];

if (inv != null && message.input != null && security != null) {
for (int i = 0; i < craftMatrix.getSizeInventory(); i++) {
ItemStack currentItem = null;
if (recipeInput[i] != null) {
currentItem = recipeInput[i].copy();
}
craftMatrix.setInventorySlotContents(i, currentItem);
}

for (int i = 0; i < outputMatrix.getSizeInventory(); i++) {
ItemStack currentItem = null;
if (recipeOutput[i] != null) {
currentItem = recipeOutput[i].copy();
}
outputMatrix.setInventorySlotContents(i, currentItem);
}
container.onCraftMatrixChanged(craftMatrix);
for (int i = 0; i < recipeInput.length; i++) {
NBTTagCompound currentStack = (NBTTagCompound) message.input.getTag("#" + i);
recipeInput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}
}
}

private void processRecipeHandler(ContainerPatternTermEx container, PacketNEIPatternRecipe message) {

ItemStack[] recipeInput = new ItemStack[16];
ItemStack[] recipeOutput = new ItemStack[4];

for (int i = 0; i < recipeInput.length; i++) {
NBTTagCompound currentStack = (NBTTagCompound) message.input.getTag("#" + i);
recipeInput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}

for (int i = 0; i < recipeOutput.length; i++) {
NBTTagCompound currentStack = (NBTTagCompound) message.output.getTag(OUTPUT_KEY + i);
recipeOutput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}

final IContainerCraftingPacket cct = container;
final IGridNode node = cct.getNetworkNode();

if (node != null) {
final IGrid grid = node.getGrid();
if (grid == null) {
return;
for (int i = 0; i < recipeOutput.length; i++) {
NBTTagCompound currentStack = (NBTTagCompound) message.output.getTag(OUTPUT_KEY + i);
recipeOutput[i] = currentStack == null ? null : ItemStack.loadItemStackFromNBT(currentStack);
}
final IStorageGrid inv = grid.getCache(IStorageGrid.class);
final ISecurityGrid security = grid.getCache(ISecurityGrid.class);
final IInventory craftMatrix = cct.getInventoryByName("crafting");
final IInventory outputMatrix = cct.getInventoryByName("output");

if (inv != null && message.input != null && security != null) {
for (int i = 0; i < craftMatrix.getSizeInventory(); i++) {
ItemStack currentItem = null;
if (i < recipeInput.length && recipeInput[i] != null) {
if (recipeInput[i] != null) {
currentItem = recipeInput[i].copy();
}
craftMatrix.setInventorySlotContents(i, currentItem);
}

for (int i = 0; i < outputMatrix.getSizeInventory(); i++) {
ItemStack currentItem = null;
if (i < recipeOutput.length && recipeOutput[i] != null) {
if (recipeOutput[i] != null) {
currentItem = recipeOutput[i].copy();
}
outputMatrix.setInventorySlotContents(i, currentItem);
Expand Down
32 changes: 30 additions & 2 deletions src/main/java/com/github/vfyjxf/nee/utils/GuiUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
import appeng.container.implementations.ContainerPatternTermEx;
import appeng.helpers.IContainerCraftingPacket;
import com.github.vfyjxf.nee.container.WCTContainerCraftingConfirm;
import com.glodblock.github.client.gui.GuiFluidPatternTerminal;
import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx;
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal;
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminalEx;
import cpw.mods.fml.common.Loader;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
Expand All @@ -21,6 +25,7 @@
public class GuiUtils {

private static final boolean isWirelessCraftingTerminalModLoaded = Loader.isModLoaded(ModIDs.WCT);
private static final boolean isFluidCraftModloaded = Loader.isModLoaded(ModIDs.FC);

public static boolean isGuiWirelessCrafting(GuiScreen gui) {
if (!isWirelessCraftingTerminalModLoaded) return false;
Expand Down Expand Up @@ -57,20 +62,43 @@ public static boolean isCraftingSlot(Slot slot) {
return false;
}
Container container = Minecraft.getMinecraft().thePlayer.openContainer;
if (!(container instanceof ContainerPatternTerm) && !(container instanceof ContainerPatternTermEx)) {
if (!isPatternContainer(container)) {
return false;
}
IContainerCraftingPacket cct = (IContainerCraftingPacket) container;
IInventory craftMatrix = cct.getInventoryByName("crafting");
return craftMatrix.equals(slot.inventory);
}

public static boolean isPatternContainer(Container container) {
if (isFluidCraftModloaded) {
return container instanceof ContainerPatternTerm
|| container instanceof ContainerPatternTermEx
|| container instanceof ContainerFluidPatternTerminal
|| container instanceof ContainerFluidPatternTerminalEx;
} else {
return container instanceof ContainerPatternTerm || container instanceof ContainerPatternTermEx;
}
}

public static boolean isGuiCraftingTerm(GuiScreen guiScreen) {
return guiScreen instanceof GuiCraftingTerm || isGuiWirelessCrafting(guiScreen);
}

public static boolean isFluidCraftPatternTerm(GuiScreen guiScreen) {
return isFluidCraftModloaded
&& (guiScreen instanceof GuiFluidPatternTerminal || guiScreen instanceof GuiFluidPatternTerminalEx);
}

public static boolean isPatternTerm(GuiScreen guiScreen) {
return guiScreen instanceof GuiPatternTerm || guiScreen instanceof GuiPatternTermEx;
if (isFluidCraftModloaded) {
return guiScreen instanceof GuiPatternTerm
|| guiScreen instanceof GuiPatternTermEx
|| guiScreen instanceof GuiFluidPatternTerminal
|| guiScreen instanceof GuiFluidPatternTerminalEx;
} else {
return guiScreen instanceof GuiPatternTerm || guiScreen instanceof GuiPatternTermEx;
}
}

public static boolean isGuiCraftConfirm(GuiScreen gui) {
Expand Down
Loading

0 comments on commit d0bfcf3

Please sign in to comment.