PagedCommand
CoreProtect의 검색 결과처럼, 페이지화 된 채팅 UI를 구현할 수 있는 SigCommand 템플릿 입니다.
Usage
extends PagedCommand<T extends Paged>를 구현합니다. 이때Paged는 유저의 검색 결과를 저장하는 역할을 합니다.아래는 일반적인 사용 예시입니다.
@Override
public void onCommand(@NotNull SigCommandInput input) {
checkConsole(input);
runAsync(() -> {
String subCmd = input.getNextArg();
if (ParseUtil.isInteger(subCmd)) {
sendPage(input, setPage(input, Integer.parseInt(subCmd)));
// 숫자 입력시 저장된 검색 결과(Paged)의 페이지를 바꾸고 검색 결과를 표시함
return;
}
Player player = input.getPlayer();
String value = input.readToEnd(1);
SigItemId itemId = Optional
.ofNullable(value)
.map(ItemUtil::getIdFromSearch)
.orElseGet(() -> SigItemAPI.getItemId(player.getInventory().getItemInMainHand()));
setPaged(input, new UserShopSearcher(itemId)); // 검색 결과를 저장함
sendPage(input, setPage(input, 1));
});
}
private void sendPage(@NotNull SigCommandInput input,
@NotNull UserShopSearcher userShopSearcher) {
if (userShopSearcher.getItemId() == null)
send(input, getMessage("USER_SHOP_SEARCH_NOT_FOUND"));
else
sendSearchResult(input, searchShops(userShopSearcher.getItemId()), getLocaleId());
}
private void sendSearchResult(@NotNull SigCommandInput input,
@NotNull List<UserShopData> shops,
@NotNull String localeId) {
send(input, new SigStringEditor()
.replace("{count}", String.valueOf(shops.size()))
.replace("{itemName}", shops.getFirst().getItemName())
.edit(getMultipleMessage("USER_SHOP_SEARCH_RESULT")));
for (UserShopData shop : paginate(shops, input)) {
sendData(input, localeId, shop);
}
// paginate를 통해 검색 결과에서 표시할 검색 결과만을 골라낼 수 있음
send(input, formatPage(input, shops)
.edit(getMultipleMessage("USER_SHOP_SEARCH_RESULT_FOOTER")));
// formatPage로 {page} 및 {maxPage}를 표시할 수 있음
}Last updated