DataGenerator.java
net.minecraft.data.DataGenerator
信息
- 全限定名:net.minecraft.data.DataGenerator
- 类型:public abstract class
- 包:net.minecraft.data
- 源码路径:src/main/java/net/minecraft/data/DataGenerator.java
- 起始行号:L17
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L18 - 说明:
TODO
- 类型:
-
vanillaPackOutput- 类型:
PackOutput - 修饰符:
protected final - 源码定位:
L19 - 说明:
TODO
- 类型:
-
allProviderIds- 类型:
Set<String> - 修饰符:
protected final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
providersToRun- 类型:
Map<String,DataProvider> - 修饰符:
protected final - 源码定位:
L21 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.data.DataGenerator.Cached- 类型:
class - 修饰符:
public static - 源码定位:
L42 - 说明:
TODO
- 类型:
-
net.minecraft.data.DataGenerator.PackGenerator- 类型:
class - 修饰符:
public - 源码定位:
L76 - 说明:
TODO
- 类型:
-
net.minecraft.data.DataGenerator.Uncached- 类型:
class - 修饰符:
public static - 源码定位:
L104 - 说明:
TODO
- 类型:
构造器
public DataGenerator(Path output) @ L23
- 构造器名:DataGenerator
- 源码定位:L23
- 修饰符:public
参数:
- output: Path
说明:
TODO
方法
下面的方法块按源码顺序生成。
public abstract void run() @ L27
- 方法名:run
- 源码定位:L27
- 返回类型:void
- 修饰符:public abstract
参数:
- 无
说明:
TODO
public DataGenerator.PackGenerator getVanillaPack(boolean toRun) @ L29
- 方法名:getVanillaPack
- 源码定位:L29
- 返回类型:DataGenerator.PackGenerator
- 修饰符:public
参数:
- toRun: boolean
说明:
TODO
public DataGenerator.PackGenerator getBuiltinDatapack(boolean toRun, String packId) @ L33
- 方法名:getBuiltinDatapack
- 源码定位:L33
- 返回类型:DataGenerator.PackGenerator
- 修饰符:public
参数:
- toRun: boolean
- packId: String
说明:
TODO
代码
public abstract class DataGenerator {
private static final Logger LOGGER = LogUtils.getLogger();
protected final PackOutput vanillaPackOutput;
protected final Set<String> allProviderIds = new HashSet<>();
protected final Map<String, DataProvider> providersToRun = new LinkedHashMap<>();
public DataGenerator(Path output) {
this.vanillaPackOutput = new PackOutput(output);
}
public abstract void run() throws IOException;
public DataGenerator.PackGenerator getVanillaPack(boolean toRun) {
return new DataGenerator.PackGenerator(toRun, "vanilla", this.vanillaPackOutput);
}
public DataGenerator.PackGenerator getBuiltinDatapack(boolean toRun, String packId) {
Path packOutputDir = this.vanillaPackOutput.getOutputFolder(PackOutput.Target.DATA_PACK).resolve("minecraft").resolve("datapacks").resolve(packId);
return new DataGenerator.PackGenerator(toRun, packId, new PackOutput(packOutputDir));
}
static {
Bootstrap.bootStrap();
}
public static class Cached extends DataGenerator {
private final Path rootOutputFolder;
private final WorldVersion version;
private final boolean alwaysGenerate;
public Cached(Path output, WorldVersion version, boolean alwaysGenerate) {
super(output);
this.rootOutputFolder = output;
this.alwaysGenerate = alwaysGenerate;
this.version = version;
}
@Override
public void run() throws IOException {
HashCache cache = new HashCache(this.rootOutputFolder, this.allProviderIds, this.version);
Stopwatch totalTime = Stopwatch.createStarted();
Stopwatch stopwatch = Stopwatch.createUnstarted();
this.providersToRun.forEach((providerId, provider) -> {
if (!this.alwaysGenerate && !cache.shouldRunInThisVersion(providerId)) {
DataGenerator.LOGGER.debug("Generator {} already run for version {}", providerId, this.version.name());
} else {
DataGenerator.LOGGER.info("Starting provider: {}", providerId);
stopwatch.start();
cache.applyUpdate(cache.generateUpdate(providerId, provider::run).join());
stopwatch.stop();
DataGenerator.LOGGER.info("{} finished after {} ms", providerId, stopwatch.elapsed(TimeUnit.MILLISECONDS));
stopwatch.reset();
}
});
DataGenerator.LOGGER.info("All providers took: {} ms", totalTime.elapsed(TimeUnit.MILLISECONDS));
cache.purgeStaleAndWrite();
}
}
public class PackGenerator {
private final boolean toRun;
private final String providerPrefix;
private final PackOutput output;
private PackGenerator(boolean toRun, String providerPrefix, PackOutput output) {
Objects.requireNonNull(DataGenerator.this);
super();
this.toRun = toRun;
this.providerPrefix = providerPrefix;
this.output = output;
}
public <T extends DataProvider> T addProvider(DataProvider.Factory<T> factory) {
T provider = factory.create(this.output);
String providerId = this.providerPrefix + "/" + provider.getName();
if (!DataGenerator.this.allProviderIds.add(providerId)) {
throw new IllegalStateException("Duplicate provider: " + providerId);
} else {
if (this.toRun) {
DataGenerator.this.providersToRun.put(providerId, provider);
}
return provider;
}
}
}
public static class Uncached extends DataGenerator {
public Uncached(Path output) {
super(output);
}
@Override
public void run() throws IOException {
Stopwatch totalTime = Stopwatch.createStarted();
Stopwatch stopwatch = Stopwatch.createUnstarted();
this.providersToRun.forEach((providerId, provider) -> {
DataGenerator.LOGGER.info("Starting uncached provider: {}", providerId);
stopwatch.start();
provider.run(CachedOutput.NO_CACHE).join();
stopwatch.stop();
DataGenerator.LOGGER.info("{} finished after {} ms", providerId, stopwatch.elapsed(TimeUnit.MILLISECONDS));
stopwatch.reset();
});
DataGenerator.LOGGER.info("All providers took: {} ms", totalTime.elapsed(TimeUnit.MILLISECONDS));
}
}
}引用的其他类
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
HashCache()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
PackOutput()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Bootstrap.bootStrap()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Stopwatch.createStarted(), Stopwatch.createUnstarted()
- 引用位置: