Du kannst das Aussehen eines Items über sein Client Item manipulieren. Es gibt eine Liste an Vanilla Modifikatoren im Minecraft Wiki.
Ein häufig verwendeter Typ davon sind Farbquellen, die dir erlauben die Farbe eines Items basierend auf vordefinierten Bedingungen ändern zu können.
Es gibt nur eine Handvoll vordefinierter Farbquellen, also schauen wir uns an, wie wir unsere eigenen erstellen können.
Für dieses Beispiel registrieren wir ein Item. Wenn du mit diesem Vorgang nicht vertraut bist, lies bitte zuerst die Informationen zur Registrierung eines Items.
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
Stelle sicher, folgendes hinzuzufügen:
- Ein Client Item in
/items/waxcap.json - Ein Item Modell in
/models/item/waxcap.json - Eine Textur in
/textures/item/waxcap.png
Dass Item sollte im Spiel erscheinen.

Wie du sehen kannst, verwenden wir eine Graustufen-Textur. Fügen wir mit einer Farbquelle etwas Farbe hinzu.
Item Farbquellen
Registrieren wir eine benutzerdefinierte Farbquelle, um unser Waxcap-Item einzufärben, sodass es bei Regen blau und ansonsten braun erscheint.
Zunächst müssen Sie eine benutzerdefinierte Farbquelle für das Item definieren. Dies geschieht durch die Implementierung des Interface ItemTintSource in einer Klasse oder einem Record.
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
Da dies Teil der Client Item Definition ist, können die Farbwerte mit einem Ressourcenpaket geändert werden. Du musst also einen Map Codec definieren, der deine Farbton-Definition lesen kann. In diesem Fall hat die Farbquelle einen int-Wert, der die Farbe beschreibt, die sie bei Regen haben wird. Wir können den integrierten ExtraCodecs.RGB_COLOR_CODEC verwenden, um unseren Codec zusammenzustellen.
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
Wir können diesen Codec dann in type() zurückgeben.
java
@Override
public @NotNull MapCodec<? extends ItemTintSource> type() {
return MAP_CODEC;
}1
2
3
4
2
3
4
Schließlich können wir eine Implementierung für calculate bereitstellen, die entscheidet, wie der Farbton aussehen soll. Der Wert von color stammt aus dem Ressourcenpaket.
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
Anschließend müssen wir unsere Item Farbquelle registrieren. Dies geschieht im Client Initialisierer unter Verwendung des in ItemTintSources deklarierten ID_MAPPER.
java
ItemTintSources.ID_MAPPER.put(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "color"), RainTintSource.MAP_CODEC);1
Sobald dies erledigt ist, können wir unsere Item Farbquelle in einer Client Item Definition verwenden.
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
Du kannst die Farbänderung des Items im Spiel wahrnehmen.

