Fix separation between crafting and non-crafting stacks in the Grid
This commit is contained in:
@@ -66,6 +66,16 @@ public interface IStackList<T> {
|
|||||||
@Nullable
|
@Nullable
|
||||||
T get(@Nonnull T stack, int flags);
|
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<T> getEntry(@Nonnull T stack, int flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a stack.
|
* Returns a stack.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -96,6 +96,20 @@ public class FluidStackList implements IStackList<FluidStack> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public StackListEntry<FluidStack> getEntry(@Nonnull FluidStack stack, int flags) {
|
||||||
|
for (StackListEntry<FluidStack> entry : stacks.get(stack.getFluid())) {
|
||||||
|
FluidStack otherStack = entry.getStack();
|
||||||
|
|
||||||
|
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public FluidStack get(UUID id) {
|
public FluidStack get(UUID id) {
|
||||||
|
|||||||
@@ -94,6 +94,20 @@ public class ItemStackList implements IStackList<ItemStack> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public StackListEntry<ItemStack> getEntry(@Nonnull ItemStack stack, int flags) {
|
||||||
|
for (StackListEntry<ItemStack> entry : stacks.get(stack.getItem())) {
|
||||||
|
ItemStack otherStack = entry.getStack();
|
||||||
|
|
||||||
|
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public ItemStack get(UUID id) {
|
public ItemStack get(UUID id) {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.raoulvdberge.refinedstorage.network.grid;
|
package com.raoulvdberge.refinedstorage.network.grid;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
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.api.util.StackListResult;
|
||||||
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
||||||
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
||||||
@@ -52,7 +54,9 @@ public class GridFluidDeltaMessage {
|
|||||||
for (StackListResult<FluidStack> delta : message.deltas) {
|
for (StackListResult<FluidStack> delta : message.deltas) {
|
||||||
buf.writeInt(delta.getChange());
|
buf.writeInt(delta.getChange());
|
||||||
|
|
||||||
StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), false, message.network, message.network.getFluidStorageTracker().get(delta.getStack()));
|
StackListEntry<FluidStack> 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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.raoulvdberge.refinedstorage.network.grid;
|
package com.raoulvdberge.refinedstorage.network.grid;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
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.StackListEntry;
|
||||||
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
||||||
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
||||||
@@ -53,11 +54,15 @@ public class GridFluidUpdateMessage {
|
|||||||
buf.writeInt(size);
|
buf.writeInt(size);
|
||||||
|
|
||||||
for (StackListEntry<FluidStack> stack : message.network.getFluidStorageCache().getList().getStacks()) {
|
for (StackListEntry<FluidStack> stack : message.network.getFluidStorageCache().getList().getStacks()) {
|
||||||
StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), false, message.network, message.network.getFluidStorageTracker().get(stack.getStack()));
|
StackListEntry<FluidStack> 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<FluidStack> stack : message.network.getFluidStorageCache().getCraftablesList().getStacks()) {
|
for (StackListEntry<FluidStack> stack : message.network.getFluidStorageCache().getCraftablesList().getStacks()) {
|
||||||
StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getFluidStorageTracker().get(stack.getStack()));
|
StackListEntry<FluidStack> 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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.raoulvdberge.refinedstorage.network.grid;
|
package com.raoulvdberge.refinedstorage.network.grid;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
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.api.util.StackListResult;
|
||||||
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
||||||
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
||||||
@@ -52,7 +54,9 @@ public class GridItemDeltaMessage {
|
|||||||
for (StackListResult<ItemStack> delta : message.deltas) {
|
for (StackListResult<ItemStack> delta : message.deltas) {
|
||||||
buf.writeInt(delta.getChange());
|
buf.writeInt(delta.getChange());
|
||||||
|
|
||||||
StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), false, message.network, message.network.getItemStorageTracker().get(delta.getStack()));
|
StackListEntry<ItemStack> 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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.raoulvdberge.refinedstorage.network.grid;
|
package com.raoulvdberge.refinedstorage.network.grid;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
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.StackListEntry;
|
||||||
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
||||||
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
||||||
@@ -53,11 +54,15 @@ public class GridItemUpdateMessage {
|
|||||||
buf.writeInt(size);
|
buf.writeInt(size);
|
||||||
|
|
||||||
for (StackListEntry<ItemStack> stack : message.network.getItemStorageCache().getList().getStacks()) {
|
for (StackListEntry<ItemStack> stack : message.network.getItemStorageCache().getList().getStacks()) {
|
||||||
StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), false, message.network, message.network.getItemStorageTracker().get(stack.getStack()));
|
StackListEntry<ItemStack> 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<ItemStack> stack : message.network.getItemStorageCache().getCraftablesList().getStacks()) {
|
for (StackListEntry<ItemStack> stack : message.network.getItemStorageCache().getCraftablesList().getStacks()) {
|
||||||
StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getItemStorageTracker().get(stack.getStack()));
|
StackListEntry<ItemStack> 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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class PortableGridFluidDeltaMessage {
|
|||||||
for (StackListResult<FluidStack> delta : message.deltas) {
|
for (StackListResult<FluidStack> delta : message.deltas) {
|
||||||
buf.writeInt(delta.getChange());
|
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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class PortableGridFluidUpdateMessage {
|
|||||||
buf.writeInt(size);
|
buf.writeInt(size);
|
||||||
|
|
||||||
for (StackListEntry<FluidStack> stack : message.portableGrid.getFluidCache().getList().getStacks()) {
|
for (StackListEntry<FluidStack> 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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class PortableGridItemDeltaMessage {
|
|||||||
for (StackListResult<ItemStack> delta : message.deltas) {
|
for (StackListResult<ItemStack> delta : message.deltas) {
|
||||||
buf.writeInt(delta.getChange());
|
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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class PortableGridItemUpdateMessage {
|
|||||||
buf.writeInt(size);
|
buf.writeInt(size);
|
||||||
|
|
||||||
for (StackListEntry<ItemStack> stack : message.portableGrid.getItemCache().getList().getStacks()) {
|
for (StackListEntry<ItemStack> 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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -455,8 +455,10 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
|||||||
IGridStack stack = view.getStacks().get(slotNumber);
|
IGridStack stack = view.getStacks().get(slotNumber);
|
||||||
|
|
||||||
if (isPulling) {
|
if (isPulling) {
|
||||||
if (stack.isCraftable() && view.canCraft()) {
|
if (view.canCraft() && stack.isCraftable()) {
|
||||||
minecraft.displayGuiScreen(new CraftingSettingsScreen(this, playerInventory.player, stack));
|
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()) {
|
} else if (grid.getGridType() == GridType.FLUID && held.isEmpty()) {
|
||||||
RS.NETWORK_HANDLER.sendToServer(new GridFluidPullMessage(view.getStacks().get(slotNumber).getId(), hasShiftDown()));
|
RS.NETWORK_HANDLER.sendToServer(new GridFluidPullMessage(view.getStacks().get(slotNumber).getId(), hasShiftDown()));
|
||||||
} else if (grid.getGridType() != GridType.FLUID) {
|
} else if (grid.getGridType() != GridType.FLUID) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public class CraftableGridFilter implements Predicate<IGridStack> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(IGridStack stack) {
|
public boolean test(IGridStack stack) {
|
||||||
|
// TODO Make working with fluids.
|
||||||
return stack instanceof ItemGridStack && stack.isCraftable() == craftable;
|
return stack instanceof ItemGridStack && stack.isCraftable() == craftable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public class FluidGridStack implements IGridStack {
|
|||||||
private Logger logger = LogManager.getLogger(getClass());
|
private Logger logger = LogManager.getLogger(getClass());
|
||||||
|
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
@Nullable
|
||||||
|
private UUID otherId;
|
||||||
private FluidStack stack;
|
private FluidStack stack;
|
||||||
@Nullable
|
@Nullable
|
||||||
private StorageTrackerEntry entry;
|
private StorageTrackerEntry entry;
|
||||||
@@ -31,8 +33,9 @@ public class FluidGridStack implements IGridStack {
|
|||||||
private String cachedModId;
|
private String cachedModId;
|
||||||
private String cachedModName;
|
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.id = id;
|
||||||
|
this.otherId = otherId;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.entry = entry;
|
this.entry = entry;
|
||||||
this.craftable = craftable;
|
this.craftable = craftable;
|
||||||
@@ -52,6 +55,17 @@ public class FluidGridStack implements IGridStack {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public UUID getOtherId() {
|
||||||
|
return otherId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateOtherId(@Nullable UUID otherId) {
|
||||||
|
this.otherId = otherId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
if (cachedName == null) {
|
if (cachedName == null) {
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ import java.util.UUID;
|
|||||||
public interface IGridStack {
|
public interface IGridStack {
|
||||||
UUID getId();
|
UUID getId();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
UUID getOtherId();
|
||||||
|
|
||||||
|
void updateOtherId(@Nullable UUID otherId);
|
||||||
|
|
||||||
String getName();
|
String getName();
|
||||||
|
|
||||||
String getModId();
|
String getModId();
|
||||||
|
|||||||
@@ -24,14 +24,15 @@ public class ItemGridStack implements IGridStack {
|
|||||||
private Logger logger = LogManager.getLogger(getClass());
|
private Logger logger = LogManager.getLogger(getClass());
|
||||||
|
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
@Nullable
|
||||||
|
private UUID otherId;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
private String cachedName;
|
|
||||||
private boolean craftable;
|
private boolean craftable;
|
||||||
private String[] oreIds = null;
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private StorageTrackerEntry entry;
|
private StorageTrackerEntry entry;
|
||||||
|
|
||||||
private Set<String> cachedTags;
|
private Set<String> cachedTags;
|
||||||
|
private String cachedName;
|
||||||
private String cachedModId;
|
private String cachedModId;
|
||||||
private String cachedModName;
|
private String cachedModName;
|
||||||
private String cachedTooltip;
|
private String cachedTooltip;
|
||||||
@@ -40,8 +41,9 @@ public class ItemGridStack implements IGridStack {
|
|||||||
this.stack = stack;
|
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.id = id;
|
||||||
|
this.otherId = otherId;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.craftable = craftable;
|
this.craftable = craftable;
|
||||||
this.entry = entry;
|
this.entry = entry;
|
||||||
@@ -68,6 +70,17 @@ public class ItemGridStack implements IGridStack {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public UUID getOtherId() {
|
||||||
|
return otherId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateOtherId(@Nullable UUID otherId) {
|
||||||
|
this.otherId = otherId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
if (cachedName == null) {
|
if (cachedName == null) {
|
||||||
|
|||||||
@@ -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.sorting.SortingDirection;
|
||||||
import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack;
|
import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
@@ -31,6 +32,12 @@ public abstract class BaseGridView implements IGridView {
|
|||||||
return stacks;
|
return stacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IGridStack get(UUID id) {
|
||||||
|
return map.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sort() {
|
public void sort() {
|
||||||
List<IGridStack> stacks = new ArrayList<>();
|
List<IGridStack> stacks = new ArrayList<>();
|
||||||
@@ -51,6 +58,15 @@ public abstract class BaseGridView implements IGridView {
|
|||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
IGridStack stack = it.next();
|
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<IGridStack> filter : filters) {
|
for (Predicate<IGridStack> filter : filters) {
|
||||||
if (!filter.test(stack)) {
|
if (!filter.test(stack)) {
|
||||||
it.remove();
|
it.remove();
|
||||||
|
|||||||
@@ -27,6 +27,14 @@ public class FluidGridView extends BaseGridView {
|
|||||||
return;
|
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());
|
FluidGridStack existing = (FluidGridStack) map.get(stack.getId());
|
||||||
|
|
||||||
if (existing == null) {
|
if (existing == null) {
|
||||||
|
|||||||
@@ -2,11 +2,16 @@ package com.raoulvdberge.refinedstorage.screen.grid.view;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack;
|
import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public interface IGridView {
|
public interface IGridView {
|
||||||
List<IGridStack> getStacks();
|
List<IGridStack> getStacks();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
IGridStack get(UUID id);
|
||||||
|
|
||||||
void setStacks(List<IGridStack> stacks);
|
void setStacks(List<IGridStack> stacks);
|
||||||
|
|
||||||
void postChange(IGridStack stack, int delta);
|
void postChange(IGridStack stack, int delta);
|
||||||
|
|||||||
@@ -27,6 +27,14 @@ public class ItemGridView extends BaseGridView {
|
|||||||
return;
|
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());
|
ItemGridStack existing = (ItemGridStack) map.get(stack.getId());
|
||||||
|
|
||||||
if (existing == null) {
|
if (existing == null) {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.raoulvdberge.refinedstorage.util;
|
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.IStorageDisk;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.tracker.StorageTrackerEntry;
|
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);
|
writeItemStack(buf, stack);
|
||||||
|
|
||||||
buf.writeBoolean(craftable);
|
buf.writeBoolean(craftable);
|
||||||
buf.writeUniqueId(id);
|
buf.writeUniqueId(id);
|
||||||
|
|
||||||
|
buf.writeBoolean(otherId != null);
|
||||||
|
if (otherId != null) {
|
||||||
|
buf.writeUniqueId(otherId);
|
||||||
|
}
|
||||||
|
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
buf.writeBoolean(false);
|
buf.writeBoolean(false);
|
||||||
} else {
|
} else {
|
||||||
@@ -104,20 +108,30 @@ public final class StackUtils {
|
|||||||
boolean craftable = buf.readBoolean();
|
boolean craftable = buf.readBoolean();
|
||||||
UUID id = buf.readUniqueId();
|
UUID id = buf.readUniqueId();
|
||||||
|
|
||||||
|
UUID otherId = null;
|
||||||
|
if (buf.readBoolean()) {
|
||||||
|
otherId = buf.readUniqueId();
|
||||||
|
}
|
||||||
|
|
||||||
StorageTrackerEntry entry = null;
|
StorageTrackerEntry entry = null;
|
||||||
if (buf.readBoolean()) {
|
if (buf.readBoolean()) {
|
||||||
entry = new StorageTrackerEntry(buf.readLong(), PacketBufferUtils.readString(buf));
|
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);
|
stack.writeToPacket(buf);
|
||||||
|
|
||||||
buf.writeBoolean(craftable);
|
buf.writeBoolean(craftable);
|
||||||
buf.writeUniqueId(id);
|
buf.writeUniqueId(id);
|
||||||
|
|
||||||
|
buf.writeBoolean(otherId != null);
|
||||||
|
if (otherId != null) {
|
||||||
|
buf.writeUniqueId(otherId);
|
||||||
|
}
|
||||||
|
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
buf.writeBoolean(false);
|
buf.writeBoolean(false);
|
||||||
} else {
|
} else {
|
||||||
@@ -133,12 +147,17 @@ public final class StackUtils {
|
|||||||
boolean craftable = buf.readBoolean();
|
boolean craftable = buf.readBoolean();
|
||||||
UUID id = buf.readUniqueId();
|
UUID id = buf.readUniqueId();
|
||||||
|
|
||||||
|
UUID otherId = null;
|
||||||
|
if (buf.readBoolean()) {
|
||||||
|
otherId = buf.readUniqueId();
|
||||||
|
}
|
||||||
|
|
||||||
StorageTrackerEntry entry = null;
|
StorageTrackerEntry entry = null;
|
||||||
if (buf.readBoolean()) {
|
if (buf.readBoolean()) {
|
||||||
entry = new StorageTrackerEntry(buf.readLong(), PacketBufferUtils.readString(buf));
|
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")
|
@SuppressWarnings("unchecked")
|
||||||
|
|||||||
Reference in New Issue
Block a user