use of net.kodehawa.mantarobot.core.modules.commands.i18n.I18nContext in project MantaroBot by Mantaro.
the class ItemHelper method openLootBox.
private static void openLootBox(Context ctx, Player player, SeasonPlayer seasonPlayer, ItemType.LootboxType type, Item crate, EmoteReference typeEmote, int bound, boolean seasonal) {
List<Item> toAdd = selectItems(random.nextInt(bound) + bound, type);
ArrayList<ItemStack> ita = new ArrayList<>();
toAdd.forEach(item -> ita.add(new ItemStack(item, 1)));
PlayerData data = player.getData();
if ((type == ItemType.LootboxType.MINE || type == ItemType.LootboxType.MINE_PREMIUM) && toAdd.contains(ItemReference.SPARKLE_PICKAXE)) {
data.addBadgeIfAbsent(Badge.DESTINY_REACHES);
}
if ((type == ItemType.LootboxType.FISH || type == ItemType.LootboxType.FISH_PREMIUM) && toAdd.contains(ItemReference.SHARK)) {
data.addBadgeIfAbsent(Badge.TOO_BIG);
}
var toShow = ItemStack.reduce(ita);
// Tools must only drop one, if any.
toShow = toShow.stream().map(stack -> {
var item = stack.getItem();
if (stack.getAmount() > 1 && ((item instanceof Pickaxe) || (item instanceof FishRod) || (item instanceof Axe))) {
return new ItemStack(item, 1);
}
return stack;
}).collect(Collectors.toList());
boolean overflow = seasonal ? seasonPlayer.getInventory().merge(toShow) : player.getInventory().merge(toShow);
if (seasonal) {
seasonPlayer.getInventory().process(new ItemStack(ItemReference.LOOT_CRATE_KEY, -1));
seasonPlayer.getInventory().process(new ItemStack(crate, -1));
} else {
player.getInventory().process(new ItemStack(ItemReference.LOOT_CRATE_KEY, -1));
player.getInventory().process(new ItemStack(crate, -1));
}
data.setCratesOpened(data.getCratesOpened() + 1);
player.save();
if (seasonal) {
seasonPlayer.save();
}
I18nContext lang = ctx.getLanguageContext();
var show = toShow.stream().map(itemStack -> "x%,d \u2009%s".formatted(itemStack.getAmount(), itemStack.getItem().toDisplayString())).collect(Collectors.joining(", "));
var extra = "";
if (overflow) {
extra = ". " + lang.get("general.misc_item_usage.crate.overflow");
}
var high = toShow.stream().filter(stack -> stack.getItem() instanceof Tiered).filter(stack -> ((Tiered) stack.getItem()).getTier() >= 4).map(stack -> "%s \u2009(%d \u2b50)".formatted(stack.getItem().getEmoji(), ((Tiered) stack.getItem()).getTier())).collect(Collectors.joining(", "));
if (high.length() >= 1) {
extra = ".\n\n" + lang.get("general.misc_item_usage.crate.success_high").formatted(EmoteReference.POPPER, high);
}
ctx.sendFormat(lang.get("general.misc_item_usage.crate.success"), typeEmote.getDiscordNotation() + " ", show, extra);
}
use of net.kodehawa.mantarobot.core.modules.commands.i18n.I18nContext in project MantaroBot by Mantaro.
the class Poll method createPoll.
private void createPoll(Context ctx, Message message, I18nContext languageContext) {
runningPoll = ReactionOperations.create(message, TimeUnit.MILLISECONDS.toSeconds(timeout), new ReactionOperation() {
@Override
public int add(MessageReactionAddEvent e) {
// always return false anyway lul
return Operation.IGNORED;
}
@Override
public void onExpire() {
if (getChannel() == null)
return;
var user = ctx.getAuthor();
var embedBuilder = new EmbedBuilder().setTitle(languageContext.get("commands.poll.result_header")).setDescription(String.format(languageContext.get("commands.poll.result_screen"), user.getName(), name)).setFooter(languageContext.get("commands.poll.thank_note"), null);
var react = new AtomicInteger(0);
var counter = new AtomicInteger(0);
getChannel().retrieveMessageById(message.getIdLong()).queue(message -> {
var votes = message.getReactions().stream().filter(r -> react.getAndIncrement() <= options.length).map(r -> String.format(languageContext.get("commands.poll.vote_results"), r.getCount() - 1, options[counter.getAndIncrement()])).collect(Collectors.joining("\n"));
embedBuilder.addField(languageContext.get("commands.poll.results"), "```diff\n" + votes + "```", false);
getChannel().sendMessageEmbeds(embedBuilder.build()).queue();
});
getRunningPolls().remove(getChannel().getId());
}
@Override
public void onCancel() {
getChannel().sendMessageFormat(languageContext.get("commands.poll.cancelled"), EmoteReference.CORRECT).queue();
onExpire();
}
}, reactions(options.length));
}
use of net.kodehawa.mantarobot.core.modules.commands.i18n.I18nContext in project MantaroBot by Mantaro.
the class Character method onStart.
@Override
public boolean onStart(GameLobby lobby) {
final I18nContext languageContext = lobby.getLanguageContext();
try {
var data = JsonDataManager.fromJson(APIUtils.getFrom("/mantaroapi/bot/character"), AnimeGameData.class);
characterNameL = new ArrayList<>();
characterName = data.getName();
var imageUrl = data.getImage();
// Allow for replying with only the first name of the character.
if (characterName.contains(" ")) {
characterNameL.add(characterName.split(" ")[0]);
}
characterNameL.add(characterName);
sendEmbedImage(lobby.getChannel(), imageUrl, eb -> eb.setAuthor(languageContext.get("commands.game.character_start"), null, lobby.getEvent().getAuthor().getEffectiveAvatarUrl()).setFooter(languageContext.get("commands.game.end_footer"), null)).queue(success -> lobby.setGameLoaded(true));
return true;
} catch (JsonProcessingException ex) {
ex.printStackTrace();
lobby.getChannel().sendMessageFormat(languageContext.get("commands.game.character_load_error"), EmoteReference.WARNING, characterName).queue();
return false;
} catch (InsufficientPermissionException ex) {
lobby.getChannel().sendMessageFormat(languageContext.get("commands.game.error_missing_permissions"), EmoteReference.ERROR).queue();
return false;
} catch (Exception e) {
lobby.getChannel().sendMessageFormat(languageContext.get("commands.game.error"), EmoteReference.ERROR).queue();
log.warn("Exception while setting up a game", e);
return false;
}
}
Aggregations