mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Merge pull request #34 from ORelio/Indev
Merging changes from Indev for 1.7.1 release
This commit is contained in:
commit
ae5e418b52
9 changed files with 301 additions and 141 deletions
|
|
@ -127,10 +127,10 @@ namespace MinecraftClient
|
|||
try
|
||||
{
|
||||
//Detect vanilla /tell messages
|
||||
//Someone whispers message
|
||||
//Someone whispers to you: message
|
||||
if (tmp.Length > 2 && tmp[1] == "whispers")
|
||||
{
|
||||
message = text.Substring(tmp[0].Length + 10);
|
||||
message = text.Substring(tmp[0].Length + 18);
|
||||
sender = tmp[0];
|
||||
return isValidName(sender);
|
||||
}
|
||||
|
|
@ -264,7 +264,7 @@ namespace MinecraftClient
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// This bot sends a /ping command every 60 seconds in order to stay non-afk.
|
||||
/// This bot sends a command every 60 seconds in order to stay non-afk.
|
||||
/// </summary>
|
||||
|
||||
public class AntiAFK : ChatBot
|
||||
|
|
@ -289,7 +289,7 @@ namespace MinecraftClient
|
|||
count++;
|
||||
if (count == timeping)
|
||||
{
|
||||
SendText("/ping");
|
||||
SendText(Settings.AntiAFK_Command);
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -875,14 +875,33 @@ namespace MinecraftClient
|
|||
|
||||
public override void Initialize()
|
||||
{
|
||||
// Loads the given file from the startup parameters
|
||||
if (System.IO.File.Exists(file))
|
||||
//Load the given file from the startup parameters
|
||||
//Automatically look in subfolders and try to add ".txt" file extension
|
||||
string[] files = new string[]
|
||||
{
|
||||
lines = System.IO.File.ReadAllLines(file); // Load the given bot text file (containing commands)
|
||||
file,
|
||||
file + ".txt",
|
||||
"scripts\\" + file,
|
||||
"scripts\\" + file + ".txt",
|
||||
"config\\" + file,
|
||||
"config\\" + file + ".txt",
|
||||
};
|
||||
|
||||
bool file_found = false;
|
||||
|
||||
foreach (string possible_file in files)
|
||||
{
|
||||
if (System.IO.File.Exists(possible_file))
|
||||
{
|
||||
lines = System.IO.File.ReadAllLines(possible_file);
|
||||
file_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (!file_found)
|
||||
{
|
||||
LogToConsole("File not found: " + file);
|
||||
LogToConsole("File not found: '" + file + "'");
|
||||
UnloadBot(); //No need to keep the bot active
|
||||
}
|
||||
}
|
||||
|
|
@ -898,9 +917,9 @@ namespace MinecraftClient
|
|||
nextline++; //Move the cursor so that the next time the following line will be interpreted
|
||||
sleepticks = sleepticks_interval; //Used to delay next command sending and prevent from beign kicked for spamming
|
||||
|
||||
if (instruction_line.Length > 0)
|
||||
if (instruction_line.Length > 1)
|
||||
{
|
||||
if (!instruction_line.StartsWith("//") && !instruction_line.StartsWith("#"))
|
||||
if (instruction_line[0] != '#' && instruction_line[0] != '/' && instruction_line[1] != '/')
|
||||
{
|
||||
string instruction_name = instruction_line.Split(' ')[0];
|
||||
switch (instruction_name.ToLower())
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ namespace MinecraftClient
|
|||
{
|
||||
int cursorpos = 0;
|
||||
JSONData jsonData = String2Data(json, ref cursorpos);
|
||||
return JSONData2String(jsonData);
|
||||
return JSONData2String(jsonData, "");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -96,14 +96,37 @@ namespace MinecraftClient
|
|||
TranslationRules["commands.message.display.outgoing"] = "§7You whisper to %s: %s";
|
||||
|
||||
//Use translations from Minecraft assets if translation file is not found but a copy of the game is installed?
|
||||
if (!System.IO.File.Exists(Settings.TranslationsFile) //Try en_US.lang
|
||||
if (!System.IO.File.Exists(Settings.TranslationsFile) //Try en_GB.lang
|
||||
&& System.IO.File.Exists(Settings.TranslationsFile_FromMCDir))
|
||||
{ Settings.TranslationsFile = Settings.TranslationsFile_FromMCDir; }
|
||||
if (!System.IO.File.Exists(Settings.TranslationsFile) //Still not found? try en_GB.lang
|
||||
&& System.IO.File.Exists(Settings.TranslationsFile_FromMCDir_Alt))
|
||||
{ Settings.TranslationsFile = Settings.TranslationsFile_FromMCDir_Alt; }
|
||||
{
|
||||
Settings.TranslationsFile = Settings.TranslationsFile_FromMCDir;
|
||||
Console.ForegroundColor = ConsoleColor.DarkGray;
|
||||
ConsoleIO.WriteLine("Using en_GB.lang from your Minecraft directory.");
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
}
|
||||
|
||||
//Load an external dictionnary of translation rules
|
||||
//Still not found? try downloading en_GB from Mojang's servers?
|
||||
if (!System.IO.File.Exists(Settings.TranslationsFile))
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.DarkGray;
|
||||
ConsoleIO.WriteLine("Downloading en_GB.lang from Mojang's servers...");
|
||||
try
|
||||
{
|
||||
string assets_index = downloadString(Settings.TranslationsFile_Website_Index);
|
||||
string[] tmp = assets_index.Split(new string[] { "lang/en_GB.lang" }, StringSplitOptions.None);
|
||||
tmp = tmp[1].Split(new string[] { "hash\": \"" }, StringSplitOptions.None);
|
||||
string hash = tmp[1].Split('"')[0]; //Translations file identifier on Mojang's servers
|
||||
System.IO.File.WriteAllText(Settings.TranslationsFile, downloadString(Settings.TranslationsFile_Website_Download + '/' + hash.Substring(0, 2) + '/' + hash));
|
||||
ConsoleIO.WriteLine("Done. File saved as \"" + Settings.TranslationsFile + '"');
|
||||
}
|
||||
catch
|
||||
{
|
||||
ConsoleIO.WriteLine("Failed to download the file.");
|
||||
}
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
}
|
||||
|
||||
//Load the external dictionnary of translation rules or display an error message
|
||||
if (System.IO.File.Exists(Settings.TranslationsFile))
|
||||
{
|
||||
string[] translations = System.IO.File.ReadAllLines(Settings.TranslationsFile);
|
||||
|
|
@ -281,41 +304,43 @@ namespace MinecraftClient
|
|||
/// Use a JSON Object to build the corresponding string
|
||||
/// </summary>
|
||||
/// <param name="data">JSON object to convert</param>
|
||||
/// <param name="colorcode">Allow parent color code to affect child elements (set to "" for function init)</param>
|
||||
/// <returns>returns the Minecraft-formatted string</returns>
|
||||
|
||||
private static string JSONData2String(JSONData data)
|
||||
private static string JSONData2String(JSONData data, string colorcode)
|
||||
{
|
||||
string extra_result = "";
|
||||
string colorcode = "";
|
||||
switch (data.Type)
|
||||
{
|
||||
case JSONData.DataType.Object:
|
||||
if (data.Properties.ContainsKey("color"))
|
||||
{
|
||||
colorcode = color2tag(JSONData2String(data.Properties["color"], ""));
|
||||
}
|
||||
if (data.Properties.ContainsKey("extra"))
|
||||
{
|
||||
JSONData[] extras = data.Properties["extra"].DataArray.ToArray();
|
||||
foreach (JSONData item in extras)
|
||||
extra_result = extra_result + JSONData2String(item) + "§r";
|
||||
}
|
||||
if (data.Properties.ContainsKey("color"))
|
||||
{
|
||||
colorcode = color2tag(JSONData2String(data.Properties["color"]));
|
||||
extra_result = extra_result + JSONData2String(item, colorcode) + "§r";
|
||||
}
|
||||
if (data.Properties.ContainsKey("text"))
|
||||
{
|
||||
return extra_result + colorcode + JSONData2String(data.Properties["text"]) + colorcode;
|
||||
return colorcode + JSONData2String(data.Properties["text"], colorcode) + extra_result;
|
||||
}
|
||||
else if (data.Properties.ContainsKey("translate"))
|
||||
{
|
||||
List<string> using_data = new List<string>();
|
||||
if (data.Properties.ContainsKey("using"))
|
||||
if (data.Properties.ContainsKey("using") && !data.Properties.ContainsKey("with"))
|
||||
data.Properties["with"] = data.Properties["using"];
|
||||
if (data.Properties.ContainsKey("with"))
|
||||
{
|
||||
JSONData[] array = data.Properties["using"].DataArray.ToArray();
|
||||
JSONData[] array = data.Properties["with"].DataArray.ToArray();
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
using_data.Add(JSONData2String(array[i]));
|
||||
using_data.Add(JSONData2String(array[i], colorcode));
|
||||
}
|
||||
}
|
||||
return extra_result + colorcode + TranslateString(JSONData2String(data.Properties["translate"]), using_data) + colorcode;
|
||||
return colorcode + TranslateString(JSONData2String(data.Properties["translate"], ""), using_data) + extra_result;
|
||||
}
|
||||
else return extra_result;
|
||||
|
||||
|
|
@ -323,12 +348,12 @@ namespace MinecraftClient
|
|||
string result = "";
|
||||
foreach (JSONData item in data.DataArray)
|
||||
{
|
||||
result += JSONData2String(item);
|
||||
result += JSONData2String(item, colorcode);
|
||||
}
|
||||
return result;
|
||||
|
||||
case JSONData.DataType.String:
|
||||
return data.StringValue;
|
||||
return colorcode + data.StringValue;
|
||||
}
|
||||
|
||||
return "";
|
||||
|
|
@ -341,5 +366,23 @@ namespace MinecraftClient
|
|||
/// <returns>True if hexadecimal</returns>
|
||||
|
||||
private static bool isHex(char c) { return ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')); }
|
||||
|
||||
/// <summary>
|
||||
/// Do a HTTP request to get a webpage or text data from a server file
|
||||
/// </summary>
|
||||
/// <param name="url">URL of resource</param>
|
||||
/// <returns>Returns resource data if success, otherwise a WebException is raised</returns>
|
||||
|
||||
private static string downloadString(string url)
|
||||
{
|
||||
System.Net.HttpWebRequest myRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
|
||||
myRequest.Method = "GET";
|
||||
System.Net.WebResponse myResponse = myRequest.GetResponse();
|
||||
System.IO.StreamReader sr = new System.IO.StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
|
||||
string result = sr.ReadToEnd();
|
||||
sr.Close();
|
||||
myResponse.Close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
|
||||
namespace MinecraftClient
|
||||
{
|
||||
|
|
@ -80,77 +82,86 @@ namespace MinecraftClient
|
|||
k = Console.ReadKey(true);
|
||||
while (writing_lock) { }
|
||||
reading_lock = true;
|
||||
switch (k.Key)
|
||||
if (k.Key == ConsoleKey.V && k.Modifiers == ConsoleModifiers.Control)
|
||||
{
|
||||
case ConsoleKey.Escape:
|
||||
ClearLineAndBuffer();
|
||||
break;
|
||||
case ConsoleKey.Backspace:
|
||||
RemoveOneChar();
|
||||
break;
|
||||
case ConsoleKey.Enter:
|
||||
Console.Write('\n');
|
||||
break;
|
||||
case ConsoleKey.LeftArrow:
|
||||
GoLeft();
|
||||
break;
|
||||
case ConsoleKey.RightArrow:
|
||||
GoRight();
|
||||
break;
|
||||
case ConsoleKey.Home:
|
||||
while (buffer.Length > 0) { GoLeft(); }
|
||||
break;
|
||||
case ConsoleKey.End:
|
||||
while (buffer2.Length > 0) { GoRight(); }
|
||||
break;
|
||||
case ConsoleKey.Delete:
|
||||
if (buffer2.Length > 0)
|
||||
{
|
||||
GoRight();
|
||||
string clip = ReadClipboard();
|
||||
foreach (char c in clip)
|
||||
AddChar(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (k.Key)
|
||||
{
|
||||
case ConsoleKey.Escape:
|
||||
ClearLineAndBuffer();
|
||||
break;
|
||||
case ConsoleKey.Backspace:
|
||||
RemoveOneChar();
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.Oem6:
|
||||
break;
|
||||
case ConsoleKey.DownArrow:
|
||||
if (previous.Count > 0)
|
||||
{
|
||||
ClearLineAndBuffer();
|
||||
buffer = previous.First.Value;
|
||||
previous.AddLast(buffer);
|
||||
previous.RemoveFirst();
|
||||
Console.Write(buffer);
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.UpArrow:
|
||||
if (previous.Count > 0)
|
||||
{
|
||||
ClearLineAndBuffer();
|
||||
buffer = previous.Last.Value;
|
||||
previous.AddFirst(buffer);
|
||||
previous.RemoveLast();
|
||||
Console.Write(buffer);
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.Tab:
|
||||
if (autocomplete_engine != null && buffer.Length > 0)
|
||||
{
|
||||
string[] tmp = buffer.Split(' ');
|
||||
if (tmp.Length > 0)
|
||||
break;
|
||||
case ConsoleKey.Enter:
|
||||
Console.Write('\n');
|
||||
break;
|
||||
case ConsoleKey.LeftArrow:
|
||||
GoLeft();
|
||||
break;
|
||||
case ConsoleKey.RightArrow:
|
||||
GoRight();
|
||||
break;
|
||||
case ConsoleKey.Home:
|
||||
while (buffer.Length > 0) { GoLeft(); }
|
||||
break;
|
||||
case ConsoleKey.End:
|
||||
while (buffer2.Length > 0) { GoRight(); }
|
||||
break;
|
||||
case ConsoleKey.Delete:
|
||||
if (buffer2.Length > 0)
|
||||
{
|
||||
string word_tocomplete = tmp[tmp.Length - 1];
|
||||
string word_autocomplete = autocomplete_engine.AutoComplete(word_tocomplete);
|
||||
if (!String.IsNullOrEmpty(word_autocomplete) && word_autocomplete != word_tocomplete)
|
||||
GoRight();
|
||||
RemoveOneChar();
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.Oem6:
|
||||
break;
|
||||
case ConsoleKey.DownArrow:
|
||||
if (previous.Count > 0)
|
||||
{
|
||||
ClearLineAndBuffer();
|
||||
buffer = previous.First.Value;
|
||||
previous.AddLast(buffer);
|
||||
previous.RemoveFirst();
|
||||
Console.Write(buffer);
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.UpArrow:
|
||||
if (previous.Count > 0)
|
||||
{
|
||||
ClearLineAndBuffer();
|
||||
buffer = previous.Last.Value;
|
||||
previous.AddFirst(buffer);
|
||||
previous.RemoveLast();
|
||||
Console.Write(buffer);
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.Tab:
|
||||
if (autocomplete_engine != null && buffer.Length > 0)
|
||||
{
|
||||
string[] tmp = buffer.Split(' ');
|
||||
if (tmp.Length > 0)
|
||||
{
|
||||
while (buffer.Length > 0 && buffer[buffer.Length - 1] != ' ') { RemoveOneChar(); }
|
||||
foreach (char c in word_autocomplete) { AddChar(c); }
|
||||
string word_tocomplete = tmp[tmp.Length - 1];
|
||||
string word_autocomplete = autocomplete_engine.AutoComplete(word_tocomplete);
|
||||
if (!String.IsNullOrEmpty(word_autocomplete) && word_autocomplete != word_tocomplete)
|
||||
{
|
||||
while (buffer.Length > 0 && buffer[buffer.Length - 1] != ' ') { RemoveOneChar(); }
|
||||
foreach (char c in word_autocomplete) { AddChar(c); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
AddChar(k.KeyChar);
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
AddChar(k.KeyChar);
|
||||
break;
|
||||
}
|
||||
}
|
||||
reading_lock = false;
|
||||
}
|
||||
|
|
@ -212,7 +223,7 @@ namespace MinecraftClient
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region subfunctions
|
||||
#region Subfunctions
|
||||
private static void ClearLineAndBuffer()
|
||||
{
|
||||
while (buffer2.Length > 0) { GoRight(); }
|
||||
|
|
@ -275,6 +286,27 @@ namespace MinecraftClient
|
|||
for (int i = 0; i < buffer2.Length; i++) { GoBack(); }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Clipboard management
|
||||
private static string ReadClipboard()
|
||||
{
|
||||
string clipdata = "";
|
||||
Thread staThread = new Thread(new ThreadStart(
|
||||
delegate
|
||||
{
|
||||
try
|
||||
{
|
||||
clipdata = Clipboard.GetText();
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
));
|
||||
staThread.SetApartmentState(ApartmentState.STA);
|
||||
staThread.Start();
|
||||
staThread.Join();
|
||||
return clipdata;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -143,6 +143,9 @@ namespace MinecraftClient
|
|||
{
|
||||
try
|
||||
{
|
||||
//Needed if the player is dead
|
||||
handler.SendRespawnPacket();
|
||||
|
||||
while (client.Client.Connected)
|
||||
{
|
||||
text = ConsoleIO.ReadLine();
|
||||
|
|
@ -160,9 +163,21 @@ namespace MinecraftClient
|
|||
}
|
||||
else
|
||||
{
|
||||
if (text.ToLower() == "/quit" || text.ToLower().StartsWith("/exec ") || text.ToLower() == "/reco" || text.ToLower() == "/reconnect") { break; }
|
||||
while (text.Length > 0 && text[0] == ' ') { text = text.Substring(1); }
|
||||
if (text != "")
|
||||
text = text.Trim();
|
||||
if (text.ToLower() == "/quit" || text.ToLower() == "/reco")
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (text.ToLower() == "/respawn")
|
||||
{
|
||||
handler.SendRespawnPacket();
|
||||
ConsoleIO.WriteLine("You have respawned.");
|
||||
}
|
||||
else if (text.ToLower().StartsWith("/script "))
|
||||
{
|
||||
handler.BotLoad(new Bots.Scripting(text.Substring(8)));
|
||||
}
|
||||
else if (text != "")
|
||||
{
|
||||
//Message is too long
|
||||
if (text.Length > 100)
|
||||
|
|
@ -175,7 +190,7 @@ namespace MinecraftClient
|
|||
}
|
||||
else
|
||||
{
|
||||
//Send the message splitted in sereval messages
|
||||
//Send the message splitted in several messages
|
||||
while (text.Length > 100)
|
||||
{
|
||||
handler.SendChatMessage(text.Substring(0, 100));
|
||||
|
|
@ -189,22 +204,10 @@ namespace MinecraftClient
|
|||
}
|
||||
}
|
||||
|
||||
if (text.ToLower() == "/quit")
|
||||
switch (text.ToLower())
|
||||
{
|
||||
ConsoleIO.WriteLine("You have left the server.");
|
||||
Disconnect();
|
||||
}
|
||||
|
||||
else if (text.ToLower().StartsWith("/exec ")) {
|
||||
handler.BotLoad(new Bots.Scripting("config/" + text.Split()[1]));
|
||||
}
|
||||
|
||||
|
||||
else if (text.ToLower() == "/reco" || text.ToLower() == "/reconnect")
|
||||
{
|
||||
ConsoleIO.WriteLine("You have left the server.");
|
||||
handler.SendRespawnPacket();
|
||||
Program.Restart();
|
||||
case "/quit": Program.Exit(); break;
|
||||
case "/reco": Program.Restart(); break;
|
||||
}
|
||||
}
|
||||
catch (IOException) { }
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@
|
|||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
|
|
|
|||
|
|
@ -132,16 +132,6 @@ namespace MinecraftClient
|
|||
message = ChatParser.ParseText(message);
|
||||
printstring(message, false);
|
||||
for (int i = 0; i < bots.Count; i++) { bots[i].GetText(message); } break;
|
||||
case 0x37:
|
||||
int stats_count = readNextVarInt();
|
||||
for (int i = 0; i < stats_count; i++)
|
||||
{
|
||||
string stat_name = readNextString();
|
||||
readNextVarInt(); //stat value
|
||||
if (stat_name == "stat.deaths")
|
||||
printstring("You are dead. Type /reco to respawn & reconnect.", false);
|
||||
}
|
||||
break;
|
||||
case 0x3A:
|
||||
int autocomplete_count = readNextVarInt();
|
||||
string tab_list = "";
|
||||
|
|
@ -343,7 +333,6 @@ namespace MinecraftClient
|
|||
private void setEncryptedClient(Crypto.AesStream n) { s = n; encrypted = true; }
|
||||
private void Receive(byte[] buffer, int start, int offset, SocketFlags f)
|
||||
{
|
||||
while (c.Client.Available < start + offset) { }
|
||||
if (encrypted)
|
||||
{
|
||||
s.Read(buffer, start, offset);
|
||||
|
|
@ -549,6 +538,9 @@ namespace MinecraftClient
|
|||
if (message == null)
|
||||
message = "";
|
||||
|
||||
message.Replace("\"", "\\\"");
|
||||
message = "\"" + message + "\"";
|
||||
|
||||
try
|
||||
{
|
||||
byte[] packet_id = getVarInt(0x40);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace MinecraftClient
|
|||
{
|
||||
private static McTcpClient Client;
|
||||
public static string[] startupargs;
|
||||
public const string Version = "1.7.0";
|
||||
public const string Version = "1.7.1";
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point of Minecraft Console Client
|
||||
|
|
@ -29,16 +29,28 @@ namespace MinecraftClient
|
|||
if (args.Length >= 1 && args[args.Length - 1] == "BasicIO")
|
||||
{
|
||||
ConsoleIO.basicIO = true;
|
||||
Console.OutputEncoding = Console.InputEncoding = Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage);
|
||||
args = args.Where(o => !Object.ReferenceEquals(o, args[args.Length - 1])).ToArray();
|
||||
}
|
||||
|
||||
//Processing Command-line arguments or Config File
|
||||
|
||||
if (args.Length == 1 && System.IO.File.Exists(args[0]))
|
||||
//Process ini configuration file
|
||||
if (args.Length >= 1 && System.IO.File.Exists(args[0]) && System.IO.Path.GetExtension(args[0]).ToLower() == ".ini")
|
||||
{
|
||||
Settings.LoadSettings(args[0]);
|
||||
|
||||
//remove ini configuration file from arguments array
|
||||
List<string> args_tmp = args.ToList<string>();
|
||||
args_tmp.RemoveAt(0);
|
||||
args = args_tmp.ToArray();
|
||||
}
|
||||
else if (args.Length >= 1)
|
||||
else if (System.IO.File.Exists("MinecraftClient.ini"))
|
||||
{
|
||||
Settings.LoadSettings("MinecraftClient.ini");
|
||||
}
|
||||
else Settings.WriteDefaultSettings("MinecraftClient.ini");
|
||||
|
||||
//Other command-line arguments
|
||||
if (args.Length >= 1)
|
||||
{
|
||||
Settings.Login = args[0];
|
||||
if (args.Length >= 2)
|
||||
|
|
@ -141,11 +153,11 @@ namespace MinecraftClient
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (System.IO.File.Exists("MinecraftClient.ini"))
|
||||
|
||||
if (Settings.ConsoleTitle != "")
|
||||
{
|
||||
Settings.LoadSettings("MinecraftClient.ini");
|
||||
Console.Title = Settings.ConsoleTitle.Replace("%username%", "New Window");
|
||||
}
|
||||
else Settings.WriteDefaultSettings("MinecraftClient.ini");
|
||||
|
||||
//Asking the user to type in missing data such as Username and Password
|
||||
|
||||
|
|
@ -198,6 +210,11 @@ namespace MinecraftClient
|
|||
}
|
||||
if (result == MinecraftCom.LoginResult.Success)
|
||||
{
|
||||
if (Settings.ConsoleTitle != "")
|
||||
{
|
||||
Console.Title = Settings.ConsoleTitle.Replace("%username%", Settings.Username);
|
||||
}
|
||||
|
||||
Console.WriteLine("Success. (session ID: " + sessionID + ')');
|
||||
if (Settings.ServerIP == "")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,16 +21,19 @@ namespace MinecraftClient
|
|||
public static string Password = "";
|
||||
public static string ServerIP = "";
|
||||
public static string SingleCommand = "";
|
||||
public static string ConsoleTitle = "";
|
||||
|
||||
//Other Settings
|
||||
public static string TranslationsFile_FromMCDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\.minecraft\assets\virtual\legacy\lang\en_US.lang";
|
||||
public static string TranslationsFile_FromMCDir_Alt = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\.minecraft\assets\virtual\legacy\lang\en_GB.lang";
|
||||
public static string TranslationsFile_FromMCDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\.minecraft\assets\objects\9e\9e2fdc43fc1c7024ff5922b998fadb2971a64ee0"; //MC 1.7.4 en_GB.lang
|
||||
public static string TranslationsFile_Website_Index = "https://s3.amazonaws.com/Minecraft.Download/indexes/1.7.4.json";
|
||||
public static string TranslationsFile_Website_Download = "http://resources.download.minecraft.net";
|
||||
public static string TranslationsFile = "translations.lang";
|
||||
public static string Bots_OwnersFile = "bot-owners.txt";
|
||||
|
||||
//AntiAFK Settings
|
||||
public static bool AntiAFK_Enabled = false;
|
||||
public static int AntiAFK_Delay = 600;
|
||||
public static string AntiAFK_Command = "/ping";
|
||||
|
||||
//Hangman Settings
|
||||
public static bool Hangman_Enabled = false;
|
||||
|
|
@ -120,7 +123,7 @@ namespace MinecraftClient
|
|||
case "singlecommand": SingleCommand = argValue; break;
|
||||
case "translationsfile": TranslationsFile = argValue; break;
|
||||
case "botownersfile": Bots_OwnersFile = argValue; break;
|
||||
case "consoletitle": Console.Title = argValue; break;
|
||||
case "consoletitle": ConsoleTitle = argValue; break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -138,6 +141,7 @@ namespace MinecraftClient
|
|||
{
|
||||
case "enabled": AntiAFK_Enabled = str2bool(argValue); break;
|
||||
case "delay": AntiAFK_Delay = str2int(argValue); break;
|
||||
case "command": AntiAFK_Command = argValue == "" ? "/ping" : argValue; break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -195,7 +199,56 @@ namespace MinecraftClient
|
|||
|
||||
public static void WriteDefaultSettings(string settingsfile)
|
||||
{
|
||||
System.IO.File.WriteAllText(settingsfile, "#Minecraft Console Client v" + Program.Version + "\r\n#Startup Config File\r\n\r\n[Main]\r\n\r\n#General settings\r\n#leave blank = prompt user on startup\r\n#Use \"-\" as password for offline mode\r\n\r\nlogin=\r\npassword=\r\nserverip=\r\n\r\n#Advanced settings\r\n\r\ntranslationsfile=translations.lang\r\nbotownersfile=bot-owners.txt\r\nconsoletitle=Minecraft Console Client\r\n\r\n#Bot Settings\r\n\r\n[Alerts]\r\nenabled=false\r\nalertsfile=alerts.txt\r\nexcludesfile=alerts-exclude.txt\r\n\r\n[AntiAFK]\r\nenabled=false\r\ndelay=600 #10 = 1s\r\n\r\n[AutoRelog]\r\nenabled=false\r\ndelay=10\r\nretries=3 #-1 = unlimited\r\nkickmessagesfile=kickmessages.txt\r\n\r\n[ChatLog]\r\nenabled=false\r\ntimestamps=true\r\nfilter=messages\r\nlogfile=chatlog.txt\r\n\r\n[Hangman]\r\nenabled=false\r\nenglish=true\r\nwordsfile=hangman-en.txt\r\nfichiermots=hangman-fr.txt\r\n\r\n[Scripting]\r\nenabled=false\r\nscriptfile=testscript.txt\r\n", Encoding.UTF8);
|
||||
System.IO.File.WriteAllText(settingsfile, "#Minecraft Console Client v" + Program.Version + "\r\n"
|
||||
+ "#Startup Config File\r\n"
|
||||
+ "\r\n"
|
||||
+ "[Main]\r\n"
|
||||
+ "\r\n"
|
||||
+ "#General settings\r\n"
|
||||
+ "#leave blank = prompt user on startup\r\n"
|
||||
+ "#Use \"-\" as password for offline mode\r\n"
|
||||
+ "\r\n"
|
||||
+ "login=\r\npassword=\r\nserverip=\r\n"
|
||||
+ "\r\n"
|
||||
+ "#Advanced settings\r\n"
|
||||
+ "\r\n"
|
||||
+ "translationsfile=translations.lang\r\n"
|
||||
+ "botownersfile=bot-owners.txt\r\n"
|
||||
+ "consoletitle=Minecraft Console Client - %username%\r\n"
|
||||
+ "\r\n"
|
||||
+ "#Bot Settings\r\n"
|
||||
+ "\r\n"
|
||||
+ "[Alerts]\r\n"
|
||||
+ "enabled=false\r\n"
|
||||
+ "alertsfile=alerts.txt\r\n"
|
||||
+ "excludesfile=alerts-exclude.txt\r\n"
|
||||
+ "\r\n"
|
||||
+ "[AntiAFK]\r\n"
|
||||
+ "enabled=false\r\n"
|
||||
+ "delay=600 #10 = 1s\r\n"
|
||||
+ "command=/ping\r\n"
|
||||
+ "\r\n"
|
||||
+ "[AutoRelog]\r\n"
|
||||
+ "enabled=false\r\n"
|
||||
+ "delay=10\r\n"
|
||||
+ "retries=3 #-1 = unlimited\r\n"
|
||||
+ "kickmessagesfile=kickmessages.txt\r\n"
|
||||
+ "\r\n"
|
||||
+ "[ChatLog]\r\n"
|
||||
+ "enabled=false\r\n"
|
||||
+ "timestamps=true\r\n"
|
||||
+ "filter=messages\r\n"
|
||||
+ "logfile=chatlog.txt\r\n"
|
||||
+ "\r\n"
|
||||
+ "[Hangman]\r\n"
|
||||
+ "enabled=false\r\n"
|
||||
+ "english=true\r\n"
|
||||
+ "wordsfile=hangman-en.txt\r\n"
|
||||
+ "fichiermots=hangman-fr.txt\r\n"
|
||||
+ "\r\n"
|
||||
+ "[Scripting]\r\n"
|
||||
+ "enabled=false\r\n"
|
||||
+ "scriptfile=testscript.txt\r\n", Encoding.UTF8);
|
||||
}
|
||||
|
||||
public static int str2int(string str) { try { return Convert.ToInt32(str); } catch { return 0; } }
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ namespace MinecraftClientGUI
|
|||
Client.StartInfo.FileName = ExePath;
|
||||
Client.StartInfo.Arguments = arguments;
|
||||
Client.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
|
||||
Client.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
|
||||
Client.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage);
|
||||
Client.StartInfo.UseShellExecute = false;
|
||||
Client.StartInfo.RedirectStandardOutput = true;
|
||||
Client.StartInfo.RedirectStandardInput = true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue