Skip to content

Commit

Permalink
added /msg and /reply commands
Browse files Browse the repository at this point in the history
  • Loading branch information
NonSwag committed Jul 17, 2024
1 parent 96d2387 commit cac13ef
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 2 deletions.
6 changes: 6 additions & 0 deletions src/main/java/net/thenextlvl/tweaks/TweaksPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,22 @@
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.util.Locale;
import java.util.Map;
import java.util.WeakHashMap;

@Getter
@Accessors(fluent = true)
@FieldsAreNotNullByDefault
public class TweaksPlugin extends JavaPlugin {
private final Metrics metrics = new Metrics(this, 19651);
private final Map<CommandSender, CommandSender> conversations = new WeakHashMap<>();

private final FileIO<TweaksConfig> configFile = new GsonFile<>(
IO.of(getDataFolder(), "config.json"), new TweaksConfig(
Expand Down Expand Up @@ -110,6 +114,8 @@ private void registerCommands() {
registerCommand(new PingCommand(this));
registerCommand(new BackCommand(this));
registerCommand(new SeenCommand(this));
registerCommand(new ReplyCommand(this));
registerCommand(new MessageCommand(this));
registerCommand(new InventoryCommand(this));
registerCommand(new EnderChestCommand(this));
registerCommand(new SpeedCommand(this));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package net.thenextlvl.tweaks.command.player;

import lombok.RequiredArgsConstructor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.thenextlvl.tweaks.TweaksPlugin;
import net.thenextlvl.tweaks.command.api.CommandInfo;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@CommandInfo(
name = "msg",
aliases = {"tell", "w"},
usage = "/msg [player] [message]",
description = "start a conversation with another player",
permission = "tweaks.command.msg"
)
@RequiredArgsConstructor
public class MessageCommand implements TabExecutor {
private final TweaksPlugin plugin;

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length < 2) {
plugin.bundle().sendMessage(sender, "command.usage.msg");
return true;
}
var player = Bukkit.getPlayer(args[0]);
if (player == null) {
plugin.bundle().sendMessage(sender, "player.not.online", Placeholder.parsed("player", args[0]));
return true;
}
if (player.equals(sender)) {
plugin.bundle().sendMessage(sender, "message.self");
return true;
}
message(plugin, Arrays.copyOfRange(args, 1, args.length), sender, player);
return true;
}

static void message(TweaksPlugin plugin, String[] args, CommandSender source, CommandSender target) {
var sender = Placeholder.parsed("sender", source.getName());
var receiver = Placeholder.parsed("receiver", target.getName());
var message = Placeholder.parsed("message", String.join(" ", args));
plugin.bundle().sendMessage(source, "message.out", receiver, sender, message);
plugin.bundle().sendMessage(target, "message.in", receiver, sender, message);
plugin.conversations().put(target, source);
}

@Override
public @Nullable List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
return args.length <= 1 ? Bukkit.getOnlinePlayers().stream()
.filter(all -> !all.equals(sender))
.map(Player::getName)
.filter(s -> s.contains(args[args.length - 1]))
.toList() : Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package net.thenextlvl.tweaks.command.player;

import lombok.RequiredArgsConstructor;
import net.thenextlvl.tweaks.TweaksPlugin;
import net.thenextlvl.tweaks.command.api.CommandInfo;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

@CommandInfo(
name = "reply",
aliases = "r",
usage = "/reply [message]",
description = "reply to the player you last chatted with",
permission = "tweaks.command.reply"
)
@RequiredArgsConstructor
public class ReplyCommand implements CommandExecutor {
private final TweaksPlugin plugin;

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length < 1) {
plugin.bundle().sendMessage(sender, "command.usage.reply");
return true;
}
var player = plugin.conversations().get(sender);
if (player == null) {
plugin.bundle().sendMessage(sender, "conversation.running");
return true;
}
MessageCommand.message(plugin, args, sender, player);
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;

import java.util.ArrayList;
import java.util.Map;

@RequiredArgsConstructor
public class ConnectionListener implements Listener {
private final TweaksPlugin plugin;
Expand All @@ -31,4 +34,12 @@ public void onQuit(PlayerQuitEvent event) {
Placeholder.parsed("player", event.getPlayer().getName())));
event.quitMessage(null);
}

@EventHandler(priority = EventPriority.MONITOR)
public void cleanup(PlayerQuitEvent event) {
new ArrayList<>(plugin.conversations().entrySet()).stream()
.filter(entry -> entry.getValue().equals(event.getPlayer()))
.map(Map.Entry::getKey)
.forEach(plugin.conversations()::remove);
}
}
8 changes: 7 additions & 1 deletion src/main/resources/tweaks.properties
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,10 @@ broadcast.format=<red>Server <gray>| <message>
broadcast.footer=<reset>
motd.changed=<prefix> <white>Changed motd to <green><motd>
chat.format=<delete><player_prefix><click:suggest_command:'/msg <player> '><player><reset> <dark_gray>» <reset><click:copy_to_clipboard:'<message_content>'><hover:show_text:'<lang:chat.copy.click>'><message>
chat.format.delete=<hover:show_text:'Click to delete this message'><dark_gray>[<dark_red><bold>x</bold><dark_gray>] <reset>
chat.format.delete=<hover:show_text:'Click to delete this message'><dark_gray>[<dark_red><bold>x</bold><dark_gray>] <reset>
command.usage.msg=<prefix> <red>/msg <dark_gray>[<gold>player<dark_gray>] <dark_gray>[<gold>message<dark_gray>]
command.usage.reply=<prefix> <red>/reply <dark_gray>[<gold>message<dark_gray>]
message.out=<italic><gray>You <dark_gray>-> <gray><receiver> <dark_gray>» <gray><message>
message.in=<italic><gray><hover:show_text:'Click to reply'><click:suggest_command:'/msg <sender> '><sender></click></hover> <dark_gray>-> <gray>You <dark_gray>» <gray><hover:show_text:'<lang:chat.copy.click>'><click:copy_to_clipboard:'<message>'><message>
message.self=<prefix> <red>You can't message yourself
conversation.running=<prefix> <red>You have no running conversation
6 changes: 5 additions & 1 deletion src/main/resources/tweaks_german.properties
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,8 @@ god.active.others=<prefix> <green><player> <white>ist jetzt unverwundbar
god.inactive.self=<prefix> <white>Du bist nicht länger unverwundbar
god.inactive.others=<prefix> <green><player> <white>ist nicht länger unverwundbar
chat.format.delete=<hover:show_text:'Klicke um diese Nachricht zu löschen'><dark_gray>[<dark_red><bold>x</bold><dark_gray>] <reset>
motd.changed=<prefix> <white>Die motd ist jetzt <green><motd>
motd.changed=<prefix> <white>Die motd ist jetzt <green><motd>
message.out=<italic><gray>Du <dark_gray>-> <gray><receiver> <dark_gray>» <gray><message>
message.in=<italic><gray><hover:show_text:'Klicke um zu Antworten'><click:suggest_command:'/msg <sender> '><sender></click></hover> <dark_gray>-> <gray>Dir <dark_gray>» <gray><hover:show_text:'<lang:chat.copy.click>'><click:copy_to_clipboard:'<message>'><message>
message.self=<prefix> <red>Du kannst dir nicht selber schreiben
conversation.running=<prefix> <red>Du hast keine laufende Konversation

0 comments on commit cac13ef

Please sign in to comment.