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