This commit is contained in:
2026-01-07 13:29:10 -05:00
commit 686541e399
1629 changed files with 317473 additions and 0 deletions
+127
View File
@@ -0,0 +1,127 @@
plugins {
`multiloader-loader`
id("dev.architectury.loom")
}
val is120 = commonMod.minecraft_version.startsWith("1.20")
val targetBytecode = if (is120) 17 else 21
val clothConfigVersion = if (is120) {
commonMod.prop("cloth_config_version_1_20_1")
} else {
commonMod.prop("cloth_config_version_1_21_1")
}
println("DEBUG: Fabric ${project.path} -> Minecraft Version: ${commonMod.minecraft_version}")
println("DEBUG: Fabric ${project.path} -> Overwriting java_version to: $targetBytecode")
// Force overwrite properties for resource expansion
project.extensions.extraProperties["java_version"] = targetBytecode
project.extensions.extraProperties["cloth_config_version"] = clothConfigVersion
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21)) // run/tooling on 21
withSourcesJar()
}
java.sourceCompatibility = JavaVersion.toVersion(targetBytecode)
java.targetCompatibility = JavaVersion.toVersion(targetBytecode)
afterEvaluate {
tasks.withType<JavaExec>().configureEach {
val launcher = javaToolchains.launcherFor {
languageVersion.set(JavaLanguageVersion.of(targetBytecode))
}
javaLauncher.set(null as org.gradle.jvm.toolchain.JavaLauncher?)
setExecutable(launcher.get().executablePath.asFile.absolutePath)
}
}
tasks.withType<JavaCompile>().configureEach {
options.release.set(targetBytecode)
options.encoding = "UTF-8"
}
repositories {
mavenCentral()
maven("https://maven.architectury.dev/")
maven("https://maven.terraformersmc.com/releases/")
maven("https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/")
maven("https://maven.blamejared.com/")
maven("https://maven.shedaniel.me/")
}
dependencies {
minecraft("com.mojang:minecraft:${commonMod.minecraft_version}")
mappings(loom.layered {
officialMojangMappings()
commonMod.propOrNull("parchment")?.let { parchmentVersion ->
if (parchmentVersion != "") parchment("org.parchmentmc.data:parchment-${commonMod.minecraft_version}:$parchmentVersion@zip")
}
})
modImplementation("net.fabricmc:fabric-loader:${commonMod.prop("fabric_loader_version")}")
modApi("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}")
// Required deps
modImplementation("dev.architectury:architectury-fabric:${commonMod.prop("architectury_version")}")
modImplementation("software.bernie.geckolib:geckolib-fabric-${commonMod.minecraft_version}:${commonMod.prop("geckolib_version")}")
modImplementation("me.shedaniel.cloth:cloth-config-fabric:$clothConfigVersion")
// Mod Menu (REQUIRED if you want the config button always present)
modImplementation("com.terraformersmc:modmenu:${commonMod.prop("modmenu_version")}")
// JEI (optional)
modCompileOnly("mezz.jei:jei-${commonMod.minecraft_version}-common-api:${commonMod.prop("jei_version")}")
modCompileOnly("mezz.jei:jei-${commonMod.minecraft_version}-fabric-api:${commonMod.prop("jei_version")}")
modLocalRuntime("mezz.jei:jei-${commonMod.minecraft_version}-fabric:${commonMod.prop("jei_version")}")
}
loom {
accessWidenerPath =
common.project.file("../../src/main/resources/accesswideners/${commonMod.minecraft_version}-${mod.id}.accesswidener")
runs {
getByName("client") {
client()
configName = "Fabric Client"
ideConfigGenerated(true)
}
getByName("server") {
server()
configName = "Fabric Server"
ideConfigGenerated(true)
}
}
}
tasks.named<ProcessResources>("processResources") {
inputs.property("targetBytecode", targetBytecode)
filesMatching("fabric.mod.json") {
expand(mapOf(
"java_version" to targetBytecode,
"cloth_config_version" to clothConfigVersion,
"architectury_version" to commonMod.prop("architectury_version"),
"geckolib_version" to commonMod.prop("geckolib_version"),
"modmenu_version" to commonMod.prop("modmenu_version"),
"fabric_loader_version" to commonMod.prop("fabric_loader_version"),
"fabric_api_version" to commonMod.prop("fabric_api_version"),
"minecraft_version" to commonMod.minecraft_version,
"mod_id" to commonMod.id,
"mod_name" to commonMod.name,
"mod_license" to commonMod.license,
"mod_version" to commonMod.version,
"mod_authors" to commonMod.author,
"mod_description" to commonMod.description
))
filter { line ->
if (targetBytecode == 21) {
line.replace(">=17", ">=21")
} else {
line.replace(">=21", ">=17")
}
}
}
}
+1
View File
@@ -0,0 +1 @@
loader=fabricmc
@@ -0,0 +1,19 @@
package net.cmr.jurassicrevived;
import net.fabricmc.api.ModInitializer;
public class JRMod implements ModInitializer
{
@Override
public void onInitialize() {
// This method is invoked by the Fabric mod loader when it is ready
// to load your mod. You can access Fabric and Common code in this
// project.
// Use Fabric to bootstrap the Common mod.
Constants.LOG.info("Hello Fabric world!");
CommonClass.init();
}
}
@@ -0,0 +1,45 @@
package net.cmr.jurassicrevived.client.config;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.cmr.jurassicrevived.config.JRConfig;
import net.cmr.jurassicrevived.config.JRConfigManager;
import net.cmr.jurassicrevived.platform.Services;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
public final class JRClothConfigScreens {
private JRClothConfigScreens() {}
public static Screen create(Screen parent) {
JRConfig cfg = JRConfigManager.get();
ConfigBuilder builder = ConfigBuilder.create()
.setParentScreen(parent)
.setTitle(Component.literal("Jurassic Revived Config"));
ConfigCategory general = builder.getOrCreateCategory(Component.literal("General"));
ConfigEntryBuilder eb = builder.entryBuilder();
general.addEntry(
eb.startBooleanToggle(Component.literal("Enable Dinosaurs"), cfg.enableDinosaurs)
.setDefaultValue(true)
.setSaveConsumer(v -> cfg.enableDinosaurs = v)
.build()
);
general.addEntry(
eb.startIntField(Component.literal("Spawn Weight"), cfg.spawnWeight)
.setDefaultValue(10)
.setMin(0)
.setMax(1000)
.setSaveConsumer(v -> cfg.spawnWeight = v)
.build()
);
builder.setSavingRunnable(() -> JRConfigManager.save(Services.PLATFORM.getConfigDir()));
return builder.build();
}
}
@@ -0,0 +1,12 @@
package net.cmr.jurassicrevived.client.config;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import net.minecraft.client.gui.screens.Screen;
public final class JRModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return JRClothConfigScreens::create;
}
}
@@ -0,0 +1,21 @@
package net.cmr.jurassicrevived.mixin;
import net.cmr.jurassicrevived.Constants;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.TitleScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(TitleScreen.class)
public class MixinTitleScreen
{
@Inject(at = @At("HEAD"), method = "init()V")
private void init(CallbackInfo info) {
Constants.LOG.info("This line is printed by an example mod mixin from Fabric!");
Constants.LOG.info("MC Version: {}", Minecraft.getInstance().getVersionType());
}
}
@@ -0,0 +1,29 @@
package net.cmr.jurassicrevived.platform;
import net.cmr.jurassicrevived.platform.services.IPlatformHelper;
import net.fabricmc.loader.api.FabricLoader;
import java.nio.file.Path;
public class FabricPlatformHelper implements IPlatformHelper
{
@Override
public String getPlatformName() {
return "FabricMC";
}
@Override
public boolean isModLoaded(String modId) {
return FabricLoader.getInstance().isModLoaded(modId);
}
@Override
public boolean isDevelopmentEnvironment() {
return FabricLoader.getInstance().isDevelopmentEnvironment();
}
@Override
public Path getConfigDir() {
return FabricLoader.getInstance().getConfigDir();
}
}
@@ -0,0 +1 @@
net.cmr.jurassicrevived.platform.FabricPlatformHelper
@@ -0,0 +1,44 @@
{
"schemaVersion": 1,
"id": "jurassicrevived",
"version": "${version}",
"name": "${mod_name}",
"description": "${description}",
"authors": [
"${mod_author}"
],
"contact": {
"homepage": "https://fabricmc.net/",
"sources": "https://github.com/FabricMC/fabric-example-mod"
},
"license": "${license}",
"icon": "jurassicrevived.png",
"environment": "*",
"entrypoints": {
"main": [
"net.cmr.jurassicrevived.JRMod"
],
"modmenu": [
"net.cmr.jurassicrevived.client.config.JRModMenuIntegration"
]
},
"mixins": [
"jurassicrevived.mixins.json",
"jurassicrevived.fabricmc.mixins.json"
],
"depends": {
"fabricloader": ">=${fabric_loader_version}",
"fabric-api": "*",
"minecraft": "~${minecraft_version}",
"java": ">=${java_version}",
"architectury": ">=${architectury_version}",
"cloth-config": ">=${cloth_config_version}",
"geckolib": ">=${geckolib_version}",
"modmenu": ">=${modmenu_version}"
},
"suggests": {
"another-mod": "*"
}
}
@@ -0,0 +1,15 @@
{
"required": true,
"minVersion": "0.8",
"package": "net.cmr.jurassicrevived.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [],
"client": [
"MixinTitleScreen"
],
"server": [],
"injectors": {
"defaultRequire": 1
}
}