minecraft-src/net/minecraft/gametest/framework/FunctionGameTestInstance.java
2025-07-04 03:45:38 +03:00

56 lines
1.9 KiB
Java

package net.minecraft.gametest.framework;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.function.Consumer;
import net.minecraft.core.Holder;
import net.minecraft.core.Holder.Reference;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceKey;
public class FunctionGameTestInstance extends GameTestInstance {
public static final MapCodec<FunctionGameTestInstance> CODEC = RecordCodecBuilder.mapCodec(
instance -> instance.group(
ResourceKey.codec(Registries.TEST_FUNCTION).fieldOf("function").forGetter(FunctionGameTestInstance::function),
TestData.CODEC.forGetter(GameTestInstance::info)
)
.apply(instance, FunctionGameTestInstance::new)
);
private final ResourceKey<Consumer<GameTestHelper>> function;
public FunctionGameTestInstance(ResourceKey<Consumer<GameTestHelper>> function, TestData<Holder<TestEnvironmentDefinition>> info) {
super(info);
this.function = function;
}
@Override
public void run(GameTestHelper helper) {
((Consumer)helper.getLevel()
.registryAccess()
.get(this.function)
.map(Reference::value)
.orElseThrow(() -> new IllegalStateException("Trying to access missing test function: " + this.function.location())))
.accept(helper);
}
private ResourceKey<Consumer<GameTestHelper>> function() {
return this.function;
}
@Override
public MapCodec<FunctionGameTestInstance> codec() {
return CODEC;
}
@Override
protected MutableComponent typeDescription() {
return Component.translatable("test_instance.type.function");
}
@Override
public Component describe() {
return this.describeType().append(this.descriptionRow("test_instance.description.function", this.function.location().toString())).append(this.describeInfo());
}
}