Minescript 모드(mod)
Fabric, Forge, NeoForge용 최신 Minescript 모드를 Modrinth 또는 CurseForge에서 다운로드하세요.
Python 스크립트(script)
설치: 아래 zip 파일을 다운로드하고 압축을 해제한 뒤, 포함된 Python (.py) 스크립트를 minescript 폴더(minecraft 폴더 안에 있음)로 이동/복사하세요.
화면에 정렬된 텍스트를 그리는 스크립트입니다.
렌더링(rendering)된 텍스트에서 사용자 지정 가능한 항목은 다음과 같습니다:
- 위치 (x, y)
- 색상 (24비트 16진수 문자열, 예: 0xaabbcc)
- 크기 (기본값 = 4)
요구 사항:
minescript v4.0lib_java v2
독립 실행형 스크립트로서의 사용법:
\draw_text TEXT [X Y [HEX_COLOR [SCALE]]]
명령어로 실행하는 예시:
\draw_text "some text"
\draw_text "Hello, world!" 10 10
\draw_text "green text" 360 10 0x00ff00
\draw_text "hello yellow" 190 100 0xffff00
\draw_text "big red" 200 100 0xff0000 32
가져온 라이브러리로 사용하는 예시:
from draw_text import (draw_string, draw_centered_string)
import time
text = draw_string("some white text", x=20, y=20, color=0xffffff, scale=4)
time.sleep(5)
text.x.set_value(25) # 텍스트를 오른쪽으로 이동합니다.
time.sleep(1)
text.y.set_value(25) # 텍스트를 아래로 이동합니다.
time.sleep(1)
text.color.set_value(0xff0000) # 텍스트 색상을 빨간색으로 변경합니다.
text.string.set_value("now it's red") # 텍스트 문자열을 변경합니다.
time.sleep(2)
v2 업데이트 내용:
– mc1.21.3 지원
Minecraft 채팅에서 Java 리플렉션(reflection)을 사용하는
Python REPL 인터프리터(interpreter)입니다.
config.txt의 command_path 설정 변수가 가리키는 디렉터리 중 하나에
.interpreter_init.py라는 파일이 있으면,
인터프리터 시작 시
해당 스크립트가 로드됩니다.
인터프리터가 실행되면 Minecraft 채팅에 “>>>” 프롬프트가 나타납니다.
터미널에서 Python REPL을 사용할 때와 마찬가지로
Python 문이나 표현식을 입력하세요.
escape 키를 누르거나
Minecraft 명령, 채팅 메시지, Minescript 명령을 입력하기 위해 “>>>” 프롬프트를 삭제하면
인터프리터가 백그라운드로 전환됩니다.
GUI 화면이 하나도 표시되지 않은 상태에서 “i” 키를 누르면
인터프리터가 포그라운드로 전환됩니다.
“>>>” 프롬프트에서 “.”을 입력하면 인터프리터가 종료됩니다.
요구 사항:
minescript v4.0lib_java v2
사용법:
interpreter
Java 리플렉션을 Python에서 사용하기 위한 라이브러리로,
저수준 Java API 스크립트 함수(java_*)를 래핑합니다.
요구 사항:
minescript v4.0
예시:
from minescript import (echo, version_info)
from lib_java import (
JavaClass, java_class_map, java_member_map)
# 심볼이 난독화된 Minecraft 버전을 사용하는 경우
# 아래 예시처럼 이 딕셔너리들에
# 적절한 매핑을 채워 넣으세요:
mc_class_name = version_info().minecraft_class_name
if mc_class_name == "net.minecraft.class_310":
java_class_map.update({
"net.minecraft.client.Minecraft": "net.minecraft.class_310",
})
java_member_map.update({
"getInstance": "method_1551",
"getFps": "method_47599",
})
Minecraft = JavaClass("net.minecraft.client.Minecraft")
minecraft = Minecraft.getInstance()
echo("fps:", minecraft.getFps())
블록(block)으로 구의 표면을 만듭니다.
요구 사항
Minescript v3.1
명령 실행: /setblock, /fill
사용법
\sphere X Y Z RADIUS BLOCK_TYPE
(X, Y, Z) 위치를 중심으로 반지름 RADIUS, 재질 BLOCK_TYPE인 구의 표면을 만듭니다.
버전 2는 BlockPacker와
BlockPack을 사용하여
버전 1보다 훨씬 빠릅니다. 이 두 가지는 Minescript v3.1에서 도입되었습니다.
예시
현재 플레이어(player)를 중심으로 반지름 20, 노란색 콘크리트로 만든 구를 생성합니다:
\sphere ~ ~ ~ 20 yellow_concrete
제작자: maxuser
여러분의 Minecraft 주변 환경을 인식하는 AI 챗봇으로부터 응답을 받으세요.
요구 사항
Minescript v3.1 이상
lib_nbt v1 이상
OpenAI API 키 (chatbot을 실행하고 키 설정 방법에 대한 안내를 따르세요)
사용법
챗봇에 프롬프트를 입력해 한 번만 응답을 받고 종료하려면:
\chatbot PROMPT
챗봇을 백그라운드에서 “대화형 모드”로 실행하여 정규 표현식 PATTERN과 일치하는 메시지에 응답하도록 하며, 대소문자 구분을 무시하거나 챗봇에 이름을 지정하는 옵션도 제공합니다:
\chatbot -i PATTERN [ignorecase] [name=NAME]
대화형 모드에서는 챗봇 출력 앞에 >>>가 붙으며, 채팅에 quitbot을 입력하면 봇을 중지할 수 있습니다.
예시
챗봇에게 질문하고 한 번의 응답을 받으려면:
\chatbot "What am I looking at? And how long until sunrise?"
대소문자 조합에 관계없이 “bot,” 문구가 포함된 채팅 메시지에 응답하도록 챗봇을 대화형으로 실행합니다:
\chatbot -i ".*\bbot,\s" ignorecase
제작자: maxuser
지정한 PNG 이미지를 기반으로 크리에이티브 모드에서 블록을 배치합니다.
요구 사항
Minescript v3.1 이상
pypng (실행: pip install pypng 또는 pip3 install pypng)
사용법
\image_to_blocks <x> <y> <z> <imagePngFile> \
[<depthPngFile> [dscale=<depthScale>]] <orientation>
\image_to_blocks <x> <y> <z> <imageSpecJsonFile> \
[<imagePngFile>] [<depthPngFile> [dscale=<depthScale>]] \
[<orientation>]
imagePngFile에 있는 이미지를 로드하여 이미지의 각 픽셀에 대해
블록을 설정합니다. depthPngFile이 지정된 경우, 그 너비와
높이는 imagePngFile의 너비/높이와 일치해야 하며,
그레이스케일 전용 형식이어야 합니다.
depthScale은 깊이 이미지 값을 나눌 때 사용하는
선택적 계수입니다. 예를 들어 dscale=25.5 값을 사용하면
깊이 이미지 값 255(0은 검정, 255는 흰색)를
10으로 매핑합니다.
orientation은 선택적 +/- 부호가 붙은 월드(world)
차원(dimension)들을 쉼표로 구분한 문자열이어야 합니다. 2D 예시: x,-y는
이미지 x(첫 번째 차원)를 월드 x에, 이미지 y(두 번째
차원)를 월드 -y에 매핑합니다. 3D 예시: x,-z,y는 이미지 x(첫 번째
차원)를 월드 x에, 이미지 y(두 번째 차원)를 월드 -z에,
그리고 이미지 깊이(세 번째 차원)를 월드 y에 매핑합니다.
imageSpecJsonFile은 이미지를 블록으로 변환하기 위한 사양을 패키징하는
편리한 방법으로 사용할 수 있습니다. 파일명은 “.json”으로 끝나야 하며,
다음과 같은 선택적 필드를 가진 JSON 객체를 포함해야 합니다:
orientation, color_map, depth_map, depth_scale,
palette. orientation 필드는 위에서 설명한
orientation 매개변수와 동일한 형식입니다.
color_map과 depth_map 필드는 PNG 파일명을 가리킵니다.
depth_scale 필드는 깊이 값을 축소하기 위한
[0, 255] 범위의 양의 실수입니다.
palette 필드는 min_alpha(범위 [0, 255]의 정수)와
blocks 필드를 가진 JSON 객체의 배열이어야 합니다.
여기서 blocks는 키가 앞에 #을 붙인 문자열로
인코딩한 RGB 값(예: #15b215)이고 값이
green_wool 또는 oak_leaves[persistent=true]와 같은
블록 종류인 객체입니다. image_to_blocks 명령에 전달된
매개변수는 JSON 파일 내 해당 항목보다 우선합니다.
제작자: maxuser
블록 볼륨을 위에서 내려다본 모습(top-down view)을 기준으로 PNG 이미지 파일과 깊이 맵(depth map)을 생성합니다.
요구 사항
Minescript v3.1 이상
lib_blockpack_parser v1 이상
pypng (실행: pip install pypng 또는 pip3 install pypng)
사용법
\blocks_to_image X1 Y1 Z1 X2 Y2 Z2 LABEL [dscale=DSCALE]
(X1, Y1, Z1)에서 (X2, Y2, Z2)까지의
블록 볼륨을 위에서 내려다본 모습에 해당하는 X와 Z 방향의 2D 이미지를 생성합니다.
생성된 이미지는 <LABEL>.png로 명명되며,
함께 <LABEL>-depth.png 위치의 깊이 맵과
메타데이터 파일 <LABEL>.json도 생성되며, 이 파일에는 RGB 색상 값과
블록 종류 간의 매핑을 반영하는 팔레트가 담겨 있습니다.
dscale이 지정되면 Y의 깊이 값이 <DSCALE>만큼 스케일링됩니다.
참고: 각 블록 종류에 대해 고유한 색상이 무작위로 선택됩니다. 향후 버전에서는 블록의 색상과 비슷하게 색상을 선택하도록 개선될 예정입니다.
제작자: maxuser
문자열 형식의 NBT 데이터를 Python 딕셔너리로 파싱하는 라이브러리입니다.
사용법
단독 실행 (채팅창에서 실행):
\lib_nbt <nbtString>
라이브러리(다른 Python 스크립트에서 임포트):
import lib_nbt
python_dictionary = lib_nbt.parse_snbt(nbt_string)
제작자: maxuser
BlockPack 데이터를 파싱하는 라이브러리입니다.
요구 사항
Minescript v3.1 이상
사용법
BlockPackParser를 생성하는 함수:
BlockPackParser.parse_blockpack(blockpack: BlockPack)
BlockPackParser.parse_base64_data(base64_data: str)
BlockPackParser.parse_binary_data(binary_data: bytes)
클래스(class):
class BlockPackParser:
palette: List[str] # 블록 종류의 팔레트
tiles: List[Tile]
class Tile:
offset: BlockPos # 이 타일의 (x, y, z) 오프셋
def iter_fill_params(self) -> Tuple[BlockPos, BlockPos, int]
def iter_setblock_params(self) -> Tuple[BlockPos, int]
예시
(0, 0, 0)에서 (100, 100, 100)까지 블록을 읽어
fill과 setblock 명령으로 채팅에 출력:
from minescript import BlockPack, echo
from lib_blockpack_parser import BlockPackParser
blockpack = BlockPack.read_world((0, 0, 0), (100, 100, 100))
parser = BlockPackParser.parse_blockpack(blockpack)
for tile in parser.tiles:
for pos1, pos2, block in tile.iter_fill_params():
echo(f"fill {pos1} {pos2} {parser.palette[block]}")
for pos, block in tile.iter_setblock_params():
echo(f"setblock {pos} {parser.palette[block]}")
제작자: maxuser
지정한 시각에 메시지를 보내거나 명령을 실행합니다.
요구 사항
- Minescript v2.0 이상
eval동작에는eval.py가 필요
사용법
\timer <time> (chat|echo|execute|eval) <messageOrCommand>
<time>은 시간, 분, 초 단위의 카운트다운이거나 하루 중 특정 시각일 수 있습니다. 지원하는 형식은 다음과 같습니다: 1:23am, 1:23 PM, 13:23, 10s(초), 5m(분), 2h(시간). 카운트다운 시각에 *를 추가하면 반복되며, 예를 들어 5m*는 5분마다 반복됩니다. * 뒤에 숫자를 추가하면 지정한 시간 간격으로 해당 횟수만큼 반복됩니다.
예시
정오 12시에 채팅 메시지 보내기:
\timer 12pm chat "FYI: it is now noon"
12시 30분에 자신에게 메시지 보내기:
\timer 12:30pm echo "note to self: time to eat lunch"
2분 후 “timed_copy”로 표시된 블록 복사하기:
\timer 2m execute "\\copy ~ ~ ~ ~64 ~64 ~64 timed_copy"
(참고: copy 앞의 이중 백슬래시는 큰따옴표 안에서
백슬래시를 이스케이프하기 위해 필요합니다.)
매시간 정오로 게임 시각 설정하기:
\timer 1h* execute "/time set day"
5초 간격으로 스크린샷 3장 찍기:
\timer 5s*3 eval "screenshot()"
(참고: screenshot()은 Minescript v2.1에서 추가됨)
제작자: maxuser
책에 담긴 내용을 Python 코드로 해석하여 실행합니다.
요구 사항
Minescript v2.0 이상
사용법
\execute_book
\execute_book - [<args>]
\execute_book <title> [<args>]
책 기반 스크립트에 전달되는 <args>는 sys.argv로 읽을 수 있습니다.
예시
인자 없이 플레이어 손에 든 책 실행하기:
\execute_book
인자 foo와 bar를 전달하여 플레이어 손에 든 책 실행하기:
\execute_book - foo bar
플레이어 인벤토리(inventory)에 있는 제목이
“my python code”인 책을 인자 없이 실행하기:
\execute_book "my python code"
플레이어 인벤토리에 있는 제목이
“my python code”인 책을 인자 foo와 bar를 전달하여 실행하기:
\execute_book "my python code" foo bar`
제작자: maxuser
블록으로 원기둥의 측면을 만듭니다.
요구 사항
명령 실행(setblock)
사용법
∖cylinder X Y Z RADIUS HEIGHT BLOCK_TYPE
(X, Y, Z) 위치를 중심으로 반지름 RADIUS, 높이 HEIGHT의 BLOCK_TYPE 블록으로 이루어진 원기둥의 측면을 만듭니다.
예시
플레이어의 현재 위치를 중심으로 반지름 20블록, 높이 5블록의 노란색 콘크리트 블록으로 원기둥 만들기:
∖cylinder ~ ~ ~ 20 5 yellow_concrete
제작자: maxuser