Implement /mfrc and /mfsrc commands to reload configs on client/server respectively
This commit is contained in:
parent
c8749940f7
commit
14170ade1f
|
|
@ -3,6 +3,7 @@ package org.embeddedt.modernfix.forge.config;
|
||||||
import com.electronwill.nightconfig.core.file.FileWatcher;
|
import com.electronwill.nightconfig.core.file.FileWatcher;
|
||||||
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
||||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||||
|
import net.minecraftforge.fml.loading.FMLLoader;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
|
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
|
||||||
import org.embeddedt.modernfix.util.CommonModUtil;
|
import org.embeddedt.modernfix.util.CommonModUtil;
|
||||||
|
|
@ -17,7 +18,6 @@ import java.util.function.Function;
|
||||||
|
|
||||||
public class NightConfigFixer {
|
public class NightConfigFixer {
|
||||||
public static final LinkedHashSet<Runnable> configsToReload = new LinkedHashSet<>();
|
public static final LinkedHashSet<Runnable> configsToReload = new LinkedHashSet<>();
|
||||||
private static int tickCounter = 0;
|
|
||||||
public static void monitorFileWatcher() {
|
public static void monitorFileWatcher() {
|
||||||
if(!ModernFixMixinPlugin.instance.isOptionEnabled("bugfix.fix_config_crashes.NightConfigFixerMixin"))
|
if(!ModernFixMixinPlugin.instance.isOptionEnabled("bugfix.fix_config_crashes.NightConfigFixerMixin"))
|
||||||
return;
|
return;
|
||||||
|
|
@ -32,17 +32,9 @@ public class NightConfigFixer {
|
||||||
}, "replacing Night Config watchedFiles map");
|
}, "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() {
|
public static void runReloads() {
|
||||||
if((tickCounter++ % 20) != 0)
|
|
||||||
return;
|
|
||||||
List<Runnable> runnablesToRun;
|
List<Runnable> runnablesToRun;
|
||||||
synchronized (configsToReload) {
|
synchronized (configsToReload) {
|
||||||
if(configsToReload.isEmpty())
|
|
||||||
return;
|
|
||||||
runnablesToRun = new ArrayList<>(configsToReload);
|
runnablesToRun = new ArrayList<>(configsToReload);
|
||||||
configsToReload.clear();
|
configsToReload.clear();
|
||||||
}
|
}
|
||||||
|
|
@ -92,6 +84,8 @@ public class NightConfigFixer {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
synchronized(configsToReload) {
|
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);
|
configsToReload.add(configTracker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.mojang.blaze3d.platform.InputConstants;
|
||||||
import net.minecraft.client.KeyMapping;
|
import net.minecraft.client.KeyMapping;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.components.DebugScreenOverlay;
|
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.RecipesUpdatedEvent;
|
||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.client.gui.ForgeIngameGui;
|
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.lifecycle.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
|
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraftforge.fml.loading.FMLEnvironment;
|
|
||||||
import org.embeddedt.modernfix.ModernFixClient;
|
import org.embeddedt.modernfix.ModernFixClient;
|
||||||
import org.embeddedt.modernfix.forge.config.NightConfigFixer;
|
import org.embeddedt.modernfix.forge.config.NightConfigFixer;
|
||||||
import org.embeddedt.modernfix.screen.ModernFixConfigScreen;
|
import org.embeddedt.modernfix.screen.ModernFixConfigScreen;
|
||||||
|
|
@ -54,8 +53,15 @@ public class ModernFixClientForge {
|
||||||
if(event.phase == TickEvent.Phase.START && configKey.consumeClick()) {
|
if(event.phase == TickEvent.Phase.START && configKey.consumeClick()) {
|
||||||
Minecraft.getInstance().setScreen(new ModernFixConfigScreen(Minecraft.getInstance().screen));
|
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();
|
NightConfigFixer.runReloads();
|
||||||
|
event.setCanceled(true);
|
||||||
|
// add it to chat history
|
||||||
|
Minecraft.getInstance().gui.getChat().addRecentChat(event.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
package org.embeddedt.modernfix.forge.init;
|
package org.embeddedt.modernfix.forge.init;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
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.minecraft.world.item.Item;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.OnDatapackSyncEvent;
|
import net.minecraftforge.event.OnDatapackSyncEvent;
|
||||||
|
import net.minecraftforge.event.RegisterCommandsEvent;
|
||||||
import net.minecraftforge.event.RegistryEvent;
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.EventPriority;
|
import net.minecraftforge.eventbus.api.EventPriority;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.*;
|
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.FMLServerStartedEvent;
|
||||||
import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
|
import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraftforge.fml.loading.FMLEnvironment;
|
|
||||||
import net.minecraftforge.fml.loading.FMLLoader;
|
import net.minecraftforge.fml.loading.FMLLoader;
|
||||||
import net.minecraftforge.fml.network.FMLNetworkConstants;
|
import net.minecraftforge.fml.network.FMLNetworkConstants;
|
||||||
import net.minecraftforge.fml.server.ServerLifecycleHooks;
|
import net.minecraftforge.fml.server.ServerLifecycleHooks;
|
||||||
|
|
@ -24,10 +25,10 @@ import net.minecraftforge.registries.ForgeRegistries;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
|
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.ClassLoadHack;
|
||||||
import org.embeddedt.modernfix.forge.classloading.ModFileScanDataDeduplicator;
|
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.ConfigFixer;
|
||||||
import org.embeddedt.modernfix.forge.config.NightConfigFixer;
|
import org.embeddedt.modernfix.forge.config.NightConfigFixer;
|
||||||
import org.embeddedt.modernfix.forge.packet.PacketHandler;
|
import org.embeddedt.modernfix.forge.packet.PacketHandler;
|
||||||
|
|
@ -59,9 +60,15 @@ public class ModernFixForge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onServerTick(TickEvent.ServerTickEvent event) {
|
public void onCommandRegister(RegisterCommandsEvent event) {
|
||||||
if(FMLEnvironment.dist == Dist.DEDICATED_SERVER && event.phase == TickEvent.Phase.END && ModernFixForge.launchDone) {
|
// Register separate commands since redirecting doesn't work without arguments
|
||||||
NightConfigFixer.runReloads();
|
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;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user