GameTestServer.java

net.minecraft.gametest.framework.GameTestServer

信息

  • 全限定名:net.minecraft.gametest.framework.GameTestServer
  • 类型:public class
  • 包:net.minecraft.gametest.framework
  • 源码路径:src/main/java/net/minecraft/gametest/framework/GameTestServer.java
  • 起始行号:L76
  • 继承:MinecraftServer
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L77
    • 说明:

      TODO

  • PROGRESS_REPORT_INTERVAL

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L78
    • 说明:

      TODO

  • TEST_POSITION_RANGE

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L79
    • 说明:

      TODO

  • NO_SERVICES

    • 类型: Services
    • 修饰符: private static final
    • 源码定位: L80
    • 说明:

      TODO

  • ENABLED_FEATURES

    • 类型: FeatureFlagSet
    • 修饰符: private static final
    • 源码定位: L83
    • 说明:

      TODO

  • sampleLogger

    • 类型: LocalSampleLogger
    • 修饰符: private final
    • 源码定位: L86
    • 说明:

      TODO

  • testSelection

    • 类型: Optional<String>
    • 修饰符: private final
    • 源码定位: L87
    • 说明:

      TODO

  • verify

    • 类型: boolean
    • 修饰符: private final
    • 源码定位: L88
    • 说明:

      TODO

  • repeatCount

    • 类型: int
    • 修饰符: private final
    • 源码定位: L89
    • 说明:

      TODO

  • testBatches

    • 类型: List<GameTestBatch>
    • 修饰符: private
    • 源码定位: L90
    • 说明:

      TODO

  • stopwatch

    • 类型: Stopwatch
    • 修饰符: private final
    • 源码定位: L91
    • 说明:

      TODO

  • WORLD_OPTIONS

    • 类型: WorldOptions
    • 修饰符: private static final
    • 源码定位: L92
    • 说明:

      TODO

  • testTracker

    • 类型: MultipleTestTracker
    • 修饰符: private
    • 源码定位: L93
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.gametest.framework.GameTestServer.MockProfileResolver

    • 类型: class
    • 修饰符: private static
    • 源码定位: L398
    • 说明:

      TODO

  • net.minecraft.gametest.framework.GameTestServer.MockUserNameToIdResolver

    • 类型: class
    • 修饰符: private static
    • 源码定位: L410
    • 说明:

      TODO

构造器

private GameTestServer(Thread serverThread, LevelStorageSource.LevelStorageAccess levelStorageSource, PackRepository packRepository, WorldStem worldStem, Optional<String> testSelection, boolean verify, int repeatCount) @ L148

  • 构造器名:GameTestServer
  • 源码定位:L148
  • 修饰符:private

参数:

  • serverThread: Thread
  • levelStorageSource: LevelStorageSource.LevelStorageAccess
  • packRepository: PackRepository
  • worldStem: WorldStem
  • testSelection: Optional
  • verify: boolean
  • repeatCount: int

说明:

TODO

方法

下面的方法块按源码顺序生成。

public static GameTestServer create(Thread serverThread, LevelStorageSource.LevelStorageAccess levelStorageSource, PackRepository packRepository, Optional<String> testSelection, boolean verify, int repeatCount) @ L95

  • 方法名:create
  • 源码定位:L95
  • 返回类型:GameTestServer
  • 修饰符:public static

参数:

  • serverThread: Thread
  • levelStorageSource: LevelStorageSource.LevelStorageAccess
  • packRepository: PackRepository
  • testSelection: Optional
  • verify: boolean
  • repeatCount: int

说明:

TODO

protected boolean initServer() @ L174

  • 方法名:initServer
  • 源码定位:L174
  • 返回类型:boolean
  • 修饰符:protected

参数:

说明:

TODO

private List<GameTestBatch> evaluateTestsToRun(ServerLevel level) @ L189

  • 方法名:evaluateTestsToRun
  • 源码定位:L189
  • 返回类型:List
  • 修饰符:private

参数:

  • level: ServerLevel

说明:

TODO

private static Stream<GameTestInfo> rotateAndMultiply(Holder.Reference<GameTestInstance> test, ServerLevel level) @ L220

  • 方法名:rotateAndMultiply
  • 源码定位:L220
  • 返回类型:Stream
  • 修饰符:private static

参数:

  • test: Holder.Reference
  • level: ServerLevel

说明:

TODO

