글 난이도 : 하
데이터 팩을 사용할 줄 안다는 전제 하에 글을 쓴다.
이 글을 쓰게 된 계기는 별 것 없음.
그냥 맵고갈이 너무 심해져서 양산형 맵을 너무 빠르게 양산하려다가 발견했음.
ㅇㅇ.. 그냥 쓰던 방식 쓰는 게 좋을 텐데, 맵을 평소보다 16.9배 빠르게 만들어야 한다면 추천함.
사실, 뽑기 자체를 만드는 난이도는 크게 어렵지 않음. 고양이도 아마 할 수 있을 거임.
먼저, 랜덤한 값을 출력하는 명령어를 만들면 되겠지.
스토리지의 이름, 랜덤 출력 범위, 함수 이름 등등은 원하는 대로 변경 가능함. 이 글에서는
스토리지: minecraft:random.value
랜덤 출력 범위: 1~10
으로 하겠음.
/execute store result storage minecraft:random value int 1 run random value 1..10
위 명령어로 minecraft:random 의 value에 1부터 10 사이의 난수를 저장하는 스토리지를 만들어준다.
이제, 데이터 팩을 만든 뒤 함수를 하나 만들어주면 된다.
x,z좌표 중 하나를 골라서 $(value) 로 바꿔줘라. 여기서는 z축을 고르겠음.
$setblock x y $(value) redstone_block
이제, 함수나 연쇄형 커맨드 같은 방식으로 /execute store.. 커맨드와 방금 만든 함수가 연쇄적으로 작동되도록 만들어주면 된다. 단, 함수는 minecraft:random이라는 스토리지의 value 값을 사용하기 때문에, 뒤에 with storage minecraft:random을 붙여야 함.
(반응형) /execute store result storage minecraft:random value int 1 run random value 1..10
(연쇄형) /function (네임스페이스):(함수 이름) with storage minecraft:random
이제, 이 명령어를 사용하게 된다면 x, y, (1부터 10 사이 난수) 값에 해당되는 좌표에 레드스톤 블록이 설치된다.
매개변수를 사용한 반대 축 방향 (글에서는 x축)으로 커맨드를 설치하면 되는데, 상대좌표를 이용하면 편하게 할 수 있음. 단순하게 하자면 이런 식임. (커맨드와 셜커 상자 사이 빈칸이 레드스톤 블록이 설치될 곳임.)
이렇게 하면, 목표 좌표에, 나온 난수 값을 z좌표로 하는 행에 있는 셜커 상자가 설치되겠지.
if score로 노가다를 하기보단, 엑시옴 복붙 딸깍으로 하는 편이 맵 제작을 빠르게 하는 데에는 훨씬 낫지 않을까 하는 생각임.
난 데팩을 쓸거면 완전 데팩화를 좋아하기 때문에 스코어로 저장해놓고 if score ran dom matches n run data merge block x y z {대충셜커상자안의템바꾸는어쩌구저쩌구} 이거를 노가다해서 쓴다 그래도 강의 고맙다 선생님!
노가다할 정도로 맵 개발 시간이 넉넉하지 못하다면 완전 데팩화를 포기하더라도 이렇게 해볼 수 있다. 느낌임. 그리고 data merge보단 item replace가..
item 명령어를 까먹은 것은 밤 갬성 + 숙제 고문 때문임. 조용히 넘어가지 그리고 텍스트 에디터에서 하는 노가다는 컨틀로 CV 하고 숫자만 화살표키 + 인서트로 바꾸면 되기 때문에 커맨드블록 복붙보다 내 기준이지만 편하긴 하더라구
사실 그게 정배가 맞긴 하지? 이거는 길어지면 렌더거리 때문에 버그 무조건 난다