diff --git a/src/main/java/com/slprojects/privateServerPlugin/GoodbyeMessageManager.java b/src/main/java/com/slprojects/privateServerPlugin/GoodbyeMessageManager.java new file mode 100644 index 0000000000000000000000000000000000000000..ac0ea0fc28f2b228ca9c98b758e6512cb59bb717 --- /dev/null +++ b/src/main/java/com/slprojects/privateServerPlugin/GoodbyeMessageManager.java @@ -0,0 +1,47 @@ +package com.slprojects.privateServerPlugin; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; + +import java.util.List; + +public class GoodbyeMessageManager { + + private static final List<String> SHORT_SESSION_MESSAGES = List.of( + "Abadakor, <red>%s<reset> n'avait pas envie de nous voir", + "<red>%s<reset> avait une envie très pressante", + "En fait non, <red>%s<reset> en a décidé autrement. :3" + ); + + private static final List<String> MEDIUM_SESSION_MESSAGES = List.of( + "<red>%s<reset> est parti(e) ranger sa chambre", + "<red>%s<reset> est parti(e) faire caca", + "<red>%s<reset> est parti(e) mettre la table", + "<red>%s<reset> est parti(e) manger", + "<red>%s<reset> est parti(e) faire quelques trucs :3", + "<red>%s<reset> a disparu ? Non, il/elle est parti(e). :)" + ); + + private static final List<String> LONG_SESSION_MESSAGES = List.of( + "<red>%s<reset> nous a quitté car il/elle s'est fait rappelé(e) à l'ordre par sa maman :')", + "<red>%s<reset> a retrouvé le monde réel", + "<red>%s<reset> en a eu assez" + ); + + public Component getGoodbyeMessage(String playerNickname, long sessionDurationInSeconds) { + List<String> messagePool; + + if (sessionDurationInSeconds < 30) { + messagePool = SHORT_SESSION_MESSAGES; + } else if (sessionDurationInSeconds < 3600) { + messagePool = MEDIUM_SESSION_MESSAGES; + } else { + messagePool = LONG_SESSION_MESSAGES; + } + + int randomIndex = (int) (Math.random() * messagePool.size()); + String chosenMessage = String.format(messagePool.get(randomIndex), playerNickname); + + return MiniMessage.miniMessage().deserialize(chosenMessage); + } +} diff --git a/src/main/java/com/slprojects/privateServerPlugin/PrivateServerPlugin.java b/src/main/java/com/slprojects/privateServerPlugin/PrivateServerPlugin.java index 940f473bb9fd319fe37232cb29b1cf82a454e2a4..c72987bc19d215c9f0e04841cc24f41207126711 100644 --- a/src/main/java/com/slprojects/privateServerPlugin/PrivateServerPlugin.java +++ b/src/main/java/com/slprojects/privateServerPlugin/PrivateServerPlugin.java @@ -5,16 +5,24 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; + public final class PrivateServerPlugin extends JavaPlugin implements Listener { private WelcomeMessageManager welcomeMessageManager; + private GoodbyeMessageManager goodbyeMessageManager; + private final Map<Player, Instant> playerJoinTimes = new HashMap<>(); @Override public void onEnable() { getServer().getPluginManager().registerEvents(this, this); this.welcomeMessageManager = new WelcomeMessageManager(); + this.goodbyeMessageManager = new GoodbyeMessageManager(); } @Override @@ -24,11 +32,30 @@ public final class PrivateServerPlugin extends JavaPlugin implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); event.joinMessage(null); - Component welcomeMessage = welcomeMessageManager.getNextRandomMessage(event.getPlayer().getName()); + playerJoinTimes.put(player, Instant.now()); + + Component welcomeMessage = welcomeMessageManager.getNextRandomMessage(player.getName()); for (Player p : getServer().getOnlinePlayers()) { p.sendMessage(welcomeMessage); } } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + event.quitMessage(null); + + Instant joinTime = playerJoinTimes.remove(player); + if (joinTime != null) { + long sessionDurationInSeconds = Instant.now().getEpochSecond() - joinTime.getEpochSecond(); + + Component goodbyeMessage = goodbyeMessageManager.getGoodbyeMessage(player.getName(), sessionDurationInSeconds); + for (Player p : getServer().getOnlinePlayers()) { + p.sendMessage(goodbyeMessage); + } + } + } }