54 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.core.particles;
 | |
| 
 | |
| import com.mojang.serialization.Codec;
 | |
| import com.mojang.serialization.DataResult;
 | |
| import com.mojang.serialization.MapCodec;
 | |
| import com.mojang.serialization.codecs.RecordCodecBuilder;
 | |
| import net.minecraft.network.RegistryFriendlyByteBuf;
 | |
| import net.minecraft.network.codec.ByteBufCodecs;
 | |
| import net.minecraft.network.codec.StreamCodec;
 | |
| import net.minecraft.world.level.gameevent.EntityPositionSource;
 | |
| import net.minecraft.world.level.gameevent.PositionSource;
 | |
| 
 | |
| public class VibrationParticleOption implements ParticleOptions {
 | |
| 	private static final Codec<PositionSource> SAFE_POSITION_SOURCE_CODEC = PositionSource.CODEC
 | |
| 		.validate(
 | |
| 			positionSource -> positionSource instanceof EntityPositionSource
 | |
| 				? DataResult.error(() -> "Entity position sources are not allowed")
 | |
| 				: DataResult.success(positionSource)
 | |
| 		);
 | |
| 	public static final MapCodec<VibrationParticleOption> CODEC = RecordCodecBuilder.mapCodec(
 | |
| 		instance -> instance.group(
 | |
| 				SAFE_POSITION_SOURCE_CODEC.fieldOf("destination").forGetter(VibrationParticleOption::getDestination),
 | |
| 				Codec.INT.fieldOf("arrival_in_ticks").forGetter(VibrationParticleOption::getArrivalInTicks)
 | |
| 			)
 | |
| 			.apply(instance, VibrationParticleOption::new)
 | |
| 	);
 | |
| 	public static final StreamCodec<RegistryFriendlyByteBuf, VibrationParticleOption> STREAM_CODEC = StreamCodec.composite(
 | |
| 		PositionSource.STREAM_CODEC,
 | |
| 		VibrationParticleOption::getDestination,
 | |
| 		ByteBufCodecs.VAR_INT,
 | |
| 		VibrationParticleOption::getArrivalInTicks,
 | |
| 		VibrationParticleOption::new
 | |
| 	);
 | |
| 	private final PositionSource destination;
 | |
| 	private final int arrivalInTicks;
 | |
| 
 | |
| 	public VibrationParticleOption(PositionSource destination, int arrivalInTicks) {
 | |
| 		this.destination = destination;
 | |
| 		this.arrivalInTicks = arrivalInTicks;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public ParticleType<VibrationParticleOption> getType() {
 | |
| 		return ParticleTypes.VIBRATION;
 | |
| 	}
 | |
| 
 | |
| 	public PositionSource getDestination() {
 | |
| 		return this.destination;
 | |
| 	}
 | |
| 
 | |
| 	public int getArrivalInTicks() {
 | |
| 		return this.arrivalInTicks;
 | |
| 	}
 | |
| }
 |