{"record":{"id":"7de636f6669f28ae","repo":"Anuken/Mindustry","slug":"unit-stances-must-be-strings","errorCode":null,"errorMessage":"Unit stances must be strings.","messagePattern":"Unit stances must be strings\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/src/mindustry/mod/ContentParser.java","lineNumber":176,"sourceCode":"               if(cmd != null){\n                   return cmd;\n               }else{\n                   throw new IllegalArgumentException(\"Unknown unit command name: \" + data.asString());\n               }\n            }else{\n                throw new IllegalArgumentException(\"Unit commands must be strings.\");\n            }\n        });\n        put(UnitStance.class, (type, data) -> {\n            if(data.isString()){\n                var cmd = content.unitStance(data.asString());\n                if(cmd != null){\n                    return cmd;\n                }else{\n                    throw new IllegalArgumentException(\"Unknown unit stance name: \" + data.asString());\n                }\n            }else{\n                throw new IllegalArgumentException(\"Unit stances must be strings.\");\n            }\n        });\n        put(BulletType.class, (type, data) -> {\n            if(data.isString()){\n                return field(Bullets.class, data);\n            }else if(data.isArray()){\n                return new MultiBulletType(parser.readValue(BulletType[].class, data));\n            }\n            Class<?> alternate = resolve(Strings.capitalize(data.getString(\"type\", \"basic\")) + \"BulletType\", Object.class, false);\n            Class<?> bc = alternate == Object.class ? resolve(data.getString(\"type\", \"\"), BasicBulletType.class) : alternate;\n            data.remove(\"type\");\n            BulletType result = (BulletType)make(bc);\n            result.minfo.mod = currentMod;\n            readFields(result, data);\n            return result;\n        });\n        put(MassDriverBolt.class, (type, data) -> {\n            MassDriverBolt result = make(MassDriverBolt.class);","sourceCodeStart":158,"sourceCodeEnd":194,"githubUrl":"https://github.com/Anuken/Mindustry/blob/f695ad7e60323ebced984fa26d0bcf0bc54296b4/core/src/mindustry/mod/ContentParser.java#L158-L194","documentation":"Thrown by the UnitStance parser when data is not a string. Stances resolve only by name, so object/number/array values are rejected before any lookup.","triggerScenarios":"A mod JSON supplies a unit stance field as a non-string JSON value.","commonSituations":"Missing quotes around the stance name, or attempting object-style configuration not supported for stances.","solutions":["Provide the stance as a quoted string.","Use a registered stance name."],"exampleFix":"// before\n\"stance\": { \"name\": \"stop\" }\n// after\n\"stance\": \"stop\"","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// Guard: unit stance value must be a JSON string.\nboolean isStanceRef(JsonValue v) { return v.isString(); }","tryCatchPattern":null,"preventionTips":["Always quote stance name strings.","Avoid object syntax for stance references.","Lint JSON value types in mod files."],"tags":["modding","json","content-parser","unit-stance"],"backgroundTag":null,"analyzedSha":"f695ad7e60323ebced984fa26d0bcf0bc54296b4","analyzedAt":"2026-08-14T04:31:16.262Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}