2022-11-09 23:58:56 +00:00
|
|
|
/*
|
|
|
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
|
|
|
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
|
|
|
* Send enquiries to dratcliffe@gmail.com
|
|
|
|
*/
|
|
|
|
package dan200.computercraft.impl;
|
|
|
|
|
|
|
|
import com.google.auto.service.AutoService;
|
|
|
|
import dan200.computercraft.api.ComputerCraftAPI;
|
|
|
|
import dan200.computercraft.api.detail.DetailRegistry;
|
2022-12-03 15:02:00 +00:00
|
|
|
import dan200.computercraft.api.network.wired.WiredElement;
|
2022-11-09 23:58:56 +00:00
|
|
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
|
|
|
import dan200.computercraft.impl.detail.DetailRegistryImpl;
|
|
|
|
import dan200.computercraft.shared.details.FluidData;
|
|
|
|
import dan200.computercraft.shared.peripheral.generic.GenericPeripheralProvider;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
|
|
import net.minecraft.core.Direction;
|
|
|
|
import net.minecraft.world.level.BlockGetter;
|
|
|
|
import net.minecraftforge.common.capabilities.Capability;
|
|
|
|
import net.minecraftforge.common.util.LazyOptional;
|
|
|
|
import net.minecraftforge.fluids.FluidStack;
|
|
|
|
import net.minecraftforge.fml.ModList;
|
|
|
|
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
|
|
|
|
import static dan200.computercraft.shared.Capabilities.CAPABILITY_WIRED_ELEMENT;
|
|
|
|
|
|
|
|
@AutoService(ComputerCraftAPIService.class)
|
|
|
|
public final class ComputerCraftAPIImpl extends AbstractComputerCraftAPI implements ComputerCraftAPIForgeService {
|
|
|
|
private final DetailRegistry<FluidStack> fluidStackDetails = new DetailRegistryImpl<>(FluidData::fillBasic);
|
|
|
|
|
|
|
|
private @Nullable String version;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getInstalledVersion() {
|
|
|
|
if (version != null) return version;
|
|
|
|
return version = ModList.get().getModContainerById(ComputerCraftAPI.MOD_ID)
|
|
|
|
.map(x -> x.getModInfo().getVersion().toString())
|
|
|
|
.orElse("unknown");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void registerPeripheralProvider(IPeripheralProvider provider) {
|
|
|
|
Peripherals.register(provider);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void registerGenericCapability(Capability<?> capability) {
|
|
|
|
GenericPeripheralProvider.addCapability(capability);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2022-12-03 15:02:00 +00:00
|
|
|
public LazyOptional<WiredElement> getWiredElementAt(BlockGetter world, BlockPos pos, Direction side) {
|
2022-11-09 23:58:56 +00:00
|
|
|
var tile = world.getBlockEntity(pos);
|
|
|
|
return tile == null ? LazyOptional.empty() : tile.getCapability(CAPABILITY_WIRED_ELEMENT, side);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public DetailRegistry<FluidStack> getFluidStackDetailRegistry() {
|
|
|
|
return fluidStackDetails;
|
|
|
|
}
|
|
|
|
}
|