diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java new file mode 100644 index 00000000..a74bb94c --- /dev/null +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java @@ -0,0 +1,38 @@ +package li.cil.oc2.common.bus.device.provider.util; + +import li.cil.oc2.api.bus.device.Device; +import li.cil.oc2.api.bus.device.provider.DeviceProvider; +import li.cil.oc2.api.bus.device.provider.DeviceQuery; +import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.LazyOptional; + +public abstract class AbstractItemDeviceProvider implements DeviceProvider { + private final Item item; + + protected AbstractItemDeviceProvider(final Item item) { + this.item = item; + } + + @Override + public LazyOptional getDevice(final DeviceQuery query) { + if (!(query instanceof ItemDeviceQuery)) { + return LazyOptional.empty(); + } + + final ItemDeviceQuery itemDeviceQuery = (ItemDeviceQuery) query; + final ItemStack stack = itemDeviceQuery.getItemStack(); + if (stack.isEmpty()) { + return LazyOptional.empty(); + } + + if (stack.getItem() != item) { + return LazyOptional.empty(); + } + + return getItemDevice(itemDeviceQuery); + } + + protected abstract LazyOptional getItemDevice(final ItemDeviceQuery query); +}