안녕하세요 무사 입니다
작년에 작성한 랜덤무기 서버팩에서 리소스팩을 추가하여
더 퀄리티 있는 서버를 개발해 봅시다
( 공부 목적으로 작성된 글이라 잘못된 점이 있더라도 양해 부탁드립니다 )
서버에 적용할 리소스팩입니다
[ 작동 원리 ]
1. 해당 체력바는 아이템의 내구도별로 0~100까지에 모델 이미지를 적용시키는 방법입니다
2. 구현된 체력바는 인벤토리 9번칸 슬롯을 이용하여 체력바를 화면에 나타나게 하였습니다
( 그래서 체력바를 등록시키면 슬롯 한 칸을 소비해야 한다는 단점이 있습니다 )
[ 체력바 아이템도 사용하지 못합니다 / 따로 내구도가 무한이면 괜찮습니다 ]
3. 스크립트랑 연동하여 피가 달 때마다 해당 리소스팩을 업데이트해준다
체력바 리소스팩 입니다
체력바.zip
Dropbox를 통해 공유함
www.dropbox.com
리소스팩 설명 > 스크립트 구문 순서로 진행하겠습니다
우선 리소스팩을 적용하기 위한 모델링 작업이 필요한데
큐빅스튜디오 / 블록벤치 프로그램이 있습니다
큐빅스튜디오는 유료여서 블록벤치로 실습해 보겠습니다
Blockbench
Texturing Tools Create, edit and paint texture right inside the program. Create or import palettes, paint, or draw shapes. Blockbench can automatically create a UV map and template for your model so that you can start painting right away. You can paint dir
www.blockbench.net
위 링크를 통해서 블록벤치 프로그램을 다운로드 해주세요
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 형태로 내보내는 작업까지만 진행하겠습니다
![](https://blog.kakaocdn.net/dn/CYztk/btsdZrrhN9w/vGtLCL7YSm5y04NX56sC71/img.png)
큐브 하나로만 구현된 모습을 알 수 있습니다
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 버전에서 퀄리티 높은 체력바를 적용하실 수 있습니다
직접 리소스팩을 뜯어 새로운 체력바를 추가해 보세요