aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hype/bbsentials/chat
diff options
context:
space:
mode:
authorHacktheTime <l4bg0jb7@duck.com>2023-10-12 20:17:28 +0200
committerHacktheTime <l4bg0jb7@duck.com>2023-10-12 20:17:28 +0200
commitdba4a297e295d68980da31264b0069fe9b18a13e (patch)
treec7e0a99968ef34509037f969ab7b1beba04a996d /src/main/java/de/hype/bbsentials/chat
parente111619d66346a2309b86a00420681f4cddf3cea (diff)
downloadBBsentials-dba4a297e295d68980da31264b0069fe9b18a13e.tar.gz
BBsentials-dba4a297e295d68980da31264b0069fe9b18a13e.tar.bz2
BBsentials-dba4a297e295d68980da31264b0069fe9b18a13e.zip
preperations to have a common code and different implementations for forge and fabric to ease up maintaining both versions
Diffstat (limited to 'src/main/java/de/hype/bbsentials/chat')
-rw-r--r--src/main/java/de/hype/bbsentials/chat/Chat.java466
-rw-r--r--src/main/java/de/hype/bbsentials/chat/Message.java117
-rw-r--r--src/main/java/de/hype/bbsentials/chat/Sender.java106
3 files changed, 0 insertions, 689 deletions
diff --git a/src/main/java/de/hype/bbsentials/chat/Chat.java b/src/main/java/de/hype/bbsentials/chat/Chat.java
deleted file mode 100644
index ac5f892..0000000
--- a/src/main/java/de/hype/bbsentials/chat/Chat.java
+++ /dev/null
@@ -1,466 +0,0 @@
-package de.hype.bbsentials.chat;
-
-import de.hype.bbsentials.client.BBsentials;
-import de.hype.bbsentials.client.Config;
-import de.hype.bbsentials.packets.packets.SplashUpdatePacket;
-import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
-import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.text.Text;
-import net.minecraft.util.Formatting;
-
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Modifier;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static de.hype.bbsentials.client.BBsentials.*;
-
-public class Chat {
- public Chat() {
- init();
- }
-
- public static String[] getVariableInfo(String packageName, String className) {
- List<String> variableInfoList = new ArrayList<>();
-
- // Combine the class name with the package name
- String fullClassName = packageName + "." + className;
-
- // Load the class
- Class<?> clazz = null;
- try {
- clazz = Class.forName(fullClassName);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
-
- // Extract fields of the class
- Field[] fields = clazz.getDeclaredFields();
-
- // Collect information for each field
- for (Field field : fields) {
- // Exclude transient fields
- if (java.lang.reflect.Modifier.isTransient(field.getModifiers())) {
- continue;
- }
- String variableName = field.getName();
- String variablePackageName = clazz.getPackage().getName();
- String variableClassName = clazz.getSimpleName();
-
- variableInfoList.add(variableName);
- }
-
- return variableInfoList.toArray(new String[variableInfoList.size()]);
- }
-
- public static void setVariableValue(Object obj, String variableName, String value) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
- if (value == null) {
- // Handle null value case
- sendPrivateMessageToSelfError("Invalid value: null");
- return;
- }
-
- Class<?> objClass = obj.getClass();
- Field field = objClass.getDeclaredField(variableName);
- field.setAccessible(true);
-
- // Get the type of the field
- Class<?> fieldType = field.getType();
-
- // Convert the value to the appropriate type
- Object convertedValue = parseValue(value, fieldType);
-
- if (Modifier.isStatic(field.getModifiers())) {
- // If the field is static
- field.set(null, convertedValue);
- }
- else {
- field.set(obj, convertedValue);
- }
-
- // Check and output the value of the variable
- sendPrivateMessageToSelfSuccess("The variable " + field.getName() + " is now: " + field.get(obj));
- }
-
- private static Object parseValue(String value, Class<?> targetType) {
- if (targetType == int.class || targetType == Integer.class) {
- return Integer.parseInt(value);
- }
- else if (targetType == double.class || targetType == Double.class) {
- return Double.parseDouble(value);
- }
- else if (targetType == float.class || targetType == Float.class) {
- return Float.parseFloat(value);
- }
- else if (targetType == long.class || targetType == Long.class) {
- return Long.parseLong(value);
- }
- else if (targetType == boolean.class || targetType == Boolean.class) {
- return Boolean.parseBoolean(value);
- }
- else {
- // For other types, return the original string value
- return value;
- }
- }
-
- public static void getVariableValue(Object object, String variableName) throws NoSuchFieldException, IllegalAccessException {
- Class<?> objClass = object.getClass();
- Field field = objClass.getDeclaredField(variableName);
- field.setAccessible(true);
- sendPrivateMessageToSelfSuccess("The variable " + field.getName() + " is: " + field.get(object));
- }
-
- private void init() {
- // Register a callback for a custom message type
- ClientReceiveMessageEvents.CHAT.register((message, signedMessage, sender, params, receptionTimestamp) -> {
- onEvent(message);
- });
- ClientReceiveMessageEvents.MODIFY_GAME.register((message, overlay) -> (onEvent(message)));
- ClientSendMessageEvents.CHAT.register(message -> {
- if (message.startsWith("/")) {
- System.out.println("Sent command: " + message);
- }
- });
- }
-
- private Text onEvent(Text text) {
- if (!isSpam(text.toString())) {
- if (getConfig().isDetailedDevModeEnabled()) {
- System.out.println("got a message: " + Text.Serializer.toJson(text));
- }
- Message message = new Message(text);
- executionService.execute(() -> processThreaded(message));
- return processNotThreaded(message);
- }
- return text; // Return the original message if it is spam
- }
-
- //Handle in the messages which need to be modified here
- public Text processNotThreaded(Message message) {
-// if (message.isFromParty()) {
-// message.replaceInJson("\"action\":\"run_command\",\"value\":\"/viewprofile", "\"action\":\"run_command\",\"value\":\"/bviewprofile " + messageUnformatted.split(">", 1)[1].trim());
-// }
- if (message.isFromReportedUser()) {
- sendPrivateMessageToSelfBase(Formatting.RED + "B: " + message.getUnformattedString());
- return null;
- }
- if (config.doPartyChatCustomMenu && message.isFromParty()) {
- message.replaceInJson("/viewprofile \\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}", "/socialoptions party " + message.getPlayerName() + " " + message.getUnformattedString());
- }
- else if (config.doGuildChatCustomMenu && message.isFromGuild()) {
- message.replaceInJson("/viewprofile \\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}", "/socialoptions guild " + message.getPlayerName() + " " + message.getUnformattedString());
- }
- else if (config.doAllChatCustomMenu) {
- System.out.println("User: '" + message.getPlayerName() + "' | Message: " + message.getUnformattedString());
- message.replaceInJson("/socialoptions " + message.getPlayerName(), "/socialoptions sb " + message.getPlayerName() + " " + message.getUnformattedString());
- }
-
- return message.text;
- }
-
- public void processThreaded(Message message) {
- if (message.getString() != null) {
- String messageUnformatted = message.getUnformattedString();
- String username = message.getPlayerName();
- if (message.isFromReportedUser()) {
-
- }
- else if (!MinecraftClient.getInstance().isWindowFocused()) {
- if (config.doDesktopNotifications) {
- if ((messageUnformatted.endsWith("is visiting Your Garden !") || messageUnformatted.endsWith("is visiting Your Island !")) && !MinecraftClient.getInstance().isWindowFocused() && config.doDesktopNotifications) {
- sendNotification("BBsentials Visit-Watcher", messageUnformatted);
- }
- else if (message.isMsg()) {
- sendNotification("BBsentials Message Notifier", username + " sent you the following message: " + message.getMessageContent());
- }
- if (message.getMessageContent().toLowerCase().contains(getConfig().getUsername().toLowerCase()) || (message.getMessageContent().toLowerCase().contains(getConfig().getNickname().toLowerCase() + " ") && getConfig().getNotifForParty().toLowerCase().equals("nick")) || getConfig().getNotifForParty().toLowerCase().equals("all")) {
- sendNotification("BBsentials Party Chat Notification", username + " : " + message.getMessageContent());
- }
- else {
- if (message.getMessageContent().toLowerCase().contains(getConfig().getUsername().toLowerCase()) || message.getMessageContent().toLowerCase().contains(config.getNickname().toLowerCase() + " ")) {
- sendNotification("BBsentials Notifier", "You got mentioned in chat! " + message.getMessageContent());
- }
- }
- }
- }
- else if (message.isServerMessage()) {
- if (messageUnformatted.contains("disbanded the party")) {
- lastPartyDisbandedUsername = username;
- partyDisbandedMap.put(username, Instant.now());
- }
- else if (message.contains("invited you to join their party")) {
- if (lastPartyDisbandedUsername != null && partyDisbandedMap != null) {
- Instant lastDisbandedInstant = partyDisbandedMap.get(lastPartyDisbandedUsername);
- if (config.acceptReparty) {
- if (lastDisbandedInstant != null && lastDisbandedInstant.isAfter(Instant.now().minusSeconds(20)) && (username.equals(lastPartyDisbandedUsername))) {
- sendCommand("/p accept " + username);
- }
- }
- }
- if (!MinecraftClient.getInstance().isWindowFocused()) {
- sendNotification("BBsentials Party Notifier", "You got invited too a party by: " + username);
- }
- }
- else if (message.startsWith("Party Members (")) {
- Config.partyMembers = new ArrayList<>();
- }
- else if (message.startsWith("Party Moderators:")) {
- String temp = messageUnformatted.replace("Party Moderators:", "").replace(" ●", "").replaceAll("\\s*\\[[^\\]]+\\]", "").trim();
- if (temp.contains(",")) {
- for (int i = 0; i < temp.split(",").length; i++) {
- Config.partyMembers.add(temp.split(",")[i - 1]);
- }
- }
- else {
- Config.partyMembers.add(temp);
- }
- }
- else if (message.startsWith("Party Members:")) {
- String temp = messageUnformatted.replace("Party Members:", "").replace(" ●", "").replaceAll("\\s*\\[[^\\]]+\\]", "").trim();
- if (temp.contains(",")) {
- for (int i = 0; i < temp.split(",").length; i++) {
- System.out.println("Added to plist: " + (temp.split(",")[i - 1]));
- Config.partyMembers.add(temp.split(",")[i - 1]);
- }
- }
- else {
- Config.partyMembers.add(temp);
- }
- }
- else if ((message.contains("Party Leader:") && !message.contains(getConfig().getUsername())) || message.equals("You are not currently in a party.") || (message.contains("warped the party into a Skyblock Dungeon") && !message.startsWith(getConfig().getUsername()) || (!message.startsWith("The party was transferred to " + getConfig().getUsername()) && message.startsWith("The party was transferred to"))) || messageUnformatted.endsWith(getConfig().getUsername() + " is now a Party Moderator") || (message.startsWith("The party was disbanded")) || (message.contains("You have joined ") && message.contains("'s party!")) || (message.contains("Party Leader, ") && message.contains(" , summoned you to their server.")) || (message.contains("warped to your dungeon"))) {
- BBsentials.getConfig().setIsLeader(false);
- if (getConfig().isDetailedDevModeEnabled()) {
- sendPrivateMessageToSelfDebug("Leader: " + getConfig().isLeader());
- }
- }
- else if (config.getPlayersInParty().length == 0 && messageUnformatted.endsWith("to the party! They have 60 seconds to accept")) {
- config.setIsLeader(true);
- }
- else if (messageUnformatted.startsWith("You'll be partying with:")) {
- List<String> members = new ArrayList<>();
- for (String users : messageUnformatted.replace("You'll be partying with:", "").replaceAll("\\[[^\\]]*\\]","").trim().split(",")) {
- if (users.contains("and ")){break;}
- members.add(users);
- }
- Config.partyMembers=members;
- }
- else if (((messageUnformatted.startsWith("Party Leader: ") && messageUnformatted.endsWith(getConfig().getUsername() + " ●"))) || (message.contains(getConfig().getUsername() + " warped the party to a SkyBlock dungeon!")) || message.startsWith("The party was transferred to " + getConfig().getUsername()) || message.getUnformattedString().endsWith(" has promoted " + getConfig().getUsername() + " to Party Leader") || (message.contains("warped to your dungeon"))) {
- BBsentials.getConfig().setIsLeader(true);
- if (getConfig().isDetailedDevModeEnabled()) {
- sendPrivateMessageToSelfDebug("Leader: " + getConfig().isLeader());
- }
- }
- else if (message.getUnformattedString().equals("Please type /report confirm to log your report for staff review.")) {
- sendCommand("/report confirm");
- }
- else if (messageUnformatted.startsWith("BUFF! You splashed yourself with")) {
- if (splashStatusUpdateListener != null) {
- splashStatusUpdateListener.setStatus(SplashUpdatePacket.STATUS_SPLASHING);
- }
- }
- }
-
- else if (message.isFromGuild()) {
-
- }
- else if (message.isFromParty()) {
-
- }
- else if (message.isMsg()) {
- if (messageUnformatted.endsWith("bb:party me")) {
- if (BBsentials.getConfig().allowBBinviteMe()) {
- sendCommand("/p " + username);
- }
- }
- }
- else {
- if (message.contains("[OPEN MENU]") || message.contains("[YES]")) {
- setChatPromtId(message.getText().toString());
- }
- }
- }
- }
-
- //{"strikethrough":false,"extra":[{"strikethrough":false,"clickEvent":{"action":"run_command","value":"/viewprofile 4fa1228c-8dd6-47c4-8fe3-b04b580311b8"},"hoverEvent":{"action":"show_text","contents":{"strikethrough":false,"text":"§eClick here to view §bHype_the_Time§e's profile"}},"text":"§9Party §8> §b[MVP§2+§b] Hype_the_Time§f: "},{"bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false,"text":"h:test"}],"text":""}// {"strikethrough":false,"extra":[{"strikethrough":false,"clickEvent":{"action":"run_command","value":"/viewprofile f772b2c7-bd2a-46e1-b1a2-41fa561157d6"},"hoverEvent":{"action":"show_text","contents":{"strikethrough":false,"text":"§eClick here to view §bShourtu§e's profile"}},"text":"§9Party §8> §b[MVP§c+§b] Shourtu§f: "},{"bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false,"text":"Hype_the_Time TEST"}],"text":""}
- //{"strikethrough":false,"extra":[{"strikethrough":false,"clickEvent":{"action":"run_command","value":"/viewprofile 4fa1228c-8dd6-47c4-8fe3-b04b580311b8"},"hoverEvent":{"action":"show_text","contents":{"strikethrough":false,"text":"§eClick here to view §bHype_the_Time§e's profile"}},"text":"§9Party §8> §b[MVP§2+§b] Hype_the_Time§f: "},{"bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false,"text":"h:test"}],"text":""}
- private final Map<String, Instant> partyDisbandedMap = new HashMap<>();
- private String lastPartyDisbandedUsername = null;
-
-
- public boolean isSpam(String message) {
- if (message.contains("Mana")) return true;
- if (message.contains("Status")) return true;
- if (message.contains("Achievement Points")) return true;
- return false;
- }
-
- public String test() {
- //put test code here
- sendNotification("test", "This is an example which was run of the h:test test");
- return new String();
- }
-
- public static void sendPrivateMessageToSelfError(String message) {
- sendPrivateMessageToSelfBase(Formatting.RED + message);
- }
-
- public static void sendPrivateMessageToSelfFatal(String message) {
- sendPrivateMessageToSelfBase(Formatting.DARK_RED + message);
- }
-
- public static void sendPrivateMessageToSelfSuccess(String message) {
- sendPrivateMessageToSelfBase(Formatting.GREEN + message);
- }
-
- public static void sendPrivateMessageToSelfInfo(String message) {
- sendPrivateMessageToSelfBase(Formatting.YELLOW + message);
- }
-
- public static void sendPrivateMessageToSelfImportantInfo(String message) {
- sendPrivateMessageToSelfBase(Formatting.GOLD + message);
- }
-
- public static void sendPrivateMessageToSelfDebug(String message) {
- sendPrivateMessageToSelfBase(Formatting.AQUA + message);
- }
-
- private static void sendPrivateMessageToSelfBase(String message) {
- MinecraftClient client = MinecraftClient.getInstance();
- if (client.player != null) {
- client.player.sendMessage(Text.of(Formatting.RED + message));
- }
- }
-
- public static void sendPrivateMessageToSelfText(Text message) {
- MinecraftClient client = MinecraftClient.getInstance();
- if (client.player != null) {
- client.player.sendMessage(message);
- }
- }
-
- public static void sendCommand(String s) {
- getConfig().sender.addSendTask(s);
- }
-
- public void sendNotification(String title, String text) {
- executionService.execute(() -> {
- try {
- InputStream inputStream = getClass().getResourceAsStream("/sounds/mixkit-sci-fi-confirmation-914.wav");
- AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputStream);
- Clip clip = AudioSystem.getClip();
- clip.open(audioInputStream);
- clip.start();
- Thread.sleep(clip.getMicrosecondLength() / 1000);
- clip.close();
- audioInputStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- });
- List<String> argsList = new ArrayList<>();
- argsList.add("--title");
- argsList.add(title);
- argsList.add("--passivepopup");
- argsList.add(text);
- argsList.add("5");
-
- try {
- ProcessBuilder processBuilder = new ProcessBuilder();
- processBuilder.command("kdialog");
- processBuilder.command().addAll(argsList);
-
- Process process = processBuilder.start();
- process.waitFor();
- } catch (IOException | InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- public static Text createClientSideTellraw(String tellrawInput) {
- Text formattedMessage = null;
- try {
- formattedMessage = Text.Serializer.fromJson(tellrawInput);
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("Invalid Json: \n" + tellrawInput);
- }
- return formattedMessage;
- }
-
- public static void setChatPromtId(String logMessage) {
- String cbUUIDPattern = "/cb ([a-fA-F0-9-]+)";
- Pattern cbPattern = Pattern.compile(cbUUIDPattern);
- Matcher cbMatcher = cbPattern.matcher(logMessage);
-
- String yesClickAction = "/chatprompt ([a-fA-F0-9-]+) YES";
- Pattern yesPattern = Pattern.compile(yesClickAction);
- Matcher yesMatcher = yesPattern.matcher(logMessage);
- String lastPrompt = null;
- if (cbMatcher.find()) {
- lastPrompt = cbMatcher.group(1);
- String finalLastPrompt1 = lastPrompt;
- new Thread(new Runnable() {
- @Override
- public void run() {
- String promptCommand = "/cb " + finalLastPrompt1;
- BBsentials.getConfig().setLastChatPromptAnswer(promptCommand);
- if (config.isDevModeEnabled()) {
- Chat.sendPrivateMessageToSelfDebug("set the last prompt action too + \"" + promptCommand + "\"");
- }
- try {
- Thread.sleep(10 * 1000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- BBsentials.getConfig().setLastChatPromptAnswer(null);
- return;
- }
- }).start();
- }
- if (yesMatcher.find()) {
- lastPrompt = yesMatcher.group(1);
- String finalLastPrompt = lastPrompt;
- new Thread(new Runnable() {
- @Override
- public void run() {
- String promptCommand = "/chatprompt " + finalLastPrompt + " YES";
- getConfig().setLastChatPromptAnswer(promptCommand);
- if (config.isDevModeEnabled()) {
- Chat.sendPrivateMessageToSelfDebug("set the last prompt action too + \"" + promptCommand + "\"");
- }
- try {
- Thread.sleep(10 * 1000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- getConfig().setLastChatPromptAnswer(null);
- return;
- }
- }).start();
-
- }
- }
-
- public static Text replaceAllForText(Text input, String replace, String replaceWith) {
- String text = Text.Serializer.toJson(input);
- if (text.contains(replace)) {
- text = text.replaceAll("\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}", "");
- }
- text = text.replace(replace, replaceWith);
- Text output = Text.Serializer.fromJson(text);
- return output;
- }
-}
diff --git a/src/main/java/de/hype/bbsentials/chat/Message.java b/src/main/java/de/hype/bbsentials/chat/Message.java
deleted file mode 100644
index 42d1b2e..0000000
--- a/src/main/java/de/hype/bbsentials/chat/Message.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package de.hype.bbsentials.chat;
-
-import de.hype.bbsentials.client.BBsentials;
-import net.minecraft.text.Text;
-
-public class Message {
- public Text text;
- private String unformattedString = null;
- private String playerName = null;
-
- public Message(Text text) {
- this.text = text;
- }
-
- public Text getText() {
- return text;
- }
-
- public String getString() {
- return text.getString();
- }
-
- public String getUnformattedString() {
- if (unformattedString != null) return unformattedString;
- unformattedString = text.getString().replaceAll("§.", "").trim();
- return unformattedString;
- }
-
- public String getMessageContent() {
- if (isServerMessage()) return unformattedString;
- return getUnformattedString().split(":", 2)[1];
- }
-
- Boolean guild = null;
-
- public boolean isFromGuild() {
- if (guild != null) return guild;
- guild = getUnformattedString().startsWith("Guild >");
- return guild;
- }
-
- Boolean party = null;
-
- public boolean isFromParty() {
- if (party != null) return party;
- party = getUnformattedString().startsWith("Party >");
- return party;
- }
-
- Boolean msg = null;
-
- public boolean isMsg() {
- if (msg != null) return msg;
- msg = getUnformattedString().startsWith("From") || getUnformattedString().startsWith("To");
- return msg;
- }
-
- Boolean server = null;
-
- public boolean isServerMessage() {
- if (server != null) return server;
- int space = getUnformattedString().indexOf(" ");
- int doublepoint = getUnformattedString().indexOf(":");
- return ((space + 2 < doublepoint)||doublepoint==-1||space==-1);
- }
-
- public String getPlayerName() {
- if (playerName != null) return playerName;
- playerName = getUnformattedString();
- if (!playerName.contains(":")) {
- playerName = "";
- return "";
- }
- playerName = playerName.split(":", 2)[0];
- if (isMsg()) {
- playerName = playerName.replaceFirst("From", "").replace("To", "").trim();
- }
- if (playerName.contains(">")){
- playerName=playerName.split(">",2)[1];
- }
-// playerName = playerName.replaceFirst("\\[[^\\]]*\\](?:\\s?[^\\x00-\\x7F]?\\s?\\[[^\\]]*\\])*", "").trim()// replaces every [] and unicode character before a asci character.
- playerName = playerName.replaceAll("[^\\x00-\\x7F]","").replaceAll("\\[[^\\]]*\\]","").trim();
- if (playerName.matches("[^a-zA-Z0-9_-]+")) playerName = "";
- return playerName;
- }
-
- public void replaceInJson(String replace, String replaceWith) {
- String textString = toJson();
- textString = textString.replaceFirst(replace, replaceWith);
- text = Text.Serializer.fromJson(textString);
- }
-
- public static Message fromJson(String json) {
- return new Message(Text.Serializer.fromJson(json));
- }
-
- public String toJson() {
- return Text.Serializer.toJson(text);
- }
-
- public boolean isFromReportedUser() {
- return BBsentials.config.alreadyReported.contains(getPlayerName()) && !getPlayerName().isEmpty();
- }
-
- public boolean contains(String string) {
- return getUnformattedString().contains(string);
- }
-
- public boolean startsWith(String string) {
- return getUnformattedString().startsWith(string);
- }
-
- @Override
- public String toString() {
- return getUnformattedString();
- }
-}
diff --git a/src/main/java/de/hype/bbsentials/chat/Sender.java b/src/main/java/de/hype/bbsentials/chat/Sender.java
deleted file mode 100644
index eef2469..0000000
--- a/src/main/java/de/hype/bbsentials/chat/Sender.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package de.hype.bbsentials.chat;
-
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.text.Text;
-import net.minecraft.util.Formatting;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static de.hype.bbsentials.chat.Chat.sendPrivateMessageToSelfInfo;
-import static de.hype.bbsentials.chat.Chat.sendPrivateMessageToSelfText;
-
-public class Sender {
- private final List<String> sendQueue;
- private final List<Double> sendQueueTiming;
- private final List<Boolean> hidden;
-
-
- public Sender() {
- this.sendQueue = new ArrayList<>();
- this.sendQueueTiming = new ArrayList<>();
- this.hidden = new ArrayList<>();
- startSendingThread();
- }
-
- public void addSendTask(String task, double timing) {
- synchronized (sendQueue) {
- sendPrivateMessageToSelfText(Text.literal(Formatting.GREEN + "Scheduled send-task (as " + sendQueueTiming.size() + " in line): " + task + " | Delay: " + timing));
- sendQueueTiming.add(timing);
- sendQueue.add(task);
- hidden.add(false);
- sendQueue.notify(); // Notify the waiting thread that a new String has been added
- }
- }
-
- public void addHiddenSendTask(String task, double timing) {
- synchronized (sendQueue) {
- sendQueueTiming.add(timing);
- sendQueue.add(task);
- hidden.add(true);
-
- sendQueue.notify(); // Notify the waiting thread that a new String has been added
- }
- }
-
- public void addImmediateSendTask(String task) {
- synchronized (sendQueue) {
- sendQueueTiming.add(0, 0.0);
- sendQueue.add(0, task);
- hidden.add(false);
-
- sendQueue.notify(); // Notify the waiting thread that a new String has been added
- }
- }
-
- public void addSendTask(String task) {
- addSendTask(task, 1);
- }
-
- public void startSendingThread() {
- Thread sendingThread = new Thread(new SendingRunnable());
- sendingThread.start();
- }
-
- private class SendingRunnable implements Runnable {
- @Override
- public void run() {
- while (true) {
- String task = getNextTask();
- if (task != null) {
- send(task, sendQueueTiming.remove(0), hidden.remove(0));
- }
- else {
- synchronized (sendQueue) {
- try {
- sendQueue.wait(); // Wait for new Send
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- }
- }
-
- private String getNextTask() {
- synchronized (sendQueue) {
- if (!sendQueue.isEmpty()) {
- return sendQueue.remove(0);
- }
- return null;
- }
- }
-
- private void send(String toSend, double timing, boolean hidden) {
- try {
- Thread.sleep((long) (timing * 1000)); // Simulate the send operation
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- MinecraftClient.getInstance().getNetworkHandler().sendChatMessage(toSend);
- if (!hidden) {
- sendPrivateMessageToSelfInfo("Sent Command to Server: " + toSend);
- }
- }
- }
-}