Fix vanilla issue with workbench deleting excess on shift click when only some of the result can fit in the player's inventory

This commit is contained in:
Chicken-Bomes committed 2014-05-01 01:48:02 +10:00
1 parent 0c4b9ef204
commit 2bc7eb361b
2 files changed
+41

No files matched your search

+28
View File
@@ -23,6 +23,34 @@ ARETURN
list commaFix
INVOKESTATIC codechicken/nei/NEIServerUtils.fixTrailingCommaList(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
list n_workbenchFix
ALOAD 0
ALOAD 5
BIPUSH 10
BIPUSH 46
ICONST_1
INVOKEVIRTUAL net/minecraft/inventory/ContainerWorkbench.mergeItemStack (Lnet/minecraft/item/ItemStack;IIZ)Z
list workbenchFix
NEW codechicken/lib/inventory/InventoryRange
DUP
ALOAD 0
GETFIELD net/minecraft/inventory/ContainerWorkbench.inventorySlots : Ljava/util/List;
BIPUSH 10
INVOKEINTERFACE java/util/List.get (I)Ljava/lang/Object;
CHECKCAST net/minecraft/inventory/Slot
GETFIELD net/minecraft/inventory/Slot.inventory : Lnet/minecraft/inventory/IInventory;
ICONST_0
BIPUSH 36
INVOKESPECIAL codechicken/lib/inventory/InventoryRange.<init>(Lnet/minecraft/inventory/IInventory;II)V
ALOAD 5
ICONST_1
INVOKESTATIC codechicken/lib/inventory/InventoryUtils.insertItem(Lcodechicken/lib/inventory/InventoryRange;Lnet/minecraft/item/ItemStack;Z)I
IFEQ LCONT
ACONST_NULL
ARETURN
LCONT
#begin GuiContainer patches
list m_getManager
@@ -41,6 +41,18 @@ public class NEITransformer implements IClassTransformer
transformer.add(new MethodInjector(new ObfMapping("net/minecraft/nbt/NBTTagList", "toString", "()Ljava/lang/String;"),
asmblocks.get("n_commaFix"), asmblocks.get("commaFix"), true));
//fix workbench container losing items on shift click output without room for the full stack
transformer.add(new MethodTransformer(new ObfMapping("net/minecraft/inventory/ContainerWorkbench", "func_82846_b", "(Lnet/minecraft/entity/player/EntityPlayer;I)Lnet/minecraft/item/ItemStack;"))
{
@Override
public void transform(MethodNode mv) {
ASMHelper.logger.debug("NEI: Applying workbench fix");
InsnListSection key = findN(mv.instructions, asmblocks.get("n_workbenchFix").list).get(0);
key.insertBefore(asmblocks.get("workbenchFix").rawListCopy());
}
});
String GuiContainer = "net/minecraft/client/gui/inventory/GuiContainer";
//add manager field
transformer.add(new FieldWriter(ACC_PUBLIC, new ObfMapping(GuiContainer, "manager", "Lcodechicken/nei/guihook/GuiContainerManager;")));
@@ -117,6 +129,7 @@ public class NEITransformer implements IClassTransformer
{
@Override
public void transform(MethodNode mv) {
ASMHelper.logger.debug("NEI: Injecting mouseUp call");
ASMBlock gotoBlock = asmblocks.get("n_mouseUpGoto");
ASMBlock needleBlock = asmblocks.get("n_mouseUp");
ASMBlock injectionBlock = asmblocks.get("mouseUp");