diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e31c0b7c..895c8a8fa 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ **Features** - Added X button to Processing Pattern Encoder to clear configuration of inputs and outputs - Added Grid view toggle buttons (regular, craftable items only, no craftable items) +- Added ability to shift click items into Importer, Exporter, Constructor, Destructor and Detector to set up whitelist / blacklist configurations easier - Re-added opposite facing on shift click functionality - Updated to Forge 2014 diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index a9d9afef1..30be7ff22 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -6,6 +6,8 @@ import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.RefinedStorageUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; @@ -106,6 +108,25 @@ public abstract class ContainerBase extends Container { return null; } + public ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { + for (int i = begin; i < end; ++i) { + if (RefinedStorageUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { + return null; + } + } + + for (int i = begin; i < end; ++i) { + if (!getSlot(i).getHasStack()) { + getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); + getSlot(i).onSlotChanged(); + + return null; + } + } + + return null; + } + @Override public boolean canInteractWith(EntityPlayer player) { return true; diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 93894e402..18e8fd7fd 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -34,7 +34,7 @@ public class ContainerConstructor extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 1); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index 1bce4b602..7e29698bd 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -36,7 +36,7 @@ public class ContainerDestructor extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 9); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerDetector.java b/src/main/java/refinedstorage/container/ContainerDetector.java index dcc92e29d..2ca8c0e6a 100755 --- a/src/main/java/refinedstorage/container/ContainerDetector.java +++ b/src/main/java/refinedstorage/container/ContainerDetector.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 refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileDetector; @@ -12,4 +14,15 @@ public class ContainerDetector extends ContainerBase { addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack() && index > 0) { + return mergeItemStackToSpecimen(slot.getStack(), 0, 1); + } + + return null; + } } diff --git a/src/main/java/refinedstorage/container/ContainerExporter.java b/src/main/java/refinedstorage/container/ContainerExporter.java index 7ff6f990c..5f90598c8 100755 --- a/src/main/java/refinedstorage/container/ContainerExporter.java +++ b/src/main/java/refinedstorage/container/ContainerExporter.java @@ -36,7 +36,7 @@ public class ContainerExporter extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 9); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index c21727668..50dfd53ad 100755 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -36,7 +36,7 @@ public class ContainerImporter extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 9); } if (stack.stackSize == 0) {