Compare commits

...

3 Commits

Author SHA1 Message Date
Martin Prokoph
312096d989 stonecutter: fix crash w/o ModMenu, optimize assets 2025-11-22 20:01:19 +01:00
Martin Prokoph
4831da5076 stonecutter: fix crash on fabric server startup 2025-11-22 19:10:22 +01:00
Martin Prokoph
4076ee2b6f stonecutter: improve backwards-compatibility
Builds targetting Minecraft versions below 1.21.6 will now once again contain the `getScreen` method with `Screen` as their return value instead of `MidnightConfigScreen`.
This ensures that mods compiled for older MidnightLib versions continue working as expected.

The return value has to be changed to `MidnightConfigScreen` in 1.21.6 and up due to NeoForge removing support for the `@OnlyIn` annotation – thus breaking server-only installations when referencing client-only classes like `Screen`.
2025-11-22 17:49:48 +01:00
30 changed files with 392 additions and 69 deletions

View File

@@ -7,7 +7,7 @@ org.gradle.parallel=false
#org.gradle.configureondemand=true
# Mod properties
mod.version=1.9.0-beta.1
mod.version=1.9.0-beta.3
mod.group=eu.midnightdust
mod.id=midnightlib
mod.name=MidnightLib

View File

@@ -1,7 +1,6 @@
package eu.midnightdust.core;
import eu.midnightdust.core.config.MidnightLibConfig;
import eu.midnightdust.lib.config.AutoCommand;
import eu.midnightdust.lib.config.MidnightConfig;
import org.slf4j.Logger;
@@ -9,14 +8,12 @@ import org.slf4j.LoggerFactory;
import javax.swing.UIManager;
import net.minecraft.Util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
//? if fabric {
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.DedicatedServerModInitializer;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
@@ -24,9 +21,10 @@ import com.terraformersmc.modmenu.api.ModMenuApi;
import java.util.HashMap;
import java.util.Map;
public class MidnightLib implements DedicatedServerModInitializer, ClientModInitializer, ModMenuApi {
public class MidnightLib implements ClientModInitializer {
//?} else if neoforge {
/*import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import eu.midnightdust.lib.config.AutoCommand;
import eu.midnightdust.lib.util.PlatformFunctions;
import net.minecraft.commands.CommandSourceStack;
@@ -45,6 +43,7 @@ import java.util.ConcurrentModificationException;
public class MidnightLib {
*///?} else if forge {
/*import java.util.ConcurrentModificationException;
import eu.midnightdust.lib.config.AutoCommand;
import eu.midnightdust.lib.util.PlatformFunctions;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import net.minecraft.commands.CommandSourceStack;
@@ -54,7 +53,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.IExtensionPoint;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
@@ -77,25 +75,11 @@ public class MidnightLib {
MidnightLibConfig.init(MOD_ID, MidnightLibConfig.class);
}
public static void registerAutoCommand() {
MidnightConfig.configInstances.forEach((modid, config) -> {
for (Field field : config.configClass.getFields()) {
if (field.isAnnotationPresent(MidnightConfig.Entry.class)
&& !field.isAnnotationPresent(MidnightConfig.Client.class)
&& !field.isAnnotationPresent(MidnightConfig.Hidden.class))
new AutoCommand(field, modid);
}
});
}
//? if fabric {
public void onInitializeServer() {
registerAutoCommand();
}
public static class ModMenuInit implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> MidnightLibConfig.getScreen(parent,"midnightlib");
return parent -> MidnightLibConfig.getScreen(parent, MOD_ID);
}
@Override
@@ -107,10 +91,9 @@ public class MidnightLib {
});
return map;
}
}
//?}
/*? if neoforge {*/
/*public static List<LiteralArgumentBuilder<CommandSourceStack>> commands = new ArrayList<>();
@@ -119,9 +102,9 @@ public class MidnightLib {
}
//? if >= 1.21.6 {
@EventBusSubscriber(modid = "midnightlib", value = Dist.CLIENT)
@EventBusSubscriber(modid = MOD_ID, value = Dist.CLIENT)
//?} else {
/^@EventBusSubscriber(modid = "midnightlib", bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
/^@EventBusSubscriber(modid = MOD_ID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
^///?}
public static class MidnightLibBusEvents {
@SubscribeEvent
@@ -131,11 +114,11 @@ public class MidnightLib {
modContainer.registerExtensionPoint(IConfigScreenFactory.class, (minecraftClient, screen) -> MidnightConfig.getScreen(screen, modid));
}
});
MidnightLib.registerAutoCommand();
new AutoCommand().onInitializeServer();
}
}
@EventBusSubscriber(modid = "midnightlib")
@EventBusSubscriber(modid = MOD_ID)
public static class MidnightLibEvents {
@SubscribeEvent
public static void registerCommands(RegisterCommandsEvent event) {
@@ -155,7 +138,7 @@ public class MidnightLib {
public static List<LiteralArgumentBuilder<CommandSourceStack>> commands = new ArrayList<>();
@Mod.EventBusSubscriber(modid = "midnightlib", bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public static class MidnightLibBusEvents {
@SubscribeEvent
public static void onPostInit(FMLClientSetupEvent event) {
@@ -164,11 +147,11 @@ public class MidnightLib {
modContainer.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((minecraftClient, screen) -> MidnightConfig.getScreen(screen, modid)));
}
});
MidnightLib.registerAutoCommand();
new AutoCommand().onInitializeServer();
}
}
@Mod.EventBusSubscriber(modid = "midnightlib")
@Mod.EventBusSubscriber(modid = MOD_ID)
public static class MidnightLibEvents {
@SubscribeEvent
public static void registerCommands(RegisterCommandsEvent event) {

View File

@@ -7,16 +7,22 @@ import eu.midnightdust.lib.util.PlatformFunctions;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.Component;
public class AutoCommand {
//? fabric
import net.fabricmc.api.DedicatedServerModInitializer;
public class AutoCommand /*? fabric {*/ implements DedicatedServerModInitializer /*?}*/ {
final static String VALUE = "value";
final Field field;
final Class<?> type;
final String modid;
final boolean isList;
Field field;
Class<?> type;
String modid;
boolean isList;
public AutoCommand() {}
public AutoCommand(Field field, String modid) {
this.field = field; this.modid = modid;
@@ -81,4 +87,15 @@ public class AutoCommand {
}, true);
return 0;
}
public void onInitializeServer() {
MidnightConfig.configInstances.forEach((modid, config) -> {
for (Field field : config.configClass.getFields()) {
if (field.isAnnotationPresent(MidnightConfig.Entry.class)
&& !field.isAnnotationPresent(MidnightConfig.Client.class)
&& !field.isAnnotationPresent(MidnightConfig.Hidden.class))
new AutoCommand(field, modid);
}
});
}
}

View File

@@ -64,8 +64,8 @@ public class ButtonEntry extends ContainerObjectSelectionList.Entry<ButtonEntry>
Optional.ofNullable(this.buttons.get(0)).ifPresent(widget -> {
int idMode = this.info.entry.idMode();
if (idMode != -1) context.renderItem(idMode == 0 ?
BuiltInRegistries.ITEM./*? if >= 1.21.4 {*/ getValue /*?} else {*/ /*get*/ /*?}*/(ResourceLocation.tryParse(this.info.tempValue)).getDefaultInstance()
: BuiltInRegistries.BLOCK./*? if >= 1.21.4 {*/ getValue /*?} else {*/ /*get*/ /*?}*/(ResourceLocation.tryParse(this.info.tempValue)).asItem().getDefaultInstance(),
BuiltInRegistries.ITEM./*? if >= 1.21.4 {*/ getValue /*?} else {*/ /*get *//*?}*/(ResourceLocation.tryParse(this.info.tempValue)).getDefaultInstance()
: BuiltInRegistries.BLOCK./*? if >= 1.21.4 {*/ getValue /*?} else {*/ /*get *//*?}*/(ResourceLocation.tryParse(this.info.tempValue)).asItem().getDefaultInstance(),
widget.getX() + widget.getWidth() - 18, y + 2);
});
}

View File

@@ -29,9 +29,17 @@ import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
//? if < 1.21.6 {
/*//? fabric
import net.fabricmc.api.*;
//? neoforge
/^import net.neoforged.api.distmarker.*;^/
//? forge
/^import net.minecraftforge.api.distmarker.*;^/
*///?}
/** MidnightConfig is an incredibly lightweight, but still fully-featured config library for Minecraft mods.<br>
* Originally based on <a href="https://github.com/Minenash/TinyConfig">TinyConfig</a> by Minenash.*/
@SuppressWarnings("unchecked")
public abstract class MidnightConfig {
private static final Pattern INTEGER_ONLY = Pattern.compile("(-?[0-9]*)");
private static final Pattern DECIMAL_ONLY = Pattern.compile("-?(\\d+\\.?\\d*|\\d*\\.?\\d+|\\.)");
@@ -67,6 +75,7 @@ public abstract class MidnightConfig {
* */
protected static <T extends MidnightConfig> T createInstance(String modid, Class<? extends MidnightConfig> configClass) {
try {
//noinspection unchecked
T instance = (T) configClass.getDeclaredConstructor().newInstance();
instance.modid = modid;
instance.configClass = configClass;
@@ -149,7 +158,7 @@ public abstract class MidnightConfig {
info.function = (BiFunction<EditBox, Button, Predicate<String>>) (t, b) -> s -> {
s = s.trim();
if (!(s.isEmpty() || !isNumber || pattern.matcher(s).matches()) ||
(info.dataType == ResourceLocation.class && ResourceLocation.read(s)./*? if >= 1.21 {*/isError() /*?} else {*/ /*error().isPresent()*/ /*?}*/)) return false;
(info.dataType == ResourceLocation.class && ResourceLocation.read(s)./*? if >= 1.21 {*/isError() /*?} else {*/ /*error().isPresent() *//*?}*/)) return false;
Number value = 0; boolean inLimits = false; info.error = null;
if (!(isNumber && s.isEmpty()) && !s.equals("-") && !s.equals(".")) {
@@ -280,10 +289,16 @@ public abstract class MidnightConfig {
* @param parent The parent screen, which will be returned to when exiting the config
* @param modid The mod of which to load the config screen
* */
//? if < 1.21.6 {
/*/^? fabric {^/ @Environment(EnvType.CLIENT) /^?} else {^/ /^@OnlyIn(Dist.CLIENT) ^//^?}^/
public static Screen getScreen(Screen parent, String modid) {
*///?} else {
public static MidnightConfigScreen getScreen(Screen parent, String modid) {
//?}
return configInstances.get(modid).getScreen(parent);
}
/**
* Creates an instance of the config screen.
* This can be overridden to return a fully custom config screen.

View File

@@ -18,11 +18,11 @@ public class MidnightConfigListWidget extends ContainerObjectSelectionList<Butto
public boolean renderHeaderSeparator = true;
public MidnightConfigListWidget(Minecraft client, int width, int height, int y, int itemHeight) {
super(client, width, height, y, /*? if < 1.21 {*/ /*height + y,*/ /*?}*/ itemHeight);
super(client, width, height, y, /*? if < 1.21 {*/ /*height + y, *//*?}*/ itemHeight);
}
@Override
public int /*? if >= 1.21.4 {*/ scrollBarX() /*?} else {*/ /*getScrollbarPosition()*/ /*?}*/ {
public int /*? if >= 1.21.4 {*/ scrollBarX() /*?} else {*/ /*getScrollbarPosition() *//*?}*/ {
return this.width - 7;
}

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric==1.20.1
mod.mc_dep_fabric=>=1.20 <=1.20.1
mod.mc_dep_forgelike=[1.20, 1.20.1]
mod.mc_title=1.20.1
mod.mc_targets=1.20.1
mod.mc_targets=1.20 1.20.1
deps.forge_loader=47.3.0
deps.neoforge_loader=[UNSUPPORTED]

View File

@@ -23,18 +23,18 @@
"environment": "*",
"entrypoints": {
"server": [
"eu.midnightdust.core.MidnightLib"
"eu.midnightdust.lib.config.AutoCommand"
],
"client": [
"eu.midnightdust.core.MidnightLib"
],
"modmenu": [
"eu.midnightdust.core.MidnightLib"
"eu.midnightdust.core.MidnightLib\$ModMenuInit"
]
},
"depends": {
"fabric-resource-loader-v0": "*",
"minecraft": "*"
"minecraft": "${minecraft}"
},
"mixins": [

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric==1.20.1
mod.mc_dep_fabric=>=1.20 <=1.20.1
mod.mc_dep_forgelike=[1.20, 1.20.1]
mod.mc_title=1.20.1
mod.mc_targets=1.20.1
mod.mc_targets=1.20 1.20.1
deps.forge_loader=47.3.0
deps.neoforge_loader=[UNSUPPORTED]

View File

@@ -26,6 +26,6 @@ side = "BOTH"
[[dependencies.midnightlib]]
modId = "minecraft"
mandatory = true
versionRange = "[1.20,)"
versionRange = "${minecraft}"
ordering = "NONE"
side = "BOTH"

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

View File

@@ -0,0 +1,54 @@
{
"schemaVersion": 1,
"id": "${id}",
"version": "${version}",
"name": "${name}",
"description": "Lightweight config library with config screens and commands.",
"authors": [
"Motschen"
],
"contributors": [
"maloryware",
"Jaffe2718"
],
"contact": {
"homepage": "https://www.midnightdust.eu/",
"sources": "https://github.com/TeamMidnightDust/MidnightLib",
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues"
},
"license": "MIT",
"icon": "assets/midnightlib/icon.png",
"environment": "*",
"entrypoints": {
"server": [
"eu.midnightdust.lib.config.AutoCommand"
],
"client": [
"eu.midnightdust.core.MidnightLib"
],
"modmenu": [
"eu.midnightdust.core.MidnightLib\$ModMenuInit"
]
},
"depends": {
"fabric-resource-loader-v0": "*",
"minecraft": "${minecraft}"
},
"mixins": [
"midnightlib.mixins.json"
],
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "http://discord.midnightdust.eu/",
"modmenu.website": "https://midnightdust.eu/midnightlib",
"midnightlib.wiki": "https://midnightdust.eu/wiki/midnightlib"
},
"badges": [ "library" ]
}
}
}

View File

@@ -26,6 +26,6 @@ side = "BOTH"
[[dependencies.midnightlib]]
modId = "minecraft"
mandatory = true
versionRange = "[1.20.5,)"
versionRange = "${minecraft}"
ordering = "NONE"
side = "BOTH"

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric=>=1.21.9
mod.mc_dep_forgelike=[1.21.10,)
mod.mc_dep_forgelike=[1.21.9,)
mod.mc_title=1.21.10
mod.mc_targets=1.21.9, 1.21.10
mod.mc_targets=1.21.9 1.21.10
deps.forge_loader=0
deps.neoforge_loader=21.10.47-beta

View File

@@ -0,0 +1,54 @@
{
"schemaVersion": 1,
"id": "${id}",
"version": "${version}",
"name": "${name}",
"description": "Lightweight config library with config screens and commands.",
"authors": [
"Motschen"
],
"contributors": [
"maloryware",
"Jaffe2718"
],
"contact": {
"homepage": "https://www.midnightdust.eu/",
"sources": "https://github.com/TeamMidnightDust/MidnightLib",
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues"
},
"license": "MIT",
"icon": "assets/midnightlib/icon.png",
"environment": "*",
"entrypoints": {
"server": [
"eu.midnightdust.lib.config.AutoCommand"
],
"client": [
"eu.midnightdust.core.MidnightLib"
],
"modmenu": [
"eu.midnightdust.core.MidnightLib\$ModMenuInit"
]
},
"depends": {
"fabric-resource-loader-v0": "*",
"minecraft": "${minecraft}"
},
"mixins": [
"midnightlib.mixins.json"
],
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "http://discord.midnightdust.eu/",
"modmenu.website": "https://midnightdust.eu/midnightlib",
"midnightlib.wiki": "https://midnightdust.eu/wiki/midnightlib"
},
"badges": [ "library" ]
}
}
}

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric=>=1.21.9
mod.mc_dep_forgelike=[1.21.10,)
mod.mc_dep_forgelike=[1.21.9,)
mod.mc_title=1.21.10
mod.mc_targets=1.21.9, 1.21.10
mod.mc_targets=1.21.9 1.21.10
deps.forge_loader=0
deps.neoforge_loader=21.10.47-beta

View File

@@ -0,0 +1,31 @@
modLoader = "javafml"
loaderVersion = "[2,)"
#issueTrackerURL = ""
license = "MIT License"
[[mods]]
modId = "midnightlib"
version = "${version}"
displayName = "${name}"
logoFile = "midnightlib.png"
authors = "TeamMidnightDust, Motschen"
description = '''
Lightweight config library with config screens and commands.
'''
[[mixins]]
config = "midnightlib.mixins.json"
[[dependencies.midnightlib]]
modId = "neoforge"
mandatory = true
versionRange = "[20.5,)"
ordering = "NONE"
side = "BOTH"
[[dependencies.midnightlib]]
modId = "minecraft"
mandatory = true
versionRange = "${minecraft}"
ordering = "NONE"
side = "BOTH"

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric==1.21.5
mod.mc_dep_forgelike=[1.21.5]
mod.mc_dep_fabric=>=1.21.4 <=1.21.5
mod.mc_dep_forgelike=[1.21.4, 1.21.5]
mod.mc_title=1.21.5
mod.mc_targets=1.21.5
mod.mc_targets=1.21.4 1.21.5
deps.forge_loader=54.0.13
deps.neoforge_loader=21.4.47-beta

View File

@@ -0,0 +1,54 @@
{
"schemaVersion": 1,
"id": "${id}",
"version": "${version}",
"name": "${name}",
"description": "Lightweight config library with config screens and commands.",
"authors": [
"Motschen"
],
"contributors": [
"maloryware",
"Jaffe2718"
],
"contact": {
"homepage": "https://www.midnightdust.eu/",
"sources": "https://github.com/TeamMidnightDust/MidnightLib",
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues"
},
"license": "MIT",
"icon": "assets/midnightlib/icon.png",
"environment": "*",
"entrypoints": {
"server": [
"eu.midnightdust.lib.config.AutoCommand"
],
"client": [
"eu.midnightdust.core.MidnightLib"
],
"modmenu": [
"eu.midnightdust.core.MidnightLib\$ModMenuInit"
]
},
"depends": {
"fabric-resource-loader-v0": "*",
"minecraft": "${minecraft}"
},
"mixins": [
"midnightlib.mixins.json"
],
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "http://discord.midnightdust.eu/",
"modmenu.website": "https://midnightdust.eu/midnightlib",
"midnightlib.wiki": "https://midnightdust.eu/wiki/midnightlib"
},
"badges": [ "library" ]
}
}
}

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric==1.21.5
mod.mc_dep_forgelike=[1.21.5]
mod.mc_dep_fabric=>=1.21.4 <=1.21.5
mod.mc_dep_forgelike=[1.21.4, 1.21.5]
mod.mc_title=1.21.5
mod.mc_targets=1.21.5
mod.mc_targets=1.21.4 1.21.5
deps.forge_loader=0
deps.neoforge_loader=21.5.54-beta

