Compare commits
288 Commits
2dbb0e0770
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41fd0789b6 | ||
|
|
cb6560f51a | ||
|
|
2313b6e28e | ||
|
|
1494fe4845 | ||
|
|
bff41a6a4d | ||
|
|
a96062a39d | ||
|
|
2f729dba08 | ||
|
|
03d236dcab | ||
|
|
a089cfae6c | ||
|
|
8ef90810d9 | ||
|
|
8f48e95abf | ||
|
|
05d27f96bb | ||
|
|
63790a38ff | ||
|
|
e111ee41c8 | ||
|
|
725b24fd51 | ||
|
|
a2c4f8b76f | ||
|
|
e1eede5a3e | ||
|
|
7505c63d45 | ||
|
|
2dd939b289 | ||
|
|
37ddf8fa5f | ||
|
|
8b55c06e9b | ||
|
|
5520bbfff8 | ||
|
|
75d7665647 | ||
|
|
76fde5202a | ||
|
|
283896a9ea | ||
|
|
d1f6e768b0 | ||
|
|
5c1ed97bf3 | ||
|
|
ccd88c4fec | ||
|
|
79c4864167 | ||
|
|
51eb9e415c | ||
|
|
98d961b348 | ||
|
|
ac656d6212 | ||
|
|
89e84dc8d3 | ||
|
|
f79df34424 | ||
|
|
18a589362f | ||
|
|
02e6c60318 | ||
|
|
d217e8e907 | ||
|
|
21f6b77636 | ||
|
|
f5909c48d7 | ||
|
|
9daf41d2fb | ||
|
|
68a1dd779c | ||
|
|
1554fd8c15 | ||
|
|
0d6a91bbfd | ||
|
|
69c8901641 | ||
|
|
cc7552b000 | ||
|
|
8af83dc44c | ||
|
|
8b913d89b6 | ||
|
|
21704b06a2 | ||
|
|
cdc8b19554 | ||
|
|
f461d26c07 | ||
|
|
b0bc5c441b | ||
|
|
6508891664 | ||
|
|
1c0618e055 | ||
|
|
40268bef5a | ||
|
|
c1cf52d9ce | ||
|
|
a0b0c3788a | ||
|
|
70bf446471 | ||
|
|
3f44ba8943 | ||
|
|
1009751f67 | ||
|
|
8bbc78b6d7 | ||
|
|
d111c3fd71 | ||
|
|
2097c0bde4 | ||
|
|
78ec06ef26 | ||
|
|
ca612d483e | ||
|
|
fcb72efb23 | ||
|
|
bd6a364a72 | ||
|
|
060ca7deb7 | ||
|
|
524e58c05d | ||
|
|
d8acd2db73 | ||
|
|
cfe107d42c | ||
|
|
8e6371822c | ||
|
|
05b00e6127 | ||
|
|
b7aea27aef | ||
|
|
8e94aee0a2 | ||
|
|
9394f7e658 | ||
|
|
498b3cb48a | ||
|
|
22970e9c3c | ||
|
|
ce3dd31eb7 | ||
|
|
4d52f0da4c | ||
|
|
d684482c3d | ||
|
|
8723ff6d00 | ||
|
|
d57e82210d | ||
|
|
2d4dfdc6c2 | ||
|
|
8946306b07 | ||
|
|
b0c3855708 | ||
|
|
9b174985fd | ||
|
|
9520e2837f | ||
|
|
c335cdf973 | ||
|
|
082b08b4e1 | ||
|
|
e47a8bfea3 | ||
|
|
1033ed6275 | ||
|
|
093b7d8323 | ||
|
|
05743c628b | ||
|
|
c05e75aec8 | ||
|
|
a238f6ac08 | ||
|
|
b034340a62 | ||
|
|
64237b5c30 | ||
|
|
c25114e911 | ||
|
|
fbcc923e33 | ||
|
|
c768cd49f5 | ||
|
|
2d7ac6c163 | ||
|
|
532b507f8d | ||
|
|
e0e8a86198 | ||
|
|
9b75090370 | ||
|
|
f43481c36c | ||
|
|
1bcacfc281 | ||
|
|
cfc44a44d6 | ||
|
|
3ff2245ceb | ||
|
|
3fdb17552f | ||
|
|
0ae3af7488 | ||
|
|
fd086d667c | ||
|
|
dde81f0c46 | ||
|
|
2bc942e13d | ||
|
|
d53a9582bb | ||
|
|
8eadf1b3f4 | ||
|
|
4e5f8865ca | ||
|
|
1f505b7d10 | ||
|
|
cfe4ccef5f | ||
|
|
da03bd1f80 | ||
|
|
6388d7fca2 | ||
|
|
6e79c71a1e | ||
|
|
020769a188 | ||
|
|
ccf3f0ddcd | ||
|
|
6203cd5a3f | ||
|
|
67a15b4b75 | ||
|
|
0d43c2bcf8 | ||
|
|
9288ecf7d2 | ||
|
|
5653e19ec4 | ||
|
|
6359900c8f | ||
|
|
f2c214c374 | ||
|
|
33df2726db | ||
|
|
59ad09ff79 | ||
|
|
90438137c5 | ||
|
|
0c04036ec1 | ||
|
|
51fcb87a28 | ||
|
|
bb3c685e6a | ||
|
|
ad1bb509d3 | ||
|
|
2c4240ad0a | ||
|
|
90613f81d8 | ||
|
|
acb6f60555 | ||
|
|
092ad09b6b | ||
|
|
afdb4f8f97 | ||
|
|
d909fb06d0 | ||
|
|
5aa1348230 | ||
|
|
938de62ecd | ||
|
|
8b86760af6 | ||
|
|
dbb9c9c46e | ||
|
|
5d8e7a103e | ||
|
|
12f15dbcce | ||
|
|
fdcca0cbd3 | ||
|
|
fae1b2ee34 | ||
|
|
fb40790886 | ||
|
|
7f98145702 | ||
|
|
8dcdc24284 | ||
|
|
7917249b58 | ||
|
|
7a978f63dd | ||
|
|
494e6fbeb4 | ||
|
|
257fbd4513 | ||
|
|
4472184c09 | ||
|
|
d84d66e327 | ||
|
|
2afea577ec | ||
|
|
36f1a8812b | ||
|
|
440bb6781a | ||
|
|
46e3b79cd3 | ||
|
|
4796251802 | ||
|
|
0cb6c2e519 | ||
|
|
70e3546028 | ||
|
|
f8ef9192c8 | ||
|
|
bea5b7688b | ||
|
|
ccca06b4ed | ||
|
|
a5f2981945 | ||
|
|
3468595a35 | ||
|
|
fb1830b79a | ||
|
|
3d0ce7db1e | ||
|
|
72ec78afc8 | ||
|
|
860676ae86 | ||
|
|
de07d24f90 | ||
|
|
76c4669a65 | ||
|
|
bc8f153507 | ||
|
|
2201573ffa | ||
|
|
ccd886fc2a | ||
|
|
bc7fa21e87 | ||
|
|
ccd15b841a | ||
|
|
e54494d76c | ||
|
|
c6e283b6a0 | ||
|
|
a9cdbe38fd | ||
|
|
e83594ca8f | ||
|
|
5df721c28c | ||
|
|
3e664187c4 | ||
|
|
89ab8a2490 | ||
|
|
b25c05d51c | ||
|
|
fbadf13335 | ||
|
|
863b878a6c | ||
|
|
9f826d1597 | ||
|
|
e644445cb1 | ||
|
|
d79e789d51 | ||
|
|
4f565f02b7 | ||
|
|
b7f945abd7 | ||
|
|
4ed85ba7f9 | ||
|
|
3f82cd4a03 | ||
|
|
c119e1d638 | ||
|
|
2080078074 | ||
|
|
0619338bf1 | ||
|
|
02ef254576 | ||
|
|
92b563055f | ||
|
|
faaa662cba | ||
|
|
9eae254850 | ||
|
|
7da12659e5 | ||
|
|
d7f8a7f385 | ||
|
|
4972c38611 | ||
|
|
4e66bdb1ca | ||
|
|
840b9d5d2b | ||
|
|
a2153ebd05 | ||
|
|
4a38e73486 | ||
|
|
f90ccbc7c8 | ||
|
|
5b07755a68 | ||
|
|
2c9d37705e | ||
|
|
05679053c0 | ||
|
|
a2b8f424fa | ||
|
|
fac6943aef | ||
|
|
01e7b8f2ca | ||
|
|
8993554fa3 | ||
|
|
19a61f254b | ||
|
|
c8feb12d46 | ||
|
|
0b1489a07a | ||
|
|
2002c06fe5 | ||
|
|
9b3804dc7c | ||
|
|
61a086a0c1 | ||
|
|
5b7d80d78d | ||
|
|
7e50d4d298 | ||
|
|
5a3c1a4966 | ||
|
|
eb1c35ab17 | ||
|
|
d1630bcc89 | ||
|
|
4373a9898e | ||
|
|
451eb46035 | ||
|
|
d2442425ed | ||
|
|
ce25599217 | ||
|
|
16661e1d1f | ||
|
|
e042f45eeb | ||
|
|
cf6dbd5d07 | ||
|
|
2db4e3c87d | ||
|
|
9159abef68 | ||
|
|
bd295412ec | ||
|
|
4386cd0f3c | ||
|
|
1de3b04bdb | ||
|
|
1219c61e3f | ||
|
|
b67ff493d0 | ||
|
|
a5dbd2cc7c | ||
|
|
b220dfed92 | ||
|
|
44ed9f2b6f | ||
|
|
4cba390c32 | ||
|
|
705e9e073d | ||
|
|
39527f45c1 | ||
|
|
46f1d54ddf | ||
|
|
40ae945290 | ||
|
|
06ad38d237 | ||
|
|
9c3f68ce84 | ||
|
|
b64b96c766 | ||
|
|
9d0bcf70ac | ||
|
|
7a6ee73ab0 | ||
|
|
43f0ff643b | ||
|
|
6f97ad33b5 | ||
|
|
48da55c56f | ||
|
|
fafeef8341 | ||
|
|
2e8d1341d0 | ||
|
|
709a281b4e | ||
|
|
d86e8bee64 | ||
|
|
50d9fa2d8a | ||
|
|
4a981ae6ff | ||
|
|
539d7a6c3d | ||
|
|
5b564ff0c9 | ||
|
|
4dc7d2e260 | ||
|
|
cd0bd12c8a | ||
|
|
1f42010805 | ||
|
|
b05e5df834 | ||
|
|
5dea7ec546 | ||
|
|
f5b1ae7702 | ||
|
|
0d9c1bd0f3 | ||
|
|
5715e607a5 | ||
|
|
ecd261e01e | ||
|
|
ee2bd275cc | ||
|
|
7bc910830b | ||
|
|
fbea8969e1 | ||
|
|
10c14456fe | ||
|
|
ba9076514a | ||
|
|
fe36c36872 | ||
|
|
ef5deb2b1f | ||
|
|
6bf47156f7 |
@@ -1,14 +0,0 @@
|
||||
[package]
|
||||
name = "builder"
|
||||
version = "26.4.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
walkdir = "2.5"
|
||||
zip = "2.2"
|
||||
|
||||
[[bin]]
|
||||
name = "builder"
|
||||
path = "builder.rs"
|
||||
@@ -1,173 +0,0 @@
|
||||
// this was written in 60m
|
||||
use std::{env, fs::{self, File}, io::{Write, Read}, path::Path, process::{Command, exit}};
|
||||
use std::collections::HashSet;
|
||||
use walkdir::WalkDir;
|
||||
use zip::write::SimpleFileOptions;
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let short_sha = args.get(1).map(|s| s.as_str()).unwrap_or("unknown");
|
||||
|
||||
println!("detecting changed files...");
|
||||
let output = Command::new("git")
|
||||
.args(["diff-tree", "--no-commit-id", "--name-only", "-r", "HEAD"])
|
||||
.output()
|
||||
.expect("Failed to get git diff");
|
||||
|
||||
let stdout = String::from_utf8_lossy(&output.stdout);
|
||||
|
||||
let mut changed_targets = HashSet::new();
|
||||
|
||||
for line in stdout.lines() {
|
||||
if line.starts_with("external/") || line.starts_with(".actions/") || line.is_empty() {
|
||||
continue;
|
||||
}
|
||||
|
||||
let parts: Vec<&str> = line.split('/').collect();
|
||||
if parts.len() >= 2 {
|
||||
changed_targets.insert((parts[0], parts[1]));
|
||||
}
|
||||
}
|
||||
|
||||
if changed_targets.is_empty() {
|
||||
println!(no packs detected in git diff.");
|
||||
return;
|
||||
}
|
||||
|
||||
let _ = fs::create_dir_all("artifacts");
|
||||
let mut all_success = true;
|
||||
|
||||
for (category, pack_id) in changed_targets {
|
||||
match category {
|
||||
"modpacks" => {
|
||||
if !build_modpack(pack_id, short_sha) { all_success = false; }
|
||||
},
|
||||
"resourcepacks" => build_resource_pack(pack_id, short_sha),
|
||||
"datapacks" => build_datapack(pack_id, short_sha),
|
||||
_ => println!("category '{}' does not require a build.", category),
|
||||
}
|
||||
}
|
||||
|
||||
if !all_success {
|
||||
eprintln!("one or more builds failed.");
|
||||
exit(1);
|
||||
} else {
|
||||
println!("all builds completed successfully.");
|
||||
}
|
||||
}
|
||||
|
||||
fn build_modpack(pack_id: &str, sha: &str) -> bool {
|
||||
println!("building modpack: {}", pack_id);
|
||||
let base_path = format!("modpacks/{}", pack_id);
|
||||
let mut built_something = false;
|
||||
|
||||
for entry in WalkDir::new(&base_path).into_iter().filter_map(|e| e.ok()) {
|
||||
if entry.file_name() == "manifest.json" {
|
||||
let manifest_path = entry.path();
|
||||
let p_dir = manifest_path.parent().unwrap();
|
||||
|
||||
let file = match File::open(manifest_path) {
|
||||
Ok(f) => f,
|
||||
Err(e) => {
|
||||
eprintln!("hailed to open {:?}: {}", manifest_path, e);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
let json: serde_json::Value = match serde_json::from_reader(file) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
eprintln!("invalid JSON in {:?}: {}", manifest_path, e);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
let mc_ver = json["mc_version"].as_str().unwrap_or("1.20.1");
|
||||
let p_ver = json["version"].as_str().unwrap_or("1.0.0");
|
||||
|
||||
for p in ["mr", "cf"] {
|
||||
let target_subdir = format!("{}-{}", mc_ver, p);
|
||||
let target_path = p_dir.join(&target_subdir);
|
||||
|
||||
if target_path.exists() {
|
||||
built_something = true;
|
||||
let ext = if p == "mr" { "mrpack" } else { "zip" };
|
||||
let platform = if p == "mr" { "modrinth" } else { "curseforge" };
|
||||
let output_name = format!("{}-{}-{}-{}-{}.{}", pack_id, mc_ver, p, p_ver, sha, ext);
|
||||
|
||||
let _ = Command::new("packwiz").args(["refresh", "-y"]).current_dir(&target_path).status();
|
||||
|
||||
let export = Command::new("packwiz")
|
||||
.args([platform, "export", "--output", &format!("../../../artifacts/{}", output_name)])
|
||||
.current_dir(&target_path)
|
||||
.status();
|
||||
|
||||
match export {
|
||||
Ok(s) if !s.success() => {
|
||||
eprintln!("packwiz export failed for {}", target_subdir);
|
||||
return false;
|
||||
},
|
||||
Err(e) => {
|
||||
eprintln!("failed to launch packwiz: {}", e);
|
||||
return false;
|
||||
},
|
||||
_ => println!("exported {}", output_name),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !built_something {
|
||||
println!("found no valid targets (mr/cf) or manifest for {}", pack_id);
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
fn build_resource_pack(pack_id: &str, sha: &str) {
|
||||
println!("building resource pack: {}", pack_id);
|
||||
let src = format!("resourcepacks/{}", pack_id);
|
||||
let dest = format!("artifacts/{}-{}.zip", pack_id, sha);
|
||||
|
||||
let status = Command::new("packsquash")
|
||||
.args(["packsquash.toml", "--pack-directory", &src, "--output-file-path", &dest])
|
||||
.status()
|
||||
.expect("Failed to execute PackSquash");
|
||||
|
||||
if !status.success() { exit(1); }
|
||||
}
|
||||
|
||||
fn build_datapack(pack_id: &str, sha: &str) {
|
||||
println!("zipping datapack: {}", pack_id);
|
||||
let src = format!("datapacks/{}", pack_id);
|
||||
let dest = format!("artifacts/{}-{}.zip", pack_id, sha);
|
||||
if let Err(e) = zip_dir(&src, &dest) {
|
||||
eprintln!("❌ Failed to zip datapack {}: {}", pack_id, e);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
fn zip_dir(src: &str, dest: &str) -> zip::result::ZipResult<()> {
|
||||
let file = File::create(dest)?;
|
||||
let mut zip = zip::ZipWriter::new(file);
|
||||
let options = SimpleFileOptions::default().compression_method(zip::CompressionMethod::Deflated);
|
||||
|
||||
for entry in WalkDir::new(src).into_iter().filter_map(|e| e.ok()) {
|
||||
let path = entry.path();
|
||||
let name = path.strip_prefix(Path::new(src)).unwrap();
|
||||
|
||||
if path.is_file() {
|
||||
zip.start_file(name.to_string_lossy(), options)?;
|
||||
let mut f = File::open(path)?;
|
||||
let mut buffer = Vec::new();
|
||||
f.read_to_end(&mut buffer)?;
|
||||
zip.write_all(&buffer)?;
|
||||
} else if !name.as_os_str().is_empty() {
|
||||
zip.add_directory(name.to_string_lossy(), options)?;
|
||||
}
|
||||
}
|
||||
zip.finish()?;
|
||||
Ok(())
|
||||
}
|
||||
// say wallahi bro make this shit work!
|
||||
@@ -1,12 +0,0 @@
|
||||
[package]
|
||||
name = "linter"
|
||||
version = "26.4.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
serde_json = "1.0.149"
|
||||
|
||||
[[bin]]
|
||||
name = "linter"
|
||||
path = "linter.rs"
|
||||
@@ -1,44 +0,0 @@
|
||||
// this was written in like 30 minutes
|
||||
use std::fs;
|
||||
use std::process::{Command, exit};
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
let output = Command::new("git")
|
||||
.args(&["diff", "--name-only", "HEAD~1", "HEAD"])
|
||||
.output()
|
||||
.expect("Failed to execute git diff");
|
||||
|
||||
let stdout = String::from_utf8_lossy(&output.stdout);
|
||||
let mut failed = false;
|
||||
|
||||
for file_path in stdout.lines() {
|
||||
let path = Path::new(file_path);
|
||||
|
||||
if !path.exists() { continue; }
|
||||
|
||||
if file_path.ends_with(".json") || file_path.ends_with(".mcmeta") {
|
||||
if file_path.starts_with("modpacks/") ||
|
||||
file_path.starts_with("resourcepacks/") ||
|
||||
file_path.starts_with("datapacks/") {
|
||||
|
||||
println!("::group::Linting {}", file_path);
|
||||
let content = fs::read_to_string(path).expect("Read Error");
|
||||
|
||||
if let Err(e) = serde_json::from_str::<serde_json::Value>(&content) {
|
||||
eprintln!("::error file={}::INVALID JSON: {}", file_path, e);
|
||||
failed = true;
|
||||
}
|
||||
println!("::endgroup::");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if failed {
|
||||
eprintln!("Fix yo json chud...");
|
||||
exit(1);
|
||||
} else {
|
||||
println!("Lint success");
|
||||
}
|
||||
}
|
||||
// if this doesnt work i will cry bro i havent used rust since i was 11
|
||||
@@ -1,11 +0,0 @@
|
||||
[package]
|
||||
name = "publish"
|
||||
version = "26.4.0"
|
||||
edition = "2024"
|
||||
|
||||
[[bin]]
|
||||
name = "publish"
|
||||
path = "publish.rs"
|
||||
|
||||
[dependencies]
|
||||
serde_json = "1.0"
|
||||
@@ -1,157 +0,0 @@
|
||||
use serde_json::Value;
|
||||
use std::env;
|
||||
use std::fs::{self, OpenOptions};
|
||||
use std::io::Write;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::{Command, ExitStatus};
|
||||
|
||||
fn main() {
|
||||
let diff_output = Command::new("git")
|
||||
.args(["diff-tree", "--no-commit-id", "--name-only", "-r", "HEAD"])
|
||||
.output()
|
||||
.expect("failed to run git diff");
|
||||
|
||||
let diff_str = String::from_utf8_lossy(&diff_output.stdout);
|
||||
let manifest_path_str = diff_str.lines().find(|l| l.ends_with("manifest.json"));
|
||||
|
||||
let manifest_path_str = match manifest_path_str {
|
||||
Some(p) => p,
|
||||
None => {
|
||||
println!("no manifest.json found in recent commit. skipping.");
|
||||
std::process::exit(0);
|
||||
}
|
||||
};
|
||||
|
||||
let manifest_path = Path::new(manifest_path_str);
|
||||
let p_dir = manifest_path.parent().expect("Could not find parent dir");
|
||||
|
||||
let manifest_content = fs::read_to_string(manifest_path).expect("Failed to read manifest");
|
||||
let manifest: Value = serde_json::from_str(&manifest_content).expect("Failed to parse manifest JSON");
|
||||
|
||||
let raw_name = manifest["name"].as_str().unwrap();
|
||||
let p_name = raw_name.replace(" ", "-");
|
||||
let p_ver = manifest["version"].as_str().unwrap();
|
||||
let mc_ver = manifest["mc_version"].as_str().unwrap();
|
||||
let p_type = manifest["type"].as_str().unwrap();
|
||||
let mr_id = manifest["modrinth_id"].as_str().unwrap_or("");
|
||||
let cf_id = manifest["curseforge_id"].as_str().unwrap_or("");
|
||||
let filename_base = format!("{}-{}-fabric-{}", p_name, mc_ver, p_ver);
|
||||
|
||||
let changelog_file = p_dir.join("changelog.md");
|
||||
let mut notes = if changelog_file.exists() {
|
||||
fs::read_to_string(&changelog_file).unwrap()
|
||||
} else {
|
||||
format!("update for {}", raw_name)
|
||||
};
|
||||
|
||||
let prev_bump = Command::new("git")
|
||||
.args(["log", "-n", "2", "--format=%H", "--", manifest_path_str])
|
||||
.output()
|
||||
.expect("Failed to get git log for manifest");
|
||||
|
||||
let prev_hashes = String::from_utf8_lossy(&prev_bump.stdout);
|
||||
let prev_hash = prev_hashes.lines().nth(1).unwrap_or("HEAD~1");
|
||||
|
||||
let logs = Command::new("git")
|
||||
.args(["log", &format!("{}..HEAD", prev_hash), "--format=%h %s - %an", "--", p_dir.to_str().unwrap()])
|
||||
.output()
|
||||
.expect("Failed to get commit logs");
|
||||
|
||||
let commit_lines: Vec<&str> = std::str::from_utf8(&logs.stdout)
|
||||
.unwrap()
|
||||
.lines()
|
||||
.filter(|l| l.contains(": "))
|
||||
.collect();
|
||||
|
||||
if !commit_lines.is_empty() {
|
||||
if !notes.contains("# :purple_circle: Meta-changes") {
|
||||
notes.push_str("\n\n# :purple_circle: Meta-changes\n");
|
||||
}
|
||||
notes.push_str("\n### Automated Commit Log\n");
|
||||
for line in commit_lines {
|
||||
notes.push_str(&format!("{}\n", line));
|
||||
}
|
||||
}
|
||||
|
||||
let workspace = env::var("GITHUB_WORKSPACE").unwrap_or_else(|_| ".".to_string());
|
||||
let artifacts_dir = Path::new(&workspace).join(p_dir).join("artifacts");
|
||||
|
||||
if artifacts_dir.exists() {
|
||||
fs::remove_dir_all(&artifacts_dir).unwrap();
|
||||
}
|
||||
fs::create_dir_all(&artifacts_dir).unwrap();
|
||||
|
||||
println!("::group::Building Artifacts");
|
||||
if p_type == "modpack" {
|
||||
for platform in &["mr", "cf"] {
|
||||
let target_folder = format!("{}-{}", mc_ver, platform);
|
||||
let target_path = p_dir.join(&target_folder);
|
||||
|
||||
if target_path.exists() {
|
||||
// Refresh packwiz
|
||||
run_cmd("packwiz", &["refresh"], &target_path);
|
||||
|
||||
let (export_cmd, ext) = if *platform == "mr" { ("modrinth", "mrpack") } else { ("curseforge", "zip") };
|
||||
let out_file = artifacts_dir.join(format!("{}-{}.{}", filename_base, platform, ext));
|
||||
|
||||
// Export packwiz
|
||||
run_cmd("packwiz", &[export_cmd, "export", "--output", out_file.to_str().unwrap()], &target_path);
|
||||
} else {
|
||||
println!("Skipping {}: folder {} not found", platform, target_path.display());
|
||||
}
|
||||
}
|
||||
} else if p_type == "resourcepack" || p_type == "datapack" {
|
||||
let out_file = artifacts_dir.join(format!("{}-{}.zip", manifest["id"].as_str().unwrap(), p_ver));
|
||||
let content_dir = p_dir.join("content");
|
||||
|
||||
if content_dir.exists() {
|
||||
run_cmd("zip", &["-r", out_file.to_str().unwrap(), "."], &content_dir);
|
||||
} else {
|
||||
println!("Error: content directory not found at {}", content_dir.display());
|
||||
}
|
||||
}
|
||||
println!("::endgroup::");
|
||||
|
||||
if let Ok(out_path) = env::var("GITHUB_OUTPUT") {
|
||||
let mut out_file = OpenOptions::new()
|
||||
.append(true)
|
||||
.create(true)
|
||||
.open(out_path)
|
||||
.expect("Could not open GITHUB_OUTPUT");
|
||||
|
||||
writeln!(out_file, "mr_id={}", mr_id).unwrap();
|
||||
writeln!(out_file, "cf_id={}", cf_id).unwrap();
|
||||
writeln!(out_file, "name={} {}", raw_name, p_ver).unwrap();
|
||||
writeln!(out_file, "ver={}", p_ver).unwrap();
|
||||
writeln!(out_file, "mc={}", mc_ver).unwrap();
|
||||
writeln!(out_file, "type={}", p_type).unwrap();
|
||||
writeln!(out_file, "path={}", p_dir.to_str().unwrap()).unwrap();
|
||||
|
||||
let delimiter = "EOF_NOTES_DELIMITER";
|
||||
writeln!(out_file, "notes<<{}\n{}\n{}", delimiter, notes.trim(), delimiter).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
fn run_cmd(cmd: &str, args: &[&str], dir: &PathBuf) {
|
||||
let status = Command::new(cmd)
|
||||
.args(args)
|
||||
.current_dir(dir)
|
||||
.status();
|
||||
|
||||
match status {
|
||||
Ok(s) if s.success() => (),
|
||||
Ok(s) => {
|
||||
eprintln!("Command '{} {:?}' failed with exit code: {}", cmd, args, s);
|
||||
std::process::exit(1);
|
||||
}
|
||||
Err(e) if e.kind() == std::io::ErrorKind::NotFound => {
|
||||
eprintln!("CRITICAL: Binary '{}' not found in PATH.", cmd);
|
||||
eprintln!("Ensure it is installed and added to GITHUB_PATH.");
|
||||
std::process::exit(1);
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Failed to execute '{}': {}", cmd, e);
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
[workspace]
|
||||
members = [
|
||||
"core",
|
||||
]
|
||||
resolver = "2"
|
||||
|
||||
[workspace.dependencies]
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
toml = "0.8"
|
||||
|
||||
walkdir = "2.5"
|
||||
colored = "2.1"
|
||||
chrono = "0.4"
|
||||
git2 = "0.19"
|
||||
|
||||
thiserror = "1.0"
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||
color-eyre = "0.6"
|
||||
@@ -1,26 +0,0 @@
|
||||
[package]
|
||||
name = "somnus_core"
|
||||
version = "26.4.0"
|
||||
edition = "2024"
|
||||
|
||||
[lib]
|
||||
path = "src/lib.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "json-linter"
|
||||
path = "src/bin/json-linter.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "toml-linter"
|
||||
path = "src/bin/toml-linter.rs"
|
||||
|
||||
[dependencies]
|
||||
serde_json = "1.0"
|
||||
toml = "0.8"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
thiserror = "1.0"
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||
walkdir = "2.5"
|
||||
git2 = "0.19"
|
||||
chrono = "0.4"
|
||||
@@ -1,47 +0,0 @@
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use somnus_core::get_changed_files;
|
||||
|
||||
fn main() {
|
||||
if run() {
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run() -> bool {
|
||||
let mut failed = false;
|
||||
|
||||
let changed_files = match get_changed_files() {
|
||||
Ok(files) => files,
|
||||
Err(e) => {
|
||||
eprintln!("::error::Failed to retrieve changed files: {}", e);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
for file_path in changed_files {
|
||||
let path = Path::new(&file_path);
|
||||
if !path.exists() { continue; }
|
||||
|
||||
if file_path.ends_with(".json") || file_path.ends_with(".mcmeta") {
|
||||
if ["modpacks/", "resourcepacks/", "datapacks/"]
|
||||
.iter()
|
||||
.any(|dir| file_path.starts_with(dir))
|
||||
{
|
||||
println!("::group::Linting {}", file_path);
|
||||
let content = fs::read_to_string(path).expect("Read Error");
|
||||
|
||||
if let Err(e) = serde_json::from_str::<serde_json::Value>(&content) {
|
||||
eprintln!("::error file={}::INVALID JSON: {}", file_path, e);
|
||||
failed = true;
|
||||
}
|
||||
println!("::endgroup::");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if failed {
|
||||
eprintln!("Fix yo json chud...");
|
||||
}
|
||||
failed
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use somnus_core::get_changed_files;
|
||||
|
||||
fn main() {
|
||||
if run() {
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run() -> bool {
|
||||
let mut failed = false;
|
||||
|
||||
let changed_files = match get_changed_files() {
|
||||
Ok(files) => files,
|
||||
Err(e) => {
|
||||
eprintln!("::error::Failed to retrieve changed files: {}", e);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
for file_path in changed_files {
|
||||
let path = Path::new(&file_path);
|
||||
if !path.exists() { continue; }
|
||||
|
||||
if file_path.ends_with(".toml") {
|
||||
println!("::group::Linting TOML: {}", file_path);
|
||||
let content = fs::read_to_string(path).expect("Read Error");
|
||||
|
||||
if let Err(e) = content.parse::<toml::Value>() {
|
||||
eprintln!("::error file={}::INVALID TOML: {}", file_path, e);
|
||||
failed = true;
|
||||
}
|
||||
println!("::endgroup::");
|
||||
}
|
||||
}
|
||||
|
||||
if failed {
|
||||
eprintln!("Fix yo toml chud...");
|
||||
}
|
||||
failed
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
pub mod manager;
|
||||
pub mod commands;
|
||||
pub mod weaver;
|
||||
pub mod auditor;
|
||||
pub mod errors;
|
||||
pub mod state;
|
||||
pub mod logger;
|
||||
|
||||
use git2::Repository;
|
||||
use crate::errors::SomnusError;
|
||||
|
||||
pub fn get_changed_files() -> Result<Vec<String>, SomnusError> {
|
||||
let repo = Repository::open(".")?;
|
||||
|
||||
let head = repo.head()?.peel_to_tree()?;
|
||||
|
||||
let parent = repo.find_commit(repo.head()?.target().unwrap())?
|
||||
.parent(0)?
|
||||
.tree()?;
|
||||
|
||||
let diff = repo.diff_tree_to_tree(Some(&parent), Some(&head), None)?;
|
||||
let mut changed_files = Vec::new();
|
||||
|
||||
diff.foreach(&mut |delta, _| {
|
||||
if let Some(path) = delta.new_file().path() {
|
||||
changed_files.push(path.to_string_lossy().to_string());
|
||||
}
|
||||
true
|
||||
}, None, None, None)?;
|
||||
|
||||
Ok(changed_files)
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
use std::fs;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
use walkdir::WalkDir;
|
||||
|
||||
fn main() {
|
||||
let sync_map = vec![
|
||||
("modpacks/lce-core/1.21.10-mr", vec![
|
||||
"modpacks/simply/1.21.10-mr",
|
||||
"modpacks/rc-plus/1.21.10-mr",
|
||||
]),
|
||||
("modpacks/lce-core/1.21.10-cf", vec![
|
||||
"modpacks/simply/1.21.10-cf",
|
||||
"modpacks/rc-plus/1.21.10-cf",
|
||||
]),
|
||||
];
|
||||
|
||||
for (src_str, targets) in sync_map {
|
||||
let src_path = Path::new(src_str);
|
||||
if !src_path.exists() {
|
||||
println!("Skipping source {}: Not found", src_str);
|
||||
continue;
|
||||
}
|
||||
|
||||
for target_str in targets {
|
||||
let target_path = Path::new(target_str);
|
||||
if !target_path.exists() { continue; }
|
||||
|
||||
println!("Syncing {} -> {}", src_str, target_str);
|
||||
|
||||
sync_subfolder(src_path, target_path, "mods");
|
||||
sync_subfolder(src_path, target_path, "resourcepacks");
|
||||
sync_subfolder(src_path, target_path, "resources");
|
||||
|
||||
refresh_packwiz(target_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sync_subfolder(src_root: &Path, dst_root: &Path, folder: &str) {
|
||||
let src = src_root.join(folder);
|
||||
let dst = dst_root.join(folder);
|
||||
|
||||
if !src.exists() { return; }
|
||||
|
||||
for entry in WalkDir::new(&src)
|
||||
.into_iter()
|
||||
.filter_map(|e| e.ok())
|
||||
.filter(|e| !e.path().is_dir())
|
||||
{
|
||||
let src_file = entry.path();
|
||||
let relative = src_file.strip_prefix(src_root).unwrap();
|
||||
let target_file = dst_root.join(relative);
|
||||
|
||||
if let Some(parent) = target_file.parent() {
|
||||
fs::create_dir_all(parent).expect("Failed to create dirs");
|
||||
}
|
||||
|
||||
fs::copy(src_file, &target_file).expect("Failed to copy file");
|
||||
}
|
||||
}
|
||||
|
||||
fn refresh_packwiz(dir: &Path) {
|
||||
let _ = Command::new("packwiz")
|
||||
.arg("refresh")
|
||||
.current_dir(dir)
|
||||
.status();
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
[package]
|
||||
name = "updater"
|
||||
version = "26.4.0"
|
||||
edition = "2024"
|
||||
|
||||
[[bin]]
|
||||
name = "updater"
|
||||
path = "updater.rs"
|
||||
@@ -1,87 +0,0 @@
|
||||
use std::process::Command;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::thread;
|
||||
|
||||
fn main() {
|
||||
let modpacks = vec!["simply", "rc-plus", "2k", "rekindled"];
|
||||
let max_concurrent = 4;
|
||||
|
||||
let modpacks_queue = Arc::new(Mutex::new(modpacks.into_iter()));
|
||||
let errors = Arc::new(Mutex::new(Vec::new()));
|
||||
let mut workers = vec![];
|
||||
|
||||
println!("starting throttled parallel updates ({} at a time)...", max_concurrent);
|
||||
|
||||
for i in 0..max_concurrent {
|
||||
let queue_clone = Arc::clone(&modpacks_queue);
|
||||
let err_clone = Arc::clone(&errors);
|
||||
|
||||
let handle = thread::spawn(move || {
|
||||
loop {
|
||||
let pack = {
|
||||
let mut queue = queue_clone.lock().unwrap();
|
||||
queue.next()
|
||||
};
|
||||
|
||||
let pack = match pack {
|
||||
Some(p) => p,
|
||||
None => break,
|
||||
};
|
||||
|
||||
let path = format!("modpacks/{}", pack);
|
||||
println!("[Worker {}] starting: {}", i, pack);
|
||||
|
||||
if !std::path::Path::new(&path).exists() {
|
||||
let mut e = err_clone.lock().unwrap();
|
||||
e.push(format!("directory missing: {}", path));
|
||||
continue;
|
||||
}
|
||||
|
||||
let refresh = Command::new("pw")
|
||||
.args(["batch", "refresh", "-y"])
|
||||
.current_dir(&path)
|
||||
.status();
|
||||
|
||||
let update = Command::new("pw")
|
||||
.args(["batch", "update", "-a", "-y"])
|
||||
.current_dir(&path)
|
||||
.status();
|
||||
|
||||
let failed = match (refresh, update) {
|
||||
(Ok(s1), Ok(s2)) => !s1.success() || !s2.success(),
|
||||
(Err(e), _) => {
|
||||
println!("[Worker {}] refresh failed for {}: {}", i, pack, e);
|
||||
true
|
||||
},
|
||||
(_, Err(e)) => {
|
||||
println!("[Worker {}] update failed for {}: {}", i, pack, e);
|
||||
true
|
||||
}
|
||||
};
|
||||
|
||||
if failed {
|
||||
let mut e = err_clone.lock().unwrap();
|
||||
e.push(format!("failed: {}", pack));
|
||||
} else {
|
||||
println!("[Worker {}] done: {}", i, pack);
|
||||
}
|
||||
}
|
||||
});
|
||||
workers.push(handle);
|
||||
}
|
||||
|
||||
for handle in workers {
|
||||
handle.join().unwrap();
|
||||
}
|
||||
|
||||
let final_errors = errors.lock().unwrap();
|
||||
if !final_errors.is_empty() {
|
||||
eprintln!("\nsummary of failures");
|
||||
for err in final_errors.iter() {
|
||||
eprintln!("{}", err);
|
||||
}
|
||||
std::process::exit(1);
|
||||
} else {
|
||||
println!("\nall updates finished successfully.");
|
||||
}
|
||||
}
|
||||
@@ -11,52 +11,67 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
with:
|
||||
token: ${{ secrets.FORGEJO_TOKEN }}
|
||||
fetch-depth: 1
|
||||
filter: blob:none
|
||||
sparse-checkout: |
|
||||
modpacks
|
||||
.actions
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 'stable'
|
||||
cache: true
|
||||
|
||||
- name: Install Tooling
|
||||
run: |
|
||||
mkdir -p $HOME/go/bin
|
||||
if ! command -v packwiz &> /dev/null; then
|
||||
go install github.com/packwiz/packwiz@latest
|
||||
fi
|
||||
if ! command -v pw &> /dev/null; then
|
||||
go install github.com/Merith-TK/packwiz-wrapper/cmd/pw@main
|
||||
fi
|
||||
echo "$HOME/go/bin" >> $GITHUB_PATH
|
||||
src/actions/updater
|
||||
|
||||
- name: Cache Updater Binary
|
||||
id: cache-updater
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./updater-bin
|
||||
key: updater-v2-${{ runner.os }}-${{ hashFiles('.actions/updater/**') }}
|
||||
key: updater-v4-${{ runner.os }}-${{ hashFiles('src/actions/updater/**/*.rs', 'src/actions/updater/Cargo.toml', 'src/actions/updater/Cargo.lock') }}
|
||||
|
||||
- name: Ensure Rust
|
||||
- name: Install Rust
|
||||
if: steps.cache-updater.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
if ! command -v rustup &> /dev/null; then
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
source $HOME/.cargo/env
|
||||
fi
|
||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Rust Cache (Compiler Internals)
|
||||
if: steps.cache-updater.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src/actions/updater -> target"
|
||||
|
||||
- name: Build Updater
|
||||
if: steps.cache-updater.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cargo build --release --manifest-path .actions/updater/Cargo.toml
|
||||
cargo build --release --manifest-path src/actions/updater/Cargo.toml --bin updater
|
||||
mkdir -p ./updater-bin
|
||||
cp .actions/updater/target/release/updater ./updater-bin/updater
|
||||
cp src/actions/updater/target/release/updater ./updater-bin/updater
|
||||
|
||||
- name: Cache Packwiz Binary
|
||||
id: cache-go
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: go-bin-packwiz-v1-${{ runner.os }}
|
||||
|
||||
- name: Setup Go
|
||||
if: steps.cache-go.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/actions/setup-go@v5
|
||||
with:
|
||||
go-version: 'stable'
|
||||
cache: true
|
||||
|
||||
- name: Install Packwiz
|
||||
if: steps.cache-go.outputs.cache-hit != 'true'
|
||||
run: go install github.com/packwiz/packwiz@latest
|
||||
|
||||
- name: Add Go bin to PATH
|
||||
run: echo "$HOME/go/bin" >> $GITHUB_PATH
|
||||
|
||||
|
||||
- name: Cache Packwiz Downloads
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/packwiz
|
||||
key: packwiz-cache-${{ runner.os }}-${{ github.run_id }}
|
||||
restore-keys: |
|
||||
packwiz-cache-${{ runner.os }}-
|
||||
|
||||
- name: Run Updater
|
||||
id: rust-update
|
||||
@@ -65,10 +80,10 @@ jobs:
|
||||
chmod +x ./updater-bin/updater
|
||||
./updater-bin/updater
|
||||
|
||||
- name: Run Shell Update (Fallback)
|
||||
- name: Run Shell Fallback
|
||||
if: steps.rust-update.outcome == 'failure'
|
||||
run: |
|
||||
echo "Rust Updater failed. Falling back to Shell..."
|
||||
echo "Rust updater failed, falling back to shell..."
|
||||
chmod +x ./modpacks/update-refresh.sh
|
||||
./modpacks/update-refresh.sh
|
||||
|
||||
|
||||
@@ -2,14 +2,17 @@ name: "Build"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- 'modpacks/**'
|
||||
- 'resourcepacks/**'
|
||||
- 'datapacks/**'
|
||||
- 'packsquash.toml'
|
||||
- 'src/actions/builder/**'
|
||||
pull_request:
|
||||
branches: [ "main" ]
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- 'modpacks/**'
|
||||
- 'datapacks/**'
|
||||
- 'src/actions/builder/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
@@ -23,68 +26,124 @@ jobs:
|
||||
filter: blob:none
|
||||
sparse-checkout: |
|
||||
modpacks
|
||||
resourcepacks
|
||||
datapacks
|
||||
.actions
|
||||
src/actions/builder
|
||||
|
||||
- name: Meta
|
||||
id: meta
|
||||
run: |
|
||||
CHANGED_FILE=$(git diff-tree --no-commit-id --name-only -r HEAD | grep -E '^(modpacks|resourcepacks|datapacks)/' | head -n 1)
|
||||
if [ -z "$CHANGED_FILE" ]; then CHANGED_FILE="modpacks/simply-legacy/"; fi
|
||||
set -eu
|
||||
echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
||||
CHANGED=$(git diff-tree --no-commit-id --name-only -r HEAD)
|
||||
|
||||
PACK_ID=$(echo "$CHANGED_FILE" | cut -d'/' -f2)
|
||||
SHORT_SHA=$(git rev-parse --short HEAD)
|
||||
CLEAN_NAME=$(echo "$PACK_ID" | sed 's/-/ /g' | awk '{for(i=1;i<=NF;i++)sub(/./,toupper(substr($i,1,1)),$i)}1')
|
||||
CHANGED_MODPACKS=$(echo "$CHANGED" | grep -E '^modpacks/[^/]+/' | cut -d/ -f1-2 | sort -u || true)
|
||||
CHANGED_DATAPACKS=$(echo "$CHANGED" | grep -E '^datapacks/[^/]+/' | cut -d/ -f1-2 | sort -u || true)
|
||||
|
||||
echo "short_sha=$SHORT_SHA" >> $GITHUB_OUTPUT
|
||||
echo "pack_name=$CLEAN_NAME" >> $GITHUB_OUTPUT
|
||||
{
|
||||
echo "has_modpacks=$( [ -n "$CHANGED_MODPACKS" ] && echo true || echo false )"
|
||||
echo "has_datapacks=$( [ -n "$CHANGED_DATAPACKS" ] && echo true || echo false )"
|
||||
echo "changed_modpacks<<EOF"
|
||||
echo "$CHANGED_MODPACKS"
|
||||
echo "EOF"
|
||||
echo "changed_datapacks<<EOF"
|
||||
echo "$CHANGED_DATAPACKS"
|
||||
echo "EOF"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Cache Go Binaries
|
||||
- name: Cache Builder Binaries
|
||||
id: cache-builder
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./builder-bin
|
||||
key: builder-v2-${{ runner.os }}-${{ hashFiles('src/actions/builder/**/*.rs', 'src/actions/builder/Cargo.toml', 'src/actions/builder/Cargo.lock') }}
|
||||
|
||||
- name: Install Rust
|
||||
if: steps.cache-builder.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Rust Cache
|
||||
if: steps.cache-builder.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src/actions/builder -> target"
|
||||
|
||||
- name: Build Binaries
|
||||
if: steps.cache-builder.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cargo build --release --manifest-path src/actions/builder/Cargo.toml --bin builder --bin minify-json
|
||||
mkdir -p ./builder-bin
|
||||
cp src/actions/builder/target/release/{builder,minify-json} ./builder-bin/
|
||||
chmod +x ./builder-bin/builder ./builder-bin/minify-json
|
||||
|
||||
- name: Cache Packwiz
|
||||
if: steps.meta.outputs.has_modpacks == 'true'
|
||||
id: cache-go
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: go-bin-v1-${{ runner.os }}
|
||||
key: go-bin-packwiz-v1-${{ runner.os }}
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 'stable'
|
||||
cache: true
|
||||
if: steps.meta.outputs.has_modpacks == 'true' && steps.cache-go.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/actions/setup-go@v5
|
||||
with: { go-version: 'stable', cache: true }
|
||||
|
||||
- name: Install Packwiz
|
||||
run: |
|
||||
if [ ! -f "$HOME/go/bin/packwiz" ]; then
|
||||
go install github.com/packwiz/packwiz@latest
|
||||
fi
|
||||
echo "$HOME/go/bin" >> $GITHUB_PATH
|
||||
if: steps.meta.outputs.has_modpacks == 'true' && steps.cache-go.outputs.cache-hit != 'true'
|
||||
run: go install github.com/packwiz/packwiz@latest
|
||||
|
||||
- name: Cache Builder
|
||||
id: cache-builder
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./builder
|
||||
key: builder-v26.4.0-${{ runner.os }}-${{ hashFiles('.actions/builder/src/**') }}
|
||||
- name: Add Go bin to PATH
|
||||
if: steps.meta.outputs.has_modpacks == 'true'
|
||||
run: echo "$HOME/go/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Setup Builder
|
||||
if: steps.cache-builder.outputs.cache-hit != 'true'
|
||||
- name: Minify datapacks
|
||||
if: steps.meta.outputs.has_datapacks == 'true'
|
||||
run: |
|
||||
if ! command -v cargo &> /dev/null; then
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
source $HOME/.cargo/env
|
||||
fi
|
||||
cd .actions/builder
|
||||
cargo build --release
|
||||
cp target/release/builder ../../builder
|
||||
set -eu
|
||||
while IFS= read -r pack; do
|
||||
[ -n "$pack" ] || continue
|
||||
target="$pack/content"
|
||||
[ -d "$target" ] || continue
|
||||
(
|
||||
cp -r "$target" "$target.original"
|
||||
./builder-bin/minify-json "$target"
|
||||
) &
|
||||
done <<< "${{ steps.meta.outputs.changed_datapacks }}"
|
||||
wait
|
||||
|
||||
- name: Minify modpacks
|
||||
if: steps.meta.outputs.has_modpacks == 'true'
|
||||
run: |
|
||||
set -eu
|
||||
while IFS= read -r pack; do
|
||||
[ -n "$pack" ] || continue
|
||||
for sub in "$pack"/*-{mr,cf}/config; do
|
||||
[ -d "$sub" ] || continue
|
||||
(
|
||||
cp -r "$sub" "$sub.original"
|
||||
./builder-bin/minify-json "$sub"
|
||||
) &
|
||||
done
|
||||
done <<< "${{ steps.meta.outputs.changed_modpacks }}"
|
||||
wait
|
||||
|
||||
- name: Run Build
|
||||
run: ./builder-bin/builder "${{ steps.meta.outputs.short_sha }}"
|
||||
|
||||
- name: Restore JSON sources
|
||||
if: always()
|
||||
run: |
|
||||
chmod +x ./builder
|
||||
./builder ${{ steps.meta.outputs.short_sha }}
|
||||
set -eu
|
||||
for orig in datapacks/*/content.original modpacks/*/*-{mr,cf}/config.original; do
|
||||
[ -d "$orig" ] || continue
|
||||
target="${orig%.original}"
|
||||
rm -rf "$target"
|
||||
mv "$orig" "$target"
|
||||
done
|
||||
|
||||
- name: Upload
|
||||
uses: https://code.forgejo.org/actions/upload-artifact@v3
|
||||
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||||
with:
|
||||
name: "${{ steps.meta.outputs.pack_name }}-${{ steps.meta.outputs.short_sha }}"
|
||||
path: artifacts/
|
||||
name: "build-${{ steps.meta.outputs.short_sha }}"
|
||||
path: "artifacts/"
|
||||
compression-level: 0
|
||||
@@ -1,46 +1,74 @@
|
||||
name: Linter
|
||||
name: "Linter"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- 'modpacks/**/*.json'
|
||||
- 'modpacks/**/*.mcmeta'
|
||||
- 'modpacks/**/*.toml'
|
||||
- 'resourcepacks/**/*.json'
|
||||
- 'datapacks/**/*.json'
|
||||
- 'datapacks/**/*.mcmeta'
|
||||
- 'src/actions/somnus/**'
|
||||
pull_request:
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- 'modpacks/**/*.json'
|
||||
- 'modpacks/**/*.mcmeta'
|
||||
- 'modpacks/**/*.toml'
|
||||
- 'datapacks/**/*.json'
|
||||
- 'datapacks/**/*.mcmeta'
|
||||
- 'src/actions/somnus/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: technocality
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 2
|
||||
filter: blob:none
|
||||
sparse-checkout: |
|
||||
modpacks
|
||||
datapacks
|
||||
src/actions/somnus
|
||||
|
||||
- name: Ensure rust
|
||||
run: |
|
||||
if ! command -v cargo &> /dev/null; then
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||
fi
|
||||
|
||||
- name: Cache Cargo
|
||||
- name: Cache Linter Binaries
|
||||
id: cache-linter
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
.actions/somnus/core/target
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('.actions/somnus/core/Cargo.toml') }}
|
||||
path: ./linter-bin
|
||||
key: linter-v1-${{ runner.os }}-${{ hashFiles('src/actions/somnus/core/**/*.rs', 'src/actions/somnus/core/Cargo.toml', 'src/actions/somnus/core/Cargo.lock') }}
|
||||
|
||||
- name: Run Somnus Linters
|
||||
- name: Rust Cache
|
||||
if: steps.cache-linter.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src/actions/somnus/core -> target"
|
||||
|
||||
- name: Install Rust
|
||||
if: steps.cache-linter.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Build Linters
|
||||
if: steps.cache-linter.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
source "$HOME/.cargo/env" || true
|
||||
cargo build --release \
|
||||
--manifest-path src/actions/somnus/core/Cargo.toml \
|
||||
--bin json-linter --bin toml-linter
|
||||
|
||||
echo "rnning JSON Linter..."
|
||||
cargo run --manifest-path ./.actions/somnus/core/Cargo.toml --bin json-linter
|
||||
mkdir -p ./linter-bin
|
||||
|
||||
echo "running TOML Linter..."
|
||||
cargo run --manifest-path ./.actions/somnus/core/Cargo.toml --bin toml-linter
|
||||
cp src/actions/somnus/core/target/release/json-linter ./linter-bin/
|
||||
cp src/actions/somnus/core/target/release/toml-linter ./linter-bin/
|
||||
|
||||
- name: Run Linters
|
||||
run: |
|
||||
chmod +x ./linter-bin/json-linter ./linter-bin/toml-linter
|
||||
echo "Running JSON Linter..."
|
||||
./linter-bin/json-linter
|
||||
echo "Running TOML Linter..."
|
||||
./linter-bin/toml-linter
|
||||
|
||||
|
||||
45
.forgejo/workflows/png-opt.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
name: "PNG Optimization"
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
bulk-nuke:
|
||||
runs-on: technocality
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 1
|
||||
filter: blob:none
|
||||
|
||||
- name: Rust Cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
shared-key: "maintenance-tools"
|
||||
|
||||
- name: Install Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Cache oxipng
|
||||
id: cache-oxipng
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cargo/bin/oxipng
|
||||
key: ${{ runner.os }}-oxipng-v1
|
||||
|
||||
- name: Install oxipng
|
||||
if: steps.cache-oxipng.outputs.cache-hit != 'true'
|
||||
run: cargo install oxipng
|
||||
|
||||
- name: Run Optimization
|
||||
run: |
|
||||
oxipng -r -o 4 -v --strip all "resourcepacks/" "modpacks/" "datapacks/"
|
||||
|
||||
- name: Commit Optimized Images
|
||||
uses: https://github.com/EndBug/add-and-commit@v9
|
||||
with:
|
||||
author_name: forgejo-actions[bot]
|
||||
author_email: omo50@noreply.nostalgica.net
|
||||
message: 'chore: bulk png optimization'
|
||||
add: '**/*.png'
|
||||
@@ -1,44 +0,0 @@
|
||||
name: "png tyhingh"
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
bulk-nuke:
|
||||
runs-on: technocality
|
||||
steps:
|
||||
- name: grab
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
filter: blob:none
|
||||
|
||||
- name: install
|
||||
run: |
|
||||
if ! command -v cargo &> /dev/null; then
|
||||
echo "Rust not found. Bootstrapping..."
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
fi
|
||||
|
||||
. "$HOME/.cargo/env"
|
||||
|
||||
if ! command -v oxipng &> /dev/null; then
|
||||
echo "Installing oxipng..."
|
||||
cargo install oxipng
|
||||
fi
|
||||
|
||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: comp
|
||||
run: |
|
||||
. "$HOME/.cargo/env"
|
||||
|
||||
oxipng -r -o 4 -v --strip all "resourcepacks/"
|
||||
|
||||
- name: commit
|
||||
uses: https://github.com/EndBug/add-and-commit@v9
|
||||
with:
|
||||
author_name: forgejo-actions[bot]
|
||||
author_email: omo50@noreply.nostalgica.net
|
||||
message: 'chore: bulk'
|
||||
add: 'resourcepacks/**/*.png'
|
||||
@@ -2,67 +2,242 @@ name: "Publish"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- 'modpacks/**/manifest.json'
|
||||
- 'datapacks/**/manifest.json'
|
||||
- 'resourcepacks/**/manifest.json'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
detect:
|
||||
runs-on: technocality
|
||||
outputs:
|
||||
manifests: ${{ steps.find.outputs.manifests }}
|
||||
has_manifests: ${{ steps.find.outputs.has_manifests }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 2
|
||||
filter: blob:none
|
||||
sparse-checkout: |
|
||||
modpacks
|
||||
datapacks
|
||||
|
||||
- name: Find changed manifests
|
||||
id: find
|
||||
run: |
|
||||
set -eu
|
||||
MANIFESTS=$(git diff-tree --no-commit-id --name-only -r HEAD \
|
||||
| grep -E '^(modpacks|datapacks)/.*/manifest\.json$' || true)
|
||||
|
||||
if [ -z "$MANIFESTS" ]; then
|
||||
echo "has_manifests=false" >> "$GITHUB_OUTPUT"
|
||||
echo "manifests=[]" >> "$GITHUB_OUTPUT"
|
||||
echo "no changed manifests."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
JSON="["
|
||||
first=1
|
||||
while IFS= read -r line; do
|
||||
[ -z "$line" ] && continue
|
||||
if [ "$first" -eq 1 ]; then
|
||||
first=0
|
||||
else
|
||||
JSON="${JSON},"
|
||||
fi
|
||||
JSON="${JSON}\"${line}\""
|
||||
done <<< "$MANIFESTS"
|
||||
JSON="${JSON}]"
|
||||
|
||||
echo "has_manifests=true" >> "$GITHUB_OUTPUT"
|
||||
echo "manifests=${JSON}" >> "$GITHUB_OUTPUT"
|
||||
echo "manifests to publish: ${JSON}"
|
||||
|
||||
publish:
|
||||
needs: detect
|
||||
if: always()
|
||||
runs-on: technocality
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
manifest: ${{ fromJson(needs.detect.outputs.manifests) }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
filter: blob:none
|
||||
sparse-checkout: |
|
||||
modpacks
|
||||
datapacks
|
||||
src/actions/publish
|
||||
src/actions/builder
|
||||
tools/changelog
|
||||
tools/manifest
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
go-version: 'stable'
|
||||
node-version: '20'
|
||||
|
||||
- name: Install packwiz
|
||||
run: |
|
||||
if ! command -v packwiz &> /dev/null; then
|
||||
echo "packwiz not found, installing..."
|
||||
go install github.com/packwiz/packwiz@latest
|
||||
else
|
||||
echo "packwiz already installed."
|
||||
fi
|
||||
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
|
||||
- name: Validate Manifest
|
||||
run: npx tsx tools/manifest/validate.ts "${{ matrix.manifest }}"
|
||||
|
||||
- name: Cache Publisher Binary
|
||||
id: cache-publisher
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./publisher-bin
|
||||
key: publisher-v2-${{ runner.os }}-${{ hashFiles('src/actions/publish/**/*.rs', 'src/actions/publish/Cargo.toml', 'src/actions/publish/Cargo.lock') }}
|
||||
|
||||
- name: Cache Minify-JSON Binary
|
||||
id: cache-minify
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./builder-bin
|
||||
key: builder-v2-${{ runner.os }}-${{ hashFiles('src/actions/builder/**/*.rs', 'src/actions/builder/Cargo.toml', 'src/actions/builder/Cargo.lock') }}
|
||||
|
||||
- name: Install Rust
|
||||
run: |
|
||||
if ! command -v cargo &> /dev/null; then
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
fi
|
||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||
if: steps.cache-publisher.outputs.cache-hit != 'true' || steps.cache-minify.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Rust Cache (publish)
|
||||
if: steps.cache-publisher.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src/actions/publish -> target"
|
||||
|
||||
- name: Rust Cache (builder)
|
||||
if: steps.cache-minify.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src/actions/builder -> target"
|
||||
|
||||
- name: Build Publisher
|
||||
if: steps.cache-publisher.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
. "$HOME/.cargo/env"
|
||||
cargo build --release --manifest-path .actions/publish/Cargo.toml
|
||||
cargo build --release --manifest-path src/actions/publish/Cargo.toml --bin publish
|
||||
mkdir -p ./publisher-bin
|
||||
cp src/actions/publish/target/release/publish ./publisher-bin/publish
|
||||
|
||||
- name: Run Rust Publisher
|
||||
- name: Build minify-json
|
||||
if: steps.cache-minify.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cargo build --release --manifest-path src/actions/builder/Cargo.toml --bin minify-json
|
||||
mkdir -p ./builder-bin
|
||||
cp src/actions/builder/target/release/minify-json ./builder-bin/minify-json
|
||||
|
||||
- name: Generate Changelog
|
||||
id: changelog
|
||||
run: npx tsx tools/changelog/generate-changelog.ts "${{ matrix.manifest }}"
|
||||
|
||||
- name: Cache Packwiz Binaries
|
||||
id: cache-go
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: go-bin-packwiz-v1-${{ runner.os }}
|
||||
|
||||
- name: Setup Go
|
||||
if: steps.cache-go.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/actions/setup-go@v5
|
||||
with:
|
||||
go-version: 'stable'
|
||||
cache: true
|
||||
|
||||
- name: Install Packwiz
|
||||
if: steps.cache-go.outputs.cache-hit != 'true'
|
||||
run: go install github.com/packwiz/packwiz@latest
|
||||
|
||||
- name: Add Go bin to PATH
|
||||
run: echo "$HOME/go/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Cache Packwiz Downloads
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/packwiz
|
||||
key: packwiz-cache-${{ runner.os }}-${{ github.run_id }}
|
||||
restore-keys: |
|
||||
packwiz-cache-${{ runner.os }}-
|
||||
|
||||
- name: Minify JSON configs
|
||||
run: |
|
||||
set -eu
|
||||
chmod +x ./builder-bin/minify-json
|
||||
MANIFEST='${{ matrix.manifest }}'
|
||||
PACK_DIR="$(dirname "$MANIFEST")"
|
||||
if [[ "$MANIFEST" == datapacks/* ]]; then
|
||||
TARGET="${PACK_DIR}/content"
|
||||
if [ -d "$TARGET" ]; then
|
||||
cp -r "$TARGET" "${TARGET}.original"
|
||||
./builder-bin/minify-json "$TARGET"
|
||||
fi
|
||||
elif [[ "$MANIFEST" == modpacks/* ]]; then
|
||||
for subdir in "$PACK_DIR"/*-mr "$PACK_DIR"/*-cf; do
|
||||
[ -d "$subdir" ] || continue
|
||||
CONFIG_DIR="$subdir/config"
|
||||
if [ -d "$CONFIG_DIR" ]; then
|
||||
cp -r "$CONFIG_DIR" "${CONFIG_DIR}.original"
|
||||
./builder-bin/minify-json "$CONFIG_DIR"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
- name: Run Publisher
|
||||
id: meta
|
||||
run: |
|
||||
export PATH=$PATH:$(go env GOPATH)/bin:$HOME/.cargo/bin
|
||||
./.actions/publish/target/release/publish
|
||||
chmod +x ./publisher-bin/publish
|
||||
./publisher-bin/publish "${{ matrix.manifest }}"
|
||||
|
||||
- name: Upload
|
||||
if: "steps.meta.outputs.mr_id != ''"
|
||||
- name: Restore JSON sources
|
||||
if: always()
|
||||
run: |
|
||||
set -eu
|
||||
MANIFEST='${{ matrix.manifest }}'
|
||||
PACK_DIR="$(dirname "$MANIFEST")"
|
||||
if [[ "$MANIFEST" == datapacks/* ]]; then
|
||||
TARGET="${PACK_DIR}/content"
|
||||
if [ -d "${TARGET}.original" ]; then
|
||||
rm -rf "$TARGET"
|
||||
mv "${TARGET}.original" "$TARGET"
|
||||
fi
|
||||
elif [[ "$MANIFEST" == modpacks/* ]]; then
|
||||
for subdir in "$PACK_DIR"/*-mr "$PACK_DIR"/*-cf; do
|
||||
[ -d "$subdir" ] || continue
|
||||
CONFIG_DIR="$subdir/config"
|
||||
if [ -d "${CONFIG_DIR}.original" ]; then
|
||||
rm -rf "$CONFIG_DIR"
|
||||
mv "${CONFIG_DIR}.original" "$CONFIG_DIR"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
- name: Upload to Modrinth
|
||||
if: steps.meta.outputs.mr_id != ''
|
||||
uses: https://github.com/Kir-Antipov/mc-publish@v3.3
|
||||
with:
|
||||
modrinth-id: ${{ steps.meta.outputs.mr_id }}
|
||||
modrinth-token: ${{ secrets.MR }}
|
||||
modrinth-files: "${{ github.workspace }}/${{ steps.meta.outputs.path }}/artifacts/*.mrpack"
|
||||
curseforge-id: ${{ steps.meta.outputs.cf_id }}
|
||||
curseforge-token: ${{ secrets.CF }}
|
||||
curseforge-files: "${{ github.workspace }}/${{ steps.meta.outputs.path }}/artifacts/*.zip"
|
||||
files: "${{ github.workspace }}/${{ steps.meta.outputs.path }}/artifacts/*.mrpack"
|
||||
name: "${{ steps.meta.outputs.name }}"
|
||||
version: "${{ steps.meta.outputs.ver }}"
|
||||
changelog: "${{ steps.meta.outputs.notes }}"
|
||||
loaders: ${{ steps.meta.outputs.type == 'modpack' && 'fabric' || 'minecraft' }}
|
||||
version-type: ${{ steps.meta.outputs.release_type }}
|
||||
changelog: "${{ steps.changelog.outputs.notes }}"
|
||||
loaders: ${{ steps.meta.outputs.type == 'modpack' && steps.meta.outputs.loader || 'minecraft' }}
|
||||
game-versions: "${{ steps.meta.outputs.mc }}"
|
||||
|
||||
- name: Upload to CurseForge
|
||||
if: steps.meta.outputs.cf_id != ''
|
||||
uses: https://github.com/Kir-Antipov/mc-publish@v3.3
|
||||
with:
|
||||
curseforge-id: ${{ steps.meta.outputs.cf_id }}
|
||||
curseforge-token: ${{ secrets.CF }}
|
||||
files: "${{ github.workspace }}/${{ steps.meta.outputs.path }}/artifacts/*.zip"
|
||||
name: "${{ steps.meta.outputs.name }}"
|
||||
version: "${{ steps.meta.outputs.ver }}"
|
||||
version-type: ${{ steps.meta.outputs.release_type }}
|
||||
changelog: "${{ steps.changelog.outputs.notes }}"
|
||||
loaders: ${{ steps.meta.outputs.type == 'modpack' && steps.meta.outputs.loader || 'minecraft' }}
|
||||
game-versions: "${{ steps.meta.outputs.mc }}"
|
||||
@@ -1,11 +1,13 @@
|
||||
name: "Core Sync"
|
||||
name: "Sync"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- 'modpacks/lce-core/**/mods/**'
|
||||
- 'modpacks/lce-core/**/resourcepacks/**'
|
||||
- 'modpacks/lce-core/**/resources/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
@@ -14,23 +16,67 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
fetch-depth: 1
|
||||
filter: blob:none
|
||||
sparse-checkout: |
|
||||
modpacks
|
||||
src/actions/coresync
|
||||
|
||||
- name: Setup Environment
|
||||
|
||||
- name: Cache CoreSync Binary
|
||||
id: cache-coresync
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./coresync-bin
|
||||
key: coresync-v1-${{ runner.os }}-${{ hashFiles('src/actions/coresync/**/*.rs', 'src/actions/coresync/Cargo.toml', 'src/actions/coresync/Cargo.lock') }}
|
||||
|
||||
- name: Install Rust
|
||||
if: steps.cache-coresync.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Rust Cache
|
||||
if: steps.cache-coresync.outputs.cache-hit != 'true'
|
||||
uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src/actions/coresync -> target"
|
||||
|
||||
- name: Build CoreSync
|
||||
if: steps.cache-coresync.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env"
|
||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
|
||||
cargo build --release --manifest-path src/actions/coresync/Cargo.toml --bin coresync
|
||||
mkdir -p ./coresync-bin
|
||||
cp src/actions/coresync/target/release/coresync ./coresync-bin/coresync
|
||||
|
||||
- name: Cache Packwiz Binaries
|
||||
id: cache-go
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: go-bin-packwiz-v1-${{ runner.os }}
|
||||
|
||||
- name: Setup Go
|
||||
if: steps.cache-go.outputs.cache-hit != 'true'
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 'stable'
|
||||
cache: true
|
||||
|
||||
- name: Install Packwiz
|
||||
if: steps.cache-go.outputs.cache-hit != 'true'
|
||||
run: go install github.com/packwiz/packwiz@latest
|
||||
|
||||
- name: Add Go bin to PATH
|
||||
run: echo "$HOME/go/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Run CoreSync
|
||||
run: |
|
||||
export PATH=$PATH:$(go env GOPATH)/bin:$HOME/.cargo/bin
|
||||
cargo run --release --manifest-path .actions/coresync/Cargo.toml
|
||||
chmod +x ./coresync-bin/coresync
|
||||
./coresync-bin/coresync
|
||||
|
||||
- name: Commit and Push
|
||||
uses: https://github.com/EndBug/add-and-commit@v9
|
||||
with:
|
||||
author_name: forgejo-actions[bot]
|
||||
author_email: omo50@noreply.nostalgica.net
|
||||
message: 'actions: auto-update (${{ github.workflow }})'
|
||||
message: 'actions: sync'
|
||||
add: 'modpacks'
|
||||
29
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -31,7 +31,7 @@ body:
|
||||
label: Minecraft Version
|
||||
description: What version of Minecraft are you running?
|
||||
options:
|
||||
- 26.1.1
|
||||
- 26.1.2
|
||||
- 1.21.10
|
||||
- 1.21.8
|
||||
- 1.21.5
|
||||
@@ -65,34 +65,9 @@ body:
|
||||
- N/A
|
||||
- Re-Console+ Modrinth
|
||||
- Re-Console+ Curseforge
|
||||
- Re-Console Modrinth
|
||||
- Re-Console Curseforge
|
||||
- Rekindled Legacy (List TU in your bug report)
|
||||
- Simply Legacy Modrinth
|
||||
- Simply Legacy Curseforge
|
||||
default: 0
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: rp
|
||||
attributes:
|
||||
label: Resource Pack
|
||||
description: What Resource Pack are you using?
|
||||
options:
|
||||
- N/A
|
||||
- 1080p KBM tooltips
|
||||
- Extra Controller Tooltips
|
||||
- Faithful Legacy
|
||||
- Hybrid Aspects
|
||||
- Legacy Modpack Resources
|
||||
- Legacy Panorama
|
||||
- Legacy Titles
|
||||
- Legacy Skin Packs
|
||||
- Modern Skin Packs
|
||||
- Modern How to Play
|
||||
- Ore4J
|
||||
- Tutorial World Add-on
|
||||
- Vanilla Live
|
||||
- Rekindled Legacy (List TU in your bug report)
|
||||
default: 0
|
||||
validations:
|
||||
required: true
|
||||
|
||||
21
.github/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Lasting Legacy
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
1
.github/workflows/stale.yml
vendored
@@ -24,7 +24,6 @@ jobs:
|
||||
stale-issue-label: 'stale'
|
||||
stale-pr-label: 'stale'
|
||||
remove-issue-stale-when-updated: 'true'
|
||||
exempt-issue-labels: 'enhancement,bug,minor bug'
|
||||
days-before-issue-stale: 90
|
||||
days-before-issue-close: 30
|
||||
days-before-pr-stale: 90
|
||||
|
||||
8
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
# General
|
||||
build
|
||||
.DS_Store
|
||||
*.exe
|
||||
@@ -7,19 +8,20 @@ refresh.sh
|
||||
*.zip
|
||||
modpacks/**/packitup.schema.json
|
||||
modpacks/**/Logs
|
||||
modpacks/refresh-all.sh
|
||||
modpacks/update-all.sh
|
||||
modpacks/export-all.sh
|
||||
artifacts/
|
||||
|
||||
# IntelliJ
|
||||
.idea/
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
# Visual Studio Code
|
||||
.settings/
|
||||
.vscode/
|
||||
.classpath
|
||||
.project
|
||||
|
||||
# Logs and errors
|
||||
hs_err_*.log
|
||||
replay_*.log
|
||||
|
||||
@@ -6,3 +6,6 @@ The Content Monorepo has some guidelines and suggestions to keep the commits of
|
||||
|
||||
Please adhere to the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) handbook for writing your commits. Please also tag your commits according to the project, ie, if you are fixing an issue on Re-Console Plus, do fix(rc-plus), or fix(rc):.
|
||||
|
||||
### CI/CD
|
||||
Please refer to the README.md for instructions and explanations on our CI/CD.
|
||||
|
||||
|
||||
19
README.md
@@ -10,30 +10,35 @@ This repository hosts all the source and files for all of our resource packs, da
|
||||
## Contributing
|
||||
First, please refer to the CONTRIBUTING.md file in the repository. This will tell you some basics
|
||||
|
||||
## Actions
|
||||
# Actions
|
||||
The repository makes usage of Forgejo actions, for CI/CD and general QoL improvements to our dev process.
|
||||
|
||||
## Current Functions
|
||||
- Auto Publish
|
||||
- Auto Update and Auto Refresh*
|
||||
- Auto Build
|
||||
- Datapack and Resourcepack validator
|
||||
- JSON Linter
|
||||
- Resource Pack Compressor**
|
||||
- TOML Linter
|
||||
- PNG Compressor
|
||||
*for modpacks only
|
||||
**on publish and build only
|
||||
|
||||
### Using Auto Publish (for devs)
|
||||
Every project in the repo must have a manifest.json. This manifest.json specifies stuff that our publish.yml then uses to auto publish. Once it is set up, you may simply bump version in the manifest.json and it will update across platforms.
|
||||
|
||||
### Incremental Builds
|
||||
### Using Builds
|
||||
All builds in the repo occur when a commit happens to their specific subdirectory. This produces a build that is slightly different than the source, as our build script auto-minifies JSON files. These builds are the same as what Auto Publish uses.
|
||||
|
||||
Only the pack modified within a commit will be built. So if you modified something in, lets say Simply Legacy, your commit would only build Simply Legacy, and not Re-Console or 2000's Edition.
|
||||
License
|
||||
|
||||
### Credits
|
||||
justfile from skywardmc, stale.yml from JEI. Licensed under MIT
|
||||
### Using Linters
|
||||
All linters automatically run on commit, and will fail if the modified JSON/TOML is broken. This is helpful in the case of making a minor mistake in syntax/
|
||||
|
||||
## Credits
|
||||
justfile forked from skywardmc, stale.yml from JEI. Both licensed under MIT.
|
||||
|
||||
# License
|
||||
As all of these projects are different, the license may vary. Most packs are under GPL-3.0, or MIT. Please check the pack folder or the pages on official sites (Modrinth, CurseForge) for the license.
|
||||
|
||||
All* actions are licensed under AGPL-3.0 and written in Rust.
|
||||
All* actions are licensed under AGPL-3.0 and written in Rust/Typescript.
|
||||
|
||||
@@ -280,7 +280,7 @@ metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/classic-minecraft-icon.pw.toml"
|
||||
hash = "db6272058880a20924b3778464e1588d4f348c7024f3cc9a6d0b32bf5fc14737"
|
||||
hash = "1473319f81e2b30566824087116e2e36d8e0a2bf8e8da89028fe50f73d9d36c2"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
@@ -325,7 +325,7 @@ metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/entity-model-features.pw.toml"
|
||||
hash = "cbd461bced027900f6e97d74f4032bcc4c8894710719ac2c75a7469c51529b4e"
|
||||
hash = "92c83bd7e56f89170be549904a0ba2dd54de6349b0fefa5ffd48d50db071da05"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
@@ -335,17 +335,17 @@ metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/entitytexturefeatures.pw.toml"
|
||||
hash = "6c2898c991b34f7a1f83c2fb88a965ee5218dee0e6ca9bb1ac15c4f779cfc4bc"
|
||||
hash = "8c091c9a660b84f152e47c0d835d8865463ad79636264a68ca6d312399b46538"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/esf.pw.toml"
|
||||
hash = "6b0b4bf6142ff8a72758914307684881bd7b545884bb8049f8cf6442670ec8a3"
|
||||
hash = "d5bd5b2083fec2916f222a7ba6ec1223c6c5e1aed441ed9f7a83415ccaa7a954"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/fabric-api.pw.toml"
|
||||
hash = "a42d6d03c6764f037181b023e0b4e3c5574fdda5f9b837d1ca753dfa4180e1d5"
|
||||
hash = "7494d3ab9667c29b19cc48b65e39b3623bd6c521e4357526176f71ace8ec17eb"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
name = "Classic Minecraft Icon"
|
||||
filename = "classic-minecraft-icon-v1.1.6-mc1.21.11-fabric.jar"
|
||||
filename = "classic-minecraft-icon-v1.1.9-mc1.21.11-fabric.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/NTUQ8Yoi/versions/LnAYc0VW/classic-minecraft-icon-v1.1.6-mc1.21.11-fabric.jar"
|
||||
url = "https://cdn.modrinth.com/data/NTUQ8Yoi/versions/O0XHvT7j/classic-minecraft-icon-v1.1.9-mc1.21.11-fabric.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "7b8500c11b85d2f8acad627ec8d7ce2028f292b8f61d0edc47deba6d3b531b647d26631fe70e204ba6e97ebdb4c96f77303e9ecb95b18f683eb1708866c93d18"
|
||||
hash = "7b77baf99fab7073db7646e51b4f1ad307d72ef8b6ea6981cb68b9c23548aec58a4bcdc4eca128a2e4c90ccddbfd5610b46a49787e74e05c090c9b4d5a166e93"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "NTUQ8Yoi"
|
||||
version = "LnAYc0VW"
|
||||
version = "O0XHvT7j"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
name = "[EMF] Entity Model Features"
|
||||
filename = "entity_model_features_1.21-fabric-3.0.17.jar"
|
||||
filename = "entity_model_features_1.21-fabric-3.1.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/4I1XuqiY/versions/SppB0oZD/entity_model_features_1.21-fabric-3.0.17.jar"
|
||||
url = "https://cdn.modrinth.com/data/4I1XuqiY/versions/b3EE4NV0/entity_model_features_1.21-fabric-3.1.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "e043d5536b65a64589706219308c99a5fafea9a78d151479d48d36878ab74597f0b1503556b7c75ebc7f1f84ac225414021f55d4ae8782366f124a336ea993d7"
|
||||
hash = "9f7264bde37bac47e70e9b7c1f10b263501817e540911d8e4339855ae1c5e872620a60dc42840a1553d5ed2c3abbc61c4087f0df1fe73d77ef72a6722c25e849"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "4I1XuqiY"
|
||||
version = "SppB0oZD"
|
||||
version = "b3EE4NV0"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
name = "[ETF] Entity Texture Features"
|
||||
filename = "entity_texture_features_1.21-fabric-7.0.13.jar"
|
||||
filename = "entity_texture_features_1.21-fabric-7.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/BVzZfTc1/versions/Ljja99fh/entity_texture_features_1.21-fabric-7.0.13.jar"
|
||||
url = "https://cdn.modrinth.com/data/BVzZfTc1/versions/udcdeUXw/entity_texture_features_1.21-fabric-7.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "3103cd75c795ea99e5f5a0381860fd44e4d9b71c6eac5976d2c2c024ff207bf7418c5ebb7bbf68125daf28945af4c1a1bf8c20d45a8d8e65ab93cc0aea2c8213"
|
||||
hash = "ee8ef05dab35287e4df9a5fac0f2b6379da217d79756620d9e5243e72f6e9033ada6f677fd520e70c4c655df0c8c808d785f7f14d25af0c00371047311602c40"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "BVzZfTc1"
|
||||
version = "Ljja99fh"
|
||||
version = "udcdeUXw"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
name = "[ESF] Entity Sound Features"
|
||||
filename = "entity_sound_features_1.21-fabric-0.7.1.jar"
|
||||
filename = "entity_sound_features_1.21-fabric-0.8.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/IMuO8COj/versions/8L9Wg3qG/entity_sound_features_1.21-fabric-0.7.1.jar"
|
||||
url = "https://cdn.modrinth.com/data/IMuO8COj/versions/pBknhZb8/entity_sound_features_1.21-fabric-0.8.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "7324d22292f65e390a0473f9d82d33910bdc107972b4ffa077cd42173f1d9f2932938b80c671f55ada89650663781da7cd9f28dd3041d279ec2fed51176fda2c"
|
||||
hash = "d74bb8a2499653cc2bbb0ec4b22752296dcf3a0df0d159e39063a959892cc9173d6729df626e73f6ff797fb16cf885da374c918e00acefb854d694ab4292c875"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "IMuO8COj"
|
||||
version = "8L9Wg3qG"
|
||||
version = "pBknhZb8"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
name = "Fabric API"
|
||||
filename = "fabric-api-0.116.10+1.21.1.jar"
|
||||
filename = "fabric-api-0.116.11+1.21.1.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/ID8pq1x1/fabric-api-0.116.10%2B1.21.1.jar"
|
||||
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/IpaMcBLh/fabric-api-0.116.11%2B1.21.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "cc8f207ca861e91c0d42f7d57b4448c2b265bbfb20f38182fad2dd14d3f4fbbbfa5c85b562ddaad33797f67fce8080b2283cdd6fa194f4ace18969d670643454"
|
||||
hash = "756b8c086f4c911d012f2eb70ca792aef0439503b31bc52026b82830870a94d472de30d61a6a0a9988c02b8462d9c47aa6baa6cd84da1eaf00edb77249b3c413"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "P7dR8mSH"
|
||||
version = "ID8pq1x1"
|
||||
version = "IpaMcBLh"
|
||||
|
||||
@@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0"
|
||||
[index]
|
||||
file = "index.toml"
|
||||
hash-format = "sha256"
|
||||
hash = "603f5f8ccc2b3e88effda1df064bce262da6b0081913a988109c0f901070fd25"
|
||||
hash = "5d9c0ede60886883abcaf086522705a189cce5337de8b7e93a4aa94127816273"
|
||||
|
||||
[versions]
|
||||
fabric = "0.18.4"
|
||||
|
||||
2413
modpacks/2k/26.1.2-mr/index.toml
Normal file
13
modpacks/2k/26.1.2-mr/mods/badoptimizations.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "BadOptimizations"
|
||||
filename = "BadOptimizations-2.4.1-26.1-fabric.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/g96Z4WVZ/versions/gjIvugXc/BadOptimizations-2.4.1-26.1-fabric.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "efba144dec306767da3aceb4b179e093daa60bc4c0ba6295d64c166092b8f62e4a4cc63a5bae76fb4c608f1dffa8ecd70c6884e48c804915e1b37ef042e31a99"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "g96Z4WVZ"
|
||||
version = "gjIvugXc"
|
||||
13
modpacks/2k/26.1.2-mr/mods/classic-minecraft-icon.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Classic Minecraft Icon"
|
||||
filename = "classic-minecraft-icon-v1.1.9-mc26.1.2.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/NTUQ8Yoi/versions/8zIAoDld/classic-minecraft-icon-v1.1.9-mc26.1.2.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "11c9dc1da369b25221c935fd081d7283ae42fe0ccd1835f0fdf786213207fa1b94e20173abafd9a3d654cf22e7ff7e87be7c87dab25753592b22cf57bb522ed9"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "NTUQ8Yoi"
|
||||
version = "8zIAoDld"
|
||||
13
modpacks/2k/26.1.2-mr/mods/collective.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Collective"
|
||||
filename = "collective-26.1.2-8.20.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/e0M1UDsY/versions/9smDW0F0/collective-26.1.2-8.20.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "c85e99789bbda8a29e81d393fe16f1fd7a5ba90c26bfea7373220acf640f975df108ce8de6a00ab02eae1f43405ffd1006d4b3c6dc70abe003e41329b37165a9"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "e0M1UDsY"
|
||||
version = "9smDW0F0"
|
||||
13
modpacks/2k/26.1.2-mr/mods/crash-assistant.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Crash Assistant"
|
||||
filename = "CrashAssistant-fabric-26.1-1.11.8.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/ix1qq8Ux/versions/klyidF0J/CrashAssistant-fabric-26.1-1.11.8.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "b91da396eb5c52595d1f9320b2afc75d19881f29a1d1ab3c244a3900e066f653c7d1523548704c747bc7784374673fffa685d54ee6fe1ea8f7beb849a74191ea"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "ix1qq8Ux"
|
||||
version = "klyidF0J"
|
||||
13
modpacks/2k/26.1.2-mr/mods/cubes-without-borders.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Cubes Without Borders"
|
||||
filename = "cwb-4.0.2+26.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/ETlrkaYF/versions/j51j0ihr/cwb-4.0.2%2B26.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "8fc2add98175896c837fde208e163d62cf3da16f211c94fceaf5653eca15465aef3b30ad64e1e02c25bf9b13cce0d7cefeb587a64ac86268e2efb610b0e6b787"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "ETlrkaYF"
|
||||
version = "j51j0ihr"
|
||||
13
modpacks/2k/26.1.2-mr/mods/custom-player-models.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Customizable Player Models"
|
||||
filename = "CustomPlayerModels-Fabric-26.1-0.6.25a.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/h1E7sQNL/versions/9XSH49uv/CustomPlayerModels-Fabric-26.1-0.6.25a.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "a44a4f06c20e8b7dc13067a9ebf92e6b853dd7c90af03b6c8522198c0ec0fd86de32a36545ebc7d72475073ebb29ca5de7bc147f78eb906027d7001370047e20"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "h1E7sQNL"
|
||||
version = "9XSH49uv"
|
||||
13
modpacks/2k/26.1.2-mr/mods/entity-model-features.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "[EMF] Entity Model Features"
|
||||
filename = "entity_model_features_26.1-fabric-3.1.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/4I1XuqiY/versions/awv0MUoS/entity_model_features_26.1-fabric-3.1.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "813f146d5f551706be15eaa3dfa902d74198bb050b75be37019eda0609c54f200d4eb523773ec791712882a38019478314bddd15ec9771b56cd62c27687a8eb8"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "4I1XuqiY"
|
||||
version = "awv0MUoS"
|
||||
13
modpacks/2k/26.1.2-mr/mods/entityculling.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Entity Culling"
|
||||
filename = "entityculling-fabric-1.10.1-mc26.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/NNAgCjsB/versions/NaRJu6ah/entityculling-fabric-1.10.1-mc26.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "028bfa99f6eda39f78fa8b700a95d6b05c0349545560596176291efe69c3d0061642c7af5b8063e326e1b311de3b055e10efcae1ed254075baf2d91c6921c011"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "NNAgCjsB"
|
||||
version = "NaRJu6ah"
|
||||
13
modpacks/2k/26.1.2-mr/mods/entitytexturefeatures.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "[ETF] Entity Texture Features"
|
||||
filename = "entity_texture_features_26.1-fabric-7.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/BVzZfTc1/versions/pzW03Rc5/entity_texture_features_26.1-fabric-7.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "9d740d901f691a5b9fb1eaa4acec488c9ceba2fa90742a8ca66f60a303b28c388cd2da8a6d2aac1aef3b0783bfeea5843657938bd6a5810e468ef7be12bd2b8b"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "BVzZfTc1"
|
||||
version = "pzW03Rc5"
|
||||
13
modpacks/2k/26.1.2-mr/mods/esf.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "[ESF] Entity Sound Features"
|
||||
filename = "entity_sound_features_26.1-fabric-0.8.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/IMuO8COj/versions/LJAqeCUv/entity_sound_features_26.1-fabric-0.8.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "148647c2a457da26b4657cbb461d376de527c94815098210230d6cca56042c598f3ca1e98772c85b087bc291e09358a2eb22ce84e9dcc44a801eb108a14c7526"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "IMuO8COj"
|
||||
version = "LJAqeCUv"
|
||||
13
modpacks/2k/26.1.2-mr/mods/fabric-api.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Fabric API"
|
||||
filename = "fabric-api-0.146.1+26.1.2.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/tnmuHGZA/fabric-api-0.146.1%2B26.1.2.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "cd8a760ecb976127036f8047c1e968f264aea9cd9deca60e6e9cb57496b1b5cca79873c59b7ab46b92f49ac22f49a2b695bb6ebe61653c8df6954e97b8836890"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "P7dR8mSH"
|
||||
version = "tnmuHGZA"
|
||||
13
modpacks/2k/26.1.2-mr/mods/fabric-language-kotlin.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Fabric Language Kotlin"
|
||||
filename = "fabric-language-kotlin-1.13.11+kotlin.2.3.21.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/Ha28R6CL/versions/2i87JpYj/fabric-language-kotlin-1.13.11%2Bkotlin.2.3.21.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "fa5ed2613f7216999cc0c5ddc71906f082a32b52507d7160acbdcf0eb8de12993ba302e5afde6681d025008ecc66c7533fc0c21deb672ef681b2194fb9be4245"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "Ha28R6CL"
|
||||
version = "2i87JpYj"
|
||||
13
modpacks/2k/26.1.2-mr/mods/legacy4j.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Legacy4J"
|
||||
filename = "Legacy4J-26.1.2-1.9-pre-1-fabric.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/gHvKJofA/versions/ki7nwBNI/Legacy4J-26.1.2-1.9-pre-1-fabric.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "15157c45a41d618990bfa8cd67effa942e3c86075201d7c0244a6de3fac4dd8188cc4fc650f579f6eefefadda6a07b8c8d8a3da31567ea57d912070d3c2b6d0b"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "gHvKJofA"
|
||||
version = "ki7nwBNI"
|
||||
13
modpacks/2k/26.1.2-mr/mods/moderner-beta.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Moderner Beta"
|
||||
filename = "moderner-beta-fabric-4.1.3+26.1.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/xkrdwmh2/versions/TEDqQ2dV/moderner-beta-fabric-4.1.3%2B26.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "e81f2153a14ead22bb9737d5fbe6ca01b8f2cd6315cb2393c3a9e2293dcc7a3d7f2106f1424e6be31c8d3c24fd889655afe4dd8d2b1c3d8aa61fe6902cc0a1a6"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "xkrdwmh2"
|
||||
version = "TEDqQ2dV"
|
||||
13
modpacks/2k/26.1.2-mr/mods/preferred-gamerules.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Preferred Gamerules"
|
||||
filename = "preferred-gamerules-1.1.1+1.19.4.jar"
|
||||
side = "server"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/kKib77nY/versions/WEWDEB3T/preferred-gamerules-1.1.1%2B1.19.4.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "e3fc77d9ca08a7f882ced44fbf54108fe01e5e7c5021a705f018ccee3263ab6e07ce7b17c7ee030f542212127fa08a1f1b888616c9a08f2a2c6894f036ee3411"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "kKib77nY"
|
||||
version = "WEWDEB3T"
|
||||
13
modpacks/2k/26.1.2-mr/mods/simple-menu.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Simple Menu"
|
||||
filename = "simplemenu-26.1.2-2.1.jar"
|
||||
side = "client"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/6pdhya1q/versions/4IWjiFcM/simplemenu-26.1.2-2.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "c738f8f5f35337deabe24cb387580c69aa28dc8c82a196df9524bb252907d68c1427ec46a51a07cc0cf60bacbeff8d58f536dc0a99db0aa4c9bd3bee802fcce5"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "6pdhya1q"
|
||||
version = "4IWjiFcM"
|
||||
13
modpacks/2k/26.1.2-mr/mods/simple-resource-loader.pw.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
name = "Simple Resource Loader"
|
||||
filename = "simpleresourceloader-1.1.0+26.1.jar"
|
||||
side = "both"
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/5e65FGXQ/versions/O80uSS6o/simpleresourceloader-1.1.0%2B26.1.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "35ac6d8964a968fff99fb7558e23deb0377e1473a72efebf7a355646fd5a5749c541af954fabeacd8b5e859233db5becf1f98412d9aaaf2f83a36e4cc39b2d1f"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "5e65FGXQ"
|
||||
version = "O80uSS6o"
|
||||
181
modpacks/2k/26.1.2-mr/options.txt
Normal file
@@ -0,0 +1,181 @@
|
||||
version:3955
|
||||
ao:false
|
||||
biomeBlendRadius:1
|
||||
enableVsync:true
|
||||
entityDistanceScaling:1.0
|
||||
entityShadows:false
|
||||
forceUnicodeFont:false
|
||||
japaneseGlyphVariants:false
|
||||
fov:0.0
|
||||
fovEffectScale:1.0
|
||||
darknessEffectScale:1.0
|
||||
glintSpeed:0.5
|
||||
glintStrength:0.75
|
||||
prioritizeChunkUpdates:0
|
||||
fullscreen:false
|
||||
gamma:0.5
|
||||
graphicsMode:0
|
||||
guiScale:0
|
||||
maxFps:40
|
||||
mipmapLevels:0
|
||||
narrator:0
|
||||
particles:0
|
||||
reducedDebugInfo:false
|
||||
renderClouds:"fast"
|
||||
renderDistance:5
|
||||
simulationDistance:5
|
||||
screenEffectScale:1.0
|
||||
soundDevice:""
|
||||
autoJump:false
|
||||
operatorItemsTab:false
|
||||
autoSuggestions:true
|
||||
chatColors:true
|
||||
chatLinks:true
|
||||
chatLinksPrompt:true
|
||||
discrete_mouse_scroll:false
|
||||
invertYMouse:false
|
||||
realmsNotifications:true
|
||||
showSubtitles:false
|
||||
directionalAudio:false
|
||||
touchscreen:false
|
||||
bobView:true
|
||||
toggleCrouch:false
|
||||
toggleSprint:false
|
||||
darkMojangStudiosBackground:false
|
||||
hideLightningFlashes:false
|
||||
hideSplashTexts:false
|
||||
mouseSensitivity:0.5
|
||||
damageTiltStrength:1.0
|
||||
highContrast:false
|
||||
narratorHotkey:true
|
||||
resourcePacks:["vanilla","fabric","programmer_art","file/PACP_Base_Release.zip","file/Pre 1.13 Water.zip","srl_rp/Modpack Resources","legacy:legacy_resources"]
|
||||
incompatibleResourcePacks:["badoptimizations","cpm","entity_model_features","entity_sound_features","entity_texture_features","factory_api","legacy","modernfix","sodiumleafculling","yet_another_config_lib_v3","file/Alexa\u0027s Classic Villagers.zip"]
|
||||
lastServer:
|
||||
lang:en_us
|
||||
chatVisibility:0
|
||||
chatOpacity:1.0
|
||||
chatLineSpacing:1.0
|
||||
textBackgroundOpacity:0.5
|
||||
backgroundForChatOnly:true
|
||||
hideServerAddress:false
|
||||
advancedItemTooltips:false
|
||||
pauseOnLostFocus:true
|
||||
overrideWidth:1024
|
||||
overrideHeight:768
|
||||
chatHeightFocused:1.0
|
||||
chatDelay:0.0
|
||||
chatHeightUnfocused:0.4375
|
||||
chatScale:1.0
|
||||
chatWidth:1.0
|
||||
notificationDisplayTime:1.0
|
||||
useNativeTransport:true
|
||||
mainHand:"right"
|
||||
attackIndicator:1
|
||||
tutorialStep:movement
|
||||
mouseWheelSensitivity:1.0
|
||||
rawMouseInput:true
|
||||
glDebugVerbosity:1
|
||||
skipMultiplayerWarning:false
|
||||
hideMatchedNames:true
|
||||
joinedFirstServer:false
|
||||
hideBundleTutorial:false
|
||||
syncChunkWrites:false
|
||||
showAutosaveIndicator:true
|
||||
allowServerListing:true
|
||||
onlyShowSecureChat:false
|
||||
panoramaScrollSpeed:1.0
|
||||
telemetryOptInExtra:false
|
||||
onboardAccessibility:false
|
||||
menuBackgroundBlurriness:0
|
||||
key_key.attack:key.mouse.left
|
||||
key_key.use:key.mouse.right
|
||||
key_key.forward:key.keyboard.w
|
||||
key_key.left:key.keyboard.a
|
||||
key_key.back:key.keyboard.s
|
||||
key_key.right:key.keyboard.d
|
||||
key_key.jump:key.keyboard.space
|
||||
key_key.sneak:key.keyboard.left.shift
|
||||
key_key.sprint:key.keyboard.left.control
|
||||
key_key.drop:key.keyboard.q
|
||||
key_legacy.key.inventory:key.keyboard.i
|
||||
key_key.chat:key.keyboard.t
|
||||
key_key.playerlist:key.keyboard.tab
|
||||
key_key.pickItem:key.mouse.middle
|
||||
key_key.command:key.keyboard.slash
|
||||
key_key.socialInteractions:key.keyboard.p
|
||||
key_key.screenshot:key.keyboard.f2
|
||||
key_key.togglePerspective:key.keyboard.f5
|
||||
key_key.smoothCamera:key.keyboard.unknown
|
||||
key_key.fullscreen:key.keyboard.f11
|
||||
key_key.spectatorOutlines:key.keyboard.unknown
|
||||
key_key.swapOffhand:key.keyboard.unknown
|
||||
key_key.saveToolbarActivator:key.keyboard.c
|
||||
key_key.loadToolbarActivator:key.keyboard.x
|
||||
key_key.advancements:key.keyboard.l
|
||||
key_key.hotbar.1:key.keyboard.1
|
||||
key_key.hotbar.2:key.keyboard.2
|
||||
key_key.hotbar.3:key.keyboard.3
|
||||
key_key.hotbar.4:key.keyboard.4
|
||||
key_key.hotbar.5:key.keyboard.5
|
||||
key_key.hotbar.6:key.keyboard.6
|
||||
key_key.hotbar.7:key.keyboard.7
|
||||
key_key.hotbar.8:key.keyboard.8
|
||||
key_key.hotbar.9:key.keyboard.9
|
||||
key_key.dynamic_fps.toggle_forced:key.keyboard.unknown
|
||||
key_key.dynamic_fps.toggle_disabled:key.keyboard.unknown
|
||||
key_key.nostalgic_tweaks.open_config:key.keyboard.o
|
||||
key_key.nostalgic_tweaks.toggle_fog:key.keyboard.unknown
|
||||
key_key.nostalgic_tweaks.stop_song:key.keyboard.unknown
|
||||
key_key.nostalgic_tweaks.next_song:key.keyboard.unknown
|
||||
key_key.nostalgic_tweaks.toggle_weather:key.keyboard.unknown
|
||||
key_key.cpm.gestureMenu:key.keyboard.g
|
||||
key_key.cpm.renderToggle:key.keyboard.unknown
|
||||
key_key.cpm.qa_1:key.keyboard.unknown
|
||||
key_key.cpm.qa_2:key.keyboard.unknown
|
||||
key_key.cpm.qa_3:key.keyboard.unknown
|
||||
key_key.cpm.qa_4:key.keyboard.unknown
|
||||
key_key.cpm.qa_5:key.keyboard.unknown
|
||||
key_key.cpm.qa_6:key.keyboard.unknown
|
||||
key_key.cpm.qa_7:key.keyboard.unknown
|
||||
key_key.cpm.qa_8:key.keyboard.unknown
|
||||
key_key.cpm.qa_9:key.keyboard.unknown
|
||||
key_key.cpm.qa_10:key.keyboard.unknown
|
||||
key_key.cpm.qa_11:key.keyboard.unknown
|
||||
key_key.cpm.qa_12:key.keyboard.unknown
|
||||
key_key.cpm.qa_13:key.keyboard.unknown
|
||||
key_key.cpm.qa_14:key.keyboard.unknown
|
||||
key_key.cpm.qa_15:key.keyboard.unknown
|
||||
key_key.cpm.qa_16:key.keyboard.unknown
|
||||
key_key.entityculling.toggle:key.keyboard.unknown
|
||||
key_legacy.key.crafting:key.keyboard.e
|
||||
key_legacy.key.host_options:key.keyboard.h
|
||||
key_legacy.key.legacy4JSettings:key.keyboard.y
|
||||
key_legacy.key.cycleHeldLeft:key.keyboard.page.down
|
||||
key_legacy.key.cycleHeldRight:key.keyboard.page.up
|
||||
key_legacy.key.toggleCursor:key.keyboard.unknown
|
||||
key_legacy.key.flyUp:key.keyboard.up
|
||||
key_legacy.key.flyDown:key.keyboard.down
|
||||
key_legacy.key.flyLeft:key.keyboard.left
|
||||
key_legacy.key.flyRight:key.keyboard.right
|
||||
key_key.modmenu.open_menu:key.keyboard.unknown
|
||||
key_iris.keybind.reload:key.keyboard.r
|
||||
key_iris.keybind.toggleShaders:key.keyboard.k
|
||||
key_iris.keybind.shaderPackSelection:key.keyboard.o
|
||||
key_iris.keybind.wireframe:key.keyboard.unknown
|
||||
soundCategory_master:1.0
|
||||
soundCategory_music:1.0
|
||||
soundCategory_record:1.0
|
||||
soundCategory_weather:1.0
|
||||
soundCategory_block:1.0
|
||||
soundCategory_hostile:1.0
|
||||
soundCategory_neutral:1.0
|
||||
soundCategory_player:1.0
|
||||
soundCategory_ambient:1.0
|
||||
soundCategory_voice:1.0
|
||||
modelPart_cape:true
|
||||
modelPart_jacket:true
|
||||
modelPart_left_sleeve:true
|
||||
modelPart_right_sleeve:true
|
||||
modelPart_left_pants_leg:true
|
||||
modelPart_right_pants_leg:true
|
||||
modelPart_hat:true
|
||||
17
modpacks/2k/26.1.2-mr/pack.toml
Normal file
@@ -0,0 +1,17 @@
|
||||
name = "2000s-edition"
|
||||
author = "NicSonic"
|
||||
version = "26.05"
|
||||
pack-format = "packwiz:1.1.0"
|
||||
|
||||
[index]
|
||||
file = "index.toml"
|
||||
hash-format = "sha256"
|
||||
hash = "27153bd248290efcb0da0662b2ad9bd1bbdd2028d25b911f032a17dfe30d4330"
|
||||
|
||||
[versions]
|
||||
fabric = "0.19.2"
|
||||
minecraft = "26.1.2"
|
||||
|
||||
[options]
|
||||
acceptable-game-versions = ["1.21.1"]
|
||||
datapack-folder = "./resources/datapack/required/"
|
||||
11
modpacks/2k/26.1.2-mr/resource_albums.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"default": "minecraft",
|
||||
"order": [
|
||||
"minecraft",
|
||||
"minecraft_classic",
|
||||
"template_album",
|
||||
"template_album_1",
|
||||
"template_album_2",
|
||||
"template_album_3"
|
||||
]
|
||||
}
|
||||
16
modpacks/2k/26.1.2-mr/resource_albums/dreamcast.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"packs": [
|
||||
"vanilla",
|
||||
"fabric",
|
||||
"programmer_art",
|
||||
"file/PACP_Base_Release.zip",
|
||||
"file/Pre 1.13 Water.zip",
|
||||
"file/Alexa's Classic Villagers.zip",
|
||||
"srl_rp/Modpack Resources",
|
||||
"file/Dreamcast Edition"
|
||||
],
|
||||
"displayPack": "file/Dreamcast Edition",
|
||||
"id": "template_album_3",
|
||||
"name": "Dreamcast Edition",
|
||||
"description": "This aims to make it more like the Dreamcast system."
|
||||
}
|
||||
16
modpacks/2k/26.1.2-mr/resource_albums/gc.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"packs": [
|
||||
"vanilla",
|
||||
"fabric",
|
||||
"programmer_art",
|
||||
"file/PACP_Base_Release.zip",
|
||||
"file/Pre 1.13 Water.zip",
|
||||
"file/Alexa's Classic Villagers.zip",
|
||||
"srl_rp/Modpack Resources",
|
||||
"file/GameCube Edition"
|
||||
],
|
||||
"displayPack": "file/GameCube Edition",
|
||||
"id": "template_album_2",
|
||||
"name": "GameCube Edition",
|
||||
"description": "This aims to make it more like the GameCube system."
|
||||
}
|
||||
22
modpacks/2k/26.1.2-mr/resource_albums/minecraft.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"icon": "legacy:icon/minecraft_classic",
|
||||
"background": "legacy:icon/minecraft_classic_background",
|
||||
"packs": [
|
||||
"vanilla",
|
||||
"fabric",
|
||||
"programmer_art",
|
||||
"file/PACP_Base_Release.zip",
|
||||
"file/Pre 1.13 Water.zip",
|
||||
"file/Alexa's Classic Villagers.zip",
|
||||
"srl_rp/Modpack Resources"
|
||||
],
|
||||
"displayPack": "legacy:icon/minecraft_classic",
|
||||
"id": "minecraft",
|
||||
"version": 2,
|
||||
"name": {
|
||||
"translate": "legacy.menu.albums.resource.minecraft"
|
||||
},
|
||||
"description": {
|
||||
"translate": "legacy.menu.albums.resource.minecraft.description"
|
||||
}
|
||||
}
|
||||
20
modpacks/2k/26.1.2-mr/resource_albums/minecraft_classic.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"background": "legacy:icon/background",
|
||||
"packs": [
|
||||
"vanilla",
|
||||
"legacy:console_aspects",
|
||||
"fabric",
|
||||
"legacy:legacy_waters",
|
||||
"file/Modpack Resources",
|
||||
"file/Modern Titles"
|
||||
],
|
||||
"displayPack": "vanilla",
|
||||
"id": "minecraft_classic",
|
||||
"version": 2,
|
||||
"name": {
|
||||
"translate": "legacy.menu.albums.resource.minecraft_classic"
|
||||
},
|
||||
"description": {
|
||||
"translate": "legacy.menu.albums.resource.minecraft_classic.description"
|
||||
}
|
||||
}
|
||||
16
modpacks/2k/26.1.2-mr/resource_albums/ps2.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"packs": [
|
||||
"vanilla",
|
||||
"fabric",
|
||||
"programmer_art",
|
||||
"file/PACP_Base_Release.zip",
|
||||
"file/Pre 1.13 Water.zip",
|
||||
"file/Alexa's Classic Villagers.zip",
|
||||
"srl_rp/Modpack Resources",
|
||||
"file/PlayStation 2 Edition"
|
||||
],
|
||||
"displayPack": "file/PlayStation 2 Edition",
|
||||
"id": "template_album_1",
|
||||
"name": "PlayStation® 2 Edition",
|
||||
"description": "This aims to make it more like the PlayStation® 2 system."
|
||||
}
|
||||
16
modpacks/2k/26.1.2-mr/resource_albums/xbox.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"packs": [
|
||||
"vanilla",
|
||||
"fabric",
|
||||
"programmer_art",
|
||||
"file/PACP_Base_Release.zip",
|
||||
"file/Pre 1.13 Water.zip",
|
||||
"file/Alexa's Classic Villagers.zip",
|
||||
"srl_rp/Modpack Resources",
|
||||
"file/Xbox Edition"
|
||||
],
|
||||
"displayPack": "file/Xbox Edition",
|
||||
"id": "template_album",
|
||||
"name": "Xbox Edition",
|
||||
"description": "This aims to make it more like the Xbox system."
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"brands": [
|
||||
"legacy:textures/gui/intro/loading3.png",
|
||||
"legacy:textures/gui/intro/loading.png",
|
||||
"legacy:textures/gui/intro/loading1.png",
|
||||
"legacy:textures/gui/intro/loading2.png",
|
||||
"legacy:textures/gui/intro/loading3.png",
|
||||
"legacy:textures/gui/intro/eula.png",
|
||||
"legacy:textures/gui/intro/ce.png",
|
||||
"legacy:textures/gui/intro/nr.png",
|
||||
"legacy:textures/gui/intro/mojang.png",
|
||||
"legacy:textures/gui/intro/4j.png"
|
||||
],
|
||||
"background": "legacy:textures/gui/intro/background.png",
|
||||
"brandDuration": 2000,
|
||||
"fadeIn": 0.06,
|
||||
"fadeOut": 0.06,
|
||||
"crossFade": true
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"legacy.loadingTip.coop": "Plug in extra controllers to your Dreamcast and press the START button on them to join a game at any time.",
|
||||
"legacy.loadingTip.mineconCalifornia": "Make sure your VMU isn't full!",
|
||||
"legacy.menu.autoSave_countdown": "Saving to Controller 1 VMU in %s...",
|
||||
"legacy.menu.autoSave_message": "This game has a level autosave feature. When you see the icon above displayed, the game is saving your data.\nPlease do not power off your Dreamcast system, remove your VMU, or unplug Controller 1 while this icon is on-screen.",
|
||||
"legacy.menu.choose_user": "Choose Modem or Local User",
|
||||
"legacy.menu.choose_user.account_options": "User Options",
|
||||
"legacy.menu.choose_user.account_options.delete": "Delete User",
|
||||
"legacy.menu.choose_user.account_options.edit": "Edit User",
|
||||
"legacy.menu.choose_user.account_options_message": "What would you like to do with this user?",
|
||||
"legacy.menu.choose_user.add": "Add User",
|
||||
"legacy.menu.choose_user.add.encryption": "User Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.absent": "Without Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.password": "Password",
|
||||
"legacy.menu.choose_user.add.encryption.password_message": "Enter the desired encryption password",
|
||||
"legacy.menu.choose_user.add.encryption.present": "With Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.visible_password": "Visible",
|
||||
"legacy.menu.choose_user.add.encryption_message": "Would you like to use an encryption with a password? This is highly recommended to maintain your login secure.",
|
||||
"legacy.menu.choose_user.direct_login": "Direct Modem Connection",
|
||||
"legacy.menu.choose_user.failed": "Failed to Connect\n%s",
|
||||
"legacy.menu.choose_user.failed.incorrect_password": "Incorrect Password",
|
||||
"legacy.menu.choose_user.failed.notPurchased": "CD Key Invalid",
|
||||
"legacy.menu.choose_user.failed.timeout": "Timeout",
|
||||
"legacy.menu.choose_user.failed.unauthorized": "Unauthorized",
|
||||
"legacy.menu.choose_user.failed_login": "Failed to connect. Please return to your game.",
|
||||
"legacy.menu.choose_user.login_in": "Connecting via Modem",
|
||||
"legacy.menu.choose_user.login_successful": "Modem connection successful. Now, you can return to the game.",
|
||||
"legacy.menu.choose_user.microsoft": "Modem Account",
|
||||
"legacy.menu.choose_user.offline": "Local",
|
||||
"legacy.menu.choose_user.offline.username": "Username",
|
||||
"legacy.menu.choose_user.offline.username_message": "Enter the desired local username",
|
||||
"legacy.menu.choose_user.stage.acquiringMCAccessToken": "Obtaining Minecraft: Dreamcast Edition CD Key",
|
||||
"legacy.menu.choose_user.stage.acquiringMSAccessToken": "Obtaining Online Access Key",
|
||||
"legacy.menu.choose_user.stage.acquiringMSAuthCode": "Obtaining Online Auth Code",
|
||||
"legacy.menu.choose_user.stage.acquiringXboxAccessToken": "Obtaining Access Key",
|
||||
"legacy.menu.choose_user.stage.acquiringXboxXstsToken": "Obtaining Xsts Key",
|
||||
"legacy.menu.choose_user.stage.finalizing": "Finalizing Modem connection",
|
||||
"legacy.menu.choose_user.success": "Welcome, %s!",
|
||||
"legacy.menu.choose_user_message": "What type of connection would you like to do?"
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 346 B |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 313 B |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 34,
|
||||
"description": "Changes some of the default textures for 2000s Edition to be more like the Dreamcast."
|
||||
}
|
||||
}
|
||||
BIN
modpacks/2k/26.1.2-mr/resourcepacks/Dreamcast Edition/pack.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"legacy.loadingTip.coop": "Plug in extra controllers to your GameCube and press the START button on them to join a game at any time.",
|
||||
"legacy.loadingTip.mineconCalifornia": "Make sure your Memory Card isn't full!",
|
||||
"legacy.menu.autoSave_countdown": "Saving to MEMORY CARD 1 in %s...",
|
||||
"legacy.menu.autoSave_message": "This game has a level autosave feature. When you see the icon above displayed, the game is saving your data.\nPlease do not power off your GameCube system, or remove MEMORY CARD 1 while this icon is on-screen.",
|
||||
"legacy.menu.choose_user": "Choose Online or Local User",
|
||||
"legacy.menu.choose_user.account_options": "User Options",
|
||||
"legacy.menu.choose_user.account_options.delete": "Delete User",
|
||||
"legacy.menu.choose_user.account_options.edit": "Edit User",
|
||||
"legacy.menu.choose_user.account_options_message": "What would you like to do with this user?",
|
||||
"legacy.menu.choose_user.add": "Add User",
|
||||
"legacy.menu.choose_user.add.encryption": "User Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.absent": "Without Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.password": "Password",
|
||||
"legacy.menu.choose_user.add.encryption.password_message": "Enter the desired encryption password",
|
||||
"legacy.menu.choose_user.add.encryption.present": "With Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.visible_password": "Visible",
|
||||
"legacy.menu.choose_user.add.encryption_message": "Would you like to use an encryption with a password? This is highly recommended to maintain your login secure.",
|
||||
"legacy.menu.choose_user.direct_login": "Direct Online Connection",
|
||||
"legacy.menu.choose_user.failed": "Failed to Connect\n%s",
|
||||
"legacy.menu.choose_user.failed.incorrect_password": "Incorrect Password",
|
||||
"legacy.menu.choose_user.failed.notPurchased": "CD Key Invalid",
|
||||
"legacy.menu.choose_user.failed.timeout": "Timeout",
|
||||
"legacy.menu.choose_user.failed.unauthorized": "Unauthorized",
|
||||
"legacy.menu.choose_user.failed_login": "Failed to connect. Please return to your game.",
|
||||
"legacy.menu.choose_user.login_in": "Logging in",
|
||||
"legacy.menu.choose_user.login_successful": "Login successful. Now, you can return to the game.",
|
||||
"legacy.menu.choose_user.microsoft": "Online Account",
|
||||
"legacy.menu.choose_user.offline": "Offline",
|
||||
"legacy.menu.choose_user.offline.username": "Username",
|
||||
"legacy.menu.choose_user.offline.username_message": "Enter the desired offline username",
|
||||
"legacy.menu.choose_user.stage.acquiringMCAccessToken": "Obtaining Minecraft: PlayStation®2 Edition CD Key",
|
||||
"legacy.menu.choose_user.stage.acquiringMSAccessToken": "Obtaining Online Access Key",
|
||||
"legacy.menu.choose_user.stage.acquiringMSAuthCode": "Obtaining Online Auth Code",
|
||||
"legacy.menu.choose_user.stage.acquiringXboxAccessToken": "Obtaining Access Key",
|
||||
"legacy.menu.choose_user.stage.acquiringXboxXstsToken": "Obtaining Xsts Key",
|
||||
"legacy.menu.choose_user.stage.finalizing": "Finalizing connection",
|
||||
"legacy.menu.choose_user.success": "Welcome, %s!",
|
||||
"legacy.menu.choose_user_message": "What type of connection would you like to do?"
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 346 B |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 240 B |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 34,
|
||||
"description": "Changes some of the default textures for 2000s Edition to be more like the GameCube."
|
||||
}
|
||||
}
|
||||
BIN
modpacks/2k/26.1.2-mr/resourcepacks/GameCube Edition/pack.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 64 KiB |
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"texture":{
|
||||
"blur": true
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 70 KiB |
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"texture":{
|
||||
"blur": true
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 66 KiB |
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"texture":{
|
||||
"blur": true
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 66 KiB |
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"texture":{
|
||||
"blur": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 34,
|
||||
"description": "Replaces the Blocky Titles to the ones that we have in Current Legacy Console Edition. (This is meant for Modern Minecraft Textures)"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"legacy.loadingTip.coop": "Plug in extra controllers to your PlayStation® 2 and press the START button on them to join a game at any time.",
|
||||
"legacy.loadingTip.mineconCalifornia": "Make sure your Memory Card isn't full!",
|
||||
"legacy.menu.autoSave_countdown": "Saving to MEMORY CARD 1 in %s...",
|
||||
"legacy.menu.autoSave_message": "This game has a level autosave feature. When you see the icon above displayed, the game is saving your data.\nPlease do not reset your PlayStation® 2 system, or remove MEMORY CARD 1 while this icon is on-screen.",
|
||||
"legacy.menu.choose_user": "Choose User",
|
||||
"legacy.menu.choose_user.account_options": "User Options",
|
||||
"legacy.menu.choose_user.account_options.delete": "Delete User",
|
||||
"legacy.menu.choose_user.account_options.edit": "Edit User",
|
||||
"legacy.menu.choose_user.account_options_message": "What would you like to do with this user?",
|
||||
"legacy.menu.choose_user.add": "Add User",
|
||||
"legacy.menu.choose_user.add.encryption": "User Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.absent": "Without Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.password": "Passcode",
|
||||
"legacy.menu.choose_user.add.encryption.password_message": "Enter the desired encryption passcode",
|
||||
"legacy.menu.choose_user.add.encryption.present": "With Encryption",
|
||||
"legacy.menu.choose_user.add.encryption.visible_password": "Visible",
|
||||
"legacy.menu.choose_user.add.encryption_message": "Would you like to use an encryption with a password? This is highly recommended to maintain your login secure.",
|
||||
"legacy.menu.choose_user.direct_login": "Direct LAN Connection",
|
||||
"legacy.menu.choose_user.failed": "Failed to Connect\n%s",
|
||||
"legacy.menu.choose_user.failed.incorrect_password": "Incorrect Password",
|
||||
"legacy.menu.choose_user.failed.notPurchased": "CD Key Invalid",
|
||||
"legacy.menu.choose_user.failed.timeout": "Timeout",
|
||||
"legacy.menu.choose_user.failed.unauthorized": "Unauthorized",
|
||||
"legacy.menu.choose_user.failed_login": "Failed to connect. Please return to your game.",
|
||||
"legacy.menu.choose_user.login_in": "Logging in",
|
||||
"legacy.menu.choose_user.login_successful": "Online connection successful! Now, you can return to the game.",
|
||||
"legacy.menu.choose_user.microsoft": "Online Account",
|
||||
"legacy.menu.choose_user.offline": "Local",
|
||||
"legacy.menu.choose_user.offline.username": "Username",
|
||||
"legacy.menu.choose_user.offline.username_message": "Enter the desired local username",
|
||||
"legacy.menu.choose_user.stage.acquiringMCAccessToken": "Obtaining Minecraft: PlayStation® 2 Edition CD Key",
|
||||
"legacy.menu.choose_user.stage.acquiringMSAccessToken": "Obtaining Online Access Key",
|
||||
"legacy.menu.choose_user.stage.acquiringMSAuthCode": "Obtaining Online Auth Code",
|
||||
"legacy.menu.choose_user.stage.acquiringXboxAccessToken": "Obtaining Access Key",
|
||||
"legacy.menu.choose_user.stage.acquiringXboxXstsToken": "Obtaining Xsts Key",
|
||||
"legacy.menu.choose_user.stage.finalizing": "Finalizing LAN connection",
|
||||
"legacy.menu.choose_user.success": "Welcome, %s!",
|
||||
"legacy.menu.choose_user_message": "What type of connection would you like to do?"
|
||||
}
|
||||
|
After Width: | Height: | Size: 120 B |