Skip to content

Commit

Permalink
Add CTRL-click [+] in NEI to craft missing items to AE2FC terminal
Browse files Browse the repository at this point in the history
  • Loading branch information
niklasstich committed Oct 27, 2024
1 parent 342d182 commit dfdd164
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 55 deletions.
5 changes: 5 additions & 0 deletions src/main/java/com/github/vfyjxf/nee/NEINeeConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
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.GuiFluidCraftingWireless;
import com.glodblock.github.client.gui.GuiFluidPatternExWireless;
import com.glodblock.github.client.gui.GuiFluidPatternTerminal;
import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx;
Expand Down Expand Up @@ -159,6 +160,10 @@ private void installWirelessCraftingTermSupport() {
API.registerGuiOverlayHandler(GuiWirelessCraftingTerminal.class, NEECraftingHelper.INSTANCE, "crafting");
API.registerGuiOverlayHandler(GuiWirelessCraftingTerminal.class, NEECraftingHelper.INSTANCE, "crafting2x2");
}
if (Loader.isModLoaded(ModIDs.FC)) {
API.registerGuiOverlayHandler(GuiFluidCraftingWireless.class, NEECraftingHelper.INSTANCE, "crafting");
API.registerGuiOverlayHandler(GuiFluidCraftingWireless.class, NEECraftingHelper.INSTANCE, "crafting2x2");
}
}

private void installThaumicEnergisticsSupport() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public class NEEContainerDrawHandler {
private boolean drawRequestTooltip;
private boolean drawMissingTooltip;
private boolean drawCraftableTooltip;
private boolean isFluidCraftingTerm;

public NEEContainerDrawHandler() {
// gtnh nei support
Expand All @@ -76,8 +77,9 @@ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
GuiRecipe guiRecipe = (GuiRecipe) event.gui;
this.isCraftingTerm = GuiUtils.isGuiCraftingTerm(guiRecipe.firstGui);
this.isPatternTerm = GuiUtils.isPatternTerm(guiRecipe.firstGui);
this.isFluidCraftingTerm = GuiUtils.isGuiFluidCraftingWireless(guiRecipe.firstGui);

if (this.isCraftingTerm || this.isPatternTerm) {
if (this.isCraftingTerm || this.isPatternTerm || this.isFluidCraftingTerm) {
this.oldPage = guiRecipe.page;
this.oldType = guiRecipe.recipetype;
setOverlayButton(guiRecipe);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;

Expand All @@ -31,6 +30,7 @@
import com.github.vfyjxf.nee.network.NEEGuiHandler;
import com.github.vfyjxf.nee.utils.GuiUtils;
import com.github.vfyjxf.nee.utils.ModIDs;
import com.glodblock.github.inventory.item.WirelessCraftingTerminalInventory;
import com.google.common.base.Optional;

import appeng.api.AEApi;
Expand Down Expand Up @@ -126,8 +126,9 @@ public IMessage onMessage(PacketCraftingRequest message, MessageContext ctx) {
EntityPlayerMP player = ctx.getServerHandler().playerEntity;
Container container = player.openContainer;

if (GuiUtils.isWirelessCraftingTermContainer(container)) {
message.handlerWirelessCraftingRequest((ContainerWirelessCraftingTerminal) container, message, player);
if (GuiUtils.isWirelessCraftingTermContainer(container)
|| GuiUtils.isFCContainerCraftingWireless(container)) {
message.handlerWirelessCraftingRequest((AEBaseContainer) container, message, player);
} else if (container instanceof AEBaseContainer) {
AEBaseContainer baseContainer = (AEBaseContainer) container;
Object target = baseContainer.getTarget();
Expand Down Expand Up @@ -265,43 +266,47 @@ private void handlerCraftingAmountRequest(ContainerCraftingAmount container, Pac
}
}

private void handlerWirelessCraftingRequest(ContainerWirelessCraftingTerminal container,
PacketCraftingRequest message, EntityPlayerMP player) {
private void handlerWirelessCraftingRequest(AEBaseContainer container, PacketCraftingRequest message,
EntityPlayerMP player) {
Object target = container.getTarget();
IGrid grid = null;
if (target instanceof WirelessTerminalGuiObject) {
IGrid grid = ((WirelessTerminalGuiObject) target).getTargetGrid();
if (grid != null) {
final ISecurityGrid security = grid.getCache(ISecurityGrid.class);
if (security != null && security.hasPermission(player, SecurityPermissions.CRAFT)
&& message.getRequireToCraftStack() != null) {
Future<ICraftingJob> futureJob = null;
try {
final ICraftingGrid cg = grid.getCache(ICraftingGrid.class);
futureJob = cg.beginCraftingJob(
player.worldObj,
grid,
container.getActionSource(),
message.getRequireToCraftStack(),
null);

int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;

WCTGuiHandler.launchGui(Reference.GUI_CRAFT_CONFIRM, player, player.worldObj, x, y, z);

if (player.openContainer instanceof net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm) {
final net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm ccc = (net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm) player.openContainer;
ccc.setItemToCraft(message.getRequireToCraftStack());
ccc.setJob(futureJob);
ccc.setAutoStart(message.isAutoStart());
}
} catch (final Throwable e) {
if (futureJob != null) {
futureJob.cancel(true);
}
AELog.debug(e);
grid = ((WirelessTerminalGuiObject) target).getTargetGrid();
} else if (target instanceof WirelessCraftingTerminalInventory) {
WirelessCraftingTerminalInventory target1 = (WirelessCraftingTerminalInventory) target;
grid = target1.getActionableNode().getGrid();
}
if (grid != null) {
final ISecurityGrid security = grid.getCache(ISecurityGrid.class);
if (security != null && security.hasPermission(player, SecurityPermissions.CRAFT)
&& message.getRequireToCraftStack() != null) {
Future<ICraftingJob> futureJob = null;
try {
final ICraftingGrid cg = grid.getCache(ICraftingGrid.class);
futureJob = cg.beginCraftingJob(
player.worldObj,
grid,
container.getActionSource(),
message.getRequireToCraftStack(),
null);

int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;

WCTGuiHandler.launchGui(Reference.GUI_CRAFT_CONFIRM, player, player.worldObj, x, y, z);

if (player.openContainer instanceof net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm) {
final net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm ccc = (net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm) player.openContainer;
ccc.setItemToCraft(message.getRequireToCraftStack());
ccc.setJob(futureJob);
ccc.setAutoStart(message.isAutoStart());
}
} catch (final Throwable e) {
if (futureJob != null) {
futureJob.cancel(true);
}
AELog.debug(e);
}
}
}
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/com/github/vfyjxf/nee/utils/GuiUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,21 @@ public static boolean isGuiWirelessCrafting(GuiScreen gui) {
return gui instanceof net.p455w0rd.wirelesscraftingterminal.client.gui.GuiWirelessCraftingTerminal;
}

public static boolean isGuiFluidCraftingWireless(GuiScreen gui) {
if (!isFluidCraftModloaded) return false;
return gui instanceof com.glodblock.github.client.gui.GuiFluidCraftingWireless;
}

public static boolean isWirelessCraftingTermContainer(Container container) {
if (!isWirelessCraftingTerminalModLoaded) return false;
return container instanceof net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
}

public static boolean isFCContainerCraftingWireless(Container container) {
if (!isFluidCraftModloaded) return false;
return container instanceof com.glodblock.github.client.gui.container.ContainerCraftingWireless;
}

public static boolean isContainerWirelessCraftingConfirm(Container container) {
if (!isWirelessCraftingTerminalModLoaded) return false;
return container instanceof net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm;
Expand Down Expand Up @@ -82,7 +92,8 @@ public static boolean isPatternContainer(Container container) {
}

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

public static boolean isFluidCraftPatternTermEx(GuiScreen guiScreen) {
Expand Down
38 changes: 22 additions & 16 deletions src/main/java/com/github/vfyjxf/nee/utils/IngredientTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,17 @@ private List<IAEItemStack> getCraftableStacks() {
if (termGui != null) {
IItemList<IAEItemStack> list = null;
try {
if (!GuiUtils.isGuiWirelessCrafting(termGui)) {
ItemRepo repo = getRepo();
list = (IItemList<IAEItemStack>) ReflectionHelper.findField(ItemRepo.class, "list").get(repo);
} else {
if (GuiUtils.isGuiWirelessCrafting(termGui)) {
// wireless crafting terminal support
ItemRepo repo = (ItemRepo) ReflectionHelper.findField(GuiWirelessCraftingTerminal.class, "repo")
.get(termGui);
list = (IItemList<IAEItemStack>) ReflectionHelper.findField(ItemRepo.class, "list").get(repo);
} else if (GuiUtils.isGuiFluidCraftingWireless(termGui)) {
ItemRepo repo = (ItemRepo) ReflectionHelper.findField(FCGuiMonitor.class, "repo").get(termGui);
list = (IItemList<IAEItemStack>) ReflectionHelper.findField(ItemRepo.class, "list").get(repo);
} else {
ItemRepo repo = getRepo();
list = (IItemList<IAEItemStack>) ReflectionHelper.findField(ItemRepo.class, "list").get(repo);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
Expand All @@ -121,22 +124,25 @@ private List<IAEItemStack> getCraftableStacks() {
private List<IAEItemStack> getStorageStacks() {
List<IAEItemStack> list = new ArrayList<>();
if (termGui != null) {

try {
if (!GuiUtils.isGuiWirelessCrafting(termGui)) {
ItemRepo repo = (ItemRepo) ReflectionHelper.findField(GuiMEMonitorable.class, "repo").get(termGui);
for (IAEItemStack stack : (IItemList<IAEItemStack>) ReflectionHelper
.findField(ItemRepo.class, "list").get(repo)) {
list.add(stack.copy());
}
} else {
ItemRepo repo;
if (GuiUtils.isGuiWirelessCrafting(termGui)) {
// wireless crafting terminal support
ItemRepo repo = (ItemRepo) ReflectionHelper.findField(GuiWirelessCraftingTerminal.class, "repo")
repo = (ItemRepo) ReflectionHelper.findField(GuiWirelessCraftingTerminal.class, "repo")
.get(termGui);
for (IAEItemStack stack : (IItemList<IAEItemStack>) ReflectionHelper
.findField(ItemRepo.class, "list").get(repo)) {
list.add(stack.copy());
}
}
// wireless fluid terminal
else if (GuiUtils.isGuiFluidCraftingWireless(termGui)) {
repo = (ItemRepo) ReflectionHelper.findField(FCGuiMonitor.class, "repo").get(termGui);
} else {
repo = (ItemRepo) ReflectionHelper.findField(GuiMEMonitorable.class, "repo").get(termGui);
}
for (IAEItemStack stack : (IItemList<IAEItemStack>) ReflectionHelper.findField(ItemRepo.class, "list")
.get(repo)) {
list.add(stack.copy());
}

} catch (IllegalAccessException e) {
e.printStackTrace();
}
Expand Down

0 comments on commit dfdd164

Please sign in to comment.