View File

@@ -0,0 +1,31 @@
modLoader = "javafml"
loaderVersion = "[2,)"
#issueTrackerURL = ""
license = "MIT License"
[[mods]]
modId = "midnightlib"
version = "${version}"
displayName = "${name}"
logoFile = "midnightlib.png"
authors = "TeamMidnightDust, Motschen"
description = '''
Lightweight config library with config screens and commands.
'''
[[mixins]]
config = "midnightlib.mixins.json"
[[dependencies.midnightlib]]
modId = "neoforge"
mandatory = true
versionRange = "[20.5,)"
ordering = "NONE"
side = "BOTH"
[[dependencies.midnightlib]]
modId = "minecraft"
mandatory = true
versionRange = "${minecraft}"
ordering = "NONE"
side = "BOTH"

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric==1.21.8
mod.mc_dep_forgelike=[1.21.8]
mod.mc_dep_fabric=>=1.21.6 <=1.21.8
mod.mc_dep_forgelike=[1.21.6, 1.21.8]
mod.mc_title=1.21.8
mod.mc_targets=1.21.8
mod.mc_targets=1.21.6 1.21.7 1.21.8
deps.forge_loader=0
deps.neoforge_loader=21.8.50

View File

@@ -0,0 +1,54 @@
{
"schemaVersion": 1,
"id": "${id}",
"version": "${version}",
"name": "${name}",
"description": "Lightweight config library with config screens and commands.",
"authors": [
"Motschen"
],
"contributors": [
"maloryware",
"Jaffe2718"
],
"contact": {
"homepage": "https://www.midnightdust.eu/",
"sources": "https://github.com/TeamMidnightDust/MidnightLib",
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues"
},
"license": "MIT",
"icon": "assets/midnightlib/icon.png",
"environment": "*",
"entrypoints": {
"server": [
"eu.midnightdust.lib.config.AutoCommand"
],
"client": [
"eu.midnightdust.core.MidnightLib"
],
"modmenu": [
"eu.midnightdust.core.MidnightLib\$ModMenuInit"
]
},
"depends": {
"fabric-resource-loader-v0": "*",
"minecraft": "${minecraft}"
},
"mixins": [
"midnightlib.mixins.json"
],
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "http://discord.midnightdust.eu/",
"modmenu.website": "https://midnightdust.eu/midnightlib",
"midnightlib.wiki": "https://midnightdust.eu/wiki/midnightlib"
},
"badges": [ "library" ]
}
}
}

