public static ModelBlockDefinition getModelBlockDefinition(ResourceLocation location) { try { ResourceLocation resourcelocation = getBlockstateLocation(location); return blockDefinitions.computeIfAbsent(resourcelocation, k -> loadMultipartMBD(location, resourcelocation)); } catch (Exception exception) { Log.error("Failed to getModelBlockDefinition", exception); } return new ModelBlockDefinition(new ArrayList<>()); }
private ModelBlockDefinition loadModelBlockDefinition(ResourceLocation location, IResource resource) { ModelBlockDefinition definition; try (InputStream is = resource.getInputStream()) { definition = ModelBlockDefinition.parseFromReader(new InputStreamReader(is, StandardCharsets.UTF_8), location); } catch (Exception exception) { throw new RuntimeException("Encountered an exception when loading model definition of '" + location + "' from: '" + resource.getResourceLocation() + "' in resourcepack: '" + resource.getResourcePackName() + "'", exception); } return definition; }
@Override public IModel loadModel(ResourceLocation modelLocation) throws Exception { ModelResourceLocation variant = (ModelResourceLocation) modelLocation; ModelBlockDefinition definition = getModelBlockDefinition(variant); if (definition.hasVariant(variant.getVariant())) { return new WeightedRandomModel(definition.getVariant(variant.getVariant())); } else { if (definition.hasMultipartData()) { Block block = ModelLocationInformation.getBlockFromBlockstateLocation(new ResourceLocation(variant.getNamespace(), variant.getPath())); if (block != null) { definition.getMultipartData().setStateContainer(block.getBlockState()); } } return new MultipartModel(new ResourceLocation(variant.getNamespace(), variant.getPath()), definition.getMultipartData()); } }
@Override public IModel loadModel(ResourceLocation modelLocation) throws Exception { ModelResourceLocation variant = (ModelResourceLocation) modelLocation; ModelBlockDefinition definition = ModelUtil.getModelBlockDefinition(variant); try { VariantList variants = definition.getVariant(variant.getVariant()); return new SimpleModel(variant, variants); } catch (MissingVariantException e) { if (definition.hasMultipartData()) { return new MultipartModel(new ResourceLocation(variant.getNamespace(), variant.getPath()), definition.getMultipartData()); } throw e; } } }
private static ModelBlockDefinition loadMultipartMBD(ResourceLocation location, ResourceLocation fileIn) { List<ModelBlockDefinition> list = Lists.newArrayList(); Minecraft mc = Minecraft.getMinecraft(); IResourceManager manager = mc.getResourceManager(); try { for (IResource resource : manager.getAllResources(fileIn)) { list.add(loadModelBlockDefinition(location, resource)); } } catch (IOException e) { throw new RuntimeException("Encountered an exception when loading model definition of model " + fileIn, e); } return new ModelBlockDefinition(list); }
private static ModelBlockDefinition loadModelBlockDefinition(ResourceLocation location, IResource resource) { InputStream inputStream = null; ModelBlockDefinition definition; try { inputStream = resource.getInputStream(); definition = ModelBlockDefinition.parseFromReader(new InputStreamReader(inputStream, Charsets.UTF_8), location); } catch (Exception exception) { throw new RuntimeException("Encountered an exception when loading model definition of \'" + location + "\' from: \'" + resource.getResourceLocation() + "\' in resourcepack: \'" + resource.getResourcePackName() + "\'", exception); } finally { IOUtils.closeQuietly(inputStream); } return definition; } }
private ModelBlockDefinition loadModelBlockDefinition(ResourceLocation location) { ResourceLocation blockstateLocation = new ResourceLocation(location.getNamespace(), "blockstates/" + location.getPath() + ".json"); List<ModelBlockDefinition> list = Lists.newArrayList(); try { for (IResource resource : Minecraft.getMinecraft().getResourceManager().getAllResources(blockstateLocation)) { list.add(loadModelBlockDefinition(location, resource)); } } catch (IOException e) { throw new RuntimeException("Encountered an exception when loading model definition of model " + blockstateLocation, e); } return new ModelBlockDefinition(list); }