@@ -39,6 +39,7 @@ final class RegistryPatch extends GamePatch {
3939 private static final int BLOCK_ID_DIFF = PatchConstants .BLOCK_ID_DIFF ;
4040 private static final Integer ORIGINAL_BLOCK_LIMIT_OBJ = ORIGINAL_BLOCK_LIMIT ;
4141 private static final Integer MODIFIED_BLOCK_LIMIT_OBJ = MODIFIED_BLOCK_LIMIT ;
42+ private static final String BitSet = "java/util/BitSet" ;
4243 private static final String ItemStack = "net/minecraft/common/item/ItemStack" ;
4344 private static final String Item = "net/minecraft/common/item/Item" ;
4445 private static final String Items = "net/minecraft/common/item/Items" ;
@@ -62,6 +63,7 @@ final class RegistryPatch extends GamePatch {
6263 private static final String ItemBlockPlanks = "net/minecraft/common/item/block/ItemBlockPlanks" ;
6364 private static final String ItemBlockRedCoral = "net/minecraft/common/item/block/ItemBlockRedCoral" ;
6465 private static final String ItemBlockSlab = "net/minecraft/common/item/block/ItemBlockSlab" ;
66+ private static final String ItemMap = "net/minecraft/common/item/children/ItemMap" ;
6567 private static final String ItemRecord = "net/minecraft/common/item/children/ItemRecord" ;
6668 private static final String Block = "net/minecraft/common/block/Block" ;
6769 private static final String Blocks = "net/minecraft/common/block/Blocks" ;
@@ -141,6 +143,10 @@ public ClassNode transform(ClassNode classNode) {
141143 skipGeneric = true ;
142144 break ;
143145 }
146+ case ItemMap : {
147+ patchItemMap (classNode );
148+ break ;
149+ }
144150 case Blocks : {
145151 patchBlocks (classNode );
146152 skipGeneric = true ;
@@ -1091,6 +1097,27 @@ private static void patchBlockSlab(ClassNode classNode) {
10911097 classNode .methods .add (initializeItemBlock );
10921098 }
10931099
1100+ // ItemMap fix
1101+ private static void patchItemMap (ClassNode classNode ) {
1102+ for (MethodNode methodNode : classNode .methods ) {
1103+ InsnList insnList = methodNode .instructions ;
1104+ for (AbstractInsnNode insnNode : insnList ) {
1105+ if ((insnNode .getOpcode () == NEWARRAY && ((IntInsnNode ) insnNode ).operand == T_INT ) ||
1106+ (insnNode .getOpcode () == INVOKESPECIAL && ((MethodInsnNode ) insnNode ).owner .equals (BitSet ))) {
1107+ AbstractInsnNode previous = insnNode .getPrevious ();
1108+ if (previous instanceof IntInsnNode &&
1109+ ((IntInsnNode ) previous ).operand == PatchConstants .ORIGINAL_BLOCK_LIMIT ) {
1110+ insnList .insert (insnNode ,
1111+ new MethodInsnNode (INVOKESTATIC , GameRegistry ,
1112+ "getTemporaryBlockIntArray" , "()[I" ));
1113+ insnList .remove (previous );
1114+ insnList .remove (insnNode );
1115+ }
1116+ }
1117+ }
1118+ }
1119+ }
1120+
10941121 // Generic
10951122
10961123 private static void patchItemGeneric (ClassNode classNode ) {
0 commit comments