mirror of
https://github.com/Ellpeck/PrettyPipes.git
synced 2024-11-22 19:58:35 +01:00
make "items on the way" only look at items going to the current INVENTORY, not the current pipe
This commit is contained in:
parent
9fab982e6a
commit
8d347473af
3 changed files with 14 additions and 8 deletions
|
@ -204,6 +204,10 @@ public class PipeItem implements INBTSerializable<CompoundNBT>, ILiquidContainer
|
|||
return this.path.get(this.currentTile);
|
||||
}
|
||||
|
||||
public BlockPos getDestInventory(){
|
||||
return this.destInventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundNBT serializeNBT() {
|
||||
CompoundNBT nbt = new CompoundNBT();
|
||||
|
|
|
@ -375,15 +375,16 @@ public class PipeNetwork implements ICapabilitySerializable<CompoundNBT>, GraphL
|
|||
return this.pipeItems.get(pos);
|
||||
}
|
||||
|
||||
public Stream<PipeItem> getPipeItemsOnTheWay(BlockPos goalPipe) {
|
||||
private Stream<PipeItem> getPipeItemsOnTheWay(BlockPos goalInv) {
|
||||
this.startProfile("get_pipe_items_on_the_way");
|
||||
Stream<PipeItem> ret = this.pipeItems.values().stream().filter(i -> i.getDestPipe().equals(goalPipe));
|
||||
Stream<PipeItem> ret = this.pipeItems.values().stream().filter(i -> i.getDestInventory().equals(goalInv));
|
||||
this.endProfile();
|
||||
return ret;
|
||||
}
|
||||
|
||||
public int getItemsOnTheWay(BlockPos goalPipe, ItemStack type, ItemEqualityType... equalityTypes) {
|
||||
return this.getPipeItemsOnTheWay(goalPipe)
|
||||
public int getItemsOnTheWay(BlockPos goalInv, ItemStack type, ItemEqualityType... equalityTypes) {
|
||||
// TODO pending auto-crafting requests should be marked as "on the way" here to allow over-sending prevention
|
||||
return this.getPipeItemsOnTheWay(goalInv)
|
||||
.filter(i -> type == null || ItemEqualityType.compareItems(i.stack, type, equalityTypes))
|
||||
.mapToInt(i -> i.stack.getCount()).sum();
|
||||
}
|
||||
|
|
|
@ -149,14 +149,15 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
int maxAmount = this.streamModules().mapToInt(m -> m.getRight().getMaxInsertionAmount(m.getLeft(), this, stack, handler)).min().orElse(Integer.MAX_VALUE);
|
||||
if (maxAmount < stack.getCount())
|
||||
continue;
|
||||
BlockPos offset = this.pos.offset(dir);
|
||||
if (preventOversending || maxAmount < Integer.MAX_VALUE) {
|
||||
PipeNetwork network = PipeNetwork.get(this.world);
|
||||
// these are the items that are currently in the pipes, going to this pipe
|
||||
int onTheWay = network.getItemsOnTheWay(this.pos, null);
|
||||
// these are the items that are currently in the pipes, going to this inventory
|
||||
int onTheWay = network.getItemsOnTheWay(offset, null);
|
||||
if (onTheWay > 0) {
|
||||
if (maxAmount < Integer.MAX_VALUE) {
|
||||
// these are the items on the way, limited to items of the same type as stack
|
||||
int onTheWaySame = network.getItemsOnTheWay(this.pos, stack);
|
||||
int onTheWaySame = network.getItemsOnTheWay(offset, stack);
|
||||
// check if any modules are limiting us
|
||||
if (onTheWaySame + stack.getCount() > maxAmount)
|
||||
continue;
|
||||
|
@ -176,7 +177,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
continue;
|
||||
}
|
||||
}
|
||||
return this.pos.offset(dir);
|
||||
return offset;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue