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...
This commit is contained in:
Florian Nücke 2015-04-10 19:48:46 +02:00
parent e91f6671c4
commit 7a46657835
10 changed files with 38 additions and 13 deletions

View File

@ -211,6 +211,7 @@ processResources {
jar { jar {
exclude "cofh/**" exclude "cofh/**"
exclude "mods/**"
configurations.embedded.each { dep -> configurations.embedded.each { dep ->
from(project.zipTree(dep)) { from(project.zipTree(dep)) {
exclude 'META-INF', 'META-INF/**' exclude 'META-INF', 'META-INF/**'

View File

@ -27,3 +27,7 @@ isn't*.
asdasd ![oh my god, the recursion!](img/example.png) qweqwe asdasd ![oh my god, the recursion!](img/example.png) qweqwe
And finally, [this is a link!](https://avatars1.githubusercontent.com/u/514903). And finally, [this is a link!](https://avatars1.githubusercontent.com/u/514903).
![broken item image](item:this is broken)
![broken item image](block:this is broken)
![broken item image](oredict:this is broken)

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

View File

@ -27,6 +27,7 @@ object Textures {
val guiKeyboardMissing = new ResourceLocation(Settings.resourceDomain, "textures/gui/keyboard_missing.png") val guiKeyboardMissing = new ResourceLocation(Settings.resourceDomain, "textures/gui/keyboard_missing.png")
val guiManual = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual.png") val guiManual = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual.png")
val guiManualTab = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual_tab.png") val guiManualTab = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual_tab.png")
val guiManualMissingItem = new ResourceLocation(Settings.resourceDomain, "textures/gui/manual_missing_item.png")
val guiPrinter = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer.png") val guiPrinter = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer.png")
val guiPrinterInk = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer_ink.png") val guiPrinterInk = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer_ink.png")
val guiPrinterMaterial = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer_material.png") val guiPrinterMaterial = new ResourceLocation(Settings.resourceDomain, "textures/gui/printer_material.png")

View File

@ -37,7 +37,10 @@ object Document {
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS)
// Because reasons. // On some systems/drivers/graphics cards the next calls won't update the
// depth buffer correctly if alpha test is enabled. Guess how we found out?
// By noticing that on those systems it only worked while chat messages
// were visible. Yeah. I know.
GL11.glDisable(GL11.GL_ALPHA_TEST) GL11.glDisable(GL11.GL_ALPHA_TEST)
// Clear depth mask, then create masks in foreground above and below scroll area. // Clear depth mask, then create masks in foreground above and below scroll area.

View File

@ -1,9 +1,12 @@
package li.cil.oc.client.renderer.markdown.segment.render package li.cil.oc.client.renderer.markdown.segment.render
import com.google.common.base.Strings import com.google.common.base.Strings
import li.cil.oc.OpenComputers
import li.cil.oc.api.manual.ImageProvider import li.cil.oc.api.manual.ImageProvider
import li.cil.oc.api.manual.ImageRenderer import li.cil.oc.api.manual.ImageRenderer
import li.cil.oc.client.Textures
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.item.Item
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
object BlockImageProvider extends ImageProvider { object BlockImageProvider extends ImageProvider {
@ -12,8 +15,10 @@ object BlockImageProvider extends ImageProvider {
val (name, optMeta) = if (splitIndex > 0) data.splitAt(splitIndex) else (data, "") val (name, optMeta) = if (splitIndex > 0) data.splitAt(splitIndex) else (data, "")
val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1)) val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1))
Block.blockRegistry.getObject(name) match { Block.blockRegistry.getObject(name) match {
case block: Block => new ItemStackImageRenderer(Array(new ItemStack(block, 1, meta))) case block: Block if Item.getItemFromBlock(block) != null => new ItemStackImageRenderer(Array(new ItemStack(block, 1, meta)))
case _ => null case _ =>
OpenComputers.log.warn(s"Failed looking up block '$data'.")
new TextureImageRenderer(Textures.guiManualMissingItem)
} }
} }
} }

View File

@ -1,8 +1,10 @@
package li.cil.oc.client.renderer.markdown.segment.render package li.cil.oc.client.renderer.markdown.segment.render
import com.google.common.base.Strings import com.google.common.base.Strings
import li.cil.oc.OpenComputers
import li.cil.oc.api.manual.ImageProvider import li.cil.oc.api.manual.ImageProvider
import li.cil.oc.api.manual.ImageRenderer import li.cil.oc.api.manual.ImageRenderer
import li.cil.oc.client.Textures
import net.minecraft.item.Item import net.minecraft.item.Item
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
@ -13,7 +15,9 @@ object ItemImageProvider extends ImageProvider {
val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1)) val meta = if (Strings.isNullOrEmpty(optMeta)) 0 else Integer.parseInt(optMeta.drop(1))
Item.itemRegistry.getObject(name) match { Item.itemRegistry.getObject(name) match {
case item: Item => new ItemStackImageRenderer(Array(new ItemStack(item, 1, meta))) case item: Item => new ItemStackImageRenderer(Array(new ItemStack(item, 1, meta)))
case _ => null case _ =>
OpenComputers.log.warn(s"Failed looking up item '$data'.")
new TextureImageRenderer(Textures.guiManualMissingItem)
} }
} }
} }

View File

@ -1,16 +1,20 @@
package li.cil.oc.client.renderer.markdown.segment.render package li.cil.oc.client.renderer.markdown.segment.render
import li.cil.oc.OpenComputers
import li.cil.oc.api.manual.ImageProvider import li.cil.oc.api.manual.ImageProvider
import li.cil.oc.api.manual.ImageRenderer import li.cil.oc.api.manual.ImageRenderer
import net.minecraft.item.ItemStack import li.cil.oc.client.Textures
import net.minecraftforge.oredict.OreDictionary import net.minecraftforge.oredict.OreDictionary
import scala.collection.convert.WrapAsScala._ import scala.collection.convert.WrapAsScala._
object OreDictImageProvider extends ImageProvider { object OreDictImageProvider extends ImageProvider {
override def getImage(data: String): ImageRenderer = { override def getImage(data: String): ImageRenderer = {
val stacks = OreDictionary.getOres(data) val stacks = OreDictionary.getOres(data).filter(stack => stack != null && stack.getItem != null)
if (stacks != null && stacks.nonEmpty) new ItemStackImageRenderer(stacks.toArray(new Array[ItemStack](stacks.size()))) if (stacks != null && stacks.nonEmpty) new ItemStackImageRenderer(stacks.toArray)
else null else {
OpenComputers.log.warn(s"Failed looking up OreDictionary entry '$data'.")
new TextureImageRenderer(Textures.guiManualMissingItem)
}
} }
} }

View File

@ -1,8 +1,14 @@
package li.cil.oc.client.renderer.markdown.segment.render package li.cil.oc.client.renderer.markdown.segment.render
import li.cil.oc.Settings
import li.cil.oc.api.manual.ImageProvider import li.cil.oc.api.manual.ImageProvider
import li.cil.oc.api.manual.ImageRenderer import li.cil.oc.api.manual.ImageRenderer
import net.minecraft.util.ResourceLocation
object TextureImageProvider extends ImageProvider { object TextureImageProvider extends ImageProvider {
override def getImage(data: String): ImageRenderer = new TextureImageRenderer(data) override def getImage(data: String): ImageRenderer = {
val path = if (data.startsWith("/")) data else "doc/" + data
val location = new ResourceLocation(Settings.resourceDomain, path)
new TextureImageRenderer(location)
}
} }

View File

@ -3,7 +3,6 @@ package li.cil.oc.client.renderer.markdown.segment.render
import java.io.InputStream import java.io.InputStream
import javax.imageio.ImageIO import javax.imageio.ImageIO
import li.cil.oc.Settings
import li.cil.oc.api.manual.ImageRenderer import li.cil.oc.api.manual.ImageRenderer
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.client.renderer.texture.AbstractTexture import net.minecraft.client.renderer.texture.AbstractTexture
@ -12,9 +11,7 @@ import net.minecraft.client.resources.IResourceManager
import net.minecraft.util.ResourceLocation import net.minecraft.util.ResourceLocation
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
class TextureImageRenderer(val url: String) extends ImageRenderer { class TextureImageRenderer(val location: ResourceLocation) extends ImageRenderer {
private val path = if (url.startsWith("/")) url else "doc/" + url
private val location = new ResourceLocation(Settings.resourceDomain, path)
private val texture = { private val texture = {
val manager = Minecraft.getMinecraft.getTextureManager val manager = Minecraft.getMinecraft.getTextureManager
manager.getTexture(location) match { manager.getTexture(location) match {