minecraft-src/net/minecraft/advancements/critereon/ItemFireworksPredicate.java
2025-07-04 03:15:13 +03:00

36 lines
1.5 KiB
Java

package net.minecraft.advancements.critereon;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.Optional;
import net.minecraft.advancements.critereon.MinMaxBounds.Ints;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.core.component.DataComponents;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.FireworkExplosion;
import net.minecraft.world.item.component.Fireworks;
public record ItemFireworksPredicate(
Optional<CollectionPredicate<FireworkExplosion, ItemFireworkExplosionPredicate.FireworkPredicate>> explosions, Ints flightDuration
) implements SingleComponentItemPredicate<Fireworks> {
public static final Codec<ItemFireworksPredicate> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
CollectionPredicate.codec(ItemFireworkExplosionPredicate.FireworkPredicate.CODEC)
.optionalFieldOf("explosions")
.forGetter(ItemFireworksPredicate::explosions),
Ints.CODEC.optionalFieldOf("flight_duration", Ints.ANY).forGetter(ItemFireworksPredicate::flightDuration)
)
.apply(instance, ItemFireworksPredicate::new)
);
@Override
public DataComponentType<Fireworks> componentType() {
return DataComponents.FIREWORKS;
}
public boolean matches(ItemStack itemStack, Fireworks fireworks) {
return this.explosions.isPresent() && !((CollectionPredicate)this.explosions.get()).test((Iterable)fireworks.explosions())
? false
: this.flightDuration.matches(fireworks.flightDuration());
}
}