Skip to content

Commit 513aa01

Browse files
committed
Fix modded blocks always dropping missing blocks.
1 parent 79aabaa commit 513aa01

File tree

1 file changed

+26
-24
lines changed

1 file changed

+26
-24
lines changed

patching/src/main/java/com/fox2code/foxloader/patching/game/RegistryPatch.java

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -820,32 +820,34 @@ private static void patchBlock(ClassNode classNode) {
820820
initPrefix.add(new VarInsnNode(ISTORE, 3));
821821
flInit.instructions.insert(lastFieldSet, initPrefix);
822822
TransformerUtils.addMethodBefore(classNode, "<init>", flInit);
823-
MethodNode getItemID = TransformerUtils.getMethod(classNode, "getItemID");
824-
LabelNode getItemIDGoto = null;
825-
for (AbstractInsnNode abstractInsnNode : getItemID.instructions) {
826-
if (abstractInsnNode.getOpcode() == GOTO) {
827-
getItemIDGoto = ((JumpInsnNode) abstractInsnNode).label;
828-
break;
823+
for (java.lang.String methodName : new String[]{"idDropped", "getItemID"}) {
824+
MethodNode getItemIDLike = TransformerUtils.getMethod(classNode, methodName);
825+
LabelNode getItemIDGoto = null;
826+
for (AbstractInsnNode abstractInsnNode : getItemIDLike.instructions) {
827+
if (abstractInsnNode.getOpcode() == GOTO) {
828+
getItemIDGoto = ((JumpInsnNode) abstractInsnNode).label;
829+
break;
830+
}
829831
}
832+
InsnList blockIdPrefix = new InsnList();
833+
blockIdPrefix.add(new VarInsnNode(ALOAD, 0));
834+
blockIdPrefix.add(new FieldInsnNode(GETFIELD, Block, "blockID", "I"));
835+
blockIdPrefix.add(TransformerUtils.getNumberInsn(INITIAL_BLOCK_ID));
836+
LabelNode jmp = new LabelNode();
837+
blockIdPrefix.add(new JumpInsnNode(IF_ICMPLT, jmp));
838+
blockIdPrefix.add(new VarInsnNode(ALOAD, 0));
839+
blockIdPrefix.add(new FieldInsnNode(GETFIELD, Block, "blockID", "I"));
840+
blockIdPrefix.add(TransformerUtils.getNumberInsn(BLOCK_ID_DIFF));
841+
blockIdPrefix.add(new InsnNode(IADD));
842+
if (getItemIDGoto != null) {
843+
blockIdPrefix.add(new JumpInsnNode(GOTO, getItemIDGoto));
844+
} else {
845+
blockIdPrefix.add(new InsnNode(IRETURN));
846+
}
847+
blockIdPrefix.add(jmp);
848+
TransformerUtils.insertToBeginningOfCode(getItemIDLike, blockIdPrefix);
849+
// getItemID.access |= ACC_FINAL; // ReIndev need to override BLock.getItemID()
830850
}
831-
InsnList blockIdPrefix = new InsnList();
832-
blockIdPrefix.add(new VarInsnNode(ALOAD, 0));
833-
blockIdPrefix.add(new FieldInsnNode(GETFIELD, Block, "blockID", "I"));
834-
blockIdPrefix.add(TransformerUtils.getNumberInsn(INITIAL_BLOCK_ID));
835-
LabelNode jmp = new LabelNode();
836-
blockIdPrefix.add(new JumpInsnNode(IF_ICMPLT, jmp));
837-
blockIdPrefix.add(new VarInsnNode(ALOAD, 0));
838-
blockIdPrefix.add(new FieldInsnNode(GETFIELD, Block, "blockID", "I"));
839-
blockIdPrefix.add(TransformerUtils.getNumberInsn(BLOCK_ID_DIFF));
840-
blockIdPrefix.add(new InsnNode(IADD));
841-
if (getItemIDGoto != null) {
842-
blockIdPrefix.add(new JumpInsnNode(GOTO, getItemIDGoto));
843-
} else {
844-
blockIdPrefix.add(new InsnNode(IRETURN));
845-
}
846-
blockIdPrefix.add(jmp);
847-
TransformerUtils.insertToBeginningOfCode(getItemID, blockIdPrefix);
848-
// getItemID.access |= ACC_FINAL; // ReIndev need to override BLock.getItemID()
849851
MethodNode initializeItemBlock = new MethodNode(ASM_API, ACC_PROTECTED,
850852
"initializeItemBlock", "()L" + ItemBlock + ";", null, null);
851853
initializeItemBlock.instructions.add(new TypeInsnNode(NEW, ItemBlock));

0 commit comments

Comments
 (0)