Skip to main content

Python client for Evocraft

Project description

Evocraft-py

Latest PyPI version Paper Conference

A Python interface for Minecraft built on grpc.

1. Set-up

python -m pip install test-evocraft-py

2. Starting the modded Minecraft server

Using python api

import test_evocraft_py
test_evocraft_py.start_server()
# shutdown
test_evocraft_py.shutdown_server()

Using cli

Usage: test-evocraft-py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  --start / --shutdown  Start or shutdown server
  --interactive         Start server with interactive server console
  --help                Show this message and exit.

3. Spawn blocks on the Minecraft server with Python

There are three methods at the core of the API: spawnBlocks spawns a set of different blocks, fillCube spawns a single type of block over a cubic volume and readCube which reads currently spawned blocks within a space.

If you aren't a seasoned Minecraft scholar, you can check information about different Minecraft blocks.

Here's example on how to spawn a flying machine with python (you'll need to have started the modded Minecraft server before):

import grpc

import minecraft_pb2_grpc
from minecraft_pb2 import *

channel = grpc.insecure_channel('localhost:5001')
client = minecraft_pb2_grpc.MinecraftServiceStub(channel)

client.fillCube(FillCubeRequest(  # Clear a 20x10x20 working area
    cube=Cube(
        min=Point(x=-10, y=4, z=-10),
        max=Point(x=10, y=14, z=10)
    ),
    type=AIR
))
client.spawnBlocks(Blocks(blocks=[  # Spawn a flying machine
    # Lower layer
    Block(position=Point(x=1, y=5, z=1), type=PISTON, orientation=NORTH),
    Block(position=Point(x=1, y=5, z=0), type=SLIME, orientation=NORTH),
    Block(position=Point(x=1, y=5, z=-1), type=STICKY_PISTON, orientation=SOUTH),
    Block(position=Point(x=1, y=5, z=-2), type=PISTON, orientation=NORTH),
    Block(position=Point(x=1, y=5, z=-4), type=SLIME, orientation=NORTH),
    # Upper layer
    Block(position=Point(x=1, y=6, z=0), type=REDSTONE_BLOCK, orientation=NORTH),
    Block(position=Point(x=1, y=6, z=-4), type=REDSTONE_BLOCK, orientation=NORTH),
    # Activate
    Block(position=Point(x=1, y=6, z=-1), type=QUARTZ_BLOCK, orientation=NORTH),
]))

To read the blocks present within a set of coordinates use readCube:

import grpc

import minecraft_pb2_grpc
from minecraft_pb2 import *

channel = grpc.insecure_channel('localhost:5001')
client = minecraft_pb2_grpc.MinecraftServiceStub(channel)

blocks = client.readCube(Cube(
         min=Point(x=0, y=0, z=0),
         max=Point(x=10, y=10, z=10)
))

print(blocks)

You can see the implemented Python methods at minecraft_pb2_grpc.py. For the general grpc definition please see minecraft-rpc.

If you'd like to interface with the server using other languages than Python, you can use the interface definition file you can generate clients for (almost) any programming language you like. See https://grpc.io/docs/languages/ and minecraft-rpc.

4. Rendering Minecraft

You can use the method client.readCube that allows to read which blocks are spawned, however, if you'd like to render Minecraft to see what your spawned creations look like or even interact with them, you'll need to buy and install Minecraft

  1. Install and launch Minecraft
  2. Create a compatible version:
    1. Installations
    2. New
    3. Give it a name
    4. Select version 1.12.2
    5. Create
  3. Launch it:
    1. Play
    2. Multiplayer
    3. Direct Connect
    4. On Server Address write localhost
    5. Join Server

On the server command line, you can use /tp @p x y z to teleport yourself to position {x,y,z} in the world.

5. Useful commands that you can type in the running server console

  • defaultgamemode creative to set the default mode to creative;
  • setworldspawn x y z to set the default player spawn point;
  • time set day to set time to day;
  • gamerule doDaylightCycle false stop the day/night cycle;
  • gamemode creative <player name> set creative mode for a specific player (sometimes the default isn't working);
  • teleport <player name> x y z teleport a player to x,y,z coordinates.

Et voilà:


Evolutionary algorithms implemented with the API

In this section we'll compile implementations of evolutionary algorithms using the API


Citation

If you use the code for academic or commecial use, please cite the associated paper:

@article{Grbic2020Dec,
   author = {Djordje Grbic, Rasmus Berg Palm, Elias Najarro, Claire Glanois, Sebastian Risi},
   title = {{EvoCraft: A New Challenge for Open-Endedness}},
   journal = {arXiv},
   year = {2020},
   month = {Dec},
   eprint = {2012.04751},
   url = {https://arxiv.org/abs/2012.04751v1}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

test_evocraft_py-0.1.7.tar.gz (34.3 MB view details)

Uploaded Source

Built Distribution

test_evocraft_py-0.1.7-py2.py3-none-any.whl (34.3 MB view details)

Uploaded Python 2 Python 3

File details

Details for the file test_evocraft_py-0.1.7.tar.gz.

File metadata

  • Download URL: test_evocraft_py-0.1.7.tar.gz
  • Upload date:
  • Size: 34.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.1

File hashes

Hashes for test_evocraft_py-0.1.7.tar.gz
Algorithm Hash digest
SHA256 c108d25aa5b20f7ae9c31b39e43a98fa6b1fdeba4a549d571fecda8979353c6e
MD5 dba0b6f10d267c7bece5ab08ed44545b
BLAKE2b-256 2f1ecf92bb1407f4942e3b433c09460389dc6486ea2898848a71d7a1ddae85d8

See more details on using hashes here.

File details

Details for the file test_evocraft_py-0.1.7-py2.py3-none-any.whl.

File metadata

  • Download URL: test_evocraft_py-0.1.7-py2.py3-none-any.whl
  • Upload date:
  • Size: 34.3 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.1

File hashes

Hashes for test_evocraft_py-0.1.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e0784ba442cb57ea5266226651ae4cf5e8e545b98e0efeb51a1f311e931c0a79
MD5 7fd42b90d852c3fe3f8653a73276849b
BLAKE2b-256 1cbc0e84e0da07c867cc37bbdb245e069c4e4b8b1f3772e9806459f47b8bd6c4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page