diff --git a/changelog.md b/changelog.md index 974dc824b..959d02686 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,6 @@ ## Fixes/improvements +* [#3533] Added support for observing the contents of fluid container items. * [#3620] Fixed OC 1.8.0+ regression involving API arguments and numbers. * [#3013] Fixed rare server-side deadlock when sending disk activity update packets. @@ -10,4 +11,4 @@ ## List of contributors -asie, ds84182, Possseidon +asie, ds84182, Possseidon, repo-alt diff --git a/src/main/scala/li/cil/oc/integration/vanilla/ConverterFluidContainerItem.scala b/src/main/scala/li/cil/oc/integration/vanilla/ConverterFluidContainerItem.scala new file mode 100644 index 000000000..c8ecba78f --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/vanilla/ConverterFluidContainerItem.scala @@ -0,0 +1,29 @@ +package li.cil.oc.integration.vanilla + +import li.cil.oc.server.driver.Registry +import li.cil.oc.{Settings, api} +import net.minecraft.item.ItemStack +import net.minecraftforge.fluids.IFluidContainerItem + +import java.util +import scala.collection.convert.WrapAsScala._ + +object ConverterFluidContainerItem extends api.driver.Converter { + override def convert(value: scala.Any, output: util.Map[AnyRef, AnyRef]) = + value match { + case stack: ItemStack => stack.getItem match { + case fc: IFluidContainerItem => + output += "capacity" -> Int.box(fc.getCapacity(stack)) + val fluidStack = fc.getFluid(stack) + if (fluidStack != null) { + output += "fluid" -> Registry.convert(Array[AnyRef](fluidStack))(0) + } else { + val fluidMap = new util.HashMap[AnyRef, AnyRef]() + fluidMap += "amount" -> Int.box(0) + output += "fluid" -> fluidMap + } + case _ => + } + case _ => + } +} diff --git a/src/main/scala/li/cil/oc/integration/vanilla/ModVanilla.scala b/src/main/scala/li/cil/oc/integration/vanilla/ModVanilla.scala index 6d93356f8..b30fd18af 100644 --- a/src/main/scala/li/cil/oc/integration/vanilla/ModVanilla.scala +++ b/src/main/scala/li/cil/oc/integration/vanilla/ModVanilla.scala @@ -43,6 +43,7 @@ object ModVanilla extends ModProxy with RedstoneProvider { Driver.add(DriverCommandBlock) } + Driver.add(ConverterFluidContainerItem) Driver.add(ConverterFluidStack) Driver.add(ConverterFluidTankInfo) Driver.add(ConverterItemStack)