From a12490c3ebe271fef36f5d877d401731802ee58b Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Mon, 9 Jan 2023 23:50:13 +0100 Subject: [PATCH] Fixes #3919 --- .../plotsquared/bukkit/BukkitPlatform.java | 8 +++ .../bukkit/util/TranslationUpdateManager.java | 63 +++++++++++++++++++ .../plotsquared/core/command/FlagCommand.java | 4 +- Core/src/main/resources/lang/messages_en.json | 2 +- 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 Bukkit/src/main/java/com/plotsquared/bukkit/util/TranslationUpdateManager.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java index 4355e9418..680a450ed 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java @@ -51,6 +51,7 @@ import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitWorld; import com.plotsquared.bukkit.util.SetGenCB; import com.plotsquared.bukkit.util.UpdateUtility; +import com.plotsquared.bukkit.util.TranslationUpdateManager; import com.plotsquared.bukkit.util.task.BukkitTaskManager; import com.plotsquared.bukkit.util.task.PaperTimeConverter; import com.plotsquared.bukkit.util.task.SpigotTimeConverter; @@ -138,6 +139,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.incendo.serverlib.ServerLib; import java.io.File; +import java.io.IOException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; @@ -291,6 +293,12 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl ); this.injector.injectMembers(this); + try { + this.injector.getInstance(TranslationUpdateManager.class).upgradeTranslationFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE); if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) { diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/TranslationUpdateManager.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/TranslationUpdateManager.java new file mode 100644 index 000000000..89d18dfb5 --- /dev/null +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/TranslationUpdateManager.java @@ -0,0 +1,63 @@ +/* + * PlotSquared, a land and world management plugin for Minecraft. + * Copyright (C) IntellectualSites + * Copyright (C) IntellectualSites team and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.plotsquared.bukkit.util; + +import com.intellectualsites.annotations.NotPublic; +import com.plotsquared.core.PlotSquared; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.Stream; + +/** + * This is a helper class which replaces occurrences of 'suggest_command' with 'run_command' in messages_%.json. + * MiniMessage changed the syntax between major releases. To warrant a smooth upgrade, we attempt to replace any occurrences + * while loading PlotSquared. + * + * @since TODO + */ +@NotPublic +public class TranslationUpdateManager { + + public static void upgradeTranslationFile() throws IOException { + String searchText = "suggest_command"; + String replacementText = "run_command"; + + try (Stream paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) { + paths + .filter(Files::isRegularFile) + .filter(p -> p.getFileName().toString().matches("messages_[a-z]{2}\\.json")) + .forEach(p -> replaceInFile(p, searchText, replacementText)); + } + } + + private static void replaceInFile(Path path, String searchText, String replacementText) { + try { + String content = Files.readString(path); + if (content.contains(searchText)) { + content = content.replaceAll(searchText, replacementText); + Files.writeString(path, content); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java b/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java index 49d8f3d79..9b31e13a5 100644 --- a/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java @@ -683,8 +683,8 @@ public final class FlagCommand extends Command { TranslatableCaption.of("flag.flag_info_example"), TagResolver.builder() .tag("command", Tag.preProcessParsed("/plot flag set")) - .tag("flag", Tag.inserting(Component.text(plotFlag.getName()))) - .tag("value", Tag.inserting(Component.text(plotFlag.getExample()))) + .tag("flag", Tag.preProcessParsed(plotFlag.getName())) + .tag("value", Tag.preProcessParsed(plotFlag.getExample())) .build() ); // Default value diff --git a/Core/src/main/resources/lang/messages_en.json b/Core/src/main/resources/lang/messages_en.json index 0c66fbb26..081fa71ae 100644 --- a/Core/src/main/resources/lang/messages_en.json +++ b/Core/src/main/resources/lang/messages_en.json @@ -514,7 +514,7 @@ "flag.flag_info_name": "Name: ", "flag.flag_info_category": "Category: ", "flag.flag_info_description": "Description: ", - "flag.flag_info_example": "Example: '> ", + "flag.flag_info_example": "Example: '> ", "flag.flag_info_default_value": "Default Value: ", "flags.flag_category_string": "String Flags", "flags.flag_category_integers": "Integer Flags",