Peon is a minecraft bot written in python. It acts as a replacement for the minecraft client and allows for automation of tasks in the minecraft world. The bot can hunt, mine, gather, defend, eat, etc. He has efficient path finding both for movement and digging.
This version of peon uses fastmc and works with Mincraft 1.8.
git clone https://github.com/dividuum/fastmc.git
cd fastmc
python setup.py install
git clone https://github.com/magahet/peon.git
cd peon
cp settings.cfg.example settings.cfg
Edit settings.cfg with your servername, username, and password.
./autobot -c example/test.yaml
This will log peon in and enable a few sample automated processes. Peon will harvest mature crops within 20m of himself and will gather those crops. He will also defend himself from hostile mobs and eat any available food in his inventory when hungry.
Although autobot.py and the auto action yaml files (described in the next section) allow for many automated tasks, it does not have a comprehensive interface. However, using the python interactive terminal, or IPython (recommended) will make working with peon a lot easier than constantly killing the running autobot.py script. Here is an example session:
# launch autobot.py, connect to the world "local" defined in settings.cfg, and run the auto actions defined in examples.follow.yaml
$ ipython -i autobot.py -- -w local -a examples/follow.yaml
14:11 - INFO - root - logging into [localhost:25565] as [peon]
14:11 - INFO - root - actions: [{'player_name': 'magahet', 'name': 'follow'}]
14:11 - INFO - peon.client - logging in
14:11 - INFO - peon.robot - Eating: Cooked Chicken
Bot(xyz=(-379, 70, 288), health=20.0, food=18, xp=66, enabled_auto_actions=['defend', 'escape', 'fall', 'eat'], active_auto_actions=['eat'])
In [2]: bot.stop('follow')
Out[2]: True
In [3]: bot.start('hunt')
Out[3]: True
14:12 - INFO - peon.robot - hunting entity: Entity(eid=249767, _type=Spider, xyz=(-364, 70, 262))
In [6]: bot.inventory
Out[6]:
Window(id=0, slots=[
...
Slot(item_name="Cobblestone", count=64, damage=0, has_data=False), # 26 main inventory
Slot(item_name="Granite", count=7, damage=1, has_data=False), # 27 main inventory
Slot(item_name="Seeds", count=1, damage=0, has_data=False), # 28 main inventory
Slot(item_name="Sandstone", count=8, damage=0, has_data=False), # 29 main inventory
Slot(item_name="Diamond", count=47, damage=0, has_data=False), # 30 main inventory
Slot(item_name="Cobblestone", count=64, damage=0, has_data=False), # 31 main inventory
Slot(item_name="Cobblestone", count=15, damage=0, has_data=False), # 32 main inventory
The interpreter allows you to manipulate the bot object interactively and allows you to print, list, or get help for attributes and methods. A tutorial on IPython will help with learning how to use these features.
Peon is able to perform a number actions automatically, without blocking the main process. Using autobot.py, you can enable these actions and configure their settings with a configuration yaml file. Examples are available in the examples directory.
The following are some of the actions available. To see the full list look at peon/robots.py. The configuration yaml should be made up of a list of dictionaries describing each action. The name must match the set of actions defined in robots.py. Arguments are those defined by each auto action function and remaining keys are passed to the function as keyword arguments. Look at each function to see the full set of options.
If he's not actively moving and not on the ground, peon will auto update his position downward. Fall is automatically enabled.
If his hunger reaches a set threshold, he will look for food in his inventory and eat it. Eat is automatically enabled.
If hostile mobs enter a 4m radius, he will grab a sword from his inventory, if available, and kill the mob. Peon defends against all hostile mobs by default. Defend is automatically enabled.
He will search the area for certain mob types, navigate to, and kill them.
- name: hunt
mob_types: ['Sheep', 'Zombie'] # list of mobs to hunt
_range: 20 # how far from home to hunt
He will search for objects of a given type and go collect them.
- name: gather
items: # list of items to gather
- Stone
- Sand
_range: 20 # how far from home to search
He will search for grown crops or other block_types to break and collect. Can be used to cut down trees.
- name: harvest
_range: 20 # how far from home to search
Finds, digs to, and mines given block types. He has perfect knowledge of the world, so he digs straight to the resources. There's no searching involved.
- name: mine
block_types:
- Diamond Ore
- Gold Ore
- Iron Ore
Finds and moves to an enchanting table and enchants whatever is available in his inventory. Continues to enchant as long as his xp level is 30+ and has 3+ lapis in his inventory. This works very well when used with defend (next to xp farm), get_enchantables, and store_enchanted.
Gets items from a chest at a given position.
- name: get
items:
- Cooked Chicken
chest_position: [10, 30, 20]
Same as Get, but only gets items that can be enchanted.
Stores items in a chest at a given position.
- name: store
items:
- Diamonds
chest_position: [10, 30, 20]
Same as Store, but only stores items that are enchanted.
Peon will follow a player until this is disabled.
- name: follow
player_name: magahet
Peon keeps track of all the interesting blocks in the world, including mob spawners and end portal blocks. This makes him useful for finding strongholds or good places to build spawner xp farms. In addition, he also has the ability to find clusters of mob spawners. This is done using cluster analysis to find groups of spawners with a centroid 16m or less to each spawner.
bot.world.block_entities
bot.world.get_mob_spawner_clusters()
Peon can clear an area of all solid blocks. The function takes two tuples of (x, y, z) and will clear everything within the bounding box defined by those points. This works both on the surface and underground. As with mining and all such digging, peon will not break any blocks that are adjacent to liquid (water and lava) or below a falling block (sand and gravel).
bot.excavate((1, 1, 1), (5, 5, 5))
This will clear out everything from 1 to 5 on the x, y, and z axises. You can also specify a list of block types to ignore when excavating:
bot.excavate((1, 1, 1), (5, 5, 5), ignore=['Dirt', 'Grass Block'])
This is the opposite of excavate. Peon will fill this area with a given block type, starting from the bottom.
bot.fill((1, 1, 1), (5, 5, 5), block_type='Dirt')
Excavate and fill work well for clearing/flattening areas of land.
So, so much. It would be great to get all the previous peon functionality going again. However, we all have real lives and there are only so many hours in a day. Here are some big items I'm working to get going again:
- clearing land
- farming
- trading
- building
autobot.py returns two objects, client and bot. Run this:
client.respawn()