546 lines
26 KiB
Java
546 lines
26 KiB
Java
package at.petrak.hexcasting.datagen.recipe;
|
|
|
|
import at.petrak.hexcasting.api.HexAPI;
|
|
import at.petrak.hexcasting.api.misc.MediaConstants;
|
|
import at.petrak.hexcasting.api.mod.HexTags;
|
|
import at.petrak.hexcasting.common.blocks.decoration.BlockAkashicLog;
|
|
import at.petrak.hexcasting.common.items.ItemStaff;
|
|
import at.petrak.hexcasting.common.items.pigment.ItemPridePigment;
|
|
import at.petrak.hexcasting.common.lib.HexBlocks;
|
|
import at.petrak.hexcasting.common.lib.HexItems;
|
|
import at.petrak.hexcasting.common.recipe.SealThingsRecipe;
|
|
import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper;
|
|
import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.EntityTypeIngredient;
|
|
import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.VillagerIngredient;
|
|
import at.petrak.hexcasting.datagen.HexAdvancements;
|
|
import at.petrak.hexcasting.datagen.IXplatConditionsBuilder;
|
|
import at.petrak.hexcasting.datagen.IXplatIngredients;
|
|
import at.petrak.hexcasting.datagen.recipe.builders.BrainsweepRecipeBuilder;
|
|
import at.petrak.hexcasting.datagen.recipe.builders.CompatIngredientValue;
|
|
import at.petrak.hexcasting.datagen.recipe.builders.CreateCrushingRecipeBuilder;
|
|
import at.petrak.hexcasting.datagen.recipe.builders.FarmersDelightCuttingRecipeBuilder;
|
|
import at.petrak.paucal.api.datagen.PaucalRecipeProvider;
|
|
import net.minecraft.core.Registry;
|
|
import net.minecraft.data.DataGenerator;
|
|
import net.minecraft.data.recipes.*;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.tags.ItemTags;
|
|
import net.minecraft.world.entity.EntityType;
|
|
import net.minecraft.world.entity.npc.VillagerProfession;
|
|
import net.minecraft.world.item.DyeColor;
|
|
import net.minecraft.world.item.DyeItem;
|
|
import net.minecraft.world.item.Item;
|
|
import net.minecraft.world.item.Items;
|
|
import net.minecraft.world.item.crafting.Ingredient;
|
|
import net.minecraft.world.item.crafting.SimpleRecipeSerializer;
|
|
import net.minecraft.world.level.block.Blocks;
|
|
|
|
import java.util.List;
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Function;
|
|
|
|
// TODO: need to do a big refactor of this class cause it's giant and unwieldy, probably as part of #360
|
|
public class HexplatRecipes extends PaucalRecipeProvider {
|
|
private final DataGenerator generator;
|
|
private final IXplatIngredients ingredients;
|
|
private final Function<RecipeBuilder, IXplatConditionsBuilder> conditions;
|
|
|
|
private final List<BlockAkashicLog> EDIFIED_LOGS = List.of(
|
|
HexBlocks.EDIFIED_LOG, HexBlocks.EDIFIED_LOG_AMETHYST,
|
|
HexBlocks.EDIFIED_LOG_AVENTURINE, HexBlocks.EDIFIED_LOG_CITRINE,
|
|
HexBlocks.EDIFIED_LOG_PURPLE);
|
|
|
|
public HexplatRecipes(DataGenerator generator, IXplatIngredients ingredients,
|
|
Function<RecipeBuilder, IXplatConditionsBuilder> conditions) {
|
|
super(generator, HexAPI.MOD_ID);
|
|
this.generator = generator;
|
|
this.ingredients = ingredients;
|
|
this.conditions = conditions;
|
|
}
|
|
|
|
@Override
|
|
protected void makeRecipes(Consumer<FinishedRecipe> recipes) {
|
|
specialRecipe(recipes, SealThingsRecipe.FOCUS_SERIALIZER);
|
|
specialRecipe(recipes, SealThingsRecipe.SPELLBOOK_SERIALIZER);
|
|
|
|
staffRecipe(recipes, HexItems.STAFF_OAK, Items.OAK_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_BIRCH, Items.BIRCH_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_SPRUCE, Items.SPRUCE_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_JUNGLE, Items.JUNGLE_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_DARK_OAK, Items.DARK_OAK_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_ACACIA, Items.ACACIA_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_CRIMSON, Items.CRIMSON_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_WARPED, Items.WARPED_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_MANGROVE, Items.MANGROVE_PLANKS);
|
|
staffRecipe(recipes, HexItems.STAFF_EDIFIED, HexBlocks.EDIFIED_PLANKS.asItem());
|
|
staffRecipe(recipes, HexItems.STAFF_QUENCHED, HexItems.QUENCHED_SHARD);
|
|
staffRecipe(recipes, HexItems.STAFF_MINDSPLICE, Ingredient.of(HexTags.Items.MINDFLAYED_CIRCLE_COMPONENTS));
|
|
|
|
ShapelessRecipeBuilder.shapeless(HexItems.THOUGHT_KNOT)
|
|
.requires(HexItems.AMETHYST_DUST)
|
|
.requires(Items.STRING)
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES))
|
|
.save(recipes);
|
|
ShapedRecipeBuilder.shaped(HexItems.FOCUS)
|
|
.define('G', ingredients.glowstoneDust())
|
|
.define('L', ingredients.leather())
|
|
.define('P', Items.PAPER)
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
.pattern("GLG")
|
|
.pattern("PAP")
|
|
.pattern("GLG")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES))
|
|
.save(recipes);
|
|
ShapedRecipeBuilder.shaped(HexItems.FOCUS)
|
|
.define('G', ingredients.glowstoneDust())
|
|
.define('L', ingredients.leather())
|
|
.define('P', Items.PAPER)
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
.pattern("GPG")
|
|
.pattern("LAL")
|
|
.pattern("GPG")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES))
|
|
.save(recipes, modLoc("focus_rotated"));
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.SPELLBOOK)
|
|
.define('N', ingredients.goldNugget())
|
|
.define('B', Items.WRITABLE_BOOK)
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
.define('F', Items.CHORUS_FRUIT) // i wanna gate this behind the end SOMEHOW
|
|
// hey look its my gender ^^
|
|
.pattern("NBA")
|
|
.pattern("NFA")
|
|
.pattern("NBA")
|
|
.unlockedBy("has_focus", hasItem(HexItems.FOCUS))
|
|
.unlockedBy("has_chorus", hasItem(Items.CHORUS_FRUIT)).save(recipes);
|
|
|
|
ringCornerless(
|
|
HexItems.CYPHER, 1,
|
|
ingredients.copperIngot(),
|
|
Ingredient.of(HexItems.AMETHYST_DUST))
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ringCornerless(
|
|
HexItems.TRINKET, 1,
|
|
ingredients.ironIngot(),
|
|
Ingredient.of(Items.AMETHYST_SHARD))
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.ARTIFACT)
|
|
.define('F', ingredients.goldIngot())
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
// why in god's name does minecraft have two different places for item tags
|
|
.define('D', ItemTags.MUSIC_DISCS)
|
|
.pattern(" F ")
|
|
.pattern("FAF")
|
|
.pattern(" D ")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ringCornerless(HexItems.SCRYING_LENS, 1, Items.GLASS, HexItems.AMETHYST_DUST)
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.ABACUS)
|
|
.define('S', Items.STICK)
|
|
.define('A', Items.AMETHYST_SHARD)
|
|
.define('W', ItemTags.PLANKS)
|
|
.pattern("WAW")
|
|
.pattern("SAS")
|
|
.pattern("WAW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
// Why am I like this
|
|
ShapedRecipeBuilder.shaped(HexItems.SUBMARINE_SANDWICH)
|
|
.define('S', Items.STICK)
|
|
.define('A', Items.AMETHYST_SHARD)
|
|
.define('C', Items.COOKED_BEEF)
|
|
.define('B', Items.BREAD)
|
|
.pattern(" SA")
|
|
.pattern(" C ")
|
|
.pattern(" B ")
|
|
.unlockedBy("has_item", hasItem(Items.AMETHYST_SHARD)).save(recipes);
|
|
|
|
for (var dye : DyeColor.values()) {
|
|
var item = HexItems.DYE_PIGMENTS.get(dye);
|
|
ShapedRecipeBuilder.shaped(item)
|
|
.define('D', HexItems.AMETHYST_DUST)
|
|
.define('C', DyeItem.byColor(dye))
|
|
.pattern(" D ")
|
|
.pattern("DCD")
|
|
.pattern(" D ")
|
|
.unlockedBy("has_item", hasItem(HexItems.AMETHYST_DUST)).save(recipes);
|
|
}
|
|
|
|
gayRecipe(recipes, ItemPridePigment.Type.AGENDER, Ingredient.of(Items.GLASS));
|
|
gayRecipe(recipes, ItemPridePigment.Type.AROACE, Ingredient.of(Items.WHEAT_SEEDS));
|
|
gayRecipe(recipes, ItemPridePigment.Type.AROMANTIC, Ingredient.of(Items.ARROW));
|
|
gayRecipe(recipes, ItemPridePigment.Type.ASEXUAL, Ingredient.of(Items.BREAD));
|
|
gayRecipe(recipes, ItemPridePigment.Type.BISEXUAL, Ingredient.of(Items.WHEAT));
|
|
gayRecipe(recipes, ItemPridePigment.Type.DEMIBOY, Ingredient.of(Items.RAW_IRON));
|
|
gayRecipe(recipes, ItemPridePigment.Type.DEMIGIRL, Ingredient.of(Items.RAW_COPPER));
|
|
gayRecipe(recipes, ItemPridePigment.Type.GAY, Ingredient.of(Items.STONE_BRICK_WALL));
|
|
gayRecipe(recipes, ItemPridePigment.Type.GENDERFLUID, Ingredient.of(Items.WATER_BUCKET));
|
|
gayRecipe(recipes, ItemPridePigment.Type.GENDERQUEER, Ingredient.of(Items.GLASS_BOTTLE));
|
|
gayRecipe(recipes, ItemPridePigment.Type.INTERSEX, Ingredient.of(Items.AZALEA));
|
|
gayRecipe(recipes, ItemPridePigment.Type.LESBIAN, Ingredient.of(Items.HONEYCOMB));
|
|
gayRecipe(recipes, ItemPridePigment.Type.NONBINARY, Ingredient.of(Items.MOSS_BLOCK));
|
|
gayRecipe(recipes, ItemPridePigment.Type.PANSEXUAL, ingredients.whenModIngredient(
|
|
Ingredient.of(Items.CARROT),
|
|
"farmersdelight",
|
|
CompatIngredientValue.of("farmersdelight:skillet")
|
|
));
|
|
gayRecipe(recipes, ItemPridePigment.Type.PLURAL, Ingredient.of(Items.REPEATER));
|
|
gayRecipe(recipes, ItemPridePigment.Type.TRANSGENDER, Ingredient.of(Items.EGG));
|
|
|
|
ring(HexItems.UUID_PIGMENT, 1, HexItems.AMETHYST_DUST, Items.AMETHYST_SHARD)
|
|
.unlockedBy("has_item", hasItem(HexItems.AMETHYST_DUST)).save(recipes);
|
|
ring(HexItems.DEFAULT_PIGMENT, 1, HexItems.AMETHYST_DUST, Items.COPPER_INGOT)
|
|
.unlockedBy("has_item", hasItem(HexItems.AMETHYST_DUST)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.SCROLL_SMOL)
|
|
.define('P', Items.PAPER)
|
|
.define('A', HexItems.AMETHYST_DUST)
|
|
.pattern(" A")
|
|
.pattern("P ")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.SCROLL_MEDIUM)
|
|
.define('P', Items.PAPER)
|
|
.define('A', HexItems.AMETHYST_DUST)
|
|
.pattern(" A")
|
|
.pattern("PP ")
|
|
.pattern("PP ")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.SCROLL_LARGE)
|
|
.define('P', Items.PAPER)
|
|
.define('A', HexItems.AMETHYST_DUST)
|
|
.pattern("PPA")
|
|
.pattern("PPP")
|
|
.pattern("PPP")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.STAVES)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.SLATE, 6)
|
|
.define('S', Items.DEEPSLATE)
|
|
.define('A', HexItems.AMETHYST_DUST)
|
|
.pattern(" A ")
|
|
.pattern("SSS")
|
|
.unlockedBy("has_item", hasItem(HexItems.AMETHYST_DUST)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexItems.JEWELER_HAMMER)
|
|
.define('I', ingredients.ironIngot())
|
|
.define('N', ingredients.ironNugget())
|
|
.define('A', Items.AMETHYST_SHARD)
|
|
.define('S', ingredients.stick())
|
|
.pattern("IAN")
|
|
.pattern(" S ")
|
|
.pattern(" S ")
|
|
.unlockedBy("has_item", hasItem(Items.AMETHYST_SHARD)).save(recipes);
|
|
|
|
ShapelessRecipeBuilder.shapeless(HexItems.AMETHYST_DUST,
|
|
(MediaConstants.QUENCHED_SHARD_UNIT / MediaConstants.DUST_UNIT) + 1)
|
|
.requires(HexItems.QUENCHED_SHARD)
|
|
.requires(HexItems.AMETHYST_DUST)
|
|
.unlockedBy("has_item", hasItem(HexItems.QUENCHED_SHARD))
|
|
.save(recipes, modLoc("decompose_quenched_shard/dust"));
|
|
ShapelessRecipeBuilder.shapeless(Items.AMETHYST_SHARD,
|
|
(MediaConstants.QUENCHED_SHARD_UNIT / MediaConstants.SHARD_UNIT) + 1)
|
|
.requires(HexItems.QUENCHED_SHARD)
|
|
.requires(Items.AMETHYST_SHARD)
|
|
.unlockedBy("has_item", hasItem(HexItems.QUENCHED_SHARD))
|
|
.save(recipes, modLoc("decompose_quenched_shard/shard"));
|
|
ShapelessRecipeBuilder.shapeless(HexItems.CHARGED_AMETHYST,
|
|
(MediaConstants.QUENCHED_SHARD_UNIT / MediaConstants.CRYSTAL_UNIT) + 1)
|
|
.requires(HexItems.QUENCHED_SHARD)
|
|
.requires(HexItems.CHARGED_AMETHYST)
|
|
.unlockedBy("has_item", hasItem(HexItems.QUENCHED_SHARD))
|
|
.save(recipes, modLoc("decompose_quenched_shard/charged"));
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.SLATE_BLOCK)
|
|
.define('S', HexItems.SLATE)
|
|
.pattern("S")
|
|
.pattern("S")
|
|
.unlockedBy("has_item", hasItem(HexItems.SLATE))
|
|
.save(recipes, modLoc("slate_block_from_slates"));
|
|
|
|
ringAll(HexBlocks.SLATE_BLOCK, 8, Blocks.DEEPSLATE, HexItems.AMETHYST_DUST)
|
|
.unlockedBy("has_item", hasItem(HexItems.SLATE)).save(recipes);
|
|
|
|
packing(HexItems.AMETHYST_DUST, HexBlocks.AMETHYST_DUST_BLOCK.asItem(), "amethyst_dust",
|
|
false, recipes);
|
|
|
|
ringAll(HexBlocks.AMETHYST_TILES, 8, Blocks.AMETHYST_BLOCK, HexItems.AMETHYST_DUST)
|
|
.unlockedBy("has_item", hasItem(HexItems.AMETHYST_DUST)).save(recipes);
|
|
|
|
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.AMETHYST_BLOCK), HexBlocks.AMETHYST_TILES)
|
|
.unlockedBy("has_item", hasItem(Blocks.AMETHYST_BLOCK))
|
|
.save(recipes, modLoc("stonecutting/amethyst_tiles"));
|
|
|
|
ringAll(HexBlocks.SCROLL_PAPER, 8, Items.PAPER, Items.AMETHYST_SHARD)
|
|
.unlockedBy("has_item", hasItem(Items.AMETHYST_SHARD)).save(recipes);
|
|
|
|
ShapelessRecipeBuilder.shapeless(HexBlocks.ANCIENT_SCROLL_PAPER, 8)
|
|
.requires(ingredients.dyes().get(DyeColor.BROWN))
|
|
.requires(HexBlocks.SCROLL_PAPER, 8)
|
|
.unlockedBy("has_item", hasItem(HexBlocks.SCROLL_PAPER)).save(recipes);
|
|
|
|
stack(HexBlocks.SCROLL_PAPER_LANTERN, 1, HexBlocks.SCROLL_PAPER, Items.TORCH)
|
|
.unlockedBy("has_item", hasItem(HexBlocks.SCROLL_PAPER)).save(recipes);
|
|
|
|
stack(HexBlocks.ANCIENT_SCROLL_PAPER_LANTERN, 1, HexBlocks.ANCIENT_SCROLL_PAPER, Items.TORCH)
|
|
.unlockedBy("has_item", hasItem(HexBlocks.ANCIENT_SCROLL_PAPER)).save(recipes);
|
|
|
|
ShapelessRecipeBuilder.shapeless(HexBlocks.ANCIENT_SCROLL_PAPER_LANTERN, 8)
|
|
.requires(ingredients.dyes().get(DyeColor.BROWN))
|
|
.requires(HexBlocks.SCROLL_PAPER_LANTERN, 8)
|
|
.unlockedBy("has_item", hasItem(HexBlocks.SCROLL_PAPER_LANTERN))
|
|
.save(recipes, modLoc("ageing_scroll_paper_lantern"));
|
|
|
|
stack(HexBlocks.SCONCE, 4,
|
|
Ingredient.of(HexItems.CHARGED_AMETHYST),
|
|
ingredients.copperIngot())
|
|
.unlockedBy("has_item", hasItem(HexItems.CHARGED_AMETHYST)).save(recipes);
|
|
|
|
ShapelessRecipeBuilder.shapeless(HexBlocks.EDIFIED_PLANKS, 4)
|
|
.requires(HexTags.Items.EDIFIED_LOGS)
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_LOGS)).save(recipes);
|
|
|
|
for (var log : EDIFIED_LOGS) {
|
|
ShapedRecipeBuilder.shaped(log, 3)
|
|
.define('W', log)
|
|
.pattern("WW")
|
|
.pattern("WW")
|
|
.unlockedBy("has_item", hasItem(log)).save(recipes);
|
|
}
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.STRIPPED_EDIFIED_WOOD, 3)
|
|
.define('W', HexBlocks.STRIPPED_EDIFIED_LOG)
|
|
.pattern("WW")
|
|
.pattern("WW")
|
|
.unlockedBy("has_item", hasItem(HexBlocks.STRIPPED_EDIFIED_LOG)).save(recipes);
|
|
|
|
ring(HexBlocks.EDIFIED_PANEL, 8,
|
|
HexTags.Items.EDIFIED_PLANKS, null)
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EDIFIED_TILE, 6)
|
|
.define('W', HexTags.Items.EDIFIED_PLANKS)
|
|
.pattern("WW ")
|
|
.pattern("W W")
|
|
.pattern(" WW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EDIFIED_DOOR, 3)
|
|
.define('W', HexTags.Items.EDIFIED_PLANKS)
|
|
.pattern("WW")
|
|
.pattern("WW")
|
|
.pattern("WW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EDIFIED_TRAPDOOR, 2)
|
|
.define('W', HexTags.Items.EDIFIED_PLANKS)
|
|
.pattern("WWW")
|
|
.pattern("WWW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EDIFIED_STAIRS, 4)
|
|
.define('W', HexTags.Items.EDIFIED_PLANKS)
|
|
.pattern("W ")
|
|
.pattern("WW ")
|
|
.pattern("WWW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EDIFIED_SLAB, 6)
|
|
.define('W', HexTags.Items.EDIFIED_PLANKS)
|
|
.pattern("WWW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EDIFIED_PRESSURE_PLATE, 1)
|
|
.define('W', HexTags.Items.EDIFIED_PLANKS)
|
|
.pattern("WW")
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
ShapelessRecipeBuilder.shapeless(HexBlocks.EDIFIED_BUTTON)
|
|
.requires(HexTags.Items.EDIFIED_PLANKS)
|
|
.unlockedBy("has_item", hasItem(HexTags.Items.EDIFIED_PLANKS)).save(recipes);
|
|
|
|
var enlightenment = HexAdvancements.ENLIGHTEN;
|
|
ShapedRecipeBuilder.shaped(HexBlocks.IMPETUS_EMPTY)
|
|
.define('B', Items.IRON_BARS)
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
.define('S', HexBlocks.SLATE_BLOCK)
|
|
.define('P', Items.PURPUR_BLOCK)
|
|
.pattern("PSS")
|
|
.pattern("BAB")
|
|
.pattern("SSP")
|
|
.unlockedBy("enlightenment", enlightenment).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.EMPTY_DIRECTRIX)
|
|
.define('C', Items.COMPARATOR)
|
|
.define('O', Items.OBSERVER)
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
.define('S', HexBlocks.SLATE_BLOCK)
|
|
.pattern("CSS")
|
|
.pattern("OAO")
|
|
.pattern("SSC")
|
|
.unlockedBy("enlightenment", enlightenment).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.AKASHIC_BOOKSHELF)
|
|
.define('L', HexTags.Items.EDIFIED_LOGS)
|
|
.define('P', HexTags.Items.EDIFIED_PLANKS)
|
|
.define('C', Items.BOOK)
|
|
/*this is the*/.pattern("LPL") // and what i have for you today is
|
|
.pattern("CCC")
|
|
.pattern("LPL")
|
|
.unlockedBy("enlightenment", enlightenment).save(recipes);
|
|
|
|
ShapedRecipeBuilder.shaped(HexBlocks.AKASHIC_LIGATURE, 4)
|
|
.define('L', HexTags.Items.EDIFIED_LOGS)
|
|
.define('P', HexTags.Items.EDIFIED_PLANKS)
|
|
.define('1', HexItems.AMETHYST_DUST)
|
|
.define('2', Items.AMETHYST_SHARD)
|
|
.define('3', HexItems.CHARGED_AMETHYST)
|
|
.pattern("LPL")
|
|
.pattern("123")
|
|
.pattern("LPL")
|
|
.unlockedBy("enlightenment", enlightenment).save(recipes);
|
|
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(Blocks.AMETHYST_BLOCK),
|
|
new VillagerIngredient(null, null, 3),
|
|
Blocks.BUDDING_AMETHYST.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/budding_amethyst"));
|
|
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY),
|
|
new VillagerIngredient(VillagerProfession.TOOLSMITH, null, 2),
|
|
HexBlocks.IMPETUS_RIGHTCLICK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/impetus_rightclick"));
|
|
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY),
|
|
new VillagerIngredient(VillagerProfession.TOOLSMITH, null, 2),
|
|
HexBlocks.IMPETUS_LOOK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/impetus_look"));
|
|
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY),
|
|
new VillagerIngredient(VillagerProfession.CLERIC, null, 2),
|
|
HexBlocks.IMPETUS_REDSTONE.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/impetus_storedplayer"));
|
|
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.EMPTY_DIRECTRIX),
|
|
new VillagerIngredient(VillagerProfession.MASON, null, 1),
|
|
HexBlocks.DIRECTRIX_REDSTONE.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/directrix_redstone"));
|
|
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.AKASHIC_LIGATURE),
|
|
new VillagerIngredient(VillagerProfession.LIBRARIAN, null, 5),
|
|
HexBlocks.AKASHIC_RECORD.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/akashic_record"));
|
|
|
|
// Temporary tests
|
|
new BrainsweepRecipeBuilder(StateIngredientHelper.of(Blocks.AMETHYST_BLOCK),
|
|
new EntityTypeIngredient(EntityType.ALLAY),
|
|
HexBlocks.QUENCHED_ALLAY.defaultBlockState(), MediaConstants.CRYSTAL_UNIT)
|
|
.unlockedBy("enlightenment", enlightenment)
|
|
.save(recipes, modLoc("brainsweep/quench_allay"));
|
|
|
|
// Create compat
|
|
this.conditions.apply(new CreateCrushingRecipeBuilder()
|
|
.withInput(Blocks.AMETHYST_CLUSTER)
|
|
.duration(150)
|
|
.withOutput(Items.AMETHYST_SHARD, 7)
|
|
.withOutput(HexItems.AMETHYST_DUST, 5)
|
|
.withOutput(0.25f, HexItems.CHARGED_AMETHYST))
|
|
.whenModLoaded("create")
|
|
.save(recipes, new ResourceLocation("create", "crushing/amethyst_cluster"));
|
|
|
|
this.conditions.apply(new CreateCrushingRecipeBuilder()
|
|
.withInput(Blocks.AMETHYST_BLOCK)
|
|
.duration(150)
|
|
.withOutput(Items.AMETHYST_SHARD, 3)
|
|
.withOutput(0.5f, HexItems.AMETHYST_DUST, 4))
|
|
.whenModLoaded("create")
|
|
.save(recipes, new ResourceLocation("create", "crushing/amethyst_block"));
|
|
|
|
this.conditions.apply(new CreateCrushingRecipeBuilder()
|
|
.withInput(Items.AMETHYST_SHARD)
|
|
.duration(150)
|
|
.withOutput(HexItems.AMETHYST_DUST, 4)
|
|
.withOutput(0.5f, HexItems.AMETHYST_DUST))
|
|
.whenModLoaded("create")
|
|
.save(recipes, modLoc("compat/create/crushing/amethyst_shard"));
|
|
|
|
// FD compat
|
|
for (var log : EDIFIED_LOGS) {
|
|
this.conditions.apply(new FarmersDelightCuttingRecipeBuilder()
|
|
.withInput(log)
|
|
.withTool(ingredients.axeStrip())
|
|
.withOutput(HexBlocks.STRIPPED_EDIFIED_LOG)
|
|
.withOutput("farmersdelight:tree_bark")
|
|
.withSound(SoundEvents.AXE_STRIP))
|
|
.whenModLoaded("farmersdelight")
|
|
.save(recipes, modLoc("compat/farmersdelight/cutting/" + Registry.BLOCK.getKey(log).getPath()));
|
|
}
|
|
|
|
this.conditions.apply(new FarmersDelightCuttingRecipeBuilder()
|
|
.withInput(HexBlocks.EDIFIED_WOOD)
|
|
.withTool(ingredients.axeStrip())
|
|
.withOutput(HexBlocks.STRIPPED_EDIFIED_WOOD)
|
|
.withOutput("farmersdelight:tree_bark")
|
|
.withSound(SoundEvents.AXE_STRIP))
|
|
.whenModLoaded("farmersdelight")
|
|
.save(recipes, modLoc("compat/farmersdelight/cutting/akashic_wood"));
|
|
|
|
this.conditions.apply(new FarmersDelightCuttingRecipeBuilder()
|
|
.withInput(HexBlocks.EDIFIED_TRAPDOOR)
|
|
.withTool(ingredients.axeDig())
|
|
.withOutput(HexBlocks.EDIFIED_PLANKS))
|
|
.whenModLoaded("farmersdelight")
|
|
.save(recipes, modLoc("compat/farmersdelight/cutting/akashic_trapdoor"));
|
|
|
|
this.conditions.apply(new FarmersDelightCuttingRecipeBuilder()
|
|
.withInput(HexBlocks.EDIFIED_DOOR)
|
|
.withTool(ingredients.axeDig())
|
|
.withOutput(HexBlocks.EDIFIED_PLANKS))
|
|
.whenModLoaded("farmersdelight")
|
|
.save(recipes, modLoc("compat/farmersdelight/cutting/akashic_door"));
|
|
}
|
|
|
|
private void staffRecipe(Consumer<FinishedRecipe> recipes, ItemStaff staff, Item plank) {
|
|
staffRecipe(recipes, staff, Ingredient.of(plank));
|
|
}
|
|
|
|
private void staffRecipe(Consumer<FinishedRecipe> recipes, ItemStaff staff, Ingredient plank) {
|
|
ShapedRecipeBuilder.shaped(staff)
|
|
.define('W', plank)
|
|
.define('S', Items.STICK)
|
|
.define('A', HexItems.CHARGED_AMETHYST)
|
|
.pattern(" SA")
|
|
.pattern(" WS")
|
|
.pattern("S ")
|
|
.unlockedBy("has_item", hasItem(HexItems.CHARGED_AMETHYST))
|
|
.save(recipes);
|
|
}
|
|
|
|
private void gayRecipe(Consumer<FinishedRecipe> recipes, ItemPridePigment.Type type, Ingredient material) {
|
|
var colorizer = HexItems.PRIDE_PIGMENTS.get(type);
|
|
ShapedRecipeBuilder.shaped(colorizer)
|
|
.define('D', HexItems.AMETHYST_DUST)
|
|
.define('C', material)
|
|
.pattern(" D ")
|
|
.pattern("DCD")
|
|
.pattern(" D ")
|
|
.unlockedBy("has_item", hasItem(HexItems.AMETHYST_DUST))
|
|
.save(recipes);
|
|
}
|
|
|
|
private void specialRecipe(Consumer<FinishedRecipe> consumer, SimpleRecipeSerializer<?> serializer) {
|
|
var name = Registry.RECIPE_SERIALIZER.getKey(serializer);
|
|
SpecialRecipeBuilder.special(serializer).save(consumer, HexAPI.MOD_ID + ":dynamic" + name.getPath());
|
|
}
|
|
}
|