Skip to content

Commit

Permalink
pae2 support
Browse files Browse the repository at this point in the history
  • Loading branch information
vfyjxf committed Nov 26, 2022
1 parent d7840da commit 0a40019
Showing 1 changed file with 60 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import appeng.api.networking.IGridNode;
import appeng.container.implementations.ContainerPatternTerm;
import appeng.helpers.IContainerCraftingPacket;
import appeng.parts.reporting.PartPatternTerminal;
import appeng.util.helpers.ItemHandlerUtil;
import appeng.util.inv.WrapperInvItemHandler;
import com.google.common.collect.Sets;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
Expand All @@ -18,6 +20,10 @@

import javax.annotation.Nonnull;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashSet;

import static com.github.vfyjxf.nee.jei.PatternTransferHandler.OUTPUT_KEY;

/**
Expand Down Expand Up @@ -79,7 +85,8 @@ public IMessage onMessage(PacketRecipeTransfer message, MessageContext ctx) {
Container container = player.openContainer;
player.getServerWorld().addScheduledTask(() -> {
if (container instanceof ContainerPatternTerm) {
((ContainerPatternTerm) container).getPatternTerminal().setCraftingRecipe(message.getCraftingMode());
// ((ContainerPatternTerm) container).getPatternTerminal().setCraftingRecipe(message.getCraftingMode());
this.setCraftingRecipe((ContainerPatternTerm) container, message.getCraftingMode());
ItemStack[] recipeInputs = new ItemStack[9];
ItemStack[] recipeOutputs = null;
NBTTagCompound currentStack;
Expand Down Expand Up @@ -127,6 +134,58 @@ public IMessage onMessage(PacketRecipeTransfer message, MessageContext ctx) {
return null;
}

private Method getPartPatternTerminalMethod;

private Boolean canSetCraftingRecipe = null;

private final HashSet<String> possibleSupportedMethodNames = Sets.newHashSet(
// Applied Energistics 2
"getPatternTerminal",
// AE2 Unofficial Extended Life
"getPart"
);

private final String noSuchMethodErrorMessage = "no such method: " + String.join(" or ", possibleSupportedMethodNames);

private void setCraftingRecipe(ContainerPatternTerm container, boolean craftingMode) {
if (Boolean.FALSE.equals(canSetCraftingRecipe)) {
throw new NoSuchMethodError(noSuchMethodErrorMessage);
}

if (getPartPatternTerminalMethod == null) {
Class<ContainerPatternTerm> clazz = ContainerPatternTerm.class;
Method[] methods = clazz.getMethods();

for (Method method : methods) {
String methodName = method.getName();
if (!possibleSupportedMethodNames.contains(methodName)) {
continue;
}
getPartPatternTerminalMethod = method;
getPartPatternTerminalMethod.setAccessible(true);
if (getPartPatternTerminalMethod.getParameters().length > 0) {
continue;
}
canSetCraftingRecipe = true;
break;
}
if (getPartPatternTerminalMethod == null) {
canSetCraftingRecipe = false;
}
}

if (getPartPatternTerminalMethod == null) {
throw new NoSuchMethodError(noSuchMethodErrorMessage);
}

try {
PartPatternTerminal patternTerminal = (PartPatternTerminal) getPartPatternTerminalMethod.invoke(container);
patternTerminal.setCraftingRecipe(craftingMode);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new NoSuchMethodError(noSuchMethodErrorMessage);
}
}

}

}

0 comments on commit 0a40019

Please sign in to comment.