<jupyter_start><jupyter_text>Un poblado real==En este notebook os vamos a mostrar como construir un poblado real con casas de diferentes tamaños, un río, árboles, caminos y otros elementos que se nos vayan ocurriendo. Iremos paso a paso para intentar que sirva para aprender como usar Python con Minecraft. Lo primero que hacemos es conectarnos con el servidor de Minecraft para poderle enviar comandos<jupyter_code>!pip install mcthings
from mcpi import block
from mcpi.minecraft import Minecraft
from mcthings.town import Town

# Nombre del jugador que va a construir las cosas
BUILDER_NAME = "ElasticExplorer"

# Datos del servidor de Minecraft
MC_SEVER_HOST = "minecraft"
MC_SEVER_PORT = 4711

# Nos conectamos al servidor de Minecraft
mc = Minecraft.create(address=MC_SEVER_HOST, port=MC_SEVER_PORT)<jupyter_output><empty_output><jupyter_text>Una vez que nos hemos conectado con el servidor podemos comenzar a crear cosas en él. Para estar seguro de que la conexión está bien, vamos a enviar un mensaje al chat de Minecraft.<jupyter_code>mc.postToChat("Preparando la construccion de una aldea desde Minecraft")<jupyter_output><empty_output><jupyter_text>Si todo ha ido bien, deberías de ver la pantalla de Minecraft:![Hola en Minecraft](img/hola_mc.png "Hola") Lo siguiente que vamos a hacer es construir unas casas sencillas. Para ello, vamos a utilizar el ejemplo que ya tenemos en [el taller de las casas](../8_town.ipynb "casas")<jupyter_code># Tiene que ser mayor que 3
HOUSE_HEIGHT = 3
# Tiene que ser mayor que 4
HOUSE_WIDTH = 5
# Número de casas en la aldea
HOUSES_NUMBER = 3
# Bloque de construcción
HOUSE_BLOCK = block.WOOD

# Si queremos borrar la aldea, sin mover al jugador en Minecraft, 
# volver a ejecutar esta celda poniendo BORRAR=True
CLEAN = False
if CLEAN:
    HOUSE_BLOCK = block.AIR

# Posición desde donde construiremos la aldea
p = mc.entity.getTilePos(mc.getPlayerEntityId(BUILDER_NAME))

# Hacemos la aldea delante del jugador
init_x = p.x + HOUSE_WIDTH/1.5
init_y = p.y
init_z = p.z - HOUSE_WIDTH/2

WIDTH = HOUSE_WIDTH - 1
HEIGHT = HOUSE_HEIGHT - 1

BORRAR=False
if BORRAR:
    HOUSE_BLOCK = block.AIR

# Repetimos por cada casa modificando en que posición construimos
for i in range(0, HOUSES_NUMBER):
    # Las casas están separadas entre si HOUSE_HEIGHT

    init_z = init_z + (HOUSE_WIDTH + HOUSE_HEIGHT)

    # Construimos el bloque principal
    mc.setBlocks(init_x,         init_y,          init_z,
                 init_x + WIDTH, init_y + HEIGHT, init_z + WIDTH,
                 HOUSE_BLOCK)

    # Y lo rellenamos de aire para que pueda ser una casa
    # El grosor de las paredes podemos regularlo
    WALL_WIDTH = 1
    mc.setBlocks(init_x + WALL_WIDTH,         init_y,                       init_z + WALL_WIDTH,
                 init_x + WIDTH - WALL_WIDTH, init_y + HEIGHT - WALL_WIDTH, init_z + WIDTH - WALL_WIDTH,
                 block.AIR)

    # Y le hacemos una puerta
    DOOR_SIZE = 1
    mc.setBlocks(init_x,     init_y,             init_z + WALL_WIDTH,
                 init_x + 1, init_y + DOOR_SIZE, init_z + DOOR_SIZE,
                 block.AIR)<jupyter_output><empty_output><jupyter_text>El resultado debería de ser algo como ![estas casas](img/casas.png "Casas") Estamos creando una biblioteca para facilitar el uso de elementos (things) como las aldeas. Para construir una aldea basta con:<jupyter_code>p = mc.entity.getTilePos(mc.getPlayerEntityId(BUILDER_NAME))
Town(block.BRICK_BLOCK, p, mc).build()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.06546598056032019, 'fraction_numerical': 0.005431675242995998, 'mean_word_length': 3.780054644808743, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '227702', 'license': 'Apache-2.0', 'n_tokens_mistral': 1271, 'n_tokens_neox': 1242, 'n_words': 397, 'path': 'server/data/python/kitchen/real_town.ipynb', 'repo_name': 'raulmarinperez/minecraft', 'size': '3498'}