Skip to content

Commit 716a785

Browse files
authored
Regression in IntelliJ preview icon loading (#846)
1 parent 6b4d9c0 commit 716a785

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

intellij-plugin/src/main/kotlin/me/devnatan/inventoryframework/intellij/ItemIconProvider.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,14 @@ object ItemIconProvider {
7777

7878
private fun loadIcon(name: String): BufferedImage? {
7979
val jar = clientJar() ?: return null
80-
val elements = resolveElements(jar, name)
80+
val resolved = resolveElements(jar, name)
81+
val elements = resolved?.first
8182
if (elements != null) {
82-
renderElements(jar, elements.first, elements.second)?.let { return it }
83+
renderElements(jar, elements, resolved.second)?.let { return it }
8384
}
8485

8586
val direct = readEntry(jar, "$TEXTURE_ROOT/item/$name.png") ?: readEntry(jar, "$TEXTURE_ROOT/block/$name.png")
86-
val fromModel = elements?.second?.let { pickTexture(jar, it, FLAT_TEXTURE_KEYS) }
87+
val fromModel = resolved?.second?.let { pickTexture(jar, it, FLAT_TEXTURE_KEYS) }
8788
return (direct ?: fromModel)?.let(::normalize)
8889
}
8990

@@ -94,10 +95,13 @@ object ItemIconProvider {
9495
// then walks "parent" upward, merging each level's "textures" (a child's own values win) until
9596
// a model with "elements" is found. Stops there rather than continuing further up, since every
9697
// vanilla model that defines shape also defines (or inherits from what's already been merged)
97-
// concrete texture values for it. Returns null if the chain ends without ever finding elements
98-
// (flat items like tools/food terminate at item/generated, which has neither) - the merged
99-
// texture map is still returned in that case, letting the caller fall back to a flat texture.
100-
private fun resolveElements(jar: ZipFile, name: String): Pair<List<ModelElement>, Map<String, String>>? {
98+
// concrete texture values for it. The merged texture map is always returned alongside whatever
99+
// elements were found (possibly null, e.g. flat items like tools/food that terminate at
100+
// item/generated, which has neither) - callers fall back to it for a flat texture. This matters
101+
// even for a flat item whose own layer0 texture isn't named after the material itself (e.g. a
102+
// stained glass pane's flat icon reuses its stained-glass block's texture) - only this merged
103+
// map, not a guess based on the material's own name, can recover the right texture path there.
104+
private fun resolveElements(jar: ZipFile, name: String): Pair<List<ModelElement>?, Map<String, String>>? {
101105
var path: String? = findLeafModelPath(jar, name) ?: return null
102106
val textureLayers = mutableListOf<Map<String, String>>()
103107
var elements: List<ModelElement>? = null
@@ -116,7 +120,7 @@ object ItemIconProvider {
116120

117121
val merged = mutableMapOf<String, String>()
118122
for (layer in textureLayers.asReversed()) merged.putAll(layer)
119-
return elements?.let { it to merged }
123+
return elements to merged
120124
}
121125

122126
// A material's displayed model isn't always reachable by guessing "models/item/<name>.json"

0 commit comments

Comments
 (0)