Skip to content

NeoForge support#4134

Merged
Yeregorix merged 24 commits intoapi-12from
api12/neoforge
Oct 4, 2024
Merged

NeoForge support#4134
Yeregorix merged 24 commits intoapi-12from
api12/neoforge

Conversation

@Yeregorix
Copy link
Member

@Yeregorix Yeregorix commented Sep 28, 2024

This PR introduces SpongeNeo a new Sponge implementation for NeoForge, alongside SpongeForge and SpongeVanilla.

this.rootDirectory.resolve(groupPath).resolve(dependency.module).resolve(dependency.version);
Files.createDirectories(depDirectory);
final Path depFile = depDirectory.resolve(dependency.module + "-" + dependency.version + ".jar");
final MessageDigest md5 = MessageDigest.getInstance("MD5");

Check failure

Code scanning / CodeQL

Use of a broken or risky cryptographic algorithm

Cryptographic algorithm [MD5](1) is weak and should not be used.

Copilot Autofix

AI over 1 year ago

To fix the problem, we should replace the use of the MD5 algorithm with a stronger, modern cryptographic hash function. The SHA-256 algorithm is a good choice as it is widely supported and provides a higher level of security.

  • General fix: Replace MessageDigest.getInstance("MD5") with MessageDigest.getInstance("SHA-256").
  • Detailed fix: Update the code in the validate method to use SHA-256 instead of MD5 for computing file hashes.
  • Specific changes: Modify the line where the MessageDigest instance is created and ensure that the rest of the code correctly handles the SHA-256 hash.
Suggested changeset 1
neoforge/src/applaunch/java/org/spongepowered/neoforge/applaunch/loading/moddiscovery/library/LibraryManager.java

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/neoforge/src/applaunch/java/org/spongepowered/neoforge/applaunch/loading/moddiscovery/library/LibraryManager.java b/neoforge/src/applaunch/java/org/spongepowered/neoforge/applaunch/loading/moddiscovery/library/LibraryManager.java
--- a/neoforge/src/applaunch/java/org/spongepowered/neoforge/applaunch/loading/moddiscovery/library/LibraryManager.java
+++ b/neoforge/src/applaunch/java/org/spongepowered/neoforge/applaunch/loading/moddiscovery/library/LibraryManager.java
@@ -117,3 +117,3 @@
                 final Path depFile = depDirectory.resolve(dependency.module + "-" + dependency.version + ".jar");
-                final MessageDigest md5 = MessageDigest.getInstance("MD5");
+                final MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
 
@@ -130,5 +130,5 @@
                     final byte[] bytes = Files.readAllBytes(depFile);
-                    final String fileMd5 = InstallerUtils.toHexString(md5.digest(bytes));
+                    final String fileSha256 = InstallerUtils.toHexString(sha256.digest(bytes));
 
-                    if (dependency.md5.equals(fileMd5)) {
+                    if (dependency.sha256.equals(fileSha256)) {
                         LibraryManager.LOGGER.debug("'{}' verified!", depFile);
@@ -150,3 +150,3 @@
 
-                        InstallerUtils.downloadCheckHash(url, depFile, md5, item.checksum.md5, true);
+                        InstallerUtils.downloadCheckHash(url, depFile, sha256, item.checksum.sha256, true);
                     }
@@ -166,3 +166,3 @@
                     if (checkHashes) {
-                        InstallerUtils.downloadCheckHash(url, depFile, md5, item.checksum.md5, true);
+                        InstallerUtils.downloadCheckHash(url, depFile, sha256, item.checksum.sha256, true);
                     } else {
EOF
@@ -117,3 +117,3 @@
final Path depFile = depDirectory.resolve(dependency.module + "-" + dependency.version + ".jar");
final MessageDigest md5 = MessageDigest.getInstance("MD5");
final MessageDigest sha256 = MessageDigest.getInstance("SHA-256");

@@ -130,5 +130,5 @@
final byte[] bytes = Files.readAllBytes(depFile);
final String fileMd5 = InstallerUtils.toHexString(md5.digest(bytes));
final String fileSha256 = InstallerUtils.toHexString(sha256.digest(bytes));

if (dependency.md5.equals(fileMd5)) {
if (dependency.sha256.equals(fileSha256)) {
LibraryManager.LOGGER.debug("'{}' verified!", depFile);
@@ -150,3 +150,3 @@

InstallerUtils.downloadCheckHash(url, depFile, md5, item.checksum.md5, true);
InstallerUtils.downloadCheckHash(url, depFile, sha256, item.checksum.sha256, true);
}
@@ -166,3 +166,3 @@
if (checkHashes) {
InstallerUtils.downloadCheckHash(url, depFile, md5, item.checksum.md5, true);
InstallerUtils.downloadCheckHash(url, depFile, sha256, item.checksum.sha256, true);
} else {
Copilot is powered by AI and may make mistakes. Always verify output.
This was referenced Sep 28, 2024
@Yeregorix Yeregorix marked this pull request as ready for review October 3, 2024 18:37
@Yeregorix Yeregorix merged commit 6fc3fc1 into api-12 Oct 4, 2024
@Yeregorix Yeregorix deleted the api12/neoforge branch October 4, 2024 11:36
@Dutchiiee
Copy link

I got the feeling there's already alot of progress on this topic, but is there any ETA when the official release will be supporting Neoforge on minecraft 1.21.1?
If so, is there already an way to download and test it?

@Yeregorix
Copy link
Member Author

SpongeNeo is runnable but unstable. I don't have any ETA because it has not been tested enough to quantify the bugs. Feel free to test it but keep in mind that it is not production ready. The more people test it and report issues, the sooner it will be stable.

The Sponge website hasn't been updated yet to show SpongeNeo downloads. However, you can download SpongeNeo via Github actions at https://github.com/SpongePowered/Sponge/actions/workflows/deploy.yaml. Click on the latest run, then scroll down and click on "SpongeNeo Production Jar".

@Dutchiiee
Copy link

You're a life saver! i'll defo try and report any bugs i come across :).
Thanks for your time!

@gabizou
Copy link
Member

gabizou commented Oct 8, 2024

For what it's worth, you can already use SOAD API (Downloads API) to query for SpongeNeo:

Given the curl:

curl --location 'https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/spongeneo/versions'
JSON Response
{
    "artifacts": {
        "1.21.1-21.1.35-12.0.0-RC1818": {
            "tagValues": {
                "minecraft": "1.21.1",
                "neo": "21.1.35",
                "api": "12.0"
            },
            "recommended": false
        },
        "1.21.1-21.1.35-12.0.0-RC1816": {
            "tagValues": {
                "minecraft": "1.21.1",
                "neo": "21.1.35",
                "api": "12.0"
            },
            "recommended": false
        }
    },
    "offset": 0,
    "limit": 25,
    "size": 2
}

And for the latest version available:

curl --location 'https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/spongeneo/latest'
JSON Response
{
    "coordinates": {
        "groupId": "org.spongepowered",
        "artifactId": "spongeneo",
        "version": "1.21.1-21.1.35-12.0.0-RC1818"
    },
    "commit": {
        "commits": [
            {
                "commit": {
                    "message": "Merge remote-tracking branch 'origin/api-11' into api-12",
                    "body": "Merge remote-tracking branch 'origin/api-11' into api-12\n",
                    "sha": "e95b19f401d4ec5c669089fc400fe3f486c3136c",
                    "author": {
                        "name": "aromaa",
                        "email": "me@joniaromaa.fi"
                    },
                    "commiter": {
                        "name": "aromaa",
                        "email": "me@joniaromaa.fi"
                    },
                    "link": "https://github.com/SpongePowered/Sponge/commit/e95b19f401d4ec5c669089fc400fe3f486c3136c",
                    "commitDate": "2024-10-05T21:11:43Z"
                },
                "submoduleCommits": []
            }
        ],
        "processing": true
    },
    "assets": [
        {
            "classifier": "",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818.jar",
            "md5": "748d967e2e7b54172532886eb535af1f",
            "sha1": "f14477b1533d0bc2e60d5194e78f2f5639c56689",
            "extension": "jar"
        },
        {
            "classifier": "",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818.pom",
            "md5": "0fb371f25a71f85423e06816dbdce9b5",
            "sha1": "ecb33fba2eed95a69ee9ebb6a076d6fd950356c7",
            "extension": "pom"
        },
        {
            "classifier": "accessors",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-accessors.jar",
            "md5": "4c11aff3bb5a861cb7cd94882c530752",
            "sha1": "759d4953c5847cb4ed4842d2747d247be3d61e13",
            "extension": "jar"
        },
        {
            "classifier": "accessors-sources",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-accessors-sources.jar",
            "md5": "b1704c7504e966f847c1941b4baa8503",
            "sha1": "cd9b4d846b9bc2a18d44c4eed46b4862bb947d18",
            "extension": "jar"
        },
        {
            "classifier": "applaunch",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-applaunch.jar",
            "md5": "84049ad2a13e3b0565617e986dbd33ad",
            "sha1": "69ed40e96a85f3177c31e55efb281bbf5153ac1d",
            "extension": "jar"
        },
        {
            "classifier": "applaunch-sources",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-applaunch-sources.jar",
            "md5": "b22077a931410ea213672f4e6cee4b35",
            "sha1": "51fbc33531e14aa9ab06ae5414ae41c1cc088ff0",
            "extension": "jar"
        },
        {
            "classifier": "lang",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-lang.jar",
            "md5": "e96f5569d6e13ffe0b15c3bfe4824b52",
            "sha1": "487261b294975025d733ea57f25e24fad6c04188",
            "extension": "jar"
        },
        {
            "classifier": "lang-sources",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-lang-sources.jar",
            "md5": "de4f7b715c9243f29c47bd9188b49611",
            "sha1": "0224b81db011b9c7b66bf03e8a754857ad512c22",
            "extension": "jar"
        },
        {
            "classifier": "launch",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-launch.jar",
            "md5": "7073c6f97d81921dc9139802acf481aa",
            "sha1": "04cde08333079b3f07b6dd06eb89ed3bf5c1fa2b",
            "extension": "jar"
        },
        {
            "classifier": "launch-sources",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-launch-sources.jar",
            "md5": "1d50ede57edbb66dc3290f4267629892",
            "sha1": "d46b0caefbe9db7bc37241582fe8abde476fc185",
            "extension": "jar"
        },
        {
            "classifier": "mixins",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-mixins.jar",
            "md5": "f8b43c11eef1f71b731055aea83f1ada",
            "sha1": "e96b4dcc563b46fe4be28a84da9ff0a77eca143b",
            "extension": "jar"
        },
        {
            "classifier": "mixins-sources",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-mixins-sources.jar",
            "md5": "4fe6bd062a0fc47f490989d7588cfb9e",
            "sha1": "ce77b77d4416e7f1100357f14d1b5b9dd1c80d76",
            "extension": "jar"
        },
        {
            "classifier": "sources",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-sources.jar",
            "md5": "78380a1d444e8cae1a9e3df227f37eeb",
            "sha1": "397ccae5d6d47b24c428ae98547d5afac0291f40",
            "extension": "jar"
        },
        {
            "classifier": "universal",
            "downloadUrl": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeneo/1.21.1-21.1.35-12.0.0-RC1818/spongeneo-1.21.1-21.1.35-12.0.0-RC1818-universal.jar",
            "md5": "250c4863fe554c97d642fde97725ef1c",
            "sha1": "b9b39fd23a010b101106f7aef6aab519c724618d",
            "extension": "jar"
        }
    ],
    "tags": {
        "minecraft": "1.21.1",
        "neo": "21.1.35",
        "api": "12.0"
    },
    "recommended": false
}

We just need to add the tab to our downloads webpage.

@Dutchiiee
Copy link

Honestly, this is super helpful! i am not that tech savy when it comes to github and such.
Thanks again for your time! @gabizou @Yeregorix .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants