diff --git a/jme3-core/src/plugins/java/com/jme3/material/plugins/ShaderNodeLoaderDelegate.java b/jme3-core/src/plugins/java/com/jme3/material/plugins/ShaderNodeLoaderDelegate.java index dba4f6389..6fcdf2eda 100644 --- a/jme3-core/src/plugins/java/com/jme3/material/plugins/ShaderNodeLoaderDelegate.java +++ b/jme3-core/src/plugins/java/com/jme3/material/plugins/ShaderNodeLoaderDelegate.java @@ -232,40 +232,52 @@ public class ShaderNodeLoaderDelegate { protected void readShaderNodeDefinition(List statements, ShaderNodeDefinitionKey key) throws IOException { boolean isLoadDoc = key instanceof ShaderNodeDefinitionKey && ((ShaderNodeDefinitionKey) key).isLoadDocumentation(); for (Statement statement : statements) { - String[] split = statement.getLine().split("[ \\{]"); - String line = statement.getLine(); - - if (line.startsWith("Type")) { - String type = line.substring(line.lastIndexOf(':') + 1).trim(); - shaderNodeDefinition.setType(Shader.ShaderType.valueOf(type)); - } else if (line.startsWith("Shader ")) { - readShaderStatement(statement); - shaderNodeDefinition.getShadersLanguage().add(shaderLanguage); - shaderNodeDefinition.getShadersPath().add(shaderName); - } else if (line.startsWith("Documentation")) { - if (isLoadDoc) { - String doc = ""; + try { + String[] split = statement.getLine().split("[ \\{]"); + String line = statement.getLine(); + + if (line.startsWith("Type")) { + String type = line.substring(line.lastIndexOf(':') + 1).trim(); + shaderNodeDefinition.setType(Shader.ShaderType.valueOf(type)); + } else if (line.startsWith("Shader ")) { + readShaderStatement(statement); + shaderNodeDefinition.getShadersLanguage().add(shaderLanguage); + shaderNodeDefinition.getShadersPath().add(shaderName); + } else if (line.startsWith("Documentation")) { + if (isLoadDoc) { + String doc = ""; + for (Statement statement1 : statement.getContents()) { + doc += "\n" + statement1.getLine(); + } + shaderNodeDefinition.setDocumentation(doc); + } + } else if (line.startsWith("Input")) { + varNames = ""; for (Statement statement1 : statement.getContents()) { - doc += "\n" + statement1.getLine(); + try { + shaderNodeDefinition.getInputs().add(readVariable(statement1)); + } catch (RuntimeException e) { + throw new MatParseException(e.getMessage(), statement1, e); + } } - shaderNodeDefinition.setDocumentation(doc); - } - } else if (line.startsWith("Input")) { - varNames = ""; - for (Statement statement1 : statement.getContents()) { - shaderNodeDefinition.getInputs().add(readVariable(statement1)); - } - } else if (line.startsWith("Output")) { - varNames = ""; - for (Statement statement1 : statement.getContents()) { - if(statement1.getLine().trim().equals("None")){ - shaderNodeDefinition.setNoOutput(true); - }else{ - shaderNodeDefinition.getOutputs().add(readVariable(statement1)); + } else if (line.startsWith("Output")) { + varNames = ""; + for (Statement statement1 : statement.getContents()) { + try { + if (statement1.getLine().trim().equals("None")) { + shaderNodeDefinition.setNoOutput(true); + } else { + shaderNodeDefinition.getOutputs().add(readVariable(statement1)); + } + } catch (RuntimeException e) { + throw new MatParseException(e.getMessage(), statement1, e); + } } + } else { + throw new MatParseException("one of Type, Shader, Documentation, Input, Output", split[0], statement); } - } else { - throw new MatParseException("one of Type, Shader, Documentation, Input, Output", split[0], statement); + } catch (RuntimeException e) { + throw new MatParseException(e.getMessage(), statement, e); } } } @@ -280,6 +292,9 @@ public class ShaderNodeLoaderDelegate { protected ShaderNodeVariable readVariable(Statement statement) throws IOException { String line = statement.getLine().trim().replaceAll("\\s*\\[", "["); String[] splitVar = line.split("\\s"); + if (splitVar.length != 2) { + throw new MatParseException("2 arguments", splitVar.length + "", statement); + } String varName = splitVar[1]; String varType = splitVar[0]; String multiplicity = null;