Skip to content
Draft
87 changes: 38 additions & 49 deletions src/main/java/fr/openmc/api/chronometer/Chronometer.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,15 @@ public static HandlerList getHandlerList() {
* @param finishMessageType display type
* @param finishMessage message display when the chronometer ends normally
*/
public static void startChronometer(Entity entity, String group, int time, ChronometerType messageType, String message, ChronometerType finishMessageType, String finishMessage) {
public static void startChronometer(
Entity entity,
String group,
int time,
ChronometerType messageType,
Component message,
ChronometerType finishMessageType,
Component finishMessage
) {
UUID entityUUID = entity.getUniqueId();
chronometer.computeIfAbsent(entityUUID, k -> new HashMap<>()).put(group, time);

Expand All @@ -81,33 +89,26 @@ public void run() {
}

int remainingTime = chronometer.get(entityUUID).get(group);
String timerMessage = "Il reste : " + remainingTime + "s";
if (message!=null){
if (!message.contains("%null%")){
if (message.contains("%sec%")) {
timerMessage = message.replace("%sec%", String.valueOf(remainingTime));
}
if (entity instanceof Player player){
sendMessage(player, messageType, Component.text(timerMessage));
}
}
} else {
if (entity instanceof Player player){
sendMessage(player, messageType, Component.text(timerMessage));
}
}

if (message != null && entity instanceof Player player) {
Component timerMessage = message.replaceText(builder ->
builder.matchLiteral("%sec%")
.replacement(Component.text(remainingTime))
);
sendMessage(player, messageType, timerMessage);
}

if (timerEnd(entityUUID, group)) {
if (entity instanceof Player player){
sendMessage(player, finishMessageType, Component.text(finishMessage != null ? finishMessage : "Le chronomètre est terminé !"));

if (entity instanceof Player player && finishMessage != null) {
sendMessage(player, finishMessageType, finishMessage);
}

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

if (chronometer.containsKey(entityUUID)) {
chronometer.get(entityUUID).remove(group);
if (chronometer.get(entityUUID).isEmpty()){
if (chronometer.get(entityUUID).isEmpty()) {
chronometer.remove(entityUUID);
}
}
Expand All @@ -119,7 +120,6 @@ public void run() {
}
};
task.runTaskTimer(OMCPlugin.getInstance(), 0, 20);

activeTasks.computeIfAbsent(entityUUID, k -> new HashMap<>()).put(group, task);
}

Expand All @@ -128,26 +128,20 @@ public void run() {
* @param messageType display type
* @param message message display when the chronometer is stopped
*/
public static void stopAllChronometer(Entity entity, ChronometerType messageType, String message) {
public static void stopAllChronometer(Entity entity, ChronometerType messageType, Component message) {
UUID entityUUID = entity.getUniqueId();

if (chronometer.containsKey(entityUUID)) {
chronometer.remove(entityUUID);
if (message!=null){
if (!message.contains("%null%")){
if (entity instanceof Player player){
sendMessage(player, messageType, Component.text(message));
}
}
} else {
if (entity instanceof Player player){
sendMessage(player, messageType, Component.text("Chronomètre arrêté"));
}

if (entity instanceof Player player && message != null) {
sendMessage(player, messageType, message);
}
}

if (activeTasks.containsKey(entityUUID)) {
for (Map.Entry<String, BukkitRunnable> entry : activeTasks.get(entityUUID).entrySet()) {
entry.getValue().cancel();
for (BukkitRunnable runnable : activeTasks.get(entityUUID).values()) {
runnable.cancel();
}
activeTasks.remove(entityUUID);
}
Expand All @@ -159,7 +153,7 @@ public static void stopAllChronometer(Entity entity, ChronometerType messageType
* @param messageType display type
* @param message message display when the chronometer is stopped
*/
public static void stopChronometer(Entity entity, String group, ChronometerType messageType, String message) {
public static void stopChronometer(Entity entity, String group, ChronometerType messageType, Component message) {
UUID entityUUID = entity.getUniqueId();

if (chronometer.containsKey(entityUUID) && chronometer.get(entityUUID).containsKey(group)) {
Expand All @@ -170,24 +164,17 @@ public static void stopChronometer(Entity entity, String group, ChronometerType
activeTasks.get(entityUUID).remove(group);
}

if (message!=null){
if (!message.contains("%null%")){
if (entity instanceof Player player){
sendMessage(player, messageType, Component.text(message));
}
}
} else {
if (entity instanceof Player player){
sendMessage(player, messageType, Component.text("Chronomètre du " + group + " arrêté"));
}
if (entity instanceof Player player && message != null) {
sendMessage(player, messageType, message);
}

if (chronometer.get(entityUUID).isEmpty()) {
chronometer.remove(entityUUID);
}
} else {
if (entity instanceof Player player){
player.sendMessage("§cAucun chronomètre trouvé pour le groupe §e" + group + ".");
if (entity instanceof Player player) {
MessagesManager.sendMessage(player,
Component.translatable("api.chronometer.chronometer_not_found", Component.text(group)), Prefix.OPENMC, MessageType.INFO, false);
}
}
}
Expand All @@ -196,12 +183,14 @@ public static void listChronometers(Entity entity, Player owner) {
UUID entitytUUID = entity.getUniqueId();

if (chronometer.containsKey(entitytUUID)) {
owner.sendMessage("§aChronomètres actifs :");
owner.sendMessage(Component.translatable("api.chronometer.chronometer_on"));
chronometer.get(entitytUUID).forEach((group, time) ->
owner.sendMessage(" §e- " + group + ": §6" + time + "s")
owner.sendMessage(
Component.translatable("api.chronometer.chronometer_on_list",
Component.text(group), Component.text(time)))
);
} else {
owner.sendMessage("§cCe joueur n'a aucun chronomètre actif.");
owner.sendMessage(Component.translatable("api.chronometer.none_chronometer_player"));
}
}

Expand Down
16 changes: 12 additions & 4 deletions src/main/java/fr/openmc/api/cooldown/CooldownInterceptor.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package fr.openmc.api.cooldown;

import fr.openmc.core.utils.DateUtils;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;
import revxrsal.commands.process.CommandCondition;

public class CooldownInterceptor implements CommandCondition<BukkitCommandActor> {

@Override
public void test(@NotNull ExecutionContext<BukkitCommandActor> context) {

DynamicCooldown cooldown = context.command().annotations().get(DynamicCooldown.class);
if (cooldown == null) {
return;
Expand All @@ -18,11 +21,16 @@ public void test(@NotNull ExecutionContext<BukkitCommandActor> context) {
Player player = context.actor().requirePlayer();

if (!DynamicCooldownManager.isReady(player.getUniqueId(), cooldown.group())) {

long remaining = DynamicCooldownManager.getRemaining(player.getUniqueId(), cooldown.group());
String message = cooldown.message();
message = message.replace("%formatTime%", DateUtils.convertSecondToTime(remaining / 1000));
message = message.replace("%sec%", String.valueOf(remaining / 1000));
message = message.replace("%ms%", String.valueOf(remaining));

Component message = Component.translatable(
cooldown.messageKey(),
Component.text(remaining / 1000),
Component.text(remaining),
Component.text(DateUtils.convertSecondToTime(remaining / 1000))
);

player.sendMessage(message);
}
}
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/fr/openmc/api/cooldown/DynamicCooldown.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@
*
* @return message
*/
String message() default "§cVous devez attendre %sec%s";
String messageKey() default "api.cooldown.must_wait";
/*
* %sec% | Le temps restant en secondes
* %ms% | Le temps restant en millisecondes
* <arg:0> | Le temps restant en secondes
* <arg:1> | Le temps restant en millisecondes
* <arg:2> | Le temps restant formaté (ex: 1m30s)
*/
}
6 changes: 5 additions & 1 deletion src/main/java/fr/openmc/api/input/ChatInput.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package fr.openmc.api.input;

import fr.openmc.core.utils.messages.MessageType;
import fr.openmc.core.utils.messages.MessagesManager;
import fr.openmc.core.utils.messages.Prefix;
import io.papermc.paper.event.player.AsyncChatEvent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand Down Expand Up @@ -32,7 +36,7 @@ public void onPlayerChat(AsyncChatEvent event) {
if (event.message() instanceof TextComponent textComponent) {
String string = textComponent.content();
if (string.contains("cancel")) {
player.sendMessage("§eVous avez annulé l'action !");
MessagesManager.sendMessage(player, Component.translatable("api.chatinput.cancel"), Prefix.OPENMC, MessageType.INFO, false);
callback.accept(null);
}
callback.accept(string);
Expand Down
28 changes: 12 additions & 16 deletions src/main/java/fr/openmc/api/input/DialogInput.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ public static void send(Player player, Component lore, int maxLength, Consumer<S
body.add(DialogBody.plainMessage(lore));

Dialog inputDialog = Dialog.create(builder -> builder.empty()
.base(DialogBase.builder(Component.text("Rentrer du Texte"))
.base(DialogBase.builder(Component.translatable("api.dialoginput.type_string"))
.body(body)
.inputs(List.of(
io.papermc.paper.registry.data.dialog.input.DialogInput
.text("inputtextomc",
Component.text("Rentrer du texte ici")
Component.translatable("api.dialoginput.type_string.here")
)
.maxLength(maxLength)
.build()
Expand All @@ -41,14 +41,12 @@ public static void send(Player player, Component lore, int maxLength, Consumer<S
)
.type(DialogType.confirmation(
ActionButton.builder(Component.text(ButtonType.CONFIRM.getLabel()))
.action(DialogAction.customClick((response, audience) -> {
callback.accept(response.getText("inputtextomc"));
}, ClickCallback.Options.builder().build()))
.action(DialogAction.customClick((response, audience) ->
callback.accept(response.getText("inputtextomc")), ClickCallback.Options.builder().build()))
.build(),
ActionButton.builder(Component.text(ButtonType.CANCEL.getLabel()))
.action(DialogAction.customClick((response, audience) -> {
callback.accept(null);
}, ClickCallback.Options.builder().build()))
.action(DialogAction.customClick((response, audience) ->
callback.accept(null), ClickCallback.Options.builder().build()))
.build()
)
)
Expand All @@ -63,12 +61,12 @@ public static void sendFloat(Player player, Component lore, float minSize, float
body.add(DialogBody.plainMessage(lore));

Dialog inputDialog = Dialog.create(builder -> builder.empty()
.base(DialogBase.builder(Component.text("Rentrer un nombre"))
.base(DialogBase.builder(Component.translatable("api.dialoginput.type_float"))
.body(body)
.inputs(List.of(
io.papermc.paper.registry.data.dialog.input.DialogInput
.numberRange("inputfloatomc",
Component.text("Rentrer un nombre ici"),
Component.translatable("api.dialoginput.type_float.here"),
minSize,
maxSize
)
Expand All @@ -82,14 +80,12 @@ public static void sendFloat(Player player, Component lore, float minSize, float
)
.type(DialogType.confirmation(
ActionButton.builder(Component.text(ButtonType.CONFIRM.getLabel()))
.action(DialogAction.customClick((response, audience) -> {
callback.accept(response.getFloat("inputfloatomc"));
}, ClickCallback.Options.builder().build()))
.action(DialogAction.customClick((response, audience) ->
callback.accept(response.getFloat("inputfloatomc")), ClickCallback.Options.builder().build()))
.build(),
ActionButton.builder(Component.text(ButtonType.CANCEL.getLabel()))
.action(DialogAction.customClick((response, audience) -> {
callback.accept(null);
}, ClickCallback.Options.builder().build()))
.action(DialogAction.customClick((response, audience) ->
callback.accept(null), ClickCallback.Options.builder().build()))
.build()
)
)
Expand Down
Loading