- 7,099
- 324
- 1,510
Допустим, у мя в ассетах лежит json модель, которая не принадлежит ни одному предмету/блоку.
Хочу получить BakedModel для нее.
На 1.12.2 решается довольно просто, вызовом ванильного лоадера моделей
Однако на 1.18 лоадеры не занимаются чтением из ресурсов и десериализацией, они требуют в аргументах
Так как получить модель?
Хочу получить BakedModel для нее.
На 1.12.2 решается довольно просто, вызовом ванильного лоадера моделей
Scala:
val loadModel: ResourceLocation => IModel = {
val VanillaLoaderClass = classOf[net.minecraftforge.client.model.ModelLoader].getDeclaredClasses.filter(cl => cl.getSimpleName == "VanillaLoader").head
val instanceField = VanillaLoaderClass.getDeclaredField("INSTANCE")
instanceField.setAccessible(true)
val instance = instanceField.get(null)
val loadModel = VanillaLoaderClass.getDeclaredMethod("loadModel", classOf[ResourceLocation])
loadModel.setAccessible(true)
loadModel.invoke(instance, _).asInstanceOf[IModel]
}
def bakeModel(model: IModel): IBakedModel = model.bake(model.getDefaultState, DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter())
Однако на 1.18 лоадеры не занимаются чтением из ресурсов и десериализацией, они требуют в аргументах
JsonDeserializationContext
Так как получить модель?
Java:
public static void loadModel(ResourceLocation location) {
ModelLoaderRegistry.VanillaProxy.Loader instance1 = ModelLoaderRegistry.VanillaProxy.Loader.INSTANCE;
try (
Resource resource = Minecraft.getInstance().getResourceManager().getResource(location);
InputStreamReader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)
) {
String content = CharStreams.toString(reader);
JsonObject jsonObject = new Gson().fromJson(content, JsonObject.class);
ModelLoaderRegistry.VanillaProxy modelProxy = ModelLoaderRegistry.VanillaProxy.Loader.INSTANCE.read(
???,
jsonObject
);
return modelProxy.bake(???);
} catch (IOException e) {
e.printStackTrace();
}
}