Skip to content

Commit 62dd886

Browse files
authored
Rewrite du TranslationManager + Impl adminshop, commands, api (#1161)
* Fix soul chestplate altar crafting * Change SoulAxe rarity from COMMON to RARE * Correctif de la possibilité de se faire de l'argent a l'infini (#1158) * fix: claim dupli * fix: Cannot invoke "String.isEmpty()" because "content" is null * fix: FancyNpcsPlugin is null * chore: remove old TranslationManager, implement base MiniMessageTranslator * add: fallback language (french by default) * add: template lang_en + fix argument * fix: caracter in ISO -> UTF8 * traduction for package commands.admin.freeze * traduction for package api.chronometer * traduction for package api.colodown * traduction for package api.input * rework of translation loader, use a texture pack, translationKey and translationLore * convert MessagesManager.Message.NO_PERMISSION to messages.cannot_do_this * s * convert MessagesManager.Message.MISSING_ARUGMENT to messages.missing_args * convert all MessagesManager.Message * convert messages from commands.utils * fix color * translate feature.adminshop (rewrite of menus, item build, ..) * fix pb color, pb name back button * fix italic * change key command.admin.freeze.subtitle and .title * change methods -> showTitle
1 parent b468e1a commit 62dd886

159 files changed

Lines changed: 1186 additions & 977 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.

src/main/java/fr/openmc/api/chronometer/Chronometer.java

Lines changed: 40 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import fr.openmc.core.utils.messages.MessageType;
55
import fr.openmc.core.utils.messages.MessagesManager;
66
import fr.openmc.core.utils.messages.Prefix;
7+
import fr.openmc.core.utils.messages.TranslationManager;
78
import lombok.Getter;
89
import net.kyori.adventure.text.Component;
10+
import net.kyori.adventure.text.format.NamedTextColor;
911
import org.bukkit.Bukkit;
1012
import org.bukkit.entity.Entity;
1113
import org.bukkit.entity.Player;
@@ -64,7 +66,15 @@ public static HandlerList getHandlerList() {
6466
* @param finishMessageType display type
6567
* @param finishMessage message display when the chronometer ends normally
6668
*/
67-
public static void startChronometer(Entity entity, String group, int time, ChronometerType messageType, String message, ChronometerType finishMessageType, String finishMessage) {
69+
public static void startChronometer(
70+
Entity entity,
71+
String group,
72+
int time,
73+
ChronometerType messageType,
74+
Component message,
75+
ChronometerType finishMessageType,
76+
Component finishMessage
77+
) {
6878
UUID entityUUID = entity.getUniqueId();
6979
chronometer.computeIfAbsent(entityUUID, k -> new HashMap<>()).put(group, time);
7080

@@ -81,33 +91,26 @@ public void run() {
8191
}
8292

8393
int remainingTime = chronometer.get(entityUUID).get(group);
84-
String timerMessage = "Il reste : " + remainingTime + "s";
85-
if (message!=null){
86-
if (!message.contains("%null%")){
87-
if (message.contains("%sec%")) {
88-
timerMessage = message.replace("%sec%", String.valueOf(remainingTime));
89-
}
90-
if (entity instanceof Player player){
91-
sendMessage(player, messageType, Component.text(timerMessage));
92-
}
93-
}
94-
} else {
95-
if (entity instanceof Player player){
96-
sendMessage(player, messageType, Component.text(timerMessage));
97-
}
98-
}
9994

95+
if (message != null && entity instanceof Player player) {
96+
Component timerMessage = message.replaceText(builder ->
97+
builder.matchLiteral("%sec%")
98+
.replacement(Component.text(remainingTime))
99+
);
100+
sendMessage(player, messageType, timerMessage);
101+
}
100102

101103
if (timerEnd(entityUUID, group)) {
102-
if (entity instanceof Player player){
103-
sendMessage(player, finishMessageType, Component.text(finishMessage != null ? finishMessage : "Le chronomètre est terminé !"));
104+
105+
if (entity instanceof Player player && finishMessage != null) {
106+
sendMessage(player, finishMessageType, finishMessage);
104107
}
105108

106109
Bukkit.getPluginManager().callEvent(new ChronometerEndEvent(entity, group));
107110

108111
if (chronometer.containsKey(entityUUID)) {
109112
chronometer.get(entityUUID).remove(group);
110-
if (chronometer.get(entityUUID).isEmpty()){
113+
if (chronometer.get(entityUUID).isEmpty()) {
111114
chronometer.remove(entityUUID);
112115
}
113116
}
@@ -119,7 +122,6 @@ public void run() {
119122
}
120123
};
121124
task.runTaskTimer(OMCPlugin.getInstance(), 0, 20);
122-
123125
activeTasks.computeIfAbsent(entityUUID, k -> new HashMap<>()).put(group, task);
124126
}
125127

@@ -128,26 +130,20 @@ public void run() {
128130
* @param messageType display type
129131
* @param message message display when the chronometer is stopped
130132
*/
131-
public static void stopAllChronometer(Entity entity, ChronometerType messageType, String message) {
133+
public static void stopAllChronometer(Entity entity, ChronometerType messageType, Component message) {
132134
UUID entityUUID = entity.getUniqueId();
135+
133136
if (chronometer.containsKey(entityUUID)) {
134137
chronometer.remove(entityUUID);
135-
if (message!=null){
136-
if (!message.contains("%null%")){
137-
if (entity instanceof Player player){
138-
sendMessage(player, messageType, Component.text(message));
139-
}
140-
}
141-
} else {
142-
if (entity instanceof Player player){
143-
sendMessage(player, messageType, Component.text("Chronomètre arrêté"));
144-
}
138+
139+
if (entity instanceof Player player && message != null) {
140+
sendMessage(player, messageType, message);
145141
}
146142
}
147143

148144
if (activeTasks.containsKey(entityUUID)) {
149-
for (Map.Entry<String, BukkitRunnable> entry : activeTasks.get(entityUUID).entrySet()) {
150-
entry.getValue().cancel();
145+
for (BukkitRunnable runnable : activeTasks.get(entityUUID).values()) {
146+
runnable.cancel();
151147
}
152148
activeTasks.remove(entityUUID);
153149
}
@@ -159,7 +155,7 @@ public static void stopAllChronometer(Entity entity, ChronometerType messageType
159155
* @param messageType display type
160156
* @param message message display when the chronometer is stopped
161157
*/
162-
public static void stopChronometer(Entity entity, String group, ChronometerType messageType, String message) {
158+
public static void stopChronometer(Entity entity, String group, ChronometerType messageType, Component message) {
163159
UUID entityUUID = entity.getUniqueId();
164160

165161
if (chronometer.containsKey(entityUUID) && chronometer.get(entityUUID).containsKey(group)) {
@@ -170,24 +166,18 @@ public static void stopChronometer(Entity entity, String group, ChronometerType
170166
activeTasks.get(entityUUID).remove(group);
171167
}
172168

173-
if (message!=null){
174-
if (!message.contains("%null%")){
175-
if (entity instanceof Player player){
176-
sendMessage(player, messageType, Component.text(message));
177-
}
178-
}
179-
} else {
180-
if (entity instanceof Player player){
181-
sendMessage(player, messageType, Component.text("Chronomètre du " + group + " arrêté"));
182-
}
169+
if (entity instanceof Player player && message != null) {
170+
sendMessage(player, messageType, message);
183171
}
184172

185173
if (chronometer.get(entityUUID).isEmpty()) {
186174
chronometer.remove(entityUUID);
187175
}
188176
} else {
189-
if (entity instanceof Player player){
190-
player.sendMessage("§cAucun chronomètre trouvé pour le groupe §e" + group + ".");
177+
if (entity instanceof Player player) {
178+
MessagesManager.sendMessage(player,
179+
TranslationManager.translation("api.chronometer.chronometer_not_found",
180+
Component.text(group).color(NamedTextColor.GOLD)), Prefix.OPENMC, MessageType.INFO, false);
191181
}
192182
}
193183
}
@@ -196,12 +186,12 @@ public static void listChronometers(Entity entity, Player owner) {
196186
UUID entitytUUID = entity.getUniqueId();
197187

198188
if (chronometer.containsKey(entitytUUID)) {
199-
owner.sendMessage("§aChronomètres actifs :");
189+
owner.sendMessage(TranslationManager.translation("api.chronometer.chronometer_on"));
200190
chronometer.get(entitytUUID).forEach((group, time) ->
201-
owner.sendMessage(" §e- " + group + ": §6" + time + "s")
202-
);
191+
owner.sendMessage(TranslationManager.translation("api.chronometer.chronometer_on_list",
192+
Component.text(group), Component.text(time).color(NamedTextColor.GOLD)).color(NamedTextColor.YELLOW)));
203193
} else {
204-
owner.sendMessage("§cCe joueur n'a aucun chronomètre actif.");
194+
owner.sendMessage(TranslationManager.translation("api.chronometer.none_chronometer_player"));
205195
}
206196
}
207197

src/main/java/fr/openmc/api/cooldown/CooldownInterceptor.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package fr.openmc.api.cooldown;
22

33
import fr.openmc.core.utils.DateUtils;
4+
import fr.openmc.core.utils.messages.TranslationManager;
5+
import net.kyori.adventure.text.Component;
6+
import net.kyori.adventure.text.format.NamedTextColor;
47
import org.bukkit.entity.Player;
58
import org.jetbrains.annotations.NotNull;
69
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
710
import revxrsal.commands.node.ExecutionContext;
811
import revxrsal.commands.process.CommandCondition;
912

1013
public class CooldownInterceptor implements CommandCondition<BukkitCommandActor> {
14+
1115
@Override
1216
public void test(@NotNull ExecutionContext<BukkitCommandActor> context) {
17+
1318
DynamicCooldown cooldown = context.command().annotations().get(DynamicCooldown.class);
1419
if (cooldown == null) {
1520
return;
@@ -18,11 +23,16 @@ public void test(@NotNull ExecutionContext<BukkitCommandActor> context) {
1823
Player player = context.actor().requirePlayer();
1924

2025
if (!DynamicCooldownManager.isReady(player.getUniqueId(), cooldown.group())) {
26+
2127
long remaining = DynamicCooldownManager.getRemaining(player.getUniqueId(), cooldown.group());
22-
String message = cooldown.message();
23-
message = message.replace("%formatTime%", DateUtils.convertSecondToTime(remaining / 1000));
24-
message = message.replace("%sec%", String.valueOf(remaining / 1000));
25-
message = message.replace("%ms%", String.valueOf(remaining));
28+
29+
Component message = TranslationManager.translation(
30+
cooldown.messageKey(),
31+
Component.text(remaining / 1000),
32+
Component.text(remaining),
33+
Component.text(DateUtils.convertSecondToTime(remaining / 1000))
34+
).color(NamedTextColor.RED);
35+
2636
player.sendMessage(message);
2737
}
2838
}

src/main/java/fr/openmc/api/cooldown/DynamicCooldown.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
*
2121
* @return message
2222
*/
23-
String message() default "§cVous devez attendre %sec%s";
23+
String messageKey() default "api.cooldown.must_wait";
2424
/*
25-
* %sec% | Le temps restant en secondes
26-
* %ms% | Le temps restant en millisecondes
25+
* <arg:0> | Le temps restant en secondes
26+
* <arg:1> | Le temps restant en millisecondes
27+
* <arg:2> | Le temps restant formaté (ex: 1m30s)
2728
*/
2829
}

src/main/java/fr/openmc/api/input/ChatInput.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package fr.openmc.api.input;
22

3+
import fr.openmc.core.utils.messages.MessageType;
4+
import fr.openmc.core.utils.messages.MessagesManager;
5+
import fr.openmc.core.utils.messages.Prefix;
6+
import fr.openmc.core.utils.messages.TranslationManager;
37
import io.papermc.paper.event.player.AsyncChatEvent;
8+
import net.kyori.adventure.text.Component;
49
import net.kyori.adventure.text.TextComponent;
510
import org.bukkit.entity.Player;
611
import org.bukkit.event.EventHandler;
@@ -32,7 +37,8 @@ public void onPlayerChat(AsyncChatEvent event) {
3237
if (event.message() instanceof TextComponent textComponent) {
3338
String string = textComponent.content();
3439
if (string.contains("cancel")) {
35-
player.sendMessage("§eVous avez annulé l'action !");
40+
MessagesManager.sendMessage(player,
41+
TranslationManager.translation("api.chatinput.cancel"), Prefix.OPENMC, MessageType.INFO, false);
3642
callback.accept(null);
3743
}
3844
callback.accept(string);

src/main/java/fr/openmc/api/input/DialogInput.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.openmc.api.input;
22

33
import fr.openmc.core.utils.dialog.ButtonType;
4+
import fr.openmc.core.utils.messages.TranslationManager;
45
import io.papermc.paper.dialog.Dialog;
56
import io.papermc.paper.registry.data.dialog.ActionButton;
67
import io.papermc.paper.registry.data.dialog.DialogBase;
@@ -25,12 +26,12 @@ public static void send(Player player, Component lore, int maxLength, Consumer<S
2526
body.add(DialogBody.plainMessage(lore));
2627

2728
Dialog inputDialog = Dialog.create(builder -> builder.empty()
28-
.base(DialogBase.builder(Component.text("Rentrer du Texte"))
29+
.base(DialogBase.builder(TranslationManager.translation("api.dialoginput.type_string"))
2930
.body(body)
3031
.inputs(List.of(
3132
io.papermc.paper.registry.data.dialog.input.DialogInput
3233
.text("inputtextomc",
33-
Component.text("Rentrer du texte ici")
34+
TranslationManager.translation("api.dialoginput.type_string.here")
3435
)
3536
.maxLength(maxLength)
3637
.build()
@@ -41,14 +42,12 @@ public static void send(Player player, Component lore, int maxLength, Consumer<S
4142
)
4243
.type(DialogType.confirmation(
4344
ActionButton.builder(Component.text(ButtonType.CONFIRM.getLabel()))
44-
.action(DialogAction.customClick((response, audience) -> {
45-
callback.accept(response.getText("inputtextomc"));
46-
}, ClickCallback.Options.builder().build()))
45+
.action(DialogAction.customClick((response, audience) ->
46+
callback.accept(response.getText("inputtextomc")), ClickCallback.Options.builder().build()))
4747
.build(),
4848
ActionButton.builder(Component.text(ButtonType.CANCEL.getLabel()))
49-
.action(DialogAction.customClick((response, audience) -> {
50-
callback.accept(null);
51-
}, ClickCallback.Options.builder().build()))
49+
.action(DialogAction.customClick((response, audience) ->
50+
callback.accept(null), ClickCallback.Options.builder().build()))
5251
.build()
5352
)
5453
)
@@ -63,12 +62,12 @@ public static void sendFloat(Player player, Component lore, float minSize, float
6362
body.add(DialogBody.plainMessage(lore));
6463

6564
Dialog inputDialog = Dialog.create(builder -> builder.empty()
66-
.base(DialogBase.builder(Component.text("Rentrer un nombre"))
65+
.base(DialogBase.builder(TranslationManager.translation("api.dialoginput.type_float"))
6766
.body(body)
6867
.inputs(List.of(
6968
io.papermc.paper.registry.data.dialog.input.DialogInput
7069
.numberRange("inputfloatomc",
71-
Component.text("Rentrer un nombre ici"),
70+
TranslationManager.translation("api.dialoginput.type_float.here"),
7271
minSize,
7372
maxSize
7473
)
@@ -82,14 +81,12 @@ public static void sendFloat(Player player, Component lore, float minSize, float
8281
)
8382
.type(DialogType.confirmation(
8483
ActionButton.builder(Component.text(ButtonType.CONFIRM.getLabel()))
85-
.action(DialogAction.customClick((response, audience) -> {
86-
callback.accept(response.getFloat("inputfloatomc"));
87-
}, ClickCallback.Options.builder().build()))
84+
.action(DialogAction.customClick((response, audience) ->
85+
callback.accept(response.getFloat("inputfloatomc")), ClickCallback.Options.builder().build()))
8886
.build(),
8987
ActionButton.builder(Component.text(ButtonType.CANCEL.getLabel()))
90-
.action(DialogAction.customClick((response, audience) -> {
91-
callback.accept(null);
92-
}, ClickCallback.Options.builder().build()))
88+
.action(DialogAction.customClick((response, audience) ->
89+
callback.accept(null), ClickCallback.Options.builder().build()))
9390
.build()
9491
)
9592
)

0 commit comments

Comments
 (0)