mirror of
https://github.com/plexusorg/Sunburst.git
synced 2025-02-05 14:36:11 +00:00
add messaging and replying
This commit is contained in:
parent
efe60c7976
commit
b31d335b84
7 changed files with 172 additions and 1 deletions
32
api/src/main/java/dev/plex/messaging/MessageData.java
Normal file
32
api/src/main/java/dev/plex/messaging/MessageData.java
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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 ->
|
||||
{
|
||||
|
|
48
server/src/main/java/dev/plex/command/impl/MessageCMD.java
Normal file
48
server/src/main/java/dev/plex/command/impl/MessageCMD.java
Normal 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);
|
||||
}
|
||||
}
|
55
server/src/main/java/dev/plex/command/impl/ReplyCMD.java
Normal file
55
server/src/main/java/dev/plex/command/impl/ReplyCMD.java
Normal 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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
Loading…
Reference in a new issue