Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
fc8081b
Update zh_cn.json
zyf722 May 21, 2025
b9896a9
Init Sinytra docs
Skidamek May 24, 2025
6b635a1
Improve README clarity and detail for AutoModpack connection and upda…
Skidamek May 24, 2025
1c80249
Update link to certificate faq
Skidamek May 24, 2025
2a40931
Fix link in readme
Skidamek May 24, 2025
30beb0c
Enhance the docs a lot
Skidamek May 24, 2025
ec8ce80
Fix quick start link
Skidamek May 24, 2025
e33c047
Fix quick start link
Skidamek May 24, 2025
747789f
Append host port when configured.
Skidamek May 25, 2025
fcbf8bc
Improve `updateIpsOnEveryStart` setting
Skidamek May 25, 2025
b5a4f98
Update documentation for clarity and consistency, add compatibility page
Skidamek May 25, 2025
4076a18
Clarify README instructions and update documentation links
Skidamek May 25, 2025
1dae48c
Update quick-start.mdx
Skidamek May 26, 2025
ed7cd02
Update certificate.mdx
Skidamek May 26, 2025
b504501
Update certificate.mdx
Skidamek May 26, 2025
026f557
Lowercase address by default
Skidamek May 26, 2025
9945d76
Update bug_report.yml
Skidamek May 26, 2025
4eeeaee
Update CI configuration to use windows-latest for testing
Skidamek Jun 3, 2025
aaeef18
Add clickable certificate fingerprint to modpack hosting status
Skidamek Jun 3, 2025
f2e9ec1
Add clickable certificate fingerprint to modpack hosting status
Skidamek Jun 3, 2025
1b60c80
Enhance certificate fingerprint display with hover text and improved …
Skidamek Jun 3, 2025
966ca10
Separate fingerprint command and add an `amp` shortcut to the root `a…
Skidamek Jun 4, 2025
14780f1
Update mods.mdx to add Cesium incompatibility note
Skidamek Jun 4, 2025
76c5bb3
Create subdirectories for mods, config, shaderpacks, and resourcepack…
Skidamek Jun 4, 2025
96fd7bf
Add instructions for retrieving certificate fingerprint and introduce…
Skidamek Jun 4, 2025
0b26d2d
Fix formatting path edge cases
Skidamek Jun 5, 2025
fe41d95
Don't serialize nulls to save a bit space in jsons because why not
Skidamek Jun 5, 2025
9ccb46f
Ignore null or blank rules in rules to not crash the server with `nul…
Skidamek Jun 5, 2025
fc7ddfe
Update changelog summary to reflect total files added and removed ins…
Skidamek Jun 5, 2025
1223f9e
Refactor file path formatting to use substring instead of replace for…
Skidamek Jun 5, 2025
c72a246
Refactor download percentage calculation to handle zero values and im…
Skidamek Jun 5, 2025
e11fa8a
Improve server config and allow TLS separation for reverse proxies (#…
Skidamek Jun 5, 2025
20e02f2
Update fr_fr.json (#390)
justeyanis Jun 6, 2025
77484d0
Add translated Polish welcome message to the documentation
Skidamek Jun 6, 2025
70aede5
Fix address binding logic to handle cases with unassigned ports
Skidamek Jun 6, 2025
4678aeb
Refactor SpeedMeter to calculate average download speed over the last…
Skidamek Jun 6, 2025
6136590
Fix fingerprint command
Skidamek Jun 6, 2025
c0fa917
Remove `Files` text from the summary
Skidamek Jun 6, 2025
869081f
Bump versions to beta 36
Skidamek Jun 6, 2025
a5dc901
Fix 1.21.5 commands compile
Skidamek Jun 6, 2025
0c6bb8d
Add Java toolchain configuration for version 17
Skidamek Jun 7, 2025
a982665
Update httpclient5 dependency to version 5.5
Skidamek Jun 7, 2025
7a9a215
Add Java toolchain configuration for version 17 and 21 everywhere
Skidamek Jun 7, 2025
2026967
Update to stonecutter 0.7-alpha.21
Skidamek Jun 7, 2025
873a1e9
Enhance documentation for certificate verification and add donation link
Skidamek Jun 7, 2025
79db008
Update stonecutter to 0.7-alpha.22
Skidamek Jun 9, 2025
0d2ff71
Don't require loopback address for `disableInternalTLS`
Skidamek Jun 11, 2025
ff440bc
Remove `localAddressToSend` since it seems not very useful
Skidamek Jun 11, 2025
7366e3f
Refine description for `acceptedLoaders` in server configuration docu…
Skidamek Jun 11, 2025
c75d360
Don't send minecraft server port by default, let clients use the port…
Skidamek Jun 11, 2025
98cfc7e
1.21.6
Skidamek Jun 18, 2025
68aef8e
whoopsie forgot to change the text color there
Skidamek Jun 18, 2025
ebe360b
Ditch the arch loom (#394)
Skidamek Jun 24, 2025
295f765
bump to beta 38
Skidamek Jun 24, 2025
2614739
prevent downgrades to lower versions than 4.0.0-beta38
Skidamek Jun 24, 2025
a0d4995
update fabric-api
Skidamek Jun 24, 2025
520ef39
run tests just on windows
Skidamek Jun 24, 2025
07ee8e2
idk
Skidamek Jun 24, 2025
89c06fa
refactor: improve downgrade prevention logic in SelfUpdater
Skidamek Jun 24, 2025
6aa15d3
1000 because why not
Skidamek Jun 25, 2025
2126b02
update merge log message and remove vcsVersion
Skidamek Jun 25, 2025
4c8033c
handle mixins and refmaps correctly on legacy forge
Skidamek Jun 25, 2025
de318f6
fix icon path for neo/forge
Skidamek Jun 25, 2025
a0969e3
remove unused stuff
Skidamek Jun 25, 2025
cb7af34
change inject point in MinecraftServerMixin to fix legacy forge
Skidamek Jun 25, 2025
b349181
neo/forge: just specify different icon path instead or processResources
Skidamek Jun 25, 2025
eca02b0
add `forceCopyFilesToStandardLocation`
Skidamek Jun 25, 2025
27ffc87
enhance logging for version checks and update validation in Handshake…
Skidamek Jun 25, 2025
dc06f3e
improve downgrade handling in AutoModpack validation to enhance secur…
Skidamek Jun 25, 2025
5ef1051
Add french docs translation
Skidamek Jun 25, 2025
f50aaad
change id to comply with github action restrictions
Skidamek Jun 25, 2025
df44545
aaAAaaAAaAaAaaaaaaaaAa forgor
Skidamek Jun 25, 2025
a7dd481
try this
Skidamek Jun 25, 2025
d87f15b
and here
Skidamek Jun 25, 2025
c3e489b
i hate ci/cd
Skidamek Jun 25, 2025
ae1624e
WildCards: add error handling for file traversal to skip problematic …
Skidamek Jun 26, 2025
aaf68cc
Improve NetUtils.loadCertificate() method
gesterom Jul 18, 2025
51ab95e
change ID from hyphen to underscore
Skidamek Jul 18, 2025
7a78567
Update stonecutter, fabric loom and neoforge moddev
Skidamek Jul 18, 2025
8e4b353
fix 1.21.4 mussictrackermixin
Skidamek Jul 18, 2025
08cd856
Add NotSslRecordException handling to ErrorPrinter and update pipelin…
Skidamek Jul 20, 2025
b5331b7
Rename error-printer handlers to avoid conflicts in ProtocolServerHan…
Skidamek Jul 20, 2025
9de73d9
Refactor isPlayerAuthorized to use server thread
Skidamek Jul 20, 2025
35a98c3
Make sound instance source MUSIC instead of MASTER
Skidamek Jul 22, 2025
cfeffee
Fix typos in AutoModpack references in HandshakeS2CPacket and SelfUpd…
Skidamek Jul 25, 2025
2942104
update to latest beta
suerion Jul 27, 2025
308fbed
Merge pull request #12 from Skidamek/main
suerion Jul 27, 2025
5cffc6d
Merge branch 'patch-1' into main
suerion Jul 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ body:
Please send the corresponding Minecraft log from the `logs` folder here.
Please upload the log file as an attachment, or upload the log to [mclo.gs](https://mclo.gs/) and paste the url here - mclo.gs sanitizes sensitive information such as ip addresses.
Please refrain from pasting the entire log file directly.
Leave empty if there is none.
placeholder: https://mclo.gs/
- type: input
id: versions
Expand Down Expand Up @@ -93,5 +92,5 @@ body:
required: true
- label: I have provided all the necessary information to reproduce the issue.
required: true
- label: I have verified that the issue does not occur without the AutoModpack - Ignore you are reporting a mod conflict issue.
- label: I have verified that the issue does not occur without the AutoModpack - Ignore if you are reporting a mod conflict issue.
required: false
55 changes: 2 additions & 53 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@ on:
type: string
required: false
default: ''
# # [FEATURE] MIXIN_AUDITOR
# mixin_audit:
# description: run mixin audit for Minecraft server after build
# type: boolean
# required: false
# default: false

jobs:
build:
Expand Down Expand Up @@ -48,8 +42,7 @@ jobs:
if [ -z "${{ inputs.target_subproject }}" ]; then
echo "Building all subprojects"
./gradlew clean
./gradlew chiseledBuild -x mergeJars
./gradlew mergeJars
./gradlew build
else
args=$(echo "${{ inputs.target_subproject }}" | tr ',' '\n' | sed 's/$/:build/' | paste -sd ' ')
echo "Building with arguments=$args"
Expand All @@ -59,52 +52,8 @@ jobs:
BUILD_ID: ${{ github.run_number }}
BUILD_RELEASE: ${{ inputs.release }}

# # [FEATURE] MIXIN_AUDITOR
# - name: Run mixin audit check for Minecraft server
# if: ${{ inputs.mixin_audit }}
# timeout-minutes: 10
# run: |
# mkdir -p ./run
# echo eula=true > ./run/eula.txt
# ./gradlew runServerMixinAudit

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: merged

# # [FEATURE] FALLENS_MAVEN
# - name: Publish with gradle
# if: inputs.release || github.ref == 'refs/heads/dev'
# run: |
# if [ -z "${{ inputs.target_subproject }}" ]; then
# echo "Publishing all subprojects"
# ./gradlew publish
# else
# args=$(echo "${{ inputs.target_subproject }}" | tr ',' '\n' | sed 's/$/:publish/' | paste -sd ' ')
# echo "Publishing with arguments=$args"
# ./gradlew $args
# fi
# env:
# BUILD_RELEASE: ${{ inputs.release }}
# FALLENS_MAVEN_TOKEN: ${{ secrets.FALLENS_MAVEN_TOKEN }}

# summary:
# runs-on: ubuntu-22.04
# needs:
# - build
#
# steps:
# - uses: actions/checkout@v4
#
# - name: Download build artifacts
# uses: actions/download-artifact@v4
# with:
# name: build-artifacts
# path: build-artifacts
#
# - name: Make build summary
# run: python3 .github/workflows/scripts/summary.py # ubuntu-22.04 uses Python 3.10.6
# env:
# TARGET_SUBPROJECT: ${{ inputs.target_subproject }}
path: merged
7 changes: 2 additions & 5 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
name: Dev Builds

on: [workflow_dispatch, pull_request, push]
on: [workflow_dispatch, push]

jobs:
tests: # runs on linux and windows
uses: ./.github/workflows/tests.yml
secrets: inherit
build: # runs on linux
uses: ./.github/workflows/build.yml
secrets: inherit
# # [FEATURE] MIXIN_AUDITOR
# with:
# mixin_audit: true
secrets: inherit
18 changes: 9 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,25 +103,25 @@ jobs:
fi

- name: Read common properties
id: properties_common
id: properties_c
uses: christian-draeger/read-properties@1.1.1
with:
path: gradle.properties
properties: 'mod_name mod_version'

- name: Read version-specific properties
id: properties_versioned
id: properties_v
uses: christian-draeger/read-properties@1.1.1
with:
path: ${{ format('versions/{0}/gradle.properties', matrix.subproject) }}
properties: 'minecraft_version game_versions'
properties: 'publish_versions'

- name: Fix game version
id: game_versions
id: publish_versions
run: |
# Fixed \n in game_versions isn't parsed by christian-draeger/read-properties as a line separator
# Fixed \n in publish_versions isn't parsed by christian-draeger/read-properties as a line separator
echo 'value<<EOF' >> $GITHUB_OUTPUT
echo -e "${{ steps.properties_versioned.outputs.game_versions }}" >> $GITHUB_OUTPUT
echo -e "${{ steps.properties_v.outputs.publish_versions }}" >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT

- name: Prepare file information
Expand Down Expand Up @@ -166,12 +166,12 @@ jobs:

files: ${{ steps.file_info.outputs.path }}

name: ${{ format('{0} {1} {2}', steps.properties_common.outputs.mod_name, steps.properties_common.outputs.mod_version, matrix.mod_brand) }}
version: ${{ steps.properties_common.outputs.mod_version }}
name: ${{ format('{0} {1} {2}', steps.properties_c.outputs.mod_name, steps.properties_c.outputs.mod_version, matrix.mod_brand) }}
version: ${{ steps.properties_c.outputs.mod_version }}
version-type: release

loaders: ${{ matrix.mod_brand }}
game-versions: ${{ steps.game_versions.outputs.value }}
game-versions: ${{ steps.publish_versions.outputs.value }}
game-version-filter: any
dependencies: '' # declare the dependencies explicitly, so mc-publish won't try to load from fabric.mod.json

Expand Down
73 changes: 0 additions & 73 deletions .github/workflows/scripts/summary.py

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on: [workflow_call]

jobs:
tests:
runs-on: windows-2019
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
Expand Down
14 changes: 0 additions & 14 deletions .imgbotconfig

This file was deleted.

2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ If you're a developer, you can contribute to the AutoModpack project by writing
1. Discuss the changes you want to make. By e.g. creating an issue.
2. Fork the repository and create a new branch for your feature or bug fix.
3. Make your code changes.
4. Build code with `./gradlew chiseledBuild` command.
4. Build code with `./gradlew build` command.
5. Test your changes thoroughly to prevent regressions.
6. Submit a pull request, describing your changes and providing relevant context.

Expand Down
22 changes: 12 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,36 +40,38 @@ This isn't just another mod; it's a game-changer for private servers. Here's why

## 🛠️ How the Magic Happens

AutoModpack works by generating a modpack (**metadata file**) on the server, containing all the files of your modpack. The server then hosts this file and the modpack files.
AutoModpack works by generating a modpack (**metadata file**) on the server, which contains all the files of your modpack. The server then hosts this file and the modpack files.

When a client connects to server (simplified):
When a client connects to the server:

1. AutoModpack securely connects to the modpack host server and fetches the metadata.
2. It uses Modrinth and CurseForge APIs to download directly your modpack's files where possible.
3. All files are downloaded to the client's automodpack folder.
4. Restart the game, AutoModpack loads the modpack and the client is perfectly synced and ready to play!
1. Connection: AutoModpack establishes a secure connection and prompts you to [verify the server's certificate fingerprint](https://moddedmc.wiki/en/project/automodpack/docs/technicals/certificate).
2. Direct links: Fetches the APIs for direct downloads of your modpack's files from Modrinth and CurseForge, where possible (mods, resource packs, shaders).
3. Modpack download: All files are downloaded to the client's automodpack folder.
4. Game restart: AutoModpack loads the modpack, and the client is perfectly synced and ready to play!

On subsequent game boots, AutoModpack checks for updates. If changes are detected, it updates the modpack in the background, no additional restarts required!
On subsequent game launches, AutoModpack checks for updates. If changes are detected, it updates the modpack in the backgroundno additional restarts are required!

## ⚠️ Security and Trust - Read This!

> With great power comes great responsibility.

Because it downloads files directly into your game folder, it's crucial to **only use it on servers you absolutely trust**. A malicious server (administrator) *can* include harmful files.
Be aware that this mod allows remote servers to download *arbitrary executable* files directly into your game folder. It's crucial to **only use it on servers you absolutely trust**. A malicious server (administrator) *can* include malicious/harmful files.

While AutoModpack itself tries to be as secure as possible, due to the nature of the internet, the creators and contributors of AutoModpack are not responsible for any harm, damage, loss, or issues that may result from files downloaded from a server you connect to using the mod. **By using AutoModpack, you acknowledge and accept this risk.**

**If you have valuable security insights or concerns, please reach out!** You can contact privately on [Discord](https://discordapp.com/users/464522287618457631) or open an issue on GitHub.
**If you have valuable security insights or concerns, please reach out!** You can contact privately on [Discord](https://discordapp.com/users/464522287618457631) or publicly on [Discord server](https://discord.gg/hS6aMyeA9P) or just open an issue on [GitHub](https://github.com/Skidamek/AutoModpack/issues).
## 🚀 Getting Started is a Breeze!

Installing AutoModpack is as simple as installing any other mod.

1. Download the AutoModpack from the releases page on [GitHub](https://github.com/Skidamek/AutoModpack/releases), [CurseForge](https://www.curseforge.com/minecraft/mc-mods/automodpack), or [Modrinth](https://modrinth.com/mod/automodpack).
2. Place the downloaded file into the `/mods/` folder of both your server and client Minecraft installations.
3. Start your server and let AutoModpack generate the initial modpack metadata.
4. Connect to your server with the mod installed on your client.

That's typically all you need to do! AutoModpack will automatically create the modpack from your server's mods.

**Want to customize your modpack further?** Add configs, client-side-only mods, and more? **Check out the [wiki](https://github.com/Skidamek/AutoModpack/wiki)!** It *hopefully* has all the details you need to tailor AutoModpack to your specific needs.
**Want to customize your modpack further?** Add configs, client-side-only mods, and more? **Check out the [documentation](https://moddedmc.wiki/en/project/automodpack/docs)!** There's also a start guide covering more stuff. If you encounter any issues or have questions, feel free to join [Discord server](https://discord.gg/hS6aMyeA9P) or open an issue on [GitHub](https://github.com/Skidamek/AutoModpack/issues).

Prefer an all-in-one solution? You can also use our [modified Fabric installer](https://github.com/Skidamek/AutoModpack-Installer/releases/tag/Latest) which downloads AutoModpack alongside the Fabric loader.

Expand Down
73 changes: 73 additions & 0 deletions build.fabric.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
@file:Suppress("UnstableApiUsage")

plugins {
kotlin("jvm")
id("automodpack.common")
id("fabric-loom")
}

version = "${property("mod_version")}"
group = "${property("mod.group")}"
base.archivesName.set("${property("mod_name")}-mc${property("deps.minecraft")}-fabric".lowercase())

loom {
accessWidenerPath = rootProject.file("src/main/resources/automodpack.accesswidener")
}

dependencies {
implementation(project(":core"))
implementation(project(":loader-core"))

minecraft("com.mojang:minecraft:${property("deps.minecraft")}")
mappings(loom.layered {
officialMojangMappings()
if (hasProperty("deps.parchment"))
parchment("org.parchmentmc.data:parchment-${property("deps.parchment")}@zip")
})

modImplementation("net.fabricmc:fabric-loader:${property("deps.fabric-loader")}")

// TODO transitive false
setOf(
"api-base", // Required by modules below
"resource-loader-v0", // Required for translatable texts
"registry-sync-v0", // Required for custom sounds
"networking-api-v1" // Required by registry sync module
).forEach {
include(modImplementation(fabricApi.module("fabric-$it", property("deps.fabric-api") as String))!!)
}

if (stonecutter.eval(stonecutter.current.version, "<1.19.2")) {
include(modImplementation(fabricApi.module("fabric-command-api-v1", property("deps.fabric-api") as String))!!) // TODO transitive false
} else {
include(modImplementation(fabricApi.module("fabric-command-api-v2", property("deps.fabric-api") as String))!!) // TODO transitive false
}

include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:${property("deps.mixin-extras")}")!!)!!)
}

java {
if (stonecutter.eval(stonecutter.current.version, ">=1.20.5")) {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
} else {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
withSourcesJar()
}

tasks {
processResources {
exclude("**/neoforge.mods.toml", "**/mods.toml", "**/accesstransformer.cfg")
}

register<Copy>("buildAndCollect") {
group = "build"
from(remapJar.map { it.archiveFile })
into(rootProject.layout.buildDirectory.file("libs/${project.property("mod_version")}"))
dependsOn("build")
}
}
Loading
Loading