Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
32937d0bc2 | |||
cae4b0b4db | |||
9bb5c4b87c | |||
c008ce3868 | |||
2954301ea8 |
@ -1,15 +1,43 @@
|
|||||||
import io.gitlab.jfronny.scripts.*
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("jfmod") version "1.3-SNAPSHOT"
|
id("jfmod") version "1.6-SNAPSHOT"
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects { group = "io.gitlab.jfronny" }
|
||||||
|
base.archivesName = "modsmod"
|
||||||
|
|
||||||
|
val commonsVersion = "2.0.0-SNAPSHOT"
|
||||||
|
jfMod {
|
||||||
|
minecraftVersion = "1.21.1"
|
||||||
|
yarn("build.3")
|
||||||
|
loaderVersion = "0.16.1"
|
||||||
|
libJfVersion = "3.17.0"
|
||||||
|
fabricApiVersion = "0.102.1+1.21.1"
|
||||||
|
|
||||||
|
modrinth {
|
||||||
|
projectId = "modsmod"
|
||||||
|
requiredDependencies.add("libjf")
|
||||||
|
optionalDependencies.add("modmenu")
|
||||||
|
}
|
||||||
|
curseforge {
|
||||||
|
projectId = "405095"
|
||||||
|
requiredDependencies.add("libjf")
|
||||||
|
optionalDependencies.add("modmenu")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v1:${prop("libjf_version")}")
|
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v2")
|
||||||
modImplementation("io.gitlab.jfronny.libjf:libjf-unsafe-v0:${prop("libjf_version")}")
|
modImplementation("io.gitlab.jfronny.libjf:libjf-unsafe-v0")
|
||||||
|
|
||||||
|
compileOnly("io.gitlab.jfronny:commons-serialize-generator-annotations:$commonsVersion")
|
||||||
|
annotationProcessor("io.gitlab.jfronny:commons-serialize-generator:$commonsVersion")
|
||||||
|
|
||||||
// Dev env
|
// Dev env
|
||||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny-v1:${prop("libjf_version")}")
|
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny")
|
||||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil:${prop("libjf_version")}")
|
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil")
|
||||||
modLocalRuntime("com.terraformersmc:modmenu:7.0.1")
|
modLocalRuntime("com.terraformersmc:modmenu:11.0.1")
|
||||||
|
// for modmenu
|
||||||
|
modLocalRuntime("net.fabricmc.fabric-api:fabric-resource-loader-v0")
|
||||||
|
modLocalRuntime("net.fabricmc.fabric-api:fabric-screen-api-v1")
|
||||||
|
modLocalRuntime("net.fabricmc.fabric-api:fabric-key-binding-api-v1")
|
||||||
}
|
}
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
# https://fabricmc.net/develop/
|
|
||||||
minecraft_version=1.20
|
|
||||||
yarn_mappings=build.1
|
|
||||||
loader_version=0.14.21
|
|
||||||
|
|
||||||
maven_group=io.gitlab.jfronny
|
|
||||||
archives_base_name=modsmod
|
|
||||||
|
|
||||||
modrinth_id=modsmod
|
|
||||||
modrinth_required_dependencies=libjf
|
|
||||||
modrinth_optional_dependencies=modmenu
|
|
||||||
curseforge_id=405095
|
|
||||||
curseforge_required_dependencies=libjf
|
|
||||||
curseforge_optional_dependencies=modmenu
|
|
||||||
|
|
||||||
libjf_version=3.8.0
|
|
||||||
fabric_version=0.83.0+1.20
|
|
@ -1,7 +1,7 @@
|
|||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
maven("https://maven.fabricmc.net/") // FabricMC
|
maven("https://maven.frohnmeyer-wds.de/mirrors")
|
||||||
maven("https://maven.frohnmeyer-wds.de/artifacts") // scripts
|
maven("https://maven.neoforged.net/releases")
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
package io.gitlab.jfronny.modsmod;
|
package io.gitlab.jfronny.modsmod;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
import io.gitlab.jfronny.commons.serialize.databind.api.TypeToken;
|
||||||
import io.gitlab.jfronny.modsmod.util.IteratorCallbackList;
|
import io.gitlab.jfronny.modsmod.util.IteratorCallbackList;
|
||||||
import net.fabricmc.loader.impl.FabricLoaderImpl;
|
import net.fabricmc.loader.impl.FabricLoaderImpl;
|
||||||
import net.fabricmc.loader.impl.ModContainerImpl;
|
import net.fabricmc.loader.impl.ModContainerImpl;
|
||||||
import net.fabricmc.loader.impl.discovery.ModCandidate;
|
import net.fabricmc.loader.impl.discovery.ModCandidateImpl;
|
||||||
import net.fabricmc.loader.impl.metadata.LoaderModMetadata;
|
import net.fabricmc.loader.impl.metadata.LoaderModMetadata;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.*;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -21,13 +19,13 @@ public class FabricLoaderInterface {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
ADD_MOD_METHOD = FabricLoaderImpl.class.getDeclaredMethod("addMod", ModCandidate.class);
|
ADD_MOD_METHOD = FabricLoaderImpl.class.getDeclaredMethod("addMod", ModCandidateImpl.class);
|
||||||
ADD_MOD_METHOD.setAccessible(true);
|
ADD_MOD_METHOD.setAccessible(true);
|
||||||
|
|
||||||
MODS_FIELD = FabricLoaderImpl.class.getDeclaredField("mods");
|
MODS_FIELD = FabricLoaderImpl.class.getDeclaredField("mods");
|
||||||
MODS_FIELD.setAccessible(true);
|
MODS_FIELD.setAccessible(true);
|
||||||
|
|
||||||
CREATE_PLAIN_METHOD = ModCandidate.class.getDeclaredMethod("createPlain", new TypeToken<List<Path>>(){}.getRawType(), LoaderModMetadata.class, boolean.class, new TypeToken<Collection<ModCandidate>>(){}.getRawType());
|
CREATE_PLAIN_METHOD = ModCandidateImpl.class.getDeclaredMethod("createPlain", new TypeToken<List<Path>>(){}.getRawType(), LoaderModMetadata.class, boolean.class, new TypeToken<Collection<ModCandidateImpl>>(){}.getRawType());
|
||||||
CREATE_PLAIN_METHOD.setAccessible(true);
|
CREATE_PLAIN_METHOD.setAccessible(true);
|
||||||
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
||||||
throw new IllegalStateException("Failed to get reference to fabric loader internals. This fabric loader version is probably unsupported by modsmod", e);
|
throw new IllegalStateException("Failed to get reference to fabric loader internals. This fabric loader version is probably unsupported by modsmod", e);
|
||||||
@ -48,7 +46,7 @@ public class FabricLoaderInterface {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addMod(FabricLoaderImpl fabricLoader, ModCandidate modCandidate) {
|
public static void addMod(FabricLoaderImpl fabricLoader, ModCandidateImpl modCandidate) {
|
||||||
try {
|
try {
|
||||||
ADD_MOD_METHOD.invoke(fabricLoader, modCandidate);
|
ADD_MOD_METHOD.invoke(fabricLoader, modCandidate);
|
||||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||||
@ -56,9 +54,9 @@ public class FabricLoaderInterface {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ModCandidate createPlain(Path path, LoaderModMetadata metadata, boolean requiresRemap, Collection<ModCandidate> nestedMods) {
|
public static ModCandidateImpl createPlain(Path path, LoaderModMetadata metadata, boolean requiresRemap, Collection<ModCandidateImpl> nestedMods) {
|
||||||
try {
|
try {
|
||||||
return (ModCandidate) CREATE_PLAIN_METHOD.invoke(null, List.of(path), metadata, requiresRemap, nestedMods);
|
return (ModCandidateImpl) CREATE_PLAIN_METHOD.invoke(null, List.of(path), metadata, requiresRemap, nestedMods);
|
||||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||||
throw new IllegalStateException("Failed to create plain mod container", e);
|
throw new IllegalStateException("Failed to create plain mod container", e);
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,26 @@
|
|||||||
package io.gitlab.jfronny.modsmod;
|
package io.gitlab.jfronny.modsmod;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.log.*;
|
import io.gitlab.jfronny.commons.logger.SystemLoggerPlus;
|
||||||
import io.gitlab.jfronny.gson.Gson;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
|
||||||
import io.gitlab.jfronny.libjf.unsafe.UltraEarlyInit;
|
import io.gitlab.jfronny.libjf.unsafe.UltraEarlyInit;
|
||||||
import io.gitlab.jfronny.modsmod.builder.JsonBuilder;
|
import io.gitlab.jfronny.modsmod.builder.JsonBuilder;
|
||||||
import io.gitlab.jfronny.modsmod.builder.ModMeta;
|
import io.gitlab.jfronny.modsmod.builder.ModMeta;
|
||||||
import io.gitlab.jfronny.modsmod.util.IOUtil;
|
import io.gitlab.jfronny.modsmod.util.IOUtil;
|
||||||
import net.fabricmc.loader.api.*;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.fabricmc.loader.impl.FabricLoaderImpl;
|
import net.fabricmc.loader.impl.FabricLoaderImpl;
|
||||||
import net.fabricmc.loader.impl.metadata.*;
|
import net.fabricmc.loader.impl.metadata.*;
|
||||||
import net.fabricmc.loader.impl.util.FileSystemUtil;
|
import net.fabricmc.loader.impl.util.FileSystemUtil;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.FileSystem;
|
import java.nio.file.*;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.StandardCopyOption;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class ModsMod implements UltraEarlyInit {
|
public class ModsMod implements UltraEarlyInit {
|
||||||
static final HashSet<ModMeta> MODS = new HashSet<>();
|
static final HashSet<ModMeta> MODS = new HashSet<>();
|
||||||
static final FabricLoaderImpl LOADER = FabricLoaderImpl.INSTANCE;
|
static final FabricLoaderImpl LOADER = FabricLoaderImpl.INSTANCE;
|
||||||
public static final Gson GSON = new Gson();
|
|
||||||
public static final String MOD_ID = "modsmod";
|
public static final String MOD_ID = "modsmod";
|
||||||
public static final Logger LOGGER = Logger.forName(MOD_ID);
|
public static final SystemLoggerPlus LOGGER = SystemLoggerPlus.forName(MOD_ID);
|
||||||
private static final String CACHE_NAME = MOD_ID + "cache";
|
private static final String CACHE_NAME = MOD_ID + "cache";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package io.gitlab.jfronny.modsmod;
|
package io.gitlab.jfronny.modsmod;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.JfConfig;
|
import io.gitlab.jfronny.libjf.config.api.v2.Entry;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.Entry;
|
import io.gitlab.jfronny.libjf.config.api.v2.JfConfig;
|
||||||
|
|
||||||
@JfConfig
|
@JfConfig
|
||||||
public class ModsModConfig {
|
public class ModsModConfig {
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package io.gitlab.jfronny.modsmod.builder;
|
package io.gitlab.jfronny.modsmod.builder;
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.commons.serialize.generator.annotations.GPrefer;
|
||||||
|
import io.gitlab.jfronny.commons.serialize.generator.annotations.GSerializable;
|
||||||
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.modsmod.ModsMod;
|
import io.gitlab.jfronny.modsmod.ModsMod;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
@ -12,27 +15,21 @@ import java.util.Map;
|
|||||||
public class JsonBuilder {
|
public class JsonBuilder {
|
||||||
public static void build(int number, Path outputPath, boolean parent) throws IOException {
|
public static void build(int number, Path outputPath, boolean parent) throws IOException {
|
||||||
try (BufferedWriter bw = Files.newBufferedWriter(outputPath)) {
|
try (BufferedWriter bw = Files.newBufferedWriter(outputPath)) {
|
||||||
ModsMod.GSON.toJson(new ModManifest(number, parent), bw);
|
GC_JsonBuilder.ModManifest.serialize(new ModManifest(number, parent), bw, LibJf.JSON_TRANSPORT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@GSerializable
|
||||||
private static class ModManifest {
|
public record ModManifest(int schemaVersion, String id, String version, String name, Map<String, ModMenuData> custom) {
|
||||||
public final int schemaVersion = 1;
|
@GPrefer
|
||||||
public final String id;
|
public ModManifest {
|
||||||
public final String version = "1.0";
|
}
|
||||||
public final String name;
|
|
||||||
public final Map<String, ModMenuData> custom = new HashMap<>();
|
|
||||||
|
|
||||||
public ModManifest(int number, boolean parent) {
|
public ModManifest(int number, boolean parent) {
|
||||||
id = "modmod_" + number;
|
this(1, "modmod_" + number, "1.0", "ModsMod " + number, parent ? Map.of("modmenu", new ModMenuData("modsmod")) : Map.of());
|
||||||
name = "ModsMod " + number;
|
|
||||||
if (parent)
|
|
||||||
custom.put("modmenu", new ModMenuData());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ModMenuData {
|
@GSerializable
|
||||||
public final String parent = "modsmod";
|
public record ModMenuData(String parent) { }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"libjf:early": ["io.gitlab.jfronny.modsmod.ModsMod"]
|
"libjf:early": ["io.gitlab.jfronny.modsmod.ModsMod"]
|
||||||
},
|
},
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.13.3",
|
"fabricloader": ">=0.16.1",
|
||||||
"libjf-config-core-v1": ">=3.0.3",
|
"libjf-config-core-v1": ">=3.0.3",
|
||||||
"libjf-unsafe-v0": ">=3.0.3",
|
"libjf-unsafe-v0": ">=3.0.3",
|
||||||
"minecraft": "*"
|
"minecraft": "*"
|
||||||
|
Loading…
Reference in New Issue
Block a user