⚙️ 2계층 구성 아키텍처 시스템
Agrarian Reform은 전역 JSON 템플릿과 인게임 게임 규칙을 연결하는 2계층 구성 시스템을 제공합니다.
🏗️ 아키텍처 개요
전역 설정 템플릿 (스키마 v2)
config/agrarian-reform.json
│
▼ (서버 / 월드 시작 시)
동적 게임 규칙 매니저
월드 규칙 등록 및 신규 작물 감지
│
▼ (Runtime Administration)
MODMENU & YACL v3 클라이언트 GUI (3개 탭) <---> 인게임 /gamerule 명령어
│
▼ (언로드 / 저장 시 자동 저장)
THREAD-SAFE DIRTY-TRACKING PERSISTENCE1. 전역 JSON 템플릿 (config/agrarian-reform.json)
이 파일은 새로운 월드가 생성될 때 적용되는 기본값을 저장합니다. 기존 월드의 설정은 변경되지 않습니다.
2. 활성 월드 게임 규칙 (agrarian_reform:*)
실행 중인 월드는 마인크래프트 게임 규칙으로 직접 관리됩니다. GUI나 명령어로 변경하면 서버 재부팅 없이 즉시 적용됩니다.
3. 스레드 안전 변경 감지 및 모드 제거 안정성
- 비동기 저장 스로틀링: 새로 감지된 작물은
dirty = true로 표시되며 월드 정기 저장 시점에 안전하게 저장됩니다. - 모드 제거 시 안전성: 문자열 식별자로 저장되므로 모드를 삭제해도 파일 손상이나 파싱 오류가 발생하지 않습니다.
📜 기본 config/agrarian-reform.json (Schema v2)
json
{
"configVersion": 2,
"hydrationSourceRange": 8,
"hydrationFlowingRange": 4,
"pureWaterHydrationOnly": false,
"rainGrowthAcceleration": 1,
"growthBiodiversityBonus": true,
"totalTrampleImmunity": false,
"trampleImmunityPlayersOnly": false,
"alwaysWetFarmland": false,
"seedsGrowGrass": true,
"rightClickHarvest": true,
"universalBonemeal": true,
"globalGrowthMultiplier": 100,
"ambientCropRustle": true,
"ambientVitalityParticles": true,
"forcedCrops": [
"minecraft:wheat",
"minecraft:carrots",
"minecraft:potatoes",
"minecraft:beetroots"
],
"forcedGrowthMultipliers": {
"minecraft:wheat": 0,
"minecraft:carrots": 0,
"minecraft:potatoes": 0,
"minecraft:beetroots": 0
}
}🖥️ 선택적 클라이언트 GUI 연동 (ModMenu & YACL v3)
ModMenu와 **YetAnotherConfigLib v3 (YACL)**이 설치되어 있으면 3개의 탭으로 구성된 GUI 메뉴를 사용할 수 있습니다:
- 일반 옵션 탭: 관개 반경 슬라이더($0 \to 32$), 순수 물 토글, 비 성장 가속 슬라이더($0 \to 10$), 생물 다양성, 우클릭 수확, 뼛가루 확장.
- 몰입감 및 연출 탭: 짓밟기 면제, 플레이어/반려동물 한정 토글, 항상 젖은 경작지, 풀 바스락 소리, 주민 행복 입자.
- 작물별 배율 탭: 감지된 모든 모드 작물의 알파벳순 동적 목록 ($-1 = \text{동결}$, $0 = \text{전역 상속}$, $\ge 100 = \text{맞춤 속도}$).
java
public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib")) {
return YaclScreenHelper::createScreen;
}
return parent -> null;
}
}🛡️ 전용 서버 충돌 방지: YACL GUI 코드는
YaclScreenHelper에 엄격하게 격리되어 전용 서버에서 클라이언트 코드를 로드하지 않습니다!
See also: 게임 규칙 (GameRules) 레퍼런스, 작물 레지스트리 및 범용 작물, and 개발 환경 설정 및 빌드.
