응 아니야

안녕하세요. 당이천입니다.

 

이번 절은 제 2절로 /data get에 이은 merge입니다.

 

/data merge 

merge는 '병합(倂合)'정도로 번역하는데 비어있는(같은 것이 없는) 상황이라면 추가, 같은 경로이되 값이 다르다면 덮어쓰기가 되는 '수정' 정도로 인식하시면 됩니다. 다만 경로가 같고 값도 같으면 이미 해당 값이므로 명령어 실행에 실패합니다.

 

하위 인자로는 get과 마찬가지로 block / entity / storage가 있습니다.

/data merge block 16 -63 -6 {Items:[id:"minecraft:gold_ingot",Count:1b,Slot:0b}]}

1절에서 썼던 맵 그대로, 상자도 그대로 놓고 안의 아이템을 모두 뺀 채로 실행해봅니다.

 

저는 예를 들기 위해서 0번 슬롯에 레드스톤 블록을 놓고 실행했고, 0번 슬롯을 금 주괴로 병합하는 명령어를 사용하였으므로 덮어씌워져서 레드스톤 블록이 금 주괴로 바뀌었습니다.

 

merge는 사실 이것이 전부입니다.

 

그냥 원하는 값을 입력하면 됩니다. json 양식에 따라서요.

 

혹여 양식은 아는데 어떤 경로가 있는지 모르겠다면 1절에서 배운 /data get 명령어로 같은 대상을 미리 불러와 경로를 확인하고 쓰시면 됩니다.

 

/data merge block 0.0 0.0 0.0 {abc:"def"}

/data merge entity @e[type=pig,limit=1,sort=nearest] {abc:"def"}

/data merge storage test {abc:"def"}

 

블록엔티티가 되었든, 엔티티가 되었든, 스토리지가 되었든.. 값이 저장될 대상을 불문하고 입력하고자 하는 값을 경로상 이름과 함께 빠짐없이 써넣기만 하면 정상적으로 실행되니까요.

 

/data merge entity @e[type=villager,limit=1,sort=nearest] {ArmorItems:[{},{},{},{id:"minecraft:gold_ingot",Count:1b,Slot:3}]}

/data get entity @e[type=villager,limit=1,sort=nearest] ArmorItems.[3]

 

첫줄 명령어의 armoritems(착용 중인 장비)에 중괄호로 {발},{다리},{상체}를 비우고 {머리}부분만 채운 것처럼, 일정한 순서를 가지고 저장되는 경우에는 똑같이 순서를 지켜서 넣어주기만하면 됩니다.

 

쓰면서 느끼지만, 이 명령어는 기존의 값을 수정한다기 보다는 없는 경로와 값을 추가하는 용도로 사용하는 것이 옳은 선택인 것 같습니다.

 

/data remove

저장된 값을 지우는 명령어입니다.

마찬가지로 block / entity / storage가 있으며 하위인자로 대상(좌표,대상선택인자,저장소이름)과 경로가 있습니다.

 

금 주괴와 주민 생성 알을 넣고 Items를 지우면 아이템이 사라집니다.

 

/data remove block 16 -63 -6 Items

잘 지워졌습니다.

 

/data get과 작동방식이 똑같습니다. 대상을 지정하고 경로를 입력하면 되죠.

 

3개의 아이템을 넣고

 

아이템 중 0번 인덱스에 있는 아이템을 제거합니다.

정말 지워졌을까요?

 

네. 잘 지워졌습니다.

 

근데 0번 슬롯이 아니라 0번 인덱스라고 했습니다. [0]이라고 했으니까요.

 

3줄 9칸 총 27칸의 상자에 아이템이 3개였으므로 인덱스는 0,1,2가 맞습니다. 상자의 어느 슬롯에 들어있더라도 [0],[1],[2]입니다. 0번이 지워지든 1번이 지워지든 2번이 지워지든 결국 하나가 지워지면 2개가 되고 인덱스는 다시 [0]과 [1]이되는 즉, 앞으로 당겨지므로 /data remove block 16 -63 -6 Items.[0]를 다시 입력하면 과녁 아이템이 지워져버립니다.

 

특정 갯수만 남기고 제거할 수는 없습니다. Count 값을 찾아서 지우더라도... count가 통째로 지워지기 때문에 아이템이 없는 것으로 취급되어 아이템이 사라집니다.

 

이럴 때는 플레이어의 아이템만을 삭제하는 clear를 사용하는 것이 아니라 제거할 아이템의 인덱스를 계산하여 제거하고 그리고나서 위에서 배운 /data merge를 사용하여 Count 값을 원하는 갯수로 수정하여야 합니다.

 

이러한 이유로 get과 remove가 같은 방식으로 작동하더라도 merge 절에 묶어서 이 글을 게시합니다.

 

감사합니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band