Skip to content

Repository files navigation

Epithet — 칭호 시스템

조건을 달성하면 자동으로 해금되는 마인크래프트 칭호 플러그인.

기존 태그 플러그인이 "권한을 주면 목록에서 골라 다는" 구조라면, Epithet 은 뭘 하면 뭘 얻는지가 보이는 도감을 중심으로 돌아간다. 미보유 칭호도 조건과 진행도를 그대로 보여주기 때문에 접속할 이유가 생긴다.

  • Minecraft 1.21.4
  • 서버 Paper (또는 Paper 계열 포크)
  • Java 21

핵심

조건 자동 해금 — 과거 기록까지 소급 적용

해금 조건은 마인크래프트 내장 통계를 읽는다. 별도 카운터를 쌓지 않기 때문에, 운영한 지 한참 된 서버에 지금 설치해도 기존 플레이어들이 이미 달성해 둔 칭호를 그대로 받는다. 플러그인을 지웠다 다시 깔아도, 서버를 옮겨도 진행도가 남는다.

첫 접속에 한해 연출을 생략하고 조용히 지급하므로, 100시간짜리 고인물이 접속하자마자 팝업 15개를 맞는 일은 없다.

도감

/칭호 로 열리는 GUI. 미보유 칭호도 숨기지 않는다.

[전설] 용사냥꾼
  등급 전설

  엔더 드래곤을 쓰러뜨렸다.
  하늘이 무너진 날.

  해금 조건
   ✖ 엔더 드래곤 1마리 처치
       0 / 1

  ■■■■□□□□□□□□□□□□□□□□ 0%

  장착 효과
   • 힘 I
   • 최대 체력 +4

  조건을 더 채워야 합니다
  • 전체 / 보유 / 미보유 필터
  • 페이지네이션
  • 블록·몹·포션 이름은 클라이언트 언어 설정에 맞춰 자동 번역된다
  • hidden: true 인 칭호는 해금 전까지 ??? 로 가려진다

장착 효과

칭호마다 포션 효과와 능력치 보정을 줄 수 있다. effects.enabled: false 로 끄면 순수 장식용이 된다.

무한 지속 포션과 능력치 보정은 플레이어 데이터에 저장되기 때문에, 서버가 비정상 종료되면 칭호를 벗어도 효과가 남는다. Epithet 은 접속할 때마다 "칭호가 건드릴 수 있는 효과" 전체를 기준으로 청소하므로 유령 버프가 누적되지 않는다.

표시 위치

채팅 / 머리 위 이름표 / TAB 목록 세 곳에 동시 반영된다. 각각 따로 끌 수 있다. 전용 채팅 플러그인을 쓴다면 채팅만 끄고 %epithet_title% 을 그쪽 포맷에 넣으면 된다.

별명 — 화면에 보일 이름

마인크래프트 계정 이름은 영문·숫자·밑줄뿐이라 한국어 이름을 쓸 수 없다. 그래서 계정과 별개로 표시용 이름을 둔다. FOX 로 접속해도 채팅과 TAB 에는 김아무개 로 나온다.

/닉네임 <이름>     내 별명을 정한다
/닉네임 off        계정 이름으로 되돌린다

계정 이름을 대체하지는 않는다. 명령어 대상 지정 · 밴 · 권한은 전부 계정 이름 그대로다. 별명 뒤에 숨는 사람이 없어야 하기 때문이다. 포맷에서 <player> 는 별명, <name> 은 언제나 계정 이름이다.

길이 · 쓸 수 있는 글자 · 금지어는 config.ymlnick 에서 정한다. 길이는 보이는 글자로 센다 — 서식 태그까지 세면 색을 쓴 사람만 짧은 이름을 강요받는다. 색과 서식은 epithet.nick.color 가 있어야 쓸 수 있다.

⚠ 머리 위 이름표는 이것만으로 안 바뀐다. 스코어보드 팀은 이름 앞뒤로 글자를 덧붙이는 것만 되고, 이름 자체는 클라이언트가 계정 이름으로 그린다. 팀으로 이름을 지우는 방법은 이름표를 통째로 숨기는 것뿐이라 칭호까지 같이 사라진다. 머리 위까지 바꾸려면 이름표를 직접 그리는 플러그인(CustomNameplates 등)의 이름표 글자에 %epithet_nameplate% 를 넣는다. 채팅과 TAB 은 이 플러그인이 직접 그리므로 그대로 바뀐다.

획득 연출

등급별 색상, 화면 중앙 타이틀, 사운드. 설정한 등급 이상을 획득하면 서버 전체 공지.


설치

  1. Releases 에서 Epithet-x.x.x.jar 를 받아 plugins/ 에 넣는다
  2. 서버 재시작
  3. plugins/Epithet/titles.yml 을 취향대로 고친 뒤 /칭호 admin reload

명령어

명령어 설명 권한
/칭호 도감 열기 epithet.use
/칭호 off 장착 해제 epithet.use
/칭호 list 보유 칭호 채팅 목록 epithet.use
/칭호 equip <id> 칭호 장착 epithet.use
/칭호 admin give <플레이어> <id> 지급 epithet.admin
/칭호 admin take <플레이어> <id> 회수 epithet.admin
/칭호 admin reload 설정 다시 읽기 epithet.admin
/닉네임 <이름> 별명 정하기 epithet.nick
/닉네임 off 계정 이름으로 되돌리기 epithet.nick
/닉네임 admin set <플레이어> <이름> 남의 별명 정하기 epithet.admin
/닉네임 admin clear <플레이어> 남의 별명 지우기 epithet.admin

/title, /tag 로도 쓸 수 있다. Paper 의 Brigadier API 로 등록되어 인자 자동완성이 붙는다 — /칭호 equip본인이 보유한 칭호만, 관리자 명령은 전체를 제안한다.

권한 기본값
epithet.use 전체 허용
epithet.admin OP

칭호 정의

titles.yml. 표시 문자열은 전부 MiniMessage 문법.

titles:
  dragon_slayer:
    display: "<gradient:#ffd93d:#ff6b3d>[용사냥꾼]</gradient>"
    lore:
      - "<gray>엔더 드래곤을 쓰러뜨렸다."
    rarity: LEGENDARY          # COMMON UNCOMMON RARE EPIC LEGENDARY MYTHIC
    icon: DRAGON_HEAD
    unlocks:                   # 나열된 조건을 "전부" 만족해야 해금
      - { type: MOB_KILLS, target: ENDER_DRAGON, amount: 1 }
    effects:
      - { type: strength, amplifier: 0 }
    attributes:
      max_health: 4.0

해금 조건 종류

type 설명 target
PLAYTIME_HOURS 플레이 시간(시간)
MOB_KILLS 몹 처치 수 생략 시 전체, 지정 시 해당 몹만
PLAYER_KILLS 플레이어 처치 수
BLOCK_MINE 블록 채굴 수 블록 이름 (필수)
ITEM_CRAFT 아이템 제작 수 아이템 이름 (필수)
ITEM_USE 아이템 사용 수 아이템 이름 (필수)
FISH_CAUGHT 낚은 물고기 수
DEATHS 사망 횟수
MAX_DEATHS 사망 횟수가 amount 이하
WALK_KM 걸은 거리(km)
DAMAGE_DEALT 누적 피해량(체력 포인트)
ADVANCEMENT 업적 달성 업적 키 (story/mine_diamond)
PERMISSION 권한 보유 권한 노드
MANUAL 관리자 지급 전용

MAX_DEATHS 를 다른 조건과 조합하면 "50시간 동안 한 번도 죽지 않기" 같은 되돌릴 수 없는 도전 과제를 만들 수 있다.


PlaceholderAPI

설치되어 있으면 자동으로 연동된다.

플레이스홀더
%epithet_title% 색이 적용된 칭호
%epithet_title_plain% 색 없는 텍스트
%epithet_title_raw% MiniMessage 원문
%epithet_rarity% 등급 이름
%epithet_rarity_id% 등급 ID (LEGENDARY)
%epithet_unlocked% 보유 개수
%epithet_total% 전체 개수
%epithet_percent% 도감 완성도 (%)
%epithet_nick% 별명. 안 정했으면 계정 이름
%epithet_nick_plain% 색 없는 별명
%epithet_nick_raw% 별명 원문. 안 정했으면 빈 문자열
%epithet_name% 계정 이름 (별명과 무관)
%epithet_nameplate% 칭호 + 별명. 이름표 플러그인에 그대로 넣는 용도

저장

plugins/Epithet/players/<uuid>.yml 에 한 명씩. 저장할 내용이 "해금 목록 + 장착 중인 칭호 + 별명" 뿐이라 데이터베이스를 끌어올 이유가 없다. 파일 입출력은 전부 비동기로 처리되고 메인 스레드는 메모리 캐시만 만진다.


빌드

./gradlew build

산출물은 build/libs/Epithet-1.0.0.jar.


라이선스

MIT

About

조건을 달성하면 자동으로 해금되는 마인크래프트 칭호 플러그인 - Paper 1.21.4

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages