Статистика 26.1.2
Дізнайтеся, як створити та використовувати власну статистику гравця.
Статистика — це спосіб відстежувати певні дії або час, який гравець проводить у світі. Стандартна гра відстежує статистику поширених дій, таких як стрибки, відстань подолану на човні, взаємодії з блоками, використання предметів і багато іншого. Також можна додати власну статистику для відстеження певної взаємодії.
Створення статистики
Щоб додати власну статистику, створіть Identifier, який використовуватиметься для реєстрації та збільшення статистики:
java
public static final Identifier FRIENDSHIPS_MADE = register("friendships_made", StatFormatter.DEFAULT);1
Потім зареєструйте статистику:
java
public class ModStats {
public static final Identifier FRIENDSHIPS_MADE = register("friendships_made", StatFormatter.DEFAULT);
private static Identifier register(String name, StatFormatter formatter) {
Identifier id = Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, name);
Registry.register(BuiltInRegistries.CUSTOM_STAT, name, id);
Stats.CUSTOM.get(id, formatter);
return id;
}
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Додаючи статистику на екран статистики за допомогою Stats.CUSTOM.get(), ви також можете вказати засіб форматування статистики, який визначає, як число показується в списку статистики. Стандартна гра надає такі засоби форматування:
DEFAULT: показує поточне число.DIVIDE_BY_TEN: показує число як десятковий дріб, поділений на десять.DISTANCE: показує число як відстань: залежно від розміру числа воно буде показано в сантиметрах, метрах або кілометрах.TIME: показує число як час. Залежно від розміру числа, це буде показано в секундах, хвилинах, годинах або днях.
Не забудьте ініціалізувати клас ModStats у вашому ініціалізаторі мода:
java
public static void initialize() {
}1
2
2
java
public class ExampleModStats implements ModInitializer {
@Override
public void onInitialize() {
ModStats.initialize();
}
}1
2
3
4
5
6
2
3
4
5
6
Використання статистики
Для цього прикладу ми створимо блок Friends, який дружить зі своїми сусідами. Ми будемо відстежувати, скільки друзів гравець створив із блоком.
Для цього ми використаємо метод Player#awardStat(stat, сума), щоб збільшити статистику на кількість сусідів, які має блок під час розміщення:
java
public class FriendsBlock extends Block {
@Override
public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable LivingEntity by, ItemStack itemStack) {
super.setPlacedBy(level, pos, state, by, itemStack);
if (!(by instanceof Player player)) return;
int neighborCount = 0;
for (Direction dir : Direction.values()) {
if (!level.isEmptyBlock(pos.relative(dir))) {
neighborCount++;
}
}
player.awardStat(ModStats.FRIENDSHIPS_MADE, neighborCount);
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Ви також можете використовувати Player#awardStat(stat), щоб збільшити статистику на 1.
Оскільки блоки Friends дуже прив’язані один до одного, зламати один означає розірвати всю дружбу. Зробімо так, щоб ламання блока Friends скинуло статистику гравця назад до 0 за допомогою Player#resetStat():
java
@Override
public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) {
player.resetStat(Stats.CUSTOM.get(ModStats.FRIENDSHIPS_MADE));
return super.playerWillDestroy(level, pos, state, player);
}1
2
3
4
5
6
2
3
4
5
6






