diff --git a/src/main/java/fr/maxlego08/menu/loader/actions/BroadcastMessageLoader.java b/src/main/java/fr/maxlego08/menu/loader/actions/BroadcastMessageLoader.java new file mode 100644 index 00000000..8f652e9a --- /dev/null +++ b/src/main/java/fr/maxlego08/menu/loader/actions/BroadcastMessageLoader.java @@ -0,0 +1,28 @@ +package fr.maxlego08.menu.loader.actions; + +import fr.maxlego08.menu.api.annotations.AutoActionLoader; +import fr.maxlego08.menu.api.loader.ActionLoader; +import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.utils.TypedMapAccessor; +import fr.maxlego08.menu.requirement.actions.BroadcastMessageAction; +import org.jspecify.annotations.NonNull; + +import java.io.File; +import java.util.List; + +@AutoActionLoader +public class BroadcastMessageLoader extends ActionLoader { + + public BroadcastMessageLoader() { + super("broadcast_message", "broadcast message"); + } + + @Override + public Action load(@NonNull String path, @NonNull TypedMapAccessor accessor, @NonNull File file) { + + boolean miniMessage = accessor.getBoolean("minimessage", accessor.getBoolean("mini-message", true)); + List messages = accessor.getStringList("messages"); + + return new BroadcastMessageAction(messages, miniMessage); + } +} diff --git a/src/main/java/fr/maxlego08/menu/loader/actions/BroadcastTitleLoader.java b/src/main/java/fr/maxlego08/menu/loader/actions/BroadcastTitleLoader.java new file mode 100644 index 00000000..ab95270d --- /dev/null +++ b/src/main/java/fr/maxlego08/menu/loader/actions/BroadcastTitleLoader.java @@ -0,0 +1,30 @@ +package fr.maxlego08.menu.loader.actions; + +import fr.maxlego08.menu.api.annotations.AutoActionLoader; +import fr.maxlego08.menu.api.loader.ActionLoader; +import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.utils.TypedMapAccessor; +import fr.maxlego08.menu.requirement.actions.BroadcastTitleAction; +import org.jspecify.annotations.NonNull; + +import java.io.File; + +@AutoActionLoader +public class BroadcastTitleLoader extends ActionLoader { + + public BroadcastTitleLoader() { + super("broadcast_title", "broadcast title"); + } + + @Override + public Action load(@NonNull String path, @NonNull TypedMapAccessor accessor, @NonNull File file) { + + String title = accessor.getString("title"); + String subtitle = accessor.getString("subtitle"); + long start = accessor.getLong("start"); + long duration = accessor.getLong("duration"); + long end = accessor.getLong("end"); + + return new BroadcastTitleAction(title, subtitle, start, duration, end); + } +} diff --git a/src/main/java/fr/maxlego08/menu/requirement/actions/BroadcastMessageAction.java b/src/main/java/fr/maxlego08/menu/requirement/actions/BroadcastMessageAction.java new file mode 100644 index 00000000..7dbc524a --- /dev/null +++ b/src/main/java/fr/maxlego08/menu/requirement/actions/BroadcastMessageAction.java @@ -0,0 +1,36 @@ +package fr.maxlego08.menu.requirement.actions; + +import fr.maxlego08.menu.api.button.Button; +import fr.maxlego08.menu.api.engine.InventoryEngine; +import fr.maxlego08.menu.api.utils.Placeholders; +import fr.maxlego08.menu.common.utils.ActionHelper; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.jspecify.annotations.NonNull; + +import java.util.List; + +public class BroadcastMessageAction extends ActionHelper { + + private final List messages; + private final boolean miniMessage; + + public BroadcastMessageAction(List messages, boolean miniMessage) { + this.messages = messages; + this.miniMessage = miniMessage; + } + + @Override + protected void execute(@NonNull Player player, Button button, @NonNull InventoryEngine inventory, @NonNull Placeholders placeholders) { + List finalMessages = this.papi(placeholders.parse(this.messages), player); + Bukkit.getOnlinePlayers().forEach(target -> finalMessages.forEach(message -> { + String finalMessage = message.replace("%sender%", player.getName()).replace("%receiver%", target.getName()); + if (this.miniMessage) { + inventory.getPlugin().getMetaUpdater().sendMessage(target, finalMessage); + } else { + target.sendMessage(finalMessage); + } + })); + } + +} diff --git a/src/main/java/fr/maxlego08/menu/requirement/actions/BroadcastTitleAction.java b/src/main/java/fr/maxlego08/menu/requirement/actions/BroadcastTitleAction.java new file mode 100644 index 00000000..69998c33 --- /dev/null +++ b/src/main/java/fr/maxlego08/menu/requirement/actions/BroadcastTitleAction.java @@ -0,0 +1,34 @@ +package fr.maxlego08.menu.requirement.actions; + +import fr.maxlego08.menu.api.button.Button; +import fr.maxlego08.menu.api.engine.InventoryEngine; +import fr.maxlego08.menu.api.utils.Placeholders; +import fr.maxlego08.menu.common.utils.ActionHelper; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.jspecify.annotations.NonNull; + +public class BroadcastTitleAction extends ActionHelper { + + private final String title; + private final String subtitle; + private final long start; + private final long duration; + private final long end; + + public BroadcastTitleAction(String title, String subtitle, long start, long duration, long end) { + this.title = title; + this.subtitle = subtitle; + this.start = start; + this.duration = duration; + this.end = end; + } + + @Override + protected void execute(@NonNull Player player, Button button, @NonNull InventoryEngine inventory, @NonNull Placeholders placeholders) { + String finalTitle = this.papi(placeholders.parse(this.title), player); + String finalSubtitle = this.papi(placeholders.parse(this.subtitle), player); + Bukkit.getOnlinePlayers().forEach(target -> inventory.getPlugin().getMetaUpdater().sendTitle(target, finalTitle, finalSubtitle, this.start, this.duration, this.end)); + } + +}