Skip to content

Commit 7a46657

Browse files
committedApr 10, 2015
Showing question mark texture when trying to render items/blocks/oredict entries that cannot be resolved instead of an error string, logging error to console. Closes #1053.
Fixed crash caused by invalid `block:` image definitions. Fixed `mods` dir being included in builds... with a part of the RC API... wherever the heck that comes from...

File tree

10 files changed

+38
-13
lines changed

10 files changed

+38
-13
lines changed
 

Diff for: ‎build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ processResources {
211211

212212
jar {
213213
exclude "cofh/**"
214+
exclude "mods/**"
214215
configurations.embedded.each { dep ->
215216
from(project.zipTree(dep)) {
216217
exclude 'META-INF', 'META-INF/**'

Diff for: ‎src/main/resources/assets/opencomputers/doc/en_US/general/example.md

+4
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,7 @@ isn't*.
2727
asdasd ![oh my god, the recursion!](img/example.png) qweqwe
2828

2929
And finally, [this is a link!](https://avatars1.githubusercontent.com/u/514903).
30+
31+
![broken item image](item:this is broken)
32+
![broken item image](block:this is broken)
33+
![broken item image](oredict:this is broken)
Loading

Diff for: ‎src/main/scala/li/cil/oc/client/Textures.scala

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ object Textures {
2727
val guiKeyboardMissing = new ResourceLocation(Settings.resourceDomain, "textures/gui/keyboard_missing.png")
2828
val guiManual = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual.png")
2929
val guiManualTab = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual_tab.png")
30+
val guiManualMissingItem = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual_missing_item.png")
3031
val guiPrinter = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer.png")
3132
val guiPrinterInk = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer_ink.png")
3233
val guiPrinterMaterial = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer_material.png")

Diff for: ‎src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala

+4-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ object Document {
3737

3838
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS)
3939

40-
// Because reasons.
40+
// On some systems/drivers/graphics cards the next calls won't update the
41+
// depth buffer correctly if alpha test is enabled. Guess how we found out?
42+
// By noticing that on those systems it only worked while chat messages
43+
// were visible. Yeah. I know.
Has a conversation. Original line has a conversation.
4144
GL11.glDisable(GL11.GL_ALPHA_TEST)
4245

4346
// Clear depth mask, then create masks in foreground above and below scroll area.
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package li.cil.oc.client.renderer.markdown.segment.render
22

33
import com.google.common.base.Strings
4+
import li.cil.oc.OpenComputers
45
import li.cil.oc.api.manual.ImageProvider
56
import li.cil.oc.api.manual.ImageRenderer
7+
import li.cil.oc.client.Textures
68
import net.minecraft.block.Block
9+
import net.minecraft.item.Item
710
import net.minecraft.item.ItemStack
811

912
object BlockImageProvider extends ImageProvider {
@@ -12,8 +15,10 @@ object BlockImageProvider extends ImageProvider {
1215
val (name, optMeta) = if (splitIndex > 0) data.splitAt(splitIndex) else (data, "")
1316
val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1))
1417
Block.blockRegistry.getObject(name) match {
15-
case block: Block => new ItemStackImageRenderer(Array(new ItemStack(block, 1, meta)))
16-
case _ => null
18+
case block: Block if Item.getItemFromBlock(block) != null => new ItemStackImageRenderer(Array(new ItemStack(block, 1, meta)))
19+
case _ =>
20+
OpenComputers.log.warn(s"Failed looking up block '$data'.")
Has a conversation. Original line has a conversation.
21+
new TextureImageRenderer(Textures.guiManualMissingItem)
1722
}
1823
}
1924
}

Diff for: ‎src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/ItemImageProvider.scala

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package li.cil.oc.client.renderer.markdown.segment.render
22

33
import com.google.common.base.Strings
4+
import li.cil.oc.OpenComputers
45
import li.cil.oc.api.manual.ImageProvider
56
import li.cil.oc.api.manual.ImageRenderer
7+
import li.cil.oc.client.Textures
68
import net.minecraft.item.Item
79
import net.minecraft.item.ItemStack
810

@@ -13,7 +15,9 @@ object ItemImageProvider extends ImageProvider {
1315
val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1))
1416
Item.itemRegistry.getObject(name) match {
1517
case item: Item => new ItemStackImageRenderer(Array(new ItemStack(item, 1, meta)))
16-
case _ => null
18+
case _ =>
19+
OpenComputers.log.warn(s"Failed looking up item '$data'.")
20+
new TextureImageRenderer(Textures.guiManualMissingItem)
1721
}
1822
}
1923
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package li.cil.oc.client.renderer.markdown.segment.render
22

3+
import li.cil.oc.OpenComputers
34
import li.cil.oc.api.manual.ImageProvider
45
import li.cil.oc.api.manual.ImageRenderer
5-
import net.minecraft.item.ItemStack
6+
import li.cil.oc.client.Textures
67
import net.minecraftforge.oredict.OreDictionary
78

89
import scala.collection.convert.WrapAsScala._
910

1011
object OreDictImageProvider extends ImageProvider {
1112
override def getImage(data: String): ImageRenderer = {
12-
val stacks = OreDictionary.getOres(data)
13-
if (stacks != null && stacks.nonEmpty) new ItemStackImageRenderer(stacks.toArray(new Array[ItemStack](stacks.size())))
14-
else null
13+
val stacks = OreDictionary.getOres(data).filter(stack => stack != null && stack.getItem != null)
14+
if (stacks != null && stacks.nonEmpty) new ItemStackImageRenderer(stacks.toArray)
15+
else {
16+
OpenComputers.log.warn(s"Failed looking up OreDictionary entry '$data'.")
17+
new TextureImageRenderer(Textures.guiManualMissingItem)
18+
}
1519
}
1620
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package li.cil.oc.client.renderer.markdown.segment.render
22

3+
import li.cil.oc.Settings
34
import li.cil.oc.api.manual.ImageProvider
45
import li.cil.oc.api.manual.ImageRenderer
6+
import net.minecraft.util.ResourceLocation
57

68
object TextureImageProvider extends ImageProvider {
7-
override def getImage(data: String): ImageRenderer = new TextureImageRenderer(data)
9+
override def getImage(data: String): ImageRenderer = {
10+
val path = if (data.startsWith("/")) data else "doc/" + data
11+
val location = new ResourceLocation(Settings.resourceDomain, path)
12+
new TextureImageRenderer(location)
13+
}
814
}

Diff for: ‎src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/TextureImageRenderer.scala

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package li.cil.oc.client.renderer.markdown.segment.render
33
import java.io.InputStream
44
import javax.imageio.ImageIO
55

6-
import li.cil.oc.Settings
76
import li.cil.oc.api.manual.ImageRenderer
87
import net.minecraft.client.Minecraft
98
import net.minecraft.client.renderer.texture.AbstractTexture
@@ -12,9 +11,7 @@ import net.minecraft.client.resources.IResourceManager
1211
import net.minecraft.util.ResourceLocation
1312
import org.lwjgl.opengl.GL11
1413

15-
class TextureImageRenderer(val url: String) extends ImageRenderer {
16-
private val path = if (url.startsWith("/")) url else "doc/" + url
17-
private val location = new ResourceLocation(Settings.resourceDomain, path)
14+
class TextureImageRenderer(val location: ResourceLocation) extends ImageRenderer {
1815
private val texture = {
1916
val manager = Minecraft.getMinecraft.getTextureManager
2017
manager.getTexture(location) match {

0 commit comments

Comments
 (0)
Please sign in to comment.