Сборки серверов

СливПлатные

Сейчас онлайн

  • katze225
  • Towa
  • hishimiro
  • Саня-ItzSancho
  • Zloydadad
  • no_war
  • Antogonist
  • sartok
  • savenx
  • Kissren
  • mygamingniki123312
  • Syker77
  • dhsousa
  • _aymar
  • _Dead_
  • undefined322
  • sashabashirov
  • Vejep
  • YAHYDZII
  • Rival
  • Sanseddy
  • Vladis_min
  • MCSolderinc
  • Felson
  • Kadzerai
  • 12345GG
  • ourlifeinhell
  • euj3ne
  • sonnda321
  • Carl666
  • Shigurama
  • RomasGrief
  • Kdxkjdjx
  • Zuya
  • pro53831
  • ujjwalwarriorrrr
  • dimakomld12312
  • RizonChik
  • VitaliyXX
  • TakumiHiji
  • Kolivan
  • pyps
  • KirillLegend
  • no1c
  • JustiHix
  • Kimonomc
  • bobobo
  • loppol0306
  • mcprsx
  • compot1123
  • miminttto
  • Sebsish
  • Masterok
  • awilon
  • Nakolotnik
  • Globus
  • Wryindi
  • xzlols
  • Emilie
  • ewrpoir
  • Axsion
  • Andr1234
  • kilyezz
  • Windy13849
  • sweer
  • OverwriteMC
  • Glorious
  • Tenkit
  • nemmem
  • MystalDev
  • s1z1
  • ThoSanTreEm
  • Dezzy22961
  • timur_1708
  • xGodstolbik2
  • Frolov
  • nazar6
  • krem_4iz
  • plum
  • Zetvix3123
  • whyzure
  • Lors1k
  • rrbg
  • Measuka
  • Ziyodovhasanboy
  • Eater
  • 1mb1r4ck
  • Leniumtv
  • Seardont
  • SayFay
  • kashka228
  • GUFIII
  • Daniiltoptl
  • MatveyKa
  • onehndpercent

Помощь papi statistic

  • Автор темыluyten
  • Дата начала
luyten
плейсхолдер %statistic_hours_played% отображает кол-во часов наигранных на сервере и я хочу сделать чтобы менялось и склонение слова "час"
Плагин TAB
тоесть 2 часа, 1 час, 5 часов
Хочу узнать возможно ли это и как?
 
_Dead_
  • _Dead_
  • Жiнка з ароматом пива, шкiра снiжного кальвiна.
  • 131
Попробуйте использовать пример который составил.

SS:
placeholders:
  statistic_hours_played:
    display: '{if %statistic_hours_played% == 1}1 час{elseif %statistic_hours_played% > 1 && %statistic_hours_played% < 5}%statistic_hours_played% часа{else}%statistic_hours_played% часов{endif}'
 
luyten
1714550689934tab конфиг принял но в таб листе строка с наигранным временем выглядит также как и написана (плейсхолдеры применяются а условный оператор так и пишется)1714550834525
 
_Dead_
  • _Dead_
  • Жiнка з ароматом пива, шкiра снiжного кальвiна.
  • 131
Вам нужно поправить все вручную, так как этот "плейсхолдер" все равно будет выводить то что ему прописали.
1714555780276
 
_Dead_
  • _Dead_
  • Жiнка з ароматом пива, шкiра снiжного кальвiна.
  • 131
Правка для методов правильного склонения слова "час":
package com.extendedclip.papi.expansion.mcstatistics;

import com.google.common.base.Enums;
import com.google.common.base.Optional;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;

import java.util.StringJoiner;

public class StatisticsUtils {
    public static int getSecondsPlayed(final Player player, final boolean isLegacy) {
        return isLegacy ? player.getStatistic(Statistic.valueOf("PLAY_ONE_TICK")) / 20 : player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20;
    }

    public static int getSecondsSinceLastDeath(final Player player, final boolean isLegacy) {
        return isLegacy ? player.getStatistic(Statistic.valueOf("TIME_SINCE_DEATH")) / 20 : player.getStatistic(Statistic.TIME_SINCE_DEATH) / 20;
    }

    @SuppressWarnings("Guava")
    public static String getStatistic(final Player player, final String identifier) {
        final Optional<Statistic> optional = Enums.getIfPresent(Statistic.class, identifier.toUpperCase());

        if (!optional.isPresent()) {
            return "Unknown statistic '" + identifier + "', check https://helpch.at/docs/" + StatisticsExpansion.SERVER_VERSION + "/org/bukkit/Statistic.html for more info";
        }

        if (optional.get().getType() != Statistic.Type.UNTYPED) {
            return "The statistic '" + identifier + "' require an argument, check https://helpch.at/docs/" + StatisticsExpansion.SERVER_VERSION + "/org/bukkit/Statistic.Type.html for more info" ;
        }

        return Integer.toString(player.getStatistic(optional.get()));
    }

