diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 3a9cf64ad..6e6953cd2 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -7,9 +7,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.slot.SlotDisabled; -import refinedstorage.container.slot.SlotSpecimen; -import refinedstorage.container.slot.SlotSpecimenLegacy; +import refinedstorage.container.slot.*; import refinedstorage.tile.TileBase; import refinedstorage.tile.grid.WirelessGrid; @@ -109,15 +107,17 @@ public abstract class ContainerBase extends Container { protected ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { for (int i = begin; i < end; ++i) { - if (CompareUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { + if (CompareUtils.compareStackNoQuantity(getStackFromSlot(getSlot(i)), stack)) { return null; } } for (int i = begin; i < end; ++i) { - if (!getSlot(i).getHasStack() && getSlot(i).isItemValid(stack)) { - getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); - getSlot(i).onSlotChanged(); + Slot slot = getSlot(i); + + if (getStackFromSlot(slot) == null && slot.isItemValid(stack)) { + slot.putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); + slot.onSlotChanged(); return null; } @@ -126,6 +126,20 @@ public abstract class ContainerBase extends Container { return null; } + private ItemStack getStackFromSlot(Slot slot) { + ItemStack stackInSlot = slot.getStack(); + + if (stackInSlot == null) { + if (slot instanceof SlotSpecimenFluid) { + stackInSlot = ((SlotSpecimenFluid) slot).getRealStack(); + } else if (slot instanceof SlotSpecimenType) { + stackInSlot = ((SlotSpecimenType) slot).getRealStack(); + } + } + + return stackInSlot; + } + @Override public boolean canInteractWith(EntityPlayer player) { return true; diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java index 9d4930a92..c96aaedf0 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java @@ -38,7 +38,7 @@ public class SlotSpecimen extends SlotItemHandler { @Override public boolean isItemValid(ItemStack stack) { - return isBlockOnly() ? (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlockSpecial || stack.getItem() instanceof IPlantable) : true; + return super.isItemValid(stack) && (isBlockOnly() ? (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlockSpecial || stack.getItem() instanceof IPlantable) : true); } @Override diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java index c319c700c..fb3917535 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java @@ -1,14 +1,23 @@ package refinedstorage.container.slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.SlotItemHandler; -/** - * Created by Raoul on 13/08/2016. - */ -// @TODO: REMOVAL -public class SlotSpecimenFluid extends SlotItemHandler { - public SlotSpecimenFluid(boolean b, IItemHandler filters, int i, int i1, int i2) { - super(filters, i, i1, i2); +public class SlotSpecimenFluid extends SlotSpecimen { + private boolean server; + + public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) { + super(handler, id, x, y); + + this.server = server; + } + + @Override + public ItemStack getStack() { + return server ? super.getStack() : null; + } + + public ItemStack getRealStack() { + return super.getStack(); } } \ No newline at end of file diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java index 1111fd026..a0a20cb62 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java @@ -37,4 +37,8 @@ public class SlotSpecimenType extends SlotSpecimen { public ItemStack getStack() { return (type.getType() == IType.ITEMS || !((TileEntity) type).getWorld().isRemote) ? super.getStack() : null; } + + public ItemStack getRealStack() { + return super.getStack(); + } }