111 lines
4.0 KiB
Java
111 lines
4.0 KiB
Java
/*
|
|
* Minecraft Forge
|
|
* Copyright (c) 2016-2019.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation version 2.1
|
|
* of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
package net.minecraftforge.debug;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
import net.minecraft.advancements.Advancement;
|
|
import net.minecraft.advancements.AdvancementRewards;
|
|
import net.minecraft.advancements.FrameType;
|
|
import net.minecraft.block.Blocks;
|
|
import net.minecraft.data.DataGenerator;
|
|
import net.minecraft.data.IFinishedRecipe;
|
|
import net.minecraft.data.RecipeProvider;
|
|
import net.minecraft.data.ShapedRecipeBuilder;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.util.text.StringTextComponent;
|
|
import net.minecraftforge.common.crafting.ConditionalAdvancement;
|
|
import net.minecraftforge.common.crafting.ConditionalRecipe;
|
|
import net.minecraftforge.common.crafting.conditions.IConditionBuilder;
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
|
|
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
|
|
|
@Mod("data_gen_test")
|
|
@Mod.EventBusSubscriber(bus = Bus.MOD)
|
|
public class DataGeneratorTest
|
|
{
|
|
@SubscribeEvent
|
|
public static void gatherData(GatherDataEvent event)
|
|
{
|
|
DataGenerator gen = event.getGenerator();
|
|
|
|
if (event.includeServer())
|
|
{
|
|
gen.addProvider(new Recipes(gen));
|
|
}
|
|
}
|
|
|
|
public static class Recipes extends RecipeProvider implements IConditionBuilder
|
|
{
|
|
public Recipes(DataGenerator gen)
|
|
{
|
|
super(gen);
|
|
}
|
|
|
|
protected void registerRecipes(Consumer<IFinishedRecipe> consumer)
|
|
{
|
|
ResourceLocation ID = new ResourceLocation("data_gen_test", "conditional");
|
|
|
|
ConditionalRecipe.builder()
|
|
.addCondition(
|
|
and(
|
|
not(modLoaded("minecraft")),
|
|
itemExists("minecraft", "dirt"),
|
|
FALSE()
|
|
)
|
|
)
|
|
.addRecipe(
|
|
ShapedRecipeBuilder.shapedRecipe(Blocks.DIAMOND_BLOCK, 64)
|
|
.patternLine("XXX")
|
|
.patternLine("XXX")
|
|
.patternLine("XXX")
|
|
.key('X', Blocks.DIRT)
|
|
.setGroup("")
|
|
.addCriterion("has_dirt", hasItem(Blocks.DIRT)) //Doesn't actually print... TODO: nested/conditional advancements?
|
|
::build
|
|
)
|
|
.setAdvancement(ID,
|
|
ConditionalAdvancement.builder()
|
|
.addCondition(
|
|
and(
|
|
not(modLoaded("minecraft")),
|
|
itemExists("minecraft", "dirt"),
|
|
FALSE()
|
|
)
|
|
)
|
|
.addAdvancement(
|
|
Advancement.Builder.builder()
|
|
.withParentId(new ResourceLocation("minecraft", "root"))
|
|
.withDisplay(Blocks.DIAMOND_BLOCK,
|
|
new StringTextComponent("Dirt2Diamonds"),
|
|
new StringTextComponent("The BEST crafting recipe in the game!"),
|
|
null, FrameType.TASK, false, false, false
|
|
)
|
|
.withRewards(AdvancementRewards.Builder.recipe(ID))
|
|
.withCriterion("has_dirt", hasItem(Blocks.DIRT))
|
|
)
|
|
)
|
|
.build(consumer, ID);
|
|
}
|
|
}
|
|
}
|