diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java index feb530d2f..7c4a3ecc6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java @@ -66,6 +66,16 @@ public interface IStackList { @Nullable T get(@Nonnull T stack, int flags); + /** + * Returns a stack entry. + * + * @param stack the stack to search for + * @param flags the flags to compare on, see {@link IComparer} + * @return the stack entry, or null if no stack entry was found + */ + @Nullable + StackListEntry getEntry(@Nonnull T stack, int flags); + /** * Returns a stack. * diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java index 2b2ccdfb0..9b9cc91c2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java @@ -96,6 +96,20 @@ public class FluidStackList implements IStackList { return null; } + @Nullable + @Override + public StackListEntry getEntry(@Nonnull FluidStack stack, int flags) { + for (StackListEntry entry : stacks.get(stack.getFluid())) { + FluidStack otherStack = entry.getStack(); + + if (API.instance().getComparer().isEqual(otherStack, stack, flags)) { + return entry; + } + } + + return null; + } + @Override @Nullable public FluidStack get(UUID id) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java index 2f2eb6d62..cb1522100 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java @@ -94,6 +94,20 @@ public class ItemStackList implements IStackList { return null; } + @Nullable + @Override + public StackListEntry getEntry(@Nonnull ItemStack stack, int flags) { + for (StackListEntry entry : stacks.get(stack.getItem())) { + ItemStack otherStack = entry.getStack(); + + if (API.instance().getComparer().isEqual(otherStack, stack, flags)) { + return entry; + } + } + + return null; + } + @Override @Nullable public ItemStack get(UUID id) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java index 4b2fde86e..8e2ee530e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java @@ -1,6 +1,8 @@ package com.raoulvdberge.refinedstorage.network.grid; import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.api.util.StackListResult; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; @@ -52,7 +54,9 @@ public class GridFluidDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), false, message.network, message.network.getFluidStorageTracker().get(delta.getStack())); + StackListEntry craftingEntry = message.network.getFluidStorageCache().getCraftablesList().getEntry(delta.getStack(), IComparer.COMPARE_NBT); + + StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), craftingEntry != null ? craftingEntry.getId() : null, false, message.network.getFluidStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java index 35d6faa94..7ac883a26 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.network.grid; import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; @@ -53,11 +54,15 @@ public class GridFluidUpdateMessage { buf.writeInt(size); for (StackListEntry stack : message.network.getFluidStorageCache().getList().getStacks()) { - StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), false, message.network, message.network.getFluidStorageTracker().get(stack.getStack())); + StackListEntry craftingEntry = message.network.getFluidStorageCache().getCraftablesList().getEntry(stack.getStack(), IComparer.COMPARE_NBT); + + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), craftingEntry != null ? craftingEntry.getId() : null, false, message.network.getFluidStorageTracker().get(stack.getStack())); } for (StackListEntry stack : message.network.getFluidStorageCache().getCraftablesList().getStacks()) { - StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getFluidStorageTracker().get(stack.getStack())); + StackListEntry regularEntry = message.network.getFluidStorageCache().getList().getEntry(stack.getStack(), IComparer.COMPARE_NBT); + + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), regularEntry != null ? regularEntry.getId() : null, true, message.network.getFluidStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java index fb0185bba..d1b23790c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java @@ -1,6 +1,8 @@ package com.raoulvdberge.refinedstorage.network.grid; import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.api.util.StackListResult; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; @@ -52,7 +54,9 @@ public class GridItemDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), false, message.network, message.network.getItemStorageTracker().get(delta.getStack())); + StackListEntry craftingEntry = message.network.getItemStorageCache().getCraftablesList().getEntry(delta.getStack(), IComparer.COMPARE_NBT); + + StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), craftingEntry != null ? craftingEntry.getId() : null, false, message.network.getItemStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java index f8a6d0abb..211b60756 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.network.grid; import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; @@ -53,11 +54,15 @@ public class GridItemUpdateMessage { buf.writeInt(size); for (StackListEntry stack : message.network.getItemStorageCache().getList().getStacks()) { - StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), false, message.network, message.network.getItemStorageTracker().get(stack.getStack())); + StackListEntry craftingEntry = message.network.getItemStorageCache().getCraftablesList().getEntry(stack.getStack(), IComparer.COMPARE_NBT); + + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), craftingEntry != null ? craftingEntry.getId() : null, false, message.network.getItemStorageTracker().get(stack.getStack())); } for (StackListEntry stack : message.network.getItemStorageCache().getCraftablesList().getStacks()) { - StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getItemStorageTracker().get(stack.getStack())); + StackListEntry regularEntry = message.network.getItemStorageCache().getList().getEntry(stack.getStack(), IComparer.COMPARE_NBT); + + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), regularEntry != null ? regularEntry.getId() : null, true, message.network.getItemStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java index 22ab9a7ec..4fa83b3d5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java @@ -50,7 +50,7 @@ public class PortableGridFluidDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), false, null, message.portableGrid.getFluidStorageTracker().get(delta.getStack())); + StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), null, false, message.portableGrid.getFluidStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java index a18dea7ca..34d0d5313 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java @@ -46,7 +46,7 @@ public class PortableGridFluidUpdateMessage { buf.writeInt(size); for (StackListEntry stack : message.portableGrid.getFluidCache().getList().getStacks()) { - StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), false, null, message.portableGrid.getFluidStorageTracker().get(stack.getStack())); + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), null, false, message.portableGrid.getFluidStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java index 129513086..4973f32fc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java @@ -52,7 +52,7 @@ public class PortableGridItemDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), false, null, message.portableGrid.getItemStorageTracker().get(delta.getStack())); + StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), null, false, message.portableGrid.getItemStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java index be3d50e32..e5aacecda 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java @@ -46,7 +46,7 @@ public class PortableGridItemUpdateMessage { buf.writeInt(size); for (StackListEntry stack : message.portableGrid.getItemCache().getList().getStacks()) { - StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), false, null, message.portableGrid.getItemStorageTracker().get(stack.getStack())); + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), null, false, message.portableGrid.getItemStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java index 5ec0339cc..038a36b6b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java @@ -455,8 +455,10 @@ public class GridScreen extends BaseScreen implements IScreenInfo IGridStack stack = view.getStacks().get(slotNumber); if (isPulling) { - if (stack.isCraftable() && view.canCraft()) { + if (view.canCraft() && stack.isCraftable()) { minecraft.displayGuiScreen(new CraftingSettingsScreen(this, playerInventory.player, stack)); + } else if (view.canCraft() && !stack.isCraftable() && stack.getOtherId() != null && hasShiftDown() && hasControlDown()) { + minecraft.displayGuiScreen(new CraftingSettingsScreen(this, playerInventory.player, view.get(stack.getOtherId()))); } else if (grid.getGridType() == GridType.FLUID && held.isEmpty()) { RS.NETWORK_HANDLER.sendToServer(new GridFluidPullMessage(view.getStacks().get(slotNumber).getId(), hasShiftDown())); } else if (grid.getGridType() != GridType.FLUID) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/filtering/CraftableGridFilter.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/filtering/CraftableGridFilter.java index 9873f0564..52a5baf24 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/filtering/CraftableGridFilter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/filtering/CraftableGridFilter.java @@ -14,6 +14,7 @@ public class CraftableGridFilter implements Predicate { @Override public boolean test(IGridStack stack) { + // TODO Make working with fluids. return stack instanceof ItemGridStack && stack.isCraftable() == craftable; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java index 181cbcd72..daf44cadf 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -20,6 +20,8 @@ public class FluidGridStack implements IGridStack { private Logger logger = LogManager.getLogger(getClass()); private UUID id; + @Nullable + private UUID otherId; private FluidStack stack; @Nullable private StorageTrackerEntry entry; @@ -31,8 +33,9 @@ public class FluidGridStack implements IGridStack { private String cachedModId; private String cachedModName; - public FluidGridStack(UUID id, FluidStack stack, @Nullable StorageTrackerEntry entry, boolean craftable) { + public FluidGridStack(UUID id, @Nullable UUID otherId, FluidStack stack, @Nullable StorageTrackerEntry entry, boolean craftable) { this.id = id; + this.otherId = otherId; this.stack = stack; this.entry = entry; this.craftable = craftable; @@ -52,6 +55,17 @@ public class FluidGridStack implements IGridStack { return id; } + @Nullable + @Override + public UUID getOtherId() { + return otherId; + } + + @Override + public void updateOtherId(@Nullable UUID otherId) { + this.otherId = otherId; + } + @Override public String getName() { if (cachedName == null) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java index a3a312826..1d76dd549 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java @@ -10,6 +10,11 @@ import java.util.UUID; public interface IGridStack { UUID getId(); + @Nullable + UUID getOtherId(); + + void updateOtherId(@Nullable UUID otherId); + String getName(); String getModId(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java index 241203a1b..f0420ee37 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -24,14 +24,15 @@ public class ItemGridStack implements IGridStack { private Logger logger = LogManager.getLogger(getClass()); private UUID id; + @Nullable + private UUID otherId; private ItemStack stack; - private String cachedName; private boolean craftable; - private String[] oreIds = null; @Nullable private StorageTrackerEntry entry; private Set cachedTags; + private String cachedName; private String cachedModId; private String cachedModName; private String cachedTooltip; @@ -40,8 +41,9 @@ public class ItemGridStack implements IGridStack { this.stack = stack; } - public ItemGridStack(UUID id, ItemStack stack, boolean craftable, StorageTrackerEntry entry) { + public ItemGridStack(UUID id, @Nullable UUID otherId, ItemStack stack, boolean craftable, StorageTrackerEntry entry) { this.id = id; + this.otherId = otherId; this.stack = stack; this.craftable = craftable; this.entry = entry; @@ -68,6 +70,17 @@ public class ItemGridStack implements IGridStack { return id; } + @Nullable + @Override + public UUID getOtherId() { + return otherId; + } + + @Override + public void updateOtherId(@Nullable UUID otherId) { + this.otherId = otherId; + } + @Override public String getName() { if (cachedName == null) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java index 5605f7d79..4c5e2364b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.screen.grid.sorting.IGridSorter; import com.raoulvdberge.refinedstorage.screen.grid.sorting.SortingDirection; import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import javax.annotation.Nullable; import java.util.*; import java.util.function.Predicate; @@ -31,6 +32,12 @@ public abstract class BaseGridView implements IGridView { return stacks; } + @Nullable + @Override + public IGridStack get(UUID id) { + return map.get(id); + } + @Override public void sort() { List stacks = new ArrayList<>(); @@ -51,6 +58,15 @@ public abstract class BaseGridView implements IGridView { while (it.hasNext()) { IGridStack stack = it.next(); + // TODO Make working with grid sorting mode. + if (stack.isCraftable() && + stack.getOtherId() != null && + map.containsKey(stack.getOtherId())) { + it.remove(); + + continue; + } + for (Predicate filter : filters) { if (!filter.test(stack)) { it.remove(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java index 24c59e957..9eab73330 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java @@ -27,6 +27,14 @@ public class FluidGridView extends BaseGridView { return; } + // Update the other id reference if needed. + // Taking a stack out - and then re-inserting it - gives the new stack a new ID + // With that new id, the reference for the crafting stack would be outdated. + if (!stack.isCraftable() && + stack.getOtherId() != null) { + map.get(stack.getOtherId()).updateOtherId(stack.getId()); + } + FluidGridStack existing = (FluidGridStack) map.get(stack.getId()); if (existing == null) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/IGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/IGridView.java index 31d021ced..1fe8e7b84 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/IGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/IGridView.java @@ -2,11 +2,16 @@ package com.raoulvdberge.refinedstorage.screen.grid.view; import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import javax.annotation.Nullable; import java.util.List; +import java.util.UUID; public interface IGridView { List getStacks(); + @Nullable + IGridStack get(UUID id); + void setStacks(List stacks); void postChange(IGridStack stack, int delta); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java index 441e6ad28..627a2f500 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java @@ -27,6 +27,14 @@ public class ItemGridView extends BaseGridView { return; } + // Update the other id reference if needed. + // Taking a stack out - and then re-inserting it - gives the new stack a new ID + // With that new id, the reference for the crafting stack would be outdated. + if (!stack.isCraftable() && + stack.getOtherId() != null) { + map.get(stack.getOtherId()).updateOtherId(stack.getId()); + } + ItemGridStack existing = (ItemGridStack) map.get(stack.getId()); if (existing == null) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java index 531b673f7..fa1335e27 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java @@ -1,6 +1,5 @@ package com.raoulvdberge.refinedstorage.util; -import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider; import com.raoulvdberge.refinedstorage.api.storage.tracker.StorageTrackerEntry; @@ -82,12 +81,17 @@ public final class StackUtils { } } - public static void writeItemGridStack(PacketBuffer buf, ItemStack stack, UUID id, boolean craftable, @Nullable INetwork network, @Nullable StorageTrackerEntry entry) { + public static void writeItemGridStack(PacketBuffer buf, ItemStack stack, UUID id, @Nullable UUID otherId, boolean craftable, @Nullable StorageTrackerEntry entry) { writeItemStack(buf, stack); buf.writeBoolean(craftable); buf.writeUniqueId(id); + buf.writeBoolean(otherId != null); + if (otherId != null) { + buf.writeUniqueId(otherId); + } + if (entry == null) { buf.writeBoolean(false); } else { @@ -104,20 +108,30 @@ public final class StackUtils { boolean craftable = buf.readBoolean(); UUID id = buf.readUniqueId(); + UUID otherId = null; + if (buf.readBoolean()) { + otherId = buf.readUniqueId(); + } + StorageTrackerEntry entry = null; if (buf.readBoolean()) { entry = new StorageTrackerEntry(buf.readLong(), PacketBufferUtils.readString(buf)); } - return new ItemGridStack(id, stack, craftable, entry); + return new ItemGridStack(id, otherId, stack, craftable, entry); } - public static void writeFluidGridStack(PacketBuffer buf, FluidStack stack, UUID id, boolean craftable, @Nullable INetwork network, @Nullable StorageTrackerEntry entry) { + public static void writeFluidGridStack(PacketBuffer buf, FluidStack stack, UUID id, @Nullable UUID otherId, boolean craftable, @Nullable StorageTrackerEntry entry) { stack.writeToPacket(buf); buf.writeBoolean(craftable); buf.writeUniqueId(id); + buf.writeBoolean(otherId != null); + if (otherId != null) { + buf.writeUniqueId(otherId); + } + if (entry == null) { buf.writeBoolean(false); } else { @@ -133,12 +147,17 @@ public final class StackUtils { boolean craftable = buf.readBoolean(); UUID id = buf.readUniqueId(); + UUID otherId = null; + if (buf.readBoolean()) { + otherId = buf.readUniqueId(); + } + StorageTrackerEntry entry = null; if (buf.readBoolean()) { entry = new StorageTrackerEntry(buf.readLong(), PacketBufferUtils.readString(buf)); } - return new FluidGridStack(id, stack, entry, craftable); + return new FluidGridStack(id, otherId, stack, entry, craftable); } @SuppressWarnings("unchecked")