mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 11:15:12 -04:00
Fix potential crashes from bad block/item definitions for images. Fix wrapped whitespace not being trimmed.
This commit is contained in:
parent
89818f676a
commit
296cc461bb
@ -0,0 +1,5 @@
|
||||
# Drone
|
||||
|
||||

|
||||
|
||||
Drones are built using a [drone case](droneCase1.md) in the [assembler](assembler.md). They are entity-based [robots](robot.md), a little cheaper but with more limited functionality.
|
@ -0,0 +1,7 @@
|
||||
# Robot
|
||||
|
||||

|
||||
|
||||
Unlike computers, robots can move around and interact with the world much like a player can. They can *not* interact with external components, however! If you need to communicate with a computer or other robots, use a [wireless network card](wlanCard.md), or create some low-level protocol using redstone signals via a [redstone card](redstoneCard1.md), for example.
|
||||
|
||||
Robots are built by placing a [computer case](case1.md) in an [assembler](assembler.md).
|
@ -0,0 +1,9 @@
|
||||
# Tablet
|
||||
|
||||

|
||||
|
||||
Tablets are built by placing a [tablet case](tabletCase1.md) into an [assembler](assembler.md), configuring as desired and assembling it. Tablets act as portable computers that cannot directly interact with the world - for example, basic [redstone cards](redstoneCard1.md) do not work in them. A number of upgrades, however, do, such as the [sign upgrade](signUpgrade.md) or the [piston upgrade](pistonUpgrade.md).
|
||||
|
||||
To force rebooting a tablet, shift-rightclick it while holding it in your hand. Unlike computers, tablets do not persist across the player holding it leaving and re-entering the game. They also do not persist across the player holding the tablet changing dimensions (e.g. going to the Nether or back).
|
||||
|
||||
Tablets can be put into a [charger](charger.md) to refill their energy, and to access the first [hard disk](hdd1.md) built into the tablet from a [computer](case1.md) connected to the charger - in this setup, the charger will act similar to a [disk drive](diskDrive.md), with the tablet being the [floppy disk](floppy.md). This can be very useful in case you forgot to install an OS on the hard drive built into the tablet, or after bricking a tablet's OS.
|
@ -175,10 +175,11 @@ object PseudoMarkdown {
|
||||
override def height(indent: Int, maxWidth: Int, renderer: FontRenderer): Int = {
|
||||
var lines = 0
|
||||
var chars = text
|
||||
if (indent == 0) chars = chars.dropWhile(_.isWhitespace)
|
||||
var lineChars = maxChars(chars, maxWidth - indent, renderer)
|
||||
while (chars.length > lineChars) {
|
||||
lines += 1
|
||||
chars = chars.drop(lineChars)
|
||||
chars = chars.drop(lineChars).dropWhile(_.isWhitespace)
|
||||
lineChars = maxChars(chars, maxWidth, renderer)
|
||||
}
|
||||
(lines * lineHeight(renderer) * resolvedScale).toInt
|
||||
@ -187,9 +188,10 @@ object PseudoMarkdown {
|
||||
override def width(indent: Int, maxWidth: Int, renderer: FontRenderer): Int = {
|
||||
var currentX = indent
|
||||
var chars = text
|
||||
if (indent == 0) chars = chars.dropWhile(_.isWhitespace)
|
||||
var lineChars = maxChars(chars, maxWidth - indent, renderer)
|
||||
while (chars.length > lineChars) {
|
||||
chars = chars.drop(lineChars)
|
||||
chars = chars.drop(lineChars).dropWhile(_.isWhitespace)
|
||||
lineChars = maxChars(chars, maxWidth, renderer)
|
||||
currentX = 0
|
||||
}
|
||||
@ -201,6 +203,7 @@ object PseudoMarkdown {
|
||||
var currentX = x + indent
|
||||
var currentY = y
|
||||
var chars = text
|
||||
if (indent == 0) chars = chars.dropWhile(_.isWhitespace)
|
||||
var numChars = maxChars(chars, maxWidth - indent, renderer)
|
||||
val interactive = findInteractive()
|
||||
var hovered: Option[InteractiveSegment] = None
|
||||
@ -215,7 +218,7 @@ object PseudoMarkdown {
|
||||
GL11.glPopMatrix()
|
||||
currentX = x
|
||||
currentY += (lineHeight(renderer) * fontScale).toInt
|
||||
chars = chars.drop(numChars)
|
||||
chars = chars.drop(numChars).dropWhile(_.isWhitespace)
|
||||
numChars = maxChars(chars, maxWidth, renderer)
|
||||
}
|
||||
|
||||
@ -489,7 +492,8 @@ object PseudoMarkdown {
|
||||
val href = m.group(2)
|
||||
if (href.startsWith("item:")) {
|
||||
val desc = href.stripPrefix("item:")
|
||||
val (name, optMeta) = desc.splitAt(desc.lastIndexOf('@'))
|
||||
val splitIndex = desc.lastIndexOf('@')
|
||||
val (name, optMeta) = if (splitIndex > 0) desc.splitAt(splitIndex) else (desc, "")
|
||||
val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1))
|
||||
Item.itemRegistry.getObject(name) match {
|
||||
case item: Item => new ItemStackSegment(s, m.group(1), Array(new ItemStack(item, 1, meta)))
|
||||
@ -498,10 +502,11 @@ object PseudoMarkdown {
|
||||
}
|
||||
else if (href.startsWith("block:")) {
|
||||
val desc = href.stripPrefix("block:")
|
||||
val (name, optMeta) = desc.splitAt(desc.lastIndexOf('@'))
|
||||
val splitIndex = desc.lastIndexOf('@')
|
||||
val (name, optMeta) = if (splitIndex > 0) desc.splitAt(splitIndex) else (desc, "")
|
||||
val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1))
|
||||
Block.blockRegistry.getObject(name) match {
|
||||
case block: Block => new ItemStackSegment(s, m.group(1), Array(new ItemStack(block, 1, meta)))
|
||||
case block: Block if Item.getItemFromBlock(block) != null => new ItemStackSegment(s, m.group(1), Array(new ItemStack(block, 1, meta)))
|
||||
case _ => new TextSegment(s, "Failed resolving " + href)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user