Warning: CPython can't build safe sandboxes for arbitrary untrusted code (read more). Never use code in this repo if you don't trust your players!
-
Before you start Minecraft, enable localhost in mod server config
In case of singleplayer it's located inside your saves folder. In case of multiplayer check your server folder.
Edit
computercraft-server.toml
[[http.rules]] host = "127.0.0.0/8" action = "allow" # change here deny to allow
-
Install & start python language server
Choose one of the following:
Docker way:
docker run -it -p 8080:8080 neumond/python-computer-craft
Install & run manually:
pip install computercraft python -m computercraft.server
-
Start Minecraft, open up any computer and type:
wget http://127.0.0.1:8080/ py py
Now you have python REPL in computercraft! To quit REPL type
exit()
and press enter.To run any program:
py program.py # relative to current dir py /path/to/program.py
py
is short Lua program that interacts with the server. cc
module contains almost everything as is in ComputerCraft documentation:
from cc import disk, os disk.eject('right') print(os.getComputerLabel())
Opening a file:
from cc import fs with fs.open('filename', 'r') as f: for line in f: print(line)
Waiting for event (os.captureEvent
instead os.pullEvent
):
from cc import os timer_id = os.startTimer(2) for e in os.captureEvent('timer'): if e[0] == timer_id: print('Timer reached') break
Using modems:
from cc import peripheral modem = peripheral.wrap('back') listen_channel = 5 # this automatically opens and closes modem on listen_channel for msg in modem.receive(listen_channel): print(repr(msg)) if msg.content == 'stop': break else: modem.transmit(msg.reply_channel, listen_channel, msg.content)
Using parallel:
from cc import parallel, os def fn(): os.sleep(2) print('done') parallel.waitForAll(fn, fn, fn)
Importing in-game files as modules:
from cc import import_file p = import_file('/disk/program.py') # absolute m = import_file('lib.py', __file__) # relative to current file
More examples can be found in this repository.