Datagen Renames ()

* Renames

* whoops

* Return dataGenerator fields in deprecated classes

* fix up conflicts

* Update FabricRecipesProvider.java
This commit is contained in:
Shnupbups 2022-02-12 00:27:31 +11:00 committed by GitHub
parent b75bffd5ad
commit 9b5f02e4eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 389 additions and 257 deletions

View file

@ -0,0 +1,98 @@
/*
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Set;
import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import net.minecraft.advancement.Advancement;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataProvider;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* Extend this class and implement {@link FabricAdvancementProvider#generateAdvancement}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricAdvancementProvider implements DataProvider {
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create();
protected final FabricDataGenerator dataGenerator;
protected FabricAdvancementProvider(FabricDataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
}
/**
* Implement this method to register advancements to generate use the consumer callback to register advancements.
*
* <p>Use {@link Advancement.Task#build(Consumer, String)} to help build advancements.
*/
public abstract void generateAdvancement(Consumer<Advancement> consumer);
/**
* Return a new exporter that applies the specified conditions to any advancement it receives.
*/
protected Consumer<Advancement> withConditions(Consumer<Advancement> exporter, ConditionJsonProvider... conditions) {
Preconditions.checkArgument(conditions.length > 0, "Must add at least one condition.");
return advancement -> {
FabricDataGenHelper.addConditions(advancement, conditions);
exporter.accept(advancement);
};
}
@Override
public void run(DataCache cache) throws IOException {
final Set<Identifier> identifiers = Sets.newHashSet();
final Set<Advancement> advancements = Sets.newHashSet();
generateAdvancement(advancements::add);
for (Advancement advancement : advancements) {
if (!identifiers.add(advancement.getId())) {
throw new IllegalStateException("Duplicate advancement " + advancement.getId());
}
JsonObject advancementJson = advancement.createTask().toJson();
ConditionJsonProvider.write(advancementJson, FabricDataGenHelper.consumeConditions(advancement));
DataProvider.writeToPath(GSON, cache, advancementJson, getOutputPath(advancement));
}
}
private Path getOutputPath(Advancement advancement) {
return dataGenerator.getOutput().resolve("data/%s/advancements/%s.json".formatted(advancement.getId().getNamespace(), advancement.getId().getPath()));
}
@Override
public String getName() {
return "Advancements";
}
}

View file

@ -16,83 +16,17 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Set;
import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import net.minecraft.advancement.Advancement;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataProvider;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* Extend this class and implement {@link FabricAdvancementsProvider#generateAdvancement}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* @deprecated use {@link FabricAdvancementProvider} instead.
*/
public abstract class FabricAdvancementsProvider implements DataProvider {
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create();
@Deprecated
public abstract class FabricAdvancementsProvider extends FabricAdvancementProvider {
protected final FabricDataGenerator dataGenerator;
protected FabricAdvancementsProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
this.dataGenerator = dataGenerator;
}
/**
* Implement this method to register advancements to generate use the consumer callback to register advancements.
*
* <p>Use {@link Advancement.Task#build(Consumer, String)} to help build advancements.
*/
public abstract void generateAdvancement(Consumer<Advancement> consumer);
/**
* Return a new exporter that applies the specified conditions to any advancement it receives.
*/
protected Consumer<Advancement> withConditions(Consumer<Advancement> exporter, ConditionJsonProvider... conditions) {
Preconditions.checkArgument(conditions.length > 0, "Must add at least one condition.");
return advancement -> {
FabricDataGenHelper.addConditions(advancement, conditions);
exporter.accept(advancement);
};
}
@Override
public void run(DataCache cache) throws IOException {
final Set<Identifier> identifiers = Sets.newHashSet();
final Set<Advancement> advancements = Sets.newHashSet();
generateAdvancement(advancements::add);
for (Advancement advancement : advancements) {
if (!identifiers.add(advancement.getId())) {
throw new IllegalStateException("Duplicate advancement " + advancement.getId());
}
JsonObject advancementJson = advancement.createTask().toJson();
ConditionJsonProvider.write(advancementJson, FabricDataGenHelper.consumeConditions(advancement));
DataProvider.writeToPath(GSON, cache, advancementJson, getOutputPath(advancement));
}
}
private Path getOutputPath(Advancement advancement) {
return dataGenerator.getOutput().resolve("data/%s/advancements/%s.json".formatted(advancement.getId().getNamespace(), advancement.getId().getPath()));
}
@Override
public String getName() {
return "Advancements";
}
}

View file

@ -0,0 +1,99 @@
/*
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import com.google.common.collect.Sets;
import net.minecraft.data.server.BlockLootTableGenerator;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.LootTables;
import net.minecraft.loot.context.LootContextType;
import net.minecraft.loot.context.LootContextTypes;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
/**
* Extend this class and implement {@link FabricBlockLootTableProvider#generateBlockLootTables}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricBlockLootTableProvider extends BlockLootTableGenerator implements FabricLootTableProvider {
protected final FabricDataGenerator dataGenerator;
protected FabricBlockLootTableProvider(FabricDataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
}
/**
* Implement this method to add block drops.
*
* <p>Use the range of {@link BlockLootTableGenerator#addDrop} methods to generate block drops.
*/
protected abstract void generateBlockLootTables();
@Override
public LootContextType getLootContextType() {
return LootContextTypes.BLOCK;
}
@Override
public FabricDataGenerator getFabricDataGenerator() {
return dataGenerator;
}
@Override
public void accept(BiConsumer<Identifier, LootTable.Builder> biConsumer) {
generateBlockLootTables();
for (Map.Entry<Identifier, LootTable.Builder> entry : lootTables.entrySet()) {
Identifier identifier = entry.getKey();
if (identifier.equals(LootTables.EMPTY)) {
continue;
}
biConsumer.accept(identifier, entry.getValue());
}
if (dataGenerator.isStrictValidationEnabled()) {
Set<Identifier> missing = Sets.newHashSet();
for (Identifier blockId : Registry.BLOCK.getIds()) {
if (blockId.getNamespace().equals(dataGenerator.getModId())) {
if (!lootTables.containsKey(Registry.BLOCK.get(blockId).getLootTableId())) {
missing.add(blockId);
}
}
}
if (!missing.isEmpty()) {
throw new IllegalStateException("Missing loot table(s) for %s".formatted(missing));
}
}
}
@Override
public String getName() {
return "Block Loot Tables";
}
}

View file

@ -16,84 +16,17 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import com.google.common.collect.Sets;
import net.minecraft.data.server.BlockLootTableGenerator;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.LootTables;
import net.minecraft.loot.context.LootContextType;
import net.minecraft.loot.context.LootContextTypes;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
/**
* Extend this class and implement {@link FabricBlockLootTablesProvider#generateBlockLootTables}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* @deprecated use {@link FabricBlockLootTableProvider} instead.
*/
public abstract class FabricBlockLootTablesProvider extends BlockLootTableGenerator implements FabricLootTableProvider {
@Deprecated
public abstract class FabricBlockLootTablesProvider extends FabricBlockLootTableProvider {
protected final FabricDataGenerator dataGenerator;
protected FabricBlockLootTablesProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
this.dataGenerator = dataGenerator;
}
/**
* Implement this method to add block drops.
*
* <p>Use the range of {@link BlockLootTableGenerator#addDrop} methods to generate block drops.
*/
protected abstract void generateBlockLootTables();
@Override
public LootContextType getLootContextType() {
return LootContextTypes.BLOCK;
}
@Override
public FabricDataGenerator getFabricDataGenerator() {
return dataGenerator;
}
@Override
public void accept(BiConsumer<Identifier, LootTable.Builder> biConsumer) {
generateBlockLootTables();
for (Map.Entry<Identifier, LootTable.Builder> entry : lootTables.entrySet()) {
Identifier identifier = entry.getKey();
if (identifier.equals(LootTables.EMPTY)) {
continue;
}
biConsumer.accept(identifier, entry.getValue());
}
if (dataGenerator.isStrictValidationEnabled()) {
Set<Identifier> missing = Sets.newHashSet();
for (Identifier blockId : Registry.BLOCK.getIds()) {
if (blockId.getNamespace().equals(dataGenerator.getModId())) {
if (!lootTables.containsKey(Registry.BLOCK.get(blockId).getLootTableId())) {
missing.add(blockId);
}
}
}
if (!missing.isEmpty()) {
throw new IllegalStateException("Missing loot table(s) for %s".formatted(missing));
}
}
}
@Override
public String getName() {
return "Block Loot Tables";
}
}

View file

@ -16,26 +16,17 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import net.minecraft.data.client.BlockStateDefinitionProvider;
import net.minecraft.data.client.ItemModelGenerator;
import net.minecraft.data.client.model.BlockStateModelGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
/**
* Extend this class and implement {@link FabricBlockStateDefinitionProvider#generateBlockStateModels} and {@link FabricBlockStateDefinitionProvider#generateItemModels}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* @deprecated use {@link FabricModelProvider} instead.
*/
public abstract class FabricBlockStateDefinitionProvider extends BlockStateDefinitionProvider {
@Deprecated
public abstract class FabricBlockStateDefinitionProvider extends FabricModelProvider {
protected final FabricDataGenerator dataGenerator;
public FabricBlockStateDefinitionProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
this.dataGenerator = dataGenerator;
}
public abstract void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator);
public abstract void generateItemModels(ItemModelGenerator itemModelGenerator);
}

