Repository navigation
SharedFate 0.28.1-dev — 서버 초기화가 반쪽만 실행되던 것을 막았습니다
마인크래프트 26.3 전용입니다. 26.2 에서는 켜지지 않습니다. 26.2 에 머무를 분은 v0.26.7-dev 를 그대로 쓰십시오.
0.28.0-dev 를 쓰고 계시면 올리십시오
/shareteam reset이 팀과 기록만 지운 채 서버가 계속 도는 상태를 만들 수 있었습니다. 통신 규약은 28 그대로라 0.28.0-dev 와 서로 접속됩니다.
서버 초기화가 반쪽만 실행되던 것을 막았습니다
/shareteam reset 은 팀을 해체하고 기록을 비운 5초 뒤에 월드 표식을 썼습니다. 그 사이 표식 쓰기가 실패하면 서버가 내려가지 않는데 팀과 기록은 이미 사라진 뒤였습니다. 월드는 그대로인데 팀만 없는, 이 명령이 막으려던 바로 그 상태입니다.
| 언제 실패하나 | 왜 |
|---|---|
| 싱글플레이·LAN | 월드가 saves/<월드> 라 「서버 루트 바로 아래」 조건에 걸립니다 |
| 지난 초기화의 표식이 남아 있을 때 | 표식은 덮어쓰지 않고 만들기만 하므로 실패합니다 |
| 루프 스크립트가 월드 삭제에 실패한 뒤 | 위와 같은 상태가 됩니다 |
이제 아무것도 지우기 전에 먼저 검사합니다. 지울 수 없으면 팀도 기록도 건드리지 않고 거절하며, 무엇이 문제이고 어떻게 해야 하는지 알려 줍니다.
싱글플레이·LAN 에서는 이제 아예 거절됩니다. 전용 서버 전용 명령입니다.
지난 초기화의 표식이 남으면 알려 줍니다
.sharedfate-world-reset.pending 이 남아 있으면 재시작 루프 스크립트가 서버를 아예 켜지 않습니다. 그런데 모드는 이 파일을 쓰기만 하고 읽지 않아 운영자가 원인을 알 길이 없었습니다. 이제 서버가 뜰 때 지워야 할 경로를 로그에 남깁니다.
그 밖
- 서버 켜는 파일이 첫 줄에 오류를 뱉던 것 —
start-sharedfate-server.bat의 줄바꿈이 배포본에서 LF 로 나가 한국어 Windows 에서'주석'은(는) 내부 또는 외부 명령...이 떴습니다 /shareteam help에reset과version이 빠져 있던 것- 팀이 여럿일 때 한 팀 해체가 실패해도 나머지 팀은 계속 해체합니다
- 26.2 에서 올라오는 분을 위한 Fabric API 제거 단계를 설치 안내에 넣었습니다
0.28.0-dev 에 들어간 것
⚠ 통신 규약이 27 → 28 로 올랐습니다
0.27.1-dev이하 클라이언트는 접속이 막힙니다. 서버와 플레이어 전원이 같은 날 함께 올려야 합니다.이번 판에 고치고 넣은 것은 둘 다 서버 안쪽이라 패킷 형식은 하나도 바뀌지 않았습니다. 그런데도 번호를 올린 것은 판이 섞이는 것을 막기 위해서입니다. 규약을 그대로 두면 서버만 올린 채 옛 클라이언트가 아무 오류 없이 접속되어, 누가 어떤 판을 쓰는지는
/shareteam version all을 쳐 봐야만 알 수 있습니다.
침대로 드래곤을 잡으면 승리 기록이 통째로 사라지던 것을 고쳤습니다
엔드에서 침대를 터뜨려 드래곤을 잡으면 승리는 선언되는데 승리 책이 나오지 않고 그 회차가 기록에도 남지 않았습니다. 채팅에는 팀 이름 대신 「'모험가' 팀이 승리했습니다」가 떴습니다.
마인크래프트는 피해를 일으킨 주체가 사람일 때만 처치자를 기억합니다. 그런데 침대 폭발은 터뜨린 사람을 싣지 않습니다.
BedBlock: level.explode(null, badRespawnPointExplosion(위치), null, …)
──── ────
일으킨 주체 없음 직접 원인도 없음
그러면서도 침대 피해는 「폭발」로 분류되어 드래곤에게는 그대로 들어갑니다. 잡히기는 잡히는데 잡은 사람은 아무도 기억되지 않는, 정확히 어긋난 구조였습니다. 같은 일이 명령으로 소환한 TNT, 연쇄 점화로 소유자를 잃은 TNT, 그리고 증강 **「폭발 교환」**에서도 일어납니다.
이제 처치자를 네 단계로 찾습니다.
| 찾는 것 | |
|---|---|
| 1 | 피해를 일으킨 주체가 사람인가 |
| 2 | 직접 원인(TNT·화살)의 소유자가 사람인가 |
| 3 | 드래곤이 기억하는 마지막 가해자 |
| 4 | 회차를 진행 중인 팀이 하나뿐이면 그 팀 |
침대는 1·2·3이 모두 비므로 4단계가 받습니다. 팀이 둘 이상이면 아무 팀도 찍지 않고 예전처럼 「모험가」로 남습니다 — 한 대도 때리지 않은 팀에게 승리 책을 쥐여 주는 것보다 낫습니다. 「아직 게임을 시작하지 않은 팀이 잡으면 승리로 세지 않는다」는 규칙은 그대로입니다.
엔드 크리스탈은 대개 여기 걸리지 않습니다. 사람이 깬 크리스탈은 깬 사람이 실려 1단계에서 잡힙니다.
서버를 처음 상태로 되돌리는 명령이 생겼습니다 — /shareteam reset
그전까지 서버를 초기화하려면 서버를 내리고 파일 넷을 손으로 지워야 했습니다. 그중 sharedfate-team-roster.json 을 빠뜨리면 새 월드인데 팀이 살아 있는 이상한 상태가 됐고, 오류도 나지 않아 한참 뒤에야 알아차리게 됩니다.
/shareteam reset 무엇이 지워지는지 먼저 보여 주고 기다립니다
/yes 또는 /수락 실제로 지웁니다 (30초 안에, 친 사람만)
- 운영자(권한 2 이상)만 쓸 수 있고,
/shareteam yes·/st 수락으로도 확정됩니다 - 확정하면 회차·팀·보유 증강·피해 기록·월드가 전부 사라지고 1회차로 돌아갑니다
- 끊기는 방식은 전멸 때와 같습니다 — 5초 카운트다운 뒤 서버가 종료되고, 재시작 루프 스크립트가 월드를 지우고 다시 엽니다
⚠ 재시작 루프 스크립트로 켠 서버에서만 쓰십시오.
java -jar로 직접 띄운 서버는 카운트다운이 끝나면 꺼진 채로 돌아오지 않습니다. 확인 문구에도 같은 경고가 나옵니다. 서버 ZIP 에 스크립트가 들어 있습니다.
팀을 해체할 때 게임 안의 「팀 해체」와 같은 길을 지나므로, 증강이 몸에 걸어 둔 능력치와 상태이상도 함께 걷힙니다.
받는 것
| 파일 | 용도 |
|---|---|
SharedFate-0.28.1-dev-client.zip |
일반 플레이어용. 모드 두 개와 설치 안내 |
SharedFate-0.28.1-dev-server.zip |
서버를 여는 사람용. 모드 두 개, 재시작 루프 스크립트, 기본 설정, 설치 안내 |
sharedfate-0.28.1-dev.jar |
수동 설치용 JAR 하나 |
SHA256SUMS.txt |
무결성 확인 |
클라이언트 설치
- 마인크래프트와 런처를 완전히 종료합니다. 켜진 채로 JAR 을 바꾸면 그 기능을 처음 쓰는 순간 게임이 튕깁니다.
- Fabric Loader 0.19.5 이상으로 Minecraft 26.3 프로필을 만듭니다.
%appdata%\.minecraft\mods에서 이전sharedfate-*.jar를 지웁니다. 두 개가 함께 있으면 중복 로드로 게임이 켜지지 않습니다.- 26.2 에서 올라오는 분은 26.2 용 Fabric API(
fabric-api-*+26.2.jar)도 함께 빼십시오. 새로 넣는fabric-api-0.161.0+26.3.jar는 이름이 달라 덮어써지지 않고, 둘이 남으면 Fabric API 가 중복 로드되어 게임이 아예 켜지지 않습니다. - ZIP 의
mods안 JAR 두 개를 넣고 실행합니다.
서버 설치
- 빈 폴더에 Fabric 서버(26.3) 를 설치하고
eula.txt를true로 둡니다. - 서버 ZIP 을 그 폴더에 풉니다.
start-sharedfate-server.bat(Windows) 또는start-sharedfate-server.sh(리눅스 · macOS)로 켭니다. 리눅스 · macOS 는 먼저chmod +x start-sharedfate-server.sh sharedfate-server-loop.sh를 한 번 해 주십시오.
java -jar로 직접 띄우지 마십시오. 팀이 전멸하면 모드는 표식만 남기고 서버를 정상 종료합니다. 월드를 지우고 다시 여는 일은 재시작 스크립트가 합니다. 스크립트 없이 띄우면 전멸한 순간 서버가 꺼진 채로 남고,/shareteam reset도 같습니다.
이미 쓰고 계시면 서버를 내린 뒤 mods 의 JAR 두 개만 바꾸면 됩니다. 월드도 팀 명단도 설정도 그대로 이어집니다.
26.2 에서 올라오는 서버라면 옛 JAR 두 개를 먼저 지우고 새 둘을 넣으십시오. 26.2 용 Fabric API 는 이름이 달라 덮어써지지 않고, 둘이 남으면 서버가 뜨지 않습니다.