package openmods.integration.modules;
import static openmods.integration.Conditions.classExists;
import buildcraft.api.transport.IPipeTile;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import openmods.integration.IntegrationModule;
import openmods.inventory.legacy.CustomSinks;
import openmods.inventory.legacy.CustomSinks.ICustomSink;
import openmods.inventory.legacy.CustomSinks.ICustomSinkProvider;
public class BuildCraftPipes extends IntegrationModule {
public BuildCraftPipes() {
super(classExists("buildcraft.api.transport.IPipeTile"));
}
public interface BuildCraftAccess {
public int tryAcceptIntoPipe(TileEntity possiblePipe, ItemStack nextStack, boolean doInsert, ForgeDirection direction);
public boolean isPipe(TileEntity tile);
}
private static class Dummy implements BuildCraftAccess {
@Override
public int tryAcceptIntoPipe(TileEntity possiblePipe, ItemStack nextStack, boolean doInsert, ForgeDirection direction) {
return 0;
}
@Override
public boolean isPipe(TileEntity tile) {
return false;
}
}
private static class Live implements BuildCraftAccess {
@Override
// left for BC 6
@SuppressWarnings("deprecation")
public int tryAcceptIntoPipe(TileEntity possiblePipe, ItemStack nextStack, boolean doInsert, ForgeDirection direction) {
if (possiblePipe instanceof IPipeTile) return ((IPipeTile)possiblePipe).injectItem(nextStack, doInsert, direction.getOpposite());
return 0;
}
@Override
public boolean isPipe(TileEntity tile) {
return tile instanceof IPipeTile;
}
}
private static BuildCraftAccess access = new Dummy();
public static BuildCraftAccess access() {
return access;
}
@Override
public void load() {
access = new Live();
CustomSinks.registerCustomSink(new ICustomSinkProvider() {
@Override
public CustomSinks.ICustomSink create(final TileEntity te) {
if (!access.isPipe(te)) return null;
return new ICustomSink() {
@Override
public int accept(ItemStack stack, boolean doInsert, ForgeDirection direction) {
return access.tryAcceptIntoPipe(te, stack, doInsert, direction);
}
};
}
});
}
@Override
public String name() {
return "BuildCraft pipes";
}
}