2025-11-24 22:52:51 +03:00

128 lines
5.7 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.mojang.brigadier.context.CommandContext
*/
package net.minecraft.gametest.framework;
import com.mojang.brigadier.context.CommandContext;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
import java.util.stream.Stream;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.gametest.framework.FailedTestTracker;
import net.minecraft.gametest.framework.GameTestInstance;
import net.minecraft.gametest.framework.StructureUtils;
import net.minecraft.gametest.framework.TestInstanceFinder;
import net.minecraft.gametest.framework.TestPosFinder;
public class TestFinder
implements TestInstanceFinder,
TestPosFinder {
private static final TestInstanceFinder NO_FUNCTIONS = Stream::empty;
private static final TestPosFinder NO_STRUCTURES = Stream::empty;
private final TestInstanceFinder testInstanceFinder;
private final TestPosFinder testPosFinder;
private final CommandSourceStack source;
@Override
public Stream<BlockPos> findTestPos() {
return this.testPosFinder.findTestPos();
}
public static Builder builder() {
return new Builder();
}
private TestFinder(CommandSourceStack source, TestInstanceFinder testInstanceFinder, TestPosFinder testPosFinder) {
this.source = source;
this.testInstanceFinder = testInstanceFinder;
this.testPosFinder = testPosFinder;
}
public CommandSourceStack source() {
return this.source;
}
@Override
public Stream<Holder.Reference<GameTestInstance>> findTests() {
return this.testInstanceFinder.findTests();
}
public static class Builder {
private final UnaryOperator<Supplier<Stream<Holder.Reference<GameTestInstance>>>> testFinderWrapper;
private final UnaryOperator<Supplier<Stream<BlockPos>>> structureBlockPosFinderWrapper;
public Builder() {
this.testFinderWrapper = f -> f;
this.structureBlockPosFinderWrapper = f -> f;
}
private Builder(UnaryOperator<Supplier<Stream<Holder.Reference<GameTestInstance>>>> testFinderWrapper, UnaryOperator<Supplier<Stream<BlockPos>>> structureBlockPosFinderWrapper) {
this.testFinderWrapper = testFinderWrapper;
this.structureBlockPosFinderWrapper = structureBlockPosFinderWrapper;
}
public Builder createMultipleCopies(int amount) {
return new Builder(Builder.createCopies(amount), Builder.createCopies(amount));
}
private static <Q> UnaryOperator<Supplier<Stream<Q>>> createCopies(int amount) {
return source -> {
LinkedList copyList = new LinkedList();
List sourceList = ((Stream)source.get()).toList();
for (int i = 0; i < amount; ++i) {
copyList.addAll(sourceList);
}
return copyList::stream;
};
}
private TestFinder build(CommandSourceStack source, TestInstanceFinder testInstanceFinder, TestPosFinder testPosFinder) {
return new TestFinder(source, ((Supplier)((Supplier)this.testFinderWrapper.apply(testInstanceFinder::findTests)))::get, ((Supplier)((Supplier)this.structureBlockPosFinderWrapper.apply(testPosFinder::findTestPos)))::get);
}
public TestFinder radius(CommandContext<CommandSourceStack> sourceStack, int radius) {
CommandSourceStack source = (CommandSourceStack)sourceStack.getSource();
BlockPos pos = BlockPos.containing(source.getPosition());
return this.build(source, NO_FUNCTIONS, () -> StructureUtils.findTestBlocks(pos, radius, source.getLevel()));
}
public TestFinder nearest(CommandContext<CommandSourceStack> sourceStack) {
CommandSourceStack source = (CommandSourceStack)sourceStack.getSource();
BlockPos pos = BlockPos.containing(source.getPosition());
return this.build(source, NO_FUNCTIONS, () -> StructureUtils.findNearestTest(pos, 15, source.getLevel()).stream());
}
public TestFinder allNearby(CommandContext<CommandSourceStack> sourceStack) {
CommandSourceStack source = (CommandSourceStack)sourceStack.getSource();
BlockPos pos = BlockPos.containing(source.getPosition());
return this.build(source, NO_FUNCTIONS, () -> StructureUtils.findTestBlocks(pos, 250, source.getLevel()));
}
public TestFinder lookedAt(CommandContext<CommandSourceStack> sourceStack) {
CommandSourceStack source = (CommandSourceStack)sourceStack.getSource();
return this.build(source, NO_FUNCTIONS, () -> StructureUtils.lookedAtTestPos(BlockPos.containing(source.getPosition()), source.getPlayer().getCamera(), source.getLevel()));
}
public TestFinder failedTests(CommandContext<CommandSourceStack> sourceStack, boolean onlyRequiredTests) {
return this.build((CommandSourceStack)sourceStack.getSource(), () -> FailedTestTracker.getLastFailedTests().filter(test -> !onlyRequiredTests || ((GameTestInstance)test.value()).required()), NO_STRUCTURES);
}
public TestFinder byResourceSelection(CommandContext<CommandSourceStack> sourceStack, Collection<Holder.Reference<GameTestInstance>> holders) {
return this.build((CommandSourceStack)sourceStack.getSource(), holders::stream, NO_STRUCTURES);
}
public TestFinder failedTests(CommandContext<CommandSourceStack> sourceStack) {
return this.failedTests(sourceStack, false);
}
}
}