Skip to content

Commit 14170ad

Browse files
committed
Implement /mfrc and /mfsrc commands to reload configs on client/server respectively
1 parent c874994 commit 14170ad

File tree

3 files changed

+26
-19
lines changed

3 files changed

+26
-19
lines changed

forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.electronwill.nightconfig.core.file.FileWatcher;
44
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
55
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
6+
import net.minecraftforge.fml.loading.FMLLoader;
67
import org.embeddedt.modernfix.ModernFix;
78
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
89
import org.embeddedt.modernfix.util.CommonModUtil;
@@ -17,7 +18,6 @@
1718

1819
public class NightConfigFixer {
1920
public static final LinkedHashSet<Runnable> configsToReload = new LinkedHashSet<>();
20-
private static int tickCounter = 0;
2121
public static void monitorFileWatcher() {
2222
if(!ModernFixMixinPlugin.instance.isOptionEnabled("bugfix.fix_config_crashes.NightConfigFixerMixin"))
2323
return;
@@ -32,17 +32,9 @@ public static void monitorFileWatcher() {
3232
}, "replacing Night Config watchedFiles map");
3333
}
3434

35-
/**
36-
* Called by the render thread on the client, and the server thread on the server. Processes all the accumulated
37-
* file watch events.
38-
*/
3935
public static void runReloads() {
40-
if((tickCounter++ % 20) != 0)
41-
return;
4236
List<Runnable> runnablesToRun;
4337
synchronized (configsToReload) {
44-
if(configsToReload.isEmpty())
45-
return;
4638
runnablesToRun = new ArrayList<>(configsToReload);
4739
configsToReload.clear();
4840
}
@@ -92,6 +84,8 @@ static class MonitoringConfigTracker implements Runnable {
9284
@Override
9385
public void run() {
9486
synchronized(configsToReload) {
87+
if(configsToReload.size() == 0)
88+
ModernFixMixinPlugin.instance.logger.info("Please use /{} to reload any changed mod config files", FMLLoader.getDist().isDedicatedServer() ? "mfsrc" : "mfrc");
9589
configsToReload.add(configTracker);
9690
}
9791
}

forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import net.minecraft.client.KeyMapping;
55
import net.minecraft.client.Minecraft;
66
import net.minecraft.client.gui.components.DebugScreenOverlay;
7-
import net.minecraftforge.api.distmarker.Dist;
7+
import net.minecraftforge.client.event.ClientChatEvent;
88
import net.minecraftforge.client.event.RecipesUpdatedEvent;
99
import net.minecraftforge.client.event.RenderGameOverlayEvent;
1010
import net.minecraftforge.client.gui.ForgeIngameGui;
@@ -21,7 +21,6 @@
2121
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
2222
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
2323
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
24-
import net.minecraftforge.fml.loading.FMLEnvironment;
2524
import org.embeddedt.modernfix.ModernFixClient;
2625
import org.embeddedt.modernfix.forge.config.NightConfigFixer;
2726
import org.embeddedt.modernfix.screen.ModernFixConfigScreen;
@@ -54,8 +53,15 @@ public void onConfigKey(TickEvent.ClientTickEvent event) {
5453
if(event.phase == TickEvent.Phase.START && configKey.consumeClick()) {
5554
Minecraft.getInstance().setScreen(new ModernFixConfigScreen(Minecraft.getInstance().screen));
5655
}
57-
if(FMLEnvironment.dist == Dist.CLIENT && event.phase == TickEvent.Phase.START && ModernFixForge.launchDone) {
56+
}
57+
58+
@SubscribeEvent(priority = EventPriority.LOW)
59+
public void onClientChat(ClientChatEvent event) {
60+
if(event.getMessage() != null && event.getMessage().trim().equals("/mfrc")) {
5861
NightConfigFixer.runReloads();
62+
event.setCanceled(true);
63+
// add it to chat history
64+
Minecraft.getInstance().gui.getChat().addRecentChat(event.getMessage());
5965
}
6066
}
6167

forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package org.embeddedt.modernfix.forge.init;
22

33
import com.google.common.collect.ImmutableList;
4+
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
5+
import net.minecraft.commands.CommandSourceStack;
46
import net.minecraft.world.item.Item;
57
import net.minecraftforge.api.distmarker.Dist;
68
import net.minecraftforge.common.MinecraftForge;
79
import net.minecraftforge.event.OnDatapackSyncEvent;
10+
import net.minecraftforge.event.RegisterCommandsEvent;
811
import net.minecraftforge.event.RegistryEvent;
9-
import net.minecraftforge.event.TickEvent;
1012
import net.minecraftforge.eventbus.api.EventPriority;
1113
import net.minecraftforge.eventbus.api.SubscribeEvent;
1214
import net.minecraftforge.fml.*;
@@ -16,18 +18,17 @@
1618
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
1719
import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
1820
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
19-
import net.minecraftforge.fml.loading.FMLEnvironment;
2021
import net.minecraftforge.fml.loading.FMLLoader;
2122
import net.minecraftforge.fml.network.FMLNetworkConstants;
2223
import net.minecraftforge.fml.server.ServerLifecycleHooks;
2324
import net.minecraftforge.registries.ForgeRegistries;
2425
import org.apache.commons.lang3.tuple.Pair;
2526
import org.embeddedt.modernfix.ModernFix;
2627
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
28+
import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler;
29+
import org.embeddedt.modernfix.forge.ModernFixConfig;
2730
import org.embeddedt.modernfix.forge.classloading.ClassLoadHack;
2831
import org.embeddedt.modernfix.forge.classloading.ModFileScanDataDeduplicator;
29-
import org.embeddedt.modernfix.forge.ModernFixConfig;
30-
import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler;
3132
import org.embeddedt.modernfix.forge.config.ConfigFixer;
3233
import org.embeddedt.modernfix.forge.config.NightConfigFixer;
3334
import org.embeddedt.modernfix.forge.packet.PacketHandler;
@@ -59,9 +60,15 @@ public ModernFixForge() {
5960
}
6061

6162
@SubscribeEvent
62-
public void onServerTick(TickEvent.ServerTickEvent event) {
63-
if(FMLEnvironment.dist == Dist.DEDICATED_SERVER && event.phase == TickEvent.Phase.END && ModernFixForge.launchDone) {
64-
NightConfigFixer.runReloads();
63+
public void onCommandRegister(RegisterCommandsEvent event) {
64+
// Register separate commands since redirecting doesn't work without arguments
65+
for(String name : new String[] { "mfrc", "mfsrc"}) {
66+
event.getDispatcher().register(LiteralArgumentBuilder.<CommandSourceStack>literal(name)
67+
.requires(source -> source.hasPermission(3))
68+
.executes(context -> {
69+
NightConfigFixer.runReloads();
70+
return 1;
71+
}));
6572
}
6673
}
6774

0 commit comments

Comments
 (0)