Jump to content

Version property isn't expanded in development enviorment (name probably too)

Major Tuvok

Recommended Posts

So, first of all why I need this to be the case (perhaps this can be solved via solving my original Problem):

I wanted to test my mod with an Minecraft server, so I've tried to start MC Server and Client both in my development enviorment (IntellJ). Unfortunatly this results in an invalid session id...


My solution to that was to use an ordinary MC-Forge client and add my mod as a jar to its mod folder. So far I didn't have any Proplems, but as soon as I tried to connect, I got an Mod-rejection error: My versions apperntly aren't the same...


So I looked at both logs and found these strange differences:

Normal Forge Client, Mod linked as jar: version is ok (and as expected)

[main/WARN] [spellcraft/]: Mod spellcraft is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version

Development Forge Server: somehow using unexpanded version ${version}

[Server thread/WARN] [spellcraft]: Mod spellcraft is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version ${version}

Apperently Using a Development Forge Client leads to the same unexpanded version.

Here's the Server side Mod-rejection...

[12:57:41] [User Authenticator #1/INFO]: UUID of player Major_Tuvok is ------------I don't want to show my UUID--------------
[12:57:41] [Netty Server IO #1/INFO] [FML]: Client protocol version 2
[12:57:41] [Netty Server IO #1/INFO] [FML]: Client attempting to join with 8 mods : [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]
[12:57:41] [Netty Server IO #1/INFO] [FML]: Rejecting connection CLIENT: [FMLMod:spellcraft{${version}}]
[12:57:41] [Netty Server IO #1/ERROR] [FML]: Network Disconnect: Mod rejections [FMLMod:spellcraft{${version}}]
[12:57:41] [Server thread/INFO]: Major_Tuvok lost connection: Mod rejections [FMLMod:spellcraft{${version}}]
[12:57:41] [Server thread/INFO]: Major_Tuvok left the game

And my Build.gradle (I already tried to force processrecources task by simply adding it right before it is declared, didn't help):

buildscript {
    repositories {
        maven { url = "http://files.minecraftforge.net/maven" }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'java'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
if (    !project.hasProperty('mod_pgroup') ||
        !project.hasProperty('mod_id') ) {
    throw new Exception("Missing Mod-Properties!");
if (    !project.hasProperty('ver_forge') ||
        !project.hasProperty('ver_mc')) {
    println "missing Minecraft Version!"
if (    !project.hasProperty('ver_mappings') ) {
    println "missing Mappings Version!"
if (    !project.hasProperty('ver_major_mod') ||
        !project.hasProperty('ver_major_api') ||
        !project.hasProperty('ver_minor_api') ||
        (System.getenv('BUILD_NUMBER')==null && !project.hasProperty('ver_build'))) {
    println "missing Project Version!"
} else if (System.getenv('BUILD_NUMBER')==null) {
    println "Cannot access Build Number!"

minecraft {

    version = "1.12.2-"
    if (project.hasProperty('ver_mc') && project.hasProperty('ver_forge')) {
        version = "${ver_mc}-${ver_forge}"
    runDir = "run"

    // the mappings can be changed at any time, and must be in the following format.
    // snapshot_YYYYMMDD   snapshot are built nightly.
    // stable_#            stables are built at the discretion of the MCP team.
    // Use non-default mappings at your own risk. they may not always work.
    // simply re-run your setup task after changing the mappings to update your workspace.
    mappings = "snapshot_20180201"
    if (project.hasProperty('ver_mappings')) {
        mappings = "${ver_mappings}"
    // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.

String getVersion() {
    if (    !project.hasProperty('ver_major_mod') ||
            !project.hasProperty('ver_major_api') ||
            !project.hasProperty('ver_minor_api') ||
            (System.getenv('BUILD_NUMBER')==null && !project.hasProperty('ver_build'))) {
        return "CUSTOM_BUILD";
    String res = "${ver_major_mod}.${ver_major_api}.${ver_minor_api}."
    if (System.getenv('BUIlD_NUMBER')!=null) {
        ver_build = System.getenv('BUIlD_NUMBER')
    } else {
        ver_build = (ver_build.toInteger()+1).toString()
    ver_code = res;
    return res;

version = getVersion()
group="${mod_pgroup}.${mod_id}" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "${mod_id}"

sourceCompatibility = targetCompatibility = "1.8" // Need this here so eclipse task generates correctly.
compileJava {
    sourceCompatibility = targetCompatibility = "1.8"

dependencies {
    // you may put jars on which you depend on in ./libs
    // or you may define them like so..
    //compile "some.group:artifact:version:classifier"
    //compile "some.group:artifact:version"
    // real examples
    //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
    //provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    //compile 'build/libs/Mekanism-1.11.2-'
    // the deobf configurations:  'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
    // except that these dependencies get remapped to your current MCP mappings
    //deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
    //deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // for more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html


processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    // copy everything else except the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'

jar {
    classifier = ''
    from sourceSets.main.output
    from sourceSets.api.output
            "Built-By": System.getProperty('user.name'),
            "Created-By": "${System.getProperty('java.vm.version')} + (${System.getProperty('java.vm.vendor')})",
            "Implementation-Title": project.name,
            "Implementation-Version": project.version,
            "Built-On": "${ver_mc}-${ver_forge}"

Before anyone asks: I know that the toInteger Method doesn't increment the version saved in gradle.properties... I'm going to change that after this issue has been solved.

And my gradle.properties:

# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.


Any help would be greatly appreciated... :(

Link to comment
Share on other sites

Yes, this is how build scripts work. They don't replace things in the original source so that it doesn't pollute your code.

To solve your original issue, either login to a valid account on the client. GradleStart supports --username and --password.

Or just edit your dev server's settings.properites to turn offline mode on...

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

thanke you, using an acceptable Username works. although I seem to be doing sth. wrong when setting online mode to false because I'm unable to connect if that's the case... (I didn't look into that yet-I'm not used to working with mc server configs...)  :)

I've created a very dirty workaround (it bypasses to some extend the standard processResources) which provides me with correct versions in dev enviorment.

def modinfoFile = 'src/main/resources/mcmod.info'
def tempDir = 'build/tmp/modifiedSources'
def classesDir = 'classes/production/Spellcraft_-_MC_14.23.2.2611_main'
def buildDir = 'build/resources/main'
def versionFileName = 'mcmod.info'
def tempFile = tempDir+'/'+versionFileName

compileJava.doFirst {
    copy {
    ant.replace(file: tempFile, token: '${version}', value: project.version)
    ant.replace(file: tempFile, token: '${mcversion}', value: project.minecraft.version)

compileJava.doLast {
    copy {
    copy {

Using my dirty workaround along with a correct username and


in the server.properties file works as well as setting it to false (whilst using that workaround, I didn't try without it)... (It seems like it does... I apperntly have some kind of Packet registration Problem(I seem to accidentally try to load WorldClient on the Server?!?) which I simply workaround by disabling any serverside registration at the moment, so that I can't completly connect without the game crashing)


Again: Thank you :)

This topic can be closed now (If I find how to do that myself, I'll close it myself)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...

Important Information

By using this site, you agree to our Terms of Use.