Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wolfoolcraft — 커스텀 제작대

시간이 걸리는 제작 대기열을 가진 커스텀 제작대 플러그인. 제작대를 설치하고, 레시피를 걸어 두면 시간이 지나면서 완성된다.

  • Minecraft 1.21.x
  • 서버 Paper
  • Java 21
  • 필수 의존 CraftEngine — 커스텀 가구/아이템
  • 선택 의존 Mastery — 직업 숙련도로 레시피 해금

레시피 편집 GUI

recipes.yml 을 손으로 고치지 않고 게임 안에서 레시피를 만들고 고칠 수 있습니다.

/wb edit              새 레시피를 만듭니다
/wb edit <이름>        이미 있는 레시피를 불러옵니다 (탭 완성됩니다)

workbench.admin 권한이 필요합니다 (기본값 op).

화면

 ┌─ 5×5 재료 격자 ─┐   │  모드   결과물   스킬
 │  ·  ·  ·  ·  · │   │  분류
 │  ·  ·  ·  ·  · │   │  시간    XP     숙련도
 │  ·  ·  ·  ·  · │   │  이름
 │  ·  ·  ·  ·  · │   │
 │  ·  ·  ·  ·  · │   │
 └────────────────┘   │  저장   취소    삭제

격자와 결과 칸에는 아이템을 실제로 넣습니다. 창을 닫으면 전부 돌려드리므로 소모되지 않습니다. 넣은 개수가 그대로 요구 개수가 됩니다.

버튼 하는 일
모드 모양 있음 ↔ 모양 없음
분류 도감 탭. 좌클릭 다음 / 우클릭 이전
스킬 Mastery 의 직업 — farmer · fisher · miner · cook
시간 좌클릭 +5초 / 우클릭 −5초 / 쉬프트 ±30초
XP 좌클릭 +5 / 우클릭 −5 / 쉬프트 ±25 (지금은 안 쌓입니다)
숙련도 ±1. 0 이 아니면 그 직업인 사람만 만들 수 있습니다
이름 채팅으로 입력합니다. 영소문자·숫자·밑줄만 됩니다
저장 recipes.yml 에 쓰고 다시 읽습니다
삭제 쉬프트를 눌러야 지워집니다

모양 있음 / 없음

  • 모양 없음 — 격자에 놓은 것을 종류별로 합쳐 ingredients 로 적습니다. 자리는 상관없습니다.
  • 모양 있음 — 격자 그대로 shape 5줄과 keys 로 적습니다. 같은 재료에는 같은 글자(A, B, C…)가 붙고 빈 칸은 공백이 됩니다.

CraftEngine 아이템을 놓으면 item: 에 id 가, 바닐라면 material: 에 재질이 들어갑니다. CraftEngine 아이템에도 material: 을 같이 적어 두므로 CraftEngine 이 없을 때도 대체 아이콘이 뜹니다.

주의. 저장하면 recipes.yml주석이 사라집니다. Bukkit 의 YAML 저장이 주석을 보존하지 않기 때문입니다. 저장 직전 원본을 recipes.yml.bak-editor 로 복사해 두므로 필요하시면 거기서 되살리시면 됩니다.


조작

동작 조작
설치 모드 제작대를 들고 F(다른 손과 아이템 맞바꾸기)
회전 설치 모드에서 좌클릭 (웅크리고 좌클릭 = 반대 방향)
설치 설치 모드에서 우클릭
모드 종료 F 한 번 더
회수 설치된 제작대를 웅크리고 우클릭
GUI 열기 설치된 제작대를 우클릭

설치 모드에서는 미리보기가 시선을 따라다닌다. 놓을 수 있으면 초록, 못 놓으면 빨강으로 빛나고 하단에 조작 안내가 뜬다. 미리보기는 본인에게만 보인다.

아이템이 실제로 소모되는 시점은 설치가 성공한 순간이다. 자리를 못 찾거나 개수 제한에 걸리면 아무것도 잃지 않는다.

