Skip to content

Commit 30d0092

Browse files
authored
1.1.0: Implement languages for this plugin
Merge pull request #5 from KCodeYT/develop
2 parents 20d957d + a11e2e9 commit 30d0092

12 files changed

Lines changed: 403 additions & 75 deletions

File tree

pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66

77
<groupId>de.kcodeyt</groupId>
88
<artifactId>HeadsDatabase</artifactId>
9-
<version>1.0.1</version>
9+
<version>1.1.0</version>
1010

1111
<build>
1212
<plugins>
1313
<plugin>
1414
<groupId>org.apache.maven.plugins</groupId>
1515
<artifactId>maven-compiler-plugin</artifactId>
16+
<version>3.1</version>
1617
<configuration>
1718
<source>8</source>
1819
<target>8</target>
@@ -48,7 +49,7 @@
4849
<dependency>
4950
<groupId>de.kcodeyt</groupId>
5051
<artifactId>Heads</artifactId>
51-
<version>1.0.0</version>
52+
<version>1.1.1</version>
5253
</dependency>
5354
<dependency>
5455
<groupId>cn.nukkit</groupId>

src/main/java/de/kcodeyt/headsdb/HeadsDB.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,27 @@
1717
package de.kcodeyt.headsdb;
1818

1919
import cn.nukkit.plugin.PluginBase;
20+
import cn.nukkit.utils.Config;
2021
import de.kcodeyt.headsdb.command.HeadDBCommand;
2122
import de.kcodeyt.headsdb.database.Database;
23+
import de.kcodeyt.headsdb.lang.Language;
2224
import lombok.Getter;
2325

26+
import java.io.BufferedReader;
27+
import java.io.File;
28+
import java.io.IOException;
29+
import java.io.InputStreamReader;
30+
2431
@Getter
2532
public class HeadsDB extends PluginBase {
2633

34+
private static final String DEFAULT_LANGUAGE = "en_US";
35+
2736
public static final String MHF_QUESTION_TEXTURE_ID = "d34e063cafb467a5c8de43ec78619399f369f4a52434da8017a983cdd92516a0";
2837

29-
private final Database database = new Database();
38+
private final Database database = new Database(this);
39+
40+
private Language language;
3041

3142
@Override
3243
public void onEnable() {
@@ -39,6 +50,41 @@ public void onEnable() {
3950
this.getLogger().info("Successfully load " + this.database.getHeadEntries().size() + " Heads!");
4051
}
4152
});
53+
54+
this.saveResource("config.yml");
55+
final Config config = this.getConfig();
56+
57+
if(!config.exists("default_lang")) {
58+
config.set("default_lang", DEFAULT_LANGUAGE);
59+
config.save();
60+
}
61+
62+
final File langDir = new File(this.getDataFolder(), "lang");
63+
final File[] files = langDir.listFiles();
64+
if(!langDir.exists() || files == null || files.length == 0) {
65+
if(!langDir.exists() && !langDir.mkdirs()) {
66+
this.getLogger().error("Could not create the language directory for this plugin!");
67+
return;
68+
}
69+
70+
try(final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(this.getResource("lang/lang_list.txt")))) {
71+
String line;
72+
while((line = bufferedReader.readLine()) != null)
73+
this.saveResource("lang/" + line + ".txt");
74+
} catch(Exception e) {
75+
this.getLogger().error("Could not find the language resources of this plugin!", e);
76+
return;
77+
}
78+
}
79+
80+
try {
81+
final String defaultLang = config.getString("default_lang");
82+
83+
this.language = new Language(langDir, defaultLang);
84+
this.getLogger().info("This plugin is using the " + this.language.getDefaultLang() + " as default language file!");
85+
} catch(IOException e) {
86+
this.getLogger().error(e.getMessage(), e);
87+
}
4288
}
4389

4490
@Override

src/main/java/de/kcodeyt/headsdb/command/HeadDBCommand.java

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@
2323
import cn.nukkit.form.window.FormWindowCustom;
2424
import de.kcodeyt.headsdb.HeadsDB;
2525
import de.kcodeyt.headsdb.database.HeadEntry;
26+
import de.kcodeyt.headsdb.lang.Language;
27+
import de.kcodeyt.headsdb.lang.TranslationKey;
2628
import de.kcodeyt.headsdb.util.FormAPI;
2729

