01한 번의 계산에서 무엇이 일어나는가
먼저 아이템 레벨 기본 시간이 있고 아이템이 있는 환경에 따라 온도와 부패 속도가 변하며 서버가 남은 시간을 계산합니다.
온도 곡선은 부패 속도를 조정하고 '효과' 하위 페이지는 음식을 먹을 때의 온도 효과를 조정합니다. 둘은 독립된 목록이며 어떤 효과를 설정해도 보존 기간이 자동으로 바뀌지 않습니다.
durationMinutes에 저장할 때 정수 분으로 변환합니다. 내장 아이템은 설정 클래스의 10℃ 초기 온도를 덮어쓸 수 있으므로 클래스 기본값을 모든 음식의 초기 온도로 보지 마세요.ShelfDurationUnit, S2ShelfConfig, ShelfTemperatureCurve.effectiveRate.02편집기의 8개 하위 Tab
아래 8개 탭은 게임 내 '보존 기간' 편집기의 배열과 같습니다. 항목을 선택하면 필드, 용도, 혼동하기 쉬운 경계를 확인할 수 있습니다. 웹 페이지에서는 설정을 저장할 수 없습니다.
보존 기간
새 아이템의 기본 보존 시간과 기본 부패 배율을 설정합니다. 단위 버튼은 분, 시간, 일, 게임일로 전환됩니다. 입력에는 소수를 넣을 수 있고 저장 시 정수 분으로 변환됩니다. 특정 차원에 배율을 설정하지 않으면 해당 차원은 1배입니다.
| 편집 가능 항목 | 역할 |
|---|---|
| 보존 기간 / 기본 부패 배율 | 시작 시간과 부패 속도 기준을 각각 결정합니다. 배율 0은 기본 감소가 0임을 뜻합니다. |
| 만료 산물 / 온도 상속 | 만료 시 지정 아이템으로 교체합니다. minecraft:air는 소멸입니다. 상속을 켜면 만료 순간의 온도만 산물에 전달하고 산물의 보존 기간은 새로 계산됩니다. |
| 만료 명령어 | 소지자의 손에서 아이템이 만료될 때 소지자를 컨텍스트로 실행합니다. 비워 두면 실행하지 않습니다. 컨테이너 내부나 드롭 아이템 만료에는 발동하지 않습니다. |
| 차원 부패 배율 | 차원별로 ID에 따라 부패 배율을 설정합니다. 예를 들어 네더를 오버월드와 다르게 할 수 있습니다. 온도 오프셋이 아닙니다. |
ItemConfigEditScreenV2.buildShelfEditor, S2ShelfConfig.durationMinutes, ShelfDimensionMultiplier.기본
여기서는 아이템 온도가 도달할 수 있는 상하한, 처음 계산을 시작할 때의 온도, 섭취 가능한 온도 범위를 정의합니다. 부패 배율을 직접 바꾸지 않습니다. 기존 아이템의 현재 온도는 초기 온도를 수정해도 즉시 초기화되지 않습니다.
ItemConfigEditScreenV2.SHELF_COMMON_LABELS, S2ShelfConfig.Common.온도 곡선
각 곡선은 시작/끝 온도와 양 끝의 부패 배율을 설정하고 구간 안에서 온도에 따라 선형으로 변합니다. 시작 전과 끝 후 버퍼를 선택적으로 설정해 구간 밖에서 배율을 부드럽게 1배로 되돌릴 수 있습니다. 버퍼가 없고 구간 밖이면 한 곡선의 기여는 1배입니다.
temperatureCurves는 남은 보존 시간 소비를 조정하며 섭취 물약 효과를 설정하지 않습니다.ShelfTemperatureCurve.multiplierAt, multiplier, ItemConfigEditScreenV2.buildShelfCurveRows.효과
필요에 따라 사용자 지정 온도대를 추가합니다. 각 기록에는 효과 ID, 적용 온도 구간, 끝점 포함 여부, 시작/끝 레벨과 시간, 입자 스위치가 있습니다. 음식을 먹을 때 현재 온도가 해당 구간에 일치해야만 끝점 사이 선형 보간으로 레벨과 지속 시간을 결정합니다.
temperatureEffectCurves 통합 목록을 기준으로 합니다. 냉장 신선도/상온 같은 구역 이름으로 물약 효과가 자동 생성되지 않습니다.ShelfTemperatureEffectCurve, ShelfTemperatureEffectMigration, ItemConfigEditScreenV2.buildShelfZoneEffectRows.자연 환경
아이템은 자연 환경에서 목표 환경 온도로 변합니다. 기본 온도 변화량과 간격이 기본 속도를 제공합니다. 환경과 아이템 온도 차가 클수록 냉각 또는 승온의 단계 폭, 단계당 증가량, 배율 상한으로 가속할 수 있고 온도대별 추가 속도 보정도 가능합니다.
자연 목표 온도는 월드와 서버 환경 규칙에도 영향을 받습니다. 이 하위 페이지는 해당 음식의 자연 온도 변화 매개변수만 관리하며 현재 아이템의 실시간 온도를 직접 지정할 수 없습니다.
S2ShelfConfig.NaturalEnvironment, S2Environment, ItemConfigEditScreenV2.SHELF_NATURAL_DISPLAY_FIELDS.냉장고
일반 냉장고와 냉동고에는 각각 온도 변화량과 간격이 있어 아이템이 해당 설비에 들어간 뒤 목표 환경 온도에 접근하는 기본 속도를 결정합니다. 이 페이지에서는 냉동, 저온, 상온, 고온 구역에 냉장고 온도 변화 속도 보정을 각각 설정할 수 있습니다.
fridgeTemperatureChangeC와 fridgeTemperatureChangeMinutes.freezerTemperatureChangeC와 freezerTemperatureChangeMinutes.S2ShelfConfig.FridgeTemperature, ItemConfigEditScreenV2.SHELF_FRIDGE_DISPLAY_FIELDS.냉장 신선도
동결점, 냉동점, 냉장 신선도점, 고온점, 그리고 냉장 신선도가 50%일 때의 보존율을 설정합니다. 온도가 냉장 신선도점 아래로 내려가면 냉장 신선도를 얻기 시작하고 냉동점에서 50%, 동결점 이하에서 100%가 됩니다. 보호 비율은 진행도에 따라 변합니다.
S2ShelfConfig.Common, protectionFraction, S2Environment.mapNaturalColdFreshProgress.보냉도
coldRetention을 켜면 아이템 온도가 완전 동결 구간에 있는 동안 소비를 멈추고 설정 속도로 보냉 시간을 회복합니다. 완전 동결 구간을 벗어나면 정상적으로 소비합니다. 누적 손실이 단계에 도달하면 회복 상한이 영구적으로 낮아지고 다시 동결해도 상한이 자동 복구되지 않습니다.
S2ShelfConfig.coldRetention, coldRecoveryRate, coldDegradationRate, S2Engine.03인벤토리를 떠난 뒤의 시간과 멀티 보호
음식은 플레이어, 컨테이너, 바닥에서 서로 다른 시계를 사용합니다. 서버가 계산을 담당하고 클라이언트는 서버가 보낸 속도로 표시만 합니다.
두 시계와 서버 권위
플레이어 인벤토리, 장비 슬롯, 보조 손, 커서 위의 음식은 플레이어 온라인 플레이 시간으로 계산되며 오프라인 중에는 진행되지 않습니다. 상자, 냉장고, 기타 컨테이너, 바닥의 드롭 아이템, 설치된 블록 음식은 월드 시간으로 계산되며 서버가 켜져 있는 한 계속 진행됩니다. 크리에이티브 인벤토리와 JEI 안의 음식은 계산되지 않습니다.
부패, 온도, 냉장 신선도는 모두 서버가 계산하고 클라이언트가 보는 것은 서버가 보낸 스냅샷뿐입니다. 툴팁 숫자는 서버가 보낸 현재 속도로 매초 진행되어 실시간처럼 보이지만 진짜 값은 항상 서버 기준입니다. 클라이언트를 수정해도 신선한 음식을 만들 수 없습니다. 툴팁 텍스트와 색상도 서버 스킴 파일을 기준으로 합니다.
손바뀜, 로그인, 차원 변경 시 재동기화
음식이 다른 사람에게 넘어가면 새 소유자가 받은 순간부터 계산을 이어갑니다. 이전 소유자의 온라인 시간이 길었다고 해서 받자마자 갑자기 상하지 않습니다. 플레이어 로그인이나 차원 변경 시에도 재동기화되며 오프라인 기간이 인벤토리 아이템에 추가되지 않습니다.
인벤토리와 바닥 드롭 아이템은 약 20초마다 갱신됩니다. S를 누르면 즉시 계산해 최신 값을 확인할 수 있습니다. 컨테이너를 열거나, 먹기 시작하거나, Tom 저장 터미널에 접근할 때도 다음 주기를 기다리지 않고 인벤토리가 갱신됩니다.
누가 아이템 소유자인가
보존 기간이 설정된 음식은 컨테이너에 넣은 순간 넣은 플레이어의 소유자 표시가 붙습니다. 다른 플레이어가 상자를 열면 빨간 테두리가 보이고 가져갈 수 없습니다. 바닥에 떨어진 보호 음식도 줍을 수 없습니다. 냉장고와 Tom 저장 터미널 등 컨테이너도 같은 규칙을 따릅니다.
'컨테이너에 넣은' 경우만 해당합니다. 야외 상자에서 절반을 가져가도 만진 것만으로 나머지가 내 것이 되지 않으며 다른 플레이어도 공정하게 가져갈 수 있습니다. 반대로 한 번도 컨테이너에 들어간 적 없는 음식에는 소유자가 없습니다. 방금 만들거나 주운 뒤 계속 들고 다니는 음식은 자유롭게 줄 수 있습니다. 표시가 붙으면 아이템을 따라가며 자신의 상자에서 인벤토리로 되돌려도 내 것입니다.
S를 눌러 상세를 표시하고 소유자가 자신이 아니면 맨 아래에 '아이템 소유자' 줄이 추가됩니다. 소유자가 다른 같은 종류의 음식은 스택되지 않으며 두 더미로 나뉘어 표시가 덮어써지는 것을 막습니다.
신뢰 목록과 소유권 이전
/hdtrust로 자신의 보호 아이템 신뢰 목록을 관리할 수 있습니다. OP는 필요 없습니다:
| 명령어 | 역할 |
|---|---|
/hdtrust add <플레이어 이름> | 온라인 플레이어를 현재 허용 목록에 추가하고 상대가 보호 음식을 정상적으로 가져갈 수 있게 합니다. |
/hdtrust remove <플레이어 이름> | 현재 허용 목록에서 제거하지만 '과거 신뢰' 기록은 유지합니다. 상대가 이미 가져가 반환하지 않은 아이템은 상대에게 이전됩니다. |
/hdtrust forget <플레이어 이름> | 현재 허용 목록과 과거 신뢰 기록을 함께 지우고 이후 미신뢰로 처리합니다. |
/hdtrust list | 현재 허용 목록과 과거 신뢰 목록을 표시합니다. 목록의 이름을 클릭하면 제거하거나 다시 신뢰할 수 있습니다. |
신뢰는 항상 최초 소유자를 기준으로 합니다. 친구가 당신의 음식을 가져가 자기 상자에 넣어도 소유자는 당신 그대로이며 전매로 씻기지 않습니다. 자신이 음식을 버리면 양도로 간주되어 표시가 지워집니다. 친구가 당신의 음식을 가져간 뒤 버려도 마찬가지로 양도입니다.
사망 드롭은 양도가 아닙니다. 원래 소유자가 없는 음식은 사망 순간 당신의 표시가 붙고 이미 표시가 있는 음식은 원래 소유자를 유지합니다. 낯선 사람은 줍지 못하고 당신과 신뢰한 친구는 주울 수 있으며 리스폰 후 회수할 수 있습니다. 서버에서 removeOwnerOnDeathDrop(PvP 서버용)이 켜져 있으면 사망 드롭의 보호 표시를 강제로 지워 누구나 주울 수 있습니다.
ejectIllegalProtectedItems를 켜서 이런 아이템을 소지자 발밑에 바로 떨어뜨릴 수 있습니다. 기본값은 꺼져 있어 신뢰 파일 이상 시 여러 아이템을 잘못 처리하는 것을 피합니다.모두 오프라인일 때 컨테이너 안 음식은 부패하지 않음
보호 음식의 소유자와 현재 모든 신뢰 플레이어가 전부 오프라인인 동안 상자, 냉장고 등 컨테이너 안의 시간은 부패에 포함되지 않습니다. 목록에 권한자가 한 명이라도 온라인이면 정상적으로 계산됩니다.
서버는 오프라인 원장으로 '모두 오프라인' 기간을 기록합니다. 상자는 원래 열릴 때만 계산되므로 누군가 돌아와 확인할 때 한꺼번에 차감됩니다. 오프라인 원장은 활성화 이후 기간만 기록하며 그 이전 오프라인 시간은 보충할 수 없습니다. 바닥에 떨어진 보호 음식은 이 보호를 받지 않으며 정상적으로 부패합니다.
컨테이너, 전리품, 드롭 아이템
닫힌 상자는 지속적으로 스캔되지 않습니다. 음식은 마지막 계산 시각을 기록하고 상자를 열 때 이전 온도로 중간 기간을 한꺼번에 계산합니다. 도중의 날씨 변화는 구간별로 다시 계산되지 않아 연속 시뮬레이션과 약간 다르지만 매우 가깝고 성능 부담도 거의 없습니다.
상자를 열거나, 상자 안 아이템을 클릭하거나, S를 누르면 즉시 계산됩니다. 아직 계산이 시작되지 않은 상자 안 음식(명령어나 다른 모드가 직접 넣은 것, 오래된 저장에서 보존 기간 설정 전에 넣은 것 등)은 상자를 열거나 S를 누른 순간 표시가 붙고 계산이 시작됩니다. 상자가 부서지면 먼저 시간을 맞추고 냉장고 상태를 지운 뒤 드롭되어 '바닥에 떨어졌는데 아직 냉장고에 있다고 생각하는' 상황이 없습니다. 호퍼와 파이프가 상자에 넣을 때도 병합 규칙을 따르며 겹치면 더 나쁜 쪽으로 계산됩니다.
보물 상자에서 생성된 음식, 몹이 드롭한 음식은 생성된 순간 보존 기간 표시가 붙어 0부터 계산하는 신선한 음식이 됩니다. 메이드나 Create 등이 수확물을 자기 인벤토리에 직접 넣는 경우도 같습니다. 직접 제작, 제련, 기계 가공한 음식은 해당하지 않으며 처음 플레이어나 컨테이너가 볼 때부터 계산이 시작됩니다.
바닥 드롭 아이템은 20초 단위 시간대에 정렬되고 같은 시간대에 떨어진 같은 종류 음식은 보존 기간 데이터가 완전히 같아 바닥에서도 스택됩니다. 착지 후 처음 짧은 기간은 계산되지 않아 오차가 플레이어에게 유리합니다. 청크가 언로드되면 계산되지 않고 다시 로드될 때 중간 시간이 한꺼번에 보충됩니다.
바닥에 놓인 케이크 같은 블록 음식은 월드 시간으로 계산됩니다. 청크 로드 시 한 번 계산되고 같은 청크는 3분에 한 번만 계산됩니다. FTB Chunks 같은 강제 로드 청크는 1분마다 계산됩니다. 상한 케이크는 사라지거나 만료 산물을 드롭합니다. 이미 상한 케이크를 놓으면 그 자리에서 만료 산물이 됩니다. 먹지 않은 케이크는 캐면 원래 보존 기간을 유지하지만 먹은 케이크는 회수할 수 없습니다.
Jade를 설치하면 조준선을 바닥 음식에 맞출 때 HUD에 보존 기간 줄이 추가되고 시간은 초 단위, 비율은 소수 첫째 자리까지 표시됩니다. 데이터는 마찬가지로 서버에서 옵니다. 상자 안과 손에 든 음식은 계속 아이템 툴팁을 사용합니다.
스택과 병합 임계값
| 조건 | 기본 임계값 |
|---|---|
| 남은 보존 기간 차이 | 5분 이내 |
| 아이템 온도 차이 | 10℃ 이내 |
| 냉장 신선도 차이 | 20 이내(0–100 척도) |
세 조건을 모두 만족해야 병합되고 병합 후에는 더 나쁜 쪽으로 계산됩니다. 신선한 음식으로 상한 음식을 '씻는' 것은 불가능합니다. 임계값은 config/healthy_diet/server.json의 shelfMerge 섹션에서 조정할 수 있습니다. 바닥 드롭 아이템은 보존 기간 데이터가 완전히 같아야 스택되고 보냉 상한이 다른 두 개도 스택할 수 없습니다.
만료 명령어와 산물
만료 명령어는 음식이 플레이어 손에서 상하거나 이미 상한 케이크를 한 입 먹을 때만 실행됩니다. 컨테이너 안이나 바닥에서 자연적으로 상하면 실행되지 않습니다. 만료 산물은 완전히 새로운 아이템이며 원래 NBT를 가지지 않고 수량은 유지됩니다. 들어가지 않으면 인벤토리로 돌아가고 인벤토리도 가득 차면 바닥에 드롭됩니다.
S2Engine, S2Handler, S2OfflineLedger, S2StackMerge, TrustManager, HDTrustCommand, PlacedFoodRefresh.