Skip to content

Commit c3408f8

Browse files
committed
Current state
1 parent 287e0cc commit c3408f8

File tree

6 files changed

+217
-29
lines changed

6 files changed

+217
-29
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>net.landofrails</groupId>
66
<artifactId>MessageAPI</artifactId>
7-
<version>1.0.0</version>
7+
<version>1.2.2</version>
88
<packaging>jar</packaging>
99

1010
<name>MessageAPI</name>

src/main/java/net/landofrails/MessageAPI/api/ELanguage.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
import java.util.Optional;
44

5+
/**
6+
*
7+
* Contains almost every minecraft language.
8+
*
9+
* @author Daniel
10+
*
11+
*/
512
public enum ELanguage {
613

714
// @formatter:off
@@ -133,8 +140,9 @@ public enum ELanguage {
133140
CHINESE_SIMPLIFIED("简体中文 (中国) (Jiǎntǐ Zhōngwén (Zhōngguó))", "zh_cn"),
134141
CHINESE_TRADITIONAL_HONGKONG("繁體中文 (香港) (Fántǐ Zhōngwén (Xiānggǎng))", "zh_hk"),
135142
CHINESE_TRADITIONAL_TAIWAN("繁體中文 (台灣) (Fántǐ Zhōngwén (Táiwān))", "zh_tw");
143+
136144
// @formatter:on
137-
145+
138146
private String name;
139147
private String locale;
140148

src/main/java/net/landofrails/MessageAPI/api/MessageAPI.java

Lines changed: 68 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.text.MessageFormat;
6+
import java.util.AbstractMap.SimpleEntry;
67
import java.util.EnumMap;
78
import java.util.List;
89
import java.util.Map;
10+
import java.util.Map.Entry;
911

1012
import org.bukkit.Bukkit;
13+
import org.bukkit.command.CommandSender;
1114
import org.bukkit.configuration.InvalidConfigurationException;
1215
import org.bukkit.configuration.file.FileConfiguration;
1316
import org.bukkit.configuration.file.YamlConfiguration;
@@ -20,13 +23,10 @@ public final class MessageAPI<E extends Enum<E> & IMessageAPI> {
2023

2124
public static final ELanguage DEFAULT_LANGUAGE = ELanguage.AMERICAN_ENGLISH;
2225

23-
private Map<ELanguage, FileConfiguration> configuration = new EnumMap<>(ELanguage.class);
24-
private Map<ELanguage, File> configurationFiles = new EnumMap<>(ELanguage.class);
26+
private Map<ELanguage, Entry<FileConfiguration, File>> configs = new EnumMap<>(ELanguage.class);
2527

2628
private MessageAPI(JavaPlugin plugin, Class<E> enumClass) {
27-
2829
checkConfigs(plugin, enumClass);
29-
3030
}
3131

3232
/**
@@ -46,13 +46,13 @@ public static <E extends Enum<E> & IMessageAPI> MessageAPI<E> register(JavaPlugi
4646
/**
4747
*
4848
* Returns the players language, if that fails it will return the value from
49-
* {@link MessageAPI#defaultLanguage()}.
49+
* {@link MessageAPI#serverLanguage()}.
5050
*
5151
* @param player
5252
* @return ELanguage
5353
*/
5454
public static ELanguage getLanguage(Player player) {
55-
return ELanguage.getFromLocale(player.getLocale().toLowerCase()).orElse(defaultLanguage());
55+
return ELanguage.getFromLocale(player.getLocale().toLowerCase()).orElse(serverLanguage());
5656
}
5757

5858
/**
@@ -62,60 +62,110 @@ public static ELanguage getLanguage(Player player) {
6262
*
6363
* @return ELanguage
6464
*/
65-
private static ELanguage defaultLanguage() {
65+
public static ELanguage serverLanguage() {
6666
try {
6767
return MessageAPIPlugin.getInstance().getServerLanguage();
6868
} catch (Exception e) {
6969
return DEFAULT_LANGUAGE;
7070
}
7171
}
7272

73+
/**
74+
*
75+
* Sends a message to the console. Calls {@link MessageAPI#serverLanguage()}
76+
* for the wanted language.
77+
*
78+
* @param message
79+
* @param arguments
80+
*/
7381
public void sendToConsole(IMessageAPI message, Object... arguments) {
74-
String text = getTranslatedText(message, defaultLanguage(), true, arguments);
82+
String text = getTranslatedText(message, serverLanguage(), true, arguments);
7583
Bukkit.getConsoleSender().sendMessage(text);
7684
}
7785

86+
/**
87+
*
88+
* Sends a message to a player. Calls {@link MessageAPI#getLanguage(Player)}
89+
* for the players language.
90+
*
91+
* @param player
92+
* @param message
93+
* @param arguments
94+
*/
7895
public void sendTo(Player player, IMessageAPI message, Object... arguments) {
7996
String text = getTranslatedText(message, getLanguage(player), true, arguments);
8097
player.sendMessage(text);
8198
}
8299

100+
public void sendTo(CommandSender sender, IMessageAPI message, Object... arguments) {
101+
ELanguage lang = sender instanceof Player ? getLanguage((Player) sender) : serverLanguage();
102+
String text = getTranslatedText(message, lang, true, arguments);
103+
sender.sendMessage(text);
104+
}
105+
106+
/**
107+
*
108+
* Calls {@link MessageAPI#sendTo(Player, IMessageAPI, Object...)} for every
109+
* player.
110+
*
111+
* @param players
112+
* @param message
113+
* @param arguments
114+
*/
83115
public void sendTo(List<Player> players, IMessageAPI message, Object... arguments) {
84116
players.forEach(p -> sendTo(p, message, true, arguments));
85117
}
86118

119+
/**
120+
*
121+
* Translates the text in the given language. Arguments are inserted via
122+
* {@link MessageFormat#format(String, Object...)}.
123+
*
124+
* @param message
125+
* @param language
126+
* @param returnPathIfMissing
127+
* @param arguments
128+
* @return
129+
*/
87130
public String getTranslatedText(IMessageAPI message, ELanguage language, boolean returnPathIfMissing, Object... arguments) {
88-
if (configuration.containsKey(language)) {
89-
FileConfiguration config = configuration.get(language);
131+
if (configs.containsKey(language)) {
132+
FileConfiguration config = configs.get(language).getKey();
90133
if (config.contains(message.getPath())) {
91134
return MessageFormat.format(config.getString(message.getPath()), arguments);
92135
}
93136
}
94137
return returnPathIfMissing ? message.getPath() : null;
95138
}
96139

140+
/**
141+
*
142+
* Creates lang files for the enum constants. Loads all lang files.
143+
*
144+
* @param plugin
145+
* @param enumClass
146+
*/
97147
private void checkConfigs(JavaPlugin plugin, Class<E> enumClass) {
98148

99149
// For existing constant languages
100150
for (E enumConstant : enumClass.getEnumConstants()) {
101151
for (TranslatedText text : enumConstant.getText()) {
102-
if (!configuration.containsKey(text.getLanguage())) {
152+
if (!configs.containsKey(text.getLanguage())) {
103153
// Create config
104154
FileConfiguration config = new YamlConfiguration();
105155
try {
106156
File folder = new File(plugin.getDataFolder(), "messages");
107157
folder.mkdirs();
108158
File configFile = new File(folder, text.getLanguage().getLocale() + ".yml");
109159
configFile.createNewFile();
110-
configurationFiles.put(text.getLanguage(), configFile);
111160
config.load(configFile);
161+
162+
configs.put(text.getLanguage(), new SimpleEntry<FileConfiguration, File>(config, configFile));
112163
} catch (IOException | InvalidConfigurationException e) {
113164
e.printStackTrace();
114165
}
115-
configuration.put(text.getLanguage(), config);
116166
}
117167

118-
FileConfiguration config = configuration.get(text.getLanguage());
168+
FileConfiguration config = configs.get(text.getLanguage()).getKey();
119169
if (!config.contains(enumConstant.getPath())) {
120170
config.set(enumConstant.getPath(), text.getText());
121171
}
@@ -124,27 +174,26 @@ private void checkConfigs(JavaPlugin plugin, Class<E> enumClass) {
124174
}
125175

126176
// Save changes made
127-
for (ELanguage lang : configuration.keySet()) {
177+
for (ELanguage lang : configs.keySet()) {
128178
try {
129-
configuration.get(lang).save(configurationFiles.get(lang));
179+
configs.get(lang).getKey().save(configs.get(lang).getValue());
130180
} catch (IOException e) {
131181
e.printStackTrace();
132182
}
133183
}
134184

135185
// check if there are other lang files
136186
for (ELanguage lang : ELanguage.values()) {
137-
if (!configuration.containsKey(lang)) {
187+
if (!configs.containsKey(lang)) {
138188
// Create config
139189
FileConfiguration config = new YamlConfiguration();
140190
try {
141191
File folder = new File(plugin.getDataFolder(), "messages");
142192
folder.mkdirs();
143193
File configFile = new File(folder, lang.getLocale() + ".yml");
144194
if (configFile.exists()) {
145-
configurationFiles.put(lang, configFile);
146195
config.load(configFile);
147-
configuration.put(lang, config);
196+
configs.put(lang, new SimpleEntry<FileConfiguration, File>(config, configFile));
148197
}
149198
} catch (IOException | InvalidConfigurationException e) {
150199
e.printStackTrace();

src/main/java/net/landofrails/MessageAPI/plugin/MessageAPIMessages.java

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package net.landofrails.MessageAPI.plugin;
22

33
import static net.landofrails.MessageAPI.api.ELanguage.AMERICAN_ENGLISH;
4+
import static net.landofrails.MessageAPI.api.ELanguage.AUSTRALIAN_ENGLISH;
5+
import static net.landofrails.MessageAPI.api.ELanguage.AUSTRIAN_GERMAN;
6+
import static net.landofrails.MessageAPI.api.ELanguage.BRITISH_ENGLISH;
7+
import static net.landofrails.MessageAPI.api.ELanguage.CANADIAN_ENGLISH;
48
import static net.landofrails.MessageAPI.api.ELanguage.GERMAN;
9+
import static net.landofrails.MessageAPI.api.ELanguage.NEW_ZEALAND_ENGLISH;
10+
import static net.landofrails.MessageAPI.api.ELanguage.SWISS_GERMAN;
511

612
import net.landofrails.MessageAPI.api.IMessageAPI;
713
import net.landofrails.MessageAPI.api.TranslatedText;
@@ -12,12 +18,89 @@ public enum MessageAPIMessages implements IMessageAPI {
1218
LOADING_START(
1319
"loading.start",
1420
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] Loading phase started.."),
15-
new TranslatedText(GERMAN, "[MessageAPI] Lade-Phase begonnen..")
21+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] Loading phase started.."),
22+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] Loading phase started.."),
23+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] Loading phase started.."),
24+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] Loading phase started.."),
25+
26+
new TranslatedText(GERMAN, "[MessageAPI] Lade-Phase begonnen.."),
27+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] Lade-Phase begonnen.."),
28+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] Lade-Phase begonnen..")
1629
),
1730
LOADING_END(
1831
"loading.end",
1932
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] Loading phase finished."),
20-
new TranslatedText(GERMAN, "[MessageAPI] Lade-Phase beendet.")
33+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] Loading phase finished."),
34+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] Loading phase finished."),
35+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] Loading phase finished."),
36+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] Loading phase finished."),
37+
38+
new TranslatedText(GERMAN, "[MessageAPI] Lade-Phase beendet."),
39+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] Lade-Phase beendet."),
40+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] Lade-Phase beendet.")
41+
),
42+
43+
REGISTER_COMMAND_START(
44+
"register_command.start",
45+
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] Starting command registration.."),
46+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] Starting command registration.."),
47+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] Starting command registration.."),
48+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] Starting command registration.."),
49+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] Starting command registration.."),
50+
51+
new TranslatedText(GERMAN, "[MessageAPI] Registriere Befehl.."),
52+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] Registriere Befehl.."),
53+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] Registriere Befehl..")
54+
),
55+
REGISTER_COMMAND_END(
56+
"register_command.end",
57+
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] Command registrated."),
58+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] Command registrated."),
59+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] Command registrated."),
60+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] Command registrated."),
61+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] Command registrated."),
62+
63+
new TranslatedText(GERMAN, "[MessageAPI] Befehl registriert."),
64+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] Befehl registriert."),
65+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] Befehl registriert.")
66+
),
67+
68+
DISABLING_PLUGIN(
69+
"disabling_plugin",
70+
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] Disabling plugin."),
71+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] Disabling plugin."),
72+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] Disabling plugin."),
73+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] Disabling plugin."),
74+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] Disabling plugin."),
75+
76+
new TranslatedText(GERMAN, "[MessageAPI] Plugin wird gestoppt."),
77+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] Plugin wird gestoppt."),
78+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] Plugin wird gestoppt.")
79+
),
80+
81+
LANGUAGE_SERVER(
82+
"language.server",
83+
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] Server language: {0}, {1}"),
84+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] Server language: {0}, {1}"),
85+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] Server language: {0}, {1}"),
86+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] Server language: {0}, {1}"),
87+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] Server language: {0}, {1}"),
88+
89+
new TranslatedText(GERMAN, "[MessageAPI] Server Sprache: {0}, {1}"),
90+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] Server Sprache: {0}, {1}"),
91+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] Server Sprache: {0}, {1}")
92+
),
93+
LANGUAGE_PLAYER(
94+
"language.player",
95+
new TranslatedText(AMERICAN_ENGLISH, "[MessageAPI] {0}s language: {1}, {2}"),
96+
new TranslatedText(AUSTRALIAN_ENGLISH, "[MessageAPI] {0}s language: {1}, {2}"),
97+
new TranslatedText(CANADIAN_ENGLISH, "[MessageAPI] {0}s language: {1}, {2}"),
98+
new TranslatedText(BRITISH_ENGLISH, "[MessageAPI] {0}s language: {1}, {2}"),
99+
new TranslatedText(NEW_ZEALAND_ENGLISH, "[MessageAPI] {0}s language: {1}, {2}"),
100+
101+
new TranslatedText(GERMAN, "[MessageAPI] {0}s Sprache: {1}, {2}"),
102+
new TranslatedText(SWISS_GERMAN, "[MessageAPI] {0}s Sprache: {1}, {2}"),
103+
new TranslatedText(AUSTRIAN_GERMAN, "[MessageAPI] {0}s Sprache: {1}, {2}")
21104
);
22105
// @formatter:on
23106

