diff --git a/src/main/resources/oc_at.cfg b/src/main/resources/oc_at.cfg new file mode 100644 index 000000000..988fbcc45 --- /dev/null +++ b/src/main/resources/oc_at.cfg @@ -0,0 +1,5 @@ + # OpenComputers access transformer config +public net.minecraft.client.gui.inventory.GuiContainer field_146999_f #xSize +public net.minecraft.client.gui.inventory.GuiContainer field_147000_g #ySize +public net.minecraft.client.gui.inventory.GuiContainer field_147003_i #guiLeft +public net.minecraft.client.gui.inventory.GuiContainer field_147009_r #guiTop \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/nei/GeneralUsageHandler.scala b/src/main/scala/li/cil/oc/integration/nei/GeneralUsageHandler.scala deleted file mode 100644 index bfcf69938..000000000 --- a/src/main/scala/li/cil/oc/integration/nei/GeneralUsageHandler.scala +++ /dev/null @@ -1,28 +0,0 @@ -package li.cil.oc.integration.nei - -import codechicken.nei.recipe.IUsageHandler -import li.cil.oc.Localization -import li.cil.oc.api -import net.minecraft.item.ItemStack - -import scala.collection.convert.WrapAsScala._ - -class GeneralUsageHandler(pages: Option[Array[String]]) extends PagedUsageHandler(pages) { - def this() = this(None) - - override def getRecipeName = "Manual" - - override def getUsageHandler(input: String, ingredients: AnyRef*): IUsageHandler = { - if (input == "item") { - ingredients.collectFirst { - case stack: ItemStack if api.Items.get(stack) != null && Localization.canLocalize(usageKey(stack)) => - val fullDocumentation = wrap(Localization.localizeImmediately(usageKey(stack)).replaceAllLiterally("[nl]", "\n"), 160).mkString("\n") - val pages = fullDocumentation.lines.grouped(12).map(_.mkString("\n")).toArray - new GeneralUsageHandler(Option(pages)) - }.getOrElse(this) - } - else this - } - - private def usageKey(stack: ItemStack) = stack.getUnlocalizedName.stripSuffix(".name").replaceFirst("""\d+$""", "") + ".usage" -} diff --git a/src/main/scala/li/cil/oc/integration/nei/ManualHandler.scala b/src/main/scala/li/cil/oc/integration/nei/ManualHandler.scala new file mode 100644 index 000000000..98b882448 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/nei/ManualHandler.scala @@ -0,0 +1,87 @@ +package li.cil.oc.integration.nei + +import java.util + +import codechicken.lib.gui.GuiDraw +import codechicken.nei.PositionedStack +import codechicken.nei.api.IOverlayHandler +import codechicken.nei.api.IRecipeOverlayRenderer +import codechicken.nei.recipe.GuiRecipe +import codechicken.nei.recipe.IUsageHandler +import li.cil.oc.OpenComputers +import li.cil.oc.api +import li.cil.oc.client.gui +import li.cil.oc.common.GuiType +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiButton +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraft.inventory.Container +import net.minecraft.item.ItemStack + +class ManualHandler(path: Option[String]) extends IUsageHandler { + def this() = this(None) + + var lastMouseX = 0 + var lastMouseY = 0 + val button = new GuiButton(0, 34, 20, 100, 20, "Open Manual") + + override def getRecipeName = "Manual" + + override def getUsageHandler(input: String, ingredients: AnyRef*): IUsageHandler = { + if (input == "item") { + ingredients.collectFirst { + case stack: ItemStack if api.Items.get(stack) != null => new ManualHandler(Option(api.Items.get(stack).name + ".md")) + }.getOrElse(this) + } + else this + } + + override def recipiesPerPage = 1 + + override def numRecipes = 1 + + override def drawForeground(recipe: Int): Unit = Minecraft.getMinecraft.currentScreen match { + case container: GuiContainer => + val pos = GuiDraw.getMousePosition + button.drawButton(Minecraft.getMinecraft, pos.x - container.guiLeft - 5, pos.y - container.guiTop - 16) + case _ => + } + + override def drawBackground(i: Int): Unit = {} + + override def getIngredientStacks(i: Int) = new util.ArrayList[PositionedStack]() + + override def getOtherStacks(i: Int) = new util.ArrayList[PositionedStack]() + + override def getResultStack(i: Int) = null + + override def onUpdate(): Unit = {} + + override def hasOverlay(gui: GuiContainer, container: Container, i: Int): Boolean = false + + override def getOverlayHandler(gui: GuiContainer, i: Int): IOverlayHandler = null + + override def getOverlayRenderer(gui: GuiContainer, i: Int): IRecipeOverlayRenderer = null + + override def handleTooltip(gui: GuiRecipe, tooltip: util.List[String], i: Int): util.List[String] = tooltip + + override def handleItemTooltip(gui: GuiRecipe, stack: ItemStack, tooltip: util.List[String], i: Int): util.List[String] = tooltip + + override def keyTyped(gui: GuiRecipe, char: Char, code: Int, recipe: Int): Boolean = false + + override def mouseClicked(container: GuiRecipe, btn: Int, recipe: Int): Boolean = container match { + case container: GuiContainer => + val pos = GuiDraw.getMousePosition + val mc = Minecraft.getMinecraft + if (button.mousePressed(mc, pos.x - container.guiLeft - 5, pos.y - container.guiTop - 16)) { + mc.thePlayer.openGui(OpenComputers, GuiType.Manual.id, mc.theWorld, 0, 0, 0) + mc.currentScreen match { + case manual: gui.Manual => path.foreach(manual.pushPage) + case _ => + } + true + } + else false + case _ => false + } +} diff --git a/src/main/scala/li/cil/oc/integration/nei/NEIOpenComputersConfig.scala b/src/main/scala/li/cil/oc/integration/nei/NEIOpenComputersConfig.scala index b86c6684e..7e0114e62 100644 --- a/src/main/scala/li/cil/oc/integration/nei/NEIOpenComputersConfig.scala +++ b/src/main/scala/li/cil/oc/integration/nei/NEIOpenComputersConfig.scala @@ -19,7 +19,7 @@ class NEIOpenComputersConfig extends IConfigureNEI { override def loadConfig() { // Non-alphabetic order haunts my OCD, but I want the "Manual" to show up // before the API doc. - API.registerUsageHandler(new GeneralUsageHandler()) + API.registerUsageHandler(new ManualHandler()) API.registerUsageHandler(new CallbackDocHandler()) // Add option to show items' ore dictionary name in tooltips.