개인 자료란 (JE)

  서버 커뮤니티

Profile 커피콩 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

type of item 출력값을 한글로 바꿀 수 있을까요? 가능합니다.

21 일 전 조회 수 80 추천 수 0
분야 스크립트 
게임버전 모든버전, 1.21.x 
API 페이퍼 

안녕하십니까. 갑자기 심심해서 스크립트를 다시 잡은 커피콩입니다.

아~~주 옛날에 변동좌표를 계산하는 roll(z축 회전) 값을 강제로 만들었었습니다. 좀 많이 되긴 했는데;; 거두절미하고


이번 1.21.11 업데이트로 친구들과 같이 놀 서버를 만들기 위해

스크립트를 추가하여 조금의 편의성을 더하고자 개발하고 있던 도중이었습니다.


편의성 중 하나가 이제, 아이템을 바닥에 떨굴 시 어떤 아이템인지 이름을 띄우는 것이 있는데요.

벌써부터 하기 귀찮아지는 시스템이지만, 아이템에 이름을 띄우는건 꽤나 간단했습니다.


왜냐하면 2일간 노예처럼 리서치를 하며 방법을 찾은

어릴 적 제가 있었기 때문에 복붙을 하면 해결되는 일이었죠.


그저 옛날의 저에게 따봉을 날려줍니다. 아래 구문에서 사용된 애드온은 SkBee 입니다.(nbt compound 지원)

on item spawn:
    if name of event-item is set:
        set {_nbt} to "{CustomName:""%name of event-item%&7 x %item amount of event-item%"",CustomNameVisible:1b}"
    else:
        set {_nbt} to "{CustomName:""%type of event-item%&7 x %item amount of event-item%"",CustomNameVisible:1b}"
    add nbt compound from {_nbt} to nbt of event-entity

on item merge:
    set {_count} to item amount of item of past event-entity + item amount of item of future event-entity
    if name of event-item is set:
        set {_nbt} to "{CustomName:""%name of event-item%&7 x %{_count}%"",CustomNameVisible:1b}"
    else:
        set {_nbt} to "{CustomName:""%type of event-item%&7 x %{_count}%"",CustomNameVisible:1b}"
    add nbt compound from {_nbt} to nbt of future event-entity

설명하자면 아이템 스폰 시, 이름이 있을 땐 name of로 출력하고, 없을 땐 type of 로 출력하고 뒤에 x (갯수)를 붙이는 방식입니다.

 여기까진 아~~~주 정말 쉽게 만들었지만 merge 부분을 만들 때는 그냥... 머리 깨지는 줄 알았습니다.

왜냐하면 아이템이 합쳐질 때 '과거형 이벤트 아이템'과 '미래형 이벤트 아이템'을 구분했어야 했습니다.
그냥 event-item만 쓴다면, 그냥 작동을 안합니다. 갯수 계산에서 둘을 구분해야하는데 이게 어렵더라구요.

이때는 그냥 구문으로 나눠져서 구분 되는지도 모르는 상태에서 계속 리서치를 했었드랬죠. 알고나서보니
pastfuture 라는 단어만 붙이면 쉽게 해결되는 문제였다는...

그래서 결과물은

이렇습니다. 철 하나 더 던져보면,

이렇게 잘 합쳐집니다.(옛날의 나: 감격)


그런데 조금... 그렇죠? 이 한국사람들에게 영어라니, 조금 보기싫게 생겼습니다. 그래서 저는 생각을 했죠.

"type of item 의 출력값을 한국어로 바꿀 수 있나?" 


서순이 너무 길었죠? 그래도 사전 배경을 좀 알려드리고 소개하고 싶었습니다.

여기에다가 이제 코드를 덕지덕지 붙일 예정이거든요.

그래서 type of item을 영어가 아닌, 한국어 출력값으로 바꿀 수 있느냐?


"아니요?"


네, 직접적으로 옵션을 바꿔서 해결이 되진 않습니다. 그런데,
불가능했다면 제가 이런 똥글을 쓰진 않았겠죠?

