From 14170ade1feabd4eee75d788814a5908472a0b80 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 3 Aug 2023 19:45:14 -0400 Subject: [PATCH] Implement /mfrc and /mfsrc commands to reload configs on client/server respectively --- .../forge/config/NightConfigFixer.java | 12 +++-------- .../forge/init/ModernFixClientForge.java | 12 ++++++++--- .../modernfix/forge/init/ModernFixForge.java | 21 ++++++++++++------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java b/forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java index b503a2a5..a471e9ac 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.forge.config; import com.electronwill.nightconfig.core.file.FileWatcher; import cpw.mods.modlauncher.api.LamdbaExceptionUtils; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.loading.FMLLoader; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.util.CommonModUtil; @@ -17,7 +18,6 @@ import java.util.function.Function; public class NightConfigFixer { public static final LinkedHashSet configsToReload = new LinkedHashSet<>(); - private static int tickCounter = 0; public static void monitorFileWatcher() { if(!ModernFixMixinPlugin.instance.isOptionEnabled("bugfix.fix_config_crashes.NightConfigFixerMixin")) return; @@ -32,17 +32,9 @@ public class NightConfigFixer { }, "replacing Night Config watchedFiles map"); } - /** - * Called by the render thread on the client, and the server thread on the server. Processes all the accumulated - * file watch events. - */ public static void runReloads() { - if((tickCounter++ % 20) != 0) - return; List runnablesToRun; synchronized (configsToReload) { - if(configsToReload.isEmpty()) - return; runnablesToRun = new ArrayList<>(configsToReload); configsToReload.clear(); } @@ -92,6 +84,8 @@ public class NightConfigFixer { @Override public void run() { synchronized(configsToReload) { + if(configsToReload.size() == 0) + ModernFixMixinPlugin.instance.logger.info("Please use /{} to reload any changed mod config files", FMLLoader.getDist().isDedicatedServer() ? "mfsrc" : "mfrc"); configsToReload.add(configTracker); } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java index bc361764..60ac7521 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java @@ -4,7 +4,7 @@ import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.DebugScreenOverlay; -import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ClientChatEvent; import net.minecraftforge.client.event.RecipesUpdatedEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.gui.ForgeIngameGui; @@ -21,7 +21,6 @@ import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.server.FMLServerStartedEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLEnvironment; import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.forge.config.NightConfigFixer; import org.embeddedt.modernfix.screen.ModernFixConfigScreen; @@ -54,8 +53,15 @@ public class ModernFixClientForge { if(event.phase == TickEvent.Phase.START && configKey.consumeClick()) { Minecraft.getInstance().setScreen(new ModernFixConfigScreen(Minecraft.getInstance().screen)); } - if(FMLEnvironment.dist == Dist.CLIENT && event.phase == TickEvent.Phase.START && ModernFixForge.launchDone) { + } + + @SubscribeEvent(priority = EventPriority.LOW) + public void onClientChat(ClientChatEvent event) { + if(event.getMessage() != null && event.getMessage().trim().equals("/mfrc")) { NightConfigFixer.runReloads(); + event.setCanceled(true); + // add it to chat history + Minecraft.getInstance().gui.getChat().addRecentChat(event.getMessage()); } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java index 72d67ede..844b9f9f 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java @@ -1,12 +1,14 @@ package org.embeddedt.modernfix.forge.init; import com.google.common.collect.ImmutableList; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import net.minecraft.commands.CommandSourceStack; import net.minecraft.world.item.Item; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.OnDatapackSyncEvent; +import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.*; @@ -16,7 +18,6 @@ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.server.FMLServerStartedEvent; import net.minecraftforge.fml.event.server.FMLServerStoppedEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.fml.network.FMLNetworkConstants; import net.minecraftforge.fml.server.ServerLifecycleHooks; @@ -24,10 +25,10 @@ import net.minecraftforge.registries.ForgeRegistries; import org.apache.commons.lang3.tuple.Pair; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; +import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler; +import org.embeddedt.modernfix.forge.ModernFixConfig; import org.embeddedt.modernfix.forge.classloading.ClassLoadHack; import org.embeddedt.modernfix.forge.classloading.ModFileScanDataDeduplicator; -import org.embeddedt.modernfix.forge.ModernFixConfig; -import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler; import org.embeddedt.modernfix.forge.config.ConfigFixer; import org.embeddedt.modernfix.forge.config.NightConfigFixer; import org.embeddedt.modernfix.forge.packet.PacketHandler; @@ -59,9 +60,15 @@ public class ModernFixForge { } @SubscribeEvent - public void onServerTick(TickEvent.ServerTickEvent event) { - if(FMLEnvironment.dist == Dist.DEDICATED_SERVER && event.phase == TickEvent.Phase.END && ModernFixForge.launchDone) { - NightConfigFixer.runReloads(); + public void onCommandRegister(RegisterCommandsEvent event) { + // Register separate commands since redirecting doesn't work without arguments + for(String name : new String[] { "mfrc", "mfsrc"}) { + event.getDispatcher().register(LiteralArgumentBuilder.literal(name) + .requires(source -> source.hasPermission(3)) + .executes(context -> { + NightConfigFixer.runReloads(); + return 1; + })); } }