30+
import java.io.IOException;
2831
import java.util.List;
2932
import java.util.Random;
3033
import java.util.concurrent.ThreadLocalRandom;
@@ -42,21 +45,31 @@ public HeadDBCommand(HeadsDB headsDB) {
4245

4346
@Override
4447
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
45-
if(!this.testPermission(sender))
46-
return false;
48+
if(!this.testPermission(sender)) return false;
49+
50+
final Language language = this.headsDB.getLanguage();
4751

4852
if(args.length > 0) {
4953
final String subCommand = args[0].toLowerCase();
5054
switch(subCommand) {
5155
case "reload":
5256
if(sender.isOp()) {
53-
sender.sendMessage("§7Reload the heads database...");
57+
sender.sendMessage(language.translate(sender instanceof Player ? (Player) sender : null, TranslationKey.DATABASE_RELOAD_START));
58+
59+
try {
60+
this.headsDB.getLanguage().reload();
61+
} catch(IOException e) {
62+
this.headsDB.getLogger().error("Error while reloading language file", e);
63+
sender.sendMessage(language.translate(sender instanceof Player ? (Player) sender : null, TranslationKey.DATABASE_RELOAD_FAILED));
64+
return true;
65+
}
66+
5467
this.headsDB.getDatabase().reload().whenComplete((result, error) -> {
5568
if(!result || error != null) {
5669
this.headsDB.getLogger().error("Could not load heads database!", error);
57-
sender.sendMessage("§cCould not reload the database!");
70+
sender.sendMessage(language.translate(sender instanceof Player ? (Player) sender : null, TranslationKey.DATABASE_RELOAD_FAILED));
5871
} else {
59-
sender.sendMessage("§aSuccessfully reload the head database!");
72+
sender.sendMessage(language.translate(sender instanceof Player ? (Player) sender : null, TranslationKey.DATABASE_RELOAD_SUCCESS));
6073
this.headsDB.getLogger().info("Successfully load " + this.headsDB.getDatabase().getHeadEntries().size() + " Heads!");
6174
}
6275
});
@@ -65,8 +78,7 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args)
6578
break;
6679
case "random":
6780
if(sender.isOp()) {
68-
if(this.isConsole(sender))
69-
return false;
81+
if(this.isConsole(sender)) return false;
7082

7183
int amount;
7284
try {
@@ -83,38 +95,37 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args)
8395
final Random random = ThreadLocalRandom.current();
8496
for(int i = 0; i < amount; i++)
8597
this.headsDB.getDatabase().giveItem((Player) sender, headEntries.get(random.nextInt(headEntries.size())));
98+
99+
sender.sendMessage(language.translate((Player) sender, TranslationKey.GAVE_RANDOM_HEADS, amount));
86100
return true;
87101
}
88102
break;
89103
case "config":
90-
if(this.isConsole(sender))
91-
return false;
104+
if(this.isConsole(sender)) return false;
92105

93106
final Player player = (Player) sender;
94-
final FormWindowCustom configForm = new FormWindowCustom("Configure");
95-
configForm.addElement(new ElementSlider("Page length", 20, 120, 5, 40));
107+
final FormWindowCustom configForm = new FormWindowCustom(language.translate(player, TranslationKey.CONFIG_FORM_TITLE));
108+
configForm.addElement(new ElementSlider(language.translate(player, TranslationKey.CONFIG_FORM_PAGE_SIZE), 20, 120, 5, 40));
96109
FormAPI.create(player, configForm, () -> {
97-
if(configForm.wasClosed())
98-
return;
110+
if(configForm.wasClosed()) return;
111+
99112
final int pageLength = (int) configForm.getResponse().getSliderResponse(0);
100113
this.headsDB.getDatabase().getPageCount().put(player.getName(), pageLength);
101-
player.sendMessage("§aSet your page length to " + pageLength + "!");
114+
player.sendMessage(language.translate(player, TranslationKey.CONFIG_FORM_PAGE_SIZE_CHANGED, pageLength));
102115
});
103116
return true;
104117
}
105118
}
106119

107-
if(this.isConsole(sender))
108-
return false;
120+
if(this.isConsole(sender)) return false;
109121

110122
this.headsDB.getDatabase().showForm((Player) sender);
111123
return true;
112124
}
113125

