minecraft-src/net/minecraft/core/particles/BlockParticleOption.java
2025-07-04 01:41:11 +03:00

44 lines
1.6 KiB
Java

package net.minecraft.core.particles;
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
public class BlockParticleOption implements ParticleOptions {
private static final Codec<BlockState> BLOCK_STATE_CODEC = Codec.withAlternative(
BlockState.CODEC, BuiltInRegistries.BLOCK.byNameCodec(), Block::defaultBlockState
);
private final ParticleType<BlockParticleOption> type;
private final BlockState state;
public static MapCodec<BlockParticleOption> codec(ParticleType<BlockParticleOption> particleType) {
return BLOCK_STATE_CODEC.<BlockParticleOption>xmap(
blockState -> new BlockParticleOption(particleType, blockState), blockParticleOption -> blockParticleOption.state
)
.fieldOf("block_state");
}
public static StreamCodec<? super RegistryFriendlyByteBuf, BlockParticleOption> streamCodec(ParticleType<BlockParticleOption> particleType) {
return ByteBufCodecs.idMapper(Block.BLOCK_STATE_REGISTRY)
.map(blockState -> new BlockParticleOption(particleType, blockState), blockParticleOption -> blockParticleOption.state);
}
public BlockParticleOption(ParticleType<BlockParticleOption> type, BlockState state) {
this.type = type;
this.state = state;
}
@Override
public ParticleType<BlockParticleOption> getType() {
return this.type;
}
public BlockState getState() {
return this.state;
}
}