diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/joinmessage/PlayerJoinMessageController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/joinmessage/PlayerJoinMessageController.java index 9928cdb4b..5632b7522 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/joinmessage/PlayerJoinMessageController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/joinmessage/PlayerJoinMessageController.java @@ -41,12 +41,6 @@ void onPlayerJoin(PlayerJoinEvent event) { .send(); } - this.noticeService.create() - .notice(translation -> translation.event().welcome()) - .placeholder("{PLAYER}", player.getName()) - .player(player.getUniqueId()) - .sendAsync(); - event.setJoinMessage(StringUtils.EMPTY); this.noticeService.create() diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/MotdJoinController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/MotdJoinController.java new file mode 100644 index 000000000..208be0c52 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/MotdJoinController.java @@ -0,0 +1,42 @@ +package com.eternalcode.core.feature.motd; + +import com.eternalcode.core.feature.motd.messages.MotdMessages; +import com.eternalcode.core.injector.annotations.Inject; +import com.eternalcode.core.injector.annotations.component.Controller; +import com.eternalcode.core.notice.NoticeService; +import com.eternalcode.core.placeholder.Placeholders; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +@SuppressWarnings("Convert2MethodRef") +@Controller +class MotdJoinController implements Listener { + + private static final Placeholders PLACEHOLDERS = Placeholders.builder() + .with("{PLAYER}", player -> player.getName()) + .with("{TIME}", player -> String.valueOf(player.getWorld().getTime())) + .with("{WORLD}", player -> player.getWorld().getName()) + .build(); + + private final NoticeService noticeService; + private final MotdMessages motdMessages; + + @Inject + MotdJoinController(NoticeService noticeService, MotdMessages motdMessages) { + this.noticeService = noticeService; + this.motdMessages = motdMessages; + } + + @EventHandler + void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + + this.noticeService.create() + .notice(this.motdMessages.motdContent()) + .player(player.getUniqueId()) + .formatter(PLACEHOLDERS.toFormatter(player)) + .send(); + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/ENMotdMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/ENMotdMessages.java new file mode 100644 index 000000000..e860ca454 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/ENMotdMessages.java @@ -0,0 +1,32 @@ +package com.eternalcode.core.feature.motd.messages; + +import com.eternalcode.multification.bukkit.notice.BukkitNotice; +import com.eternalcode.multification.notice.Notice; +import eu.okaeri.configs.OkaeriConfig; +import eu.okaeri.configs.annotation.Comment; +import lombok.Getter; +import lombok.experimental.Accessors; +import org.bukkit.Sound; + +import java.util.List; + +@Getter +@Accessors(fluent = true) +public class ENMotdMessages extends OkaeriConfig implements MotdMessages { + + @Comment("# Message of the Day (MOTD) content that will be sent to players when they join the server.") + @Comment("# Out of the box supported placeholders: {PLAYER}, {WORLD}, {TIME}") + @Comment("# You can add your own placeholders using the PlaceholderAPI.") + @Comment("# You can check our Notification Generator: https://www.eternalcode.pl/notification-generator") + public Notice motdContent = BukkitNotice.builder() + .chat(List.of( + "Welcome to the server, {PLAYER}", + "Have a good time playing!", + "The current time in {WORLD} is: {TIME} ticks", + "If you need any help, don't hesitate to ask our staff using the /helpop command!" + ) + ) + .title("EternalCore", "Welcome back to the server!") + .sound(Sound.BLOCK_NOTE_BLOCK_PLING) + .build(); +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/MotdMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/MotdMessages.java new file mode 100644 index 000000000..79f0219b7 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/MotdMessages.java @@ -0,0 +1,8 @@ +package com.eternalcode.core.feature.motd.messages; + +import com.eternalcode.multification.notice.Notice; + +public interface MotdMessages { + + Notice motdContent(); +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/PLMotdMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/PLMotdMessages.java new file mode 100644 index 000000000..5aa74240b --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/motd/messages/PLMotdMessages.java @@ -0,0 +1,32 @@ +package com.eternalcode.core.feature.motd.messages; + +import com.eternalcode.multification.bukkit.notice.BukkitNotice; +import com.eternalcode.multification.notice.Notice; +import eu.okaeri.configs.OkaeriConfig; +import eu.okaeri.configs.annotation.Comment; +import lombok.Getter; +import lombok.experimental.Accessors; +import org.bukkit.Sound; + +import java.util.List; + +@Getter +@Accessors(fluent = true) +public class PLMotdMessages extends OkaeriConfig implements MotdMessages { + + @Comment("# Treść wiadomości dnia (MOTD), która zostanie wysłana do graczy po wejściu na serwer.") + @Comment("# Domyślnie obsługiwane placeholdery: {PLAYER}, {WORLD}, {TIME}") + @Comment("# Możesz dodać własne placeholdery korzystając z PlaceholderAPI.") + @Comment("# Generator powiadomień znajdziesz tutaj: https://www.eternalcode.pl/notification-generator") + public Notice motdContent = BukkitNotice.builder() + .chat(List.of( + "Witaj na serwerze, {PLAYER}", + "Miłej zabawy!", + "Aktualny czas w {WORLD} to: {TIME} tików", + "Jeśli potrzebujesz pomocy, napisz do administracji komendą /helpop" + ) + ) + .title("EternalCore", "Witamy ponownie na serwerze!") + .sound(Sound.BLOCK_NOTE_BLOCK_PLING) + .build(); +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java index 9144f3e30..24e9350d2 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java @@ -13,6 +13,7 @@ import com.eternalcode.core.feature.itemedit.messages.ItemEditMessages; import com.eternalcode.core.feature.jail.messages.JailMessages; import com.eternalcode.core.feature.language.Language; +import com.eternalcode.core.feature.motd.messages.MotdMessages; import com.eternalcode.core.feature.msg.messages.MsgMessages; import com.eternalcode.core.feature.randomteleport.messages.RandomTeleportMessages; import com.eternalcode.core.feature.seen.messages.SeenMessages; @@ -99,8 +100,6 @@ interface EventSection { List firstJoinMessage(); Map> deathMessageByDamageCause(); - - Notice welcome(); } interface InventorySection { @@ -258,4 +257,6 @@ interface ContainerSection { BurnMessages burn(); // vanish section VanishMessages vanish(); + // motd section + MotdMessages motd(); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java index e212638a7..a3c5fb18e 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java @@ -13,6 +13,7 @@ import com.eternalcode.core.feature.itemedit.messages.ENItemEditMessages; import com.eternalcode.core.feature.jail.messages.ENJailMessages; import com.eternalcode.core.feature.language.Language; +import com.eternalcode.core.feature.motd.messages.ENMotdMessages; import com.eternalcode.core.feature.msg.messages.ENMsgMessages; import com.eternalcode.core.feature.randomteleport.messages.ENRandomTeleportMessages; import com.eternalcode.core.feature.seen.messages.ENSeenMessages; @@ -356,9 +357,6 @@ public static class ENEventSection extends OkaeriConfig implements EventSection Notice.actionbar("► {PLAYER} logged off the server!"), Notice.actionbar("► {PLAYER} left the server!") ); - - @Comment({" ", "# {PLAYER} - Player who joined"}) - public Notice welcome = Notice.title("EternalCode.pl", "Welcome back to the server!"); } @@ -578,4 +576,7 @@ public static class ENLanguageSection extends OkaeriConfig implements LanguageSe @Comment({" ", "# This section is responsible for vanish-related stuff."}) public ENVanishMessages vanish = new ENVanishMessages(); + + @Comment({" ", "# This section is responsible for the messages of the MOTD feature."}) + public ENMotdMessages motd = new ENMotdMessages(); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java index e280d773c..92f513d2e 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java @@ -13,6 +13,7 @@ import com.eternalcode.core.feature.itemedit.messages.PLItemEditMessages; import com.eternalcode.core.feature.jail.messages.PLJailMessages; import com.eternalcode.core.feature.language.Language; +import com.eternalcode.core.feature.motd.messages.PLMotdMessages; import com.eternalcode.core.feature.msg.messages.PLMsgMessages; import com.eternalcode.core.feature.randomteleport.messages.PLRandomTeleportMessages; import com.eternalcode.core.feature.seen.messages.PLSeenMessages; @@ -376,9 +377,6 @@ public static class PLEventSection extends OkaeriConfig implements EventSection Notice.actionbar("► {PLAYER} wylogował się z serwera!"), Notice.actionbar("► {PLAYER} opuścił serwer!") ); - - @Comment({" ", "# {PLAYER} - Gracz który dołączył do serwera"}) - public Notice welcome = Notice.title("{PLAYER}", "Witaj ponownie na serwerze!"); } @Comment({ @@ -602,4 +600,7 @@ public static class PLLanguageSection extends OkaeriConfig implements LanguageSe @Comment({" ", "# Ta sekcja odpowiada za wiadomości dotyczące trybu niewidoczności graczy"}) public PLVanishMessages vanish = new PLVanishMessages(); + + @Comment({" ", "# Ta sekcja odpowiada za funkcję MOTD (Message of the Day)"}) + public PLMotdMessages motd = new PLMotdMessages(); }