From e44b65b9867e4f873008eebbbf5f82838ef44c4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 8 Apr 2015 13:56:48 +0200 Subject: [PATCH] Open page of clicked blocks. Redirects, e.g. for blocks with tiers. --- .../assets/opencomputers/doc/index.md | 2 +- .../assets/opencomputers/doc/redirect1.md | 1 + .../assets/opencomputers/doc/redirect2.md | 1 + .../assets/opencomputers/doc/screen1.md | 4 +++ .../assets/opencomputers/doc/screen2.md | 1 + .../assets/opencomputers/doc/screen3.md | 1 + .../scala/li/cil/oc/client/gui/Manual.scala | 9 +++++-- .../scala/li/cil/oc/common/item/Manual.scala | 27 ++++++++++++++++++- .../scala/li/cil/oc/util/PseudoMarkdown.scala | 1 - 9 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/doc/redirect1.md create mode 100644 src/main/resources/assets/opencomputers/doc/redirect2.md create mode 100644 src/main/resources/assets/opencomputers/doc/screen1.md create mode 100644 src/main/resources/assets/opencomputers/doc/screen2.md create mode 100644 src/main/resources/assets/opencomputers/doc/screen3.md diff --git a/src/main/resources/assets/opencomputers/doc/index.md b/src/main/resources/assets/opencomputers/doc/index.md index a8dcdeb6d..1512bb225 100644 --- a/src/main/resources/assets/opencomputers/doc/index.md +++ b/src/main/resources/assets/opencomputers/doc/index.md @@ -1,4 +1,4 @@ -# Headline with more lines [with link](huehue) and *some* more +# Headline with more lines [with link](redirect1.md) and *some* more This is some test text for the subset of Markdown supported by the planned ingame documentation system for OpenComputers. ![This is a tooltip...](../../textures/gui/printer_ink.png) diff --git a/src/main/resources/assets/opencomputers/doc/redirect1.md b/src/main/resources/assets/opencomputers/doc/redirect1.md new file mode 100644 index 000000000..7fe274324 --- /dev/null +++ b/src/main/resources/assets/opencomputers/doc/redirect1.md @@ -0,0 +1 @@ +#redirect redirect2.md \ No newline at end of file diff --git a/src/main/resources/assets/opencomputers/doc/redirect2.md b/src/main/resources/assets/opencomputers/doc/redirect2.md new file mode 100644 index 000000000..8686dfde9 --- /dev/null +++ b/src/main/resources/assets/opencomputers/doc/redirect2.md @@ -0,0 +1 @@ +#REDIRECT redirect1.md \ No newline at end of file diff --git a/src/main/resources/assets/opencomputers/doc/screen1.md b/src/main/resources/assets/opencomputers/doc/screen1.md new file mode 100644 index 000000000..0bf683abf --- /dev/null +++ b/src/main/resources/assets/opencomputers/doc/screen1.md @@ -0,0 +1,4 @@ +# Screen +![Screen](oredict:oc:screen1) + +Screens! Magic! Stuff. \ No newline at end of file diff --git a/src/main/resources/assets/opencomputers/doc/screen2.md b/src/main/resources/assets/opencomputers/doc/screen2.md new file mode 100644 index 000000000..9a0e09ec3 --- /dev/null +++ b/src/main/resources/assets/opencomputers/doc/screen2.md @@ -0,0 +1 @@ +#REDIRECT screen1.md \ No newline at end of file diff --git a/src/main/resources/assets/opencomputers/doc/screen3.md b/src/main/resources/assets/opencomputers/doc/screen3.md new file mode 100644 index 000000000..9a0e09ec3 --- /dev/null +++ b/src/main/resources/assets/opencomputers/doc/screen3.md @@ -0,0 +1 @@ +#REDIRECT screen1.md \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/client/gui/Manual.scala b/src/main/scala/li/cil/oc/client/gui/Manual.scala index bfb8b03ca..4cc20ecae 100644 --- a/src/main/scala/li/cil/oc/client/gui/Manual.scala +++ b/src/main/scala/li/cil/oc/client/gui/Manual.scala @@ -38,7 +38,8 @@ class Manual extends GuiScreen { protected var scrollButton: ImageButton = _ - def loadPage(path: String): Iterator[String] = { + def loadPage(path: String, seen: List[String] = List.empty): Iterator[String] = { + if (seen.contains(path)) return Iterator("Redirection loop: ") ++ seen.iterator ++ Iterator(path) val location = new ResourceLocation(Settings.resourceDomain, if (path.startsWith("/")) path else "doc/" + path) var is: InputStream = null try { @@ -46,7 +47,11 @@ class Manual extends GuiScreen { is = resource.getInputStream // Force resolving immediately via toArray, otherwise we return a read // iterator on a closed input stream (because of the finally). - Source.fromInputStream(is)(Charsets.UTF_8).getLines().toArray.iterator + val lines = Source.fromInputStream(is)(Charsets.UTF_8).getLines().toArray + lines.headOption match { + case Some(line) if line.toLowerCase.startsWith("#redirect ") => loadPage(line.substring("#redirect ".length), seen :+ path) + case _ => lines.iterator + } } catch { case t: Throwable => diff --git a/src/main/scala/li/cil/oc/common/item/Manual.scala b/src/main/scala/li/cil/oc/common/item/Manual.scala index 5d68e219f..cf4fbf913 100644 --- a/src/main/scala/li/cil/oc/common/item/Manual.scala +++ b/src/main/scala/li/cil/oc/common/item/Manual.scala @@ -1,14 +1,39 @@ package li.cil.oc.common.item import li.cil.oc.OpenComputers +import li.cil.oc.api +import li.cil.oc.client.gui import li.cil.oc.common.GuiType +import li.cil.oc.common.block.SimpleBlock +import li.cil.oc.util.BlockPosition +import li.cil.oc.util.ExtendedWorld._ +import net.minecraft.client.Minecraft import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.world.World class Manual(val parent: Delegator) extends Delegate { override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer): ItemStack = { - player.openGui(OpenComputers, GuiType.Manual.id, world, 0, 0, 0) + if (world.isRemote) { + player.openGui(OpenComputers, GuiType.Manual.id, world, 0, 0, 0) + } super.onItemRightClick(stack, world, player) } + + override def onItemUse(stack: ItemStack, player: EntityPlayer, position: BlockPosition, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = { + val world = player.getEntityWorld + world.getBlock(position) match { + case block: SimpleBlock => + if (world.isRemote) { + player.openGui(OpenComputers, GuiType.Manual.id, world, 0, 0, 0) + Minecraft.getMinecraft.currentScreen match { + case manual: gui.Manual => + manual.pushPage(api.Items.get(new ItemStack(block)).name + ".md") + case _ => + } + } + true + case _ => super.onItemUse(stack, player, position, side, hitX, hitY, hitZ) + } + } } diff --git a/src/main/scala/li/cil/oc/util/PseudoMarkdown.scala b/src/main/scala/li/cil/oc/util/PseudoMarkdown.scala index 49cca629b..d99113176 100644 --- a/src/main/scala/li/cil/oc/util/PseudoMarkdown.scala +++ b/src/main/scala/li/cil/oc/util/PseudoMarkdown.scala @@ -27,7 +27,6 @@ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable import scala.util.matching.Regex - /** * Primitive Markdown parser, only supports a very small subset. Used for * parsing documentation into segments, to be displayed in a GUI somewhere.