
All checks were successful
/ deploy (push) Successful in 1m20s
Also: Removed login "Chat room:" notice Removed "Joined chat room:" on command The room in "has left the chat room" is now correct Removed prefix from global Fixed double kill message
196 lines
9.5 KiB
Java
196 lines
9.5 KiB
Java
/*
|
|
* Copyright (C) 2024 Minecon724
|
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
|
* in the project root for the full license text.
|
|
*/
|
|
|
|
package eu.m724.tweaks.chat;
|
|
|
|
import eu.m724.tweaks.Language;
|
|
import net.md_5.bungee.api.ChatColor;
|
|
import net.md_5.bungee.api.chat.BaseComponent;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Arrays;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class ChatCommands implements CommandExecutor {
|
|
private final ChatManager manager;
|
|
|
|
public ChatCommands(ChatManager manager) {
|
|
this.manager = manager;
|
|
}
|
|
|
|
@Override
|
|
public boolean onCommand(@NotNull CommandSender sender, Command command, @NotNull String label, String[] args) {
|
|
if (command.getName().equals("chat")) {
|
|
Player player = (Player) sender;
|
|
ChatRoom chatRoom = manager.getPlayerChatRoom(player);
|
|
|
|
if (args.length == 0) { // show room
|
|
player.spigot().sendMessage(chatRoom.getInfoComponent());
|
|
} else { // join room
|
|
String id = args[0];
|
|
|
|
if (id.equals(chatRoom.id)) {
|
|
sender.spigot().sendMessage(Language.getComponent("chatAlreadyHere", ChatColor.GRAY));
|
|
return true;
|
|
}
|
|
|
|
String password = null;
|
|
if (args.length > 1) {
|
|
password = Arrays.stream(args).skip(1).collect(Collectors.joining(" "));
|
|
}
|
|
|
|
boolean authenticated = false;
|
|
BaseComponent component = null;
|
|
ChatRoom newRoom = manager.getById(id);
|
|
if (newRoom != null) {
|
|
if (newRoom.password != null) {
|
|
if (newRoom.password.equals(password)) {
|
|
authenticated = true;
|
|
} else if (password == null) {
|
|
component = Language.getComponent("chatPasswordProtected", ChatColor.RED);
|
|
} else {
|
|
component = Language.getComponent("chatWrongPassword", ChatColor.RED);
|
|
}
|
|
} else {
|
|
authenticated = true;
|
|
}
|
|
} else {
|
|
component = Language.getComponent("chatNoSuchRoom", ChatColor.RED, id);
|
|
}
|
|
|
|
if (authenticated) {
|
|
/*component = new ComponentBuilder(Language.getComponent("chatJoined", ChatColor.GOLD))
|
|
.append(" ")
|
|
.append(ChatFormatUtils.formatChatRoom(chatRoom)).color(newRoom.color)
|
|
.build();*/
|
|
player.sendMessage("");
|
|
manager.setPlayerChatRoom(newRoom, player);
|
|
} else {
|
|
player.spigot().sendMessage(component);
|
|
}
|
|
|
|
}
|
|
} else if (command.getName().equals("chatmanage")) {
|
|
Player player = (Player) sender;
|
|
ChatRoom chatRoom = manager.getPlayerChatRoom(player);
|
|
boolean isOwner = player.equals(chatRoom.owner);
|
|
|
|
if (args.length > 1) {
|
|
String action = args[0];
|
|
String argument = args[1];
|
|
|
|
switch (action) {
|
|
case "create" -> {
|
|
try {
|
|
ChatRoom newRoom = manager.createChatRoom(argument, null, player);
|
|
sender.sendMessage("Created a chat room. Join it: /c " + newRoom.id);
|
|
sender.sendMessage("You might also want to protect it with a password: /cm setpassword");
|
|
} catch (ChatManager.InvalidIdException e) {
|
|
sender.sendMessage("ID is invalid: " + e.getMessage());
|
|
} catch (ChatManager.ChatRoomExistsException e) {
|
|
sender.sendMessage("Room %s already exists".formatted(argument));
|
|
} catch (IOException e) {
|
|
sender.sendMessage("Failed to create room");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
case "delete" -> {
|
|
if (argument.equals(chatRoom.id)) {
|
|
if (isOwner) {
|
|
manager.deleteChatRoom(chatRoom);
|
|
sender.sendMessage("Room %s deleted".formatted(chatRoom.id));
|
|
} else {
|
|
sender.sendMessage("You're not the owner of %s, please enter the room you want to make changes in".formatted(chatRoom.id));
|
|
}
|
|
} else {
|
|
sender.sendMessage("Pass %s as an argument to confirm".formatted(chatRoom.id));
|
|
}
|
|
}
|
|
case "setowner" -> {
|
|
if (isOwner) {
|
|
Player newOwner = Bukkit.getPlayer(argument);
|
|
if (newOwner != null && newOwner.isOnline()) {
|
|
chatRoom.owner = newOwner;
|
|
try {
|
|
manager.saveChatRoom(chatRoom);
|
|
sender.sendMessage("Owner changed to " + newOwner.getName());
|
|
} catch (IOException e) {
|
|
sender.sendMessage("Failed to change owner");
|
|
e.printStackTrace();
|
|
}
|
|
} else {
|
|
sender.sendMessage("Player must be online");
|
|
}
|
|
} else {
|
|
sender.sendMessage("You're not the owner of %s, please enter the room you want to make changes in".formatted(chatRoom.id));
|
|
}
|
|
}
|
|
case "setpassword" -> {
|
|
if (isOwner) {
|
|
chatRoom.password = Arrays.stream(args).skip(1).collect(Collectors.joining(" "));
|
|
try {
|
|
manager.saveChatRoom(chatRoom);
|
|
sender.sendMessage("Password changed");
|
|
} catch (IOException e) {
|
|
sender.sendMessage("Failed to change password");
|
|
e.printStackTrace();
|
|
}
|
|
} else {
|
|
sender.sendMessage("You're not the owner of %s, please enter the room you want to make changes in".formatted(chatRoom.id));
|
|
}
|
|
}
|
|
case "setcolor" -> {
|
|
if (isOwner) {
|
|
ChatColor newColor = ChatColor.of(argument);
|
|
if (newColor != null) {
|
|
chatRoom.color = newColor;
|
|
try {
|
|
manager.saveChatRoom(chatRoom);
|
|
sender.sendMessage("Message color changed to " + newColor.getName());
|
|
} catch (IOException e) {
|
|
sender.sendMessage("Failed to change color");
|
|
e.printStackTrace();
|
|
}
|
|
} else {
|
|
sender.sendMessage("Invalid color");
|
|
}
|
|
} else {
|
|
sender.sendMessage("You're not the owner of %s, please enter the room you want to make changes in".formatted(chatRoom.id));
|
|
}
|
|
}
|
|
default -> {
|
|
sender.sendMessage("Actions: create, delete, setowner, setpassword, setcolor");
|
|
}
|
|
}
|
|
} else if (args.length > 0) {
|
|
switch (args[0]) {
|
|
case "create" ->
|
|
sender.sendMessage("Please pass a room name as an argument. The room name must be of characters and digits.");
|
|
case "delete" ->
|
|
sender.sendMessage("You want to delete room %s. Confirm by passing its name as an argument for this action.".formatted(chatRoom.id));
|
|
case "setowner" ->
|
|
sender.sendMessage("To transfer ownership of room %s, pass the new owner name as an argument for this action.".formatted(chatRoom.id));
|
|
case "setpassword" ->
|
|
sender.sendMessage("To change the password of room %s, pass the new password as an argument for this action.".formatted(chatRoom.id));
|
|
case "setcolor" ->
|
|
sender.sendMessage("To change the message color of room %s, pass the new color as an argument for this action. #hex or color name.".formatted(chatRoom.id));
|
|
default ->
|
|
sender.sendMessage("Actions: create, delete, setowner, setpassword, setcolor");
|
|
}
|
|
} else {
|
|
sender.sendMessage("Actions: create, delete, setowner, setpassword, setcolor");
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|