public static Stream<Holder.Reference<GameTestInstance>> getTestsForSelection(RegistryAccess registries, String selection) @ L232

  • 方法名:getTestsForSelection
  • 源码定位:L232
  • 返回类型:Stream<Holder.Reference>
  • 修饰符:public static

参数:

  • registries: RegistryAccess
  • selection: String

说明:

TODO

private Stream<GameTestInfo> multiplyTest(Holder.Reference<GameTestInstance> test, ServerLevel level) @ L236

  • 方法名:multiplyTest
  • 源码定位:L236
  • 返回类型:Stream
  • 修饰符:private

参数:

  • test: Holder.Reference
  • level: ServerLevel

说明:

TODO

protected void tickServer(BooleanSupplier haveTime) @ L246

  • 方法名:tickServer
  • 源码定位:L246
  • 返回类型:void
  • 修饰符:protected

参数:

  • haveTime: BooleanSupplier

说明:

TODO

private static void logFailedTest(GameTestInfo testInfo) @ L279

  • 方法名:logFailedTest
  • 源码定位:L279
  • 返回类型:void
  • 修饰符:private static

参数:

  • testInfo: GameTestInfo

说明:

TODO

protected SampleLogger getTickTimeLogger() @ L289

  • 方法名:getTickTimeLogger
  • 源码定位:L289
  • 返回类型:SampleLogger
  • 修饰符:protected

参数:

说明:

TODO

public boolean isTickTimeLoggingEnabled() @ L294

  • 方法名:isTickTimeLoggingEnabled
  • 源码定位:L294
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

protected void waitUntilNextTick() @ L299

  • 方法名:waitUntilNextTick
  • 源码定位:L299
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

public SystemReport fillServerSystemReport(SystemReport systemReport) @ L304

  • 方法名:fillServerSystemReport
  • 源码定位:L304
  • 返回类型:SystemReport
  • 修饰符:public

参数:

  • systemReport: SystemReport

说明:

TODO

protected void onServerExit() @ L310

  • 方法名:onServerExit
  • 源码定位:L310
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

protected void onServerCrash(CrashReport report) @ L317

  • 方法名:onServerCrash
  • 源码定位:L317
  • 返回类型:void
  • 修饰符:protected

参数:

  • report: CrashReport

说明:

TODO

private void startTests(ServerLevel level) @ L324

  • 方法名:startTests
  • 源码定位:L324
  • 返回类型:void
  • 修饰符:private

参数:

  • level: ServerLevel

说明:

TODO

private boolean haveTestsStarted() @ L339

  • 方法名:haveTestsStarted
  • 源码定位:L339
  • 返回类型:boolean
  • 修饰符:private

参数:

说明:

TODO

public boolean isHardcore() @ L343

  • 方法名:isHardcore
  • 源码定位:L343
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public LevelBasedPermissionSet operatorUserPermissions() @ L348

  • 方法名:operatorUserPermissions
  • 源码定位:L348
  • 返回类型:LevelBasedPermissionSet
  • 修饰符:public

参数:

说明:

TODO

public PermissionSet getFunctionCompilationPermissions() @ L353

  • 方法名:getFunctionCompilationPermissions
  • 源码定位:L353
  • 返回类型:PermissionSet
  • 修饰符:public

参数:

说明:

TODO

public boolean shouldRconBroadcast() @ L358

  • 方法名:shouldRconBroadcast
  • 源码定位:L358
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public boolean isDedicatedServer() @ L363

  • 方法名:isDedicatedServer
  • 源码定位:L363
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public int getRateLimitPacketsPerSecond() @ L368

  • 方法名:getRateLimitPacketsPerSecond
  • 源码定位:L368
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

public boolean useNativeTransport() @ L373

  • 方法名:useNativeTransport
  • 源码定位:L373
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public boolean isPublished() @ L378

  • 方法名:isPublished
  • 源码定位:L378
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public boolean shouldInformAdmins() @ L383

  • 方法名:shouldInformAdmins
  • 源码定位:L383
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public boolean isSingleplayerOwner(NameAndId nameAndId) @ L388

  • 方法名:isSingleplayerOwner
  • 源码定位:L388
  • 返回类型:boolean
  • 修饰符:public

参数:

  • nameAndId: NameAndId

说明:

TODO

public int getMaxPlayers() @ L393

  • 方法名:getMaxPlayers
  • 源码定位:L393
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

代码