114126
private boolean isConsole(CommandSender sender) {
115-
if(sender instanceof Player)
116-
return false;
117-
sender.sendMessage("You must be logged in, to be able to use this command!");
127+
if(sender instanceof Player) return false;
128+
sender.sendMessage(this.headsDB.getLanguage().translate(null, TranslationKey.CONSOLE_USES_PLAYER_COMMAND));
118129
return true;
119130
}
120131

src/main/java/de/kcodeyt/headsdb/database/Category.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,15 @@
1616

1717
package de.kcodeyt.headsdb.database;
1818

19-
import lombok.Getter;
20-
import lombok.RequiredArgsConstructor;
21-
import lombok.ToString;
19+
import lombok.Value;
2220

2321
import java.util.List;
2422

25-
@Getter
26-
@ToString
27-
@RequiredArgsConstructor
23+
@Value
2824
class Category {
2925

30-
private final CategoryEnum categoryEnum;
31-
private final String displayName;
32-
private final String displaySkin;
33-
private final List<HeadEntry> entries;
26+
CategoryEnum categoryEnum;
27+
String displaySkin;
28+
List<HeadEntry> entries;
3429

3530
}

src/main/java/de/kcodeyt/headsdb/database/CategoryEnum.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,27 @@
1616

1717
package de.kcodeyt.headsdb.database;
1818

19+
import de.kcodeyt.headsdb.lang.TranslationKey;
1920
import lombok.AllArgsConstructor;
2021
import lombok.Getter;
2122

2223
@Getter
2324
@AllArgsConstructor
2425
public enum CategoryEnum {
2526

26-
ALPHABET("Alphabet", "alphabet"),
27-
ANIMALS("Animals", "animals"),
28-
BLOCKS("Blocks", "blocks"),
29-
DECORATION("Decoration", "decoration"),
30-
FOOD_DRINKS("Food & Drinks", "food-drinks"),
31-
HUMANS("Humans", "humans"),
32-
HUMANOID("Humanoid", "humanoid"),
33-
MISCELLANEOUS("Miscellaneous", "miscellaneous"),
34-
MONSTERS("Monsters", "monsters"),
35-
PLANTS("Plants", "plants");
27+
ALPHABET(TranslationKey.CATEGORY_ALPHABET, TranslationKey.CATEGORY_ALPHABET_TITLE, "alphabet"),
28+
ANIMALS(TranslationKey.CATEGORY_ANIMALS, TranslationKey.CATEGORY_ANIMALS_TITLE, "animals"),
29+
BLOCKS(TranslationKey.CATEGORY_BLOCKS, TranslationKey.CATEGORY_BLOCKS_TITLE, "blocks"),
30+
DECORATION(TranslationKey.CATEGORY_DECORATION, TranslationKey.CATEGORY_DECORATION_TITLE, "decoration"),
31+
FOOD_DRINKS(TranslationKey.CATEGORY_FOOD_DRINKS, TranslationKey.CATEGORY_FOOD_DRINKS_TITLE, "food-drinks"),
32+
HUMANS(TranslationKey.CATEGORY_HUMANS, TranslationKey.CATEGORY_HUMANS_TITLE, "humans"),
33+
HUMANOID(TranslationKey.CATEGORY_HUMANOID, TranslationKey.CATEGORY_HUMANOID_TITLE, "humanoid"),
34+
MISCELLANEOUS(TranslationKey.CATEGORY_MISCELLANEOUS, TranslationKey.CATEGORY_MISCELLANEOUS_TITLE, "miscellaneous"),
35+
MONSTERS(TranslationKey.CATEGORY_MONSTERS, TranslationKey.CATEGORY_MONSTERS_TITLE, "monsters"),
36+
PLANTS(TranslationKey.CATEGORY_PLANTS, TranslationKey.CATEGORY_PLANTS_TITLE, "plants");
3637

37-
private final String displayName;
38+
private final TranslationKey buttonTranslationKey;
39+
private final TranslationKey titleTranslationKey;
3840
private final String identifier;
3941

4042
}

0 commit comments

Comments
 (0)