Skip to content

Commit

Permalink
fix byte consumption for missing fluids
Browse files Browse the repository at this point in the history
  • Loading branch information
GlodBlock committed Jul 16, 2023
1 parent 5c02794 commit 340d309
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 10 deletions.
5 changes: 5 additions & 0 deletions src/main/java/com/glodblock/github/coremod/CoreModHooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,11 @@ public static long getCraftingByteCost(IAEItemStack stack) {
? (long)Math.ceil(stack.getStackSize() / 1000D) : stack.getStackSize();
}

public static long getCraftingByteCost(long originBytes, long missingBytes, IAEItemStack stack) {
return stack != null && stack.getItem() instanceof ItemFluidDrop
? (long) Math.ceil(missingBytes / 1000D) + originBytes : missingBytes + originBytes;
}

public static boolean checkForItemHandler(ICapabilityProvider capProvider, Capability<?> capability, EnumFacing side) {
return capProvider.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side)
|| capProvider.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si

private static class TransformRequest extends MethodVisitor {

private boolean writingBytes = false;
private int writingBytes = 0;
private boolean fired = false;

TransformRequest(int api, MethodVisitor mv) {
super(api, mv);
Expand All @@ -46,22 +47,17 @@ private static class TransformRequest extends MethodVisitor {
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
if (opcode == Opcodes.GETFIELD && owner.equals("appeng/crafting/CraftingTreeNode") && name.equals("bytes")) {
writingBytes = true;
writingBytes ++;
fired = true;
}
super.visitFieldInsn(opcode, owner, name, desc);
}

@Override
public void visitLineNumber(int line, Label start) {
writingBytes = false; // no write here
super.visitLineNumber(line, start);
}

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
if (writingBytes && opcode == Opcodes.INVOKEINTERFACE
if (writingBytes <= 5 && fired && opcode == Opcodes.INVOKEINTERFACE
&& owner.equals("appeng/api/storage/data/IAEItemStack") && name.equals("getStackSize")) {
writingBytes = false;
this.fired = false;
super.visitMethodInsn(Opcodes.INVOKESTATIC,
"com/glodblock/github/coremod/CoreModHooks",
"getCraftingByteCost",
Expand All @@ -72,6 +68,25 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc,
}
}

@Override
public void visitInsn(int opcode) {
if (writingBytes == 6 && fired && opcode == Opcodes.LADD) {
this.fired = false;
super.visitVarInsn(Opcodes.ALOAD, 0);
super.visitFieldInsn(Opcodes.GETFIELD,
"appeng/crafting/CraftingTreeNode",
"what",
"Lappeng/api/storage/data/IAEItemStack;");
super.visitMethodInsn(Opcodes.INVOKESTATIC,
"com/glodblock/github/coremod/CoreModHooks",
"getCraftingByteCost",
"(JJLappeng/api/storage/data/IAEItemStack;)J",
false);
} else {
super.visitInsn(opcode);
}
}

}

}

0 comments on commit 340d309

Please sign in to comment.