Adopted new Fabric API
This commit is contained in:
parent
ce9a4f0e82
commit
e608bf21fe
1 changed files with 41 additions and 24 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue