**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.**
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.
**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)**
**You need to have [inventoryhandling](configuration.md#inventoryhandling) and [entityhandling](configuration.md#entityhandling) enabled in order for this bot to work.**
**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.**
**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", ]`**
**You need to have [inventoryhandling](configuration.md#inventoryhandling) and [terrainandmovements](configuration.md#terrainandmovements) enabled in order for this bot to work.**
**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.**
**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]`.
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`)
**This bot may get spammy depending on your rules, although the global [messagecooldown](configuration.md#messagecooldown) setting can help you avoiding accidental spam.**
**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.**
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._
This Chat Bot allows you to send and receive messages and MCC commands via a Discord channel.
-**Setup:**
In order for this to work you must create a Discord bot on the [Discord Developers portal](https://discord.com/developers/applications/).
First go to [Discord Developers portal](https://discord.com/developers/applications/), click on **New Application**, fill out the name of your bot and confirm the terms of service and click **Create**.
**You must Enable `Message Content Intent`, `Server Members Intent` and `Presence Intent` for the bot to work!**
</div>
Then go to [Discord Permissions Calculator](https://discordapi.com/permissions.html).
Paste the **Application Id** that you've copied into the **Client ID** field, then Check/Enable the **Administrator** field in General Permissions section.
Finally click on the **Link** down bellow and invite the Bot on to a server you want to interact with the MCC on.

Go to your Discord Client and go to **Settings -> Advanced**, Enable **Developer Mode**.
Then **right click** on a server where you invited the bot to in the server list and click on **Copy ID**, paste the copied id in `GuildId` in your MCC configuration.
Then **right click** on a channel where you want to interact with the bot and click on **Copy ID**, paste the copied id in `ChannelId` in your MCC configuration.
Send a message in that channel and **right click** on your nick and click **Copy ID** and paste the copied id in `OwnersIds` list setting in your MCC configuration.
Enable the bot by setting `Enabled` to `true` in your MCC configuration and start the MCC.
-**Usage:**
To send a message simply type it out in the Discord channel and press enter.
To execute a MCC command, you must prefix it with a dot (`.`).
Example: `.move 145 64 832`
-**Settings:**
**Section:****`ChatBot.DiscordBrdige`**
#### `Enabled`
-**Description:**
This setting specifies if the Discord Bridge Chat Bot is enabled.
-**Available values:**`true` and `false`.
-**Type:**`boolean`
-**Default:**`false`
#### `Token`
-**Description:**
This is the token of your Discord bot.
-**Type:**`string`
#### `GuildId`
-**Description:**
This is the ID of your server/guild where you have invited the bot to.
-**Type:**`unsigned long`
#### `ChannelId`
-**Description:**
This is the ID of a channel on your server/guild where you want to interact with the bot.
-**Type:**`unsigned long`
#### `OwnersIds`
-**Description:**
This is a list of Discord user IDs which can interact with the bot.
-**Type:**`list/array of: unsigned long`
#### `PrivateMessageFormat`
-**Description:**
This is a format that will be used when someone has sent you a private message on the server.
Parts of the message that are between `{` and `}` will be replaced by the Chat Bot during runtime, you should not change them in any way!
For example `{message}` will be replaced with an actual message, `{username}` will be replaced with the username of the person who sent a message on the server and `{timestamp}` will be replaced with the current date and time.
For Discord message formatting/styling, refer to [this guide](https://www.writebots.com/discord-text-formatting/).
This is a format that will be used when sending a public message to the Discord channel.
Parts of the message that are between `{` and `}` will be replaced by the Chat Bot during runtime, you should not change them in any way!
For example `{message}` will be replaced with an actual message, `{username}` will be replaced with the username of the person who sent a message on the server and `{timestamp}` will be replaced with the current date and time.
For Discord message formatting/styling, refer to [this guide](https://www.writebots.com/discord-text-formatting/).
-**Type:**`string`
-**Default:**`{username}: {message}`
#### `TeleportRequestMessageFormat`
-**Description:**
This is a format that will be used when someone has sent you a Teleport Request.
Parts of the message that are between `{` and `}` will be replaced by the Chat Bot during runtime, you should not change them in any way!
For example `{message}` will be replaced with an actual message, `{username}` will be replaced with the username of the person who sent a message on the server and `{timestamp}` will be replaced with the current date and time.
For Discord message formatting/styling, refer to [this guide](https://www.writebots.com/discord-text-formatting/).
-**Type:**`string`
-**Default:**`A new Teleport Request from **{username}**!`
**You need to have [Terrain And Movements](configuration.md#terrainandmovements) and [Inventory Handling](configuration.md#inventoryhandling) enabled in order for this bot to work.**
**This a newly added bot, it is not perfect and was only tested in 1.19.2, there are some minor issues with it and you should treat it as an experimental bot.**
When you start it it will plant, break and bonemeal crops in order.
Supported crops:
- Beetroot
- Carrot
- Melon
- Netherwart
- Pumpkin
- Potato
- Wheat
**Current list of issues:**
- Sometimes the bot will not bone meal carrots/potatoes or melon/pumpkin stems (you will see it in a pattern of crops that have not been bonemealed)
- Sometimes the bot can jump on to the crops and break the farmland when coming form a different height, it's advised to keep the farming area flat and fenced off so the items to not fly out of the farming area
- If you have a farming platform that is 1 block thick and has air bellow, make it a few blocks thick because the bot can fall through sometimes when logging in and standing on farmland
- Sometimes the bot can be kicked for "invalid movement" packets when farming netherwart on soul sand, we haven't been able to figure why this happens in some parts of the world, while on other it's completely fine, it's advised to keep the farming area small and flat.
_We're working on solving these issues._
**What the bot does not do as of the time of writing, but are planned features:**
- Does not collect items which fly off to the side, (it's advised to fence off the farming area with 2 high wall)
- Does not put items to the chest once the inventory is full
- Does not warn you when the inventory is full
- Does not refill inventory with seeds or bonemeal from chests by it self.
> **ℹ️ NOTE: The default radius of scanning is `30` blocks, we suggest that you do not use radius too big because it might slow down the bot. The bigger the radius, the slower the scanning and processing is.**
**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.**
**You need to have [terrainandmovements](configuration.md#terrainandmovements) and [entityhandling](configuration.md#entityhandling) enabled in order for this bot to work.**
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 <bot username> start` to start the game.
**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.**
**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!).**
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 Chat Bot allows you to render items maps in the console, to `.bmp` images and to relay them to Discord using the [Discord Bridge](#discord-bridge) Chat Bot.
**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.**
**Might be a bit slow on less powerful systems when rendering a lot of maps. Lower down the resolution if you have any performance issues. If your system is not that powerful and can't handle it, use external tools for upscaling and resizing.**
</div>
-**Description:**
Which size the map should be resized to if `Rasize_Rendered_Image` is `true`.
**Sometimes when the client connects, the [Discord Bridge](#discord-bridge) will be loaded a tiny bit after. Rendered map images are queued up and sent in order as soon as the [Discord Bridge](#discord-bridge) is ready and connected.**
</div>
-**Description:**
Send a rendered map (saved to a file) to a Discord channel via the [Discord Bridge](#discord-bridge) Chat Bot.
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.
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`)
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.**