diff --git a/build.properties b/build.properties index 916d328..206b437 100644 --- a/build.properties +++ b/build.properties @@ -1,4 +1,4 @@ -bdlib.version=1.9.0 +bdlib.version=1.9.1 curseforge.id=70496 minecraft.version=1.7.10 diff --git a/src/net/bdew/lib/BdLib.scala b/src/net/bdew/lib/BdLib.scala index 6794880..a1ac943 100644 --- a/src/net/bdew/lib/BdLib.scala +++ b/src/net/bdew/lib/BdLib.scala @@ -13,6 +13,7 @@ import cpw.mods.fml.common.Mod.EventHandler import cpw.mods.fml.common.event.{FMLPreInitializationEvent, FMLServerStartingEvent, FMLServerStoppingEvent} import cpw.mods.fml.common.{FMLCommonHandler, Mod} import net.bdew.lib.multiblock.network.NetHandler +import net.bdew.lib.tooltip.TooltipHandler import net.minecraft.command.CommandHandler import org.apache.logging.log4j.Logger @@ -37,6 +38,9 @@ object BdLib { log.debug("List of loaded APIs: " + ApiReporter.APIs) FMLCommonHandler.instance().registerCrashCallable(ApiReporter) NetHandler.init() + if (ev.getSide.isClient) { + TooltipHandler.init() + } } @EventHandler diff --git a/src/net/bdew/lib/tooltip/FluidTooltipProvider.scala b/src/net/bdew/lib/tooltip/FluidTooltipProvider.scala new file mode 100644 index 0000000..b78264d --- /dev/null +++ b/src/net/bdew/lib/tooltip/FluidTooltipProvider.scala @@ -0,0 +1,30 @@ +/* + * Copyright (c) bdew, 2013 - 2015 + * https://github.com/bdew/bdlib + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://bdew.net/minecraft-mod-public-license/ + */ + +package net.bdew.lib.tooltip + +import net.minecraft.item.ItemStack +import net.minecraftforge.fluids.{FluidContainerRegistry, FluidStack, IFluidContainerItem} + +trait FluidTooltipProvider extends TooltipProvider { + def getFluid(is: ItemStack): Option[FluidStack] = { + if (is.getItem.isInstanceOf[IFluidContainerItem]) { + Option(is.getItem.asInstanceOf[IFluidContainerItem].getFluid(is)) + } else { + Option(FluidContainerRegistry.getFluidForFilledItem(is)) + } + } + + override def shouldHandleTooltip(stack: ItemStack): Boolean = getFluid(stack) exists shouldHandleTooltip + override def handleTooltip(stack: ItemStack, advanced: Boolean, shift: Boolean): Iterable[String] = + getFluid(stack) map (f => handleTooltip(f, advanced, shift)) getOrElse Iterable.empty + + def shouldHandleTooltip(fluid: FluidStack): Boolean + def handleTooltip(fluid: FluidStack, advanced: Boolean, shift: Boolean): Iterable[String] +} diff --git a/src/net/bdew/lib/tooltip/TooltipHandler.scala b/src/net/bdew/lib/tooltip/TooltipHandler.scala new file mode 100644 index 0000000..acf86c4 --- /dev/null +++ b/src/net/bdew/lib/tooltip/TooltipHandler.scala @@ -0,0 +1,47 @@ +/* + * Copyright (c) bdew, 2013 - 2015 + * https://github.com/bdew/bdlib + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://bdew.net/minecraft-mod-public-license/ + */ + +package net.bdew.lib.tooltip + +import cpw.mods.fml.common.eventhandler.SubscribeEvent +import net.bdew.lib.{BdLib, Client} +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.event.entity.player.ItemTooltipEvent + +object TooltipHandler { + var registry = List.empty[TooltipProvider] + + def init() { + MinecraftForge.EVENT_BUS.register(this) + } + + def register(p: TooltipProvider) = registry :+= p + + @SubscribeEvent + def handleTooltipEvent(ev: ItemTooltipEvent): Unit = { + if (ev.itemStack == null || ev.itemStack.getItem == null) return + + val toAdd = for (provider <- registry) yield { + try { + if (provider.shouldHandleTooltip(ev.itemStack)) + Some(provider.handleTooltip(ev.itemStack, ev.showAdvancedItemTooltips, Client.shiftDown)) + else + None + } catch { + case t: Throwable => + BdLib.logErrorException("Error in tooltip provider %s", t, provider) + None + } + } + + import scala.collection.JavaConversions._ + + ev.toolTip ++= toAdd.flatten.flatten + } +} diff --git a/src/net/bdew/lib/tooltip/TooltipProvider.scala b/src/net/bdew/lib/tooltip/TooltipProvider.scala new file mode 100644 index 0000000..39e8c96 --- /dev/null +++ b/src/net/bdew/lib/tooltip/TooltipProvider.scala @@ -0,0 +1,18 @@ +/* + * Copyright (c) bdew, 2013 - 2015 + * https://github.com/bdew/bdlib + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://bdew.net/minecraft-mod-public-license/ + */ + +package net.bdew.lib.tooltip + +import net.minecraft.item.ItemStack + +trait TooltipProvider { + def shouldHandleTooltip(stack: ItemStack): Boolean + def handleTooltip(stack: ItemStack, advanced: Boolean, shift: Boolean): Iterable[String] +} +