diff --git a/pom.xml b/pom.xml index ec1ccfd..cdfa239 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ADHDMC SleepMessages - 1.0 + 1.1.0 jar SleepMessages @@ -62,6 +62,10 @@ sonatype https://oss.sonatype.org/content/groups/public/ + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + @@ -71,5 +75,11 @@ 1.19.2-R0.1-SNAPSHOT provided + + me.clip + placeholderapi + 2.11.7 + provided + diff --git a/src/main/java/adhdmc/sleepmessages/SleepListener.java b/src/main/java/adhdmc/sleepmessages/SleepListener.java index a065177..b1e9900 100644 --- a/src/main/java/adhdmc/sleepmessages/SleepListener.java +++ b/src/main/java/adhdmc/sleepmessages/SleepListener.java @@ -3,9 +3,11 @@ import adhdmc.sleepmessages.util.SMMessage; import adhdmc.sleepmessages.util.SMPerm; import io.papermc.paper.event.player.PlayerDeepSleepEvent; +import me.clip.placeholderapi.PlaceholderAPI; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.Bukkit; import org.bukkit.GameRule; import org.bukkit.Server; import org.bukkit.World; @@ -17,6 +19,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerBedLeaveEvent; import org.bukkit.event.world.TimeSkipEvent; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -31,7 +34,7 @@ public void onPlayerSleep(PlayerDeepSleepEvent event) { int worldOnlineTotal = world.getPlayerCount(); Integer worldSleepPercent = world.getGameRuleValue(GameRule.PLAYERS_SLEEPING_PERCENTAGE); if (worldSleepPercent == null) return; - Component playerName = event.getPlayer().displayName(); + Player playerSleeping = event.getPlayer(); String worldName = world.getName(); int currentSleepCount = 0; Integer neededSleepers = (int) Math.ceil((worldSleepPercent / 100.0) * worldOnlineTotal); @@ -49,9 +52,9 @@ public void onPlayerSleep(PlayerDeepSleepEvent event) { } } if (worldMessage) { - sendWorldMessage(world, playerName, currentSleepCount, neededSleepers, worldName, SMMessage.PLAYER_SLEEPING.getMessage()); + sendWorldMessage(world, playerSleeping, currentSleepCount, neededSleepers, worldName, SMMessage.PLAYER_SLEEPING.getMessage()); } else { - sendServerMessage(SleepMessages.getInstance().getServer(), playerName, currentSleepCount, neededSleepers, worldName, SMMessage.PLAYER_SLEEPING.getMessage()); + sendServerMessage(SleepMessages.getInstance().getServer(), playerSleeping, currentSleepCount, neededSleepers, worldName, SMMessage.PLAYER_SLEEPING.getMessage()); } } @@ -64,24 +67,28 @@ public void nightSkip(TimeSkipEvent event) { World world = event.getWorld(); String worldName = event.getWorld().getName(); if (worldMessage) { - sendWorldMessage(world, miniMessage.deserialize(""), 0, 0, worldName, SMMessage.NIGHT_SKIP.getMessage()); + sendWorldMessage(world, null, 0, 0, worldName, SMMessage.NIGHT_SKIP.getMessage()); } else { - sendServerMessage(SleepMessages.getInstance().getServer(), miniMessage.deserialize(""), 0, 0, worldName, SMMessage.NIGHT_SKIP.getMessage()); + sendServerMessage(SleepMessages.getInstance().getServer(), null, 0, 0, worldName, SMMessage.NIGHT_SKIP.getMessage()); } } - private void sendWorldMessage(World world, Component playername, Integer sleepingPlayers, Integer neededSleepers, String worldName, String message) { + private void sendWorldMessage(World world, @Nullable Player player, Integer sleepingPlayers, Integer neededSleepers, String worldName, String message) { + Component playerName = player == null ? Component.empty() : player.displayName(); world.sendMessage(miniMessage.deserialize(message, - Placeholder.component("playername", playername), + SleepMessages.papi(player), + Placeholder.component("playername", playerName), Placeholder.parsed("sleeping", sleepingPlayers.toString()), Placeholder.parsed("needed", neededSleepers.toString()), Placeholder.parsed("worldname", worldName))); } - private void sendServerMessage(Server server, Component playername, Integer sleepingPlayers, Integer neededSleepers, String worldName, String message) { + private void sendServerMessage(Server server, @Nullable Player player, Integer sleepingPlayers, Integer neededSleepers, String worldName, String message) { + Component playerName = player == null ? Component.empty() : player.displayName(); server.sendMessage(miniMessage.deserialize(message, - Placeholder.component("playername", playername), + SleepMessages.papi(player), + Placeholder.component("playername", playerName), Placeholder.parsed("sleeping", sleepingPlayers.toString()), Placeholder.parsed("needed", neededSleepers.toString()), Placeholder.parsed("worldname", worldName))); diff --git a/src/main/java/adhdmc/sleepmessages/SleepMessages.java b/src/main/java/adhdmc/sleepmessages/SleepMessages.java index 72b2a0e..db86b50 100644 --- a/src/main/java/adhdmc/sleepmessages/SleepMessages.java +++ b/src/main/java/adhdmc/sleepmessages/SleepMessages.java @@ -2,8 +2,19 @@ import adhdmc.sleepmessages.util.Defaults; import adhdmc.sleepmessages.util.SMMessage; +import me.clip.placeholderapi.PlaceholderAPI; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.Context; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.Tag; +import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public final class SleepMessages extends JavaPlugin { private static SleepMessages instance; @@ -39,4 +50,16 @@ public static MiniMessage getMiniMessage() { public boolean isPurpurEnabled() { return purpurEnabled; } + + public static @NotNull TagResolver papi(@Nullable Player player) { + return TagResolver.resolver("papi", (ArgumentQueue args, Context ctx) -> { + if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) return null; + if (!args.hasNext()) return null; + String placeholder = "%" + args.pop().value() + "%"; + String parsed = PlaceholderAPI.setPlaceholders(player, placeholder); + if (parsed.equals(placeholder)) return null; + Component component = LegacyComponentSerializer.legacySection().deserialize(parsed); + return Tag.selfClosingInserting(component); + }); + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2916ca1..9232e88 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,6 +5,8 @@ website: https://github.com/ADHDMC/SleepMessages author: _Rhythmic api-version: 1.19 description: Puts a message in chat when someone sleeps +softdepend: + - PlaceholderAPI commands: smreload: description: Command to reload the config for sleep messages