Improve 24w05a port ()

* Fix wrong ops being used in AttachmentSerializingImpl

* Remove unused private method

* Require and use registry future in advancements and loot tables
This commit is contained in:
apple502j 2024-02-05 20:30:14 +09:00 committed by GitHub
parent 03be9f1df2
commit 04ac8cf319
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 51 additions and 36 deletions
fabric-data-attachment-api-v1/src/main/java/net/fabricmc/fabric/impl/attachment
fabric-data-generation-api-v1/src

View file

@ -82,7 +82,7 @@ public class AttachmentSerializingImpl {
if (codec != null) {
RegistryOps<NbtElement> registryOps = RegistryOps.of(NbtOps.INSTANCE, wrapperLookup);
codec.parse(NbtOps.INSTANCE, compound.get(key))
codec.parse(registryOps, compound.get(key))
.get()
.ifRight(partial -> {
LOGGER.warn("Couldn't deserialize attachment " + type.identifier() + ", skipping. Error:");

View file

@ -25,6 +25,7 @@ import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.mojang.serialization.JsonOps;
@ -33,6 +34,8 @@ import net.minecraft.advancement.AdvancementEntry;
import net.minecraft.data.DataOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.DataWriter;
import net.minecraft.registry.RegistryOps;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
@ -49,10 +52,12 @@ import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
public abstract class FabricAdvancementProvider implements DataProvider {
protected final FabricDataOutput output;
private final DataOutput.PathResolver pathResolver;
private final CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup;
protected FabricAdvancementProvider(FabricDataOutput output) {
protected FabricAdvancementProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
this.output = output;
this.pathResolver = output.getResolver(DataOutput.OutputType.DATA_PACK, "advancements");
this.registryLookup = registryLookup;
}
/**
@ -80,20 +85,22 @@ public abstract class FabricAdvancementProvider implements DataProvider {
generateAdvancement(advancements::add);
final List<CompletableFuture<?>> futures = new ArrayList<>();
return this.registryLookup.thenCompose(lookup -> {
RegistryOps<JsonElement> ops = RegistryOps.of(JsonOps.INSTANCE, lookup);
final List<CompletableFuture<?>> futures = new ArrayList<>();
for (AdvancementEntry advancement : advancements) {
if (!identifiers.add(advancement.id())) {
throw new IllegalStateException("Duplicate advancement " + advancement.id());
for (AdvancementEntry advancement : advancements) {
if (!identifiers.add(advancement.id())) {
throw new IllegalStateException("Duplicate advancement " + advancement.id());
}
JsonObject advancementJson = Util.getResult(Advancement.CODEC.encodeStart(ops, advancement.value()), IllegalStateException::new).getAsJsonObject();
ConditionJsonProvider.write(advancementJson, FabricDataGenHelper.consumeConditions(advancement));
futures.add(DataProvider.writeToPath(writer, advancementJson, getOutputPath(advancement)));
}
JsonObject advancementJson = Util.getResult(Advancement.CODEC.encodeStart(JsonOps.INSTANCE, advancement.value()), IllegalStateException::new).getAsJsonObject();
ConditionJsonProvider.write(advancementJson, FabricDataGenHelper.consumeConditions(advancement));
futures.add(DataProvider.writeToPath(writer, advancementJson, getOutputPath(advancement)));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
});
}
private Path getOutputPath(AdvancementEntry advancement) {

View file

@ -32,6 +32,7 @@ import net.minecraft.loot.LootTable;
import net.minecraft.loot.LootTables;
import net.minecraft.loot.context.LootContextTypes;
import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.resource.featuretoggle.FeatureFlags;
import net.minecraft.util.Identifier;
@ -47,10 +48,12 @@ import net.fabricmc.fabric.impl.datagen.loot.FabricLootTableProviderImpl;
public abstract class FabricBlockLootTableProvider extends BlockLootTableGenerator implements FabricLootTableProvider {
private final FabricDataOutput output;
private final Set<Identifier> excludedFromStrictValidation = new HashSet<>();
private final CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup;
protected FabricBlockLootTableProvider(FabricDataOutput dataOutput) {
protected FabricBlockLootTableProvider(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(Collections.emptySet(), FeatureFlags.FEATURE_MANAGER.getFeatureSet());
this.output = dataOutput;
this.registryLookup = registryLookup;
}
/**
@ -107,7 +110,7 @@ public abstract class FabricBlockLootTableProvider extends BlockLootTableGenerat
@Override
public CompletableFuture<?> run(DataWriter writer) {
return FabricLootTableProviderImpl.run(writer, this, LootContextTypes.BLOCK, output);
return FabricLootTableProviderImpl.run(writer, this, LootContextTypes.BLOCK, output, registryLookup);
}
@Override

View file

@ -82,10 +82,6 @@ public abstract class FabricCodecDataProvider<T> implements DataProvider {
*/
protected abstract void configure(BiConsumer<Identifier, T> provider, RegistryWrapper.WrapperLookup lookup);
private JsonElement convert(Identifier id, T value) {
return this.convert(id, value, JsonOps.INSTANCE);
}
private JsonElement convert(Identifier id, T value, DynamicOps<JsonElement> ops) {
DataResult<JsonElement> dataResult = this.codec.encodeStart(ops, value);
return dataResult.get()

View file

@ -22,6 +22,7 @@ import java.util.concurrent.CompletableFuture;
import net.minecraft.data.DataWriter;
import net.minecraft.loot.context.LootContextType;
import net.minecraft.loot.context.LootContextTypes;
import net.minecraft.registry.RegistryWrapper;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
@ -32,16 +33,18 @@ import net.fabricmc.fabric.impl.datagen.loot.FabricLootTableProviderImpl;
*/
public abstract class SimpleFabricLootTableProvider implements FabricLootTableProvider {
protected final FabricDataOutput output;
private final CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup;
protected final LootContextType lootContextType;
public SimpleFabricLootTableProvider(FabricDataOutput output, LootContextType lootContextType) {
public SimpleFabricLootTableProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup, LootContextType lootContextType) {
this.output = output;
this.registryLookup = registryLookup;
this.lootContextType = lootContextType;
}
@Override
public CompletableFuture<?> run(DataWriter writer) {
return FabricLootTableProviderImpl.run(writer, this, lootContextType, output);
return FabricLootTableProviderImpl.run(writer, this, lootContextType, output, registryLookup);
}
@Override

View file

@ -24,6 +24,7 @@ import java.util.Map;
import java.util.concurrent.CompletableFuture;
import com.google.common.collect.Maps;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.mojang.serialization.JsonOps;
@ -32,6 +33,8 @@ import net.minecraft.data.DataProvider;
import net.minecraft.data.DataWriter;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.context.LootContextType;
import net.minecraft.registry.RegistryOps;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
@ -50,7 +53,8 @@ public final class FabricLootTableProviderImpl {
DataWriter writer,
FabricLootTableProvider provider,
LootContextType lootContextType,
FabricDataOutput fabricDataOutput) {
FabricDataOutput fabricDataOutput,
CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
HashMap<Identifier, LootTable> builders = Maps.newHashMap();
HashMap<Identifier, ConditionJsonProvider[]> conditionMap = new HashMap<>();
@ -63,16 +67,18 @@ public final class FabricLootTableProviderImpl {
}
});
final List<CompletableFuture<?>> futures = new ArrayList<>();
return registryLookup.thenCompose(lookup -> {
RegistryOps<JsonElement> ops = RegistryOps.of(JsonOps.INSTANCE, lookup);
final List<CompletableFuture<?>> futures = new ArrayList<>();
for (Map.Entry<Identifier, LootTable> entry : builders.entrySet()) {
JsonObject tableJson = (JsonObject) Util.getResult(LootTable.CODEC.encodeStart(JsonOps.INSTANCE, entry.getValue()), IllegalStateException::new);
ConditionJsonProvider.write(tableJson, conditionMap.remove(entry.getKey()));
for (Map.Entry<Identifier, LootTable> entry : builders.entrySet()) {
JsonObject tableJson = (JsonObject) Util.getResult(LootTable.CODEC.encodeStart(ops, entry.getValue()), IllegalStateException::new);
ConditionJsonProvider.write(tableJson, conditionMap.remove(entry.getKey()));
futures.add(DataProvider.writeToPath(writer, tableJson, getOutputPath(fabricDataOutput, entry.getKey())));
}
futures.add(DataProvider.writeToPath(writer, tableJson, getOutputPath(fabricDataOutput, entry.getKey())));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
});
}
private static Path getOutputPath(FabricDataOutput dataOutput, Identifier lootTableId) {

View file

@ -356,8 +356,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestAdvancementProvider extends FabricAdvancementProvider {
private TestAdvancementProvider(FabricDataOutput output) {
super(output);
private TestAdvancementProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(output, registryLookup);
}
@Override
@ -386,8 +386,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestBlockLootTableProvider extends FabricBlockLootTableProvider {
private TestBlockLootTableProvider(FabricDataOutput output) {
super(output);
private TestBlockLootTableProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(output, registryLookup);
}
@Override
@ -401,8 +401,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestBarterLootTableProvider extends SimpleFabricLootTableProvider {
private TestBarterLootTableProvider(FabricDataOutput output) {
super(output, LootContextTypes.BARTER);
private TestBarterLootTableProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(output, registryLookup, LootContextTypes.BARTER);
}
@Override