땅에 대고 우클릭해도 놓이지 않는다. 설치는 F 키로 들어가는 설치 모드에서만 된다. 그래서 CraftEngine 쪽 아이템에 furniture_item 동작을 일부러 안 붙였다 — 붙이면 우클릭 한 번에 바로 놓여서 미리보기로 자리와 방향을 잡는 과정을 건너뛰게 된다.

설치된 제작대와의 상호작용은 전부 CraftEngine 의 FurnitureInteractEvent 로 받는다. 히트박스가 블록이 아니라 엔티티라서 PlayerInteractEvent 가 아예 안 온다. 회수(웅크리고 우클릭)를 거기에 걸어두면 영영 안 불린다.


제작대 GUI

54칸이고 배치는 이렇다.

구역 슬롯 내용
레시피 격자 15, 1014, 1923, 2832, 37~41 5×5. 재료를 청사진처럼 보여준다
결과물 25 클릭하면 제작 시작
도감 7 보유 레시피 목록
대기열 45~53 기본 3칸, 나머지 6칸은 열쇠로 연다

대기열은 아이템마다 제작 시간이 있고, 다 되면 클릭해서 회수한다. 0.5초마다 갱신되며 접속을 끊어도 이어진다.

만드는 방법이 두 가지다

1. 격자에 직접 올리기 — 도감을 거치지 않고 그냥 연 상태(/wb gui, 제작대 우클릭)에서는 5×5 격자가 입력칸이다. 재료를 올려놓으면 맞는 레시피를 찾아 결과 칸에 띄우고, 누르면 격자에 올린 것만 소모해서 대기열에 넣는다.

  • 정형 레시피는 모양만 맞으면 격자 어디에 놓아도 된다
  • Shift 클릭하면 격자 빈칸으로만 들어간다 (결과 칸이나 대기열로 새지 않게 직접 옮긴다)
  • 창을 닫으면 격자에 남은 건 가방으로 돌려준다. 가방이 꽉 찼으면 발밑에 떨군다

2. 도감에서 고르기 — 도감에서 레시피를 누르면 격자가 청사진으로 채워지고 손댈 수 없게 된다. 이때는 격자가 아니라 가방을 훑어서 재료를 가져간다. 청사진 아이콘에 필요량과 보유량이 같이 뜬다.

열쇠

잠긴 대기열 칸을 클릭하면 열쇠(wolfoolcraft:queue_key) 하나를 소모하고 열린다. 없으면 안내만 뜨고 아무 일도 일어나지 않는다. 상한은 9칸.

열쇠는 /wb key 로 바로 받거나, 도감 도구함 탭의 레시피(철괴 3 + 레드스톤 1)로 만든다.

숙련도

레시피에 skill-typerequired-proficiency 를 적으면 Mastery 의 그 직업 숙련도가 기준치를 넘어야 제작할 수 있다. skill-type 에 쓰는 이름은 넷뿐이다 — farmer · fisher · miner · cook (한국어 이름도 받는다).

Mastery 가 없으면 레벨을 0 으로 보므로, 요구 숙련도가 없는 레시피만 쓸 수 있다. 플러그인 자체는 정상 동작한다.

⚠ 요구 숙련도를 걸면 그 직업만 만들 수 있게 된다. Mastery 는 한 사람이 직업을 하나만 가진다 — 농부는 광부 요구가 붙은 곡괭이를 영영 못 만든다. AuraSkills 를 쓰던 때는 모두가 모든 스킬을 같이 올려서 이런 일이 없었다. 그래서 지금은 전부 0 이다.

제작으로는 숙련도가 안 오른다. Mastery 는 직업 활동(수확·낚시·채굴·요리)으로만 오른다 — 재료만 있으면 방에 앉아 100 을 찍을 수 있게 되면 안 된다. 레시피의 xp-reward 는 지금 아무 데도 안 쌓인다.


도감

책 모양 54칸 창이다. 오른쪽 띠에 탭 5개가 있고, 레시피는 왼쪽 책 칸(0~6열 × 5줄)에 놓인다. 한 장에 35개까지 들어가고 넘치면 책 아래 양쪽 끝 화살표(45 / 53번)로 넘긴다. 넘길 데가 없는 쪽에는 화살표를 안 놓는다.

탭을 누르는 자리는 7열(7, 16, 25, 34, 43)이다. 그림에서 탭 아이콘이 GUI 좌표 x 132~155 에 있어서 7열에 걸치기 때문이다. 8열은 띠의 오른쪽 꼬리라 막아만 둔다.

눌린 탭은 배경 그림이 통째로 갈리면서 표시된다. 배경이 tab1_selected.png 처럼 '그 탭이 눌린 상태' 그림으로 와 있어서, 선택된 탭에 맞는 그림을 깔면 그만이다. 그래서 탭 칸에는 색깔 배너 대신 투명한 아이템만 놓는다 — 눌리기만 하면 되기 때문이다.

탭은 config.ymlgui.encyclopedia.tabs 에서 정한다. 목록 순서가 그림의 탭 순서(위 → 아래)다.

name 마우스를 올렸을 때 뜨는 이름
char 이 탭이 눌렸을 때 깔 배경 글리프. CraftEngine gui.ymlchar 와 짝
mode all = 전부 / list = categories 에 적은 것만 / rest = 나머지 전부
categories mode: list 일 때 묶을 레시피 category

기본값은 농축 / 도구·무기 / 갑옷 / 가구 / 도구함(나머지) 이다. rest 탭을 하나 두면 어디에도 안 묶인 새 카테고리가 사라지지 않고 거기로 모인다.


CraftEngine 자산

플러그인은 아이템과 가구를 직접 만들지 않는다. CraftEngine 에 정의된 걸 ID 로 가져다 쓴다.

ID 용도
wolfoolcraft:workbench 제작대 — 아이템과 가구를 따로 정의한다 (위 참고)
wolfoolcraft:queue_key 대기열 열쇠
wolfoolcraft:empty GUI 빈칸을 막는 완전 투명 아이템
wolfoolcraft:workbench_bg 제작대 GUI 배경 그림
wolfoolcraft:encyclopedia_tab1~tab5 도감 GUI 배경 그림 (탭마다 한 장)

크기·높이는 세 곳이 같아야 한다

어디
가구 yml scale 0.75
가구 yml translation.y 0.375 (scale 의 절반)
플러그인 config.yml workbench.preview-scale / preview-y-offset 0.75 / 0.375

디스플레이 엔티티는 모델을 엔티티 위치를 중심으로 그린다. 그래서 바닥에 세우려면 크기의 절반만큼 올려야 한다. 값이 어긋나면 설치 미리보기와 실제로 놓인 물건의 크기나 높이가 다르게 보인다.

모델 json 의 display.fixed.scale1 로 둬야 위 계산이 그대로 맞는다. 여기에 0.5 같은 값이 들어가면 실제 크기가 그만큼 줄어든다.

config.yml서버의 plugins/wolfoolcraft/config.yml 이다. jar 를 새로 올려도 이미 있는 그 파일은 안 덮어써진다. 기본값을 바꿨으면 서버 쪽도 같이 고쳐야 한다.

히트박스는 기준점이 다르다. element 의 translation 은 모델 한가운데를 옮기지만 interaction 히트박스의 position 은 상자 바닥이다. 여기에 translation 값을 그대로 쓰면 클릭 판정만 위로 떠서, 제작대를 눌러도 GUI 가 안 열린다.

GUI 배경

인벤토리 배경을 바꾸는 방법은 따로 없어서, 창 제목에 그림 한 글자를 넣고 왼쪽 위로 밀어 화면을 덮는다. CraftEngine 기본 GUI 와 같은 방식이다.

  • 그림 등록: configuration/gui.yml (height, ascent, char)
  • 미는 양: 플러그인 config.ymlgui.*.offset-x
  • 미는 데 쓰는 빈칸 폰트: assets/wolfoolcraft/font/space.json (1·2·4·…·128px)

위치가 안 맞으면 위아래는 ascent, 좌우는 offset-x 를 조절한다. 그림은 원본 픽셀 1개 = GUI 1칸이라 폭 182px 로 맞춰 뒀다.

서버에 넣을 위치는 plugins/CraftEngine/resources/wolfoolcraft/ 다. 모델과 텍스처는 models/make_workbench.py 로 다시 만들 수 있다.

cd models && python make_workbench.py   # out/ 에 workbench.json + workbench.png

자산을 바꾸면 서버에서 /ce reload 를 해야 리소스팩이 다시 구워진다.


명령어

명령어 설명
/wb gui 제작대 GUI 를 연다
/wb item 제작대를 지급한다
/wb key 대기열 열쇠를 지급한다
/wb xp 숙련도 레벨·XP 와 제작 횟수를 본다
/wb lock [칸수] 대기열을 다시 잠근다. 숫자를 빼면 기본값(3칸)으로
/wb admin 관리자용 도감
/wb reload config.yml / recipes.yml 다시 읽기

/wb lock 은 열쇠로 칸이 열리는지 확인하려고 되돌릴 때 쓴다. 잠근 칸에 제작 중인 게 남아 있으면 가려지기만 하고 사라지지는 않는다 — 칸을 다시 늘리면 그대로 보인다.

/wb xp 는 레시피에 쓰인 직업별로 레벨·레시피 수·잠긴 개수·제작 횟수를 보여준다. Mastery 가 없으면 그 사실을 먼저 알려준다 — 요구 숙련도가 있는 레시피가 계속 잠긴 채로 있기 때문이다. 레시피의 skill-type 이 없는 직업 이름이면 그것도 짚어준다 — 그 경우 요구 숙련도가 영영 안 채워진다.


설정

config.yml

workbench:
  item-id: "wolfoolcraft:workbench"
  furniture-id: "wolfoolcraft:workbench"
  queue-key-id: "wolfoolcraft:queue_key"

crafting:
  max-workbenches-per-player: 5
  default-queue-slots: 3
  max-queue-slots: 9

recipes.yml — 레시피 정의. category, skill-type, required-proficiency, xp-reward, crafting-time, shape/keys 또는 ingredients, result.

재료에 CraftEngine 아이템 쓰기

material 대신 item 에 CraftEngine ID 를 적으면 커스텀 아이템이 된다. 결과물·ingredients·keys 어디서나 된다.

wood_bundle:
  category: "농축"
  result:
    item: "wood1:woods1"      # 원목 묶음 1
    amount: 1
  ingredients:
    - item: "wood1:wood"      # 원목
      amount: 50
  crafting-time: 60

커스텀 아이템은 대부분 종이 같은 흔한 재료를 바탕으로 만들어진다. 그래서 material: PAPER 로 적은 자리에는 커스텀 아이템이 안 들어간다. 안 그러면 종이 기반 커스텀 아이템 50개가 '종이 50개' 로 잡혀 엉뚱하게 제작돼 버린다.

여기 적은 ID 가 실제로 있는지는 CraftEngine 이 자기 설정을 다 읽은 뒤 자동으로 검사해서 로그에 남긴다. 오타가 있으면 재료가 그냥 종이로 보일 뿐 이유를 알 수 없어서다. 검사 시점을 onEnable 이나 ServerLoadEvent 로 잡으면 안 된다 — CraftEngine 은 그보다 늦게 팩을 읽어서 멀쩡한 ID 도 '없다' 고 나온다. CraftEngineReloadEvent 를 쓴다.

저장

plugins/wolfoolcraft/database.db (SQLite). 해금 슬롯 수, 설치한 제작대 수, 제작 횟수, 대기열, 발견한 레시피를 보관한다.

제작 횟수는 완성이 아니라 '제작을 시작한' 시점에 센다. 숙련도 XP 를 주는 시점과 같아야 /wb xp 에서 본 숫자끼리 앞뒤가 맞는다.


빌드

./gradlew build

산출물은 build/libs/.


남은 것

  • 요리대 / 정제기 — 문서에는 있지만 아직 제작대만 구현했다. 제한 개수는 각 5개 / 10개.
  • 업그레이드 시 인챈트 미이전 규칙.
  • 레시피 재료로 CraftEngine 아이템 쓰기 (RecipeManager 는 아직 바닐라 Material 만 본다).
  • 관리자 도감의 레시피 활성화/비활성화.
  • 패키지가 com.wolfool.workbench 로 남아 있다. 저장소 이름과 안 맞는다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages