package net.minecraft.world.level.block; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.util.Mth; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.item.component.SuspiciousStewEffects; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.jspecify.annotations.Nullable; public class FlowerBlock extends VegetationBlock implements SuspiciousEffectHolder { protected static final MapCodec EFFECTS_FIELD = SuspiciousStewEffects.CODEC.fieldOf("suspicious_stew_effects"); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( i -> i.group(EFFECTS_FIELD.forGetter(FlowerBlock::getSuspiciousEffects), propertiesCodec()).apply(i, FlowerBlock::new) ); private static final VoxelShape SHAPE = Block.column(6.0, 0.0, 10.0); private final SuspiciousStewEffects suspiciousStewEffects; @Override public MapCodec codec() { return CODEC; } public FlowerBlock(final Holder suspiciousStewEffect, final float effectSeconds, final BlockBehaviour.Properties properties) { this(makeEffectList(suspiciousStewEffect, effectSeconds), properties); } public FlowerBlock(final SuspiciousStewEffects suspiciousStewEffects, final BlockBehaviour.Properties properties) { super(properties); this.suspiciousStewEffects = suspiciousStewEffects; } protected static SuspiciousStewEffects makeEffectList(final Holder suspiciousStewEffect, final float effectSeconds) { return new SuspiciousStewEffects(List.of(new SuspiciousStewEffects.Entry(suspiciousStewEffect, Mth.floor(effectSeconds * 20.0F)))); } @Override protected VoxelShape getShape(final BlockState state, final BlockGetter level, final BlockPos pos, final CollisionContext context) { return SHAPE.move(state.getOffset(pos)); } @Override public SuspiciousStewEffects getSuspiciousEffects() { return this.suspiciousStewEffects; } @Nullable public MobEffectInstance getBeeInteractionEffect() { return null; } }