    public static boolean isItem(final Material material, final boolean isLegacy) {
        if (isLegacy) {
            switch (material.name()) {
                case "ACACIA_DOOR":
                case "BED_BLOCK":
                case "BEETROOT_BLOCK":
                case "BIRCH_DOOR":
                case "BREWING_STAND":
                case "BURNING_FURNACE":
                case "CAKE_BLOCK":
                case "CARROT":
                case "CAULDRON":
                case "COCOA":
                case "CROPS":
                case "DARK_OAK_DOOR":
                case "DAYLIGHT_DETECTOR_INVERTED":
                case "DIODE_BLOCK_OFF":
                case "DIODE_BLOCK_ON":
                case "DOUBLE_STEP":
                case "DOUBLE_STONE_SLAB2":
                case "ENDER_PORTAL":
                case "END_GATEWAY":
                case "FIRE":
                case "FLOWER_POT":
                case "FROSTED_ICE":
                case "GLOWING_REDSTONE_ORE":
                case "IRON_DOOR_BLOCK":
                case "JUNGLE_DOOR":
                case "LAVA":
                case "MELON_STEM":
                case "NETHER_WARTS":
                case "PISTON_EXTENSION":
                case "PISTON_MOVING_PIECE":
                case "PORTAL":
                case "POTATO":
                case "PUMPKIN_STEM":
                case "PURPUR_DOUBLE_SLAB":
                case "REDSTONE_COMPARATOR_OFF":
                case "REDSTONE_COMPARATOR_ON":
                case "REDSTONE_LAMP_ON":
                case "REDSTONE_TORCH_OFF":
                case "REDSTONE_WIRE":
                case "SIGN_POST":
                case "SKULL":
                case "SPRUCE_DOOR":
                case "STANDING_BANNER":
                case "STATIONARY_LAVA":
                case "STATIONARY_WATER":
                case "SUGAR_CANE_BLOCK":
                case "TRIPWIRE":
                case "WALL_BANNER":
                case "WALL_SIGN":
                case "WATER":
                case "WOODEN_DOOR":
                case "WOOD_DOUBLE_STEP":
                    return false;
                default:
                    return true;
            }
        } else {
            return material.isItem();
        }
    }

    public static String formatTimeWithHours(long seconds) {
        final StringJoiner joiner = new StringJoiner(" ");

        long minutes = seconds / 60;
        long hours = minutes / 60;
        final long days = hours / 24;

        seconds %= 60;
        minutes %= 60;
        hours %= 24;

        if (days > 0) {
            joiner.add(days + " дн.");
        }

        if (hours > 0) {
            joiner.add(formatHours(hours));
        }

        if (minutes > 0) {
            joiner.add(minutes + " мин.");
        }

        if (seconds > 0) {
            joiner.add(seconds + " сек.");
        }

        return joiner.toString();
    }

    private static String formatHours(long hours) {
        if (hours == 1 || (hours > 20 && hours % 10 == 1)) {
            return hours + " час";
        } else if ((hours >= 2 && hours <= 4) || (hours > 20 && (hours % 10 >= 2 && hours % 10 <= 4))) {
            return hours + " часа";
        } else {
            return hours + " часов";
        }
    }
}
 
Последнее редактирование:
_Dead_
  • _Dead_
  • Жiнка з ароматом пива, шкiра снiжного кальвiна.
  • 131
@luyten, попробуем упростить, для этого нужно будет полностью восстановить исходный код и заменить только вот это


Вариант:
public static String formatTime(long seconds) {
    final StringJoiner joiner = new StringJoiner(" ");

    long minutes = seconds / 60;
    long hours = minutes / 60;
    final long days = hours / 24;

    seconds %= 60;
    minutes %= 60;
    hours %= 24;

    if (days > 0) {
        joiner.add(days + (days == 1 ? " день" : " дня"));
    }

    if (hours > 0) {
        joiner.add(hours + (hours == 1 ? " час" : (hours < 5 ? " часа" : " часов")));
    }

    if (minutes > 0) {
        joiner.add(minutes + (minutes == 1 ? " минута" : (minutes < 5 ? " минуты" : " минут")));
    }

    if (seconds > 0) {
        joiner.add(seconds + (seconds == 1 ? " секунда" : (seconds < 5 ? " секунды" : " секунд")));
    }

    return joiner.toString();
}
PS: вариант на скорую руку
 
luyten
насчет прошлого кода, видимо там была какая то ошибка и в итоге класс StatisticsExpansion получал значение null и в итоге после нескольких перезапусков вовсе решил не загружать papi statistic и выдавать в консоль ошибку


насчет кода "на скорую руку"
statistic работает но не выводит никакого слова (как и в дефолтном statistic)
1714574215160
 
_Dead_
  • _Dead_
  • Жiнка з ароматом пива, шкiра снiжного кальвiна.
  • 131
@luyten, дефолтный не выводил изначально? Почему сразу об этом не было сказано. В таком случае я не знаю почему он не выводит.
 
ВерхНиз