PrettyPipes/src/main/java/de/ellpeck/prettypipes/terminal/CraftingTerminalBlock.java

56 lines
2.2 KiB
Java
Raw Normal View History

2020-05-08 22:58:16 +02:00
package de.ellpeck.prettypipes.terminal;
import de.ellpeck.prettypipes.Utility;
import de.ellpeck.prettypipes.misc.ItemEqualityType;
import de.ellpeck.prettypipes.network.PipeItem;
import net.minecraft.item.ItemStack;
2020-05-08 22:58:16 +02:00
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
2020-05-08 22:58:16 +02:00
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
2020-05-08 22:58:16 +02:00
import javax.annotation.Nullable;
public class CraftingTerminalBlock extends ItemTerminalBlock {
@Nullable
@Override
public TileEntity createNewTileEntity(IBlockReader worldIn) {
return new CraftingTerminalTileEntity();
}
@Override
2020-10-15 04:15:52 +02:00
public ItemStack insertItem(World world, BlockPos pipePos, Direction direction, ItemStack remain, boolean simulate) {
BlockPos pos = pipePos.offset(direction);
CraftingTerminalTileEntity tile = Utility.getTileEntity(CraftingTerminalTileEntity.class, world, pos);
if (tile != null) {
remain = remain.copy();
2020-05-09 14:56:58 +02:00
int lowestSlot = -1;
2020-05-09 13:40:46 +02:00
do {
for (int i = 0; i < tile.craftItems.getSlots(); i++) {
ItemStack stack = tile.getRequestedCraftItem(i);
2020-05-09 14:56:58 +02:00
int count = tile.isGhostItem(i) ? 0 : stack.getCount();
2020-05-09 13:40:46 +02:00
if (!ItemHandlerHelper.canItemStacksStackRelaxed(stack, remain))
continue;
2020-05-09 14:56:58 +02:00
if (lowestSlot < 0 || !tile.isGhostItem(lowestSlot) && count < tile.getRequestedCraftItem(lowestSlot).getCount())
lowestSlot = i;
2020-05-09 13:40:46 +02:00
}
2020-05-09 14:56:58 +02:00
if (lowestSlot >= 0) {
ItemStack copy = remain.copy();
copy.setCount(1);
2020-10-15 04:15:52 +02:00
remain.shrink(1 - tile.craftItems.insertItem(lowestSlot, copy, simulate).getCount());
2020-05-09 13:40:46 +02:00
if (remain.isEmpty())
return ItemStack.EMPTY;
}
}
2020-05-09 14:56:58 +02:00
while (lowestSlot >= 0);
2020-10-15 04:15:52 +02:00
return ItemHandlerHelper.insertItemStacked(tile.items, remain, simulate);
}
2020-10-15 04:15:52 +02:00
return remain;
}
2020-05-08 22:58:16 +02:00
}