Ігрові правила
ПЕРЕДУМОВИ
Можливо, ви захочете спершу завершити генерацію перекладу, але це не обов’язково.
Ігрові правила діють як специфічні для світу параметри налаштування, які гравець може змінити в грі за допомогою команди. Ці змінні зазвичай керують певною функцією світу, наприклад, pvp, spawn_monsters і advance_time керують тим, чи ввімкнено можуть битися гравці, породжуватися монстри та чи є плин часу.
Створення ігрового правила
Щоб створити власне ігрове правило, спочатку створіть клас GameRules; тут ми збираємося оголосити наші правила. У цьому класі оголосите дві константи: ідентифікатор та саме правило.
java
public class ExampleModGameRules implements ModInitializer {
// Create and register a boolean gamerule, disabled by default
public static final GameRule<Boolean> BAD_VISION_BOOLEAN_GAMERULE = GameRuleBuilder
.forBoolean(false) // Default value declaration
.category(GameRuleCategory.MISC)
.buildAndRegister(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "bad_vision"));
}1
2
3
4
5
6
7
2
3
4
5
6
7
Аргумент категорії (.category(GameRuleCategory.MISC)) визначає, до якої категорії відноситься ігрове правило на екрані створення світу. У цьому прикладі використовується категорія «Інше», надану стандартною грою, але додаткові категорії можна додати за допомогою GameRuleCategory.register. У цьому прикладі ми створили логічне правило з усталеним значенням false та ID bad_vision. Збережені значення в правилах не обмежуються логічними значеннями; інші допустимі типи включають Double, Integer і Enum.
Приклад правила, що зберігає подвійне:
java
public static final GameRule<Double> DOUBLE_GAMERULE = GameRuleBuilder
.forDouble(6.7) // Default value declaration
.category(GameRuleCategory.MISC)
.buildAndRegister(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "double_example"));1
2
3
4
2
3
4
Доступ до ігрового правила
Тепер, коли у нас є правило та його Identifier, ви можете отримати доступ до нього будь-де за допомогою методу serverLevel.getGameRules().get(GAMERULE), де аргументом .get() є константа правила, а не ID правила.
java
boolean badVisionEnabled = serverLevel.getGameRules().get(ExampleModGameRules.BAD_VISION_BOOLEAN_GAMERULE);1
Ви також можете використовувати це для доступу до значень правил стандартної гри:
java
boolean doMobGriefing = serverLevel.getGameRules().get(GameRules.MOB_GRIEFING);1
Наприклад, для правила, яке застосовує сліпоту до кожного гравця, коли воно ввімкнене, реалізація буде такою:
java
// In your mod's onInitialize():
ServerTickEvents.END_WORLD_TICK.register(serverLevel -> {
// Runs every tick on the server
// Check for the state of the gamerule
boolean badVisionEnabled = serverLevel.getGameRules().get(ExampleModGameRules.BAD_VISION_BOOLEAN_GAMERULE);
if (badVisionEnabled) {
// If the gamerule is true
for (Player player : serverLevel.getPlayers(p -> true)) {
// Apply blindness to every player
player.addEffect(new MobEffectInstance(
MobEffects.BLINDNESS,
40,
1,
false,
false,
false
));
}
}
});1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Переклад
Тепер нам потрібно дати нашому правилу показувану назву, щоб її було легко зрозуміти на екрані ігрових правил. Щоб зробити це за допомогою генерації даних, додайте такі рядки до свого постачальника мови:
java
translationBuilder.add(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "bad_vision"), "Bad Vision");1
Нарешті, нам потрібно дати опис нашому правилу. Щоб зробити це за допомогою генерації даних, додайте такі рядки до свого постачальника мови:
java
translationBuilder.add(
Util.makeDescriptionId("gamerule", Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "bad_vision")),
"Gives every player the blindness effect" // A short description of the game rule
);1
2
3
4
2
3
4
INFO
Ці ключі перекладу використовуються під час показу тексту на екрані ігрових правил. Якщо ви не використовуєте генерацію даних, ви також можете записати їх вручну у свій assets/example-mod/lang/en_us.json (uk_ua.json для української).
json
"example-mod.bad_vision": "Bad Vision",
"gamerule.example-mod.bad_vision": "Gives every player the blindness effect",1
2
2
Зміна правил в грі
Тепер ви зможете змінити значення свого правила в грі за допомогою команди /gamerule:
mcfunction
/gamerule example-mod:bad_vision true1
Правило також тепер видно в категорії «Інше» на екрані «Редагувати ігрові правила».






