minecraft-src/net/minecraft/world/item/component/UseCooldown.java
2025-07-04 02:49:36 +03:00

40 lines
1.5 KiB
Java

package net.minecraft.world.item.component;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.Optional;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
public record UseCooldown(float seconds, Optional<ResourceLocation> cooldownGroup) {
public static final Codec<UseCooldown> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
ExtraCodecs.POSITIVE_FLOAT.fieldOf("seconds").forGetter(UseCooldown::seconds),
ResourceLocation.CODEC.optionalFieldOf("cooldown_group").forGetter(UseCooldown::cooldownGroup)
)
.apply(instance, UseCooldown::new)
);
public static final StreamCodec<RegistryFriendlyByteBuf, UseCooldown> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.FLOAT, UseCooldown::seconds, ResourceLocation.STREAM_CODEC.apply(ByteBufCodecs::optional), UseCooldown::cooldownGroup, UseCooldown::new
);
public UseCooldown(float seconds) {
this(seconds, Optional.empty());
}
public int ticks() {
return (int)(this.seconds * 20.0F);
}
public void apply(ItemStack stack, LivingEntity entity) {
if (entity instanceof Player player) {
player.getCooldowns().addCooldown(stack, this.ticks());
}
}
}