From fb1c4c1158c2728c77a12416c69336a46ff18f05 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Mon, 11 Dec 2023 19:28:04 +0100 Subject: [PATCH] MidnightLib 1.5.2 - NeoForge & more cleanness - Native support for NeoForge (& dropped support for regular Forge) - Cleanup of some code -> Overview button is now added via callbacks instead of a mixin - Unify client & server classes - Minor breaking change only affecting mods using the hiding functionality --- common/build.gradle | 1 + ...idnightLibServer.java => MidnightLib.java} | 13 +++- .../midnightdust/core/MidnightLibClient.java | 14 ----- .../core/mixin/MixinOptionsScreen.java | 34 ---------- .../screen/MidnightConfigOverviewScreen.java | 21 ++++++- .../lib/config/MidnightConfig.java | 2 +- .../main/resources/architectury.common.json | 4 +- .../main/resources/midnightlib.accesswidener | 3 + .../main/resources/midnightlib.mixins.json | 1 - .../midnightdust/lib/config/AutoModMenu.java | 4 +- .../fabric/core/MidnightLibFabric.java | 14 +++-- fabric/src/main/resources/fabric.mod.json | 9 +-- forge/gradle.properties | 1 - .../forge/MidnightLibClientEvents.java | 25 -------- .../midnightdust/forge/MidnightLibForge.java | 20 ------ .../forge/MidnightLibServerEvents.java | 19 ------ gradle.properties | 8 +-- {forge => neoforge}/build.gradle | 16 ++--- neoforge/gradle.properties | 1 + .../util/neoforge}/PlatformFunctionsImpl.java | 8 +-- .../neoforge/MidnightLibNeoForge.java | 58 ++++++++++++++++++ .../src/main/resources/META-INF/mods.toml | 8 +-- .../src/main/resources/midnightlib.png | Bin .../src/main/resources/pack.mcmeta | 2 +- settings.gradle | 4 +- 25 files changed, 135 insertions(+), 155 deletions(-) rename common/src/main/java/eu/midnightdust/core/{MidnightLibServer.java => MidnightLib.java} (57%) delete mode 100755 common/src/main/java/eu/midnightdust/core/MidnightLibClient.java delete mode 100755 common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java create mode 100644 common/src/main/resources/midnightlib.accesswidener delete mode 100644 common/src/main/resources/midnightlib.mixins.json delete mode 100644 forge/gradle.properties delete mode 100644 forge/src/main/java/eu/midnightdust/forge/MidnightLibClientEvents.java delete mode 100644 forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java delete mode 100644 forge/src/main/java/eu/midnightdust/forge/MidnightLibServerEvents.java rename {forge => neoforge}/build.gradle (80%) create mode 100644 neoforge/gradle.properties rename {forge/src/main/java/eu/midnightdust/lib/util/forge => neoforge/src/main/java/eu/midnightdust/lib/util/neoforge}/PlatformFunctionsImpl.java (81%) create mode 100644 neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java rename {forge => neoforge}/src/main/resources/META-INF/mods.toml (81%) rename {forge => neoforge}/src/main/resources/midnightlib.png (100%) rename {forge => neoforge}/src/main/resources/pack.mcmeta (71%) diff --git a/common/build.gradle b/common/build.gradle index 4b57e84..21d4a73 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -3,6 +3,7 @@ architectury { } loom { + accessWidenerPath = file("src/main/resources/midnightlib.accesswidener") } dependencies { diff --git a/common/src/main/java/eu/midnightdust/core/MidnightLibServer.java b/common/src/main/java/eu/midnightdust/core/MidnightLib.java similarity index 57% rename from common/src/main/java/eu/midnightdust/core/MidnightLibServer.java rename to common/src/main/java/eu/midnightdust/core/MidnightLib.java index a092123..b729dc1 100755 --- a/common/src/main/java/eu/midnightdust/core/MidnightLibServer.java +++ b/common/src/main/java/eu/midnightdust/core/MidnightLib.java @@ -1,12 +1,23 @@ package eu.midnightdust.core; +import eu.midnightdust.core.config.MidnightLibConfig; import eu.midnightdust.lib.config.AutoCommand; import eu.midnightdust.lib.config.MidnightConfig; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; -public class MidnightLibServer { +public class MidnightLib { + public static List hiddenMods = new ArrayList<>(); + @Environment(EnvType.CLIENT) + public static void onInitializeClient() { + MidnightLibConfig.init("midnightlib", MidnightLibConfig.class); + } + @Environment(EnvType.SERVER) public static void onInitializeServer() { MidnightConfig.configClass.forEach((modid, config) -> { for (Field field : config.getFields()) { diff --git a/common/src/main/java/eu/midnightdust/core/MidnightLibClient.java b/common/src/main/java/eu/midnightdust/core/MidnightLibClient.java deleted file mode 100755 index 2cfdd0d..0000000 --- a/common/src/main/java/eu/midnightdust/core/MidnightLibClient.java +++ /dev/null @@ -1,14 +0,0 @@ -package eu.midnightdust.core; - -import eu.midnightdust.core.config.MidnightLibConfig; - -import java.util.ArrayList; -import java.util.List; - -public class MidnightLibClient { - public static List hiddenMods = new ArrayList<>(); - - public static void onInitializeClient() { - MidnightLibConfig.init("midnightlib", MidnightLibConfig.class); - } -} diff --git a/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java b/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java deleted file mode 100755 index f6af033..0000000 --- a/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java +++ /dev/null @@ -1,34 +0,0 @@ -package eu.midnightdust.core.mixin; - -import eu.midnightdust.core.config.MidnightLibConfig; -import eu.midnightdust.core.screen.MidnightConfigOverviewScreen; -import eu.midnightdust.lib.util.PlatformFunctions; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.option.OptionsScreen; -import net.minecraft.client.gui.widget.TextIconButtonWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -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; - -import java.util.Objects; - -@Mixin(OptionsScreen.class) -public class MixinOptionsScreen extends Screen { - protected MixinOptionsScreen(Text title) { - super(title); - } - - @Inject(at = @At("HEAD"),method = "init") - private void midnightlib$init(CallbackInfo ci) { - if (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.TRUE) || (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.MODMENU) && !PlatformFunctions.isModLoaded("modmenu"))) { - TextIconButtonWidget button = TextIconButtonWidget.builder(Text.translatable("midnightlib.overview.title"), ( - buttonWidget) -> Objects.requireNonNull(client).setScreen(new MidnightConfigOverviewScreen(this)), true) - .texture(new Identifier("midnightlib","icon/midnightlib"), 16, 16).dimension(20, 20).build(); - button.setPosition(this.width / 2 + 158, this.height / 6 - 12); - this.addDrawableChild(button); - } - } -} diff --git a/common/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java b/common/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java index 82b1e69..12e5da9 100755 --- a/common/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java +++ b/common/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java @@ -1,14 +1,20 @@ package eu.midnightdust.core.screen; -import eu.midnightdust.core.MidnightLibClient; +import eu.midnightdust.core.MidnightLib; +import eu.midnightdust.core.config.MidnightLibConfig; import eu.midnightdust.lib.config.MidnightConfig; +import eu.midnightdust.lib.util.PlatformFunctions; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.option.OptionsScreen; import net.minecraft.client.gui.widget.*; import net.minecraft.screen.ScreenTexts; import net.minecraft.text.*; +import net.minecraft.util.Identifier; + import java.util.*; @Environment(EnvType.CLIENT) @@ -31,7 +37,7 @@ public class MidnightConfigOverviewScreen extends Screen { List sortedMods = new ArrayList<>(MidnightConfig.configClass.keySet()); Collections.sort(sortedMods); sortedMods.forEach((modid) -> { - if (!MidnightLibClient.hiddenMods.contains(modid)) { + if (!MidnightLib.hiddenMods.contains(modid)) { list.addButton(List.of(ButtonWidget.builder(Text.translatable(modid +".midnightconfig.title"), (button) -> Objects.requireNonNull(client).setScreen(MidnightConfig.getScreen(this,modid))).dimensions(this.width / 2 - 125, this.height - 28, 250, 20).build()), null, null); } @@ -47,4 +53,15 @@ public class MidnightConfigOverviewScreen extends Screen { context.drawCenteredTextWithShadow(textRenderer, title, width / 2, 15, 0xFFFFFF); } @Override public void renderBackground(DrawContext c, int x, int y, float d) {} + + public static void addButtonToOptionsScreen(Screen screen, MinecraftClient client) { + if (screen.getClass() == OptionsScreen.class && MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.TRUE) + || (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.MODMENU) && !PlatformFunctions.isModLoaded("modmenu"))) { + TextIconButtonWidget button = TextIconButtonWidget.builder(Text.translatable("midnightlib.overview.title"), ( + buttonWidget) -> Objects.requireNonNull(client).setScreen(new MidnightConfigOverviewScreen(screen)), true) + .texture(new Identifier("midnightlib","icon/midnightlib"), 16, 16).dimension(20, 20).build(); + button.setPosition(screen.width / 2 + 158, screen.height / 6 - 12); + screen.addDrawableChild(button); + } + } } \ No newline at end of file diff --git a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index 4245352..1e2e939 100755 --- a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -194,7 +194,7 @@ public abstract class MidnightConfig { if (!Files.exists(path)) Files.createFile(path); Files.write(path, gson.toJson(getClass(modid)).getBytes()); } catch (Exception e) { - e.printStackTrace(); + e.fillInStackTrace(); } } @Environment(EnvType.CLIENT) diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json index 9e26dfe..093c5d3 100644 --- a/common/src/main/resources/architectury.common.json +++ b/common/src/main/resources/architectury.common.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "accessWidener": "midnightlib.accesswidener" +} \ No newline at end of file diff --git a/common/src/main/resources/midnightlib.accesswidener b/common/src/main/resources/midnightlib.accesswidener new file mode 100644 index 0000000..561ebaa --- /dev/null +++ b/common/src/main/resources/midnightlib.accesswidener @@ -0,0 +1,3 @@ +accessWidener v2 named + +accessible method net/minecraft/client/gui/screen/Screen addDrawableChild (Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element; \ No newline at end of file diff --git a/common/src/main/resources/midnightlib.mixins.json b/common/src/main/resources/midnightlib.mixins.json deleted file mode 100644 index 20c4305..0000000 --- a/common/src/main/resources/midnightlib.mixins.json +++ /dev/null @@ -1 +0,0 @@ -{"required": true,"minVersion": "0.8","package": "eu.midnightdust.core.mixin","compatibilityLevel": "JAVA_17","client": ["MixinOptionsScreen"],"injectors": {"defaultRequire": 1}} \ No newline at end of file diff --git a/fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java b/fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java index 4a16c68..72bcc21 100755 --- a/fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java +++ b/fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java @@ -2,7 +2,7 @@ package eu.midnightdust.lib.config; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; -import eu.midnightdust.core.MidnightLibClient; +import eu.midnightdust.core.MidnightLib; import eu.midnightdust.core.config.MidnightLibConfig; import java.util.HashMap; @@ -19,7 +19,7 @@ public class AutoModMenu implements ModMenuApi { public Map> getProvidedConfigScreenFactories() { HashMap> map = new HashMap<>(); MidnightConfig.configClass.forEach((modid, cClass) -> { - if (!MidnightLibClient.hiddenMods.contains(modid)) + if (!MidnightLib.hiddenMods.contains(modid)) map.put(modid, parent -> MidnightConfig.getScreen(parent, modid)); } ); diff --git a/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibFabric.java b/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibFabric.java index c1e08ee..f1cffed 100644 --- a/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibFabric.java +++ b/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibFabric.java @@ -1,19 +1,21 @@ package eu.midnightdust.fabric.core; -import eu.midnightdust.core.MidnightLibClient; -import eu.midnightdust.core.MidnightLibServer; +import eu.midnightdust.core.MidnightLib; +import eu.midnightdust.core.screen.MidnightConfigOverviewScreen; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.DedicatedServerModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; public class MidnightLibFabric implements ClientModInitializer, DedicatedServerModInitializer { @Override @Environment(EnvType.CLIENT) public void onInitializeClient() { - MidnightLibClient.onInitializeClient(); + MidnightLib.onInitializeClient(); + ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { + MidnightConfigOverviewScreen.addButtonToOptionsScreen(screen, client); + }); } @Override @Environment(EnvType.SERVER) - public void onInitializeServer() { - MidnightLibServer.onInitializeServer(); - } + public void onInitializeServer() {MidnightLib.onInitializeServer();} } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 4304f35..3944bac 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -32,13 +32,9 @@ }, "depends": { "fabric-resource-loader-v0": "*", - "minecraft": ">=1.20.2" + "minecraft": ">=1.20.3" }, - "mixins": [ - "midnightlib.mixins.json" - ], - "custom": { "modmenu": { "links": { @@ -50,5 +46,6 @@ }, "badges": [ "library" ] } - } + }, + "accessWidener": "midnightlib.accesswidener" } diff --git a/forge/gradle.properties b/forge/gradle.properties deleted file mode 100644 index 32f842a..0000000 --- a/forge/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/eu/midnightdust/forge/MidnightLibClientEvents.java b/forge/src/main/java/eu/midnightdust/forge/MidnightLibClientEvents.java deleted file mode 100644 index af1ff6e..0000000 --- a/forge/src/main/java/eu/midnightdust/forge/MidnightLibClientEvents.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.midnightdust.forge; - -import eu.midnightdust.lib.config.MidnightConfig; -import eu.midnightdust.lib.util.MidnightColorUtil; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.ConfigScreenHandler; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; - -@Mod.EventBusSubscriber(modid = "midnightlib", bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) -public class MidnightLibClientEvents { - @SubscribeEvent - public static void onPostInit(FMLClientSetupEvent event) { - ModList.get().forEachModContainer((modid, modContainer) -> { - if (MidnightConfig.configClass.containsKey(modid)) { - modContainer.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> - new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, modid))); - } - }); - } -} diff --git a/forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java b/forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java deleted file mode 100644 index 7ecbeee..0000000 --- a/forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java +++ /dev/null @@ -1,20 +0,0 @@ -package eu.midnightdust.forge; - -import eu.midnightdust.core.MidnightLibClient; -import eu.midnightdust.core.MidnightLibServer; -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; - -import static net.minecraftforge.fml.IExtensionPoint.DisplayTest.IGNORESERVERONLY; - -@Mod("midnightlib") -public class MidnightLibForge { - public MidnightLibForge() { - ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IGNORESERVERONLY, (remote, server) -> true)); - DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> MidnightLibClient::onInitializeClient); - DistExecutor.safeRunWhenOn(Dist.DEDICATED_SERVER, () -> MidnightLibServer::onInitializeServer); - } -} diff --git a/forge/src/main/java/eu/midnightdust/forge/MidnightLibServerEvents.java b/forge/src/main/java/eu/midnightdust/forge/MidnightLibServerEvents.java deleted file mode 100644 index faa63b0..0000000 --- a/forge/src/main/java/eu/midnightdust/forge/MidnightLibServerEvents.java +++ /dev/null @@ -1,19 +0,0 @@ -package eu.midnightdust.forge; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import eu.midnightdust.lib.config.AutoCommand; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = "midnightlib", value = Dist.DEDICATED_SERVER) -public class MidnightLibServerEvents { - @SubscribeEvent - public static void registerCommands(RegisterCommandsEvent event) { - for (LiteralArgumentBuilder command : AutoCommand.commands){ - event.getDispatcher().register(command); - } - } -} diff --git a/gradle.properties b/gradle.properties index 92122bc..be0ee04 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,16 +2,16 @@ org.gradle.jvmargs=-Xmx4096M minecraft_version=1.20.4 yarn_mappings=1.20.4+build.1 -enabled_platforms=fabric +enabled_platforms=fabric,neoforge archives_base_name=midnightlib -mod_version=1.5.1 +mod_version=1.5.2 maven_group=eu.midnightdust -fabric_loader_version=0.15.0 +fabric_loader_version=0.15.1 fabric_api_version=0.91.1+1.20.4 -forge_version=1.20.3-49.0.2 +neoforge_version=20.4.12-beta quilt_loader_version=0.19.0-beta.18 quilt_fabric_api_version=7.0.1+0.83.0-1.20 diff --git a/forge/build.gradle b/neoforge/build.gradle similarity index 80% rename from forge/build.gradle rename to neoforge/build.gradle index e4cd273..d7870e2 100644 --- a/forge/build.gradle +++ b/neoforge/build.gradle @@ -1,16 +1,17 @@ plugins { id "com.github.johnrengelman.shadow" version "7.1.2" } +repositories{ + maven {url "https://maven.neoforged.net/releases"} +} architectury { platformSetupLoomIde() - forge() + neoForge() } loom { - forge { - mixinConfig "midnightlib.mixins.json" - } + accessWidenerPath = project(":common").loom.accessWidenerPath } configurations { @@ -19,14 +20,14 @@ configurations { compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common developmentForge.extendsFrom common - archivesBaseName = rootProject.archives_base_name + "-forge" + archivesBaseName = rootProject.archives_base_name + "-neoforge" } dependencies { - forge "net.minecraftforge:forge:${rootProject.forge_version}" + neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}" common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive = false } } processResources { @@ -46,6 +47,7 @@ shadowJar { } remapJar { + atAccessWideners.add('midnightlib.accesswidener') input.set shadowJar.archiveFile dependsOn shadowJar } diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 0000000..2914393 --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/forge/src/main/java/eu/midnightdust/lib/util/forge/PlatformFunctionsImpl.java b/neoforge/src/main/java/eu/midnightdust/lib/util/neoforge/PlatformFunctionsImpl.java similarity index 81% rename from forge/src/main/java/eu/midnightdust/lib/util/forge/PlatformFunctionsImpl.java rename to neoforge/src/main/java/eu/midnightdust/lib/util/neoforge/PlatformFunctionsImpl.java index 84471c8..16ee0a0 100644 --- a/forge/src/main/java/eu/midnightdust/lib/util/forge/PlatformFunctionsImpl.java +++ b/neoforge/src/main/java/eu/midnightdust/lib/util/neoforge/PlatformFunctionsImpl.java @@ -1,11 +1,11 @@ -package eu.midnightdust.lib.util.forge; +package eu.midnightdust.lib.util.neoforge; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import eu.midnightdust.lib.util.PlatformFunctions; import net.minecraft.server.command.ServerCommandSource; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fml.loading.FMLPaths; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.fml.loading.FMLPaths; import java.nio.file.Path; diff --git a/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java b/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java new file mode 100644 index 0000000..31b0124 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java @@ -0,0 +1,58 @@ +package eu.midnightdust.neoforge; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import eu.midnightdust.core.MidnightLib; +import eu.midnightdust.core.screen.MidnightConfigOverviewScreen; +import eu.midnightdust.lib.config.AutoCommand; +import eu.midnightdust.lib.config.MidnightConfig; +import net.minecraft.server.command.ServerCommandSource; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.IExtensionPoint; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.client.ConfigScreenHandler; +import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.event.RegisterCommandsEvent; + +import static net.neoforged.fml.IExtensionPoint.DisplayTest.IGNORESERVERONLY; + +@Mod("midnightlib") +public class MidnightLibNeoForge { + public MidnightLibNeoForge() { + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IGNORESERVERONLY, (remote, server) -> true)); + if (FMLEnvironment.dist == Dist.CLIENT) MidnightLib.onInitializeClient(); else MidnightLib.onInitializeServer(); + } + @Mod.EventBusSubscriber(modid = "midnightlib", bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) + public static class MidnightLibBusEvents { + @SubscribeEvent + public static void onPostInit(FMLClientSetupEvent event) { + ModList.get().forEachModContainer((modid, modContainer) -> { + if (MidnightConfig.configClass.containsKey(modid)) { + modContainer.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> + new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, modid))); + } + }); + } + } + @Mod.EventBusSubscriber(modid = "midnightlib", value = Dist.CLIENT) + public static class MidnightLibClientEvents { + @SubscribeEvent + public static void afterInitScreen(ScreenEvent.Init.Post event) { + MidnightConfigOverviewScreen.addButtonToOptionsScreen(event.getScreen(), event.getScreen().getMinecraft()); + } + } + + @Mod.EventBusSubscriber(modid = "midnightlib", value = Dist.DEDICATED_SERVER) + public static class MidnightLibServerEvents { + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) { + for (LiteralArgumentBuilder command : AutoCommand.commands){ + event.getDispatcher().register(command); + } + } + } +} diff --git a/forge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml similarity index 81% rename from forge/src/main/resources/META-INF/mods.toml rename to neoforge/src/main/resources/META-INF/mods.toml index 2cde8d9..466a580 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[43,)" +loaderVersion = "[1,)" #issueTrackerURL = "" license = "MIT License" @@ -15,15 +15,15 @@ Common Library for Team MidnightDust's mods. #logoFile = "" [[dependencies.midnightlib]] -modId = "forge" +modId = "neoforge" mandatory = true -versionRange = "[43,)" +versionRange = "[20.3,)" ordering = "NONE" side = "BOTH" [[dependencies.midnightlib]] modId = "minecraft" mandatory = true -versionRange = "[1.19.4,)" +versionRange = "[1.20.3,)" ordering = "NONE" side = "BOTH" \ No newline at end of file diff --git a/forge/src/main/resources/midnightlib.png b/neoforge/src/main/resources/midnightlib.png similarity index 100% rename from forge/src/main/resources/midnightlib.png rename to neoforge/src/main/resources/midnightlib.png diff --git a/forge/src/main/resources/pack.mcmeta b/neoforge/src/main/resources/pack.mcmeta similarity index 71% rename from forge/src/main/resources/pack.mcmeta rename to neoforge/src/main/resources/pack.mcmeta index 0a839a6..e4499d4 100644 --- a/forge/src/main/resources/pack.mcmeta +++ b/neoforge/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "MidnightLib", - "pack_format": 9 + "pack_format": 22 } } diff --git a/settings.gradle b/settings.gradle index f83aad5..d64842c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ pluginManagement { repositories { maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.architectury.dev/" } - maven { url "https://maven.minecraftforge.net/" } + maven { url "https://maven.neoforged.net/releases" } gradlePluginPortal() } } @@ -11,6 +11,6 @@ include("common") include("fabric-like") include("fabric") //include("quilt") -//include("forge") +include("neoforge") rootProject.name = "midnightlib"