그럼 무엇을 하느냐, 마인크래프트를 분해해봤습니다.
... 네 진짜로요.

일단 마크 자체가 한글을 지원하지 않습니까? 아이템에 따라서 한글이 다 적혀있고 업적들도 다 적혀있으니, 이런 글자가 적힌 파일이
있을거 아니에요. 그래서 이 파일을 이용해서 현재 아이템과 대조하여, 한글을 띄우는 방법을 채택했습니다.

그러므로 먼저 그 한글 파일을 찾아봅니다. 방법은 좀 길어서, 인터넷에 '마인크래프트 ko_kr.json 찾는 법' 치면은 나와있습니다.

안에 내용은

이런 친구가 7767줄까지 있습니다. 하하 이걸 일일히 안적어도 된다니 메데타시 메데타시~


아무튼 이 친구를 plugins/Skript 디렉터리에 끌고와서 파일을 구분하기 쉽게 ko_kr.yml 로 바꿔줍니다.

지금 내용을 보니, "1" : "2" 형식으로 되어있고, 파일 유형도 yml 이니까... 감이 오시죠?


sk-Utility 애드온으로 읽은(1) 다음, 벨류값(2)을 꺼내오기만 하면 해결 된다는 겁니다!



하하 그럼 이제 저 "블럭.마인크래프트.뭐시기" 를 아이템에서 출력해야되잖아요? 이때 하나 더 필요로 해야하는 친구가 있습니다.

바로, 마인크래프트 Class를 가져오는 skript-reflect애드온이죠.

물론 그냥 이거 없이 뒤에 block. 이나 item. 붙이면 되지만 구문 길어지고 지저분해지잖아요?

그래서 'Bukkit.getUnsafe().getTranslationKey()' 를 이용해줄 겁니다. 좀 어려운 애처럼 보이지만
그냥 아이템의 진명을 가져오게하는 그런 친구에요. 그 진명이 바로 "1" 에 있는 친구이구요.


그러면 원래 minecraft.string 으로 나오던 친구가 item.minecraft.string 으로 값을 출력해줍니다.
값은 저 끝에 있는 ()괄호에 아이템 타입 값 넣으면 되구요.

그래서 정리하면

import:
    org.bukkit.Materials
    org.bukkit.Bukkit

function TransKorean(i:item) :: text:
    set {_translationKey} to "%Bukkit.getUnsafe().getTranslationKey({_i})%"
    set {_localizedname} to yml value {_translationKey} of file "plugins/Skript/ko_kr.yml"
    return {_localizedname}

이런 식으로 정리가 됩니다. i 값에 type of event-item 을 집어넣기만 하면 되겠죠. 그래서 접목하면

import:
    org.bukkit.Materials
    org.bukkit.Bukkit

function TransKorean(i:item) :: text:
    set {_translationKey} to "%Bukkit.getUnsafe().getTranslationKey({_i})%"
    set {_localizedname} to yml value {_translationKey} of file "plugins/Skript/ko_kr.yml"
    return {_localizedname}

on item spawn:
    if name of event-item is set:
        set {_nbt} to "{CustomName:""%name of event-item%&7 x %item amount of event-item%"",CustomNameVisible:1b}"
    else:
        set {_nbt} to "{CustomName:""%TransKorean(type of event-item)%&7 x %item amount of event-item%"",CustomNameVisible:1b}"
    add nbt compound from {_nbt} to nbt of event-entity

on item merge:
    set {_count} to item amount of item of past event-entity + item amount of item of future event-entity
    if name of event-item is set:
        set {_nbt} to "{CustomName:""%name of event-item%&7 x %{_count}%"",CustomNameVisible:1b}"
    else:
        set {_nbt} to "{CustomName:""%TransKorean(type of event-item)%&7 x %{_count}%"",CustomNameVisible:1b}"
    add nbt compound from {_nbt} to nbt of future event-entity

이 되는 겁니다. 그래서 총 사용된 애드온은 SkBee, skript-reflect, skUtility 입니다. 이 세 친구는 진짜 필수인거 같아요.
그래서 결과물을 보자하면

