From 00732c91bd4b87954a85285292a90d32634ec053 Mon Sep 17 00:00:00 2001 From: HacktheTime Date: Sat, 14 Oct 2023 09:59:30 +0200 Subject: more changes --- .../de/hype/bbsentials/common/api/Discord.java | 70 +++ .../de/hype/bbsentials/common/api/Formatting.java | 36 ++ .../hype/bbsentials/common/api/ISimpleOption.java | 5 + .../java/de/hype/bbsentials/common/chat/Chat.java | 419 ++++++++++++++++ .../de/hype/bbsentials/common/chat/Message.java | 111 +++++ .../de/hype/bbsentials/common/chat/Sender.java | 105 ++++ .../hype/bbsentials/common/client/BBsentials.java | 89 ++++ .../common/client/Commands/Commands.java | 23 + .../de/hype/bbsentials/common/client/Config.java | 204 ++++++++ .../hype/bbsentials/common/client/CustomGson.java | 28 ++ .../hype/bbsentials/common/client/DebugThread.java | 20 + .../bbsentials/common/client/SplashManager.java | 58 +++ .../common/client/SplashStatusUpdateListener.java | 63 +++ .../bbsentials/common/client/ToDisplayConfig.java | 96 ++++ .../common/communication/BBsentialConnection.java | 550 +++++++++++++++++++++ .../common/constants/BBDisplayNameProvider.java | 23 + .../constants/BBDisplayNameProviderWithCustom.java | 6 + .../enviromentShared/AuthenticationConstants.java | 7 + .../constants/enviromentShared/ChChestItem.java | 46 ++ .../constants/enviromentShared/ChChestItems.java | 87 ++++ .../constants/enviromentShared/EnumUtils.java | 216 ++++++++ .../enviromentShared/InternalReasonConstants.java | 14 + .../common/constants/enviromentShared/Islands.java | 47 ++ .../constants/enviromentShared/MiningEvents.java | 39 ++ .../bbsentials/common/mclibraries/BBUtils.java | 21 + .../common/mclibraries/EnvironmentCore.java | 22 + .../hype/bbsentials/common/mclibraries/MCChat.java | 9 + .../bbsentials/common/mclibraries/MCCommand.java | 6 + .../bbsentials/common/mclibraries/MCUtils.java | 16 + .../bbsentials/common/mclibraries/Options.java | 8 + .../bbsentials/common/packets/AbstractPacket.java | 67 +++ .../common/packets/EnviromentPacketConfig.java | 7 + .../de/hype/bbsentials/common/packets/Packet.java | 26 + .../bbsentials/common/packets/PacketManager.java | 53 ++ .../bbsentials/common/packets/PacketUtils.java | 103 ++++ .../packets/packets/BingoChatMessagePacket.java | 25 + .../packets/packets/BroadcastMessagePacket.java | 18 + .../common/packets/packets/ChChestPacket.java | 23 + .../common/packets/packets/DisconnectPacket.java | 23 + .../packets/DisplayTellrawMessagePacket.java | 12 + .../packets/packets/InternalCommandPacket.java | 32 ++ .../packets/InvalidCommandFeedbackPacket.java | 24 + .../common/packets/packets/MiningEventPacket.java | 25 + .../common/packets/packets/PartyPacket.java | 16 + .../common/packets/packets/PunishUserPacket.java | 24 + .../packets/packets/RequestConnectPacket.java | 20 + .../common/packets/packets/SplashNotifyPacket.java | 28 ++ .../common/packets/packets/SplashUpdatePacket.java | 22 + .../packets/packets/SystemMessagePacket.java | 16 + .../packets/packets/WelcomeClientPacket.java | 18 + .../hype/bbsentials/forge/common/api/Discord.java | 70 --- .../bbsentials/forge/common/api/Formatting.java | 36 -- .../bbsentials/forge/common/api/ISimpleOption.java | 5 - .../de/hype/bbsentials/forge/common/chat/Chat.java | 419 ---------------- .../hype/bbsentials/forge/common/chat/Message.java | 111 ----- .../hype/bbsentials/forge/common/chat/Sender.java | 105 ---- .../bbsentials/forge/common/client/BBsentials.java | 89 ---- .../forge/common/client/Commands/Commands.java | 23 - .../bbsentials/forge/common/client/Config.java | 204 -------- .../bbsentials/forge/common/client/CustomGson.java | 28 -- .../forge/common/client/DebugThread.java | 20 - .../forge/common/client/SplashManager.java | 58 --- .../common/client/SplashStatusUpdateListener.java | 63 --- .../forge/common/client/ToDisplayConfig.java | 96 ---- .../common/communication/BBsentialConnection.java | 550 --------------------- .../common/constants/BBDisplayNameProvider.java | 23 - .../constants/BBDisplayNameProviderWithCustom.java | 6 - .../enviromentShared/AuthenticationConstants.java | 7 - .../constants/enviromentShared/ChChestItem.java | 46 -- .../constants/enviromentShared/ChChestItems.java | 87 ---- .../constants/enviromentShared/EnumUtils.java | 216 -------- .../enviromentShared/InternalReasonConstants.java | 14 - .../common/constants/enviromentShared/Islands.java | 47 -- .../constants/enviromentShared/MiningEvents.java | 39 -- .../forge/common/mclibraries/BBUtils.java | 21 - .../forge/common/mclibraries/EnvironmentCore.java | 22 - .../forge/common/mclibraries/MCChat.java | 9 - .../forge/common/mclibraries/MCCommand.java | 6 - .../forge/common/mclibraries/MCUtils.java | 16 - .../forge/common/mclibraries/Options.java | 8 - .../forge/common/packets/AbstractPacket.java | 67 --- .../common/packets/EnviromentPacketConfig.java | 7 - .../bbsentials/forge/common/packets/Packet.java | 26 - .../forge/common/packets/PacketManager.java | 53 -- .../forge/common/packets/PacketUtils.java | 103 ---- .../packets/packets/BingoChatMessagePacket.java | 25 - .../packets/packets/BroadcastMessagePacket.java | 18 - .../common/packets/packets/ChChestPacket.java | 23 - .../common/packets/packets/DisconnectPacket.java | 23 - .../packets/DisplayTellrawMessagePacket.java | 12 - .../packets/packets/InternalCommandPacket.java | 32 -- .../packets/InvalidCommandFeedbackPacket.java | 24 - .../common/packets/packets/MiningEventPacket.java | 25 - .../forge/common/packets/packets/PartyPacket.java | 16 - .../common/packets/packets/PunishUserPacket.java | 24 - .../packets/packets/RequestConnectPacket.java | 20 - .../common/packets/packets/SplashNotifyPacket.java | 28 -- .../common/packets/packets/SplashUpdatePacket.java | 22 - .../packets/packets/SystemMessagePacket.java | 16 - .../packets/packets/WelcomeClientPacket.java | 18 - 100 files changed, 3026 insertions(+), 3026 deletions(-) create mode 100644 common/src/main/java/de/hype/bbsentials/common/api/Discord.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/api/Formatting.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/api/ISimpleOption.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/chat/Chat.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/chat/Message.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/chat/Sender.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/BBsentials.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/Commands/Commands.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/Config.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/CustomGson.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/DebugThread.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/SplashManager.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/SplashStatusUpdateListener.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/client/ToDisplayConfig.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/communication/BBsentialConnection.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/BBDisplayNameProvider.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/BBDisplayNameProviderWithCustom.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/AuthenticationConstants.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/ChChestItem.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/ChChestItems.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/EnumUtils.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/InternalReasonConstants.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/Islands.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/constants/enviromentShared/MiningEvents.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/mclibraries/BBUtils.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/mclibraries/EnvironmentCore.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/mclibraries/MCChat.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/mclibraries/MCCommand.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/mclibraries/MCUtils.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/mclibraries/Options.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/AbstractPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/EnviromentPacketConfig.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/Packet.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/PacketManager.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/PacketUtils.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/BingoChatMessagePacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/BroadcastMessagePacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/ChChestPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/DisconnectPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/DisplayTellrawMessagePacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/InternalCommandPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/InvalidCommandFeedbackPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/MiningEventPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/PartyPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/PunishUserPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/RequestConnectPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/SplashNotifyPacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/SplashUpdatePacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/SystemMessagePacket.java create mode 100644 common/src/main/java/de/hype/bbsentials/common/packets/packets/WelcomeClientPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/api/Discord.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/api/Formatting.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/api/ISimpleOption.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/chat/Chat.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/chat/Message.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/chat/Sender.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/BBsentials.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/Commands/Commands.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/Config.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/CustomGson.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/DebugThread.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/SplashManager.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/SplashStatusUpdateListener.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/client/ToDisplayConfig.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/communication/BBsentialConnection.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/BBDisplayNameProvider.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/BBDisplayNameProviderWithCustom.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/AuthenticationConstants.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/ChChestItem.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/ChChestItems.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/EnumUtils.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/InternalReasonConstants.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/Islands.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/constants/enviromentShared/MiningEvents.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/mclibraries/BBUtils.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/mclibraries/EnvironmentCore.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/mclibraries/MCChat.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/mclibraries/MCCommand.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/mclibraries/MCUtils.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/mclibraries/Options.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/AbstractPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/EnviromentPacketConfig.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/Packet.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/PacketManager.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/PacketUtils.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/BingoChatMessagePacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/BroadcastMessagePacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/ChChestPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/DisconnectPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/DisplayTellrawMessagePacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/InternalCommandPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/InvalidCommandFeedbackPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/MiningEventPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/PartyPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/PunishUserPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/RequestConnectPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/SplashNotifyPacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/SplashUpdatePacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/SystemMessagePacket.java delete mode 100644 common/src/main/java/de/hype/bbsentials/forge/common/packets/packets/WelcomeClientPacket.java (limited to 'common/src/main/java') diff --git a/common/src/main/java/de/hype/bbsentials/common/api/Discord.java b/common/src/main/java/de/hype/bbsentials/common/api/Discord.java new file mode 100644 index 0000000..6b2f468 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/api/Discord.java @@ -0,0 +1,70 @@ +package de.hype.bbsentials.common.api; + +import de.hype.bbsentials.common.chat.Chat; +import de.hype.bbsentials.common.client.BBsentials; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +public class Discord { + public static void sendWebhookMessage(String message) { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + sendWebhookMessageNoThread(message); + } + }); + thread.start(); + } + + + public static void sendWebhookMessageNoThread(String message) { + CloseableHttpClient httpClient = HttpClients.createDefault(); + String WEBHOOK_URL = "https://discord.com/api/v8/webhooks/1127524566407860276/" + BBsentials.getConfig().getApiKey(); + + + try { + HttpPost httpPost = new HttpPost(WEBHOOK_URL); + + StringEntity jsonEntity = new StringEntity("{\"content\": \"" + message + "\"}", StandardCharsets.UTF_8); + jsonEntity.setContentType("application/json"); + httpPost.setEntity(jsonEntity); + + CloseableHttpResponse response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + + if (responseEntity != null) { + InputStream inputStream = responseEntity.getContent(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + + String line; + StringBuilder responseBuilder = new StringBuilder(); + while ((line = reader.readLine()) != null) { + responseBuilder.append(line); + } + + String responseString = responseBuilder.toString(); + Chat.sendPrivateMessageToSelfInfo(responseString); + } + + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/api/Formatting.java b/common/src/main/java/de/hype/bbsentials/common/api/Formatting.java new file mode 100644 index 0000000..c8702d4 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/api/Formatting.java @@ -0,0 +1,36 @@ +package de.hype.bbsentials.common.api; + +public enum Formatting{ + BLACK("§0"), + DARK_BLUE("§1"), + DARK_GREEN("§2"), + DARK_AQUA("§3"), + DARK_RED("§4"), + DARK_PURPLE("§5"), + GOLD("§6"), + GRAY("§7"), + DARK_GRAY("§8"), + BLUE("§9"), + GREEN("§a"), + AQUA("§b"), + RED("§c"), + LIGHT_PURPLE("§d"), + YELLOW("§e"), + BOLD("§l"), + ITALIC("§o"), + UNDERLINE("§n"), + STRIKETHROUGH("§m"), + RESET("§r"), + WHITE("§f"); + + private final String code; + + Formatting(String code) { + this.code = code; + } + + @Override + public String toString() { + return code; + } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/api/ISimpleOption.java b/common/src/main/java/de/hype/bbsentials/common/api/ISimpleOption.java new file mode 100644 index 0000000..28808d9 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/api/ISimpleOption.java @@ -0,0 +1,5 @@ +package de.hype.bbsentials.common.api; + +public interface ISimpleOption { + void set(Object value); +} diff --git a/common/src/main/java/de/hype/bbsentials/common/chat/Chat.java b/common/src/main/java/de/hype/bbsentials/common/chat/Chat.java new file mode 100644 index 0000000..669dd5d --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/chat/Chat.java @@ -0,0 +1,419 @@ +package de.hype.bbsentials.common.chat; + +import de.hype.bbsentials.common.api.Formatting; +import de.hype.bbsentials.common.client.BBsentials; +import de.hype.bbsentials.common.client.Config; +import de.hype.bbsentials.common.mclibraries.EnvironmentCore; +import de.hype.bbsentials.common.packets.packets.SplashUpdatePacket; + +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; + +public class Chat { + + public static String[] getVariableInfo(String packageName, String className) { + List 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)); + } + + public Message onEvent(Message text) { + if (!isSpam(text.toString())) { + if (BBsentials.getConfig().isDetailedDevModeEnabled()) { + System.out.println("got a message: " + text.getJson()); + } + Message message = new Message(text.toString(),text.getString()); + BBsentials.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 Message 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 (BBsentials.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 (BBsentials.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 (BBsentials.config.doAllChatCustomMenu) { + System.out.println("User: '" + message.getPlayerName() + "' | Message: " + message.getUnformattedString()); + message.replaceInJson("/socialoptions " + message.getPlayerName(), "/socialoptions sb " + message.getPlayerName() + " " + message.getUnformattedString()); + } + + return message; + } + + public void processThreaded(Message message) { + if (message.getString() != null) { + String messageUnformatted = message.getUnformattedString(); + String username = message.getPlayerName(); + if (message.isFromReportedUser()) { + + } + else if (!EnvironmentCore.mcUtils.isWindowFocused()) { + if (BBsentials.config.doDesktopNotifications) { + if ((messageUnformatted.endsWith("is visiting Your Garden !") || messageUnformatted.endsWith("is visiting Your Island !")) && !EnvironmentCore.mcUtils.isWindowFocused() && BBsentials.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(BBsentials.getConfig().getUsername().toLowerCase()) || (message.getMessageContent().toLowerCase().contains(BBsentials.getConfig().getNickname().toLowerCase() + " ") && BBsentials.getConfig().getNotifForParty().toLowerCase().equals("nick")) || BBsentials.getConfig().getNotifForParty().toLowerCase().equals("all")) { + sendNotification("BBsentials Party Chat Notification", username + " : " + message.getMessageContent()); + } + else { + if (message.getMessageContent().toLowerCase().contains(BBsentials.getConfig().getUsername().toLowerCase()) || message.getMessageContent().toLowerCase().contains(BBsentials.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 (BBsentials.config.acceptReparty) { + if (lastDisbandedInstant != null && lastDisbandedInstant.isAfter(Instant.now().minusSeconds(20)) && (username.equals(lastPartyDisbandedUsername))) { + sendCommand("/p accept " + username); + } + } + } + if (!EnvironmentCore.mcUtils.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(BBsentials.getConfig().getUsername())) || message.equals("You are not currently in a party.") || (message.contains("warped the party into a Skyblock Dungeon") && !message.startsWith(BBsentials.getConfig().getUsername()) || (!message.startsWith("The party was transferred to " + BBsentials.getConfig().getUsername()) && message.startsWith("The party was transferred to"))) || messageUnformatted.endsWith(BBsentials.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 (BBsentials.getConfig().isDetailedDevModeEnabled()) { + sendPrivateMessageToSelfDebug("Leader: " + BBsentials.getConfig().isLeader()); + } + } + else if (BBsentials.config.getPlayersInParty().length == 0 && messageUnformatted.endsWith("to the party! They have 60 seconds to accept")) { + BBsentials.config.setIsLeader(true); + } + else if (messageUnformatted.startsWith("You'll be partying with:")) { + List 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(BBsentials.getConfig().getUsername() + " ●"))) || (message.contains(BBsentials.getConfig().getUsername() + " warped the party to a SkyBlock dungeon!")) || message.startsWith("The party was transferred to " + BBsentials.getConfig().getUsername()) || message.getUnformattedString().endsWith(" has promoted " + BBsentials.getConfig().getUsername() + " to Party Leader") || (message.contains("warped to your dungeon"))) { + BBsentials.getConfig().setIsLeader(true); + if (BBsentials.getConfig().isDetailedDevModeEnabled()) { + sendPrivateMessageToSelfDebug("Leader: " + BBsentials.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 (BBsentials.splashStatusUpdateListener != null) { + BBsentials.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.getJson()); + } + } + } + } + + //{"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 partyDisbandedMap = new HashMap<>(); + private String lastPartyDisbandedUsername = null; + + + public boolean isSpam(String message) { + if (message==null) return true; + if (message.isEmpty()) return true; + 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) { + EnvironmentCore.chat.sendClientSideMessage(Message.of(message)); + } + + public static void sendPrivateMessageToSelfText(Message message) { + EnvironmentCore.chat.sendClientSideMessage(message); + } + + public static void sendCommand(String s) { + BBsentials.getConfig().sender.addSendTask(s); + } + + public void sendNotification(String title, String text) { + BBsentials.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 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 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 (BBsentials.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"; + BBsentials.getConfig().setLastChatPromptAnswer(promptCommand); + if (BBsentials.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(); + + } + } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/chat/Message.java b/common/src/main/java/de/hype/bbsentials/common/chat/Message.java new file mode 100644 index 0000000..66a3599 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/chat/Message.java @@ -0,0 +1,111 @@ +package de.hype.bbsentials.common.chat; + +import de.hype.bbsentials.common.client.BBsentials; + +public class Message { + private String text; + private String unformattedString = null; + private String playerName = null; + private String string; + + public Message(String textJson,String string) { + this.text = textJson; + if (string==null) string = ""; + this.string=string; + } + public static Message of(String string){ + return new Message("{\"text\":\""+string+"\"}",string); + } + // + public String getJson() { + return text; + } + + public String getString() { + return string; + } + + public String getUnformattedString() { + if (unformattedString != null) return unformattedString; + unformattedString = string.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) { + text = text.replaceFirst(replace, replaceWith); + } + 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/common/src/main/java/de/hype/bbsentials/common/chat/Sender.java b/common/src/main/java/de/hype/bbsentials/common/chat/Sender.java new file mode 100644 index 0000000..9bdde1f --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/chat/Sender.java @@ -0,0 +1,105 @@ +package de.hype.bbsentials.common.chat; + +import de.hype.bbsentials.common.api.Formatting; +import de.hype.bbsentials.common.mclibraries.EnvironmentCore; + +import java.util.ArrayList; +import java.util.List; + +import static de.hype.bbsentials.common.chat.Chat.sendPrivateMessageToSelfInfo; +import static de.hype.bbsentials.common.chat.Chat.sendPrivateMessageToSelfText; + +public class Sender { + private final List sendQueue; + private final List sendQueueTiming; + private final List 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(Message.of(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); + } + EnvironmentCore.chat.sendChatMessage(toSend); + if (!hidden) { + sendPrivateMessageToSelfInfo("Sent Command to Server: " + toSend); + } + } + } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/client/BBsentials.java b/common/src/main/java/de/hype/bbsentials/common/client/BBsentials.java new file mode 100644 index 0000000..b694add --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/client/BBsentials.java @@ -0,0 +1,89 @@ +package de.hype.bbsentials.common.client; + +import de.hype.bbsentials.common.chat.Chat; +import de.hype.bbsentials.common.client.Commands.Commands; +import de.hype.bbsentials.common.communication.BBsentialConnection; +import de.hype.bbsentials.common.mclibraries.EnvironmentCore; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class BBsentials { + public static Config config; + public static BBsentialConnection connection; + public static Commands coms; + public static ScheduledExecutorService executionService = Executors.newScheduledThreadPool(1000); + public static boolean splashLobby; + private static Thread bbthread; + private static boolean initialised = false; + public static SplashStatusUpdateListener splashStatusUpdateListener; + + public static Config getConfig() { + return config; + } + + public static void connectToBBserver() { + connectToBBserver(config.connectToBeta); + } + + /** + * Checks if still connected to the Server. + * + * @return true if it connected; false if old connection is kept. + */ + public static boolean conditionalReconnectToBBserver() { + if (!connection.isConnected()) { + Chat.sendPrivateMessageToSelfInfo("Reconnecting"); + connectToBBserver(config.connectToBeta); + return true; + } + return false; + } + + public static void connectToBBserver(boolean beta) { + if (connection != null) { + connection.sendHiddenMessage("exit"); + } + if (bbthread != null) { + if (bbthread.isAlive()) { + bbthread.interrupt(); + } + } + bbthread = new Thread(() -> { + connection = new BBsentialConnection(); + coms = new Commands(); + connection.setMessageReceivedCallback(message -> executionService.execute(() -> connection.onMessageReceived(message))); + if (beta) { + connection.connect(config.getBBServerURL(), 5011); + } + else { + connection.connect(config.getBBServerURL(), 5000); + } + executionService.scheduleAtFixedRate(EnvironmentCore.debug, 0, 20, TimeUnit.SECONDS); + }); + bbthread.start(); + } + + /** + * Runs the mod initializer on the client environment. + */ + + public static void onServerSwap() { + splashLobby = false; + if (!initialised) { + config = Config.load(); + if (config.doGammaOverride) EnvironmentCore.mcoptions.setGamma(10); + Chat chat = new Chat(); + if (Config.isBingoTime() || config.overrideBingoTime()) { + connectToBBserver(); + } + initialised = true; + } + } + public void manualLoad() { + initialised = true; + config = Config.load(); + connectToBBserver(); + } +} \ No newline at end of file diff --git a/common/src/main/java/de/hype/bbsentials/common/client/Commands/Commands.java b/common/src/main/java/de/hype/bbsentials/common/client/Commands/Commands.java new file mode 100644 index 0000000..deb4dda --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/client/Commands/Commands.java @@ -0,0 +1,23 @@ +package de.hype.bbsentials.common.client.Commands; + +import de.hype.bbsentials.common.client.Config; +import de.hype.bbsentials.common.mclibraries.EnvironmentCore; + +import static de.hype.bbsentials.common.client.BBsentials.getConfig; +public class Commands { + public Commands() { + EnvironmentCore.commands.registerMain(); + Config config = getConfig(); + if (config.bbsentialsRoles != null) { + EnvironmentCore.commands.registerRoleRequired( + config.hasBBRoles("dev"), + config.hasBBRoles("admin"), + config.hasBBRoles("mod"), + config.hasBBRoles("splasher"), + config.hasBBRoles("beta"), + config.hasBBRoles("mining_events"), + config.hasBBRoles("mining_events") + ); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/de/hype/bbsentials/common/client/Config.java b/common/src/main/java/de/hype/bbsentials/common/client/Config.java new file mode 100644 index 0000000..a23fe62 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/client/Config.java @@ -0,0 +1,204 @@ +package de.hype.bbsentials.common.client; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import de.hype.bbsentials.common.chat.Sender; +import de.hype.bbsentials.common.mclibraries.EnvironmentCore; + +import java.io.*; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +public class Config implements Serializable { + //DO NOT Change any of the following unless you know what you are doing! + public int apiVersion = 1; + public boolean allowServerPartyInvite = true; + public boolean devMode = false; + public boolean detailedDevMode = false; + //You can change again + + // set automatically + private transient boolean isLeader; + public transient String alreadyReported = ""; + public String[] bbsentialsRoles = {""}; + public static List partyMembers = new ArrayList<>(); + public transient ToDisplayConfig toDisplayConfig = ToDisplayConfig.loadFromFile(); + public transient final Sender sender = new Sender(); + public transient boolean highlightitem = false; + public transient String lastChatPromptAnswer = null; + private transient String username; + + // Set via load / default you may change these + public boolean overrideBingoTime = false; + public boolean connectToBeta = false; + + public String bbServerURL = "localhost"; + public String apiKey = ""; + public boolean showBingoChat = true; + public boolean doAllChatCustomMenu=true; + public boolean doPartyChatCustomMenu=true; + public boolean doGuildChatCustomMenu=true; + + public boolean allowBBinviteMe = true; + public boolean doDesktopNotifications = false; + public boolean showSplashStatusUpdates = true; + public boolean doGammaOverride = true; + public boolean acceptReparty; + public boolean autoSplashStatusUpdates; + public String nickname; + public String notifForMessagesType; + + // Set default attribute values + private void setDefaults() { + username = EnvironmentCore.mcUtils.getUsername(); + acceptReparty = true; + if (username.equals("Hype_the_Time")) { + nickname = "Hype"; + notifForMessagesType = "nick"; + doDesktopNotifications=true; + } //Gimmic for Developer due too things which dont make it into releases (bugs) + else { + nickname = ""; + notifForMessagesType = "none"; + } + } + + // Gson object for serialization + private final transient Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + // File object for storing the config + private final transient File CONFIG_FILE = new File(EnvironmentCore.mcUtils.getConfigPath(), "BBsential_settings.json"); + + // Constructor + public Config() { + setDefaults(); + } + + // Load the config from file + public static Config load() { + Config settings; + File CONFIG_FILE = new File(EnvironmentCore.mcUtils.getConfigPath(), "BBsential_settings.json"); + Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + if (CONFIG_FILE.exists()) { + try (FileReader reader = new FileReader(CONFIG_FILE)) { + settings = GSON.fromJson(reader, Config.class); + } catch (IOException e) { + e.printStackTrace(); + settings = new Config(); // Use default values if loading fails + settings.save(); + } catch (IllegalStateException e) { + System.out.println("Error loading config. Resetting it."); + settings = new Config(); + settings.save(); + } + } + else { + settings = new Config(); // Use default values if the file doesn't exist + settings.username = EnvironmentCore.mcUtils.getUsername(); + } + if (!settings.hasBBRoles("dev")) { + settings.detailedDevMode = false; + settings.devMode = false; + } + settings.save(); + return settings; + } + + // Save the config to file + public void save() { + try (FileWriter writer = new FileWriter(CONFIG_FILE)) { + GSON.toJson(this, writer); + } catch (IOException e) { + e.printStackTrace(); + } + toDisplayConfig.saveToFile(); + } + + // Getter methods for various config attributes + public String getUsername() { + return username; + } + + public boolean isLeader() { + return isLeader; + } + + public void setIsLeader(boolean value) { + isLeader = value; + } + + public String getNickname() { + return nickname; + } + + public String getNotifForParty() { + return notifForMessagesType; + } + + public boolean isDevModeEnabled() { + return devMode; + } + + public boolean isDetailedDevModeEnabled() { + return detailedDevMode; + } + + public String[] getPlayersInParty() { + return partyMembers.toArray(new String[0]); + } + + public void addReported(String playerName) { + alreadyReported = alreadyReported + " , " + playerName; + } + + public String getApiKey() { + return apiKey; + } + + public String getBBServerURL() { + return bbServerURL; + } + + + public static boolean isBingoTime() { + LocalDate currentDate = LocalDate.now(); + LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth()); + LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); + Boolean isBefore = currentDate.isAfter(lastDayOfMonth.minusDays(4)); + Boolean isInRange = currentDate.isBefore(firstDayOfMonth.plusDays(15)); + return isBefore || isInRange; + } + + public boolean overrideBingoTime() { + return overrideBingoTime; + } + + public String getLastChatPromptAnswer() { + return lastChatPromptAnswer; + } + + public boolean allowBBinviteMe() { + return allowBBinviteMe; + } + + public void setLastChatPromptAnswer(String lastChatPromptAnswer) { + this.lastChatPromptAnswer = lastChatPromptAnswer; + } + + public boolean hasBBRoles(String roleName) { + for (String role : bbsentialsRoles) { + if (role.equalsIgnoreCase(roleName)) { + return true; + } + } + return false; + } + + public int getApiVersion() { + return apiVersion; + } + + public String getMCUUID() { + return EnvironmentCore.mcUtils.getMCUUID().replace("-", ""); + } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/client/CustomGson.java b/common/src/main/java/de/hype/bbsentials/common/client/CustomGson.java new file mode 100644 index 0000000..31f2626 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/client/CustomGson.java @@ -0,0 +1,28 @@ +package de.hype.bbsentials.common.client; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class CustomGson { + public static Gson create() { + return new GsonBuilder() +// .registerTypeHierarchyAdapter(BBDisplayNameProvider.class, new BBDisplayNameProviderSerializer()) + .create(); + + } + +// private static class BBDisplayNameProviderSerializer implements JsonSerializer, JsonDeserializer { +// @Override +// public JsonElement serialize(BBDisplayNameProvider src, Type typeOfSrc, JsonSerializationContext context) { +// return new JsonPrimitive(src.serialize()); // Serialize using the provided method +// } +// +// @Override +// public BBDisplayNameProvider deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { +// String serializedValue = json.getAsString(); +// +// // Deserialize using the provided method (you need to implement this) +// return BBDisplayNameProvider.deserialize(serializedValue); +// } +// } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/client/DebugThread.java b/common/src/main/java/de/hype/bbsentials/common/client/DebugThread.java new file mode 100644 index 0000000..d51fcec --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/client/DebugThread.java @@ -0,0 +1,20 @@ +package de.hype.bbsentials.common.client; + + +import java.util.List; + +public interface DebugThread extends Runnable { + + @Override + public default void run() { + loop(); + //place a breakpoint for only this thread here. + } + + public default void loop() { + } + + public default List test() { + return List.of(""); + } +} diff --git a/common/src/main/java/de/hype/bbsentials/common/client/SplashManager.java b/common/src/main/java/de/hype/bbsentials/common/client/SplashManager.java new file mode 100644 index 0000000..5d7d464 --- /dev/null +++ b/common/src/main/java/de/hype/bbsentials/common/client/SplashManager.java @@ -0,0 +1,58 @@ +package de.hype.bbsentials.common.client; + +import