From 9df33ea89331aa22e0d350cb58af2c2baaed9584 Mon Sep 17 00:00:00 2001 From: wullie Date: Tue, 4 Nov 2025 02:18:26 +0000 Subject: [PATCH] Upload files to "src/main/java/me/zepsizola/customjoinleave" --- .../customjoinleave/CustomJoinLeave.java | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 src/main/java/me/zepsizola/customjoinleave/CustomJoinLeave.java diff --git a/src/main/java/me/zepsizola/customjoinleave/CustomJoinLeave.java b/src/main/java/me/zepsizola/customjoinleave/CustomJoinLeave.java new file mode 100644 index 0000000..dfa029a --- /dev/null +++ b/src/main/java/me/zepsizola/customjoinleave/CustomJoinLeave.java @@ -0,0 +1,163 @@ +package me.zepsizola.customjoinleave; + +import me.clip.placeholderapi.PlaceholderAPI; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandExecutor; +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 net.kyori.adventure.text.minimessage.MiniMessage; +import net.luckperms.api.LuckPerms; +import net.luckperms.api.LuckPermsProvider; +import net.luckperms.api.model.user.User; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import java.io.File; + +import static net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.AMPERSAND_CHAR; +import static net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.SECTION_CHAR; +import static org.bukkit.Bukkit.broadcast; + +public class CustomJoinLeave extends JavaPlugin implements Listener, CommandExecutor { + + private boolean PAPIEnabled = false; + private LuckPerms luckPerms; + private boolean luckPermsEnabled = false; + private final String configJoinMessage = getConfig().getString("joinMessage", "%player_name% joined the game"); + private final String configLeaveMessage = getConfig().getString("leaveMessage", "%player_name% left the game"); + private final String configSilentJoinPermission = getConfig().getString("permissions.silentjoin", "essentials.silentjoin"); + private final String configSilentLeavePermission = getConfig().getString("permissions.silentquit", "essentials.silentquit"); + private final String configVanishPermission = getConfig().getString("permissions.vanish", "essentials.vanish"); + private final String configVanishOnCommand = getConfig().getString("commands.vanish-on", "essentials:vanish on"); + private final String configVanishOffCommand = getConfig().getString("commands.vanish-off", "essentials:vanish off"); + + @Override + public void onEnable() { + + // Initialize bStats + + this.getServer().getPluginManager().registerEvents(this, this); + this.saveDefaultConfig(); + File configFile = new File(getDataFolder(), "config.yml"); + if (!configFile.exists()) { + saveResource("config.yml", false); + } + if (getCommand("vanishjoin") != null) { + getCommand("vanishjoin").setExecutor(this); + } else { + getLogger().warning("Could not register 'vanishjoin' command."); + } + if (getCommand("vanishleave") != null) { + getCommand("vanishleave").setExecutor(this); + } else { + getLogger().warning("Could not register 'vanishleave' command."); + } + + setupPAPI(); + setupLuckPerms(); + } + + private void setupLuckPerms() { + if (getServer().getPluginManager().getPlugin("LuckPerms") != null) { + luckPerms = LuckPermsProvider.get(); + luckPermsEnabled = true; + getLogger().info("LuckPerms enabled."); + } else { + getLogger().info("LuckPerms not found. LuckPerms support disabled."); + } + } + + private void setupPAPI() { + // Check if PlaceholderAPI is available + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + PAPIEnabled = true; + getLogger().info("PlaceholderAPI enabled."); + }else{ + getLogger().info("PlaceholderAPI not found. PAPI support disabled.");} + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + Component joinMessage = player.hasPermission(configSilentJoinPermission) ? null : customMessage(configJoinMessage, player); + event.joinMessage(joinMessage); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + Component quitMessage = player.hasPermission(configSilentLeavePermission) ? null : customMessage(configLeaveMessage, player); + event.quitMessage(quitMessage); + } + + private Component customMessage (String message, Player player){ + Component joinLeaveMessage; + if (PAPIEnabled) { //Sets PAPI placeholders if PAPI is enabled + message = PlaceholderAPI.setPlaceholders(player, message); + } else { + message = message.replace("%player_name%", player.getName()); + } + + if (luckPermsEnabled) { + User user = luckPerms.getUserManager().getUser(player.getUniqueId()); + String prefix_string = user.getCachedData().getMetaData().getPrefix(); //Gets namecolour prefix (might be null) + String suffix_string = user.getCachedData().getMetaData().getSuffix();// gets tag &7.exe (might be null) + prefix_string = prefix_string != null ? prefix_string.replace(SECTION_CHAR, AMPERSAND_CHAR) : ""; //Replaces § with & + suffix_string = suffix_string != null ? suffix_string.replace(SECTION_CHAR, AMPERSAND_CHAR) : ""; //Replaces § with & + //getLogger().info("Prefix string: " + prefix_string); + //getLogger().info("Suffix string: " + suffix_string); + //getLogger().info("Conversion happening..."); + prefix_string = MiniMessage.miniMessage().serialize(LegacyComponentSerializer.legacyAmpersand().deserialize(prefix_string)); + suffix_string = MiniMessage.miniMessage().serialize(LegacyComponentSerializer.legacyAmpersand().deserialize(suffix_string)); //Turns "&7.exe" into ".exe" + //getLogger().info("Prefix string: " + prefix_string); + //getLogger().info("Suffix string: " + suffix_string); + message = message.replace("", prefix_string); + message = message.replace("", suffix_string+"");//replaces with ".exe" in message + } + joinLeaveMessage = MiniMessage.miniMessage().deserialize(message); + return joinLeaveMessage; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player player; + if (!(sender instanceof Player)) { //If sender is not a player + if (args.length > 0) { //If a player name is provided + player = Bukkit.getPlayerExact(args[0]); + if (player == null) { + sender.sendMessage("Player not found"); + return true; + } + } else { //If no player name is provided + sender.sendMessage("Usage: /" + label + " "); + return true; + } + } else { //If sender is a player + player = (Player) sender; + } + + if (player.hasPermission(configVanishPermission)) { + if (command.getName().equalsIgnoreCase("vanishjoin")) { + Component joinMessage = customMessage(configJoinMessage, player); + getLogger().info("--- VANISHJOIN ---" + PlainTextComponentSerializer.plainText().serialize(joinMessage)); + broadcast(joinMessage); + player.performCommand(configVanishOffCommand); + } else if (command.getName().equalsIgnoreCase("vanishleave")) { + Component leaveMessage = customMessage(configLeaveMessage, player); + getLogger().info("--- VANISHLEAVE ---" + PlainTextComponentSerializer.plainText().serialize(leaveMessage)); + broadcast(leaveMessage); + player.performCommand(configVanishOnCommand); + } + } else { + sender.sendMessage("You do not have permission to vanish."); + } + return true; + } +}