62 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.gametest.framework;
 | |
| 
 | |
| import com.mojang.serialization.Codec;
 | |
| import com.mojang.serialization.MapCodec;
 | |
| import com.mojang.serialization.codecs.RecordCodecBuilder;
 | |
| import java.util.function.Function;
 | |
| import net.minecraft.core.Holder;
 | |
| import net.minecraft.resources.ResourceLocation;
 | |
| import net.minecraft.util.ExtraCodecs;
 | |
| import net.minecraft.world.level.block.Rotation;
 | |
| 
 | |
| public record TestData<EnvironmentType>(
 | |
| 	EnvironmentType environment,
 | |
| 	ResourceLocation structure,
 | |
| 	int maxTicks,
 | |
| 	int setupTicks,
 | |
| 	boolean required,
 | |
| 	Rotation rotation,
 | |
| 	boolean manualOnly,
 | |
| 	int maxAttempts,
 | |
| 	int requiredSuccesses,
 | |
| 	boolean skyAccess
 | |
| ) {
 | |
| 	public static final MapCodec<TestData<Holder<TestEnvironmentDefinition>>> CODEC = RecordCodecBuilder.mapCodec(
 | |
| 		instance -> instance.group(
 | |
| 				TestEnvironmentDefinition.CODEC.fieldOf("environment").forGetter(TestData::environment),
 | |
| 				ResourceLocation.CODEC.fieldOf("structure").forGetter(TestData::structure),
 | |
| 				ExtraCodecs.POSITIVE_INT.fieldOf("max_ticks").forGetter(TestData::maxTicks),
 | |
| 				ExtraCodecs.NON_NEGATIVE_INT.optionalFieldOf("setup_ticks", 0).forGetter(TestData::setupTicks),
 | |
| 				Codec.BOOL.optionalFieldOf("required", true).forGetter(TestData::required),
 | |
| 				Rotation.CODEC.optionalFieldOf("rotation", Rotation.NONE).forGetter(TestData::rotation),
 | |
| 				Codec.BOOL.optionalFieldOf("manual_only", false).forGetter(TestData::manualOnly),
 | |
| 				ExtraCodecs.POSITIVE_INT.optionalFieldOf("max_attempts", 1).forGetter(TestData::maxAttempts),
 | |
| 				ExtraCodecs.POSITIVE_INT.optionalFieldOf("required_successes", 1).forGetter(TestData::requiredSuccesses),
 | |
| 				Codec.BOOL.optionalFieldOf("sky_access", false).forGetter(TestData::skyAccess)
 | |
| 			)
 | |
| 			.apply(instance, TestData::new)
 | |
| 	);
 | |
| 
 | |
| 	public TestData(EnvironmentType environment, ResourceLocation structure, int maxTicks, int setupTicks, boolean required, Rotation rotation) {
 | |
| 		this(environment, structure, maxTicks, setupTicks, required, rotation, false, 1, 1, false);
 | |
| 	}
 | |
| 
 | |
| 	public TestData(EnvironmentType environment, ResourceLocation structure, int maxTicks, int setupTicks, boolean required) {
 | |
| 		this(environment, structure, maxTicks, setupTicks, required, Rotation.NONE);
 | |
| 	}
 | |
| 
 | |
| 	public <T> TestData<T> map(Function<EnvironmentType, T> mapper) {
 | |
| 		return (TestData<T>)(new TestData<>(
 | |
| 			mapper.apply(this.environment),
 | |
| 			this.structure,
 | |
| 			this.maxTicks,
 | |
| 			this.setupTicks,
 | |
| 			this.required,
 | |
| 			this.rotation,
 | |
| 			this.manualOnly,
 | |
| 			this.maxAttempts,
 | |
| 			this.requiredSuccesses,
 | |
| 			this.skyAccess
 | |
| 		));
 | |
| 	}
 | |
| }
 |