View File

@@ -1,7 +1,7 @@
mod.mc_dep_fabric==1.21.5
mod.mc_dep_forgelike=[1.21.5]
mod.mc_title=1.21.5
mod.mc_targets=1.21.5
mod.mc_dep_fabric=>=1.21.6 <=1.21.8
mod.mc_dep_forgelike=[1.21.6, 1.21.8]
mod.mc_title=1.21.8
mod.mc_targets=1.21.6 1.21.7 1.21.8
deps.forge_loader=0
deps.neoforge_loader=21.8.50

View File

@@ -0,0 +1,31 @@
modLoader = "javafml"
loaderVersion = "[2,)"
#issueTrackerURL = ""
license = "MIT License"
[[mods]]
modId = "midnightlib"
version = "${version}"
displayName = "${name}"
logoFile = "midnightlib.png"
authors = "TeamMidnightDust, Motschen"
description = '''
Lightweight config library with config screens and commands.
'''
[[mixins]]
config = "midnightlib.mixins.json"
[[dependencies.midnightlib]]
modId = "neoforge"
mandatory = true
versionRange = "[20.5,)"
ordering = "NONE"
side = "BOTH"
[[dependencies.midnightlib]]
modId = "minecraft"
mandatory = true
versionRange = "${minecraft}"
ordering = "NONE"
side = "BOTH"

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B