From 20c74e75923fbbb90b1b53e543e8b4e2c1ed29da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 15 Dec 2020 04:24:14 +0100 Subject: [PATCH] Base class for item driver providers. --- .../util/AbstractItemDeviceProvider.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java 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); +}