View file

@ -44,7 +44,7 @@ import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* A base interface for Loot table providers. You should not implement this class directly.
*
* <p>{@link FabricBlockLootTablesProvider} provides additional features specific to block drop loot tables.
* <p>{@link FabricBlockLootTableProvider} provides additional features specific to block drop loot tables.
*
* <p>Use {@link SimpleFabricLootTableProvider} for a simple abstract class that you can implement to handle standard loot table functions.
*/

View file

@ -0,0 +1,45 @@
/*
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.fabricmc.fabric.api.datagen.v1.provider;
import net.minecraft.data.client.BlockStateDefinitionProvider;
import net.minecraft.data.client.ItemModelGenerator;
import net.minecraft.data.client.model.BlockStateModelGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
/**
* Extend this class and implement {@link FabricModelProvider#generateBlockStateModels} and {@link FabricModelProvider#generateItemModels}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricModelProvider extends BlockStateDefinitionProvider {
protected final FabricDataGenerator dataGenerator;
public FabricModelProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
this.dataGenerator = dataGenerator;
}
public abstract void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator);
public abstract void generateItemModels(ItemModelGenerator itemModelGenerator);
public String getName() {
return "Models";
}
}

View file

@ -0,0 +1,98 @@
/*
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.nio.file.Path;
import java.util.Set;
import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.gson.JsonObject;
import net.minecraft.data.DataCache;
import net.minecraft.data.server.RecipesProvider;
import net.minecraft.data.server.recipe.RecipeJsonProvider;
import net.minecraft.data.server.recipe.ShapedRecipeJsonFactory;
import net.minecraft.data.server.recipe.ShapelessRecipeJsonFactory;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* Extend this class and implement {@link FabricRecipeProvider#generateRecipes}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricRecipeProvider extends RecipesProvider {
protected final FabricDataGenerator dataGenerator;
public FabricRecipeProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
this.dataGenerator = dataGenerator;
}
/**
* Implement this method and then use the range of methods in {@link RecipesProvider} or from one of the recipe json factories such as {@link ShapedRecipeJsonFactory} & {@link ShapelessRecipeJsonFactory}.
*/
protected abstract void generateRecipes(Consumer<RecipeJsonProvider> exporter);
/**
* Return a new exporter that applies the specified conditions to any recipe json provider it receives.
*/
protected Consumer<RecipeJsonProvider> withConditions(Consumer<RecipeJsonProvider> exporter, ConditionJsonProvider... conditions) {
Preconditions.checkArgument(conditions.length > 0, "Must add at least one condition.");
return json -> {
FabricDataGenHelper.addConditions(json, conditions);
exporter.accept(json);
};
}
@Override
public void run(DataCache cache) {
Path path = this.root.getOutput();
Set<Identifier> generatedRecipes = Sets.newHashSet();
generateRecipes(provider -> {
Identifier identifier = getRecipeIdentifier(provider.getRecipeId());
if (!generatedRecipes.add(identifier)) {
throw new IllegalStateException("Duplicate recipe " + identifier);
}
JsonObject recipeJson = provider.toJson();
ConditionJsonProvider[] conditions = FabricDataGenHelper.consumeConditions(provider);
ConditionJsonProvider.write(recipeJson, conditions);
saveRecipe(cache, recipeJson, path.resolve("data/" + identifier.getNamespace() + "/recipes/" + identifier.getPath() + ".json"));
JsonObject advancementJson = provider.toAdvancementJson();
if (advancementJson != null) {
ConditionJsonProvider.write(advancementJson, conditions);
saveRecipeAdvancement(cache, advancementJson, path.resolve("data/" + identifier.getNamespace() + "/advancements/" + provider.getAdvancementId().getPath() + ".json"));
}
});
}
/**
* Override this method to change the recipe identifier. The default implementation normalizes the namespace to the mod ID.
*/
protected Identifier getRecipeIdentifier(Identifier identifier) {
return new Identifier(dataGenerator.getModId(), identifier.getPath());
}
}

View file

@ -16,83 +16,17 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.nio.file.Path;
import java.util.Set;
import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.gson.JsonObject;
import net.minecraft.data.DataCache;
import net.minecraft.data.server.RecipesProvider;
import net.minecraft.data.server.recipe.RecipeJsonProvider;
import net.minecraft.data.server.recipe.ShapedRecipeJsonFactory;
import net.minecraft.data.server.recipe.ShapelessRecipeJsonFactory;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* Extend this class and implement {@link FabricRecipesProvider#generateRecipes}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* @deprecated use {@link FabricRecipeProvider} instead.
*/
public abstract class FabricRecipesProvider extends RecipesProvider {
@Deprecated
public abstract class FabricRecipesProvider extends FabricRecipeProvider {
protected final FabricDataGenerator dataGenerator;
public FabricRecipesProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
this.dataGenerator = dataGenerator;
}
/**
* Implement this method and then use the range of methods in {@link RecipesProvider} or from one of the recipe json factories such as {@link ShapedRecipeJsonFactory} & {@link ShapelessRecipeJsonFactory}.
*/
protected abstract void generateRecipes(Consumer<RecipeJsonProvider> exporter);
/**
* Return a new exporter that applies the specified conditions to any recipe json provider it receives.
*/
protected Consumer<RecipeJsonProvider> withConditions(Consumer<RecipeJsonProvider> exporter, ConditionJsonProvider... conditions) {
Preconditions.checkArgument(conditions.length > 0, "Must add at least one condition.");
return json -> {
FabricDataGenHelper.addConditions(json, conditions);
exporter.accept(json);
};
}
@Override
public void run(DataCache cache) {
Path path = this.root.getOutput();
Set<Identifier> generatedRecipes = Sets.newHashSet();
generateRecipes(provider -> {
Identifier identifier = getRecipeIdentifier(provider.getRecipeId());
if (!generatedRecipes.add(identifier)) {
throw new IllegalStateException("Duplicate recipe " + identifier);
}
JsonObject recipeJson = provider.toJson();
ConditionJsonProvider[] conditions = FabricDataGenHelper.consumeConditions(provider);
ConditionJsonProvider.write(recipeJson, conditions);
saveRecipe(cache, recipeJson, path.resolve("data/" + identifier.getNamespace() + "/recipes/" + identifier.getPath() + ".json"));
JsonObject advancementJson = provider.toAdvancementJson();
if (advancementJson != null) {
ConditionJsonProvider.write(advancementJson, conditions);
saveRecipeAdvancement(cache, advancementJson, path.resolve("data/" + identifier.getNamespace() + "/advancements/" + provider.getAdvancementId().getPath() + ".json"));
}
});
}
/**
* Override this method to change the recipe identifier. The default implementation normalizes the namespace to the mod ID.
*/
protected Identifier getRecipeIdentifier(Identifier identifier) {
return new Identifier(dataGenerator.getModId(), identifier.getPath());
}
}

View file

@ -43,11 +43,11 @@ import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockStateDefinitionProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
@Mixin(BlockStateDefinitionProvider.class)
public class BlockStateDefinitionProviderMixin {
public class ModelProviderMixin {
@Shadow
@Final
private DataGenerator generator;
@ -57,8 +57,8 @@ public class BlockStateDefinitionProviderMixin {
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/data/client/model/BlockStateModelGenerator;register()V"))
private void registerBlockStateModels(BlockStateModelGenerator instance) {
if (((Object) this) instanceof FabricBlockStateDefinitionProvider fabricBlockStateDefinitionProvider) {
fabricBlockStateDefinitionProvider.generateBlockStateModels(instance);
if (((Object) this) instanceof FabricModelProvider fabricModelProvider) {
fabricModelProvider.generateBlockStateModels(instance);
} else {
// Fallback to the vanilla registration when not a fabric provider
instance.register();
@ -67,8 +67,8 @@ public class BlockStateDefinitionProviderMixin {
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/data/client/ItemModelGenerator;register()V"))
private void registerItemModels(ItemModelGenerator instance) {
if (((Object) this) instanceof FabricBlockStateDefinitionProvider fabricBlockStateDefinitionProvider) {
fabricBlockStateDefinitionProvider.generateItemModels(instance);
if (((Object) this) instanceof FabricModelProvider fabricModelProvider) {
fabricModelProvider.generateItemModels(instance);
} else {
// Fallback to the vanilla registration when not a fabric provider
instance.register();

View file

@ -3,7 +3,7 @@
"package": "net.fabricmc.fabric.mixin.datagen",
"compatibilityLevel": "JAVA_16",
"mixins": [
"BlockStateDefinitionProviderMixin",
"ModelProviderMixin",
"DynamicRegistryManagerAccessor",
"TagBuilderMixin"
],

View file

@ -49,10 +49,10 @@ import net.minecraft.world.biome.BuiltinBiomes;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementsProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTablesProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockStateDefinitionProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipesProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
@ -67,14 +67,14 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
dataGenerator.addProvider(TestRecipeProvider::new);
dataGenerator.addProvider(TestConditionalRecipeProvider::new);
dataGenerator.addProvider(TestBlockStateDefinitionProvider::new);
dataGenerator.addProvider(TestAdvancementsProvider::new);
dataGenerator.addProvider(TestBlockLootTablesProvider::new);
dataGenerator.addProvider(TestBarterLootTablesProvider::new);
dataGenerator.addProvider(TestModelProvider::new);
dataGenerator.addProvider(TestAdvancementProvider::new);
dataGenerator.addProvider(TestBlockLootTableProvider::new);
dataGenerator.addProvider(TestBarterLootTableProvider::new);
TestBlockTagsProvider blockTagsProvider = dataGenerator.addProvider(TestBlockTagsProvider::new);
dataGenerator.addProvider(new TestItemTagsProvider(dataGenerator, blockTagsProvider));
dataGenerator.addProvider(TestBiomeTagsProvider::new);
TestBlockTagProvider blockTagProvider = dataGenerator.addProvider(TestBlockTagProvider::new);
dataGenerator.addProvider(new TestItemTagProvider(dataGenerator, blockTagProvider));
dataGenerator.addProvider(TestBiomeTagProvider::new);
try {
new FabricTagProvider<>(dataGenerator, BuiltinRegistries.BIOME, "biomes", "Biome Tags") {
@ -99,7 +99,7 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestRecipeProvider extends FabricRecipesProvider {
private static class TestRecipeProvider extends FabricRecipeProvider {
private TestRecipeProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
}
@ -110,7 +110,7 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestConditionalRecipeProvider extends FabricRecipesProvider {
private static class TestConditionalRecipeProvider extends FabricRecipeProvider {
private TestConditionalRecipeProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
}
@ -122,8 +122,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestBlockStateDefinitionProvider extends FabricBlockStateDefinitionProvider {
private TestBlockStateDefinitionProvider(FabricDataGenerator generator) {
private static class TestModelProvider extends FabricModelProvider {
private TestModelProvider(FabricDataGenerator generator) {
super(generator);
}
@ -139,8 +139,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestBlockTagsProvider extends FabricTagProvider.BlockTagProvider {
private TestBlockTagsProvider(FabricDataGenerator dataGenerator) {
private static class TestBlockTagProvider extends FabricTagProvider.BlockTagProvider {
private TestBlockTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
}
@ -152,8 +152,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestItemTagsProvider extends FabricTagProvider.ItemTagProvider {
private TestItemTagsProvider(FabricDataGenerator dataGenerator, BlockTagProvider blockTagProvider) {
private static class TestItemTagProvider extends FabricTagProvider.ItemTagProvider {
private TestItemTagProvider(FabricDataGenerator dataGenerator, BlockTagProvider blockTagProvider) {
super(dataGenerator, blockTagProvider);
}
@ -163,8 +163,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestBiomeTagsProvider extends FabricTagProvider.DynamicRegistryTagProvider<Biome> {
private TestBiomeTagsProvider(FabricDataGenerator dataGenerator) {
private static class TestBiomeTagProvider extends FabricTagProvider.DynamicRegistryTagProvider<Biome> {
private TestBiomeTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.BIOME_KEY, "biomes", "Biome Tags");
}
@ -183,8 +183,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestAdvancementsProvider extends FabricAdvancementsProvider {
private TestAdvancementsProvider(FabricDataGenerator dataGenerator) {
private static class TestAdvancementProvider extends FabricAdvancementProvider {
private TestAdvancementProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
}
@ -213,8 +213,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestBlockLootTablesProvider extends FabricBlockLootTablesProvider {
private TestBlockLootTablesProvider(FabricDataGenerator dataGenerator) {
private static class TestBlockLootTableProvider extends FabricBlockLootTableProvider {
private TestBlockLootTableProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
}
@ -225,8 +225,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestBarterLootTablesProvider extends SimpleFabricLootTableProvider {
private TestBarterLootTablesProvider(FabricDataGenerator dataGenerator) {
private static class TestBarterLootTableProvider extends SimpleFabricLootTableProvider {
private TestBarterLootTableProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, LootContextTypes.BARTER);
}