Peurandel 3d3d482e35a54679a3c22d0f505dc661
게임버전 | 1.20.x |
---|
글쓰는 시점의 최신 업데이트인, 1.20.4를 기준으로 한다.
또한, 데이터팩 초보가 사용하기엔 적합하지 않으니, 자신의 실력이 정돈되고 더 나은 코드를 작성하기 위해 보는 것이 아니라면
뒤로가기를 눌러주길 바란다.
개인 스토리지란?
storage uuid:<hex UUID>로, 엔티티의 헥사 UUID를 이용해 해당 개체 전용의 스토리지를 생성하는 것이다.
상당히 여러 방면에서 사용할 수 있으므로 (본인 같은 경우, 개인 창고용으로) 알아두면 좋다.
1.20.4에선 이전 버전과 달리 커스텀 월드를 생성해야한다.
개인 추천인 Void 유형의 커스텀 월드를 미리 만들어 놓자. 또한 해당 커스텀 월드의 0 0 0 좌표에 상자류 블럭이 있으며 그 안엔 container.0에 아무 아이템이나 있다.
해당 청크는 무한 로딩하게 세팅한다.
1. 헥사 UUID 추출 방법
UUID를 단순히 진수 변환 방식으로 바꿀 수도 있겠지만, 매우 비효율적이다.
그렇다면 우린 마크 자체에서 제공하는 UUID 추출기를 사용해야한다.
{
"function": "minecraft:set_name",
"entity": "this",
"name": {
"selector": "@s"
}
}
이런식으로 item_modifier 를 작성한 후에, /loot give @s loot <namespace>:<filename>
명령을 이용한다면 자신의 닉네임 및 헥사 UUID을 쉽게 얻어낼 수 있는데, 오로지 커맨드 실행자가 플레이어가 아닌 그외 엔티티만 작동한다.
이 문제 때문에 우리는 하이브리드로 두 종류의 함수를 작성해야한다.
2. 플레이어 추출기
플레이어의 UUID 추출하는 방식은 다음 과정을 거친다.
미리 생성해둔 커스텀 월드에 마커를 소환 -> 마커의 4개 정수 UUID를 플레이어의 4개 정수 UUID와 일치시킴 -> item_modifier로 해당 마커의 hex UUID를 추출함
우선 storage this:nbt_player nbt.UUID 경로에 플레이어의 4개 정수 UUID를 박아넣는 작업을 거쳐야한다.
그 뒤,
execute as Player in minecraft:(YOUROWNWORLD) run function skript:player1 with storage this:nbt_player nbt
#function skript:player1
$summon marker 0 1 0 {UUID:$(UUID),Tags:[marker.uuid]}
execute as @e[tag=marker.uuid] run function skript:player2
kill @e[tag=marker.uuid]
#function skript:player2
item modify block 0 0 0 container.0 ironman:uuid
function skript:loot_uuid with block 0 0 0 Items[0].tag.display
3. 그외 엔티티 추출
엔티티 추출은 플레이어 추출과 달리 개인 월드를 거치는 과정이 필요가 없다.
function skript:entity
item modify block 0 0 0 container.0 ironman:uuid
function ironman:uuid/loot_uuid with block 0 0 0 Items[0].tag.display
3. 최종 입력
function skript:loot_uuid
$data merge storage uuid:output {Text:$(Name)}
4. 추출
data modify storage your:storage nbt.UUID set from storage uuid:output Text.insertion
를 통해 storage your:storage nbt.UUID에 헥사 UUID를 가져올 수 있다.
--- 수정 2024-03-10 ---
글 형식을 약간 수정했습니다.
loot insert보다 item modifier가 더 최적화가 잘 되어 바꿨습니다.
댓글이 없습니다.
새로운 댓글을 등록해 주세요!