개인 자료란 (JE)

  서버 커뮤니티

자료란에 모든 게시글은 반드시 자료란 글작성 가이드를 준수해야합니다. 글 작성 전에 반드시 확인해주세요!

한국 마인크래프트 포럼

마인크래프트 자료 및 커뮤니티 플랫폼

전체 회원수 122,179명 ( +14명 )

※ 장기간 미활동 회원 제외

Profile 브혼 개발자

Vhone dc73ee51d49946dabf4f634c6e3ce5c6

Profile

자료란new 공통new 리뷰, 강좌 스크립트

[함수] 리스트를 NBT로 바꿔주는 함수

2020.05.17 조회 수 581 추천 수 0

스크립트 기본 기능에 부족한 NBT 영역을 활용하기 위해서 기본 명령어와 스크립트를 섞어 쓰는 방법을 연구하고 있는데요.
NBT 변환 함수는 그 결과물 중 하나 입니다.


어떤 알고리즘으로 동작하는가보다 어떻게 사용하는가가 더 중요하기 때문에 사용법에 대해서만 다루겠습니다.


    EffConvertNBT( %text% )

매개변수로 리스트의 이름을 받습니다.
그 외 다른 매개변수도 있는데 이것은 함수의 재귀를 위해서 사용됩니다.
첫번째 매개변수 외 다른 매개변수를 사용하지 마세요.

여러가지 NBT 규칙에 대응하기 위해서 간단한 이름 양식이 있습니다.

1. 첫머리 대문자가 필요한 NBT이름은 아무것도 없거나 띄어쓰기( )를 사용합니다.
2. 첫머리 소문자가 필요한 NBT이름은 언더바(_)를 사용합니다.
3. NBT데이터 타입은 온점(.)과 타입(b,d,s,…)을 입력합니다
4. 배열은 인덱스를 숫자만 사용해야합니다.

아래 예문을 보면서 더 설명하도록 하겠습니다.


command /NBT.basic:
    trigger:
        set {nbt::ambient} to false
        set {nbt::show icon} to false
        set {nbt::show particles} to false
        set {nbt::duration} to 99999999
        set {nbt::id.b} to 14
        set {nbt::amplifier.b} to 0
        set {_nbt} to EffConvertNBT( "nbt" )
        delete {nbt::*}
        send "%{_nbt}%" to console

기초적인 함수의 쓰임은 이렇습니다.
리스트의 인덱스에 NBT이름이 들어가고, 값에 NBT값이 들어갑니다.

각 NBT 이름은 대문자로 출력되고
id와 amplifier는 데이터 타입을 지정했습니다.

출력된 NBT는 아래와 같습니다.
{Ambient:false,Amplifier:0b,Duration:99999999,Id:14b,ShowIcon:false,ShowParticles:false}


command /NBT.array:
    trigger:
        set {nbt::rotation.f::1} to 30
        set {nbt::rotation.f::2} to 50
        set {_nbt} to EffConvertNBT( "nbt" )
        delete {nbt::*}
        send "%{_nbt}%" to console

인덱스에 숫자만 입력하면 앞선 인덱스를 NBT이름으로 하는 배열로 인식합니다.

출력된 NBT는 아래와 같습니다.
{Rotation:[30f,50f]}


command /NBT.arrays:
    trigger:
        set {nbt::no a i} to true
        set {nbt::no gravity} to true
        set {nbt::silent} to true
        set {nbt::drop item} to false
        set {nbt::invulnerable} to true
        set {nbt::active effects::1::ambient} to false
        set {nbt::active effects::1::show icon} to false
        set {nbt::active effects::1::show particles} to false
        set {nbt::active effects::1::duration} to 99999999
        set {nbt::active effects::1::id.b} to 14
        set {nbt::active effects::1::Amplifier.b} to 0
        set {nbt::active effects::2::ambient} to false
        set {nbt::active effects::2::show icon} to false
        set {nbt::active effects::2::show particles} to false
        set {nbt::active effects::2::duration} to 99999999
        set {nbt::active effects::2::id.b} to 24
        set {nbt::active effects::2::Amplifier.b} to 0
        set {_nbt} to EffConvertNBT( "nbt" )
        delete {nbt::*}
        send "%{_nbt}%" to console

포션효과와 같은 복잡한 형태도 가능합니다.
해당 NBT는 셜커에 적용할 수 있는 NBT로 투명화, 글로우 포션효과가 적용된 NBT입니다.

출력된 NBT는 아래와 같습니다.
{ActiveEffects:[{Ambient:false,Amplifier:0b,Duration:99999999,Id:14b,ShowIcon:false,ShowParticles:false},{Ambient:false,Amplifier:0b,Duration:99999999,Id:24b,ShowIcon:false,ShowParticles:false}],DropItem:false,Invulnerable:true,NoAI:true,NoGravity:true,Silent:true}


이 함수는 글자를 편집하여 명령어로 사용하기 때문에 매번 NBT를 생성하는것은 서버에 많은 부담이 됩니다.
스크립트로 구현하기 힘든 부분만 기본 명령어를 활용해 만들고 스크립트로 가능한 부분은 스크립트를 최대한 활용하는 것이 좋습니다.



EffConvertNBT.sk 


Warning
댓글이 없습니다.

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

컨텐츠
https://www.koreaminecraft.net/files/thumbnails/850/878/002/262x150.crop.jpg?20211018191640
(포션 시리즈) 3편 - 비 2

GlassesFilm

2021-10-18

3

https://www.koreaminecraft.net/files/thumbnails/337/871/002/262x150.crop.jpg?20211014221722

플러그인

달고나 뽑기 in Minecraft 8

BlueRing1017

2021-10-14

6

https://www.koreaminecraft.net/files/thumbnails/848/870/002/262x150.crop.jpg?20211014131239

답안지

한마탐 4주차 / 정오표 + 해설 1

베개냥이

2021-10-14

1