PrettyPipes/src/main/java/de/ellpeck/prettypipes/terminal/CraftingTerminalBlock.java
2020-05-09 13:40:46 +02:00

53 lines
2 KiB
Java

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;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nullable;
public class CraftingTerminalBlock extends ItemTerminalBlock {
@Nullable
@Override
public TileEntity createNewTileEntity(IBlockReader worldIn) {
return new CraftingTerminalTileEntity();
}
@Override
public ItemStack insertItem(World world, BlockPos pipePos, Direction direction, PipeItem item) {
BlockPos pos = pipePos.offset(direction);
CraftingTerminalTileEntity tile = Utility.getTileEntity(CraftingTerminalTileEntity.class, world, pos);
if (tile != null) {
ItemStack remain = item.stack;
int lowestFitting = -1;
do {
for (int i = 0; i < tile.craftItems.getSlots(); i++) {
ItemStack stack = tile.getRequestedCraftItem(i);
if (!ItemHandlerHelper.canItemStacksStackRelaxed(stack, remain))
continue;
if (lowestFitting < 0 || stack.getCount() < tile.getRequestedCraftItem(lowestFitting).getCount())
lowestFitting = i;
}
if (lowestFitting >= 0) {
remain = tile.craftItems.insertItem(lowestFitting, remain, false);
if (remain.isEmpty())
return ItemStack.EMPTY;
}
}
while (lowestFitting >= 0);
return ItemHandlerHelper.insertItemStacked(tile.items, remain, false);
}
return item.stack;
}
}