이렇게 아주 예쁘게 출력이 됩니다.

사실, 이미 누군가가 만들었을지도 모릅니다. 다만 인터넷에 조사를 하니까 안떴을 수 있고, 제가 조사를 못했을 수도 있습니다.
방법을 찾기가 너무 힘들더라구요. 찾아보니 불가능하다 그러고...
그래서 이걸 접목하고 저걸 접목하고 하니 결과가 따단! 하고 나왔습니다. 방법은 결국 있지 않겠습니까?

어쩌면 제가 찾지못한 Class 중에 yml없이 바로 변환하는 것이 있을지 모릅니다. 근데 저는 다 안되더라구요.
저보다 Class를 더 잘 아는 행님들이 개척할 것이라 믿습니다.

마지막으로 제가 이 글을 쓴 이유는 이 비슷한 것을 구현하는데 애먹고 있는 친구들을 위해서입니다.
저처럼 2일간 고생하지 마시고 이 방법을 참고하고, 퍼가십쇼. 아 이번에도 2일동안 고생한겁니다.ㅋㅋ

이상, 'type of item 출력 값을 한국어로 바꾸기' 였습니다. 긴 글을 읽어주셔서 감사합니다.
아래에는 1.21.11 버전 ko_kr.yml 파일과 소개했던 구문이 담긴 displayitem.sk 파일입니다.
잘 뜯어쓰세용

ko_kr.yml
displayitem.sk

1개의 댓글

owoww
18 일 전

아래 코드는 yml 파일 없이, 그리고 애드온도 SkBee만 사용한 버전입니다.

핵심은 CustomName을 번역 키(translate) 기반 JSON 컴포넌트로 저장해서, 서버에서 한글로 “고정 번역”하는 대신 플레이어 각자의 클라이언트 언어 설정에 맞춰 아이템 이름이 자동으로 로컬라이징 되게 만들었습니다.

 

필요하신 분들 참고해서 쓰세요!

수정: 오떱이(otteobi) / Discord: otteobi

 

 

 

function update_dropped_item_name(entity: entity, amount: number):

set {_item} to item of {_entity}

if name of {_item} is set:

set {_nbt} to "{CustomName:'%name of {_item}%&7 x %{_amount}%'}"

else:

set {_key} to translation key of {_item}

set {_nbt} to "{CustomName:[{translate:'%{_key}%'}, {text:'&7 x&e%{_amount}%'}]}"

add nbt compound from {_nbt} to nbt of {_entity}

show the custom name of {_entity}

 

on item spawn:

update_dropped_item_name(event-entity, item amount of event-item)

 

on item merge:

set {_amount} to (item amount of item of past event-entity) + (item amount of item of future event-entity)

update_dropped_item_name(future event-entity, {_amount})

 

 

 

뉴스 및 창작물
/files/thumbnails/317/150/004/262x150.crop.jpg?20260110144415

건축

광화문 구 경기도청사(1988)

KHC

2026-01-10

1

/files/thumbnails/144/149/004/262x150.crop.jpg?20260107110106

상품

《레고 마인크래프트 비주얼 딕셔너리》 출간!

다코미

2026-01-07

0

/files/thumbnails/384/148/004/262x150.crop.jpg?20260105141940

상품

《레고 마인크래프트 게임 아이디어 북》 출간!

다코미

2026-01-05

0

/files/thumbnails/018/142/004/262x150.crop.jpg?20251218163950

건축

마인크래프트 우주 수영장 [무료 다운로드]

SHALDOPlus

2025-12-18

0

/files/thumbnails/365/141/004/262x150.crop.jpg?20251215140757

상품

《마인크래프트 축제 아이디어 북》 출간!

다코미

2025-12-15

0

/files/thumbnails/358/140/004/262x150.crop.jpg?20251212154044

건축

보라빛 ♡

SHALDOPlus

2025-12-12

0

/files/thumbnails/155/138/004/262x150.crop.jpg?20251204005353

건축

마인크래프트에서 가장 현실적인 공항을 만드는중이신분들 ㄷㄷ

SHALDOPlus

2025-12-04

0