add messaging and replying

This commit is contained in:
Taah 2022-04-24 07:43:55 -07:00
parent efe60c7976
commit b31d335b84
7 changed files with 172 additions and 1 deletions

View File

@ -0,0 +1,32 @@
package dev.plex.messaging;
import java.util.UUID;
public class MessageData
{
private final UUID sender;
private final UUID receiver;
private final String message;
public MessageData(UUID sender, UUID receiver, String message)
{
this.sender = sender;
this.receiver = receiver;
this.message = message;
}
public UUID getSender()
{
return sender;
}
public UUID getReceiver()
{
return receiver;
}
public String getMessage()
{
return message;
}
}

View File

@ -1,6 +1,7 @@
package dev.plex.player;
import com.google.gson.*;
import dev.plex.messaging.MessageData;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
@ -27,6 +28,8 @@ public interface ISunburstPlayer
boolean socialSpy();
MessageData messageData();
void displayName(Component displayName);
void godMode(boolean godMode);
@ -39,6 +42,8 @@ public interface ISunburstPlayer
void socialSpy(boolean socialSpy);
void messageData(MessageData messageData);
default String toJSON()
{
return new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Component.class, (JsonSerializer<Component>) (src, typeOfSrc, context) -> new JsonPrimitive(MiniMessage.miniMessage().serialize(src))).disableHtmlEscaping().create().toJson(this);

View File

@ -1,6 +1,8 @@
package dev.plex;
import dev.plex.command.impl.MessageCMD;
import dev.plex.command.impl.NicknameCMD;
import dev.plex.command.impl.ReplyCMD;
import dev.plex.command.impl.SunburstCMD;
import dev.plex.listener.impl.player.ChatListener;
import dev.plex.listener.impl.player.JoinListener;
@ -53,6 +55,8 @@ public final class Sunburst extends SunburstPlugin
new ChatListener();
new NicknameCMD();
new SunburstCMD();
new MessageCMD();
new ReplyCMD();
Bukkit.getOnlinePlayers().forEach(player ->
{

View File

@ -0,0 +1,48 @@
package dev.plex.command.impl;
import dev.plex.command.SunburstCommand;
import dev.plex.command.util.CommandInfo;
import dev.plex.command.util.CommandPerms;
import dev.plex.messaging.MessageData;
import dev.plex.player.ISunburstPlayer;
import dev.plex.util.ComponentUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@CommandInfo(name = "message", description = "Sends a message to a player", usage = "/<command> <player> <message>", aliases = {"msg", "tell", "whisper"})
@CommandPerms(permission = "sunburst.command.message")
public class MessageCMD extends SunburstCommand
{
@Override
public Component execute(@NotNull CommandSender sender, @Nullable Player player, String[] args)
{
if (args.length < 2)
{
return usage();
}
Player target = Bukkit.getPlayer(args[0]);
if (target == null)
{
return confMsg("playerNotFound");
}
String message = StringUtils.join(args, " ", 1, args.length);
MessageData data = new MessageData(sender instanceof ConsoleCommandSender ? null : player.getUniqueId(), target.getUniqueId(), message);
if (sender instanceof Player)
{
ISunburstPlayer sunburstPlayer = plugin.getObjectHolder().getStorageSystem().getPlayer(player.getUniqueId());
sunburstPlayer.messageData(data);
}
ISunburstPlayer sunburstPlayer = plugin.getObjectHolder().getStorageSystem().getPlayer(target.getUniqueId());
sunburstPlayer.messageData(data);
target.sendMessage(confMsg("messageReceived", sender.getName(), target.getName(), message));
return confMsg("messageSent", sender.getName(), target.getName(), message);
}
}

View File

@ -0,0 +1,55 @@
package dev.plex.command.impl;
import dev.plex.command.SunburstCommand;
import dev.plex.command.util.CommandInfo;
import dev.plex.command.util.CommandPerms;
import dev.plex.command.util.RequiredSource;
import dev.plex.messaging.MessageData;
import dev.plex.player.ISunburstPlayer;
import net.kyori.adventure.text.Component;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.UUID;
@CommandInfo(name = "reply", description = "Replies to a player", usage = "/<command> <message>", aliases = {"r", "respond"})
@CommandPerms(permission = "sunburst.command.reply", source = RequiredSource.PLAYER)
public class ReplyCMD extends SunburstCommand
{
@Override
public Component execute(@NotNull CommandSender sender, @Nullable Player player, String[] args)
{
if (args.length < 1)
{
return usage();
}
ISunburstPlayer sunburstPlayer = plugin.getObjectHolder().getStorageSystem().getPlayer(player.getUniqueId());
String message = StringUtils.join(args, " ");
MessageData data = sunburstPlayer.messageData();
if (data == null)
{
return confMsg("messengerNotFound");
}
UUID uuid = data.getSender() != null && data.getSender().equals(player.getUniqueId()) ? data.getReceiver() : data.getSender();
CommandSender target;
if (uuid == null)
{
target = Bukkit.getConsoleSender();
Bukkit.getConsoleSender().sendMessage(confMsg("messageReceived", target.getName(), "CONSOLE", message));
} else
{
target = Bukkit.getPlayer(uuid);
if (target == null)
{
return confMsg("playerNotFound");
}
target.sendMessage(confMsg("messageReceived", sender.getName(), target.getName(), message));
}
return confMsg("messageSent", sender.getName(), target.getName(), message);
}
}

View File

@ -1,5 +1,6 @@
package dev.plex.player;
import dev.plex.messaging.MessageData;
import lombok.RequiredArgsConstructor;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
@ -16,6 +17,8 @@ public class SunburstPlayer implements ISunburstPlayer
private Component displayName;
private transient MessageData messageData;
private boolean godMode;
private boolean muted;
private boolean teleportToggled;
@ -76,6 +79,12 @@ public class SunburstPlayer implements ISunburstPlayer
return socialSpy;
}
@Override
public MessageData messageData()
{
return messageData;
}
@Override
public void displayName(Component displayName)
{
@ -116,4 +125,10 @@ public class SunburstPlayer implements ISunburstPlayer
{
this.socialSpy = socialSpy;
}
@Override
public void messageData(MessageData messageData)
{
this.messageData = messageData;
}
}

View File

@ -8,6 +8,7 @@
noPermission: "<red>You lack the permission node <gold>{0}"
consoleOnly: "<red>This command may only be used from console"
playerOnly: "<red>This command may only be used in-game"
playerNotFound: "<red>This player is not online"
# 0 - The command usage
commandCheckPlayer: "<red>This command can only be used from console. The usage is <gold>{0}"
@ -30,4 +31,15 @@ nicknameSetOther: "<aqua>You have set {0}'s nickname to {1}"
# 0 - Player username
# 1 - Message
chatFormat: "<aqua>{0}: <white>{1}"
chatFormat: "<aqua>{0}: <white>{1}"
# 0 - The sender
# 1 - The player who received
# 2 - The message
messageReceived: "<red><bold>{0} <white><!bold>---> <red><bold>ME<white><!bold>: {2}"
# 0 - The sender
# 1 - The player who received
# 2 - The message
messageSent: "<red><bold>ME <white><!bold>---> <red><bold>{1}<white><!bold>: {2}"
messengerNotFound: "<red>You have not messaged anyone!"