public class GameTestServer extends MinecraftServer {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final int PROGRESS_REPORT_INTERVAL = 20;
    private static final int TEST_POSITION_RANGE = 14999992;
    private static final Services NO_SERVICES = new Services(
        null, ServicesKeySet.EMPTY, null, new GameTestServer.MockUserNameToIdResolver(), new GameTestServer.MockProfileResolver()
    );
    private static final FeatureFlagSet ENABLED_FEATURES = FeatureFlags.REGISTRY
        .allFlags()
        .subtract(FeatureFlagSet.of(FeatureFlags.REDSTONE_EXPERIMENTS, FeatureFlags.MINECART_IMPROVEMENTS));
    private final LocalSampleLogger sampleLogger = new LocalSampleLogger(4);
    private final Optional<String> testSelection;
    private final boolean verify;
    private final int repeatCount;
    private List<GameTestBatch> testBatches = new ArrayList<>();
    private final Stopwatch stopwatch = Stopwatch.createUnstarted();
    private static final WorldOptions WORLD_OPTIONS = new WorldOptions(0L, false, false);
    private @Nullable MultipleTestTracker testTracker;
 
    public static GameTestServer create(
        Thread serverThread,
        LevelStorageSource.LevelStorageAccess levelStorageSource,
        PackRepository packRepository,
        Optional<String> testSelection,
        boolean verify,
        int repeatCount
    ) {
        packRepository.reload();
        ArrayList<String> enabledPacks = new ArrayList<>(packRepository.getAvailableIds());
        enabledPacks.remove("vanilla");
        enabledPacks.addFirst("vanilla");
        WorldDataConfiguration defaultTestConfig = new WorldDataConfiguration(new DataPackConfig(enabledPacks, List.of()), ENABLED_FEATURES);
        LevelSettings testSettings = new LevelSettings("Test Level", GameType.CREATIVE, LevelSettings.DifficultySettings.DEFAULT, true, defaultTestConfig);
        WorldLoader.PackConfig packConfig = new WorldLoader.PackConfig(packRepository, defaultTestConfig, false, true);
        WorldLoader.InitConfig initConfig = new WorldLoader.InitConfig(packConfig, Commands.CommandSelection.DEDICATED, LevelBasedPermissionSet.OWNER);
 
        try {
            LOGGER.debug("Starting resource loading");
            Stopwatch stopwatch = Stopwatch.createStarted();
            WorldStem worldStem = Util.<WorldStem>blockUntilDone(
                    executor -> WorldLoader.load(
                        initConfig,
                        context -> {
                            Registry<LevelStem> noDatapackDimensions = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.stable()).freeze();
                            WorldDimensions worldDimensions = context.datapackWorldgen()
                                .lookupOrThrow(Registries.WORLD_PRESET)
                                .getOrThrow(WorldPresets.FLAT)
                                .value()
                                .createWorldDimensions();
                            WorldDimensions.Complete dimensions = worldDimensions.bake(noDatapackDimensions);
                            PrimaryLevelData levelData = new PrimaryLevelData(testSettings, dimensions.specialWorldProperty(), dimensions.lifecycle());
                            return new WorldLoader.DataLoadOutput<>(
                                new LevelDataAndDimensions.WorldDataAndGenSettings(levelData, new WorldGenSettings(WORLD_OPTIONS, worldDimensions)),
                                dimensions.dimensionsRegistryAccess()
                            );
                        },
                        WorldStem::new,
                        Util.backgroundExecutor(),
                        executor
                    )
                )
                .get();
            stopwatch.stop();
            LOGGER.debug("Finished resource loading after {} ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
            return new GameTestServer(serverThread, levelStorageSource, packRepository, worldStem, testSelection, verify, repeatCount);
        } catch (Exception var13) {
            LOGGER.warn("Failed to load vanilla datapack, bit oops", (Throwable)var13);
            System.exit(-1);
            throw new IllegalStateException();
        }
    }
 
    private GameTestServer(
        Thread serverThread,
        LevelStorageSource.LevelStorageAccess levelStorageSource,
        PackRepository packRepository,
        WorldStem worldStem,
        Optional<String> testSelection,
        boolean verify,
        int repeatCount
    ) {
        super(
            serverThread,
            levelStorageSource,
            packRepository,
            worldStem,
            Optional.of(new GameRules(ENABLED_FEATURES)),
            Proxy.NO_PROXY,
            DataFixers.getDataFixer(),
            NO_SERVICES,
            LoggingLevelLoadListener.forDedicatedServer(),
            false
        );
        this.testSelection = testSelection;
        this.repeatCount = repeatCount;
        this.verify = verify;
    }
 
    @Override
    protected boolean initServer() {
        this.setPlayerList(new PlayerList(this, this.registries(), this.playerDataStorage, new EmptyNotificationService()) {
            {
                Objects.requireNonNull(GameTestServer.this);
            }
        });
        Gizmos.withCollector(GizmoCollector.NOOP);
        this.loadLevel();
        ServerLevel level = this.overworld();
        this.testBatches = this.evaluateTestsToRun(level);
        LOGGER.info("Started game test server");
        return true;
    }
 
    private List<GameTestBatch> evaluateTestsToRun(ServerLevel level) {
        Registry<GameTestInstance> testRegistry = level.registryAccess().lookupOrThrow(Registries.TEST_INSTANCE);
        Collection<Holder.Reference<GameTestInstance>> tests;
        GameTestBatchFactory.TestDecorator decorator;
        if (this.testSelection.isPresent()) {
            tests = getTestsForSelection(level.registryAccess(), this.testSelection.get()).filter(test -> !test.value().manualOnly()).toList();
            if (tests.isEmpty()) {
                LOGGER.warn("Test selection matcher ({}) found no tests", this.testSelection.get());
                System.exit(-1);
            }
 
            if (this.verify) {
                decorator = GameTestServer::rotateAndMultiply;
                LOGGER.info("Verify requested. Will run each test that matches {} {} times", this.testSelection.get(), 100 * Rotation.values().length);
            } else if (this.repeatCount > 0) {
                decorator = this::multiplyTest;
                LOGGER.info(
                    "Each test that matches {} will be run {} times (total: {})", this.testSelection.get(), this.repeatCount, tests.size() * this.repeatCount
                );
            } else {
                decorator = GameTestBatchFactory.DIRECT;
                LOGGER.info("Will run tests matching {} ({} tests)", this.testSelection.get(), tests.size());
            }
        } else {
            tests = testRegistry.listElements().filter(test -> !test.value().manualOnly()).toList();
            decorator = GameTestBatchFactory.DIRECT;
        }
 
        return GameTestBatchFactory.divideIntoBatches(tests, decorator, level);
    }
 
    private static Stream<GameTestInfo> rotateAndMultiply(Holder.Reference<GameTestInstance> test, ServerLevel level) {
        Builder<GameTestInfo> builder = Stream.builder();
 
        for (Rotation rotation : Rotation.values()) {
            for (int i = 0; i < 100; i++) {
                builder.add(new GameTestInfo(test, rotation, level, RetryOptions.noRetries()));
            }
        }
 
        return builder.build();
    }
 
    public static Stream<Holder.Reference<GameTestInstance>> getTestsForSelection(RegistryAccess registries, String selection) {
        return ResourceSelectorArgument.parse(new StringReader(selection), registries.lookupOrThrow(Registries.TEST_INSTANCE)).stream();
    }
 
    private Stream<GameTestInfo> multiplyTest(Holder.Reference<GameTestInstance> test, ServerLevel level) {
        Builder<GameTestInfo> builder = Stream.builder();
 
        for (int i = 0; i < this.repeatCount; i++) {
            builder.add(new GameTestInfo(test, Rotation.NONE, level, RetryOptions.noRetries()));
        }
 
        return builder.build();
    }
 
    @Override
    protected void tickServer(BooleanSupplier haveTime) {
        super.tickServer(haveTime);
        ServerLevel level = this.overworld();
        if (!this.haveTestsStarted()) {
            this.startTests(level);
        }
 
        if (level.getGameTime() % 20L == 0L) {
            LOGGER.info(this.testTracker.getProgressBar());
        }
 
        if (this.testTracker.isDone()) {
            this.halt(false);
            LOGGER.info(this.testTracker.getProgressBar());
            GlobalTestReporter.finish();
            LOGGER.info("========= {} GAME TESTS COMPLETE IN {} ======================", this.testTracker.getTotalCount(), this.stopwatch.stop());
            if (this.testTracker.hasFailedRequired()) {
                LOGGER.info("{} required tests failed :(", this.testTracker.getFailedRequiredCount());
                this.testTracker.getFailedRequired().forEach(GameTestServer::logFailedTest);
            } else {
                LOGGER.info("All {} required tests passed :)", this.testTracker.getTotalCount());
            }
 
            if (this.testTracker.hasFailedOptional()) {
                LOGGER.info("{} optional tests failed", this.testTracker.getFailedOptionalCount());
                this.testTracker.getFailedOptional().forEach(GameTestServer::logFailedTest);
            }
 
            LOGGER.info("====================================================");
        }
    }
 
    private static void logFailedTest(GameTestInfo testInfo) {
        if (testInfo.getRotation() != Rotation.NONE) {
            LOGGER.info(
                "   - {} with rotation {}: {}", testInfo.id(), testInfo.getRotation().getSerializedName(), testInfo.getError().getDescription().getString()
            );
        } else {
            LOGGER.info("   - {}: {}", testInfo.id(), testInfo.getError().getDescription().getString());
        }
    }
 
    @Override
    protected SampleLogger getTickTimeLogger() {
        return this.sampleLogger;
    }
 
    @Override
    public boolean isTickTimeLoggingEnabled() {
        return false;
    }
 
    @Override
    protected void waitUntilNextTick() {
        this.runAllTasks();
    }
 
    @Override
    public SystemReport fillServerSystemReport(SystemReport systemReport) {
        systemReport.setDetail("Type", "Game test server");
        return systemReport;
    }
 
    @Override
    protected void onServerExit() {
        super.onServerExit();
        LOGGER.info("Game test server shutting down");
        System.exit(this.testTracker != null ? this.testTracker.getFailedRequiredCount() : -1);
    }
 
    @Override
    protected void onServerCrash(CrashReport report) {
        super.onServerCrash(report);
        LOGGER.error("Game test server crashed\n{}", report.getFriendlyReport(ReportType.CRASH));
        System.exit(1);
    }
 
    private void startTests(ServerLevel level) {
        RandomSource random = level.getRandom();
        BlockPos startPos = new BlockPos(random.nextIntBetweenInclusive(-14999992, 14999992), -59, random.nextIntBetweenInclusive(-14999992, 14999992));
        level.setRespawnData(LevelData.RespawnData.of(level.dimension(), startPos, 0.0F, 0.0F));
        GameTestRunner runner = GameTestRunner.Builder.fromBatches(this.testBatches, level)
            .newStructureSpawner(new StructureGridSpawner(startPos, 8, false))
            .build();
        Collection<GameTestInfo> testInfos = runner.getTestInfos();
        this.testTracker = new MultipleTestTracker(testInfos);
        LOGGER.info("{} tests are now running at position {}!", this.testTracker.getTotalCount(), startPos.toShortString());
        this.stopwatch.reset();
        this.stopwatch.start();
        runner.start();
    }
 
    private boolean haveTestsStarted() {
        return this.testTracker != null;
    }
 
    @Override
    public boolean isHardcore() {
        return false;
    }
 
    @Override
    public LevelBasedPermissionSet operatorUserPermissions() {
        return LevelBasedPermissionSet.ALL;
    }
 
    @Override
    public PermissionSet getFunctionCompilationPermissions() {
        return LevelBasedPermissionSet.OWNER;
    }
 
    @Override
    public boolean shouldRconBroadcast() {
        return false;
    }
 
    @Override
    public boolean isDedicatedServer() {
        return false;
    }
 
    @Override
    public int getRateLimitPacketsPerSecond() {
        return 0;
    }
 
    @Override
    public boolean useNativeTransport() {
        return false;
    }
 
    @Override
    public boolean isPublished() {
        return false;
    }
 
    @Override
    public boolean shouldInformAdmins() {
        return false;
    }
 
    @Override
    public boolean isSingleplayerOwner(NameAndId nameAndId) {
        return false;
    }
 
    @Override
    public int getMaxPlayers() {
        return 1;
    }
 
    private static class MockProfileResolver implements ProfileResolver {
        @Override
        public Optional<GameProfile> fetchByName(String name) {
            return Optional.empty();
        }
 
        @Override
        public Optional<GameProfile> fetchById(UUID id) {
            return Optional.empty();
        }
    }
 
    private static class MockUserNameToIdResolver implements UserNameToIdResolver {
        private final Set<NameAndId> savedIds = new HashSet<>();
 
        @Override
        public void add(NameAndId nameAndId) {
            this.savedIds.add(nameAndId);
        }
 
        @Override
        public Optional<NameAndId> get(String name) {
            return this.savedIds.stream().filter(e -> e.name().equals(name)).findFirst().or(() -> Optional.of(NameAndId.createOffline(name)));
        }
 
        @Override
        public Optional<NameAndId> get(UUID id) {
            return this.savedIds.stream().filter(e -> e.id().equals(id)).findFirst();
        }
 
        @Override
        public void resolveOfflineUsers(boolean value) {
        }
 
        @Override
        public void save() {
        }
    }
}

