Skip to content
Snippets Groups Projects
Commit e04bddb3 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

feat: add GoodbyeMessageManager and handle player quit messages

parent 7598d68d
No related branches found
No related tags found
No related merge requests found
Pipeline #987 passed
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);
}
}
...@@ -5,16 +5,24 @@ import org.bukkit.entity.Player; ...@@ -5,16 +5,24 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin; 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 { public final class PrivateServerPlugin extends JavaPlugin implements Listener {
private WelcomeMessageManager welcomeMessageManager; private WelcomeMessageManager welcomeMessageManager;
private GoodbyeMessageManager goodbyeMessageManager;
private final Map<Player, Instant> playerJoinTimes = new HashMap<>();
@Override @Override
public void onEnable() { public void onEnable() {
getServer().getPluginManager().registerEvents(this, this); getServer().getPluginManager().registerEvents(this, this);
this.welcomeMessageManager = new WelcomeMessageManager(); this.welcomeMessageManager = new WelcomeMessageManager();
this.goodbyeMessageManager = new GoodbyeMessageManager();
} }
@Override @Override
...@@ -24,11 +32,30 @@ public final class PrivateServerPlugin extends JavaPlugin implements Listener { ...@@ -24,11 +32,30 @@ public final class PrivateServerPlugin extends JavaPlugin implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
event.joinMessage(null); 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()) { for (Player p : getServer().getOnlinePlayers()) {
p.sendMessage(welcomeMessage); 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);
}
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment