Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 1.20.5 support #7

Merged
merged 1 commit into from
Apr 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 30 additions & 11 deletions res/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.

import init, { create_state, generate, is_valid_mod_id, list_all_minecraft_versions, supports_neoforge, to_mod_id, validate_mod_id } from "./templateer.js";
import init, {
create_state,
generate,
is_valid_mod_id,
list_all_minecraft_versions,
supports_forge,
supports_neoforge,
to_mod_id,
validate_mod_id
} from "./templateer.js";
await init();

const state = create_state();
Expand Down Expand Up @@ -96,7 +105,7 @@ function updateState() {
state.project_type = getProjectType();
state.mapping_set = getMappingSet();
state.subprojects.fabric = document.getElementById("fabric-loader-input").checked;
state.subprojects.forge = document.getElementById("forge-loader-input").checked;
state.subprojects.forge = document.getElementById("forge-loader-input").checked && isForgeAvailable();
state.subprojects.neoforge = document.getElementById("neoforge-loader-input").checked && isNeoForgeAvailable();
state.subprojects.quilt = document.getElementById("quilt-loader-input").checked;
state.subprojects.fabric_likes = document.getElementById("fabric-like-input").checked && isFabricLikeAvailable();
Expand Down Expand Up @@ -134,17 +143,26 @@ function isNeoForgeAvailable() {
return supports_neoforge(version);
}

function isForgeAvailable() {
const version = mcSelect.value;
return supports_forge(version);
}

function refreshAvailablePlatforms() {
const hasNeoForge = isNeoForgeAvailable();
const neoForgeProjectInput = document.getElementById("neoforge-project-input");
const neoForgeLoaderInput = document.getElementById("neoforge-loader-input");
neoForgeProjectInput.disabled = !hasNeoForge;
neoForgeLoaderInput.disabled = !hasNeoForge;

// Change project type if Neo is not available.
if (!hasNeoForge && neoForgeProjectInput.checked) {
refreshForgeLikePlatform(isNeoForgeAvailable(), "neoforge");
refreshForgeLikePlatform(isForgeAvailable(), "forge");
}

function refreshForgeLikePlatform(available, id) {
const projectInput = document.getElementById(id + "-project-input");
const loaderInput = document.getElementById(id + "-loader-input");
projectInput.disabled = !available;
loaderInput.disabled = !available;

// Change project type if the platform is not available for this game version.
if (!available && projectInput.checked) {
multiplatformInput.checked = true;
neoForgeProjectInput.checked = false;
projectInput.checked = false;
refreshDisplayedProjectType();
}
}
Expand Down Expand Up @@ -178,5 +196,6 @@ document.getElementById("generate-button").onclick = async () => {
modNameInput.value = state.mod_name;
modIdInput.value = state.mod_id;
refreshModIdPlaceholder();
refreshAvailablePlatforms();
document.getElementById("package-input").value = state.package_name;
document.getElementById("architectury-api-input").checked = state.dependencies.architectury_api;
45 changes: 33 additions & 12 deletions src/app/generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,16 @@ pub async fn generate(app: &super::GeneratorApp) -> Result<()> {
);
context.put("ARCHITECTURY_GROUP", game_version.architectury_maven_group());
context.put("ARCHITECTURY_PACKAGE", game_version.architectury_package());
context.put("FORGE_LOADER_MAJOR", game_version.forge_major_version());
context.maybe_put(
"FORGE_LOADER_MAJOR",
game_version.forge_major_version()
);
context.maybe_put(
"NEOFORGE_LOADER_MAJOR",
game_version.neoforge_loader_major(),
);
context.maybe_put("NEOFORGE_MAJOR", game_version.neoforge_major());
context.put("FORGE_PACK_FORMAT", game_version.forge_pack_version());
context.maybe_put("FORGE_PACK_FORMAT", game_version.forge_pack_version());

if let Some((data_pack_format_key, data_pack_format)) = game_version.forge_server_pack_version() {
context.put("FORGE_DATA_PACK_FORMAT_KEY", data_pack_format_key);
Expand Down Expand Up @@ -112,22 +115,31 @@ pub async fn generate(app: &super::GeneratorApp) -> Result<()> {
if app.subprojects.forge {
context.define("forge");
files.push(Box::pin(forge::all_files(client.clone())));
variables.push(Box::pin(add_key(
"FORGE_VERSION",
std::future::ready(Ok(versions.forge)),
)));
if let Some(version) = versions.forge {
variables.push(Box::pin(add_key(
"FORGE_VERSION",
std::future::ready(Ok(version)),
)));
}
platforms.push("forge");
}

if app.subprojects.neoforge {
context.define("neoforge");
files.push(Box::pin(neoforge::all_files(client.clone())));
files.push(Box::pin(neoforge::main_files(client.clone())));
if let Some(version) = versions.neoforge {
variables.push(Box::pin(add_key(
"NEOFORGE_VERSION",
std::future::ready(Ok(version)),
)));
}
if game_version == version_resolver::minecraft::MinecraftVersion::Minecraft1_20_4 {
context.put("NEOFORGE_METADATA_FILE_NAME", "mods.toml");
files.push(Box::pin(neoforge::mods_toml_files(client.clone())));
} else {
context.put("NEOFORGE_METADATA_FILE_NAME", "neoforge.mods.toml");
files.push(Box::pin(neoforge::neoforge_mods_toml_files(client.clone())));
}
platforms.push("neoforge");
}

Expand Down Expand Up @@ -159,20 +171,29 @@ pub async fn generate(app: &super::GeneratorApp) -> Result<()> {
}
}
ProjectType::NeoForge => {
files.push(Box::pin(neoforge_only::all_files(client.clone())));
files.push(Box::pin(neoforge_only::main_files(client.clone())));
if let Some(version) = versions.neoforge {
variables.push(Box::pin(add_key(
"NEOFORGE_VERSION",
std::future::ready(Ok(version)),
)));
}
if game_version == version_resolver::minecraft::MinecraftVersion::Minecraft1_20_4 {
context.put("NEOFORGE_METADATA_FILE_NAME", "mods.toml");
files.push(Box::pin(neoforge_only::mods_toml_files(client.clone())));
} else {
context.put("NEOFORGE_METADATA_FILE_NAME", "neoforge.mods.toml");
files.push(Box::pin(neoforge_only::neoforge_mods_toml_files(client.clone())));
}
}
ProjectType::Forge => {
files.push(Box::pin(forge_only::all_files(client.clone())));
variables.push(Box::pin(add_key(
"FORGE_VERSION",
std::future::ready(Ok(versions.forge)),
)));
if let Some(version) = versions.forge {
variables.push(Box::pin(add_key(
"FORGE_VERSION",
std::future::ready(Ok(version)),
)));
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/templates/neoforge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ dependencies {
processResources {
inputs.property 'version', project.version

filesMatching('META-INF/mods.toml') {
filesMatching('META-INF/%NEOFORGE_METADATA_FILE_NAME%') {
expand version: project.version
}
}
Expand Down
12 changes: 10 additions & 2 deletions src/templates/neoforge/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,19 @@ super::file_data!(GRADLE_PROPERTIES gradle_properties, "neoforge", true, "gradle

// Code
super::file_data!(MODS_TOML mods_toml, "neoforge", true, "src/main/resources/META-INF/mods.toml");
super::file_data!(NEOFORGE_MODS_TOML neoforge_mods_toml, "neoforge", true, "src/main/resources/META-INF/neoforge.mods.toml");
super::file_data!(MOD_CLASS mod_class, "neoforge", true, "src/main/java/PACKAGE_DIR/neoforge/ExampleModNeoForge.java");

super::file_list!(pub all_files,
super::file_list!(pub main_files,
build_gradle
gradle_properties
mods_toml
mod_class
);

super::file_list!(pub mods_toml_files,
mods_toml
);

super::file_list!(pub neoforge_mods_toml_files,
neoforge_mods_toml
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
modLoader = "javafml"
loaderVersion = "[%NEOFORGE_LOADER_MAJOR%,)"
#issueTrackerURL = ""
license = "Insert License Here"

[[mods]]
modId = "%MOD_ID%"
version = "${version}"
displayName = "%MOD_NAME%"
authors = "Me!"
description = '''
This is an example description! Tell everyone what your mod is about!
'''
#logoFile = ""

[[dependencies.%MOD_ID%]]
modId = "neoforge"
type = "required"
versionRange = "[%NEOFORGE_MAJOR%,)"
ordering = "NONE"
side = "BOTH"

[[dependencies.%MOD_ID%]]
modId = "minecraft"
type = "required"
versionRange = "[%MINECRAFT_VERSION%,)"
ordering = "NONE"
side = "BOTH"
#% if architectury_api

[[dependencies.%MOD_ID%]]
modId = "architectury"
type = "required"
versionRange = "[%ARCHITECTURY_API_VERSION%,)"
ordering = "AFTER"
side = "BOTH"
#% end

[[mixins]]
config = "%MOD_ID%.mixins.json"
2 changes: 1 addition & 1 deletion src/templates/neoforge_only/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ dependencies {
processResources {
inputs.property 'version', project.version

filesMatching('META-INF/mods.toml') {
filesMatching('META-INF/%NEOFORGE_METADATA_FILE_NAME%') {
expand version: project.version
}
}
Expand Down
12 changes: 10 additions & 2 deletions src/templates/neoforge_only/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,21 @@ super::file_data!(SETTINGS_GRADLE settings_gradle, "neoforge_only", false, "sett
// Code
super::file_data!(MIXINS mixins, "neoforge_only", false, "src/main/resources/MOD_ID.mixins.json");
super::file_data!(MODS_TOML mods_toml, "neoforge_only", false, "src/main/resources/META-INF/mods.toml");
super::file_data!(NEOFORGE_MODS_TOML neoforge_mods_toml, "neoforge_only", false, "src/main/resources/META-INF/neoforge.mods.toml");
super::file_data!(MOD_CLASS mod_class, "neoforge_only", false, "src/main/java/PACKAGE_DIR/ExampleMod.java");

super::file_list!(pub all_files,
super::file_list!(pub main_files,
build_gradle
gradle_properties
settings_gradle
mixins
mods_toml
mod_class
);

super::file_list!(pub mods_toml_files,
mods_toml
);

super::file_list!(pub neoforge_mods_toml_files,
neoforge_mods_toml
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
modLoader = "javafml"
loaderVersion = "[%NEOFORGE_LOADER_MAJOR%,)"
#issueTrackerURL = ""
license = "Insert License Here"

[[mods]]
modId = "%MOD_ID%"
version = "${version}"
displayName = "%MOD_NAME%"
authors = "Me!"
description = '''
This is an example description! Tell everyone what your mod is about!
'''
#logoFile = ""

[[dependencies.%MOD_ID%]]
modId = "neoforge"
type = "required"
versionRange = "[%NEOFORGE_MAJOR%,)"
ordering = "NONE"
side = "BOTH"

[[dependencies.%MOD_ID%]]
modId = "minecraft"
type = "required"
versionRange = "[%MINECRAFT_VERSION%,)"
ordering = "NONE"
side = "BOTH"

[[mixins]]
config = "%MOD_ID%.mixins.json"
6 changes: 6 additions & 0 deletions src/web.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,9 @@ pub fn supports_neoforge(game_version: JsValue) -> Result<bool, JsValue> {
let game_version: version_resolver::minecraft::MinecraftVersion = serde_wasm_bindgen::from_value(game_version)?;
Ok(game_version.neoforge_major().is_some())
}

#[wasm_bindgen]
pub fn supports_forge(game_version: JsValue) -> Result<bool, JsValue> {
let game_version: version_resolver::minecraft::MinecraftVersion = serde_wasm_bindgen::from_value(game_version)?;
Ok(game_version.forge_major_version().is_some())
}
30 changes: 17 additions & 13 deletions version_resolver/src/index.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl VersionIndex {
#[derive(Clone, Serialize, Deserialize)]
pub struct Versions {
pub architectury_api: String,
pub forge: String,
pub forge: Option<String>,
pub neoforge: Option<String>,
}

Expand All @@ -51,18 +51,22 @@ impl Versions {
)
.await?;

let forge = crate::maven::resolve_matching_version(
&client,
crate::maven::MavenLibrary::forge(),
|version| {
version.starts_with(&format!(
"{}-{}.",
game_version.version(),
game_version.forge_major_version()
))
},
)
.await?;
let forge = if let Some(forge_major) = game_version.forge_major_version() {
Some(crate::maven::resolve_matching_version(
&client,
crate::maven::MavenLibrary::forge(),
|version| {
version.starts_with(&format!(
"{}-{}.",
game_version.version(),
forge_major
))
},
)
.await?)
} else {
None
};

let neoforge = if let Some(major) = game_version.neoforge_major() {
Some(
Expand Down
Loading