From f5cbf48dfafd8e0fa7f9eeacdf96b732d09cec6d Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Sat, 21 Dec 2019 15:09:51 +0100 Subject: [PATCH] Try to cope with other mods wrapping IModel instances in a generic way --- .../kotlin/mods/octarinecore/client/resource/Utils.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/mods/octarinecore/client/resource/Utils.kt b/src/main/kotlin/mods/octarinecore/client/resource/Utils.kt index a07a290..7844037 100644 --- a/src/main/kotlin/mods/octarinecore/client/resource/Utils.kt +++ b/src/main/kotlin/mods/octarinecore/client/resource/Utils.kt @@ -4,6 +4,7 @@ package mods.octarinecore.client.resource import mods.betterfoliage.loader.Refs import mods.octarinecore.PI2 import mods.octarinecore.client.render.HSB +import mods.octarinecore.metaprog.reflectField import mods.octarinecore.stripStart import mods.octarinecore.tryDefault import net.minecraft.client.Minecraft @@ -108,11 +109,13 @@ val IModel.modelBlockAndLoc: List> get() { else if (Refs.WeightedRandomModel.isInstance(this)) Refs.models_WRM.get(this)?.let { return (it as List).flatMap(IModel::modelBlockAndLoc) } - else if (Refs.MultiModel.isInstance(this)) Refs.base_MM.get(this)?.let { - return (it as IModel).modelBlockAndLoc - } else if (Refs.MultipartModel.isInstance(this)) Refs.partModels_MPM.get(this)?.let { return (it as Map).flatMap { it.value.modelBlockAndLoc } + } else { + this::class.java.declaredFields.find { it.type.isInstance(IModel::class.java) }?.let { modelField -> + modelField.isAccessible = true + return (modelField.get(this) as IModel).modelBlockAndLoc + } } return listOf() }