안녕하세요 무사 입니다
작년에 작성한 랜덤무기 서버팩에서 리소스팩을 추가하여
더 퀄리티 있는 서버를 개발해 봅시다
( 공부 목적으로 작성된 글이라 잘못된 점이 있더라도 양해 부탁드립니다 )
서버에 적용할 리소스팩입니다
[ 작동 원리 ]
1. 해당 체력바는 아이템의 내구도별로 0~100까지에 모델 이미지를 적용시키는 방법입니다
2. 구현된 체력바는 인벤토리 9번칸 슬롯을 이용하여 체력바를 화면에 나타나게 하였습니다
( 그래서 체력바를 등록시키면 슬롯 한 칸을 소비해야 한다는 단점이 있습니다 )
[ 체력바 아이템도 사용하지 못합니다 / 따로 내구도가 무한이면 괜찮습니다 ]
3. 스크립트랑 연동하여 피가 달 때마다 해당 리소스팩을 업데이트해준다
체력바 리소스팩 입니다
리소스팩 설명 > 스크립트 구문 순서로 진행하겠습니다
우선 리소스팩을 적용하기 위한 모델링 작업이 필요한데
큐빅스튜디오 / 블록벤치 프로그램이 있습니다
큐빅스튜디오는 유료여서 블록벤치로 실습해 보겠습니다
위 링크를 통해서 블록벤치 프로그램을 다운로드 해주세요
png 파일은 해당 리소스팩 아이콘으로 보입니다
pack.mcmeta 파일을 노트패드나 다른 파일 편집기로 열어보세요
여기서 pack_format 은 서버 버전을 나타냅니다
1 : 1.6 - 1.8
2 : 1.9 - 1.10
3 : 1.11 - 1.12 [ 현재 1.12.2 버전 ]
4 : 1.13
5 : 1.14 - 1.15
6 : 1.16.2 - 1.16.5
7 : 1.17
8 : 1.18
9 : 1.19 이상
추후 1.19 버전에 리소스팩을 다뤄보겠습니다
description : 리소스팩 설명글 [ 아무거나 적으셔도 됩니다 ]
적용된 리소스팩을 확인할 수 있습니다
그다음 assets > minecraft > models , textures 로 나뉘어있습니다
모든 리소스팩은 이런 형태로 나누어져 있습니다
models > bar 부분은 우리가 직접 만든 체력바 모델이 적용이 됩니다
textures > bar 부분은 체력바 모델에 이미지가 적용이 됩니다
그래서 리소스팩 작업을 할 때 중요한 점은 해당 경로를 잘 적어주셔야합니다
경로가 틀리면 서버 내 아이템 이미지가 깨져서 나타나니 주의하세요
이제 블록벤치를 열어 assets > minecraft > models > bar 부분에 100.json을 드래그해서 블록벤치
안쪽으로 가져다 대면 이렇게 화면과 동일한 형태로 나타납니다
처음 인분들은 블록벤치 기능이 낯설게 느껴질 텐데 지금은 이 모델이 어떻게 만들어졌는지 파악하고
json 형태로 내보내는 작업까지만 진행하겠습니다
큐브 하나로만 구현된 모습을 알 수 있습니다
File > Export > Export Block / Item Model 부분을 클릭하여
assets > minecraft > models > bar 폴더 안쪽으로 저장하시면 됩니다
해당 체력바는 아이템의 내구도별로 0~100까지에 모델 이미지를 적용시키는 방법입니다
그래서 다른 체력바를 구현하고 싶으면 0~100까지 json 형태로 내보내는 노가다 작업을 하셔야 합니다
100.json 파일을 열면 텍스쳐 부분이 있는데 아까 설명한 대로
assets > minecraft > textures > bar 부분에 체력바 모델에 이미지가 적용이 됩니다
이 경로에 이미지가 없으면 아이템에 이미지가 깨져서 나타납니다
elements는 큐빅에 크기와 위치를 표시한 겁니다 이건 따로 건들지 마세요
그 다음 display 부분입니다
블록벤치 좌측 상단에 Display 부분이 있습니다 그걸 클릭해 보세요
rotation 부분은 무조건 90도로 설정해 주셔야 이미지가 잘 나타납니다
Scale은 크기를 나타냅니다 최대 4까지 키울 수 있습니다
(현재 HUD에서 아이템이 가운데 있는 가정하에 보이는 위치입니다)
하지만 우린 9번칸 슬롯에 아이템을 위치시킬 거여서
체력바 위치를 조정하고 싶으면 블록벤치가 아닌
직접 서버에서 Translation 값을 바꿔주면서 확인하시는 게 제일 편합니다
리소스팩 리로드 속도가 답답하긴 하지만 해당 버전에서는 어쩔 수 없네요..
TIP : 리소스팩 리로드 단축키 F3+T을 같이 누르면 리소스팩 리로드가 됩니다
[ Translation 위치 설명 - 직접 해보시면 이해가 잘 갑니다 ]
Translation 부분에 빨간 동그라미를 왼쪽으로 이동시키면 체력바가 왼쪽으로 이동됩니다
현재 오른쪽으로 위치되어 있습니다 ( 최대 80, -80까지 이동가능합니다 )
초록 동그라미는 왼쪽 > 위로 이동합니다
오른쪽 > 아래로 이동합니다 ( 최대 80, -80까지 이동 가능합니다 )
파란 동그라미는 다음 강좌 때 설명해 드리겠습니다 이건 그대로 내버려 두시면 됩니다
위치까지 다 설정했으면 0~100까지 똑같이 수정해 주셔야 합니다 ㅠㅠ
이게 체력바에 단점입니다..
assets > minecraft > models > item > iron_hoe 파일을 열어줍니다
item은 서버에 기존 아이템인 iron_hoe 철괭이 모델입니다ex ) 다이아몬드 곡괭이면 diamond_hoe 이 파일명이 됩니다overrides를 이용하여 내구도별로 적용된 상태입니다
도구에 내구도 구하는 공식입니다
뺄 내구도 ÷ (도구별)총 내구도 [ 1÷다이아몬드 총 내구도 = 1÷1562 ]
{ "predicate": {"damaged": 0, "damage": 나온 내구도값}, "model": "item/모델파일명"}
이렇게 넣어주시면 됩니다
그래서 내구도 2가 단 철괭이는 체력바 100이 보이게 됩니다
추가로 textures > gui 폴더가 있는데 여기에 icons.png는 마크 내 하트와 배고픔 아이콘을 지운상태입니다
지우는 방법은 페인트넷이나 포토샵을 이용해서 직접 지우시면 됩니다
여기까지 리소스팩에 대한 설명이었습니다
[※주의사항※]
모델 이미지는 정사각형으로 해야 합니다 ( 정사각형이 아니면 이미지가 깨져서 나옵니다 )
[ 스크립트 연동법 ]
해당 스크립트 버전 : 2.4.1
애드온 : Skellett, SkQuery, skRayFall, skUtulutues, SK-NBeeT
function setbar(p: player): // setbar 라는 함수를 선언합니다
set {_a} to iron hoe with nbt "{Unbreakable:1,HideFlags:6}" // SK-Nbeet 애드온에서 철괭이에 nbt태그를 추가합니다
// Unbreakable:1 : 내구도를 숨기는 기능 HideFlags:6: 아이템 설명을 숨기는 기능
set slot 8 of {_p} to {_a} named "&f" // 9번칸 슬롯에 철괭이 이름을 &f로 설정합니다
function reloadhealthbar(p: player): // reloadhealthbar 라는 함수를 선언합니다
set durability of slot 8 of {_p} to 102-(({_p}'s health/{_p}'s max health)*100)
// 현재 플레이어에 9번슬롯에 철괭이에 내구도를 (102-플레이어에 현재체력)으로 설정합니다 - 즉 생명력 수치를 체력바 수치로 보여줍니다
// 여기서 102로 설정한게 위에 리소스팩에서 내구도 2까지가 철괭이 모델이고 3부터가 체력바 모델이이여서 102로 설정한겁니다
set {health::%{_p}%} to round down (({_p}'s health/{_p}'s max health)*100)
// health 배열은 플레이어에 현재 체력 소수점 자리를 내림값이 들어갑니다
every 0.1 second:
loop all players:
set {_p} to loop-player
if {health::%{_p}%} is not round down (({_p}'s health/{_p}'s max health)*100): // 현재 체력이 100이 아닐때
reloadhealthbar(loop-player) // 위에서 선언한 reloadhealthbar 함수를 호출합니다
on inventory close: // E키를 눌러서 닫을때 작동됩니다
setbar(player)
reloadhealthbar(player)
on inventory open: // 상자를 열때 체력바가 화면을 가려지는 걸 방지하기 위해서 추가했습니다
set {_b} to iron hoe with nbt "{Unbreakable:1,HideFlags:6}"
set durability of {_b} to 1 // 내구도가 1인 철괭이 모델로 설정
set slot 8 of player to {_b} named "&f"
on tool change: // 플레이어가 도구를 바꿀때
if name of player's tool is "&f":
if item type is iron hoe:
cancel event // 금지
on inventory click:
if name of click item is "&f":
if item type is iron hoe:
cancel event
on drop: // 아이템을 버릴때
if name of player's tool is "&f":
if item type is iron hoe:
cancel event
on death: // 플레이어가 죽을때
loop all items in player's inventory: // 플레이어 인벤토리를 반복하여
if name of loop-item is "&f":
if item type is iron hoe:
remove loop-item from drops // 철괭이를 제거합니다 - 이러면 죽을때 아이템 드랍이 안됩니다!
on rightclick:
if player's tool is iron hoe:
repair player's tool
해당 구문을 서버에 적용하면 위에 적용한 체력바 그대로 사용하실 수 있습니다
이런 식으로 꼼수를 적용하시면 1.12.2 버전에서 퀄리티 높은 체력바를 적용하실 수 있습니다
직접 리소스팩을 뜯어 새로운 체력바를 추가해 보세요