Compare commits
6
Commits
v1.0.0
..
48ffed7da8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48ffed7da8 | ||
|
|
60f552ba6a | ||
|
|
c5f1482aea | ||
|
|
f91dcecf07 | ||
|
|
1ddf8184c2 | ||
|
|
3119c08a64 |
@@ -0,0 +1,182 @@
|
||||
# Minecraft Modpacks
|
||||
|
||||
Packwiz-managed Minecraft modpacks used by the AGS Minecraft infrastructure.
|
||||
|
||||
The repository is the source of truth for both client and server modpack configuration. Packs are deployed through Gitea Actions and served as static Packwiz repositories for Pterodactyl.
|
||||
|
||||
## Packs
|
||||
|
||||
### Forever World
|
||||
|
||||
Long-lived NeoForge survival world with a deliberately conservative mod selection.
|
||||
|
||||
- Minecraft: 1.21.1
|
||||
- NeoForge: 21.1.248
|
||||
- Packwiz: managed
|
||||
- Production: release-based
|
||||
|
||||
Development:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/forever/dev/pack.toml
|
||||
```
|
||||
|
||||
Stable:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/forever/stable/pack.toml
|
||||
```
|
||||
|
||||
### Playground
|
||||
|
||||
Disposable environment for testing mods, updates and configuration changes before considering them for Forever World.
|
||||
|
||||
Development:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/playground/dev/pack.toml
|
||||
```
|
||||
|
||||
## Repository Structure
|
||||
|
||||
```text
|
||||
mc-modpacks/
|
||||
├── .gitea/
|
||||
│ └── workflows/
|
||||
├── forever/
|
||||
│ ├── pack.toml
|
||||
│ ├── index.toml
|
||||
│ ├── mods/
|
||||
│ ├── config/
|
||||
│ ├── defaultconfigs/
|
||||
│ └── README.md
|
||||
├── playground/
|
||||
│ ├── pack.toml
|
||||
│ ├── index.toml
|
||||
│ ├── mods/
|
||||
│ ├── config/
|
||||
│ ├── defaultconfigs/
|
||||
│ └── README.md
|
||||
└── deploy/
|
||||
└── kubernetes/
|
||||
```
|
||||
|
||||
## Development Model
|
||||
|
||||
`main` represents the current development state.
|
||||
|
||||
Normal changes are committed directly to `main`:
|
||||
|
||||
```bash
|
||||
git switch main
|
||||
|
||||
cd forever
|
||||
packwiz update <mod>
|
||||
packwiz refresh
|
||||
|
||||
git add .
|
||||
git commit -m "Update <mod>"
|
||||
git push
|
||||
```
|
||||
|
||||
A push to `main` publishes the pack to its `dev` endpoint.
|
||||
|
||||
Production is **not** updated by normal commits.
|
||||
|
||||
### Branches
|
||||
|
||||
Branches are reserved for substantial or experimental work, for example:
|
||||
|
||||
```text
|
||||
mc-26-migration
|
||||
create-major-upgrade
|
||||
worldgen-experiment
|
||||
test-new-content-mod
|
||||
```
|
||||
|
||||
Small mod updates and configuration changes do not require branches.
|
||||
|
||||
## Releases
|
||||
|
||||
Test the development pack before creating a release.
|
||||
|
||||
Forever World releases use annotated tags:
|
||||
|
||||
```bash
|
||||
git tag -a forever-v1.0.1 -m "Forever World v1.0.1"
|
||||
git push origin forever-v1.0.1
|
||||
```
|
||||
|
||||
A release publishes an immutable copy to:
|
||||
|
||||
```text
|
||||
/forever/releases/v1.0.1/
|
||||
```
|
||||
|
||||
and promotes the same build to:
|
||||
|
||||
```text
|
||||
/forever/stable/
|
||||
```
|
||||
|
||||
Production Pterodactyl servers always consume the stable endpoint rather than individual release URLs.
|
||||
|
||||
### Versioning
|
||||
|
||||
Approximately follow semantic versioning:
|
||||
|
||||
| Version | Use |
|
||||
|---|---|
|
||||
| `v1.0.1` | Bug fixes, configs and routine mod updates |
|
||||
| `v1.1.0` | New functionality or compatible mods |
|
||||
| `v2.0.0` | Major Minecraft/modpack/world dependency changes |
|
||||
|
||||
Release tags are immutable. Never move or recreate an existing release tag.
|
||||
|
||||
## Deployment Flow
|
||||
|
||||
```text
|
||||
Gitea
|
||||
│
|
||||
push to main
|
||||
│
|
||||
▼
|
||||
Gitea Actions
|
||||
│
|
||||
▼
|
||||
/forever/dev/pack.toml
|
||||
│
|
||||
▼
|
||||
Staging Server
|
||||
│
|
||||
Test
|
||||
│
|
||||
forever-v1.x.x tag
|
||||
│
|
||||
▼
|
||||
Gitea Actions
|
||||
┌────┴────┐
|
||||
▼ ▼
|
||||
releases/ stable/
|
||||
│
|
||||
▼
|
||||
Production Server
|
||||
```
|
||||
|
||||
Packwiz is responsible for modpack contents and side filtering.
|
||||
|
||||
Pterodactyl is responsible for Java, server process management and resources.
|
||||
|
||||
Kubernetes/SWS provides static hosting for the published Packwiz repositories.
|
||||
|
||||
## Rollback
|
||||
|
||||
Release directories are immutable.
|
||||
|
||||
If a release causes problems, production can be pointed temporarily at an earlier release:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/forever/releases/v1.0.1/pack.toml
|
||||
```
|
||||
|
||||
Do not rewrite an existing release or tag. Fix the issue on `main` and publish a new release.
|
||||
@@ -0,0 +1,4 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
@@ -0,0 +1,4 @@
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "forever-v*"
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
# Pack exports
|
||||
*.mrpack
|
||||
*.zip
|
||||
|
||||
# Local/editor junk
|
||||
.DS_Store
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*~
|
||||
|
||||
# Temporary build output
|
||||
.build/
|
||||
dist/
|
||||
@@ -7,7 +7,7 @@
|
||||
"exported_at": "2026-08-22T18:28:00+01:00",
|
||||
"name": "NeoForge + Packwiz",
|
||||
"author": "hamza@ahmza.com",
|
||||
"description": "Reusable NeoForge Minecraft server egg with Packwiz server-side synchronization. Handles Pterodactyl memory=0 as unlimited by omitting -Xmx.",
|
||||
"description": "Reusable NeoForge Minecraft server egg with Packwiz server-side synchronization.",
|
||||
"features": [
|
||||
"eula",
|
||||
"java_version",
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# Generated exports
|
||||
*.mrpack
|
||||
*.zip
|
||||
|
||||
# Temporary/local files
|
||||
.DS_Store
|
||||
*.tmp
|
||||
|
||||
# packwiz cache if created locally
|
||||
.packwiz/
|
||||
@@ -0,0 +1,118 @@
|
||||
# Forever World
|
||||
|
||||
The Forever World pack is the long-lived Minecraft survival modpack.
|
||||
|
||||
The goal is to expand Minecraft without turning the world into a disposable modpack save. Mods are selected with long-term compatibility, maintainability and world-save safety in mind.
|
||||
|
||||
## Platform
|
||||
|
||||
```text
|
||||
Minecraft: 1.21.1
|
||||
NeoForge: 21.1.248
|
||||
Packwiz: managed
|
||||
```
|
||||
|
||||
## Philosophy
|
||||
|
||||
The pack is intentionally conservative.
|
||||
|
||||
Content mods should provide meaningful additions while avoiding unnecessary permanent dependencies on abandoned or experimental mods.
|
||||
|
||||
The core gameplay additions currently centre around:
|
||||
|
||||
- Create
|
||||
- Create: Bells & Whistles
|
||||
- Create: Connected
|
||||
- Create: Copycats+
|
||||
- Farmer's Delight
|
||||
- Handcrafted
|
||||
|
||||
Additional mods provide mapping, building, performance, diagnostics and quality-of-life improvements.
|
||||
|
||||
Axiom is provided through Sinytra Connector and Forgified Fabric API.
|
||||
|
||||
## Client and Server Mods
|
||||
|
||||
Packwiz `side` metadata determines deployment.
|
||||
|
||||
```toml
|
||||
side = "client"
|
||||
side = "server"
|
||||
side = "both"
|
||||
```
|
||||
|
||||
Pterodactyl installs the server pack using:
|
||||
|
||||
```bash
|
||||
packwiz-installer-bootstrap.jar -g -s server <pack.toml>
|
||||
```
|
||||
|
||||
This automatically excludes client-only mods such as Iris and Sodium.
|
||||
|
||||
Some optional client-oriented mods are intentionally installed server-side where their server functionality is useful and does not create an undesirable world dependency.
|
||||
|
||||
## Development
|
||||
|
||||
Current development builds are published at:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/forever/dev/pack.toml
|
||||
```
|
||||
|
||||
Production uses:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/forever/stable/pack.toml
|
||||
```
|
||||
|
||||
Changes pushed to `main` are tested against the development/staging server before release.
|
||||
|
||||
## Releases
|
||||
|
||||
Forever World releases use repository tags:
|
||||
|
||||
```text
|
||||
forever-v1.0.0
|
||||
forever-v1.0.1
|
||||
forever-v1.1.0
|
||||
```
|
||||
|
||||
A tagged release is published to both:
|
||||
|
||||
```text
|
||||
/forever/releases/v1.x.x/
|
||||
/forever/stable/
|
||||
```
|
||||
|
||||
Release tags and release directories are immutable.
|
||||
|
||||
Major mod additions, Minecraft migrations and other potentially disruptive changes should be tested on Playground or a feature branch before being introduced here.
|
||||
|
||||
## Updating a Mod
|
||||
|
||||
```bash
|
||||
cd forever
|
||||
|
||||
packwiz update <mod>
|
||||
packwiz refresh
|
||||
|
||||
git add .
|
||||
git commit -m "Update <mod>"
|
||||
git push
|
||||
```
|
||||
|
||||
Test the resulting development deployment before creating a release tag.
|
||||
|
||||
## World Safety
|
||||
|
||||
Before introducing or removing a content mod, consider:
|
||||
|
||||
- Does it add blocks or entities that become part of the world save?
|
||||
- Does it modify world generation?
|
||||
- What happens if development stops?
|
||||
- Can the mod be removed without damaging the world?
|
||||
- Is it likely to survive future Minecraft migrations?
|
||||
|
||||
The objective is not zero world dependencies; Create and other content mods deliberately become part of the world.
|
||||
|
||||
The objective is to keep those dependencies intentional.
|
||||
@@ -2,175 +2,140 @@ hash-format = "sha256"
|
||||
|
||||
[[files]]
|
||||
file = "mods/appleskin.pw.toml"
|
||||
hash = "716d930feff599bf9ce732e05979fbae8025dc8a3c13ccf4f1cb207a70883bc6"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/axiom.pw.toml"
|
||||
hash = "d96e1e5aa63a1a6023578fc3d8f4de1239da8bd105769c43ed2798082ff0acf3"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/bellsandwhistles.pw.toml"
|
||||
hash = "e1f4a53e3e52b534add5dd018597fefd345d9bd6350b9c46ef0ec281fc62af8e"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/bluemap.pw.toml"
|
||||
hash = "f33a4720ef4f315b6d1f778039e9f7bdb8f5ef1b58a57d565c30fd1d8adee207"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/chunky.pw.toml"
|
||||
hash = "68cc51e721e993a8b7a2cbaf45369933b22b07a9c82327ab14757ee10684aa81"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/clumps.pw.toml"
|
||||
hash = "c7f15ebcab95f04c71940715f09ced4caad2775a91ef34389431f91bc1c7be71"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/connector.pw.toml"
|
||||
hash = "a38d72ca403e9064338be6e0cf69532768b0c1aba8f88703a8ce74c2734da522"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/controlling.pw.toml"
|
||||
hash = "65c8086d2ec3d39acc7bd36c7a0306ccc43b602b38fa07d13291bc478ef7dfff"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/copycats.pw.toml"
|
||||
hash = "fd62a69cda114a6a7c969d4a7ab9604c39acb31a11bdaa8f8618ed922745d2b9"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/create-connected.pw.toml"
|
||||
hash = "61afa588fd3156a29418aef463c527308b014e72d86b5ca7c03f2f28973ca27a"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/create.pw.toml"
|
||||
hash = "dcaf5f2e28db0b9a127d0167456832341045ddc9aec058c3d9fcf53f618d2404"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/distanthorizons.pw.toml"
|
||||
hash = "d5b9c23df79ef871a70032567db2512904251347bdf13da80fbb8b00a846a79a"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/dynamic-fps.pw.toml"
|
||||
hash = "ae6fd52d8bdcbeca5bbe6db840f22f92c1928fe0fda22017b19612b9b00a245a"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/entityculling.pw.toml"
|
||||
hash = "4fbe037c1ec3570be84f68e075c3e8293b15f64dda22bca4735924705fb38236"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/farmers-delight.pw.toml"
|
||||
hash = "7f837101645afe275564c75605e3950352db2e3dc18e0ebcf7460bac272afde4"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/ferrite-core.pw.toml"
|
||||
hash = "73360e397134d238ee8fd21d33fd7f9275e9441f74f8f1b6ed92278877c0b9f1"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/forgified-fabric-api.pw.toml"
|
||||
hash = "e3c62164f1eed254aa04629bce3d62b34a65bf15801d2ffb1bf1373a0b97c544"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/handcrafted.pw.toml"
|
||||
hash = "0004feab868f7b873c12db05aae0d0dac6c87b497490b48bb66480e7c8d0f340"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/immediatelyfast.pw.toml"
|
||||
hash = "6828b28c310ae427da625473c55b79eb0c7ca42acc76591948644af0c04e3933"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/iris.pw.toml"
|
||||
hash = "db1c1e6382878b78e994dba1b9026935f8d1c5ca685c89d2437858e0a0dcab58"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/jade-addons-forge.pw.toml"
|
||||
hash = "8cd8400cb4e2c5ba60c8a359a7b6ff501078d2056eab0aba7f6b0ac77b7a0694"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/jade.pw.toml"
|
||||
hash = "4de3e4a1a49e332c1ad313283e0403c4273b628d634c17a9ff0c9da3d6b67f9a"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/jei.pw.toml"
|
||||
hash = "1eb4094b466679316208fa85e5a855fc71945cfd639ff7f831586452b0cc3ad3"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/lithium.pw.toml"
|
||||
hash = "51e129832b04acd57da470fc41725bad5e101b6a6b1d4901fd8ea7a92b14e13d"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/modernfix.pw.toml"
|
||||
hash = "6d3ff3b7bbcc97fa06bdddcf2b3b7646168497ba6d7104bdea376f1bc65f9a93"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/mouse-tweaks.pw.toml"
|
||||
hash = "6bc414cc0f2d4c078fe83f384d786343f701f371d657c5279b5b0df1595804bd"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/resourceful-lib.pw.toml"
|
||||
hash = "c0b066684294c33972d562e0cb08ea17b2d31bcf86cd1d6c63b8e968f0eac7a2"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/searchables.pw.toml"
|
||||
hash = "ce9ddada6ffd55a512149cc474c6a453281a997a5fdf1b7b4a2cc73f875e704a"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/shulkerboxtooltip.pw.toml"
|
||||
hash = "0bef7b3dd4758a661d3e6827bd390c12ff8a3ede4a66bb2e01e3c760f02bd509"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/simple-voice-chat.pw.toml"
|
||||
hash = "8eae737eb20a0488e9b57b6a59f0681d142732bcb22fc896ad4e5ff924ec5683"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/sodium.pw.toml"
|
||||
hash = "abc285fb28b8df872e4c2bb31e04fc23e2724d9c84b4cb6fbc4320fc569c758f"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/sound-physics-remastered.pw.toml"
|
||||
hash = "258a77de0a6db4c9ab045cbb240bcf4eac0dbbca3f6bc981fb461e55c247f23f"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/spark.pw.toml"
|
||||
hash = "5995decc8738d7ddccec218dfa1ed95db9eca5bb64c98fd2cede8bf9bbc837c2"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/xaeros-minimap.pw.toml"
|
||||
hash = "4c336c9a00838ff5b5bbf6cd8ae35927186fdfa42258ca15513835e1b12ced2f"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/xaeros-world-map.pw.toml"
|
||||
hash = "69df708c9b3980d96c953eaa0f98a9cb82ce7679872d1364da5ca4c116dc40b1"
|
||||
metafile = true
|
||||
|
||||
+3
-1
@@ -6,8 +6,10 @@ pack-format = "packwiz:1.1.0"
|
||||
[index]
|
||||
file = "index.toml"
|
||||
hash-format = "sha256"
|
||||
hash = "7c301d5e22c499b42d533cbb4d3a778295419c1328c58f363a049894467cf0b8"
|
||||
|
||||
[versions]
|
||||
minecraft = "1.21.1"
|
||||
neoforge = "21.1.248"
|
||||
|
||||
[options]
|
||||
no-internal-hashes = true
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# Playground
|
||||
|
||||
Playground is the experimental Minecraft environment.
|
||||
|
||||
Unlike Forever World, this pack is intentionally disposable and exists for testing mods, updates and configuration changes without risking the permanent world.
|
||||
|
||||
## Purpose
|
||||
|
||||
Use Playground for:
|
||||
|
||||
- evaluating new mods
|
||||
- testing major mod updates
|
||||
- testing Minecraft/NeoForge upgrades
|
||||
- experimenting with world generation
|
||||
- testing compatibility between mods
|
||||
- testing configuration changes
|
||||
- reproducing crashes
|
||||
- validating potential Forever World changes
|
||||
|
||||
The world may be reset or replaced at any time.
|
||||
|
||||
## Platform
|
||||
|
||||
The Minecraft and NeoForge versions may change depending on what is being tested.
|
||||
|
||||
Packwiz remains the source of truth for the pack.
|
||||
|
||||
## Deployment
|
||||
|
||||
Development builds are published at:
|
||||
|
||||
```text
|
||||
https://mc.ahmza.com/playground/dev/pack.toml
|
||||
```
|
||||
|
||||
The Pterodactyl server should normally use:
|
||||
|
||||
```text
|
||||
PACKWIZ_AUTO_SYNC=1
|
||||
```
|
||||
|
||||
so restarting Playground synchronises it with the latest published pack.
|
||||
|
||||
## Development
|
||||
|
||||
Playground changes can normally be committed directly to `main`:
|
||||
|
||||
```bash
|
||||
cd playground
|
||||
|
||||
packwiz add <mod>
|
||||
packwiz refresh
|
||||
|
||||
git add .
|
||||
git commit -m "Test <mod> in Playground"
|
||||
git push
|
||||
```
|
||||
|
||||
Feature branches may be used for larger experiments, but are not required for routine testing.
|
||||
|
||||
## Promotion to Forever World
|
||||
|
||||
A mod working in Playground does not automatically make it suitable for Forever World.
|
||||
|
||||
Before promotion consider:
|
||||
|
||||
- stability
|
||||
- maintenance activity
|
||||
- compatibility
|
||||
- world-save impact
|
||||
- dependencies
|
||||
- performance
|
||||
- removal behaviour
|
||||
- future Minecraft upgrade prospects
|
||||
|
||||
Mods considered suitable should then be added independently to the Forever pack and tested against the Forever staging server.
|
||||
|
||||
## Persistence
|
||||
|
||||
Nothing in Playground should be considered permanent.
|
||||
|
||||
Worlds, configs and mods may be removed or reset as required.
|
||||
|
||||
If something matters, move it into the appropriate version-controlled configuration before relying on it.
|
||||
Reference in New Issue
Block a user