39 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util.valueproviders;
 | |
| 
 | |
| import com.mojang.datafixers.util.Either;
 | |
| import com.mojang.serialization.Codec;
 | |
| import com.mojang.serialization.DataResult;
 | |
| import net.minecraft.core.registries.BuiltInRegistries;
 | |
| 
 | |
| public abstract class FloatProvider implements SampledFloat {
 | |
| 	private static final Codec<Either<Float, FloatProvider>> CONSTANT_OR_DISPATCH_CODEC = Codec.either(
 | |
| 		Codec.FLOAT, BuiltInRegistries.FLOAT_PROVIDER_TYPE.byNameCodec().dispatch(FloatProvider::getType, FloatProviderType::codec)
 | |
| 	);
 | |
| 	public static final Codec<FloatProvider> CODEC = CONSTANT_OR_DISPATCH_CODEC.xmap(
 | |
| 		either -> either.map(ConstantFloat::of, floatProvider -> floatProvider),
 | |
| 		floatProvider -> floatProvider.getType() == FloatProviderType.CONSTANT ? Either.left(((ConstantFloat)floatProvider).getValue()) : Either.right(floatProvider)
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Creates a codec for a FloatProvider that only accepts numbers in the given range.
 | |
| 	 */
 | |
| 	public static Codec<FloatProvider> codec(float minInclusive, float maxInclusive) {
 | |
| 		return CODEC.validate(
 | |
| 			floatProvider -> {
 | |
| 				if (floatProvider.getMinValue() < minInclusive) {
 | |
| 					return DataResult.error(() -> "Value provider too low: " + minInclusive + " [" + floatProvider.getMinValue() + "-" + floatProvider.getMaxValue() + "]");
 | |
| 				} else {
 | |
| 					return floatProvider.getMaxValue() > maxInclusive
 | |
| 						? DataResult.error(() -> "Value provider too high: " + maxInclusive + " [" + floatProvider.getMinValue() + "-" + floatProvider.getMaxValue() + "]")
 | |
| 						: DataResult.success(floatProvider);
 | |
| 				}
 | |
| 			}
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	public abstract float getMinValue();
 | |
| 
 | |
| 	public abstract float getMaxValue();
 | |
| 
 | |
| 	public abstract FloatProviderType<?> getType();
 | |
| }
 |