💽PlaceHolderAPI

Luna PlaceholderAPI 전체 목록 (현재 코드 기준: Farming + Vital + Server + Item)

아래 목록은 제공된 클래스들의 onRequest()실제로 응답 가능한 플레이스홀더만 정리한 것입니다. 모두 내부에서 toLowerCase() 처리하므로 대/소문자 구분 없이 동작합니다.


1) FarmingPlaceholder (identifier = "farming")

기본 형식

  • %luna_farming_<params>%

동작 전제(빈 문자열 반환 조건)

  • player == null 또는 params == null/empty""

  • FarmingConfigManager.get() == null""

  • PlayerDataManager.get(uuid) == null""


A. 메인 레벨/포인트

User user = User.getUser(player)null이면 아래 항목들은 전부 switch 미진입 → 결국 ""

  • %luna_farming_main_level%

  • %luna_farming_main_xp% (소수 1자리 문자열)

  • %luna_farming_main_xp_max% (소수 1자리 문자열)

  • %luna_farming_main_progress% (0~100, 소수 1자리 문자열, 100 상한)

  • %luna_farming_main_level_display%

  • %luna_farming_stat_points%

  • %luna_farming_skill_points%

  • %luna_farming_stat_points_per_level%

  • %luna_farming_skill_points_per_level%


B. 스탯(Stat)

형식:

  • %luna_farming_stat_<statId>_display%

  • %luna_farming_stat_<statId>_desc%

  • %luna_farming_stat_<statId>_value%

  • %luna_farming_stat_<statId>% (위 _value와 동일)

반환 규칙:

  • data.getTotalStat(statId) + data.getExternalStat("passive_skill_" + statId)(0이 아니면 더함)

  • 최종 int로 캐스팅 후 문자열 반환


C. 숙련도(Profession)

형식:

  • %luna_farming_profession_<professionId>_level%

  • %luna_farming_profession_<professionId>_xp% (소수 1자리)

  • %luna_farming_profession_<professionId>_progress% (0~100, 소수 1자리, 100 상한)

  • %luna_farming_profession_<professionId>_display%

  • %luna_farming_profession_<professionId>_desc%

특이사항:

  • progress는 조건 불충족 시 "0"

  • display/desc는 cfg 없으면 ""


D. 스킬(Skill) — 스킬ID 기반

형식:

  • %luna_farming_skill_<skillId>_<type>%

<type> 지원 전체:

  • name

  • desc

  • next_desc

  • level

  • max_level

  • value

  • next_value

  • effective_value

  • effective_next_value

  • stat_display

  • cost

  • cooldown

  • next_cooldown

  • effective_cooldown

  • effective_next_cooldown

  • resource_cost

  • next_resource_cost

  • effective_resource_cost

  • effective_next_resource_cost

  • effective_level

  • effective_level_raw

  • bonus_level

  • effective_bonus

  • display_level

  • duration

  • effective_duration

  • unlock

  • unlocked (동일 동작)

중요 주의:

  • value/*value*SkillLevelData.effects()첫 번째 effect 값만 사용


E. 스킬(Skill) — statId 자동 탐색 기반

형식:

  • %luna_farming_skill_<statId>_value%

  • %luna_farming_skill_<statId>_effective_value%

동작:

  • 모든 profession/skillTree를 순회하며 SkillLevelData.stats()<statId>가 포함된 스킬을 처음 발견한 1개 기준으로 반환

  • 값은 Common.getDoubleToString(amount, 1) (소수 1자리)

주의:

  • 동일 statId가 여러 스킬에 있으면 결과가 순회 순서에 의존(비결정)


F. 디버그

  • %luna_farming_debug_stats%

  • %luna_farming_debug_external%


2) VitalPlaceholder (identifier = "vital")

기본 형식

  • %luna_vital_<param>%

전제:

  • player == null 또는 오프라인 또는 param == null"0"

  • vital / uservital 조회 실패 → "0"

  • <vitalId>param.split("_")[0] 이므로 _ 포함 ID는 불가

지원 suffix:

  • %luna_vital_<id>_ratio% (0.0~1.0 clamp, String.valueOf)

  • %luna_vital_<id>_current%

  • %luna_vital_<id>_change_max%

  • %luna_vital_<id>_max%

  • %luna_vital_<id>_regen%

  • %luna_vital_<id>_change_regen%

  • %luna_vital_<id>_change_regen_interval%

  • %luna_vital_<id>_decay%

  • %luna_vital_<id>_change_decay%

  • %luna_vital_<id>_change_decay_interval%


3) ServerDataPlaceholder (identifier = "server")

기본 형식

  • %luna_server_<params>%

지원 목록:

  • %luna_server_online%

    • 현재 서버 온라인 인원 (Bukkit.getOnlinePlayers().size())

  • %luna_server_total_online%

    • 전체 서버 총 인원 (ServerPresence.listAliveWithTotal(env).totalPlayers)

  • %luna_server_online_<channel>%

    • 특정 채널 서버 인원

    • ServerPresence.getServerInfoByChannel(channel) 없으면 "0"


4) ItemDataPlaceholder (identifier = "item")

기본 형식

  • %luna_item_<params>%

현재 코드에서 “실제로 의미 있게” 지원되는 케이스:

  • %luna_item_mainhand_name%

    • 메인핸드 아이템 이름 (Common.getItemName(itemStack))

    • 이름이 존재하면 그 이름 반환

  • %luna_item_offhand_name%

    • 오프핸드 아이템 이름

    • 이름이 존재하면 그 이름 반환

⚠️ 매우 중요(현재 코드 버그/오동작)

  • paramsmainhand* 또는 offhand*로 시작하지만,

    • _name이 아니거나,

    • _name인데 아이템 이름이 비어있거나 null이면 아이템 정보가 아니라 Bukkit.getOnlinePlayers().size()(온라인 인원)을 문자열로 반환합니다.

즉 아래도 “응답은 되지만” 의미는 온라인 인원으로 떨어집니다:

  • %luna_item_mainhand%

  • %luna_item_mainhand_anything% (name 제외)

  • %luna_item_offhand%

  • %luna_item_offhand_anything% (name 제외)

그 외:

  • 위 조건에 안 맞는 모든 값은 ""


예시 모음

  • %luna_farming_stat_luck_value%

  • %luna_farming_profession_fishing_progress%

  • %luna_farming_skill_mass_fishing_effective_duration%

  • %luna_vital_thirst_ratio%

  • %luna_server_total_online%

  • %luna_server_online_lobby%

  • %luna_item_mainhand_name%

Last updated