GUÍA RÁPIDA · WINDOWS · AULA
Python 3.12.10
uv 0.13.4
Miney 0.7.0
Luanti 5.17.0 (incluido en Miney)
VS Code + extensión Python
INSTALAR
Python
uv
VS Code
CONFIGURAR
Miney
Init
Poderes
Intérp.
PATH
COMPROBAR
Check
INSTALAR
Descarga el instalador de Windows de 64 bits: https://www.python.org/downloads/release/python-31210/
Abre el archivo descargado. Marca Add python.exe to PATH, pulsa Install Now y espera a que termine.
Abre PowerShell (Inicio > escribe PowerShell > Windows PowerShell) y comprueba. Debe indicar Python 3.12.10:
python --version
INSTALAR
En PowerShell, pega la línea completa, pulsa Intro y espera a que termine:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Cierra PowerShell y abre una ventana nueva.
Comprueba. Debe aparecer una versión de uv:
uv --version
INSTALAR
Descarga e instala la versión de Windows: https://code.visualstudio.com/
Abre VS Code (no hace falta iniciar sesión).
Extensiones (barra lateral) > busca Python > la publicada por Microsoft > Instalar.
CONFIGURAR · POWERSHELL, UNO POR UNO
Crea la carpeta:
mkdir C:\MineyAula
Entra en ella:
cd C:\MineyAula
Crea el entorno virtual:
uv venv --python 3.12.10
Instala Miney y espera a que vuelva el prompt:
uv pip install miney==0.7.0
CONFIGURAR
Desde C:\MineyAula:
uv run miney init
Si aparece un menú para elegir el juego, selecciona 1, Minetest Game. La primera vez puede tardar.
Luanti viene incluido: Miney descarga su propia copia. No lo instales por separado.
CONFIGURAR · EN C:\MINEYAULA
Copia de seguridad de world.py:
Copy-Item ".venv\Lib\site-packages\miney\env\world.py" ".venv\Lib\site-packages\miney\env\world.py.bak" -Force
Pega el bloque completo:
@'
from pathlib import Path
import re
archivo = Path(".venv/Lib/site-packages/miney/env/world.py")
contenido = archivo.read_text(encoding="utf-8")
# Limita la búsqueda a la función que genera luanti.conf.
inicio = contenido.find("def write_config(")
if inicio == -1:
raise SystemExit("No se encuentra la función write_config(). No se ha modificado el archivo.")
fin = contenido.find("\ndef ", inicio + 1)
if fin == -1:
fin = len(contenido)
funcion = contenido[inicio:fin]
# Si ya están los dos ajustes dentro de write_config(), no hace nada.
if '"creative_mode = true"' in funcion and '"enable_damage = false"' in funcion:
print("Los ajustes ya están presentes; no se ha cambiado el archivo.")
else:
# Busca la línea por su contenido, sin depender de la línea que viene después.
patron = re.compile(r'(?m)^([ \t]*)"bind_address = 127\.0\.0\.1",\s*$')
coincidencia = patron.search(funcion)
if coincidencia is None:
raise SystemExit("No se encuentra la línea bind_address esperada dentro de write_config(). No se ha modificado el archivo.")
sangria = coincidencia.group(1)
nuevas_lineas = []
if '"creative_mode = true"' not in funcion:
nuevas_lineas.append(sangria + '"creative_mode = true",')
if '"enable_damage = false"' not in funcion:
nuevas_lineas.append(sangria + '"enable_damage = false",')
posicion = inicio + coincidencia.end()
insercion = "\n" + "\n".join(nuevas_lineas)
archivo.write_text(contenido[:posicion] + insercion + contenido[posicion:], encoding="utf-8")
print("Configuración actualizada.")
'@ | uv run python -Crea la carpeta del mod inmortal:
New-Item -ItemType Directory -Force ".miney\worlds\minetest_game\worldmods\inmortal"
Crea mod.conf:
@' name = inmortal description = Protege a los jugadores del daño y permite volar '@ | Set-Content ".miney\worlds\minetest_game\worldmods\inmortal\mod.conf" -Encoding ascii
Crea init.lua:
@'
minetest.register_on_joinplayer(function(jugador)
jugador:set_armor_groups({immortal = 1})
local nombre_jugador = jugador:get_player_name()
local privilegios = minetest.get_player_privs(nombre_jugador)
privilegios.fly = true
minetest.set_player_privs(nombre_jugador, privilegios)
end)
'@ | Set-Content ".miney\worlds\minetest_game\worldmods\inmortal\init.lua" -Encoding asciiArranca el mundo:
uv run miney start
Comprueba en el juego: inventario creativo (tecla I); K activa o desactiva el vuelo, Espacio sube y Mayús/SHIFT baja; sin indicadores de vida y una caída no reduce la salud (desde la altura, desactiva el vuelo).
Ruta final del mod: C:\MineyAula\.miney\worlds\minetest_game\worldmods\inmortal, con mod.conf e init.lua.
CONFIGURAR
Archivo > Abrir carpeta… y abre C:\MineyAula. Declárala como de confianza (puede aparecer una notificación en la barra superior).
Ctrl+Mayús+P > escribe “Python: Select Interpreter” y selecciónalo.
Elige el intérprete de esta ruta, no otro Python del equipo (puede aparecer como “Python 3.12.10 (.venv)”):
C:\MineyAula\.venv\Scripts\python.exe
CONFIGURAR
Abre una terminal de PowerShell en VS Code y ejecuta el bloque:
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
$uvPath = "$env:USERPROFILE\.local\bin"
if (($userPath -split ";") -notcontains $uvPath) {
[Environment]::SetEnvironmentVariable(
"Path",
(($userPath.TrimEnd(";") + ";" + $uvPath).TrimStart(";")),
"User"
)
}Cierra todas las ventanas de VS Code y vuelve a abrirlo.
COMPROBAR
En PowerShell, desde C:\MineyAula:
uv run miney check
Salida similar a esta (el texto exacto puede variar entre versiones):
OK Miney 0.7.0 on Python 3.12.10
OK Luanti 5.17.0 (bundled)
OK World 'minetest_game' (Minetest Game)
OK Miney mod installed and up to date
OK Server running on port 30000
OK Connection talking to Luanti 5.17.0
OK Privilege 'miney' has the 'miney' privilege
OK Content 436 node types, 33 tool types
Everything is ready. Your Python scripts can drive this world.
C:\MineyAula\ ├── .venv\ (entorno de Python del proyecto) └── .miney\ (datos y configuración del entorno Luanti/Miney)
La carpeta .miney puede contener mundos, archivos de ejecución y registros.