Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

🎮 SSAPI-Minecraft

SSAPI-Minecraft는 숲과 치지직의 후원 및 채팅 데이터를 마인크래프트 서버에서 활용할 수 있게 해주는 플러그인입니다.

목차

📋 개요

이 플러그인은 SSAPI를 기반으로 제작되었습니다. SSAPI는 숲(숲)과 치지직의 실시간 채팅과 후원 데이터를 통합적으로 제공하는 서비스입니다. 자세한 내용은 SSAPI 공식 웹사이트를 참고해주세요.

🔧 시스템 요구사항

  • Java 버전: Java 17 이상
  • 마인크래프트 버전: 1.16.5 이상
  • 지원 서버: Paper (권장), Spigot, Bukkit 등 대부분의 버킷 기반 서버
    • Paper에서만 공식 테스트되었습니다.

📝 명령어

일반 사용자 명령어

명령어별칭설명
/api 연동 <숲|치지직> <아이디>/후원 연동스트리밍 플랫폼과 연동
/api 시작/후원 시작API 연동 시작
/api 중지/후원 중지API 연동 중지

관리자 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api관리 리로드/후원관리 리로드설정 파일 다시 불러오기
/api관리 시작 <플레이어>/후원관리 시작플레이어의 API 연동 시작
/api관리 중지 <플레이어>/후원관리 중지플레이어의 API 연동 중지
/api관리 연동 <플레이어> <숲|치지직> <아이디>/후원관리 연동플레이어의 API 연동 설정
/api관리 아이템 [플레이어]/후원관리 아이템손에 든 아이템을 후원 지급 아이템으로 설정
/api관리 설정 초기화/후원관리 설정 초기화후원 금액별 동작 설정 초기화
/api관리 설정 추가 <금액> <동작>/후원관리 설정 추가후원 금액별 동작 추가
/api관리 설정 삭제 <금액>/후원관리 설정 삭제후원 금액별 동작 삭제
/api관리 설정 확인/후원관리 설정 확인후원 금액별 동작 목록 확인

테스트 명령어 (ssapi.admin 권한 필요)

명령어별칭설명
/api테스트 <금액/액션명> [플레이어]/후원테스트후원 액션 테스트

사용 가능한 액션 목록

액션명설명
GIVE_ITEM아이템 지급
RANDOM_EFFECT랜덤 효과 부여
SPAWN_MOB몹 소환
RANDOM_TELEPORT랜덤 텔레포트
INSTANT_DEATH즉사

🛠️ 커스텀 커맨드

후원이 발생했을 때 실행할 커맨드를 직접 정의할 수 있습니다. 이를 통해 원하는 어떤 기능이든 구현이 가능합니다!

커맨드 설명

donation 커맨드

후원이 발생했을 때 자동으로 실행되는 커맨드입니다. format에서 제공되는 변수들을 활용하여 후원 발생 시 실행될 커맨드를 원하는 대로 설정할 수 있습니다.

streamernick 커맨드

이 플러그인은 API 연동 시 치지직/숲의 방송국 정보를 불러와서 해당 아이디가 올바른지 확인합니다. 이때 얻어온 닉네임으로 스트리머의 닉네임을 자동 설정하고 싶은 경우 이 명령어를 지정해서 사용할 수 있습니다. 실제로 많은 마인크래프트 서버에서 닉네임 설정 자동화 목적으로 사용하고 있습니다.

사용 가능한 변수

format에서 사용할 수 있는 변수들입니다:

변수설명예시
{id}후원 고유 ID6791c65c2abf284c382e10cd
{platform}후원 플랫폼soop, chzzk
{cnt}후원 개수1
{amount}후원 금액100 (치즈 개당 1원, 별풍선 개당 100원)
{player}마인크래프트 닉네임헛삯
{uuid}마인크래프트 UUID620151a2-cb8c-4099-bbae-5700e6de19e0
{streamer_id}스트리머 IDtest1
{donator_id}후원자 IDtest2
{donator_name}후원자 닉네임테스트 후원자
{message}후원 메시지 (치지직)에라잇 후원 받아랏

config.yml 설정 예시

config.yml에서 커스텀 커맨드를 다음과 같이 정의할 수 있습니다:

commands:
donation:
enabled: trueformat: "donation {platform} {player} {cnt} {donator_name}"streamernick:
enabled: trueformat: "setstreamernick {player} {nickname}"

이를 통해 후원 금액별로 다양한 커맨드를 실행하거나, 플러그인과 연동하여 더 많은 기능을 구현할 수 있습니다.

🎯 API 지원 범위