引用的其他类

  • CrashReport

    • 引用位置: 参数
  • SystemReport

    • 引用位置: 参数/返回值
  • LoggedChatMessage

    • 引用位置: 方法调用
    • 关联成员: System.exit()
  • ResourceSelectorArgument

    • 引用位置: 方法调用
    • 关联成员: ResourceSelectorArgument.parse()
  • BlockPos

    • 引用位置: 构造调用
    • 关联成员: BlockPos()
  • Holder

    • 引用位置: 参数/返回值
  • RegistryAccess

    • 引用位置: 参数
  • GameTestBatch

    • 引用位置: 字段/返回值
  • GameTestBatchFactory

    • 引用位置: 方法调用
    • 关联成员: GameTestBatchFactory.divideIntoBatches()
  • GameTestInfo

    • 引用位置: 参数/构造调用/返回值
    • 关联成员: GameTestInfo()
  • GameTestInstance

    • 引用位置: 参数/返回值
  • GameTestRunner

    • 引用位置: 方法调用
    • 关联成员: GameTestRunner.Builder.fromBatches()
  • GlobalTestReporter

    • 引用位置: 方法调用
    • 关联成员: GlobalTestReporter.finish()
  • MultipleTestTracker

    • 引用位置: 字段/构造调用
    • 关联成员: MultipleTestTracker()
  • RetryOptions

    • 引用位置: 方法调用
    • 关联成员: RetryOptions.noRetries()
  • StructureGridSpawner

    • 引用位置: 构造调用
    • 关联成员: StructureGridSpawner()
  • Gizmos

    • 引用位置: 方法调用
    • 关联成员: Gizmos.withCollector()
  • MinecraftServer

    • 引用位置: 继承
  • Services

    • 引用位置: 字段/构造调用
    • 关联成员: Services()
  • WorldLoader

    • 引用位置: 方法调用/构造调用
    • 关联成员: InitConfig(), PackConfig(), WorldLoader.InitConfig(), WorldLoader.PackConfig(), WorldLoader.load()
  • WorldStem

    • 引用位置: 参数
  • ServerLevel

    • 引用位置: 参数
  • LoggingLevelLoadListener

    • 引用位置: 方法调用
    • 关联成员: LoggingLevelLoadListener.forDedicatedServer()
  • EmptyNotificationService

    • 引用位置: 构造调用
    • 关联成员: EmptyNotificationService()
  • PackRepository

    • 引用位置: 参数
  • LevelBasedPermissionSet

    • 引用位置: 返回值
  • PermissionSet

    • 引用位置: 返回值
  • NameAndId

    • 引用位置: 参数/方法调用
    • 关联成员: NameAndId.createOffline()
  • PlayerList

    • 引用位置: 构造调用
    • 关联成员: PlayerList()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.backgroundExecutor()
  • DataFixers

    • 引用位置: 方法调用
    • 关联成员: DataFixers.getDataFixer()
  • LocalSampleLogger

    • 引用位置: 字段/构造调用
    • 关联成员: LocalSampleLogger()
  • SampleLogger

    • 引用位置: 返回值
  • Stopwatch

    • 引用位置: 字段/方法调用
    • 关联成员: Stopwatch.createStarted(), Stopwatch.createUnstarted()
  • FeatureFlagSet

    • 引用位置: 字段/方法调用
    • 关联成员: FeatureFlagSet.of()
  • DataPackConfig

    • 引用位置: 构造调用
    • 关联成员: DataPackConfig()
  • LevelSettings

    • 引用位置: 构造调用
    • 关联成员: LevelSettings()
  • WorldDataConfiguration

    • 引用位置: 构造调用
    • 关联成员: WorldDataConfiguration()
  • Rotation

    • 引用位置: 方法调用
    • 关联成员: Rotation.values()
  • GameRules

    • 引用位置: 构造调用
    • 关联成员: GameRules()
  • WorldGenSettings

    • 引用位置: 构造调用
    • 关联成员: WorldGenSettings()
  • WorldOptions

    • 引用位置: 字段/构造调用
    • 关联成员: WorldOptions()
  • LevelData

    • 引用位置: 方法调用
    • 关联成员: LevelData.RespawnData.of()
  • LevelDataAndDimensions

    • 引用位置: 方法调用/构造调用
    • 关联成员: LevelDataAndDimensions.WorldDataAndGenSettings(), WorldDataAndGenSettings()
  • LevelStorageSource

    • 引用位置: 参数
  • PrimaryLevelData

    • 引用位置: 构造调用
    • 关联成员: PrimaryLevelData()