Adopted new Fabric API

This commit is contained in:
Frank 2022-10-28 17:41:24 +02:00
parent ce9a4f0e82
commit e608bf21fe

View file

@ -20,24 +20,24 @@ import net.minecraft.resources.ResourceKey;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBuiltinRegistriesProvider; import net.fabricmc.fabric.api.datagen.v1.provider.FabricBuiltinRegistriesProvider;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public class WorldsTogetherDatagen implements DataGeneratorEntrypoint { public class WorldsTogetherDatagen implements DataGeneratorEntrypoint {
@Override @Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
fabricDataGenerator.addProvider(FabricBuiltinRegistriesProvider.forCurrentMod() final FabricDataGenerator.Pack pack = dataGenerator.create();
.apply(fabricDataGenerator)); pack.addProvider(FabricBuiltinRegistriesProvider.forCurrentMod());
fabricDataGenerator.addProvider(CustomRegistriesDataProvider::new); pack.addProvider(CustomRegistriesDataProvider::new);
} }
public static class CustomRegistriesDataProvider implements DataProvider { public static class CustomRegistriesDataProvider implements DataProvider {
@ -52,19 +52,38 @@ public class WorldsTogetherDatagen implements DataGeneratorEntrypoint {
private final PackOutput output; private final PackOutput output;
public CustomRegistriesDataProvider(FabricDataGenerator generator) { public CustomRegistriesDataProvider(FabricDataOutput generator) {
this.output = generator.getVanillaPackOutput(); this.output = generator;
} }
@Override @Override
public void run(CachedOutput cachedOutput) { public CompletableFuture<?> run(CachedOutput cachedOutput) {
RegistryAccess.Frozen registryAccess = BuiltinRegistries.createAccess(); RegistryAccess.Frozen registryAccess = BuiltinRegistries.createAccess();
RegistryOps<JsonElement> dynamicOps = RegistryOps.create(JsonOps.INSTANCE, registryAccess); RegistryOps<JsonElement> dynamicOps = RegistryOps.create(JsonOps.INSTANCE, registryAccess);
REGISTRIES.forEach(registryData -> this.dumpRegistryCap( final List<CompletableFuture<?>> futures = new ArrayList<>();
for (RegistryDataLoader.RegistryData<?> registryData : REGISTRIES) {
futures.add(this.dumpRegistryCapFuture(
cachedOutput,
registryAccess,
dynamicOps,
(RegistryDataLoader.RegistryData) registryData
));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
}
private <T> CompletableFuture dumpRegistryCapFuture(
CachedOutput cachedOutput,
RegistryAccess registryAccess,
DynamicOps<JsonElement> dynamicOps,
RegistryDataLoader.RegistryData<T> registryData
) {
return CompletableFuture.runAsync(() -> dumpRegistryCap(
cachedOutput, cachedOutput,
registryAccess, registryAccess,
dynamicOps, dynamicOps,
(RegistryDataLoader.RegistryData) registryData registryData
)); ));
} }
@ -98,19 +117,17 @@ public class WorldsTogetherDatagen implements DataGeneratorEntrypoint {
Encoder<E> encoder, Encoder<E> encoder,
E object E object
) { ) {
try {
Optional<JsonElement> optional = encoder.encodeStart(dynamicOps, object) Optional<JsonElement> optional = encoder.encodeStart(dynamicOps, object)
.resultOrPartial(string -> WorldsTogether.LOGGER.error( .resultOrPartial(string -> WorldsTogether.LOGGER.error(
"Couldn't serialize element {}: {}", "Couldn't serialize element {}: {}",
path, path,
string string
)); ));
if (optional.isPresent()) { if (optional.isPresent()) {
DataProvider.saveStable(cachedOutput, optional.get(), path); DataProvider.saveStable(cachedOutput, optional.get(), path);
}
} catch (IOException iOException) {
WorldsTogether.LOGGER.error("Couldn't save element {}", path, iOException);
} }
} }
@Override @Override