Replace AdvancementProvider patch with Forge helper (#9188)

This commit is contained in:
ChampionAsh5357 authored and GitHub committed 2022-12-12 10:23:10 -08:00
1 parent 2ea16d89ca
commit 4802ceeccc
4 files changed
+86 -65

No files matched your search

@@ -1,53 +1,14 @@
--- a/net/minecraft/data/advancements/AdvancementProvider.java
+++ b/net/minecraft/data/advancements/AdvancementProvider.java
@@ -18,8 +_,19 @@
@@ -14,6 +_,11 @@
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
+/**
+ * @deprecated Forge: Use {@link net.minecraftforge.common.data.ForgeAdvancementProvider} instead,
+ * provides ease of access for the {@link net.minecraftforge.common.data.ExistingFileHelper} in the generator
+ */
+@Deprecated
public class AdvancementProvider implements DataProvider {
private final PackOutput.PathProvider f_236156_;
private final List<AdvancementSubProvider> f_244266_;
private final CompletableFuture<HolderLookup.Provider> f_254664_;
+ @org.jetbrains.annotations.Nullable
+ protected final net.minecraftforge.common.data.ExistingFileHelper existingFileHelper;
+ /**
+ * @deprecated Forge: Use the {@linkplain #AdvancementProvider(PackOutput, CompletableFuture, List, net.minecraftforge.common.data.ExistingFileHelper) existing file helper variant}
+ */
+ @Deprecated
public AdvancementProvider(PackOutput p_256529_, CompletableFuture<HolderLookup.Provider> p_255722_, List<AdvancementSubProvider> p_255883_) {
+ this(p_256529_, p_255722_, p_255883_, null);
+ }
+
+ public AdvancementProvider(PackOutput p_256529_, CompletableFuture<HolderLookup.Provider> p_255722_, List<AdvancementSubProvider> p_255883_, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
+ this.existingFileHelper = existingFileHelper;
this.f_236156_ = p_256529_.m_245269_(PackOutput.Target.DATA_PACK, "advancements");
this.f_244266_ = p_255883_;
this.f_254664_ = p_255722_;
@@ -38,14 +_,27 @@
}
};
- for(AdvancementSubProvider advancementsubprovider : this.f_244266_) {
- advancementsubprovider.m_245571_(p_255484_, consumer);
- }
+ // Forge: Allow mods to take control of advancement registration
+ this.registerAdvancements(p_255484_, consumer, this.existingFileHelper);
return CompletableFuture.allOf(list.toArray((p_253393_) -> {
return new CompletableFuture[p_253393_];
}));
});
+ }
+
+ /**
+ * Registers all {@linkplain Advancement advancements}.
+ *
+ * @param registries the registries available for lookup including all registries in {@link net.minecraft.core.registries.Registries}
+ * @param saver a {@link Consumer} which saves any advancements provided
+ * @param existingFileHelper the existing file helper to check for the existence of files like parent advancements
+ * @see Advancement.Builder#save(Consumer, ResourceLocation, net.minecraftforge.common.data.ExistingFileHelper)
+ */
+ protected void registerAdvancements(HolderLookup.Provider registries, Consumer<Advancement> saver, net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
+ for (AdvancementSubProvider subProvider : this.f_244266_) {
+ subProvider.m_245571_(registries, saver);
+ }
}
public final String m_6055_() {
@@ -0,0 +1,67 @@
/*
* Copyright (c) Forge Development LLC and contributors
* SPDX-License-Identifier: LGPL-2.1-only
*/
package net.minecraftforge.common.data;
import net.minecraft.advancements.Advancement;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.advancements.AdvancementProvider;
import net.minecraft.data.advancements.AdvancementSubProvider;
import net.minecraft.resources.ResourceLocation;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
/**
* An extension of the {@link AdvancementProvider} to provide a feature-complete
* experience to generate modded advancements.
*/
public abstract class ForgeAdvancementProvider extends AdvancementProvider
{
/**
* Default constructor.
*
* @param output the target directory of the data generator
* @param registries a future of a lookup for registries and their objects
* @param existingFileHelper a helper used to find whether a file exists
* @param subProviders the generators used to create the advancements
*/
public ForgeAdvancementProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> registries, ExistingFileHelper existingFileHelper, List<AdvancementGenerator> subProviders)
{
super(output, registries, subProviders.stream().map(generator -> generator.toSubProvider(existingFileHelper)).toList());
}
/**
* An interface used to generated modded advancements. This is parallel to
* vanilla's {@link AdvancementSubProvider} with access to the {@link ExistingFileHelper}.
*
* @see AdvancementSubProvider
*/
public interface AdvancementGenerator
{
/**
* A method used to generate advancements for a mod. Advancements should be
* built via {@link net.minecraftforge.common.extensions.IForgeAdvancementBuilder#save(Consumer, ResourceLocation, ExistingFileHelper)}.
*
* @param registries a lookup for registries and their objects
* @param saver a consumer used to write advancements to a file
* @param existingFileHelper a helper used to find whether a file exists
*/
void generate(HolderLookup.Provider registries, Consumer<Advancement> saver, ExistingFileHelper existingFileHelper);
/**
* Creates an {@link AdvancementSubProvider} from this generator.
*
* @param existingFileHelper a helper used to find whether a file exists
* @return a sub provider wrapping this generator
*/
default AdvancementSubProvider toSubProvider(ExistingFileHelper existingFileHelper)
{
return (registries, saver) -> this.generate(registries, saver, existingFileHelper);
}
}
}
-1
View File
@@ -31,7 +31,6 @@ net/minecraft/client/resources/model/MultiPartBakedModel.getQuads(Lnet/minecraft
net/minecraft/client/resources/model/SimpleBakedModel$Builder.build(Lnet/minecraftforge/client/RenderTypeGroup;)Lnet/minecraft/client/resources/model/BakedModel;=|renderTypes
net/minecraft/client/resources/model/SimpleBakedModel.<init>(Ljava/util/List;Ljava/util/Map;ZZZLnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/client/renderer/block/model/ItemTransforms;Lnet/minecraft/client/renderer/block/model/ItemOverrides;Lnet/minecraftforge/client/RenderTypeGroup;)V=|p_119489_,p_119490_,p_119491_,p_119492_,p_119493_,p_119494_,p_119495_,p_119496_,renderTypes
net/minecraft/client/resources/model/WeightedBakedModel.getQuads(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/util/RandomSource;Lnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)Ljava/util/List;=|p_235058_,p_235059_,p_235060_,modelData,renderType
net/minecraft/data/advancements/AdvancementProvider.<init>(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/util/List;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256529_,p_255722_,p_255883_,existingFileHelper
net/minecraft/data/tags/BannerPatternTagsProvider.<init>(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256451_,p_256420_,modId,existingFileHelper
net/minecraft/data/tags/BiomeTagsProvider.<init>(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_255800_,p_256205_,modId,existingFileHelper
net/minecraft/data/tags/CatVariantTagsProvider.<init>(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256547_,p_256090_,modId,existingFileHelper
@@ -1016,25 +1016,19 @@ public class DataGeneratorTest
}
}
public static class Advancements extends AdvancementProvider
public static class Advancements extends ForgeAdvancementProvider
{
public Advancements(PackOutput output, CompletableFuture<HolderLookup.Provider> providerCompletableFuture, ExistingFileHelper existingFileHelper)
{
super(output, providerCompletableFuture, List.of(new Provider(existingFileHelper)));
super(output, providerCompletableFuture, existingFileHelper, List.of(new Provider()));
}
private static class Provider implements AdvancementSubProvider {
private final ExistingFileHelper fileHelper;
private Provider(ExistingFileHelper fileHelper) {
this.fileHelper = fileHelper;
}
private static class Provider implements AdvancementGenerator {
@Override
public void generate(HolderLookup.Provider registries, Consumer<Advancement> consumer) {
public void generate(HolderLookup.Provider registries, Consumer<Advancement> saver, ExistingFileHelper existingFileHelper) {
Advancement.Builder.advancement().display(Items.DIRT,
Component.translatable(Items.DIRT.getDescriptionId()),
Component.translatable("dirt_description"),
@@ -1044,7 +1038,7 @@ public class DataGeneratorTest
true,
false)
.addCriterion("has_dirt", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIRT))
.save(consumer, new ResourceLocation(MODID, "obtain_dirt"), fileHelper);
.save(saver, new ResourceLocation(MODID, "obtain_dirt"), existingFileHelper);
Advancement.Builder.advancement().display(Items.DIAMOND_BLOCK,
Component.translatable(Items.DIAMOND_BLOCK.getDescriptionId()),
@@ -1055,7 +1049,7 @@ public class DataGeneratorTest
true,
false)
.addCriterion("obtained_diamond_block", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIAMOND_BLOCK))
.save(consumer, new ResourceLocation("obtain_diamond_block"), fileHelper);
.save(saver, new ResourceLocation("obtain_diamond_block"), existingFileHelper);
Advancement.Builder.advancement()
.display(Blocks.GRASS_BLOCK,
@@ -1067,7 +1061,7 @@ public class DataGeneratorTest
false,
false)
.addCriterion("crafting_table", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.CRAFTING_TABLE))
.save(consumer, new ResourceLocation("story/root"), fileHelper);
.save(saver, new ResourceLocation("story/root"), existingFileHelper);
// This should cause an error because of the parent not existing
/* Advancement.Builder.advancement().display(Blocks.COBBLESTONE,
@@ -1092,7 +1086,7 @@ public class DataGeneratorTest
false)
.addCriterion("get_cobbleStone", InventoryChangeTrigger.TriggerInstance.hasItems(Items.COBBLESTONE))
.parent(new ResourceLocation("forge", "dummy_parent"))
.save(consumer, new ResourceLocation("good_parent"), fileHelper);
.save(saver, new ResourceLocation("good_parent"), existingFileHelper);
}
}
}
@@ -1161,4 +1155,4 @@ public class DataGeneratorTest
// So remove modid to match
return model.replaceAll("^\\w+:", "minecraft:");
}
}
}