SigPlaceholder

Placeholder Hook module

HookManager.addPlaceholder를 대체하기 위한 모듈입니다.

Reason

  • HookManager는 테스트 코드 실행을 방해합니다.

  • HookManager를 통해서는 동적인 placeholder를 등록할 수 없습니다. 예) sigshop_donation_statistic_(time)

Usage

SigPlaceholderApi.add()를 사용합니다. HookManager와 달리 JavaPlugin 인스턴스 제공이 필요합니다.

SigPlaceholderApi.add(SimplePlugin.getInstance(),
        "test_placeholder",
        player -> "test_value");

Feature

PlaceholderFilter

SigPlaceholderProvider가 어떤 Placeholder 값을 나타낼 수 있는지 정의합니다. Predicate로 설정할 경우 로그를 위한 이름이 있어야 합니다.

SigOnlinePlaceholder

온라인 플레이어를 위한 Placeholder로, 오프라인인 플레이어에 대해 작동을 보증하지 않습니다.

  • filter: PlaceholderFilter 입니다.

  • processor: 실제 값을 처리하는 BiFunction 입니다.

  • canLoad: 입력 값으로부터 값을 처리할 수 있는 상태인지 나타낼 수 있는 BiPredicate 입니다. false일 경우 defaultValue를 반환합니다.

  • defaultValue: canLoadfalse 이거나, 예외가 발생했을 때 대신 전달할 기본 값입니다.

  • logging: 예외 발생 시 로깅을 할 지 여부를 결정합니다.

Example

OfflinePlayer를 넣더라도 플레이어가 온라인 일 경우 Player로 변환하여 작업을 실행합니다.

SigOfflinePlaceholder

오프라인 플레이어를 위한 Placeholder로, 온라인 플레이어를 넣었을 때는 OfflinePlayer로 캐스팅 하여 작업을 실행합니다.

SigPlaceholderAdapter

함수형 인터페이스가 아니라 메서드를 활용하여 구현하고 싶은 경우 SigOnlinePlaceholderAdapter 또는 SigOfflinePlaceholderAdapter를 사용할 수 있습니다.

toPlaceholder() 를 호출하여 SigPlaceholderProvider 로 변환할 수 있습니다.

Example with Adapter

기본 구현에서 OfflinePlayer 구현 시 Player에서도 동작하나, Player만 구현할 경우 OfflinePlayer에 대해서는 작동하지 않습니다.

Caution

  • HookManager와 호환되지 않으며, SigPlaceholderApi를 사용할 경우 모든 HookManager 사용 코드를 변경해야 합니다.

  • SimplePlugin#reload를 호출할 시 HookManager와 비호환으로 인해 placeholder가 덮어쓰기 됩니다.

  • OfflinePlayerPlayer는 별도로 처리 될 수 있습니다. SigPlaceholderProvider를 참고하세요.

Last updated