Ви можете маніпулювати зовнішнім виглядом предмета через його клієнтський предмет. У Minecraft Wiki є список стандартних модифікацій.
З них типово використовуваним типом є джерела відтінків, який дозволяє змінювати колір елемента на основі попередньо визначених умов.
Існує лише кілька попередньо визначених джерел відтінків, тому подивімося, як створити власні.
Для цього прикладу зареєструймо предмет. Якщо ви не знайомі з цим процесом, спершу прочитайте про реєстрацію предмета.
java
public static final Item WAXCAP_BLOCK_ITEM = Registry.register(
BuiltInRegistries.ITEM,
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "waxcap"),
new BlockItem(WAXCAP_BLOCK, new Item.Properties()
.setId(WAXCAP_BLOCK_ITEM_KEY))
);1
2
3
4
5
6
2
3
4
5
6
Обов’язково додайте:
- Клієнтський предмет у
/items/waxcap.json - Модель предмета у
/models/item/waxcap.json - Текстура у
/textures/item/waxcap.png
Предмет має з’явитися в грі.

Як бачите, ми використовуємо текстуру градацій сірого. Додаймо трохи кольору за допомогою джерела тону.
Джерела відтінків предметів
Зареєструймо спеціальне джерело відтінку, щоб розфарбувати наш предмет Waxcap, щоб під час дощу предмет виглядав синім, інакше він виглядав коричневим.
Спершу вам потрібно буде визначити власне джерело відтінку предмета. Це робиться шляхом реалізації інтерфейсу ItemTintSource для класу або запису.
java
public record RainTintSource(int color) implements ItemTintSource {
public static final MapCodec<RainTintSource> MAP_CODEC = RecordCodecBuilder.mapCodec(
instance -> instance.group(
ExtraCodecs.RGB_COLOR_CODEC.fieldOf("color").forGetter(RainTintSource::color)).apply(instance, RainTintSource::new)
);
public RainTintSource() {
this(ARGB.opaque(0x00BFFF)); // Color code in hex format
}
@Override
public int calculate(ItemStack itemStack, @Nullable ClientLevel clientLevel, @Nullable LivingEntity livingEntity) {
if (clientLevel != null && clientLevel.isRaining()) {
return ARGB.opaque(color);
}
return ARGB.opaque(0xFFEFD5); // Color code in hex format
}
@Override
public @NotNull MapCodec<? extends ItemTintSource> type() {
return MAP_CODEC;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Оскільки це частина визначення клієнтського предмета, значення відтінку можна змінити за допомогою пакета ресурсів. Тож вам потрібно визначити [мапу кодеків(../codecs#mapcodec), який здатний читати ваше визначення відтінку. У цьому випадку джерело відтінку матиме значення int, що описує колір, який він матиме під час дощу. Ми можемо використовувати вбудований ExtraCodecs.RGB_COLOR_CODEC, щоб створити наш кодек.
java
public static final MapCodec<RainTintSource> MAP_CODEC = RecordCodecBuilder.mapCodec(
instance -> instance.group(
ExtraCodecs.RGB_COLOR_CODEC.fieldOf("color").forGetter(RainTintSource::color)).apply(instance, RainTintSource::new)
);1
2
3
4
2
3
4
Потім ми можемо повернути цей кодек у type().
java
@Override
public @NotNull MapCodec<? extends ItemTintSource> type() {
return MAP_CODEC;
}1
2
3
4
2
3
4
Нарешті, ми можемо надати реалізацію для calculate, яка вирішить, яким буде колір відтінку. Значення color — це значення, яке надходить із пакета ресурсів.
java
@Override
public int calculate(ItemStack itemStack, @Nullable ClientLevel clientLevel, @Nullable LivingEntity livingEntity) {
if (clientLevel != null && clientLevel.isRaining()) {
return ARGB.opaque(color);
}
return ARGB.opaque(0xFFEFD5); // Color code in hex format
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Потім нам потрібно зареєструвати наше джерело відтінку предмета. Це робиться в ініціалізаторі клієнта за допомогою ID_MAPPER, оголошеного в ItemTintSources.
java
ItemTintSources.ID_MAPPER.put(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "color"), RainTintSource.MAP_CODEC);1
Коли це буде зроблено, ми можемо використовувати наше джерело відтінку предмета у визначенні клієнтського предмета.
json
{
"model": {
"type": "minecraft:model",
"model": "example-mod:item/waxcap",
"tints": [
{
"type": "example-mod:color",
"color": -16728065
}
]
}
}1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
Ви можете спостерігати за зміною кольору предмета в грі.

