@@ -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