first
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
+45
@@ -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();
|
||||
}
|
||||
}
|
||||
+12
@@ -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();
|
||||
}
|
||||
}
|
||||
+1
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user