지원하는 기능

  • ✅ 방송 중일 때의 후원
  • ✅ 마인크래프트 접속 중일 때의 후원
  • ✅ 후원 종류:
      • 별풍선
      • VOD 별풍선
      • 애드벌룬
      • VOD 애드벌룬
      • 방송국 애드벌룬
    • 치지직
      • 치즈

지원하지 않는 기능

  • ❌ 도전미션, 대결미션 등 기타 후원
  • ❌ 비밀번호가 설정된 방송
  • ❌ 19금 방송
  • ❌ 방송노출 안함으로 설정된 방송

🔄 호환성

서버 소프트웨어

  • Paper: 1.16.5 이상 (권장, 테스트 완료)
  • Spigot/Bukkit: 1.16.5 이상 (미테스트, 작동 가능)

참고 Paper 이외의 서버 소프트웨어에서는 테스트되지 않았으나, 특별한 서버 의존성이 없어 작동할 것으로 예상됩니다.

🎮 후원 동작

기본 제공 동작

1. 아이템 지급 (GIVE_ITEM)

아이템 지급 관리자가 설정한 아이템을 후원자에게 지급합니다.

2. 즉시 사망 (INSTANT_DEATH)

즉시 사망 후원을 받은 플레이어를 즉시 사망시킵니다.

3. 랜덤 효과 (RANDOM_EFFECT)

랜덤 효과 무작위로 버프 또는 디버프를 부여합니다.

4. 랜덤 텔레포트 (RANDOM_TELEPORT)

랜덤 텔레포트 플레이어를 무작위 위치로 순간이동시킵니다.

5. 몹 소환 (SPAWN_MOB)

몹 소환 플레이어 주변에 무작위 몹을 소환합니다.

⚙️ 설정

⚠️ 주의사항

  • 설정 정보와 후원 금액별 동작 설정은 MySQL을 사용하더라도 각 서버(버킷)별로 개별 설정해야 합니다.
  • 서버 설정(api.servers.*)은 특별한 사유가 없다면 수정하지 마세요. 전용 API 서버를 사용하는 경우에만 변경이 필요합니다.

API 설정

설정설명기본값
api.prefixAPI 메시지 프리픽스§b[§eAPI§b] §f
api.keySSAPI 인증 키 (필수)""

서버 설정

⚠️ 전용 API 서버를 사용하는 경우가 아니라면 수정하지 마세요.

설정설명기본값
api.servers.apiAPI 서버 주소https://api.ssapi.kr
api.servers.socket소켓 서버 주소https://socket.ssapi.kr

소켓 설정

설정설명기본값
api.socket.timeout연결 타임아웃 (밀리초)5000
api.socket.reconnection.enabled재연결 시도 여부true
api.socket.reconnection.attempts최대 재시도 횟수 (-1: 무제한)-1
api.socket.reconnection.delay재연결 대기 시간 (밀리초)1000
api.socket.reconnection.max-delay최대 재연결 대기 시간 (밀리초)5000
api.socket.login-retry-delay로그인 재시도 대기 시간 (밀리초)2000

데이터 저장소 설정

설정설명기본값
storage.type저장 방식 (yml/mysql)yml

MySQL 설정 (storage.type: "mysql" 사용 시)

설정설명기본값
storage.mysql.hostMySQL 호스트localhost
storage.mysql.portMySQL 포트3306
storage.mysql.database데이터베이스 이름your_database
storage.mysql.usernameMySQL 사용자명your_username
storage.mysql.passwordMySQL 비밀번호your_password
storage.mysql.pool.maximum-pool-size최대 커넥션 개수10
storage.mysql.pool.minimum-idle최소 유휴 커넥션 개수5
storage.mysql.pool.idle-timeout최대 유휴 시간 (밀리초)300000
storage.mysql.pool.max-lifetime커넥션 최대 수명 (밀리초)1800000
storage.mysql.pool.connection-timeout커넥션 생성 타임아웃 (밀리초)30000

후원 동작 설정

설정설명
donation-actions.amounts금액별 동작 설정
donation-actions.settings동작별 세부 설정

사용 가능한 동작 유형

  • GIVE_ITEM: 아이템 지급
  • RANDOM_EFFECT: 랜덤 버프/디버프
  • SPAWN_MOB: 몹 소환
  • RANDOM_TELEPORT: 랜덤 텔레포트
  • INSTANT_DEATH: 즉시 사망

각 동작 유형별 상세 설정은 config.yml을 참고해 주세요.

로그 설정

설정설명기본값
logging.enabled로그 저장 활성화 여부true
logging.save.donation후원 로그 저장true
logging.save.failure실행 실패 로그 저장true

로그는 선택한 저장소 타입(storage.type)에 따라 다르게 저장됩니다:

YML 저장소 사용 시

  • JSON 형식의 텍스트로 저장
  • 저장 위치: plugins/SSApi/logs 디렉토리
  • 날짜별로 파일 구분

MySQL 저장소 사용 시

  • api_log 테이블에 저장
  • 테이블 구조:
    CREATETABLE `api_log` (
    `log_no`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `server_ip`VARCHAR(15) NULL DEFAULT NULL,
    `server_name`VARCHAR(100) NULL DEFAULT NULL,
    `streamer_id`VARCHAR(100) NULL DEFAULT NULL,
    `username`VARCHAR(100) NULL DEFAULT NULL,
    `cnt`INT(10) UNSIGNED NULL DEFAULT NULL,
    `type`VARCHAR(50) NULL DEFAULT NULL,
    `property`TEXTNULL DEFAULT NULL,
    `isRun` ENUM('Y','N') NULL DEFAULT 'Y',
    `player_name`VARCHAR(100) NULL DEFAULT NULL,
    `player_uuid`CHAR(36) NULL DEFAULT NULL,
    `player_world`VARCHAR(100) NULL DEFAULT NULL,
    `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_no`)
    )

저장되는 로그 정보:

  • 서버 정보 (IP, 이름)
  • 스트리머 ID
  • 후원자 정보 (이름, 금액, 개수)
  • 실행 정보 (타입, 속성, 성공 여부)
  • 플레이어 정보 (이름, UUID, 월드)
  • 생성 시간

📚 의존성

=======

필수

  • Paper (또는 Spigot/Bukkit): 1.16.5 이상
  • Java: 17 이상

내부 라이브러리

  • Socket.IO Client: 2.1.1 (실시간 이벤트 처리)
  • Engine.IO Client: 2.1.0 (소켓 통신)
  • HikariCP: 5.1.0 (MySQL 커넥션 풀)
  • MySQL Connector/J: 9.2.0 (MySQL 연결)
  • OkHttp: 4.12.0 (HTTP 통신)
  • JSON: 20240303 (JSON 데이터 처리)
  • Snappy: 1.1.10.5 (데이터 압축)

🔒 권한

권한설명기본값
ssapi.admin관리자 명령어 사용 권한 (/api관리, /api테스트)OP
ssapi.use일반 사용자 명령어 사용 권한 (/api)모두

🚀 시작하기

  1. SSAPI 공식 웹사이트에서 API 키를 발급받습니다.

    • API 키는 신청서 작성 후 승인을 통해 발급됩니다.
    • 자세한 발급 절차는 공식 웹사이트를 참고해 주세요.
  2. 플러그인 설치

    • plugins 폴더에 플러그인 파일을 넣습니다.
    • 서버를 시작하면 자동으로 설정 파일이 생성됩니다.
    • config.yml에서 발급받은 API 키를 입력합니다.

참고

  • API 연동 후 데이터가 들어오기까지 최대 15초가 소요될 수 있습니다.
  • 연동만 하고 시작을 하지 않는 경우가 많습니다. 반드시 시작 명령어까지 입력해 주세요!

❓ 자주 묻는 질문 (FAQ)

API 연동 관련 오류

오류 메시지해결 방법
"이미 등록되어있습니다."이미 연동이 완료된 상태입니다. 게임/방송 재시작 시에도 연동/시작 명령어를 다시 실행할 필요가 없습니다.
"[API] 숲 스트리머아이디는 소문자, 숫자, _, -로만 이루어져야 합니다."아이디 형식이 올바르지 않습니다. 올바른 형식으로 다시 입력해 주세요.
"스트리머 정보 조회 실패" 또는 "스트리머 계정이 아닌것 같습니다."아이디를 잘못 입력하셨습니다. 숲 아이디를 정확히 입력했는지 확인 후 연동을 처음부터 다시 시도해 주세요.
"데이터 추가 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"연동 중 알 수 없는 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.
"[API] 기존 데이터 삭제 중 오류가 발생하였습니다."서버 측 오류입니다. 디스코드 문제 발생 채널에 문의해 주세요.

📜 라이선스

이 플러그인은 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고해 주세요.

SSAPI 서비스 자체의 라이선스와 이용 약관은 SSAPI 공식 웹사이트를 참고해 주세요.

About

마인크래프트용 SSAPI 플러그인입니다. 간편한 설정 만으로 마인크래프트에서도 후원 API를 사용해보세요!

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages