From f64cb60f5f45bba9c6138a0f819d006e6c05249b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 17 Jun 2016 19:55:55 +0200 Subject: [PATCH] Initial work on shift clicking support --- CHANGELOG.md | 9 +++++ .../container/ContainerConstructor.java | 33 ++++++++++++++++- .../container/ContainerCrafter.java | 6 +-- .../container/ContainerDestructor.java | 37 +++++++++++++++++-- .../container/ContainerDiskDrive.java | 2 +- .../container/ContainerExporter.java | 37 +++++++++++++++++-- .../container/ContainerImporter.java | 37 +++++++++++++++++-- .../container/ContainerInterface.java | 2 +- .../ContainerProcessingPatternEncoder.java | 35 ++++++++++++++++-- .../container/ContainerSolderer.java | 6 +-- .../ContainerWirelessTransmitter.java | 6 +-- 11 files changed, 182 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d82601301..3df9f81bd 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Refined Storage Changelog +### 0.7.14 +**Bugfixes** +- Fixed item overflow bug with storage drawers and external storage + +**Features** +- Added shift clicking support to every inventory (for upgrades etc) +- Tweaked some recipes +- Tweaked some energy usage in machines + ### 0.7.13 **Features** - Added ability to triple click in grid diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index f27a8cd74..c0751fc7a 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileConstructor; @@ -9,12 +11,39 @@ public class ContainerConstructor extends ContainerBase { public ContainerConstructor(EntityPlayer player, TileConstructor constructor) { super(player); - addSlotToContainer(new SlotSpecimen(constructor.getFilter(), 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK)); - for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(constructor.getUpgrades(), i, 187, 6 + (i * 18))); } + addSlotToContainer(new SlotSpecimen(constructor.getFilter(), 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK)); + addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack().copy(); + + if (index < 4) { + if (!mergeItemStack(stack, 4 + 1, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/container/ContainerCrafter.java b/src/main/java/refinedstorage/container/ContainerCrafter.java index bd87ddb27..15e4f6e33 100755 --- a/src/main/java/refinedstorage/container/ContainerCrafter.java +++ b/src/main/java/refinedstorage/container/ContainerCrafter.java @@ -30,11 +30,11 @@ public class ContainerCrafter extends ContainerStorage { if (slot != null && slot.getHasStack()) { stack = slot.getStack().copy(); - if (index < 8) { - if (!mergeItemStack(stack, 9, inventorySlots.size(), true)) { + if (index < 9 + 4) { + if (!mergeItemStack(stack, 9 + 4 + 1, inventorySlots.size(), false)) { return null; } - } else if (!mergeItemStack(stack, 0, 9, false)) { + } else if (!mergeItemStack(stack, 0, 9 + 4, false)) { return null; } diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index d6f36acbb..189622719 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileDestructor; @@ -9,14 +11,41 @@ public class ContainerDestructor extends ContainerBase { public ContainerDestructor(EntityPlayer player, TileDestructor destructor) { super(player); - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(destructor.getInventory(), i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK)); - } - for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(destructor.getUpgrades(), i, 187, 6 + (i * 18))); } + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimen(destructor.getInventory(), i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK)); + } + addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack().copy(); + + if (index < 4) { + if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/container/ContainerDiskDrive.java b/src/main/java/refinedstorage/container/ContainerDiskDrive.java index 8aca78410..415ef13dd 100755 --- a/src/main/java/refinedstorage/container/ContainerDiskDrive.java +++ b/src/main/java/refinedstorage/container/ContainerDiskDrive.java @@ -31,7 +31,7 @@ public class ContainerDiskDrive extends ContainerStorage { stack = slot.getStack().copy(); if (index < 8) { - if (!mergeItemStack(stack, 8, inventorySlots.size(), true)) { + if (!mergeItemStack(stack, 8 + 9 + 1, inventorySlots.size(), false)) { return null; } } else if (!mergeItemStack(stack, 0, 8, false)) { diff --git a/src/main/java/refinedstorage/container/ContainerExporter.java b/src/main/java/refinedstorage/container/ContainerExporter.java index afad8dc15..abf00f2d4 100755 --- a/src/main/java/refinedstorage/container/ContainerExporter.java +++ b/src/main/java/refinedstorage/container/ContainerExporter.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileExporter; @@ -9,14 +11,41 @@ public class ContainerExporter extends ContainerBase { public ContainerExporter(EntityPlayer player, TileExporter exporter) { super(player); - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(exporter.getFilters(), i, 8 + (18 * i), 20)); - } - for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(exporter.getUpgrades(), i, 187, 6 + (i * 18))); } + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimen(exporter.getFilters(), i, 8 + (18 * i), 20)); + } + addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack().copy(); + + if (index < 4) { + if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index d5b36c02e..6dc9faba5 100755 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileImporter; @@ -9,14 +11,41 @@ public class ContainerImporter extends ContainerBase { public ContainerImporter(EntityPlayer player, TileImporter importer) { super(player); - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(importer.getFilters(), i, 8 + (18 * i), 20)); - } - for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(importer.getUpgrades(), i, 187, 6 + (i * 18))); } + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimen(importer.getFilters(), i, 8 + (18 * i), 20)); + } + addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack().copy(); + + if (index < 4) { + if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/container/ContainerInterface.java b/src/main/java/refinedstorage/container/ContainerInterface.java index c4b296fe5..368e8ad40 100755 --- a/src/main/java/refinedstorage/container/ContainerInterface.java +++ b/src/main/java/refinedstorage/container/ContainerInterface.java @@ -41,7 +41,7 @@ public class ContainerInterface extends ContainerBase { stack = slot.getStack().copy(); if (index < 9) { - if (!mergeItemStack(stack, 9, inventorySlots.size(), true)) { + if (!mergeItemStack(stack, 9 + 9 + 9 + 4 + 1, inventorySlots.size(), true)) { return null; } } else if (!mergeItemStack(stack, 0, 9, false)) { diff --git a/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java b/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java index 7f9ca2f05..6e310c10b 100755 --- a/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotOutput; import refinedstorage.container.slot.SlotSpecimen; @@ -10,6 +12,9 @@ public class ContainerProcessingPatternEncoder extends ContainerBase { public ContainerProcessingPatternEncoder(EntityPlayer player, TileProcessingPatternEncoder processingPatternEncoder) { super(player); + addSlotToContainer(new SlotItemHandler(processingPatternEncoder.getPatterns(), 0, 152, 18)); + addSlotToContainer(new SlotOutput(processingPatternEncoder.getPatterns(), 1, 152, 58)); + int ox = 8; int x = ox; int y = 20; @@ -31,9 +36,33 @@ public class ContainerProcessingPatternEncoder extends ContainerBase { } } - addSlotToContainer(new SlotItemHandler(processingPatternEncoder.getPatterns(), 0, 152, 18)); - addSlotToContainer(new SlotOutput(processingPatternEncoder.getPatterns(), 1, 152, 58)); - addPlayerInventory(8, 90); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && !(slot instanceof SlotSpecimen) && slot.getHasStack()) { + stack = slot.getStack().copy(); + + if (index < 2) { + if (!mergeItemStack(stack, 2 + 18 + 1, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 1, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/container/ContainerSolderer.java b/src/main/java/refinedstorage/container/ContainerSolderer.java index aa243888b..ca059f684 100755 --- a/src/main/java/refinedstorage/container/ContainerSolderer.java +++ b/src/main/java/refinedstorage/container/ContainerSolderer.java @@ -38,11 +38,11 @@ public class ContainerSolderer extends ContainerBase { if (slot != null && slot.getHasStack()) { stack = slot.getStack().copy(); - if (index < 3) { - if (!mergeItemStack(stack, 3, inventorySlots.size(), true)) { + if (index < 4) { + if (!mergeItemStack(stack, 4 + 1, inventorySlots.size(), true)) { return null; } - } else if (!mergeItemStack(stack, 0, 3, false)) { + } else if (!mergeItemStack(stack, 0, 3, false)) { // 0 - 3 because we can't shift click to output slot return null; } diff --git a/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java b/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java index f124d8c32..c43fe49f3 100755 --- a/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java @@ -26,11 +26,11 @@ public class ContainerWirelessTransmitter extends ContainerBase { if (slot != null && slot.getHasStack()) { stack = slot.getStack().copy(); - if (index < 8) { - if (!mergeItemStack(stack, 9, inventorySlots.size(), true)) { + if (index < 4) { + if (!mergeItemStack(stack, 4 + 1, inventorySlots.size(), false)) { return null; } - } else if (!mergeItemStack(stack, 0, 9, false)) { + } else if (!mergeItemStack(stack, 0, 4, false)) { return null; }