Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>ADHDMC</groupId>
<artifactId>SleepMessages</artifactId>
<version>1.0</version>
<version>1.1.0</version>
<packaging>jar</packaging>

<name>SleepMessages</name>
Expand Down Expand Up @@ -62,6 +62,10 @@
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>placeholderapi</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
</repositories>

<dependencies>
Expand All @@ -71,5 +75,11 @@
<version>1.19.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.7</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
25 changes: 16 additions & 9 deletions src/main/java/adhdmc/sleepmessages/SleepListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -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);
Expand All @@ -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());
}
}

Expand All @@ -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)));
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/adhdmc/sleepmessages/SleepMessages.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
});
}
}
2 changes: 2 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down