Skip to content

Commit

Permalink
Implement /mfrc and /mfsrc commands to reload configs on client/serve…
Browse files Browse the repository at this point in the history
…r respectively
  • Loading branch information
embeddedt committed Aug 3, 2023
1 parent c874994 commit 14170ad
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 19 deletions.
Expand Up @@ -3,6 +3,7 @@
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;
Expand All @@ -17,7 +18,6 @@

public class NightConfigFixer {
public static final LinkedHashSet<Runnable> configsToReload = new LinkedHashSet<>();
private static int tickCounter = 0;
public static void monitorFileWatcher() {
if(!ModernFixMixinPlugin.instance.isOptionEnabled("bugfix.fix_config_crashes.NightConfigFixerMixin"))
return;
Expand All @@ -32,17 +32,9 @@ public static void monitorFileWatcher() {
}, "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<Runnable> runnablesToRun;
synchronized (configsToReload) {
if(configsToReload.isEmpty())
return;
runnablesToRun = new ArrayList<>(configsToReload);
configsToReload.clear();
}
Expand Down Expand Up @@ -92,6 +84,8 @@ static class MonitoringConfigTracker implements Runnable {
@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);
}
}
Expand Down
Expand Up @@ -4,7 +4,7 @@
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;
Expand All @@ -21,7 +21,6 @@
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;
Expand Down Expand Up @@ -54,8 +53,15 @@ public void onConfigKey(TickEvent.ClientTickEvent event) {
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());
}
}

Expand Down
@@ -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.*;
Expand All @@ -16,18 +18,17 @@
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;
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;
Expand Down Expand Up @@ -59,9 +60,15 @@ public 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.<CommandSourceStack>literal(name)
.requires(source -> source.hasPermission(3))
.executes(context -> {
NightConfigFixer.runReloads();
return 1;
}));
}
}

Expand Down

0 comments on commit 14170ad

Please sign in to comment.