Skip to content

⚙️ 2계층 구성 아키텍처 시스템

Agrarian Reform은 전역 JSON 템플릿과 인게임 게임 규칙을 연결하는 2계층 구성 시스템을 제공합니다.


🏗️ 아키텍처 개요

                      전역 설정 템플릿 (스키마 v2)
                         config/agrarian-reform.json

                                     ▼ (서버 / 월드 시작 시)
                         동적 게임 규칙 매니저
                   월드 규칙 등록 및 신규 작물 감지

                                     ▼ (Runtime Administration)
        MODMENU & YACL v3 클라이언트 GUI (3개 탭) <---> 인게임 /gamerule 명령어

                                     ▼ (언로드 / 저장 시 자동 저장)
                       THREAD-SAFE DIRTY-TRACKING PERSISTENCE

1. 전역 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 메뉴를 사용할 수 있습니다:

  1. 일반 옵션 탭: 관개 반경 슬라이더($0 \to 32$), 순수 물 토글, 비 성장 가속 슬라이더($0 \to 10$), 생물 다양성, 우클릭 수확, 뼛가루 확장.
  2. 몰입감 및 연출 탭: 짓밟기 면제, 플레이어/반려동물 한정 토글, 항상 젖은 경작지, 풀 바스락 소리, 주민 행복 입자.
  3. 작물별 배율 탭: 감지된 모든 모드 작물의 알파벳순 동적 목록 ($-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 개발 환경 설정 및 빌드.

Official documentation & web portal for Dasik Igaijinn mods.