mirror of
https://github.com/FabricMC/fabric.git
synced 2025-04-21 03:10:54 -04:00
Datagen Renames (#1910)
* Renames * whoops * Return dataGenerator fields in deprecated classes * fix up conflicts * Update FabricRecipesProvider.java
This commit is contained in:
parent
b75bffd5ad
commit
9b5f02e4eb
12 changed files with 389 additions and 257 deletions
fabric-data-generation-api-v1/src
main
java/net/fabricmc/fabric
api/datagen/v1/provider
FabricAdvancementProvider.javaFabricAdvancementsProvider.javaFabricBlockLootTableProvider.javaFabricBlockLootTablesProvider.javaFabricBlockStateDefinitionProvider.javaFabricLootTableProvider.javaFabricModelProvider.javaFabricRecipeProvider.javaFabricRecipesProvider.java
mixin/datagen
resources
testmod/java/net/fabricmc/fabric/test/datagen
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
|
@ -3,7 +3,7 @@
|
|||
"package": "net.fabricmc.fabric.mixin.datagen",
|
||||
"compatibilityLevel": "JAVA_16",
|
||||
"mixins": [
|
||||
"BlockStateDefinitionProviderMixin",
|
||||
"ModelProviderMixin",
|
||||
"DynamicRegistryManagerAccessor",
|
||||
"TagBuilderMixin"
|
||||
],
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue