Skip to content

Commit 1de425b

Browse files
authored
revert: defer hybrid localisation to v8.0.0 (#1062) (#1067)
Defer hybrid localisation to v8.0.0 so the V2 schema migration ships alongside the rest of the i18n + MiniMessage work under a single major. No release of 7.11.x has shipped with this code. This reverts commit da673fc. Removed: - V2__add_player_locale.sql (and its entry in migrations.list) - Per-player locale resolution APIs (kick(Message), broadcast(Message, String)) - MessageRegistry, deferred Message resolution, locale cascading - messages/ directory layout (single messages.yml restored) - locale.* config block - Per-platform getLocale() implementations - All #1062 tests (MessageRegistryTest, MessageDeferredTest, LocaleNormalisationTest, locale-smoke E2E) The localisation work is preserved on feat/v8-minimessage-migration and will ship as part of v8.0.0.
1 parent 610afad commit 1de425b

90 files changed

Lines changed: 181 additions & 4401 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

bukkit/src/main/java/me/confuser/banmanager/bukkit/BukkitPlayer.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import me.confuser.banmanager.common.kyori.text.TextComponent;
88
import me.confuser.banmanager.common.kyori.text.serializer.gson.GsonComponentSerializer;
99
import me.confuser.banmanager.common.util.Message;
10-
import me.confuser.banmanager.common.util.MessageRegistry;
1110
import me.confuser.banmanager.common.util.UUIDUtils;
1211
import net.md_5.bungee.chat.ComponentSerializer;
1312
import org.bukkit.Bukkit;
@@ -126,13 +125,6 @@ public boolean isOnline() {
126125
return getPlayer() != null;
127126
}
128127

129-
@Override
130-
public String getLocale() {
131-
Player p = getPlayer();
132-
if (p == null) return "en";
133-
return MessageRegistry.normaliseLocale(p.getLocale());
134-
}
135-
136128
private Player getPlayer() {
137129
if (player != null) return player;
138130
if (isOnlineMode()) return Bukkit.getServer().getPlayer(uuid);

bukkit/src/main/java/me/confuser/banmanager/bukkit/listeners/JoinListener.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,8 @@ private class BanJoinHandler implements CommonJoinHandler {
6060
@Override
6161
public void handlePlayerDeny(PlayerData player, Message message) {
6262
plugin.getServer().callEvent("PlayerDeniedEvent", player, message);
63-
String locale = player.getLocale() != null ? player.getLocale() : "en";
64-
event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_BANNED);
65-
event.setKickMessage(BukkitServer.formatMessage(message.resolve(locale)));
63+
64+
handleDeny(message);
6665
}
6766

6867
@Override

bungee/src/main/java/me/confuser/banmanager/bungee/BungeePlayer.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import me.confuser.banmanager.common.data.PlayerData;
77
import me.confuser.banmanager.common.kyori.text.TextComponent;
88
import me.confuser.banmanager.common.util.Message;
9-
import me.confuser.banmanager.common.util.MessageRegistry;
109
import net.md_5.bungee.api.ProxyServer;
1110
import net.md_5.bungee.api.connection.ProxiedPlayer;
1211
import net.md_5.bungee.chat.ComponentSerializer;
@@ -111,13 +110,6 @@ public boolean canSee(CommonPlayer player) {
111110
return true;
112111
}
113112

114-
@Override
115-
public String getLocale() {
116-
java.util.Locale locale = player.getLocale();
117-
if (locale == null) return "en";
118-
return MessageRegistry.normaliseLocale(locale.toString());
119-
}
120-
121113
private ProxiedPlayer getPlayer() {
122114
return ProxyServer.getInstance().getPlayer(uuid);
123115
}

bungee/src/main/java/me/confuser/banmanager/bungee/listeners/JoinListener.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,8 @@ private class BanJoinHandler implements CommonJoinHandler {
5858
@Override
5959
public void handlePlayerDeny(PlayerData player, Message message) {
6060
plugin.getServer().callEvent("PlayerDeniedEvent", player, message);
61-
String locale = player.getLocale() != null ? player.getLocale() : "en";
62-
event.setCancelled(true);
63-
event.setCancelReason(BungeeServer.formatMessage(message.resolve(locale)));
61+
62+
handleDeny(message);
6463
}
6564

6665
@Override

common/src/main/java/me/confuser/banmanager/common/BanManagerPlugin.java

Lines changed: 7 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,16 @@
1414
import me.confuser.banmanager.common.ormlite.logger.LocalLog;
1515
import me.confuser.banmanager.common.ormlite.support.ConnectionSource;
1616
import me.confuser.banmanager.common.ormlite.support.DatabaseConnection;
17-
import me.confuser.banmanager.common.configuration.file.YamlConfiguration;
1817
import me.confuser.banmanager.common.runnables.Runner;
1918
import me.confuser.banmanager.common.storage.*;
2019
import me.confuser.banmanager.common.storage.global.*;
2120
import me.confuser.banmanager.common.storage.migration.MigrationRunner;
2221
import me.confuser.banmanager.common.storage.mariadb.MariaDBDatabase;
2322
import me.confuser.banmanager.common.storage.mysql.MySQLDatabase;
2423
import me.confuser.banmanager.common.util.DriverManagerUtil;
25-
import me.confuser.banmanager.common.util.Message;
26-
import me.confuser.banmanager.common.util.MessageRegistry;
2724

28-
import java.io.*;
29-
import java.nio.file.Files;
25+
import java.io.File;
26+
import java.io.IOException;
3027
import java.sql.SQLException;
3128

3229
import static java.lang.Long.parseLong;
@@ -156,9 +153,6 @@ public class BanManagerPlugin {
156153
@Getter
157154
private PlaceholderResolver placeholderResolver;
158155

159-
@Getter
160-
private MessageRegistry messageRegistry;
161-
162156
public BanManagerPlugin(PluginInfo pluginInfo, CommonLogger logger, File dataFolder, CommonScheduler scheduler, CommonServer server, CommonMetrics metrics) {
163157
this.pluginInfo = pluginInfo;
164158
this.logger = logger;
@@ -274,126 +268,18 @@ public final void disable() {
274268
}
275269

276270
public void setupConfigs() {
271+
MessagesConfig newMessagesConfig = new MessagesConfig(dataFolder, logger);
272+
if (!newMessagesConfig.load()) {
273+
logger.warning("Failed to reload messages.yml, keeping previous messages");
274+
}
275+
277276
config = reloadConfig(new DefaultConfig(dataFolder, logger), config, "config.yml");
278277
consoleConfig = reloadConfig(new ConsoleConfig(dataFolder, logger), consoleConfig, "console.yml");
279278
schedulesConfig = reloadConfig(new SchedulesConfig(dataFolder, logger), schedulesConfig, "schedules.yml");
280279
exemptionsConfig = reloadConfig(new ExemptionsConfig(dataFolder, logger), exemptionsConfig, "exemptions.yml");
281280
reasonsConfig = reloadConfig(new ReasonsConfig(dataFolder, logger), reasonsConfig, "reasons.yml");
282281
geoIpConfig = reloadConfig(new GeoIpConfig(dataFolder, logger), geoIpConfig, "geoip.yml");
283282
webhookConfig = reloadConfig(new WebhookConfig(dataFolder, logger), webhookConfig, "webhooks.yml");
284-
285-
loadMessages();
286-
}
287-
288-
private void loadMessages() {
289-
String defaultLocale = config != null ? config.getDefaultLocale() : "en";
290-
MessageRegistry newRegistry = new MessageRegistry(defaultLocale);
291-
292-
copyMessagesDirectory();
293-
294-
File messagesDir = new File(dataFolder, "messages");
295-
if (messagesDir.exists() && messagesDir.isDirectory()) {
296-
File[] files = messagesDir.listFiles((dir, name) ->
297-
name.startsWith("messages_") && name.endsWith(".yml"));
298-
299-
if (files != null) {
300-
for (File file : files) {
301-
String fileName = file.getName();
302-
String locale = fileName.substring("messages_".length(), fileName.length() - ".yml".length());
303-
loadLocaleFile(newRegistry, file, locale);
304-
}
305-
}
306-
}
307-
308-
File legacyMessages = new File(dataFolder, "messages.yml");
309-
if (legacyMessages.exists()) {
310-
loadLocaleFile(newRegistry, legacyMessages, defaultLocale);
311-
}
312-
313-
if (!newRegistry.hasAnyMessages()) {
314-
if (messageRegistry != null) {
315-
logger.warning("No messages loaded, keeping previous messages");
316-
return;
317-
}
318-
}
319-
320-
if (messageRegistry != null) {
321-
messageRegistry.atomicSwap(newRegistry);
322-
} else {
323-
messageRegistry = newRegistry;
324-
}
325-
326-
Message.init(messageRegistry, logger);
327-
328-
logLocaleInfo();
329-
}
330-
331-
private void logLocaleInfo() {
332-
if (messageRegistry == null) return;
333-
334-
java.util.Set<String> locales = messageRegistry.getAvailableLocales();
335-
logger.info("Loaded " + locales.size() + " locale(s): " + String.join(", ", locales));
336-
337-
String defaultLocale = messageRegistry.getDefaultLocale();
338-
for (String locale : locales) {
339-
if (locale.equals(defaultLocale)) continue;
340-
int missing = messageRegistry.getMissingKeyCount(locale);
341-
if (missing > 0) {
342-
logger.info("Locale '" + locale + "' is missing " + missing + " key(s) (will fall back to '" + defaultLocale + "')");
343-
}
344-
}
345-
}
346-
347-
private void loadLocaleFile(MessageRegistry registry, File file, String locale) {
348-
try {
349-
YamlConfiguration conf = new YamlConfiguration();
350-
conf.load(file);
351-
352-
if (conf.getConfigurationSection("messages") == null) {
353-
logger.warning("Messages section not found in " + file.getName() + ", skipping");
354-
return;
355-
}
356-
357-
java.util.Map<String, String> messages = new java.util.HashMap<>();
358-
359-
for (String key : conf.getConfigurationSection("messages").getKeys(true)) {
360-
String value = conf.getString("messages." + key);
361-
if (value != null) {
362-
messages.put(key, value.replace("\\n", "\n").replaceAll("(?<=\\n)(?=\\n)", " "));
363-
}
364-
}
365-
366-
if (!messages.isEmpty()) {
367-
java.util.Map<String, String> existing = registry.getMessages(locale);
368-
if (!existing.isEmpty()) {
369-
java.util.Map<String, String> merged = new java.util.HashMap<>(existing);
370-
merged.putAll(messages);
371-
registry.loadLocale(locale, merged);
372-
} else {
373-
registry.loadLocale(locale, messages);
374-
}
375-
}
376-
} catch (Exception e) {
377-
logger.warning("Failed to load " + file.getName(), e);
378-
}
379-
}
380-
381-
private void copyMessagesDirectory() {
382-
File messagesDir = new File(dataFolder, "messages");
383-
if (!messagesDir.exists()) {
384-
messagesDir.mkdirs();
385-
}
386-
387-
File defaultMessages = new File(messagesDir, "messages_en.yml");
388-
if (!defaultMessages.exists()) {
389-
try (InputStream in = getClass().getClassLoader().getResourceAsStream("messages/messages_en.yml")) {
390-
if (in != null) {
391-
Files.copy(in, defaultMessages.toPath());
392-
}
393-
} catch (IOException e) {
394-
logger.warning("Failed to copy default messages_en.yml", e);
395-
}
396-
}
397283
}
398284

399285
/**

common/src/main/java/me/confuser/banmanager/common/CommonPlayer.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ public interface CommonPlayer extends CommonSender {
1212

1313
void kick(String message);
1414

15-
default void kick(Message message) {
16-
kick(message.resolveFor(this));
17-
}
18-
1915
void sendMessage(String message);
2016

2117
void sendMessage(Message message);
@@ -47,6 +43,4 @@ default void kick(Message message) {
4743
boolean teleport(CommonWorld world, double x, double y, double z, float pitch, float yaw);
4844

4945
boolean canSee(CommonPlayer player);
50-
51-
String getLocale();
5246
}

common/src/main/java/me/confuser/banmanager/common/CommonServer.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import me.confuser.banmanager.common.api.events.CommonEvent;
44
import me.confuser.banmanager.common.commands.CommonSender;
55
import me.confuser.banmanager.common.kyori.text.TextComponent;
6-
import me.confuser.banmanager.common.util.Message;
76

87
import java.util.UUID;
98

@@ -18,15 +17,6 @@ public interface CommonServer {
1817

1918
void broadcast(String message, String permission);
2019

21-
default void broadcast(Message message, String permission) {
22-
for (CommonPlayer player : getOnlinePlayers()) {
23-
if (player.hasPermission(permission)) {
24-
player.sendMessage(message.resolveFor(player));
25-
}
26-
}
27-
getConsoleSender().sendMessage(message.toString());
28-
}
29-
3020
void broadcastJSON(TextComponent message, String permission);
3121

3222
void broadcast(String message, String permission, CommonSender sender);

common/src/main/java/me/confuser/banmanager/common/commands/BanCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public boolean onCommand(CommonSender sender, CommandParser parser) {
167167
if (onlinePlayer != null) {
168168
final Message finalKickMessage = kickMessage;
169169
getPlugin().getScheduler().runSync(() -> {
170-
onlinePlayer.kick(finalKickMessage);
170+
onlinePlayer.kick(finalKickMessage.toString());
171171
});
172172
}
173173
});

common/src/main/java/me/confuser/banmanager/common/commands/BanIpCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public boolean onCommand(CommonSender sender, CommandParser parser) {
130130

131131
for (CommonPlayer onlinePlayer : getPlugin().getServer().getOnlinePlayers()) {
132132
if (IPUtils.toIPAddress(onlinePlayer.getAddress()).equals(ip)) {
133-
onlinePlayer.kick(kickMessage);
133+
onlinePlayer.kick(kickMessage.toString());
134134
}
135135
}
136136
});

common/src/main/java/me/confuser/banmanager/common/commands/BanIpRangeCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public boolean onCommand(final CommonSender sender, CommandParser parser) {
8282

8383
for (CommonPlayer onlinePlayer : getPlugin().getServer().getOnlinePlayers()) {
8484
if (ban.inRange(IPUtils.toIPAddress(onlinePlayer.getAddress()))) {
85-
onlinePlayer.kick(kickMessage);
85+
onlinePlayer.kick(kickMessage.toString());
8686
}
8787
}
8888
});

0 commit comments

Comments
 (0)