error reporting for unexpected registry misses
This commit is contained in:
@@ -6,9 +6,16 @@ import mods.betterfoliage.client.integration.*
|
|||||||
import mods.betterfoliage.client.render.*
|
import mods.betterfoliage.client.render.*
|
||||||
import mods.betterfoliage.client.texture.*
|
import mods.betterfoliage.client.texture.*
|
||||||
import mods.octarinecore.client.KeyHandler
|
import mods.octarinecore.client.KeyHandler
|
||||||
|
import mods.octarinecore.client.gui.textComponent
|
||||||
import mods.octarinecore.client.resource.CenteringTextureGenerator
|
import mods.octarinecore.client.resource.CenteringTextureGenerator
|
||||||
import mods.octarinecore.client.resource.GeneratorPack
|
import mods.octarinecore.client.resource.GeneratorPack
|
||||||
|
import net.minecraft.block.Block
|
||||||
|
import net.minecraft.block.state.IBlockState
|
||||||
import net.minecraft.client.Minecraft
|
import net.minecraft.client.Minecraft
|
||||||
|
import net.minecraft.util.math.BlockPos
|
||||||
|
import net.minecraft.util.text.TextComponentString
|
||||||
|
import net.minecraft.util.text.TextComponentTranslation
|
||||||
|
import net.minecraft.util.text.TextFormatting
|
||||||
import net.minecraftforge.fml.client.FMLClientHandler
|
import net.minecraftforge.fml.client.FMLClientHandler
|
||||||
import net.minecraftforge.fml.relauncher.Side
|
import net.minecraftforge.fml.relauncher.Side
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly
|
import net.minecraftforge.fml.relauncher.SideOnly
|
||||||
@@ -71,6 +78,8 @@ object Client {
|
|||||||
StandardLogSupport // add _after_ all other log registries
|
StandardLogSupport // add _after_ all other log registries
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val suppressRenderErrors = mutableSetOf<IBlockState>()
|
||||||
|
|
||||||
fun log(level: Level, msg: String) {
|
fun log(level: Level, msg: String) {
|
||||||
BetterFoliageMod.log.log(level, "[BetterFoliage] $msg")
|
BetterFoliageMod.log.log(level, "[BetterFoliage] $msg")
|
||||||
BetterFoliageMod.logDetail.log(level, msg)
|
BetterFoliageMod.logDetail.log(level, msg)
|
||||||
@@ -79,5 +88,19 @@ object Client {
|
|||||||
fun logDetail(msg: String) {
|
fun logDetail(msg: String) {
|
||||||
BetterFoliageMod.logDetail.log(Level.DEBUG, msg)
|
BetterFoliageMod.logDetail.log(Level.DEBUG, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun logRenderError(state: IBlockState, location: BlockPos) {
|
||||||
|
if (state in suppressRenderErrors) return
|
||||||
|
suppressRenderErrors.add(state)
|
||||||
|
|
||||||
|
val blockName = Block.REGISTRY.getNameForObject(state.block).toString()
|
||||||
|
val blockLoc = "${location.x},${location.y},${location.z}"
|
||||||
|
Minecraft.getMinecraft().thePlayer.addChatMessage(TextComponentTranslation(
|
||||||
|
"betterfoliage.rendererror",
|
||||||
|
textComponent(blockName, TextFormatting.GOLD),
|
||||||
|
textComponent(blockLoc, TextFormatting.GOLD)
|
||||||
|
))
|
||||||
|
logDetail("Error rendering block $state at $blockLoc")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mods.betterfoliage.client.render
|
package mods.betterfoliage.client.render
|
||||||
|
|
||||||
|
import mods.betterfoliage.client.Client
|
||||||
import mods.betterfoliage.client.config.Config
|
import mods.betterfoliage.client.config.Config
|
||||||
import mods.betterfoliage.client.integration.OptifineCTM
|
import mods.betterfoliage.client.integration.OptifineCTM
|
||||||
import mods.betterfoliage.client.integration.ShadersModIntegration
|
import mods.betterfoliage.client.integration.ShadersModIntegration
|
||||||
@@ -140,7 +141,11 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl
|
|||||||
override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean {
|
override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean {
|
||||||
if (ctx.isSurroundedBy(surroundPredicate) ) return false
|
if (ctx.isSurroundedBy(surroundPredicate) ) return false
|
||||||
|
|
||||||
val columnTextures = registry[ctx.blockState(Int3.zero)] ?: return false
|
val columnTextures = registry[ctx.blockState(Int3.zero)]
|
||||||
|
if (columnTextures == null) {
|
||||||
|
Client.logRenderError(ctx.blockState(Int3.zero), ctx.pos)
|
||||||
|
return renderWorldBlockBase(ctx, dispatcher, renderer, null)
|
||||||
|
}
|
||||||
|
|
||||||
// get AO data
|
// get AO data
|
||||||
modelRenderer.updateShading(Int3.zero, allFaces)
|
modelRenderer.updateShading(Int3.zero, allFaces)
|
||||||
|
|||||||
@@ -57,7 +57,12 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) {
|
|||||||
val isSnowed = ctx.blockState(up1).isSnow
|
val isSnowed = ctx.blockState(up1).isSnow
|
||||||
val connectedGrass = isConnected && Config.connectedGrass.enabled && (!isSnowed || Config.connectedGrass.snowEnabled)
|
val connectedGrass = isConnected && Config.connectedGrass.enabled && (!isSnowed || Config.connectedGrass.snowEnabled)
|
||||||
|
|
||||||
val grassInfo = GrassRegistry[ctx, UP]!!
|
val grassInfo = GrassRegistry[ctx, UP]
|
||||||
|
if (grassInfo == null) {
|
||||||
|
// shouldn't happen
|
||||||
|
Client.logRenderError(ctx.blockState(Int3.zero), ctx.pos)
|
||||||
|
return renderWorldBlockBase(ctx, dispatcher, renderer, null)
|
||||||
|
}
|
||||||
val blockColor = ctx.blockData(Int3.zero).color
|
val blockColor = ctx.blockData(Int3.zero).color
|
||||||
|
|
||||||
if (connectedGrass) {
|
if (connectedGrass) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mods.betterfoliage.client.render
|
package mods.betterfoliage.client.render
|
||||||
|
|
||||||
import mods.betterfoliage.BetterFoliageMod
|
import mods.betterfoliage.BetterFoliageMod
|
||||||
|
import mods.betterfoliage.client.Client
|
||||||
import mods.betterfoliage.client.config.Config
|
import mods.betterfoliage.client.config.Config
|
||||||
import mods.betterfoliage.client.integration.ShadersModIntegration
|
import mods.betterfoliage.client.integration.ShadersModIntegration
|
||||||
import mods.betterfoliage.client.texture.LeafRegistry
|
import mods.betterfoliage.client.texture.LeafRegistry
|
||||||
@@ -50,7 +51,12 @@ class RenderLeaves : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) {
|
|||||||
val isSnowed = ctx.blockState(up1).material.let {
|
val isSnowed = ctx.blockState(up1).material.let {
|
||||||
it == Material.SNOW || it == Material.CRAFTED_SNOW
|
it == Material.SNOW || it == Material.CRAFTED_SNOW
|
||||||
}
|
}
|
||||||
val leafInfo = LeafRegistry[ctx, DOWN] ?: return false
|
val leafInfo = LeafRegistry[ctx, DOWN]
|
||||||
|
if (leafInfo == null) {
|
||||||
|
// shouldn't happen
|
||||||
|
Client.logRenderError(ctx.blockState(Int3.zero), ctx.pos)
|
||||||
|
return renderWorldBlockBase(ctx, dispatcher, renderer, null)
|
||||||
|
}
|
||||||
val blockColor = ctx.blockData(Int3.zero).color
|
val blockColor = ctx.blockData(Int3.zero).color
|
||||||
|
|
||||||
renderWorldBlockBase(ctx, dispatcher, renderer, null)
|
renderWorldBlockBase(ctx, dispatcher, renderer, null)
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
@file:JvmName("Utils")
|
@file:JvmName("Utils")
|
||||||
package mods.octarinecore.client.gui
|
package mods.octarinecore.client.gui
|
||||||
|
|
||||||
import net.minecraft.util.text.TextFormatting.*
|
import net.minecraft.util.text.Style
|
||||||
|
import net.minecraft.util.text.TextComponentString
|
||||||
|
import net.minecraft.util.text.TextFormatting
|
||||||
|
import net.minecraft.util.text.TextFormatting.AQUA
|
||||||
|
import net.minecraft.util.text.TextFormatting.GRAY
|
||||||
|
|
||||||
fun stripTooltipDefaultText(tooltip: MutableList<String>) {
|
fun stripTooltipDefaultText(tooltip: MutableList<String>) {
|
||||||
var defaultRows = false
|
var defaultRows = false
|
||||||
@@ -11,3 +15,8 @@ fun stripTooltipDefaultText(tooltip: MutableList<String>) {
|
|||||||
if (defaultRows) iter.remove()
|
if (defaultRows) iter.remove()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun textComponent(msg: String, color: TextFormatting = GRAY): TextComponentString {
|
||||||
|
val style = Style().apply { this.color = color }
|
||||||
|
return TextComponentString(msg).apply { this.style = style }
|
||||||
|
}
|
||||||
@@ -22,6 +22,8 @@ betterfoliage.shaderWind.tooltip=Apply wind effects from ShaderMod shaders to th
|
|||||||
betterfoliage.distance=Distance limit
|
betterfoliage.distance=Distance limit
|
||||||
betterfoliage.distance.tooltip=Maximum distance from player at which to render this feature
|
betterfoliage.distance.tooltip=Maximum distance from player at which to render this feature
|
||||||
|
|
||||||
|
betterfoliage.rendererror=§a[BetterFoliage]§f Error rendering block %s at position %s
|
||||||
|
|
||||||
betterfoliage.blocks=Block Types
|
betterfoliage.blocks=Block Types
|
||||||
betterfoliage.blocks.tooltip=Configure lists of block classes that will have specific features applied to them
|
betterfoliage.blocks.tooltip=Configure lists of block classes that will have specific features applied to them
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user