2020-04-16 23:40:35 +02:00
|
|
|
package de.ellpeck.prettypipes.pipe.modules.extraction;
|
2020-04-16 04:42:42 +02:00
|
|
|
|
|
|
|
import de.ellpeck.prettypipes.Registry;
|
|
|
|
import de.ellpeck.prettypipes.items.ModuleItem;
|
|
|
|
import de.ellpeck.prettypipes.misc.ItemFilter;
|
|
|
|
import de.ellpeck.prettypipes.pipe.PipeTileEntity;
|
|
|
|
import de.ellpeck.prettypipes.items.IModule;
|
|
|
|
import de.ellpeck.prettypipes.items.ModuleTier;
|
|
|
|
import de.ellpeck.prettypipes.network.PipeNetwork;
|
2020-05-07 15:48:46 +02:00
|
|
|
import de.ellpeck.prettypipes.pipe.containers.AbstractPipeContainer;
|
2020-04-16 04:42:42 +02:00
|
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
|
|
import net.minecraft.entity.player.PlayerInventory;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.util.Direction;
|
|
|
|
import net.minecraftforge.items.IItemHandler;
|
|
|
|
|
|
|
|
public class ExtractionModuleItem extends ModuleItem {
|
|
|
|
|
|
|
|
private final int maxExtraction;
|
|
|
|
private final int speed;
|
2020-04-17 22:29:02 +02:00
|
|
|
private final boolean preventOversending;
|
2020-04-16 04:42:42 +02:00
|
|
|
public final int filterSlots;
|
|
|
|
|
2020-04-16 15:45:11 +02:00
|
|
|
public ExtractionModuleItem(String name, ModuleTier tier) {
|
|
|
|
super(name);
|
2020-04-16 04:42:42 +02:00
|
|
|
this.maxExtraction = tier.forTier(1, 8, 64);
|
|
|
|
this.speed = tier.forTier(20, 15, 10);
|
|
|
|
this.filterSlots = tier.forTier(3, 6, 9);
|
2020-04-17 22:29:02 +02:00
|
|
|
this.preventOversending = tier.forTier(false, false, true);
|
2020-04-16 04:42:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void tick(ItemStack module, PipeTileEntity tile) {
|
|
|
|
if (tile.getWorld().getGameTime() % this.speed != 0)
|
|
|
|
return;
|
2020-05-07 21:10:29 +02:00
|
|
|
if (!tile.canWork())
|
2020-05-03 15:51:16 +02:00
|
|
|
return;
|
2020-04-16 22:25:58 +02:00
|
|
|
ItemFilter filter = new ItemFilter(this.filterSlots, module, tile);
|
2020-04-16 04:42:42 +02:00
|
|
|
|
|
|
|
PipeNetwork network = PipeNetwork.get(tile.getWorld());
|
|
|
|
for (Direction dir : Direction.values()) {
|
2020-10-15 01:19:22 +02:00
|
|
|
IItemHandler handler = tile.getItemHandler(dir);
|
2020-04-16 04:42:42 +02:00
|
|
|
if (handler == null)
|
|
|
|
continue;
|
|
|
|
for (int j = 0; j < handler.getSlots(); j++) {
|
|
|
|
ItemStack stack = handler.extractItem(j, this.maxExtraction, true);
|
|
|
|
if (stack.isEmpty())
|
|
|
|
continue;
|
|
|
|
if (!filter.isAllowed(stack))
|
|
|
|
continue;
|
2020-10-16 22:36:44 +02:00
|
|
|
ItemStack remain = network.routeItem(tile.getPos(), tile.getPos().offset(dir), stack, this.preventOversending);
|
2020-05-17 16:14:27 +02:00
|
|
|
if (remain.getCount() != stack.getCount()) {
|
|
|
|
handler.extractItem(j, stack.getCount() - remain.getCount(), false);
|
2020-04-16 04:42:42 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-17 22:29:02 +02:00
|
|
|
@Override
|
|
|
|
public boolean canNetworkSee(ItemStack module, PipeTileEntity tile) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-04-16 04:42:42 +02:00
|
|
|
@Override
|
|
|
|
public boolean canAcceptItem(ItemStack module, PipeTileEntity tile, ItemStack stack) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isCompatible(ItemStack module, PipeTileEntity tile, IModule other) {
|
|
|
|
return !(other instanceof ExtractionModuleItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean hasContainer(ItemStack module, PipeTileEntity tile) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public AbstractPipeContainer<?> getContainer(ItemStack module, PipeTileEntity tile, int windowId, PlayerInventory inv, PlayerEntity player, int moduleIndex) {
|
|
|
|
return new ExtractionModuleContainer(Registry.extractionModuleContainer, windowId, player, tile.getPos(), moduleIndex);
|
|
|
|
}
|
|
|
|
}
|