diff --git a/.gitignore b/.gitignore
index 83e83bcd..00cdd638 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,7 +11,6 @@ SessionCache.ini
.*
!/.github
/packages
-/packages
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
@@ -402,3 +401,6 @@ FodyWeavers.xsd
.idea/
*.sln.iml
*.sln.iml
+
+# docs
+!/docs/.vuepress
diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts
new file mode 100644
index 00000000..a7baf6a5
--- /dev/null
+++ b/docs/.vuepress/config.ts
@@ -0,0 +1,59 @@
+import process from 'node:process'
+import { viteBundler } from '@vuepress/bundler-vite'
+import { webpackBundler } from '@vuepress/bundler-webpack'
+import { defineUserConfig } from '@vuepress/cli'
+// import { docsearchPlugin } from '@vuepress/plugin-docsearch'
+import { shikiPlugin } from '@vuepress/plugin-shiki'
+import { defaultTheme } from '@vuepress/theme-default'
+import { getDirname, path } from '@vuepress/utils'
+
+import { head } from './configs/head.js'
+import { mainConfig, defaultThemeConfig } from './configs/locales_config.js'
+
+const __dirname = getDirname(import.meta.url)
+const isProd = process.env.NODE_ENV === 'production'
+
+export default defineUserConfig({
+ // set site base to default value
+ base: '/',
+
+ // extra tags in `
`
+ head: head,
+
+ // site-level locales config
+ locales: mainConfig,
+
+ // specify bundler via environment variable
+ bundler: process.env.DOCS_BUNDLER === 'webpack' ? webpackBundler() : viteBundler(),
+
+ // configure default theme
+ theme: defaultTheme({
+ logo: "/images/MCC_logo.png",
+ repo: "https://github.com/MCCTeam/Minecraft-Console-Client",
+ docsDir: 'docs',
+
+ // theme-level locales config
+ locales: defaultThemeConfig,
+
+ themePlugins: {
+ // only enable git plugin in production mode
+ git: isProd,
+ // use shiki plugin in production mode instead
+ prismjs: !isProd,
+ },
+ }),
+
+ // configure markdown
+ markdown: {
+ importCode: {
+ handleImportPath: (str) =>
+ str.replace(/^@vuepress/, path.resolve(__dirname, '../../ecosystem')),
+ },
+ },
+
+ // use plugins
+ plugins: [
+ // only enable shiki plugin in production mode
+ isProd ? shikiPlugin({ theme: 'dark-plus' }) : [],
+ ],
+})
diff --git a/docs/.vuepress/configs/gen_configs.py b/docs/.vuepress/configs/gen_configs.py
new file mode 100644
index 00000000..2aeca2f3
--- /dev/null
+++ b/docs/.vuepress/configs/gen_configs.py
@@ -0,0 +1,74 @@
+import os
+
+print('Read ../translations/*.json')
+LanguageCodeList = [ code.replace('.json', '') for code in os.listdir('../translations/') ]
+
+print('Read ./l10n_configs/config_templete.ts')
+templete = ""
+with open('./l10n_configs/config_templete.ts', 'r', encoding='utf-8') as file:
+ templete = file.read()
+
+for LanguageCode in LanguageCodeList:
+ content = templete
+
+ content = content.replace("$LanguageCode$", LanguageCode, -1)
+
+ content = content.replace("$LanguageCodeEscaped$", LanguageCode.replace('-', '_', -1), -1)
+
+ if (LanguageCode == 'en'):
+ content = content.replace("$PathToPage$", '', -1)
+ else:
+ content = content.replace("$PathToPage$", '/' + LanguageCode, -1)
+
+ print("Write ./l10n_configs/{}.ts".format(LanguageCode))
+
+ with open('./l10n_configs/{}.ts'.format(LanguageCode), 'w+', encoding='utf-8') as file:
+ file.write('/* This file is automatically generated by "gen_configs.py" */\n')
+ file.write(content)
+
+print("Write ./locales_config.ts")
+
+with open('./locales_config.ts', 'w+', encoding='utf-8') as file:
+ file.write('/* This file is automatically generated by "gen_configs.py" */\n')
+ file.write(r"import type { SiteLocaleConfig } from '@vuepress/shared'" + '\n')
+ file.write(r"import type { LocaleConfig } from '@vuepress/shared'" + '\n')
+
+ file.write('\n')
+
+ for LanguageCode in LanguageCodeList:
+ LanguageCodeEscaped = LanguageCode.replace('-', '_', -1)
+ file.write(r"import { mainConfig_")
+ file.write(LanguageCodeEscaped)
+ file.write(r", defaultThemeConfig_")
+ file.write(LanguageCodeEscaped)
+ file.write(r" } from './l10n_configs/")
+ file.write(LanguageCode)
+ file.write(".js'\n")
+
+ file.write('\n')
+
+ file.write(r"export const mainConfig: SiteLocaleConfig = {" + '\n')
+ for LanguageCode in LanguageCodeList:
+ file.write(r" '")
+ if (LanguageCode != 'en'):
+ file.write(r"/")
+ file.write(LanguageCode)
+ file.write(r"/': mainConfig_")
+ file.write(LanguageCode.replace('-', '_', -1))
+ file.write(",\n")
+ file.write(r"}" + '\n')
+
+ file.write('\n')
+
+ file.write(r"export const defaultThemeConfig: LocaleConfig = {" + '\n')
+ for LanguageCode in LanguageCodeList:
+ file.write(r" '")
+ if (LanguageCode != 'en'):
+ file.write(r"/")
+ file.write(LanguageCode)
+ file.write(r"/': defaultThemeConfig_")
+ file.write(LanguageCode.replace('-', '_', -1))
+ file.write(",\n")
+ file.write(r"}" + '\n')
+
+print("** Done! **")
diff --git a/docs/.vuepress/configs/head.ts b/docs/.vuepress/configs/head.ts
new file mode 100644
index 00000000..a43adb88
--- /dev/null
+++ b/docs/.vuepress/configs/head.ts
@@ -0,0 +1,8 @@
+import type { HeadConfig } from '@vuepress/core'
+
+export const head: HeadConfig[] = [
+ ["meta", { name: "theme-color", content: "#3eaf7c" }],
+ ["meta", { name: "apple-mobile-web-app-capable", content: "yes" }],
+ ["meta", { name: "apple-mobile-web-app-status-bar-style", content: "black" }],
+ ["link", { rel: "icon", href: "../../favicon.ico" }],
+]
diff --git a/docs/.vuepress/configs/l10n_configs/config_templete.ts b/docs/.vuepress/configs/l10n_configs/config_templete.ts
new file mode 100644
index 00000000..c89a4fc9
--- /dev/null
+++ b/docs/.vuepress/configs/l10n_configs/config_templete.ts
@@ -0,0 +1,74 @@
+import type { SiteLocaleData } from '@vuepress/shared'
+import type { DefaultThemeLocaleData } from '@vuepress/theme-default'
+import { head } from '../head.js'
+
+const Translation = require('../../translations/$LanguageCode$.json')
+
+export const mainConfig_$LanguageCodeEscaped$: SiteLocaleData = {
+ lang: '$LanguageCode$',
+ title: Translation.title,
+ description: Translation.description,
+ head: head
+}
+
+export const defaultThemeConfig_$LanguageCodeEscaped$: DefaultThemeLocaleData = {
+ selectLanguageName: Translation.theme.selectLanguageName,
+ selectLanguageText: Translation.theme.selectLanguageText,
+ selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel,
+
+ navbar: [
+ {
+ text: Translation.navbar.AboutAndFeatures,
+ link: "$PathToPage$/guide/",
+ },
+
+ {
+ text: Translation.navbar.Installation,
+ link: "$PathToPage$/guide/installation.md",
+ },
+
+ {
+ text: Translation.navbar.Usage,
+ link: "$PathToPage$/guide/usage.md",
+ },
+
+ {
+ text: Translation.navbar.Configuration,
+ link: "$PathToPage$/guide/configuration.md",
+ },
+
+ {
+ text: Translation.navbar.ChatBots,
+ link: "$PathToPage$/guide/chat-bots.md",
+ },
+ ],
+
+ sidebar: [
+ "$PathToPage$/guide/README.md",
+ "$PathToPage$/guide/installation.md",
+ "$PathToPage$/guide/usage.md",
+ "$PathToPage$/guide/configuration.md",
+ "$PathToPage$/guide/chat-bots.md",
+ "$PathToPage$/guide/creating-bots.md",
+ "$PathToPage$/guide/contibuting.md"
+ ],
+
+ // page meta
+ editLinkText: Translation.theme.editLinkText,
+ lastUpdatedText: Translation.theme.lastUpdatedText,
+ contributorsText: Translation.theme.contributorsText,
+
+ // custom containers
+ tip: Translation.theme.tip,
+ warning: Translation.theme.warning,
+ danger: Translation.theme.danger,
+
+ // 404 page
+ notFound: Translation.theme.notFound,
+ backToHome: Translation.theme.backToHome,
+
+ // a11y
+ openInNewWindow: Translation.theme.openInNewWindow,
+ toggleColorMode: Translation.theme.toggleColorMode,
+ toggleSidebar: Translation.theme.toggleSidebar,
+}
diff --git a/docs/.vuepress/configs/l10n_configs/en.ts b/docs/.vuepress/configs/l10n_configs/en.ts
new file mode 100644
index 00000000..49e3f762
--- /dev/null
+++ b/docs/.vuepress/configs/l10n_configs/en.ts
@@ -0,0 +1,75 @@
+/* This file is automatically generated by "gen_configs.py" */
+import type { SiteLocaleData } from '@vuepress/shared'
+import type { DefaultThemeLocaleData } from '@vuepress/theme-default'
+import { head } from '../head.js'
+
+const Translation = require('../../translations/en.json')
+
+export const mainConfig_en: SiteLocaleData = {
+ lang: 'en',
+ title: Translation.title,
+ description: Translation.description,
+ head: head
+}
+
+export const defaultThemeConfig_en: DefaultThemeLocaleData = {
+ selectLanguageName: Translation.theme.selectLanguageName,
+ selectLanguageText: Translation.theme.selectLanguageText,
+ selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel,
+
+ navbar: [
+ {
+ text: Translation.navbar.AboutAndFeatures,
+ link: "/guide/",
+ },
+
+ {
+ text: Translation.navbar.Installation,
+ link: "/guide/installation.md",
+ },
+
+ {
+ text: Translation.navbar.Usage,
+ link: "/guide/usage.md",
+ },
+
+ {
+ text: Translation.navbar.Configuration,
+ link: "/guide/configuration.md",
+ },
+
+ {
+ text: Translation.navbar.ChatBots,
+ link: "/guide/chat-bots.md",
+ },
+ ],
+
+ sidebar: [
+ "/guide/README.md",
+ "/guide/installation.md",
+ "/guide/usage.md",
+ "/guide/configuration.md",
+ "/guide/chat-bots.md",
+ "/guide/creating-bots.md",
+ "/guide/contibuting.md"
+ ],
+
+ // page meta
+ editLinkText: Translation.theme.editLinkText,
+ lastUpdatedText: Translation.theme.lastUpdatedText,
+ contributorsText: Translation.theme.contributorsText,
+
+ // custom containers
+ tip: Translation.theme.tip,
+ warning: Translation.theme.warning,
+ danger: Translation.theme.danger,
+
+ // 404 page
+ notFound: Translation.theme.notFound,
+ backToHome: Translation.theme.backToHome,
+
+ // a11y
+ openInNewWindow: Translation.theme.openInNewWindow,
+ toggleColorMode: Translation.theme.toggleColorMode,
+ toggleSidebar: Translation.theme.toggleSidebar,
+}
diff --git a/docs/.vuepress/configs/l10n_configs/zh-Hans.ts b/docs/.vuepress/configs/l10n_configs/zh-Hans.ts
new file mode 100644
index 00000000..0572c74e
--- /dev/null
+++ b/docs/.vuepress/configs/l10n_configs/zh-Hans.ts
@@ -0,0 +1,75 @@
+/* This file is automatically generated by "gen_configs.py" */
+import type { SiteLocaleData } from '@vuepress/shared'
+import type { DefaultThemeLocaleData } from '@vuepress/theme-default'
+import { head } from '../head.js'
+
+const Translation = require('../../translations/zh-Hans.json')
+
+export const mainConfig_zh_Hans: SiteLocaleData = {
+ lang: 'zh-Hans',
+ title: Translation.title,
+ description: Translation.description,
+ head: head
+}
+
+export const defaultThemeConfig_zh_Hans: DefaultThemeLocaleData = {
+ selectLanguageName: Translation.theme.selectLanguageName,
+ selectLanguageText: Translation.theme.selectLanguageText,
+ selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel,
+
+ navbar: [
+ {
+ text: Translation.navbar.AboutAndFeatures,
+ link: "/zh-Hans/guide/",
+ },
+
+ {
+ text: Translation.navbar.Installation,
+ link: "/zh-Hans/guide/installation.md",
+ },
+
+ {
+ text: Translation.navbar.Usage,
+ link: "/zh-Hans/guide/usage.md",
+ },
+
+ {
+ text: Translation.navbar.Configuration,
+ link: "/zh-Hans/guide/configuration.md",
+ },
+
+ {
+ text: Translation.navbar.ChatBots,
+ link: "/zh-Hans/guide/chat-bots.md",
+ },
+ ],
+
+ sidebar: [
+ "/zh-Hans/guide/README.md",
+ "/zh-Hans/guide/installation.md",
+ "/zh-Hans/guide/usage.md",
+ "/zh-Hans/guide/configuration.md",
+ "/zh-Hans/guide/chat-bots.md",
+ "/zh-Hans/guide/creating-bots.md",
+ "/zh-Hans/guide/contibuting.md"
+ ],
+
+ // page meta
+ editLinkText: Translation.theme.editLinkText,
+ lastUpdatedText: Translation.theme.lastUpdatedText,
+ contributorsText: Translation.theme.contributorsText,
+
+ // custom containers
+ tip: Translation.theme.tip,
+ warning: Translation.theme.warning,
+ danger: Translation.theme.danger,
+
+ // 404 page
+ notFound: Translation.theme.notFound,
+ backToHome: Translation.theme.backToHome,
+
+ // a11y
+ openInNewWindow: Translation.theme.openInNewWindow,
+ toggleColorMode: Translation.theme.toggleColorMode,
+ toggleSidebar: Translation.theme.toggleSidebar,
+}
diff --git a/docs/.vuepress/configs/locales_config.ts b/docs/.vuepress/configs/locales_config.ts
new file mode 100644
index 00000000..2f9c320f
--- /dev/null
+++ b/docs/.vuepress/configs/locales_config.ts
@@ -0,0 +1,16 @@
+/* This file is automatically generated by "gen_configs.py" */
+import type { SiteLocaleConfig } from '@vuepress/shared'
+import type { LocaleConfig } from '@vuepress/shared'
+
+import { mainConfig_en, defaultThemeConfig_en } from './l10n_configs/en.js'
+import { mainConfig_zh_Hans, defaultThemeConfig_zh_Hans } from './l10n_configs/zh-Hans.js'
+
+export const mainConfig: SiteLocaleConfig = {
+ '/': mainConfig_en,
+ '/zh-Hans/': mainConfig_zh_Hans,
+}
+
+export const defaultThemeConfig: LocaleConfig = {
+ '/': defaultThemeConfig_en,
+ '/zh-Hans/': defaultThemeConfig_zh_Hans,
+}
diff --git a/docs/.vuepress/public/favicon.ico b/docs/.vuepress/public/favicon.ico
new file mode 100644
index 00000000..f18867ae
Binary files /dev/null and b/docs/.vuepress/public/favicon.ico differ
diff --git a/docs/.vuepress/public/images/MCC_logo.png b/docs/.vuepress/public/images/MCC_logo.png
new file mode 100644
index 00000000..dc10791f
Binary files /dev/null and b/docs/.vuepress/public/images/MCC_logo.png differ
diff --git a/docs/.vuepress/public/images/MCC_logo_with_edge.png b/docs/.vuepress/public/images/MCC_logo_with_edge.png
new file mode 100644
index 00000000..710d1b13
Binary files /dev/null and b/docs/.vuepress/public/images/MCC_logo_with_edge.png differ
diff --git a/docs/.vuepress/translations/en.json b/docs/.vuepress/translations/en.json
new file mode 100644
index 00000000..9d0681d0
--- /dev/null
+++ b/docs/.vuepress/translations/en.json
@@ -0,0 +1,32 @@
+{
+ "title": "Minecraft Console Client",
+ "description": "Documentation website for the Minecraft Console Client (MCC)",
+ "theme":{
+ "selectLanguageName": "English",
+ "selectLanguageText": "Languages",
+ "selectLanguageAriaLabel": "Select language",
+ "editLinkText": "Edit this page",
+ "lastUpdatedText": "Last Updated",
+ "contributorsText": "Contributors",
+ "tip": "tip",
+ "warning": "warning",
+ "danger": "danger",
+ "notFound": [
+ "There's nothing here.",
+ "How did we get here?",
+ "That's a Four-Oh-Four.",
+ "Looks like we've got some broken links."
+ ],
+ "backToHome": "Take me home",
+ "openInNewWindow": "open in new window",
+ "toggleColorMode": "toggle color mode",
+ "toggleSidebar": "toggle sidebar"
+ },
+ "navbar": {
+ "AboutAndFeatures": "About & Features",
+ "Installation": "Installation",
+ "Usage": "Usage",
+ "Configuration": "Configuration",
+ "ChatBots": "ChatBots"
+ }
+}
diff --git a/docs/.vuepress/translations/zh-Hans.json b/docs/.vuepress/translations/zh-Hans.json
new file mode 100644
index 00000000..1670787d
--- /dev/null
+++ b/docs/.vuepress/translations/zh-Hans.json
@@ -0,0 +1,32 @@
+{
+ "title": "Minecraft命令行客户端",
+ "description": "Minecraft Console Client (MCC) 文档站点",
+ "theme":{
+ "selectLanguageName": "简体中文",
+ "selectLanguageText": "选择语言",
+ "selectLanguageAriaLabel": "选择语言",
+ "editLinkText": "在 GitHub 上编辑此页",
+ "lastUpdatedText": "上次更新",
+ "contributorsText": "贡献者",
+ "tip": "提示",
+ "warning": "注意",
+ "danger": "警告",
+ "notFound": [
+ "这里什么都没有",
+ "我们怎么到这来了?",
+ "这是一个 404 页面",
+ "看起来我们进入了错误的链接"
+ ],
+ "backToHome": "返回首页",
+ "openInNewWindow": "在新窗口打开",
+ "toggleColorMode": "切换颜色模式",
+ "toggleSidebar": "切换侧边栏"
+ },
+ "navbar": {
+ "AboutAndFeatures": "关于 & 特性",
+ "Installation": "安装",
+ "Usage": "使用方法",
+ "Configuration": "配置",
+ "ChatBots": "ChatBots"
+ }
+}
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 00000000..8b7f7aa7
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,22 @@
+---
+home: true
+heroImage: /images/MCC_logo_with_edge.png
+tagline: Minecraft Console Client (MCC) is a lightweight open-source Minecraft Java client implemented in C#
+actions:
+ - text: Installation
+ link: ./guide/installation.md
+ type: primary
+ - text: Learn More →
+ link: ./guide/
+ type: secondary
+actionText:
+actionLink:
+features:
+ - title: Chat
+ details: Chat with other people on the server
+ - title: Automation
+ details: Create bots to do automated tasks
+ - title: Supported Versions
+ details: 1.4 - 1.19.2
+footer: Made by MCC Team with ❤️
+---
diff --git a/docs/guide/README.md b/docs/guide/README.md
new file mode 100644
index 00000000..0b260ea8
--- /dev/null
+++ b/docs/guide/README.md
@@ -0,0 +1,178 @@
+# Introduction
+
+- [About](#about)
+- [Quick Intro (YouTube Videos)](#quick-intro)
+- [Features](#features)
+- [Why Minecraft Console Client?](#why-minecraft-console-client)
+- [Getting Help](#getting-help)
+- [Submitting a bug report or an idea/feature-request](#bugs-ideas-feature-requests)
+- [Important notes on some features](#notes-on-some-features)
+- [Credits](#credits)
+- [Disclaimer](#disclaimer)
+- [License](#license)
+
+## About
+
+**Minecraft Console Client (MCC)** is a lightweight cross-platform open-source **Minecraft** TUI client for **Java edition** that allows you to connect to any Minecraft Java server, send commands and receive text messages in a fast and easy way without having to open the main Minecraft game.
+
+It also provides various automations that you can enable for administration and other purposes, as well as extensible C# API for creating Bots.
+
+It was originally made by [ORelio](https://github.com/ORelio) in 2012 on the [Minecraft Forum](http://www.minecraftforum.net/topic/1314800-/), now it's maintained by him and many other contributors from the community.
+
+## Features
+
+- Chat
+
+ - Send and receive chat messages
+ - [Log chat history](chat-bots.md#chat-log)
+ - [Get alerted on certain keywords](chat-bots.md#alerts)
+ - [Auto Respond](chat-bots.md#auto-respond)
+
+- [Anti AFK](chat-bots.md#anti-afk)
+- [Auto Relog](chat-bots.md#auto-relog)
+- [Script Scheduler](chat-bots.md#script-scheduler)
+- [Remote Control](chat-bots.md#remote-control)
+- [Auto Respond](chat-bots.md#auto-respond)
+- [Auto Attack](chat-bots.md#auto-attack)
+- [Auto Fishing](chat-bots.md#auto-fishing)
+- [Auto Eat](chat-bots.md#auto-eat)
+- [Auto Craft](chat-bots.md#auto-craft)
+- [Mailer Bot](chat-bots.md#mailer)
+- [Auto Drop](chat-bots.md#auto-drop)
+- [Replay Mod](chat-bots.md#replay-mod)
+- [API for creating Bots in C#](creating-bots.md#creating-chat-bots)
+- [Docker Support](installation.md#using-docker)
+- [Inventory Handling](usage.md#inventory)
+- [Terrain Traversing](usage.md#move)
+- Entity Handling
+
+_NOTE: Some of mentioned features are disabled by default and you will have to turn them on in the configuration file and some may require additional configuration on your part for your specific usage._
+
+## Why Minecraft Console Client?
+
+- Easy to use
+- Helpful community
+- Open-Source
+- Fast performance
+- Cross-Platform
+- Docker Support
+- 10 years of continuous development
+- Active contributors
+- Widely used
+
+## Quick Intro
+
+Don't have time to read through the documentation, we got you, our community has made some simple introduction videos about the **Minecraft Console Client**.
+
+### The list of the tutorials:
+
+Installation:
+
+- [Installation on Windows by Daenges](https://www.youtube.com/watch?v=BkCqOCa2uQw)
+- [Installation on Windows + Auto AFK and More by Dexter113](https://www.youtube.com/watch?v=FxJ0KFIHDrY)
+
+Using Commands, Scripts and other features:
+
+- [Minecraft Console Client | Tutorial | Commands, Scripts, AppVars, Matches, Tasks and C# Scripts by Daenges](https://youtu.be/JbDpwwETEnU)
+- [Console Client Tutorial - Scripting by Zixxter](https://www.youtube.com/watch?v=XE7rYBFJxn0)
+
+## Getting Help
+
+MCC has a community that is willing to help, we have a Discussions section in out Git Hub repository.
+
+Click [here](https://github.com/MCCTeam/Minecraft-Console-Client/discussions) to access it.
+
+### Before getting help
+
+- **Please use the search option here or in the discussion section and read the documentation so we avoid duplicate questions. Thank you!**
+- **Please be kind and patient, respect others as they're the ones using their time to help you**
+
+## Bugs, Ideas, Feature Requests
+
+Bug reporting, idea submitting or feature requesting are done in the [Issues](https://github.com/MCCTeam/Minecraft-Console-Client/issues) section of our [Github repository](<[here](https://github.com/MCCTeam/Minecraft-Console-Client)>).
+
+Navigate to the Issues section, search for a bug, idea or a feature using the search option here in the documentation and in the `Issues` section on Git Hub before making your own.
+
+If you haven't found anything similar, go ahead and click on the `New issue` button, then choose what you want to do.
+
+If you're reporting a bug, please be descriptive as much as possible, try to explain how to re-create the bug, attack screenshots and logs, make sure that you have [`debugmessages`](configuration.me#debugmessages) set to `true` before sending a bug report or taking a screenshot.
+
+### Before submitting
+
+- **Please use the search option here or in the `Issues` section and read the documentation so we avoid duplicate questions/ideas/reports. Thank you!**
+- **Please be kind, patient and respect others. Thank you!**
+
+## Notes on some features
+
+### Inventory, Terrain and Entity Handling
+
+Inventory handling is currently not supported in versions: `1.4.6 - 1.9`
+
+Terrain handling is currently not supported in versions: `1.4.6 - 1.6`
+
+Entity handling is currently not supported in versions: `1.4.6 - 1.9` (but `1.8` and `1.9` are being worked on, almost at the working state, only `EntityMetadata` packet remains to be fixed)
+
+There features might not always be implemented in the latest version of the game, since they're often subjected to major changes by Mojang, and we need some time to figure out what has changed and to implement the required changes.
+
+If there was a major game update, and the MCC hasn't been updated to support these features, if you're a programmer, feel free to contribute to the project.
+
+## Credits
+
+_Project initiated by [ORelio](https://github.com/ORelio) in 2012 on the [Minecraft Forum](http://www.minecraftforum.net/topic/1314800-/)._
+
+Many features would not have been possible without the help of our talented community:
+
+**Maintainers**
+
+ORelio, ReinforceZwei, milutinke, BruceChenQAQ, bradbyte
+
+**Ideas**
+
+ambysdotnet, Awpocalypse, azoundria, bearbear12345, bSun0000, Cat7373, dagonzaros, Dids,
+Elvang, fuckofftwice, GeorgH93, initsuj, JamieSinn, joshbean39, LehmusFIN, maski, medxo,
+mobdon, MousePak, TNT-UP, TorchRJ, yayes2, Yoann166, ZizzyDizzyMC and [many more](https://github.com/MCCTeam/Minecraft-Console-Client/issues?q=is%3Aissue+%5BIdea%5D+is%3Aopen).
+
+**Bug Hunters**
+
+1092CQ, ambysdotnet, bearbear12345, c0dei, Cat7373, Chtholly, Darkaegis, dbear20,
+DigitalSniperz, doranchak, drXor, FantomHD, gerik43, ibspa, iTzMrpitBull, JamieSinn,
+k3ldon, KenXeiko, link3321, lyze237, mattman00000, Nicconyancat, Pokechu22, ridgewell,
+Ryan6578, Solethia, TNT-UP, TorchRJ, TRTrident, WeedIsGood, xp9kus, Yoann166 and [many more](https://github.com/MCCTeam/Minecraft-Console-Client/issues?q=is%3Aissue+%5BBUG%5D+is%3Aopen+).
+
+**Contributors**
+
+Allyoutoo, Aragas, Bancey, bearbear12345, corbanmailloux, Daenges, dbear20, dogwatch,
+initsuj, JamieSinn, justcool393, lokulin, maxpowa, medxo, milutinke, Pokechu22,
+ReinforceZwei, repository, TheMeq, TheSnoozer, vkorn, v1RuX, yunusemregul, ZizzyDizzyMC,
+BruceChenQAQ, bradbyte
+_... And all the [GitHub contributors](https://github.com/MCCTeam/Minecraft-Console-Client/graphs/contributors)!_
+
+**Libraries:**
+
+Minecraft Console Client also borrows code from the following libraries:
+
+| Name | Purpose | Author | License |
+| ------------ | ----------------- | ---------------- | ------- |
+| Biko | Proxy handling | Benton Stark | MIT |
+| Heijden.Dns | DNS SRV Lookup | Geoffrey Huntley | MIT |
+| DotNetZip | Zlib compression | Dino Chiesa | MS-PL |
+
+## Disclaimer
+
+Even if everything should work, we are not responsible for any damage this app could cause to your computer or your server.
+This app does not steal your password. If you don't trust it, don't use it or check & compile from the source code.
+
+Also, remember that when you connect to a server with this program, you will appear where you left the last time.
+This means that **you can die if you log in in an unsafe place on a survival server!**
+Use the script scheduler bot to send a teleport command after logging in.
+
+We remind you that **you may get banned** by your server for using this program. Use accordingly with server rules.
+
+## License
+
+Minecraft Console Client is a totally free of charge, open source project.
+The source code is available at [Github Repository](https://github.com/MCCTeam/Minecraft-Console-Client)
+
+Unless specifically stated, source code is from the MCC Team or Contributors, and available under CDDL-1.0.
+More info about CDDL-1.0: [http://qstuff.blogspot.fr/2007/04/why-cddl.html](http://qstuff.blogspot.fr/2007/04/why-cddl.html)
+Full license at [http://opensource.org/licenses/CDDL-1.0](http://opensource.org/licenses/CDDL-1.0)
diff --git a/docs/guide/chat-bots.md b/docs/guide/chat-bots.md
new file mode 100644
index 00000000..1ecacb6f
--- /dev/null
+++ b/docs/guide/chat-bots.md
@@ -0,0 +1,1840 @@
+# Chat Bots
+
+- [About](#about)
+- [List of built-in Chat Bots](#list-of-built-in-chat-bots)
+- [Creating your own](creating-bots.md)
+
+## About
+
+**Minecraft Console Client** has a number of default built in Chat Bots (Scripts/Plugins) which allow for various types of automation.
+
+> **⚠️ IMPORTANT WARNING: Recently we have changed the configuration format from INI to TOML, this part of the documentation has only been partially updated, it's work in progress, for the time being please refer to the `MinecraftClient.ini` for setting names, the descriptions and options should be up to date in most cases, but not guaranteed.**
+
+> **ℹ️ NOTE: Settings refer to settings in the [configuration file](configuration.md)**
+
+## List of built-in Chat Bots
+
+- [Alerts](#alerts)
+- [Anti AFK](#anti-afk)
+- [Auto Attack](#auto-attack)
+- [Auto Craft](#auto-craft)
+- [Auto Dig](#auto-dig)
+- [Auto Drop](#auto-drop)
+- [Auto Eat](#auto-eat)
+- [Auto Fishing](#auto-fishing)
+- [Auto Relog](#auto-relog)
+- [Auto Respond](#auto-respond)
+- [Chat Log](#chat-log)
+- [Follow Player](#follow-player)
+- [Hangman](#hangman)
+- [Mailer](#mailer)
+- [Map](#map)
+- [PlayerList Logger](#playerlist-logger)
+- [Remote Control](#remote-control)
+- [Replay Mod](#replay-mod)
+- [Script Scheduler](#script-scheduler)
+
+## Alerts
+
+- **Description:**
+
+ Get alerted when specified words are detected in the chat
+
+ Useful for moderating your server or detecting when someone is talking to you.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.Alerts`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Alerts Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Beep_Enabled`
+
+ - **Description:**
+
+ This setting specifies if you want to hear a beep when you get an alert.
+
+ > **ℹ️ NOTE: This might not work depending on your system or a console (terminal emulator).**
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `Trigger_By_Words`
+
+ - **Description:**
+
+ Triggers an alert after receiving a specified keyword.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Trigger_By_Rain`
+
+ - **Description:**
+
+ Trigger alerts when it rains and when it stops.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Trigger_By_Thunderstorm`
+
+ - **Description:**
+
+ Triggers alerts at the beginning and end of thunderstorms.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Log_To_File`
+
+ - **Description:**
+
+ Should the Alerts Chat Bot log alerts into a file.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Log_File`
+
+ - **Description:**
+
+ A path to the file where alerts will be logged if `Log_To_File` is set to `true`.
+
+ - **Type:** `string`
+
+ - **Default:** `"alerts-log.txt"`
+
+ #### `Matches`
+
+ - **Description:**
+
+ List of words/strings to alert you on.
+
+ - **Type:** `array of strings`
+
+ - **Example**:
+
+ ```toml
+ Matches = [ "Yourname", " whispers ", "-> me", "admin", ".com", ]
+ ```
+
+ #### `Excludes`
+
+ - **Description:**
+
+ List of words/strings to NOT alert you on.
+
+ - **Type:** `array of strings`
+
+ - **Example**:
+
+ ```toml
+ Excludes = [ "myserver.com", "Yourname>:", "Player Yourname", "Yourname joined", "Yourname left", "[Lockette] (Admin)", " Yourname:", "Yourname is", ]
+ ```
+
+## Anti AFK
+
+- **Description:**
+
+ Send a command and sneak on a regular or random basis or make the bot walk around randomly to avoid automatic AFK disconnection.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AntiAFK`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Anti AFK Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Delay`
+
+ - **Description:**
+
+ The time interval for execution in seconds.
+
+ If the `min` and `max` are the same, the time interval will be consistent.
+ However if they are not the same, the plugin will choose a random number between `min` and `max`, this is useful if you want to have a random interval to trick anti afk plugins.
+
+ - **Format:** `{ min = , max = }`
+
+ - **Type:** `inline table with min and max fields which have type of double`
+
+ - **Default:** `{ min = 60.0, max = 60.0 }`
+
+ #### `Command`
+
+ - **Description:**
+
+ Command to be sent.
+
+ - **Type:** `string`
+
+ - **Default:** `/ping`
+
+ #### `Use_Sneak`
+
+ - **Description:**
+
+ Sometimes you can trick plugins with sneaking or command might not be enough, enable it if you need it.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Use_Terrain_Handling`
+
+ - **Description:**
+
+ Should the bot use [Terrain Handling](configuration.md#terrainandmovements) instead of the command method.
+
+ This will enable your bot to randomly move about, thus a better anti afk effect.
+
+ > **ℹ️ NOTE: You need to enable [Terrain Handling](configuration.md#terrainandmovements) in the settings and it's recommended to put the bot into an enclosure not to wander off. (Recommended size 5x5x5)**
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Walk_Range`
+
+ - **Description:**
+
+ The range which bot will use to walk around (-X to +X and -Z to +Z, Y is not used).
+
+ The bigger the slower the bot might be at calculating the path, recommended 2-5.
+
+ - **Default:** `5`
+
+ #### `Walk_Retries`
+
+ - **Description:**
+
+ This is the number of times the bot will try to pathfind, if he can't find a valid path for 20 times, he will use the command method.
+
+ > **ℹ️ NOTE: This happens on each trigger of the task, so it does not permanently switch to alternative method.**
+
+ - **Default:** `20`
+
+## Auto Attack
+
+- **Description:**
+
+ Automatically attacks mobs around you, you can configure it to attack both hostile and passive mobs and only certain mobs or all mobs.
+
+ > **ℹ️ NOTE: You need to have [inventoryhandling](configuration.md#inventoryhandling) and [entityhandling](configuration.md#entityhandling) enabled in order for this bot to work.**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoAttack`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Attack Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Mode`
+
+ - **Description:**
+
+ Available values:
+
+ - `single`
+
+ Target one mob per attack.
+
+ - `multi`
+
+ Target all mobs in range per attack.
+
+ - **Type:** `string`
+
+ - **Default:** `single`
+
+ #### `Priority`
+
+ - **Description:**
+
+ Available values:
+
+ - `health` (prioritize targeting mobs with lower health)
+ - `distance` (prioritize targeting mobs closer to you)
+
+ - **Type:** `string`
+
+ - **Default:** `distance`
+
+ #### `Cooldown_Time`
+
+ - **Description:**
+
+ How long to wait between each attack in seconds.
+
+ To enable it, set `Custom` (boolean) to `true` and change `value` (double) to your preferred value (eg. `1.5`).
+
+ By the default, this is disabled and the MCC calculates it based on the server TPS.
+
+ - **Format:** `Cooldown_Time = { Custom = , value = }`
+
+ - **Type:** `inline table`
+
+ - **Example:** `Cooldown_Time = { Custom = true, value = 1.5 }`
+
+ - **Default:** `{ Custom = false, value = 1.0 }`
+
+ #### `Interaction`
+
+ - **Description:**
+
+ Available values:
+
+ - `Attack`
+
+ Just attack a mob. (Default)
+
+ - `Interact`
+
+ Just interact with a mob.
+
+ - `InteractAt`
+
+ Interact with and attack a mob.
+
+ - **Type:** `string`
+
+ - **Default:** `Attack`
+
+ #### `Attack_Hostile`
+
+ - **Description:**
+
+ This setting specifies if the Auto Attack Chat Bot should attack hostile mobs.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `Attack_Passive`
+
+ - **Description:**
+
+ This setting specifies if the Auto Attack Chat Bot should attack passive mobs.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `List_Mode`
+
+ - **Description:**
+
+ This setting specifies which mode of the list should Auto Attack Chat Bot use for `Entites_List` setting.
+
+ - **Available values:** `whitelist` (only attack specified mobs) and `blacklist` (do not attack specified mobs).
+
+ - **Type:** `string`
+
+ - **Default:** `whitelist`
+
+ #### `Entites_List`
+
+ - **Description:**
+
+ A list of mobs which are either whitelisted or blacklisted, the mode is set in `List_Mode` setting.
+
+ You can find the full list of mobs [here](https://bit.ly/3Rg68lp).
+
+ - **Format:** `["", "", ...]`
+
+ - **Type:** `array of strings`
+
+ - **Example:** `[ "Spider", "Skeleton", "Pig", ]`
+
+ - **Default:** `[ "Zombie", "Cow", ]`
+
+## Auto Craft
+
+- **Description:**
+
+ Automatically craft items in your inventory or in a crafting table.
+
+ > **ℹ️ NOTE: You need to have [inventoryhandling](configuration.md#inventoryhandling) enabled in order for basic crafting in the inventory to work, in addition if you want to use a crafting table, you need to enable [terrainandmovements](configuration.md#terrainandmovements) in order for bot to be able to reach the crafting table.**
+
+- **Commands:**
+
+ - `/autocraft list`
+
+ List all loaded recipes.
+
+ - `/autocraft start `
+
+ Start the crafting process with the given recipe name you had defined.
+
+ - `/autocraft stop`
+
+ Stop the crafting process.
+
+ - `/autocraft help`
+
+ In-game help command.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoCraft`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Craft Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `CraftingTable`
+
+ - **Description:**
+
+ This setting specifies the location of the crafting table.
+
+ - **Type/Format:**
+
+ This setting is an of an `inline table` type that has the following sub-options/settings;
+
+ - `x` - X coordinate, the type is `double` (eg. `123.0`)
+
+ - `y` - Y coordinate, the type is `double` (eg. `64.0`)
+
+ - `z` - Z coordinate, the type is `double` (eg. `456.0`)
+
+ - **Example:**
+
+ ```toml
+ CraftingTable = { X = 123.0, Y = 65.0, Z = 456.0 }
+ ```
+
+ #### `OnFailure`
+
+ - **Description:**
+
+ This setting specifies what the Auto Craft Chat Bot should do on failure.
+
+ Failure can happen when there are no materials available or when a crafting table can't be reached.
+
+ - **Available values:** `abort` and `wait`.
+
+ - **Type:** `string`
+
+ - **Default:** `abort`
+
+ ### Defining a recipe
+
+ The recipes are defines as a separate new sub-section `[[ChatBot.AutoCraft.Recipes]]` of the `[ChatBot.AutoCraft]` section.
+
+ The `[[ChatBot.AutoCraft.Recipes]]` section needs to contain the following settings:
+
+ - `Name`
+
+ The name of your recipe, can be whatever you like.
+
+ **Type**: `string`
+
+ - `Type`
+
+ **Avaliable values:** `player` and `table`
+
+ > **ℹ️ NOTE: If you're using `table` you need to set the `CraftingTable` setting.**
+
+ - `Result`
+
+ This is the type of resulting item.
+
+ **Type:** `string`
+
+ **Example:** `"StoneBricks"`
+
+ - `Slots`
+
+ This setting is an array/list of material names (strings) that go into an each slot (max 9 elements).
+ Empty slots should be marked with `"Null"`
+
+ **Type:** `array of strings`
+
+ **Format:**
+
+ ```toml
+ Slots = [ "", "", ... ]
+ ```
+
+ > **ℹ️ NOTE: If you have a case where you have to leave some fields empty, use `"Null"` to mark them as empty. Example for stone bricks: `Slots = [ "Stone", "Stone", "Null", "Stone", "Stone", "Null", "Null", "Null", "Null", ]`**
+
+ > **ℹ️ NOTE: All item types can be found [here](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs).**
+
+ **Slots are indexed as following:**
+
+ **`2x2` (Player)**
+
+ ```cs
+ ╔═══╦═══╗
+ ║ 1 ║ 2 ║
+ ╠═══╬═══╣
+ ║ 3 ║ 4 ║
+ ╚═══╩═══╝
+ ```
+
+ **`3x3` (Crafting Table)**
+
+ ```cs
+ ╔═══╦═══╦═══╗
+ ║ 1 ║ 2 ║ 3 ║
+ ╠═══╬═══╬═══╣
+ ║ 4 ║ 5 ║ 6 ║
+ ╠═══╬═══╬═══╣
+ ║ 7 ║ 8 ║ 9 ║
+ ╚═══╩═══╩═══╝
+ ```
+
+ **Full Examples:**
+
+ ```toml
+ # Stone Bricks using the player inventory
+ [[ChatBot.AutoCraft.Recipes]]
+ Name = "Recipe-Name-1"
+ Type = "player"
+ Result = "StoneBricks"
+ Slots = [ "Stone", "Stone", "Stone", "Stone", ]
+
+ # Stone Bricks using a crafting table
+ [[ChatBot.AutoCraft.Recipes]]
+ Name = "Recipe-Name-2"
+ Type = "table"
+ Result = "StoneBricks"
+ Slots = [ "Stone", "Stone", "Null", "Stone", "Stone", "Null", "Null", "Null", "Null", ]
+ ```
+
+ > **ℹ️ NOTE: Make sure to provide materials for your bot by placing them in inventory first.**
+
+## Auto Dig
+
+- **Description:**
+
+ Automatically digs block on specified locations.
+
+ > **ℹ️ NOTE: You need to have [inventoryhandling](configuration.md#inventoryhandling) and [terrainandmovements](configuration.md#terrainandmovements) enabled in order for this bot to work.**
+
+ > **ℹ️ NOTE: Since MCC does not yet support accurate calculation of the collision volume of blocks, all blocks are considered as complete cubes when obtaining the position of the lookahead.**
+
+- **Commands:**
+
+ - `/digbot start` - Starts the digging
+
+ - `/digbot stop` - Stops the digging
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoDig`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Dig Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Mode`
+
+ - **Description:**
+
+ This setting specifies in which mode the Auto Dig Chat Bot will operate.
+
+ - **Available values:**
+
+ - `lookat`
+
+ Digs the block that the bot is looking at.
+
+ - `fixedpos`
+
+ Digs the block in a fixed location/position/coordinate.
+
+ - `both`
+
+ Dig only when the block you are looking at is in the "Locations" list.
+
+ - **Type:** `string`
+
+ - **Default:** `lookat`
+
+ #### `Locations`
+
+ - **Description:**
+
+ This setting specifies an array/list of locations which the bot will dig out.
+
+ - **Type/Format:**
+
+ The type of this setting is an array of inline table which has the following sub-options/settings:
+
+ - `x` - X coordinate, the type is `double` (eg. `123.45`)
+
+ - `y` - Y coordinate, the type is `double` (eg. `64.0`)
+
+ - `z` - Z coordinate, the type is `double` (eg. `234.5`)
+
+ - **Full example:**
+
+ ```toml
+ Locations = [
+ { x = 123.5, y = 64.0, z = 234.5 },
+ { x = 124.5, y = 63.0, z = 235.5 },
+ ]
+ ```
+
+ #### `Location_Order`
+
+ - **Description:**
+
+ This setting specifies in which order the Auto Dig Chat Bot will dig blocks.
+
+ - **Available values:**
+
+ - `distance`
+
+ Digs the block closest to the bot.
+
+ - `index`
+
+ Digs blocks in the list order.
+
+ - **Type:** `string`
+
+ - **Default:** `distance`
+
+ #### `Auto_Start_Delay`
+
+ - **Description:**
+
+ How many seconds to wait after entering the game to start digging automatically.
+
+ Set to `-1` to disable the automatic start.
+
+ - **Type:** `float`
+
+ - **Default:** `3.0`
+
+ #### `Dig_Timeout`
+
+ - **Description:**
+
+ If mining a block takes longer than this value, a new attempt will be made to find a block to mine.
+
+ - **Type:** `float`
+
+ - **Default:** `60.0`
+
+ #### `Log_Block_Dig`
+
+ - **Description:**
+
+ This setting specifies whether to output logs in to the console when digging blocks.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `List_Type`
+
+ - **Description:**
+
+ This setting specifies the mode at which the `Blocks` setting is operating.
+
+ - **Available values:** `whitelist` (only dig specified blocks) and `blacklist` (do not dig specified blocks).
+
+ - **Type:** `string`
+
+ - **Default:** `whitelist`
+
+ #### `Blocks`
+
+ - **Description:**
+
+ This setting specifies the list of blocks which either should not should not be dug out.
+
+ **The list of block types can be found [here](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs).**
+
+ - **Format:** `[ "", "", ...]`
+
+ - **Type:** `array of strings`
+
+ - **Example:** `Blocks = [ "DiamondOre", "RedstoneOre", "EmeraldOre", "RedstoneBlock" ]`
+
+ - **Default:** `[ "Cobblestone", "Stone", ]`
+
+## Auto Drop
+
+- **Description:**
+
+ Automatically drop items you don't need from the inventory.
+
+ > **ℹ️ NOTE: You need to have [inventoryhandling](configuration.md#inventoryhandling) enabled in order for this bot to work**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoDrop`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Drop Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Mode`
+
+ - **Description:**
+
+ This setting specifies the mode of the auto dropping.
+
+ Available values:
+
+ - `include`
+
+ This mode will drop any items specified in the list in the `Items` setting.
+
+ - `exclude`
+
+ This mode will drop any other items than specified in the list in the `Items` setting.
+
+ So it would keep the items specified in the list.
+
+ - `everything`
+
+ Drop any item regardless of the items listed in the `Items` setting.
+
+ - **Type:** `string`
+
+ - **Default:** `include`
+
+ #### `Items`
+
+ - **Description:**
+
+ This setting is where you can specify the list of items which you want to drop, or keep.
+
+ > **ℹ️ NOTE: All item types can be found [here](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs).**
+
+ - **Format:** `[ "- ", "
- ", ...]`
+
+ - **Type:** `array of strings`
+
+ - **Example:** `[ "Totem", "GlassBottle", ]`
+
+ - **Default:** `[ "Cobblestone", "Dirt", ]`
+
+## Auto Eat
+
+- **Description:**
+
+ Automatically eat food when your Hunger value is low.
+
+ > **ℹ️ NOTE: You need to have [inventoryhandling](configuration.md#inventoryhandling) enabled in order for this bot to work**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoEat`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Eat Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Threshold`
+
+ - **Description:**
+
+ Threshold bellow which the bot will auto eat.
+
+ - **Type:** `integer`
+
+ - **Default:** `6`
+
+## Auto Fishing
+
+- **Description:**
+
+ Automatically catch fish using a fishing rod.
+
+ > **ℹ️ NOTE: You need to have [entityhandling](configuration.md#entityhandling) enabled in order for this bot to work.**
+
+ > **ℹ️ NOTE: To use the automatic rod switching and durability check feature, you need to enable [inventoryhandling](configuration.md#inventoryhandling).**
+
+ > **ℹ️ NOTE: Note: To adjust the position or angle after catching a fish, you need to enable [terrainandmovements](configuration.md#terrainandmovements).**
+
+ > **ℹ️ NOTE: A fishing rod with **Mending enchantment** is strongly recommended.**
+
+ **Steps for using this bot (with the default setting)**
+
+ 1. Hold a fishing rod and aim towards the sea before login with MCC
+ 2. Make sure `AutoFish` is `enabled` in config file
+ 3. Login with MCC
+ 4. You will be able to see the log "Fishing will start in 3.0 second(s).".
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoFishing`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Fishing Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Antidespawn`
+
+ - **Description:**
+
+ This option may be used in some special cases, so if it has not been modified before, leave the default value.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Mainhand`
+
+ - **Description:**
+
+ Whether to use the main hand or off hand to hold the rod.
+
+ - **Available values:**
+
+ - `true` (Main Hand)
+ - `false` (Off Hand)
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `Auto_Start`
+
+ - **Description:**
+
+ Whether to start fishing automatically after joining the game or switching worlds.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `Cast_Delay`
+
+ - **Description:**
+
+ Wait how many seconds after successfully catching a fish before recasting the rod.
+
+ - **Type:** `float`
+
+ - **Default:** `0.4`
+
+ #### `Fishing_Delay`
+
+ - **Description:**
+
+ Effective only when `auto_start = true`.
+
+ After joining the game or switching worlds, wait how many seconds before starting to fish automatically.
+
+ - **Type:** `float`
+
+ - **Default:** `3.0`
+
+ #### `Fishing_Timeout`
+
+ - **Description:**
+
+ How long the fish bite is not detected is considered a timeout. It will re-cast after the timeout.
+
+ - **Type:** `float`
+
+ - **Default:** `300.0`
+
+ #### `Durability_Limit`
+
+ - **Description:**
+
+ Will not use rods with less durability than this (full durability is 64).
+
+ Set to zero to disable this feature.
+
+ **Type/Available values:** An integer number from `0` to `64`.
+
+ - **Default:** `2`
+
+ #### `Auto_Rod_Switch`
+
+ - **Description:**
+
+ Switch to a new rod from inventory after the current rod is unavailable.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `Stationary_Threshold`
+
+ - **Description:**
+
+ For each movement of the fishhook entity (entity movement packet), if the distance on both X and Z axes is below this threshold it will be considered as stationary.
+
+ This is to avoid being detected as a bite during the casting of the hook.
+
+ **If set too high, it will cause the rod to be reeled in while casting.**
+
+ **If set too low, it will result in not detecting a bite.**
+
+ - **Type:** `float`
+
+ - **Default:** `0.001`
+
+ #### `Hook_Threshold`
+
+ - **Description:**
+
+ For each movement of the fishhook entity (entity movement packet), if it is stationary (check `stationary_threshold`) and its movement on the Y-axis is greater than this threshold, it will be considered to have caught a fish.
+
+ If it is set too high, it will cause normal bites to be ignored.
+
+ If set too low, it can cause small fluctuations in the hook to be recognized as bites.
+
+ - **Type:** `float`
+
+ - **Default:** `0.2`
+
+ #### `Log_Fish_Bobber`
+
+ - **Description:**
+
+ When turned on it will be print a log every time a fishhook entity movement packet is received.
+
+ If auto-fishing does not work as expected, turn this option on to adjust `stationary_threshold` and `hook_threshold`, or create an issue and attach these logs.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Enable_Move`
+
+ - **Description:**
+
+ Some plugins do not allow the player to fish in one place for a long time. This setting allows the player to change position/angle after each catch.
+
+ Each position is added as a new `[[ChatBot.AutoFishing.Movements]]` subsection, more on that bellow.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ ### Adding a position/movement
+
+ Each position/movement is added as a new `[[ChatBot.AutoFishing.Movements]]` subsection of `[ChatBot.AutoFishing]`.
+
+ **Avaliable settings/options:**
+
+ - `XYZ`
+
+ This setting specifies at location the bot should move to.
+
+ The type of this setting is `inline table`, that has the following sub-settings/options:
+
+ - `x` - X coordinate, the type is `double` (eg. `123.0`)
+
+ - `y` - Y coordinate, the type is `double` (eg. `64.0`)
+
+ - `z` - Z coordinate, the type is `double` (eg. `-654.0`)
+
+ **Example**:
+
+ ```toml
+ XYZ = { x = 123.0, y = 64.0, z = -654.0 }
+ ```
+
+ - `facing`
+
+ This setting specifies at which angle the bot will look at when he arrives to this position/location.
+
+ The type of this setting is `inline table`, that has the following sub-settings/options:
+
+ - `yaw` - The type is `double` (eg. `12.34`)
+
+ - `pitch` - The type is `double` (eg. `-23.45`)
+
+ **Example**:
+
+ ```toml
+ facing = { yaw = 12.34, pitch = -23.45 }
+ ```
+
+ #### Full example
+
+ ```toml
+ [[ChatBot.AutoFishing.Movements]]
+ facing = { yaw = 12.34, pitch = -23.45 }
+
+ [[ChatBot.AutoFishing.Movements]]
+ XYZ = { x = 123.45, y = 64.0, z = -654.32 }
+ facing = { yaw = -25.14, pitch = 36.25 }
+ ```
+
+## Auto Relog
+
+- **Description:**
+
+ Make MCC automatically relog when disconnected by the server, for example because the server is restating.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoRelog`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Relog Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Delay`
+
+ - **Description:**
+
+ The delay time before joining the server.
+
+ If the `min` and `max` are the same, the time will be consistent, however, if you want a random time, you can set `min` and `max` to different values to get a random time.
+ The time format is in seconds, and the type is double. (eg. `37.0`)
+
+ - **Format:** `{ min = , max = }`
+
+ - **Type:** `inline table`
+
+ - **Example:** `{ min = 8.0, max = 60.0 }`
+
+ - **Default:** `{ min = 3.0, max = 3.0 }`
+
+ #### `Retries`
+
+ - **Description:**
+
+ Number of retries.
+
+ Use `-1` for infinite retries.
+
+ > **ℹ️ NOTE: This might get you banned by the server owners.**
+
+ - **Default:** `-1`
+
+ #### `Ignore_Kick_Message`
+
+ - **Description:**
+
+ This settings specifies if the `Kick_Messages` setting will be ignored, if set to `true` it will auto relog regardless of the kick messages.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Kick_Messages`
+
+ - **Description:**
+
+ A list of words which should trigger the Auto Reconnect Chat Bot.
+
+ - **Format:** `[ "", "", ... ]`
+
+ - **Type:** `array of strings`
+
+ - **Default:** `[ "Connection has been lost", "Server is restarting", "Server is full", "Too Many people", ]`
+
+## Auto Respond
+
+- **Description:**
+
+ Run commands or send messages automatically when a specified pattern is detected in the chat.
+
+ > **⚠️ WARNING: Server admins can spoof PMs (`/tellraw`, `/nick`) so enable `AutoRespond` only if you trust server admins.**
+
+ > **⚠️ WARNING: This bot may get spammy depending on your rules, although the global [messagecooldown](configuration.md#messagecooldown) setting can help you avoiding accidental spam.**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.AutoRespond`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Auto Respond Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Matches_File`
+
+ - **Description:**
+
+ This setting specifies the path to the file which contains the list of rules for detecting of keywords and responding on them.
+
+ To find out how to configure the rules, take a look at the [`sample-matches.ini`](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/config/sample-matches.ini) which has very detailed examples and a lot of comments.
+
+ _PS: In the future we will document the rules here with examples too._
+
+ > **ℹ️ NOTE: This file is not created by default, we recommend making a clone of the [`sample-matches.ini`](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/config/sample-matches.ini) and changing it according to your needs.**
+
+ - **Type:** `string`
+
+ - **Default:** `matches.ini`
+
+ #### `Match_Colors`
+
+ - **Description:**
+
+ This setting specifies if the Auto Respond Chat Bot should keep the color formatting send by the server.
+
+ You can use this when you need to match text by colors.
+
+ List of all color codes: [here](https://minecraft.tools/en/color-code.php)
+
+ > **ℹ️ NOTE: This feature uses the `§` symbol for color matching**
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+## Chat Log
+
+- **Description:**
+
+ Make MCC log chat messages into a file.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.ChatLog`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Chat Log Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Default:** `false`
+
+ #### `Add_DateTime`
+
+ - **Description:**
+
+ This setting specifies if the Chat Log should prepend timestamps to the logged messages.
+
+ - **Available values:** `true` and `false`.
+
+ - **Default:** `true`
+
+ #### `Log_File`
+
+ - **Description:**
+
+ This setting specifies the name of the Chat Log file that will be created.
+
+ - **Default:** `chatlog-%username%-%serverip%.txt`
+
+ #### `Filter`
+
+ - **Description:**
+
+ Type of messages to be logged into the file.
+
+ Available values:
+
+ - `all`
+
+ All text from the console
+
+ - `messages`
+
+ All messages, including system, plugin channel, player and server.
+
+ - `chat`
+
+ Only chat messages.
+
+ - `private`
+
+ Only private messages.
+
+ - `internal`
+
+ Only internal messages and commands.
+
+ - **Default:** `messages`
+
+## Follow player
+
+- **Description:**
+
+ This bot enables you to make a bot follow a specific player.
+
+ > **ℹ️ NOTE: The bot can be slow at times, you need to walk with a normal speed and to sometimes stop for it to be able to keep up with you, it's similar to making animals follow you when you're holding food in your hand. This is due to a slow pathfinding algorithm, we're working on getting a better one. You can tweak the update limit and find what works best for you. (NOTE: Do not but a very low one, because you might achieve the opposite, this might clog the thread for terrain handling) and thus slow the bot even more.**
+
+ > **ℹ️ NOTE: You need to have [terrainandmovements](configuration.md#terrainandmovements) and [entityhandling](configuration.md#entityhandling) enabled in order for this bot to work.**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.FollowPlayer`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Follow Player Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Update_Limit`
+
+ - **Description:**
+
+ The rate at which the bot does calculations (second).
+
+ You can tweak this if you feel the bot is too slow.
+
+ - **Type:** `float`
+
+ - **Default:** `1.5`
+
+ #### `Stop_At_Distance`
+
+ - **Description:**
+
+ Do not follow the player if he is in the range of `X` blocks (prevents the bot from pushing a player in an infinite loop).
+
+ - **Type:** `float`
+
+ - **Default:** `3.0`
+
+## Hangman
+
+- **Description:**
+
+ Hangman game is one of the first bots ever written for MCC, to demonstrate ChatBot capabilities.
+
+ Create a file with words to guess (examples: [`words-en.txt`](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/config/hangman-en.txt), [`words-fr.txt`](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/config/hangman-fr.txt)) and set it in config inside the `[Hangman]` section.
+
+ Also set `enabled` to `true`, then, add your username in the `botowners` INI setting, and finally, connect to the server and use `/tell start` to start the game.
+
+ > **ℹ️ NOTE: If the bot does not respond to bot owners, see the [Detecting chat messages](https://github.com/MCCTeam/Minecraft-Console-Client/tree/master/MinecraftClient/config#detecting-chat-messages) section.**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.HangmanGame`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Hangman Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Default:** `false`
+
+ #### `English`
+
+ - **Description:**
+
+ This setting specifies if the Hangman Chat Bot should use English.
+
+ - **Available values:** `true` and `false`.
+
+ - **Default:** `true`
+
+ #### `FileWords_EN`
+
+ - **Description:**
+
+ This setting specifies the path to the file which Hangman will use for the list of words, each word is added on a separate line.
+
+ > **ℹ️ NOTE: This settings file is for English and is not created by the default**
+
+ - **Default:** `hangman-en.txt`
+ - **Example**: [`words-en.txt`](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/config/hangman-en.txt)
+
+ #### `FileWords_FR`
+
+ - **Description:**
+
+ This setting is same as the above but for French.
+
+ > **ℹ️ NOTE: This settings file is for French and is not created by the default**
+
+ - **Default:** `hangman-fr.txt`
+ - **Example**: [`words-fr.txt`](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/config/hangman-fr.txt)
+
+## Mailer
+
+- **Description:**
+
+ Relay messages between players and servers, like a mail plugin.
+
+ This bot can store messages when the recipients are offline, and send them when they join the server.
+
+ The Mailer bot can store and relay mails much like Essential's `/mail` command.
+
+ - `/tell mail [RECIPIENT] [MESSAGE]`: Save your message for future delivery
+ - `/tell tellonym [RECIPIENT] [MESSAGE]`: Same, but the recipient will receive an anonymous mail
+
+ The bot will automatically deliver the mail when the recipient is online.
+ The bot also offers a /mailer command from the MCC command prompt:
+
+ - `/mailer getmails`
+
+ Show all mails in the console.
+
+ - `/mailer addignored [NAME]`
+
+ Prevent a specific player from sending mails.
+
+ - `/mailer removeignored [NAME]`
+
+ Lift the mailer restriction for this player.
+
+ - `/mailer getignored`
+
+ Show all ignored players.
+
+ > **⚠️WARNING: The bot identifies players by their name (Not by UUID!). A nickname plugin or a Minecraft rename may cause mails going to the wrong player! Never write something to the bot you wouldn't say in the normal chat (You have been warned!).**
+
+ > **⚠️WARNING: Server admins can spoof PMs (`/tellraw`, `/nick`) so enable `RemoteControl` only if you trust server admins.**
+
+ **Mailer Network:**
+
+ - The Mailer bot can relay messages between servers.
+
+ - To set up a network of two or more bots, launch several instances with the bot activated and the same database.
+
+ - If you launch two instances from one .exe they should synchronize automatically to the same file.
+
+* **Settings:**
+
+ **Section:** **`ChatBot.Mailer`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Mailer Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `DatabaseFile`
+
+ - **Description:**
+
+ This setting specifies the path to the file where the Mailer Chat Bot will store the mails.
+
+ This file will be auto created by the Mailer Chat Bot.
+
+ - **Default:** `MailerDatabase.ini`
+
+ #### `IgnoreListFile`
+
+ - **Description:**
+
+ This setting specifies the path to the file where the Mailer Chat Bot will load people who are to be ignored by the Chat Bot.
+ If you want to prevent someone from using this chat bot, add him in this file by writing his nickname on a new line.
+
+ This file will be auto created by the Mailer Chat Bot.
+
+ - **Default:** `MailerIgnoreList.ini`
+
+ #### `PublicInteractions`
+
+ - **Description:**
+
+ This setting specifies if the Mailer Chat Bot should be interacted with in the public chat (in addition to private messages).
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `MaxMailsPerPlayer`
+
+ - **Description:**
+
+ This setting specifies how many mails the Mailer Chat Bot should store per player at maximum.
+
+ - **Type:** `integer`
+
+ - **Default:** `10`
+
+ #### `MaxDatabaseSize`
+
+ - **Description:**
+
+ This setting specifies the maximum database file size of Mailer Chat Bot in Kilobytes.
+
+ - **Type:** `integer`
+
+ - **Default:** `10000` (10 MB)
+
+ #### `MailRetentionDays`
+
+ - **Description:**
+
+ This setting specifies how long should the Mailer Chat Bot save/store messages for (in days).
+
+ - **Type:** `integer`
+
+ - **Default:** `30`
+
+## Map
+
+- **Description:**
+
+ This Chat Bot allows you to render items maps into `.jpg` images.
+
+ This is useful for solving captchas on servers which require it, or saving the map art into an image.
+
+ The maps are **rendered** into `Rendered_Maps` folder.
+
+ > **⚠️WARNING: This bot has only been tested on Windows 10, it may not work on Linux or Mac OS due to .NET BitMap API. We're looking forward to swap the underlaying Bitmap API dependency with a library.**
+
+- **Commands:**
+
+ When enabled will add the `/maps` command.
+
+ **Usage**:
+
+ ```
+ /maps
> | maps >
+ ```
+
+- **Settings:**
+
+ **Section:** **`ChatBot.Map`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Map Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Should_Resize`
+
+ - **Description:**
+
+ This setting specifies if the Map Chat Bot should resize the image.
+
+ The default map size is `128x128`.
+
+ > **ℹ️ NOTE: The bigger the size, the less is the quality.**
+
+ > **ℹ️ NOTE: For upscaling your maps you could use (getting a bit better quality): https://deepai.org/machine-learning-model/torch-srgan**
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Resize_To`
+
+ - **Description:**
+
+ Which size the map should be resized to if `Should_Resize` is `true`.
+
+ - **Type:** `integer`
+
+ - **Default:** `256`
+
+ #### `Auto_Render_On_Update`
+
+ - **Description:**
+
+ This setting specifies if the Map Chat Bot should automatically render maps as they're received from the servers.
+
+ > **⚠️WARNING: On some versions older than 1.17 this could cause some performance issue on older hardware if there a lot of maps being rendered, since map updates are sent multiple times a second. Be careful.**
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Delete_All_On_Unload`
+
+ - **Description:**
+
+ This setting specifies if the Map Chat Bot should automatically delete rendered maps when un-loaded or reloaded.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `Notify_On_First_Update`
+
+ - **Description:**
+
+ This setting specifies if the Map Chat Bot should notify you when it got a map from the server for the first time.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+## PlayerList Logger
+- **Description:**
+
+ Log the list of players periodically into a textual file.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.PlayerListLogger`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the PlayerList Logger Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Default:** `false`
+
+ #### `File`
+
+ - **Description:**
+
+ This setting specifies the name of the player list Log file that will be created.
+
+ - **Default:** `playerlog.txt`
+
+ #### `Delay`
+
+ - **Description:**
+
+ Save the list of players every how many seconds.
+
+ - **Type:** `float`
+
+ - **Default:** `60.0`
+
+## Remote Control
+
+- **Description:**
+
+ Send MCC console commands to your bot through server PMs (`/tell`).
+
+ You need to have [ChatFormat](configuration.md#chat-format) working correctly and add yourself in [botowners](configuration.md#botowners) to use the bot.
+
+ > **⚠️WARNING: Server admins can spoof PMs (`/tellraw`, `/nick`) so enable `RemoteControl` only if you trust server admins.**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.RemoteControl`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Remote Control Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `AutoTpaccept`
+
+ - **Description:**
+
+ This setting specifies if the Remote Control Chat Bot should automatically accept teleport requests.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `true`
+
+ #### `AutoTpaccept_Everyone`
+
+ - **Description:**
+
+ This setting specifies if the Remote Control Chat Bot should automatically accept teleport requests from everyone.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+## Replay Capture
+
+- **Description:**
+
+ Enable recording of the game (`/replay start`) and replay it later using the Replay Mod (https://www.replaymod.com/).
+
+ > **⚠️ IMPORTANT: This bot does not work for 1.19, we need maintainers for it.**
+
+ > **ℹ️ NOTE: Please note that due to technical limitations, the client player (you) will not be shown in the replay file**
+
+ > **⚠️ WARNING: You SHOULD use `/replay stop` or exit the program gracefully with `/quit` OR THE REPLAY FILE MAY GET CORRUPT!**
+
+- **Settings:**
+
+ **Section:** **`ChatBot.ReplayCapture`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Replay Mod Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ #### `Backup_Interval`
+
+ - **Description:**
+
+ This setting specifies the time interval in seconds when the replay file should be auto-saved.
+
+ Use `-1` to disable.
+
+ - **Type:** `float`
+
+ - **Default:** `300.0`
+
+## Script Scheduler
+
+- **Description:**
+
+ Schedule commands and scripts to launch on various events such as server join, date/time or time interval.
+
+- **Settings:**
+
+ **Section:** **`ChatBot.ScriptScheduler`**
+
+ #### `Enabled`
+
+ - **Description:**
+
+ This setting specifies if the Script Scheduler Chat Bot is enabled.
+
+ - **Available values:** `true` and `false`.
+
+ - **Type:** `boolean`
+
+ - **Default:** `false`
+
+ ### Defining a task
+
+ - **Description:**
+
+ Each task is defined as a new subsection `[[ChatBot.ScriptScheduler.TaskList]]` of the section: `[ChatBot.ScriptScheduler]`.
+
+ **Subsection format:**
+
+ ```toml
+ [[ChatBot.ScriptScheduler.TaskList]]
+ =
+ =
+ ```
+
+ > **ℹ️ NOTE: It is recommended that you align subsections to the right by one tab or 4 spaces for better readability.**
+
+ **Avaliable settings/options:**
+
+ - `Trigger_On_First_Login`
+
+ Will trigger the task when you login the first time.
+
+ **Available values**: `true` and `false`
+
+ **Type**: `boolean`
+
+ - `Trigger_On_Login`
+
+ Will trigger the task each time you login.
+
+ **Available values**: `true` and `false`
+
+ **Type**: `boolean`
+
+ - `Trigger_On_Times`
+
+ This will enable the task to trigger at exact time(s) you want.
+
+ The type of this setting is `inline table`, that has the following sub-settings/options:
+
+ - `Enable` - Enables/Disables the setting (Boolean, so either `true` or `false`)
+
+ - `Times` - An array/list of times on which the task should run/trigger (each element is of the [Local Time](https://toml.io/en/v1.0.0#local-time) type, eg. `14:00:00`, so: `hours:minutes:seconds`)
+
+ **Example**:
+
+ ```toml
+ Trigger_On_Times = { Enable = true, Times = [ 14:00:00, 22:35:8] }
+ ```
+
+ - `Trigger_On_Interval`
+
+ This will enable the task to trigger at certain interval which you've defined.
+
+ The type of this setting is `inline table`, that has the following sub-settings/options:
+
+ - `Enable` - Enables/Disables the setting (Boolean, so either `true` or `false`)
+
+ - `MinTime` - Time in seconds (the type is `double`, eg. `3.14`)
+
+ - `MaxTime` - Time in seconds (the type is `double`, eg. `3.14`)
+
+ **If `MinTime` and `MaxTime` are the same, the interval will be consistent, however if they are not, the ChatBot will generate a random interval in between those two numbers provided, each time the task is run.**
+
+ **Example**:
+
+ ```toml
+ Trigger_On_Interval = { Enable = true, MinTime = 30.0, MaxTime = 160.0 }
+ ```
+
+ ### Full example
+
+ ```toml
+ [ChatBot.ScriptScheduler]
+ Enabled = true
+
+ [[ChatBot.ScriptScheduler.TaskList]]
+ Task_Name = "Task Name 1"
+ Trigger_On_First_Login = false
+ Trigger_On_Login = false
+ Trigger_On_Times = { Enable = true, Times = [ 14:00:00, ] }
+ Trigger_On_Interval = { Enable = true, MinTime = 3.6, MaxTime = 4.8 }
+ Action = "send /hello"
+
+ [[ChatBot.ScriptScheduler.TaskList]]
+ Task_Name = "Task Name 2"
+ Trigger_On_First_Login = false
+ Trigger_On_Login = true
+ Trigger_On_Times = { Enable = false, Times = [ ] }
+ Trigger_On_Interval = { Enable = false, MinTime = 1.0, MaxTime = 10.0 }
+ Action = "send /login pass"
+ ```
diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md
new file mode 100644
index 00000000..5f6a03b5
--- /dev/null
+++ b/docs/guide/configuration.md
@@ -0,0 +1,1193 @@
+# Configuration
+
+**Minecraft Console Client** can be both configured by the [command line parameters](usage.md#command-line-parameters) and the configuration file.
+
+By the default all of the configurations are stored in the configuration file named `MinecraftClient.ini` which is created the first time you run the program, but you also can specify your own configuration file by providing a path to it as a first parameter when starting the MCC, check out [Usage](usage.md#quick-usage-of-mcc-with-examples) for examples.
+
+> **⚠️ IMPORTANT WARNING: Recently we have changed the configuration format from INI to TOML, the documentation had to be updated. If you spot a mistake, please report it on our Discord or in the repository as an issue.**
+
+## Notes
+
+- Some settings will be omitted from the documentation due to them being not used often, we do not want documentation to be cluttered, we advise you to manually read through the configuration file, where every setting has a description next to it.
+- Some plugin/bot related settings will be covered in the plugins section, not here
+
+## Configuration File
+
+### Format
+
+The configuration file uses the [TOML format](https://toml.io/en/), all of the options are key-value pairs separated into sections.
+
+Sections are defined in-between the square brackets (Example: `[This is a section]`), each occurrence of this marks a beginning of a new section.
+
+The settings/options are defined as key-value pairs, where the name of the setting and the value are separated by the equals sign `=` (Example: `some-setting=some value`).
+
+Lines starting with `#` are comments, they do not have an effect on the configuration of the program, their purpose is purely a descriptive one.
+
+**To get familiar with all the data types and styles of settings please read the [official TOML documenation](https://toml.io/en/v1.0.0).**
+
+Full Example:
+
+```toml
+[SectionNameHere]
+Setting_Name = "this is some name"
+Setting_Something = 15
+
+[OtherSection]
+# This is a comment explaining what this setting/option does
+Other_Setting = true # This also is a comment
+
+[ThirdSection]
+Section_Enabled = true
+colors = [ "red", "yellow", "green" ]
+
+[ThirdSection.Subsection]
+Coordinate = { x = 145, y = 64, y = 2045 }
+```
+
+## Main Section
+
+### Main General section
+
+- **Section header:** `Main.General`
+
+#### `Account`
+
+- **Description:**
+
+ This setting is where you need to provide your in-game name (for offline accounts) or email for Microsoft accounts (Mojang accounts do not work anymore) and your password (if using an offline account, use `-` for the password).
+
+- **Format:**
+
+ `Account = { Login = "", Password = "" }`
+
+- **Type:** `inline table`
+
+- **Example:**
+
+ `Account = { Login = "some.random.player@gmail.com", Password = "myEpicPassword123" }`
+
+#### `Server`
+
+- **Description:**
+
+ This is the setting where you provide the address of the game server, "Host" can be filled in with domain name or IP address. (The "Port" field can be deleted, it will be resolved automatically)
+
+ Host can also fill in the nickname of the server in the "Server List" below.
+
+- **Format:** `Server = { Host = "", Port = }`
+
+- **Type:** `inline table`
+
+- **Example:**
+
+ ```
+ Server = { Host = "mysupercoolserver.com" }
+ ```
+
+ ```
+ Server = { Host = "192.168.1.27", Port = 12345 }
+ ```
+
+ ```
+ Server = { Host = "ServerAlias1" }
+ ```
+
+#### `AccountType`
+
+- **Description:**
+
+ This setting is where you define the type of your account: `mojang` or `microsoft`
+
+ > **ℹ️ NOTE: Mojang accounts are going to stop working soon for everyone, they already are not working for some people.**
+
+- **Type:** `string`
+
+- **Default:** `microsoft`
+
+- **Example:**
+
+ ```
+ AccountType = "microsoft"
+ ```
+
+#### `Method`
+
+- **Description:**
+
+ This setting is where you define the way you will sign in with your Microsoft account, available options are `mcc` and `browser`.
+
+- **Type:** `string`
+
+- **Default:** `mcc`
+
+- **Example:**
+
+ ```
+ Method = "mcc"
+ ```
+
+### Main Advanced section
+
+- **Section header:** `Main.Advanced`
+
+#### `Language`
+
+- **Description:**
+
+ This setting is where you define which language you want to use.
+
+ When connecting to 1.6+ servers, you will need a translation file to display properly some chat messages.
+ These files describe how some messages should be printed depending on your preferred language.
+
+ The client will automatically load `en_GB.lang` from your Minecraft folder if Minecraft is installed on your computer, or download it from Mojang's servers. You may choose another language in the configuration file.
+
+ To find your language code, check [this link](https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239s).
+
+- **Type:** `string`
+
+- **Default:** `en_gb`
+
+- **Example:**
+
+ ```
+ Language = "en_gb"
+ ```
+
+#### `ConsoleTitle`
+
+- **Description:**
+
+ This setting is where you can change the title of the program window if you want to. You can use the variables in it.
+
+- **Type:** `string`
+
+- **Default:** `"%username%@%serverip% - Minecraft Console Client"`
+
+- **Example:**
+
+ ```
+ ConsoleTitle = "%username%@%serverip% - Minecraft Console Client"
+ ```
+
+#### `InternalCmdChar`
+
+- **Description:**
+
+ This setting is where you can change the prefix character of internal MCC commands.
+
+ Available options:
+
+ - `none`
+ - `slash`
+ - `backslash`
+
+- **Type:** `string`
+
+- **Default:** `slash`
+
+- **Example:**
+
+ ```
+ InternalCmdChar = "slash"
+ ```
+
+#### `MessageCooldown`
+
+- **Description:**
+
+ This setting is where you can change the minimum delay in seconds between messages to avoid being kicked for spam.
+
+- **Type:** `float`
+
+- **Default:** `1.0`
+
+#### `BotOwners`
+
+- **Description:**
+
+ This setting is where you can set the owners of the bots/client which can be used by some plugins. The names are separated as strings within an array, separated by commas.
+
+- **Format:**
+
+ ```
+ BotOwners = [ "", "", ... ]
+ ```
+
+- **Type:** `array of strings`
+
+- **Default:** `[ "Player1", "Player2", ]`
+
+- **Example:**
+
+ ```
+ BotOwners = [ "milutinke", "bradbyte", "BruceChen", ]
+ ```
+
+ > **⚠️ WARNING: Admins can impersonate players on versions older than 1.19**
+
+#### `MinecraftVersion`
+
+- **Description:**
+
+ This setting is where you can set the version you are playing on.
+
+- **Format:** `MinecraftVersion = ""`
+
+- **Type:** `string`
+
+- **Version format:** `1.X.X`
+
+- **Type:** `string`
+
+- **Default:** `auto`
+
+- **Example:**
+
+ ```
+ MinecraftVersion = "1.18.2"
+ ```
+
+ > **ℹ️ NOTE: MCC supports only 1.4.6 - 1.19.2**
+
+#### `EnableForge`
+
+- **Description:**
+
+ This setting is where you can define if you're playing on a forge server.
+
+- **Type:** `string`
+
+- **Available options:**
+
+ - `auto`
+ - `no`
+ - `force`
+
+- **Default:** `auto`
+
+ > **ℹ️ NOTE: Force-enabling only works for MC 1.13 +**
+
+#### `BrandInfo`
+
+- **Description:**
+
+ This setting is where you can change how MCC identifies itself to the server.
+ It can be whatever you like, example: `vanilla`, `mcc`, `empty`.
+
+- **Type:** `string`
+
+- **Default:** `mcc`
+
+ > **ℹ️ NOTE: For playing on Hypixel you need to use `vanilla`**
+
+#### `ChatbotLogFile`
+
+- **Description:**
+
+ This setting is where you can set the path to the file which will contain the logs, leave empty for no log file.
+
+- **Type:** `string`
+
+- **Default:** Empty
+
+- **Example:**
+
+ ```
+ ChatbotLogFile = "my-log.txt"
+ ```
+
+#### `PrivateMsgsCmdName`
+
+- **Description:**
+
+ The name of the command which is used for remote control of the bot.
+
+- **Type:** `string`
+
+- **Default:** `tell`
+
+#### `ShowSystemMessages`
+
+- **Description:**
+
+ This setting is where you can define if you want to see the system messages (example command block outputs) if you're an OP.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `ShowXPBarMessages`
+
+- **Description:**
+
+ This setting is where you can define if you want to see the Boss XP Bar messages.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+ > **Note: Can create a spam if there is a bunch of withers**
+
+#### `ShowChatLinks`
+
+- **Description:**
+
+ This setting is where you can define if you want to decode links embedded in chat messages and show them in console.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `ShowInventoryLayout`
+
+- **Description:**
+
+ This setting is where you can define if you want to have the MCC show you the inventory in a form of an ASCII art when using the `/inventory` internal command.
+
+ How it looks like:
+
+ 
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `TerrainAndMovements`
+
+- **Description:**
+
+ This setting is where you can set if you want to enable terrain movement, so you can use command like `/move` and some bots.
+
+ > **⚠️ WARNING: This feature is currently not supported in `1.4.6 - 1.6`.**
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+> **ℹ️ NOTE: Sometimes the latest versions might not support this straight away, since Mojang often makes changes to this.**
+
+#### `InventoryHandling`
+
+- **Description:**
+
+ This setting is where you can set if you want to enable inventory handling using the `/inventory` command.
+
+ > **⚠️ WARNING: This feature is currently not supported in `1.4.6 - 1.9`.**
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `EntityHandling`
+
+- **Description:**
+
+ This setting is where you can set if you want to enable interactions with entities such as players, mobs, minecarts, etc..
+
+ > **⚠️ WARNING: This feature is currently not supported in `1.4.6 - 1.9`.**
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+ > **ℹ️ NOTE: Sometimes the latest versions might not support this straight away, since Mojang often makes changes to this.**
+
+#### `SessionCache`
+
+- **Description:**
+
+ This setting is where you can define is you want your session info to be stored on the disk or in memory, or not to be stored (this will make you login every time which will add some time to the process).
+
+ You can disable this by using `none`.
+
+ The `disk` option will save your login authorization token on the disk, but this can be a bit of a security risk if someone else has access to your folder where you have MCC installed.
+
+ The `memory` will last until you close down the program.
+
+- **Type:** `string`
+
+- **Default:** `disk`
+
+#### `ProfileKeyCache`
+
+- **Description:**
+
+ Same as `SessionCache` but for your profile keys which are used for chat signing and validation.
+
+- **Type:** `string`
+
+- **Default:** `disk`
+
+#### `ResolveSrvRecords`
+
+- **Description:**
+
+ Use `no`, `fast` (5s timeout), or `yes`.
+ Required for joining some servers.
+
+- **Type:** `string`
+
+- **Default:** `fast`
+
+#### `PlayerHeadAsIcon`
+
+- **Description:**
+
+ This setting allows you to set the icon of the program to be the head of your in-game skin.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+ > **ℹ️ NOTE: Only works on Windows XP-8 or Windows 10 with old console**
+
+#### `ExitOnFailure`
+
+- **Description:**
+
+ This setting allows you to define if your want to disable pauses on error, for using MCC in non-interactive scripts
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `CacheScript`
+
+- **Description:**
+
+ This setting allows you to define if your want to have MCC cache compiled scripts for faster load on low-end devices.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `Timestamps`
+
+- **Description:**
+
+ This setting allows you to define if your want to have MCC prepend timestamps to chat messages.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `AutoRespawn`
+
+- **Description:**
+
+ This setting allows you to define if your want to auto respawn if you die.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+ > **ℹ️ NOTE: Make sure the spawn point is safe**
+
+#### `MinecraftRealms`
+
+- **Description:**
+
+ This setting allows you to define if your want to enable support for joining Minecraft Realms.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `MoveHeadWhileWalking`
+
+- **Description:**
+
+ This setting allows you to define if your want to enable head movement while walking to avoid anti-cheat triggers
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `TcpTimeout`
+
+- **Description:**
+
+ This setting allows you to define a custom timeout period in seconds. Use only if you know what you're doing.
+
+- **Type:** `integer`
+
+- **Default:** `30`
+
+#### `EnableEmoji`
+
+- **Description:**
+
+ This setting allows you to disable emojis in the [`chunk`](usage.md#chunk) command.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `MovementSpeed`
+
+- **Description:**
+
+ This setting allows you to change the movement speed of the bot.
+
+- **Type:** `integer`
+
+- **Default:** `2`
+
+> **⚠️ WARNING: A movement speed higher than 2 may be considered cheating by some plugins.**
+
+### Account List section
+
+- **Section header:** `Main.Advanced.AccountList`
+
+- **Description:**
+
+ This section allows you to add multiple accounts so you can switch easily between them on the fly.
+
+- **Usage examples:**
+
+ `/connect Player1`
+
+- **Type:** `array of inline tables`
+
+- **Format:**
+
+ ```toml
+ = { Login = "", Password = "" }
+ ```
+
+- **Examples:**
+
+ ```toml
+ Player1 = { Login = "playerone@email.com", Password = "thepassword" }
+ ```
+
+### Server List section
+
+- **Section header:** `Main.Advanced.ServerList`
+
+- **Description:**
+
+ This section allows you to add multiple server aliases which enables fast and easy switching between servers. Aliases cannot contain dots or spaces, and the name "localhost" cannot be used as an alias.
+
+- **Usage examples:**
+
+ `/connect Server2`
+
+- **Type:** `array of inline tables`
+
+- **Format:**
+
+ ```toml
+ = { Host = "", Port = }
+ ```
+
+- **Examples:**
+
+ ```toml
+ ServerAlias1 = { Host = "mc.awesomeserver.com" }
+ ServerAlias2 = { Host = "192.168.1.27", Port = 12345 }
+ ```
+
+### Signature section
+
+- **Section header:** `Signature`
+
+- **Description:**
+
+ Affects only Minecraft 1.19+.
+ This section contains settings related to a new chat reporting (signing and verifying) feature introduced by Mojang.
+
+#### `LoginWithSecureProfile`
+
+- **Description:**
+
+ Microsoft accounts only. If disabled, will not be able to sign chat and join servers configured with `enforce-secure-profile=true`
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `SignChat`
+
+- **Description:**
+
+ Whether to sign the chat sent from the MCC.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `SignMessageInCommand`
+
+- **Description:**
+
+ Whether to sign the messages contained in the commands sent by the MCC.
+ For example, the message in `/msg` and `/me`
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `MarkLegallySignedMsg`
+
+- **Description:**
+
+ Use green color block to mark chat with legitimate signatures.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `MarkModifiedMsg`
+
+- **Description:**
+
+ Use yellow color block to mark chat that have been modified by the server.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `MarkIllegallySignedMsg`
+
+- **Description:**
+
+ Use red color block to mark chat without legitimate signature.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `MarkSystemMessage`
+
+- **Description:**
+
+ Use gray color block to mark system message (always without signature).
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `ShowModifiedChat`
+
+- **Description:**
+
+ Set to true to display messages modified by the server, false to display the original signed messages.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `ShowIllegalSignedChat`
+
+- **Description:**
+
+ Whether to display chat and messages in commands without legal signature.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+### Logging section
+
+- **Section header:** `Logging`
+
+#### `DebugMessages`
+
+- **Description:**
+
+ This setting allows you to define if your want to see debug messages while the client is running, this is useful when there is a bug and you want to report a problem, or if you're developing a script/bot and you want to debug it.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `ChatMessages`
+
+- **Description:**
+
+ This setting allows you to define if your want to see chat messages.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `InfoMessages`
+
+- **Description:**
+
+ This setting allows you to define if your want to see info messages.
+ Most of the messages from MCC.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `WarningMessages`
+
+- **Description:**
+
+ This setting allows you to define if your want to see warning messages.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `ErrorMessages`
+
+- **Description:**
+
+ This setting allows you to define if your want to see error messages.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `ChatFilterRegex`
+
+- **Description:**
+
+ This setting allows you to define if your want to filter chat messages being logged using a Regex expression.
+
+ More on Regex [here](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference).
+
+- **Type:** `string`
+
+- **Default:** `.*`
+
+ > **ℹ️ NOTE: Not filtering anything by default**
+
+#### `DebugFilterRegex`
+
+- **Description:**
+
+ This setting allows you to define if your want to filter debug messages being logged using a Regex expression.
+
+ More on Regex [here](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference).
+
+- **Type:** `string`
+
+- **Default:** `.*`
+
+ > **ℹ️ NOTE: Not filtering anything by default**
+
+#### `FilterMode`
+
+- **Description:**
+
+ Can be `disable`, `blacklist` or `whitelist`
+
+ "disable" will disable the filter, `blacklist` hides the messages, while the `whitelist` shows the messages that match the Regex expression that you've defined.
+
+- **Type:** `string`
+
+- **Default:** `disable`
+
+#### `LogToFile`
+
+- **Description:**
+
+ This setting allows you to define if your want to log messages to a file.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `LogFile`
+
+- **Description:**
+
+ This setting allows you to define a path to a file where you want to log messages if you have enabled logging to a file with `LogToFile = true`.
+
+- **Type:** `string`
+
+- **Default:** `console-log.txt`
+
+ > **ℹ️ NOTE: %username% and %serverip% will be substituted with your username and the IP address of the server you are connected to. So you can use something like: `console-log-%username%-%serverip%.txt`**
+
+#### `PrependTimestamp`
+
+- **Description:**
+
+ This setting allows you to define if your want prepend timestamps to messages that are written to the log file.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `SaveColorCodes`
+
+- **Description:**
+
+ This setting allows you to define if your want keep the server color codes in the logged messages.
+
+ Example of a color coded message: `§bsome message`
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+## App Vars section
+
+- **Section header:** `AppVar`
+
+- **Description:**
+
+ This section allows you to define your own custom settings/variables which you can use in scripts, bots or other setting fields.
+
+ To define a variable/setting, simply make a new line with the following format under the `[AppVar.VarStirng]` section:
+
+ > **ℹ️ NOTE: `%username%`, `%serverip%`, `%datetime%` are reserved variables**
+
+- **Section header:** `Logging`
+
+- **Examples:**
+
+ ```
+ your_var = "your_value"
+ "your var 2" = "your value 2"
+ ```
+
+## Proxy section
+
+- **Section header:** `Proxy`
+
+- **Description:**
+
+ Connect to a server via a proxy instead of connecting directly.
+
+#### `Enabled_Login`
+
+- **Description:**
+
+ If Mojang session services or Microsoft login services are blocked on your network or your ip is blacklisted or rate limited by Microsoft, set the value to
+ `true`.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `Enabled_Ingame`
+
+- **Description:**
+
+ Whether to connect to the game server through a proxy.
+
+ If connecting to a port 25565 (Minecraft) is blocked on your network, set the value to `true` to login and connect using the proxy.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+ > **⚠️ WARNING: Make sure your server rules allow Proxies or VPNs before setting the setting to `true`, or you may face consequences!**
+
+#### `Server`
+
+- **Description:**
+
+ The proxy server IP and port.
+ Proxy server must allow HTTPS for login, and non-443 ports for playing.
+
+- **Format:**
+
+ ```
+ Server = { Host = "", Port = }
+ ```
+
+- **Default:** `{ Host = "0.0.0.0", Port = 8080 }`
+
+#### `Proxy_Type`
+
+- **Description:**
+
+ The type of your proxy.
+
+ Available options:
+
+ - `HTTPT`
+ - `SOCKS4`
+ - `SOCKS4a`
+ - `SOCKS5`
+
+- **Type:** `string`
+
+- **Default:** `HTTPT`
+
+#### `Username`
+
+- **Description:**
+
+ The proxy account username.
+
+ Only needed for password protected proxies.
+
+- **Default:** ` `
+
+#### `Password`
+
+- **Description:**
+
+ The proxy account password.
+
+ Only needed for password protected proxies.
+
+- **Default:** ` `
+
+## MCSettings section
+
+- **Section header:** `MCSettings`
+
+- **Description:**
+
+ Client settings related to language, render distance, difficulty, chat and skins.
+
+#### `Enabled`
+
+- **Description:**
+
+ This setting allows you to specify if you want to use settings from this section.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `Locale`
+
+- **Description:**
+
+ Use any language implemented in Minecraft
+
+- **Type:** `string`
+
+- **Default:** `en_US`
+
+#### `RenderDistance`
+
+- **Description:**
+
+ Render distance in chunks: `0 - 255`
+
+- **Type:** `integer`
+
+- **Default:** `8`
+
+#### `Difficulty`
+
+- **Description:**
+
+ Available options:
+
+ - `peaceful`
+ - `easy`
+ - `normal`
+ - `difficult`
+
+- **Type:** `string`
+
+- **Default:** `normal`
+
+#### `ChatMode`
+
+- **Description:**
+
+ This setting allows you to effectively mute yourself.
+
+ Available options:
+
+ - `enabled` (You can chat)
+ - `commands` (You can only do commands)
+ - `disabled`
+
+- **Type:** `string`
+
+- **Default:** `enabled`
+
+#### `ChatColors`
+
+- **Description:**
+
+ This setting allows you to disable chat colors.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `MainHand`
+
+- **Description:**
+
+ This setting allows you to specify your main hand.
+
+- **Available values:** `right` and `left`
+
+- **Type:** `string`
+
+- **Default:** `left`
+
+## MCSettings Skin section
+
+- **Section header:** `MCSettings.Skin`
+
+- **Description:**
+
+ Skin options.
+
+#### `Cape`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your skin cape shown.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `Hat`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your skin hat shown.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `Jacket`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your skin jacket shown.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `Sleeve_Left`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your left sleeve shown.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `Sleeve_Right`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your right sleeve shown.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `Pants_Left`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your left part of the pants shown.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `Pants_Right`
+
+- **Description:**
+
+ This setting allows you to specify if you want to have your right part of the pants shown.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+## Chat Format section
+
+- **Section header:** `ChatFormat`
+
+- **Description:**
+
+ The MCC does it best to detect chat messages, but some server have unusual chat formats.
+
+ When this happens, you'll need to configure the chat format yourself using settings from this section.
+
+ The MCC uses Regular Expressions (Regex) to detect the chat formatting, in case that you're not familiar with Regex you can use the following resources to learn it and test it out:
+
+ - Crash courses:
+ - [Regex video tutorial by Web Dev Simplified](https://www.youtube.com/watch?v=rhzKDrUiJVk)
+ - [Regex on paper by Crack Concepts](https://www.youtube.com/watch?v=9RksQ5YT7FM)
+ - In-depth tutorials:
+
+ - [Quite a long and detailed tutorial by Svetlin Nakov](https://www.youtube.com/watch?v=DS9IO0W7-0Q)
+ - [Microsoft Documentation on Regex](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference)
+
+ - Testing Regex expressions online:
+ - [https://regex101.com/](https://regex101.com/)
+ - [https://regexr.com/](https://regexr.com/)
+
+#### `Builtins`
+
+- **Description:**
+
+ This setting allows you to define if your want use the default chat formats.
+
+ Set to `false` to avoid conflicts with custom formats.
+
+- **Type:** `boolean`
+
+- **Default:** `true`
+
+#### `UserDefined`
+
+- **Description:**
+
+ This setting allows you to define if your want to use the custom chat formats defined bellow using Regex.
+
+ Set to `true` to use the custom formats defined in `Public`, `Private` and `TeleportRequest`.
+
+- **Type:** `boolean`
+
+- **Default:** `false`
+
+#### `Public`
+
+- **Description:**
+
+ This setting allows you to specify a custom chat message format using Regex (Regular expressions).
+
+ More on Regex [here](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference).
+
+ Only works when `Builtins` is set to `false`.
+
+- **Type:** `string`
+
+- **Default:** `Public = "^<([a-zA-Z0-9_]+)> (.+)$"`
+
+#### `Private`
+
+- **Description:**
+
+ This setting allows you to specify a custom chat message format for private messages using Regex (Regular expressions).
+
+ More on Regex [here](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference).
+
+ Only works when `Builtins` is set to `false`.
+
+- **Type:** `string`
+
+- **Default:** `Private = "^([a-zA-Z0-9_]+) whispers to you: (.+)$"`
+
+#### `TeleportRequest`
+
+- **Description:**
+
+ This setting allows you to specify a custom chat message format for a Teleport request using Regex (Regular expressions).
+
+ More on Regex [here](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference).
+
+ Only works when `Builtins` is set to `false`.
+
+- **Type:** `string`
+
+- **Default:** `TeleportRequest = '^([a-zA-Z0-9_]+) has requested (?:to|that you) teleport to (?:you|them)\.$'`
diff --git a/docs/guide/contibuting.md b/docs/guide/contibuting.md
new file mode 100644
index 00000000..632c1561
--- /dev/null
+++ b/docs/guide/contibuting.md
@@ -0,0 +1,76 @@
+# Contributing
+
+At this moment this page needs to be created.
+
+For now you can use our article from the [Git Hub repository Wiki](https://github.com/MCCTeam/Minecraft-Console-Client/wiki/Update-console-client-to-new-version) written by [ReinforceZwei](https://github.com/ReinforceZwei).
+
+## Translations
+
+MCC now supports the following languages (Alphabetical order) :
+ * `de.ini` : Deutsch - German
+ * **`en.ini` : English - English**
+ * `fr.ini` : Français (France) - French
+ * `ru.ini` : Русский (Russkiy) - Russian
+ * `vi.ini` : Tiếng Việt (Việt Nam) - Vietnamese
+ * `zh-Hans.ini` : 简体中文 - Chinese Simplified
+ * `zh-Hant.ini` : 繁體中文 - Chinese Traditional
+
+### Add new translation
+
+1. First you need to get the name of the translated file.
+ * Visit [this link](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c) and find the first occurrence of the language you need to translate in the table below.
+ * Use the language code of the row in the table as the name of the translation file.
+ * For example:
+ * `English` -> row `English 0x0009` -> `en` -> `en.ini`
+ * `Chinese (Traditional)` -> row `Chinese (Traditional) 0x7C04` -> `zh-Hant` -> `zh-Hant.ini`
+
+2. Which system languages are recommended to use this translation?
+ * Still check the table in [this link](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c), one language may have multiple rows.
+ * You will need to indicate which language codes this translation applies to.
+ * For example:
+ * Translation `de.ini` applies to `de`, `de-AT`, `de-BE`, `de-DE`, ...
+ * Translation `zh-Hans.ini` applies to `zh-Hans`, `zh`, `zh-CN`, `zh-SG`.
+
+3. Which game languages are recommended to use this translation?
+ * Check out the table in [this link](https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239), where the `Locale Code` column indicates the language code in minecraft.
+ * You will need to indicate which locale codes this translation applies to.
+ * For example:
+ * Translation `fr.ini` applies to `fr_ca`, `fr_fr`.
+ * Translation `zh-Hans.ini` applies to `zh_cn`.
+
+4. Add the new translation to the code. (Optional)
+ * **If you are not familiar with programming, you can skip this step and just write the above information in your PR or issue.**
+ * Add the newly created translation file `xx.ini` to the project `/Resources/lang/xx.ini`.
+ * Open `/DefaultConfigResource.resx`.
+ * Click `Add Resources`.
+ * Choose `/Resources/lang/xx.ini`.
+ * Rename the added resource file in `/DefaultConfigResource.resx` to `Translation_xx`.
+ * Open `/Translations.cs`.
+ * Find `public static Tuple GetTranslationPriority();`
+ * Update the mapping of system language codes to translation files.
+ * Find `public static string[] GetTranslationPriority(string gameLanguage);`
+ * Update the mapping of game locale code to translation files.
+
+5. Follow the section "Update existing translation".
+
+### Update existing translation
+
+1. Visit [the lang folder](https://github.com/MCCTeam/Minecraft-Console-Client/tree/master/MinecraftClient/Resources/lang), download `en.ini` and the language you want to translate(`xx.ini`).
+
+2. Compare `en.ini` and `xx.ini` and update outdated or non-existent entries in `xx.ini`.
+
+3. Once you finished the translation work, submit a pull request or send us the file through an [Issue](https://github.com/MCCTeam/Minecraft-Console-Client/issues) in case you are not familiar with Git.
+
+### Translate README.md
+
+1. Get the English version of the README.md from [here](https://raw.githubusercontent.com/MCCTeam/Minecraft-Console-Client/master/README.md).
+
+2. See `Add new translation -> 1.` for the target language code. Assume it is `xx`.
+
+3. Complete the translation according to the English README.md and name the translated version as `README-xx.md`.
+
+4. In the English README, above the "About" section, add the name of the language and a hyperlink to `README-xx.md`.
+
+## Contributors
+
+[Check out our contributors on Github](https://github.com/MCCTeam/Minecraft-Console-Client/graphs/contributors).
diff --git a/docs/guide/creating-bots.md b/docs/guide/creating-bots.md
new file mode 100644
index 00000000..aac44964
--- /dev/null
+++ b/docs/guide/creating-bots.md
@@ -0,0 +1,172 @@
+# Creating Chat Bots
+
+- [Notes](#notes)
+- [Requirements](#requirements)
+- [Quick Introduction](#quick-introduction)
+- [Examples](#examples)
+- [C# API](#c#-api)
+
+## Notes
+
+> **ℹ️ NOTE: For now this page contains only the bare basics of the Chat Bot API, enough of details to teach you how to make basic Chat Bots. For more details you need to take a look at the [ChatBot.cs](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Scripting/ChatBot.cs) and [Examples](#examples). This page will be improved in the future.**
+
+**Minecraft Console Client** has a rich C# API which allows you to create Chat Bots (effectively plugins) which can help you create complex automations which normal scripts may not be able to do.
+
+## Requirements
+
+- A basic knowledge of C# programming language
+- A text editor
+
+If you're not familiar with the C# programming language, we suggest taking a look at the following resources:
+
+Crash courses:
+
+- [C# Crash Course playlist by Teddy Smit](https://www.youtube.com/watch?v=67oWw9TanOk&list=PL82C6-O4XrHfoN_Y4MwGvJz5BntiL0z0D)
+
+More in-depth:
+
+- [Learn C# Youtube Playlist by Microsoft](https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVxKLQCHpiUWun7vlJJvUiN)
+- [Getting started with C# (An index of tutorials and the documentation) by Microsoft](https://docs.microsoft.com/en-us/dotnet/csharp/)
+
+## Quick Introduction
+
+This introduction assumes that you have the basic knowledge of C#.
+
+> **ℹ️ NOTE: Here we will use terms Chat Bot and Script interchangeably**
+
+Create a new empty file and name it `ExampleChatBot.cs` in the same folder where you have your MCC installed.
+
+Paste the following example code:
+
+```csharp
+//MCCScript 1.0
+
+MCC.LoadBot(new ExampleChatBot());
+
+//MCCScript Extensions
+
+// The code and comments above are defining a "Script Metadata" section
+
+// Every single chat bot (script) must be a class which extends the ChatBot class.
+// Your class must be instantiates in the "Script Metadata" section and passed to MCC.LoadBot function.
+class ExampleChatBot : ChatBot
+{
+ // This method will be called when the script has been initialized for the first time, it's called only once
+ // Here you can initialize variables, eg. Dictionaries. etc...
+ public override void Initialize()
+ {
+ LogToConsole("An example Chat Bot has been initialized!");
+ }
+
+ // This is a function that will be run when we get a chat message from a server
+ // In this example it just detects the type of the message and prints it out
+ public override void GetText(string text)
+ {
+ string message = "";
+ string username = "";
+ text = GetVerbatim(text);
+
+ if (IsPrivateMessage(text, ref message, ref username))
+ {
+ LogToConsole(username + " has sent you a private message: " + message);
+ }
+ else if (IsChatMessage(text, ref message, ref username))
+ {
+ LogToConsole(username + " has said: " + message);
+ }
+ }
+}
+```
+
+Start MCC, connect to a server and run the following internal command: `/script ExampleChatBot.cs`.
+
+If you did everything right you should see: `[Example Chat Bot] An example Chat Bot has been initialised!` message appear in your console log.
+
+### Structure of Chat Bots
+
+Chat Bot (Script) structure is the following:
+
+```
+