minecraft-src/net/minecraft/world/item/enchantment/providers/SingleEnchantment.java
2025-07-04 01:41:11 +03:00

31 lines
1.3 KiB
Java

package net.minecraft.world.item.enchantment.providers;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.Holder;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.util.valueproviders.IntProvider;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.ItemEnchantments;
public record SingleEnchantment(Holder<Enchantment> enchantment, IntProvider level) implements EnchantmentProvider {
public static final MapCodec<SingleEnchantment> CODEC = RecordCodecBuilder.mapCodec(
instance -> instance.group(
Enchantment.CODEC.fieldOf("enchantment").forGetter(SingleEnchantment::enchantment), IntProvider.CODEC.fieldOf("level").forGetter(SingleEnchantment::level)
)
.apply(instance, SingleEnchantment::new)
);
@Override
public void enchant(ItemStack stack, ItemEnchantments.Mutable enchantments, RandomSource random, DifficultyInstance difficulty) {
enchantments.upgrade(this.enchantment, Mth.clamp(this.level.sample(random), this.enchantment.value().getMinLevel(), this.enchantment.value().getMaxLevel()));
}
@Override
public MapCodec<SingleEnchantment> codec() {
return CODEC;
}
}