BlockBasedTestInstance.java
net.minecraft.gametest.framework.BlockBasedTestInstance
信息
- 全限定名:net.minecraft.gametest.framework.BlockBasedTestInstance
- 类型:public class
- 包:net.minecraft.gametest.framework
- 源码路径:src/main/java/net/minecraft/gametest/framework/BlockBasedTestInstance.java
- 起始行号:L18
- 继承:GameTestInstance
- 职责:
TODO
字段/常量
CODEC- 类型:
MapCodec<BlockBasedTestInstance> - 修饰符:
public static final - 源码定位:
L19 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BlockBasedTestInstance(TestData<Holder<TestEnvironmentDefinition<?>>> testData) @ L23
- 构造器名:BlockBasedTestInstance
- 源码定位:L23
- 修饰符:public
参数:
- testData: TestData<Holder<TestEnvironmentDefinition<?>>>
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void run(GameTestHelper helper) @ L27
- 方法名:run
- 源码定位:L27
- 返回类型:void
- 修饰符:public
参数:
- helper: GameTestHelper
说明:
TODO
private void forAllTriggeredTestBlocks(GameTestHelper helper, TestBlockMode mode, Consumer<TestBlockEntity> action) @ L52
- 方法名:forAllTriggeredTestBlocks
- 源码定位:L52
- 返回类型:void
- 修饰符:private
参数:
- helper: GameTestHelper
- mode: TestBlockMode
- action: Consumer
说明:
TODO
private BlockPos findStartBlock(GameTestHelper helper) @ L62
- 方法名:findStartBlock
- 源码定位:L62
- 返回类型:BlockPos
- 修饰符:private
参数:
- helper: GameTestHelper
说明:
TODO
private List<BlockPos> findTestBlocks(GameTestHelper helper, TestBlockMode mode) @ L75
- 方法名:findTestBlocks
- 源码定位:L75
- 返回类型:List
- 修饰符:private
参数:
- helper: GameTestHelper
- mode: TestBlockMode
说明:
TODO
public MapCodec<BlockBasedTestInstance> codec() @ L86
- 方法名:codec
- 源码定位:L86
- 返回类型:MapCodec
- 修饰符:public
参数:
- 无
说明:
TODO
protected MutableComponent typeDescription() @ L91
- 方法名:typeDescription
- 源码定位:L91
- 返回类型:MutableComponent
- 修饰符:protected
参数:
- 无
说明:
TODO
代码
public class BlockBasedTestInstance extends GameTestInstance {
public static final MapCodec<BlockBasedTestInstance> CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(TestData.CODEC.forGetter(GameTestInstance::info)).apply(i, BlockBasedTestInstance::new)
);
public BlockBasedTestInstance(TestData<Holder<TestEnvironmentDefinition<?>>> testData) {
super(testData);
}
@Override
public void run(GameTestHelper helper) {
BlockPos startPos = this.findStartBlock(helper);
TestBlockEntity blockEntity = helper.getBlockEntity(startPos, TestBlockEntity.class);
blockEntity.trigger();
helper.onEachTick(
() -> {
List<BlockPos> acceptBlocks = this.findTestBlocks(helper, TestBlockMode.ACCEPT);
if (acceptBlocks.isEmpty()) {
helper.fail(Component.translatable("test_block.error.missing", TestBlockMode.ACCEPT.getDisplayName()));
}
boolean acceptTriggered = acceptBlocks.stream()
.map(pos -> helper.getBlockEntity(pos, TestBlockEntity.class))
.anyMatch(TestBlockEntity::hasTriggered);
if (acceptTriggered) {
helper.succeed();
} else {
this.forAllTriggeredTestBlocks(helper, TestBlockMode.FAIL, failEntity -> helper.fail(Component.literal(failEntity.getMessage())));
this.forAllTriggeredTestBlocks(helper, TestBlockMode.LOG, TestBlockEntity::trigger);
}
}
);
}
private void forAllTriggeredTestBlocks(GameTestHelper helper, TestBlockMode mode, Consumer<TestBlockEntity> action) {
for (BlockPos failBlock : this.findTestBlocks(helper, mode)) {
TestBlockEntity blockEntity = helper.getBlockEntity(failBlock, TestBlockEntity.class);
if (blockEntity.hasTriggered()) {
action.accept(blockEntity);
blockEntity.reset();
}
}
}
private BlockPos findStartBlock(GameTestHelper helper) {
List<BlockPos> testBlocks = this.findTestBlocks(helper, TestBlockMode.START);
if (testBlocks.isEmpty()) {
helper.fail(Component.translatable("test_block.error.missing", TestBlockMode.START.getDisplayName()));
}
if (testBlocks.size() != 1) {
helper.fail(Component.translatable("test_block.error.too_many", TestBlockMode.START.getDisplayName()));
}
return testBlocks.getFirst();
}
private List<BlockPos> findTestBlocks(GameTestHelper helper, TestBlockMode mode) {
List<BlockPos> blocks = new ArrayList<>();
helper.forEveryBlockInStructure(pos -> {
BlockState state = helper.getBlockState(pos);
if (state.is(Blocks.TEST_BLOCK) && state.getValue(TestBlock.MODE) == mode) {
blocks.add(pos.immutable());
}
});
return blocks;
}
@Override
public MapCodec<BlockBasedTestInstance> codec() {
return CODEC;
}
@Override
protected MutableComponent typeDescription() {
return Component.translatable("test_instance.type.block_based");
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.literal(), Component.translatable()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: