mirror of
https://github.com/System-End/Discord-MC-Chat.git
synced 2026-04-19 22:05:11 +00:00
Add support for resource reloading event to refresh translations
This commit is contained in:
parent
24f559feab
commit
c964552da1
5 changed files with 70 additions and 14 deletions
|
|
@ -24,9 +24,6 @@ public class MinecraftEventHandler {
|
|||
* Initializes the Minecraft event handlers.
|
||||
*/
|
||||
public static void init() {
|
||||
// Initialize Minecraft translations
|
||||
TranslationManager.init();
|
||||
|
||||
EventManager.register(MinecraftEvents.ServerStarted.class, event -> {
|
||||
Map<String, String> placeholders = Map.of();
|
||||
NetworkManager.sendPacketToServer(new MinecraftEventPacket(MinecraftEventPacket.MessageType.SERVER_STARTED, placeholders));
|
||||
|
|
@ -96,6 +93,11 @@ public class MinecraftEventHandler {
|
|||
// Register Minecraft /dmcc commands
|
||||
MinecraftCommands.register(event.dispatcher());
|
||||
});
|
||||
|
||||
EventManager.register(MinecraftEvents.ReloadResources.class, event -> {
|
||||
// Refresh Minecraft translations
|
||||
TranslationManager.init();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -114,4 +114,11 @@ public class MinecraftEvents {
|
|||
CommandDispatcher<CommandSourceStack> dispatcher
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Posted when Minecraft is reloading resources.
|
||||
*/
|
||||
public record ReloadResources(
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
package com.xujiayao.discord_mc_chat.minecraft.mixins;
|
||||
|
||||
import com.xujiayao.discord_mc_chat.minecraft.events.MinecraftEvents;
|
||||
import com.xujiayao.discord_mc_chat.utils.events.EventManager;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.core.LayeredRegistryAccess;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.server.RegistryLayer;
|
||||
import net.minecraft.server.ReloadableServerResources;
|
||||
import net.minecraft.server.packs.resources.ResourceManager;
|
||||
import net.minecraft.world.flag.FeatureFlagSet;
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* @author Xujiayao
|
||||
*/
|
||||
@Mixin(ReloadableServerResources.class)
|
||||
public class MixinReloadableServerResources {
|
||||
|
||||
@Inject(method = "loadResources", at = @At("RETURN"))
|
||||
private static void loadResources(ResourceManager p_248588_,
|
||||
LayeredRegistryAccess<RegistryLayer> p_335667_,
|
||||
List<Registry.PendingTags<?>> p_363739_,
|
||||
FeatureFlagSet p_250212_,
|
||||
Commands.CommandSelection p_249301_,
|
||||
int p_251126_,
|
||||
Executor p_249136_,
|
||||
Executor p_249601_,
|
||||
CallbackInfoReturnable<CompletableFuture<ReloadableServerResources>> cir) {
|
||||
// ReloadResources Event
|
||||
EventManager.post(new MinecraftEvents.ReloadResources());
|
||||
}
|
||||
}
|
||||
|
|
@ -15,6 +15,8 @@ import java.nio.file.Path;
|
|||
import java.nio.file.Paths;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.xujiayao.discord_mc_chat.Constants.LOGGER;
|
||||
|
|
@ -37,21 +39,25 @@ public class TranslationManager {
|
|||
* Loads translations for the current target language first, then falls back to en_us.
|
||||
*/
|
||||
public static void init() {
|
||||
TRANSLATIONS.clear();
|
||||
try (ExecutorService executor = Executors.newSingleThreadExecutor(r -> new Thread(r, "DMCC-Translations"))) {
|
||||
executor.submit(() -> {
|
||||
TRANSLATIONS.clear();
|
||||
|
||||
String language = I18nManager.getLanguage();
|
||||
String language = I18nManager.getLanguage();
|
||||
|
||||
// Load the target language translations
|
||||
loadTranslations(language);
|
||||
int loadedCount = TRANSLATIONS.size();
|
||||
// Load the target language translations
|
||||
loadTranslations(language);
|
||||
int loadedCount = TRANSLATIONS.size();
|
||||
|
||||
// Load en_us translations to fill in missing keys (fallback)
|
||||
if (!"en_us".equals(language)) {
|
||||
loadTranslations("en_us");
|
||||
LOGGER.info("Loaded {}/{} Minecraft \"{}\" translations", loadedCount, TRANSLATIONS.size(), language);
|
||||
// Load en_us translations to fill in missing keys (fallback)
|
||||
if (!"en_us".equals(language)) {
|
||||
loadTranslations("en_us");
|
||||
LOGGER.info("Loaded {}/{} Minecraft \"{}\" translations", loadedCount, TRANSLATIONS.size(), language);
|
||||
}
|
||||
|
||||
currentLoadedLanguage = language;
|
||||
});
|
||||
}
|
||||
|
||||
currentLoadedLanguage = language;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
"MixinMinecraftServer",
|
||||
"MixinPlayerAdvancements",
|
||||
"MixinPlayerList",
|
||||
"MixinReloadableServerResources",
|
||||
"MixinSayCommand",
|
||||
"MixinServerGamePacketListenerImpl",
|
||||
"MixinServerPlayer",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue