diff --git a/MinecraftClient/ChatBots/AutoRespond.cs b/MinecraftClient/ChatBots/AutoRespond.cs index d827bc40..7d17625f 100644 --- a/MinecraftClient/ChatBots/AutoRespond.cs +++ b/MinecraftClient/ChatBots/AutoRespond.cs @@ -12,6 +12,7 @@ namespace MinecraftClient.ChatBots class AutoRespond : ChatBot { private string matchesFile; + private bool matchColors; private List respondRules; private enum MessageType { Public, Private, Other }; @@ -19,9 +20,10 @@ namespace MinecraftClient.ChatBots /// Create a new AutoRespond bot /// /// INI File to load matches from - public AutoRespond(string matchesFile) + public AutoRespond(string matchesFile, bool matchColors) { this.matchesFile = matchesFile; + this.matchColors = matchColors; } /// @@ -262,7 +264,8 @@ namespace MinecraftClient.ChatBots public override void GetText(string text) { //Remove colour codes - text = GetVerbatim(text); + if (!this.matchColors) + text = GetVerbatim(text); //Get Message type string sender = "", message = ""; diff --git a/MinecraftClient/McClient.cs b/MinecraftClient/McClient.cs index 99913424..2d5b812f 100644 --- a/MinecraftClient/McClient.cs +++ b/MinecraftClient/McClient.cs @@ -187,7 +187,7 @@ namespace MinecraftClient if (Settings.AutoRelog_Enabled) { BotLoad(new ChatBots.AutoRelog(Settings.AutoRelog_Delay_Min, Settings.AutoRelog_Delay_Max, Settings.AutoRelog_Retries)); } if (Settings.ScriptScheduler_Enabled) { BotLoad(new ChatBots.ScriptScheduler(Settings.ExpandVars(Settings.ScriptScheduler_TasksFile))); } if (Settings.RemoteCtrl_Enabled) { BotLoad(new ChatBots.RemoteControl()); } - if (Settings.AutoRespond_Enabled) { BotLoad(new ChatBots.AutoRespond(Settings.AutoRespond_Matches)); } + if (Settings.AutoRespond_Enabled) { BotLoad(new ChatBots.AutoRespond(Settings.AutoRespond_Matches, Settings.AutoRespond_MatchColors)); } if (Settings.AutoAttack_Enabled) { BotLoad(new ChatBots.AutoAttack(Settings.AutoAttack_Mode, Settings.AutoAttack_Priority, Settings.AutoAttack_OverrideAttackSpeed, Settings.AutoAttack_CooldownSeconds, Settings.AutoAttack_Interaction)); } if (Settings.AutoFishing_Enabled) { BotLoad(new ChatBots.AutoFishing()); } if (Settings.AutoEat_Enabled) { BotLoad(new ChatBots.AutoEat(Settings.AutoEat_hungerThreshold)); } diff --git a/MinecraftClient/Resources/config/MinecraftClient.ini b/MinecraftClient/Resources/config/MinecraftClient.ini index 45514b51..7ad56938 100644 --- a/MinecraftClient/Resources/config/MinecraftClient.ini +++ b/MinecraftClient/Resources/config/MinecraftClient.ini @@ -188,6 +188,7 @@ tpaccepteveryone=false # /!\ This bot may get spammy depending on your rules, although the global messagecooldown setting can help you avoiding accidental spam enabled=false matchesfile=matches.ini +matchcolors=false # Do not remove colors from text (Note: Your matches will have to include color codes (ones using the § character) in order to work) [AutoAttack] # Automatically attack hostile mobs around you diff --git a/MinecraftClient/Scripting/ChatBot.cs b/MinecraftClient/Scripting/ChatBot.cs index 6840e0bb..f5049f07 100644 --- a/MinecraftClient/Scripting/ChatBot.cs +++ b/MinecraftClient/Scripting/ChatBot.cs @@ -145,7 +145,7 @@ namespace MinecraftClient /// Text from the server /// Raw JSON from the server. This parameter will be NULL on MC 1.5 or lower! public virtual void GetText(string text, string? json) { } - + /// /// Is called when the client has been disconnected fom the server /// @@ -245,7 +245,7 @@ namespace MinecraftClient /// Player UUID /// New Game Mode (0: Survival, 1: Creative, 2: Adventure, 3: Spectator). public virtual void OnGamemodeUpdate(string playername, Guid uuid, int gamemode) { } - + /// /// Called when the Latency has been updated for a player /// @@ -253,7 +253,7 @@ namespace MinecraftClient /// Player UUID /// Latency. public virtual void OnLatencyUpdate(string playername, Guid uuid, int latency) { } - + /// /// Called when the Latency has been updated for a player /// @@ -262,7 +262,7 @@ namespace MinecraftClient /// Player UUID /// Latency. public virtual void OnLatencyUpdate(Entity entity, string playername, Guid uuid, int latency) { } - + /// /// Called when a map was updated /// @@ -319,7 +319,7 @@ namespace MinecraftClient /// Only if mode is 0 or 2. The text to be displayed for the score /// Only if mode is 0 or 2. 0 = "integer", 1 = "hearts". public virtual void OnScoreboardObjective(string objectivename, byte mode, string objectivevalue, int type, string json) { } - + /// /// Called when a scoreboard updated /// @@ -360,12 +360,12 @@ namespace MinecraftClient /// UUID of the player /// Name of the player public virtual void OnPlayerLeave(Guid uuid, string? name) { } - + /// /// Called when the player deaths /// public virtual void OnDeath() { } - + /// /// Called when the player respawns /// @@ -451,14 +451,14 @@ namespace MinecraftClient /// public static string GetVerbatim(string text) { - if ( String.IsNullOrEmpty(text) ) + if (String.IsNullOrEmpty(text)) return String.Empty; int idx = 0; var data = new char[text.Length]; - for ( int i = 0; i < text.Length; i++ ) - if ( text[i] != '§' ) + for (int i = 0; i < text.Length; i++) + if (text[i] != '§') data[idx++] = text[i]; else i++; @@ -478,7 +478,7 @@ namespace MinecraftClient if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') - || c == '_') ) + || c == '_')) return false; return true; @@ -950,7 +950,7 @@ namespace MinecraftClient return Handler.GetWorld(); return null; } - + /// /// Get all Entities /// @@ -968,7 +968,7 @@ namespace MinecraftClient { return Handler.GetPlayersLatency(); } - + /// /// Get the current location of the player (Feet location) /// @@ -1002,7 +1002,7 @@ namespace MinecraftClient { return Handler.ClientIsMoving(); } - + /// /// Look at the specified location /// @@ -1086,7 +1086,7 @@ namespace MinecraftClient { return Handler.GetUsername(); } - + /// /// Return the Gamemode of the current account /// @@ -1361,7 +1361,7 @@ namespace MinecraftClient { return Handler.GetCurrentSlot(); } - + /// /// Clean all inventory /// @@ -1370,7 +1370,7 @@ namespace MinecraftClient { return Handler.ClearInventories(); } - + /// /// Update sign text /// @@ -1410,7 +1410,7 @@ namespace MinecraftClient { return Handler.SpectateByUUID(UUID); } - + /// /// Update command block /// @@ -1456,7 +1456,7 @@ namespace MinecraftClient { return Handler.GetMaxChatMessageLength(); } - + /// /// Respawn player /// diff --git a/MinecraftClient/Settings.cs b/MinecraftClient/Settings.cs index 46c82a67..1baf76f4 100644 --- a/MinecraftClient/Settings.cs +++ b/MinecraftClient/Settings.cs @@ -191,6 +191,7 @@ namespace MinecraftClient //Auto Respond public static bool AutoRespond_Enabled = false; public static string AutoRespond_Matches = "matches.ini"; + public static bool AutoRespond_MatchColors = false; //Auto Attack public static bool AutoAttack_Enabled = false; @@ -206,7 +207,7 @@ namespace MinecraftClient public static bool AutoFishing_Mainhand = true; public static bool AutoFishing_AutoStart = true; public static double AutoFishing_CastDelay = 0.4; - public static double AutoFishing_FishingDelay = 3.0; + public static double AutoFishing_FishingDelay = 3.0; public static double AutoFishing_FishingTimeout = 300.0; public static double AutoFishing_DurabilityLimit = 2; public static bool AutoFishing_AutoRodSwitch = true; @@ -697,6 +698,7 @@ namespace MinecraftClient { case "enabled": AutoRespond_Enabled = str2bool(argValue); return true; case "matchesfile": AutoRespond_Matches = argValue; return true; + case "matchcolors": AutoRespond_MatchColors = str2bool(argValue); return true; } break; @@ -733,7 +735,7 @@ namespace MinecraftClient case "fishing_delay": AutoFishing_FishingDelay = str2double(argValue); return true; case "fishing_timeout": AutoFishing_FishingTimeout = str2double(argValue); return true; case "durability_limit": AutoFishing_DurabilityLimit = str2int(argValue); return true; - case "auto_rod_switch": AutoFishing_AutoRodSwitch = str2bool(argValue); return true; + case "auto_rod_switch": AutoFishing_AutoRodSwitch = str2bool(argValue); return true; case "stationary_threshold": AutoFishing_StationaryThreshold = str2double(argValue); return true; case "hook_threshold": AutoFishing_HookThreshold = str2double(argValue); return true; case "log_fishing_bobber": AutoFishing_LogFishingBobber = str2bool(argValue); return true;