src/main/java/net/landofrails/MessageAPI/plugin/MessageAPIPlugin.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import net.landofrails.MessageAPI.api.ELanguage;
1313
import net.landofrails.MessageAPI.api.MessageAPI;
14+
import net.landofrails.MessageAPI.plugin.utils.MessageAPIPluginUtils;
1415

1516
public class MessageAPIPlugin extends JavaPlugin {
1617

@@ -39,6 +40,7 @@ public void onLoad() {
3940

4041
@Override
4142
public void onEnable() {
43+
messageAPI.sendToConsole(MessageAPIMessages.REGISTER_COMMAND_START);
4244
try {
4345
final Field bukkitCommandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap");
4446

@@ -48,11 +50,13 @@ public void onEnable() {
4850
commandMap.register("lang", new BukkitCommand("lang") {
4951
@Override
5052
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
51-
if (sender instanceof Player) {
52-
sender.sendMessage("PlayerLang: " + MessageAPI.getLanguage((Player) sender));
53-
sender.sendMessage("ServerLang: " + getServerLanguage().getName());
54-
} else {
55-
System.out.println("Du bist kein Spieler!");
53+
ELanguage lang = MessageAPI.serverLanguage();
54+
messageAPI.sendTo(sender, MessageAPIMessages.LANGUAGE_SERVER, lang.getName(), lang.getLocale());
55+
56+
for (Player p : Bukkit.getOnlinePlayers()) {
57+
ELanguage playerLang = MessageAPI.getLanguage(p);
58+
messageAPI.sendTo(sender, MessageAPIMessages.LANGUAGE_PLAYER, p.getName(), playerLang.getName(),
59+
playerLang.getLocale());
5660
}
5761
return true;
5862
}
@@ -62,11 +66,14 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args)
6266
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
6367
e.printStackTrace();
6468
}
69+
messageAPI.sendToConsole(MessageAPIMessages.REGISTER_COMMAND_END);
6570
}
6671

6772
@Override
6873
public void onDisable() {
69-
74+
MessageAPIPluginUtils.unRegisterBukkitCommand(this, Bukkit.getPluginCommand("lang"));
75+
messageAPI.sendToConsole(MessageAPIMessages.DISABLING_PLUGIN);
76+
messageAPI = null;
7077
}
7178

7279
private void checkConfig() {

0 commit comments

Comments
 (0)