개인 자료란 (JE)

  서버 커뮤니티

Profile 프란델 대표칭호 없음

Peurandel 3d3d482e35a54679a3c22d0f505dc661

Profile

강좌 자바 에디션(JE) 커맨드 응용

데이터팩 데이터 관리 테크닉 - 개인 스토리지

2024.03.08 조회 수 95 추천 수 1
게임버전 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가 더 최적화가 잘 되어 바꿨습니다.





Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/841/773/003/262x150.crop.jpg?20240526120908

레드스톤

마인크래프트 노트블록버전 『 봄을 고하다 (春を告げる) 』 [더블옥타브 버전]

노트블럭전문가

2024-05-26

0

/files/thumbnails/712/796/003/262x150.crop.jpg?20240525085438

레드스톤

마인크래프트 노트블록으로 만든 『 봄을 고하다 (春を告げる) 』 1

Sonttukk

2024-05-25

0

/files/thumbnails/268/789/003/262x150.crop.jpg?20240515192032

레드스톤

벌레먹은 돌 빠르게 제거하는 법

GlassesFilm

2024-05-15

0

/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

1

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견 3

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0