|
| 1 | +package me.gleep.oreganized.datagen; |
| 2 | + |
| 3 | +import com.google.common.collect.ImmutableList; |
| 4 | +import com.mojang.datafixers.util.Pair; |
| 5 | +import me.gleep.oreganized.Oreganized; |
| 6 | +import me.gleep.oreganized.util.RegistryHandler; |
| 7 | +import net.minecraft.core.Registry; |
| 8 | +import net.minecraft.data.DataGenerator; |
| 9 | +import net.minecraft.data.loot.BlockLoot; |
| 10 | +import net.minecraft.data.loot.LootTableProvider; |
| 11 | +import net.minecraft.data.recipes.*; |
| 12 | +import net.minecraft.data.tags.BlockTagsProvider; |
| 13 | +import net.minecraft.resources.ResourceLocation; |
| 14 | +import net.minecraft.tags.BlockTags; |
| 15 | +import net.minecraft.world.item.crafting.Ingredient; |
| 16 | +import net.minecraft.world.item.crafting.RecipeSerializer; |
| 17 | +import net.minecraft.world.item.crafting.SimpleCookingSerializer; |
| 18 | +import net.minecraft.world.level.ItemLike; |
| 19 | +import net.minecraft.world.level.block.Block; |
| 20 | +import net.minecraft.world.level.storage.loot.LootTable; |
| 21 | +import net.minecraft.world.level.storage.loot.LootTables; |
| 22 | +import net.minecraft.world.level.storage.loot.ValidationContext; |
| 23 | +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; |
| 24 | +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; |
| 25 | +import net.minecraftforge.client.model.generators.BlockStateProvider; |
| 26 | +import net.minecraftforge.client.model.generators.ItemModelProvider; |
| 27 | +import net.minecraftforge.eventbus.api.SubscribeEvent; |
| 28 | +import net.minecraftforge.fml.common.Mod; |
| 29 | +import net.minecraftforge.forge.event.lifecycle.GatherDataEvent; |
| 30 | + |
| 31 | +import javax.annotation.Nullable; |
| 32 | +import java.util.List; |
| 33 | +import java.util.Map; |
| 34 | +import java.util.function.BiConsumer; |
| 35 | +import java.util.function.Consumer; |
| 36 | +import java.util.function.Supplier; |
| 37 | + |
| 38 | +@Mod.EventBusSubscriber(modid = Oreganized.MOD_ID,bus = Mod.EventBusSubscriber.Bus.MOD) |
| 39 | +public class Datagen { |
| 40 | + |
| 41 | + @SubscribeEvent |
| 42 | + public static void genData(GatherDataEvent event){ |
| 43 | + if(event.includeServer()) { |
| 44 | + event.getGenerator().addProvider(new LootTableProvider(event.getGenerator()) { |
| 45 | + @Override |
| 46 | + protected List<Pair<Supplier<Consumer<BiConsumer<ResourceLocation, LootTable.Builder>>>, LootContextParamSet>> getTables() { |
| 47 | + return ImmutableList.of(Pair.of(ModBlockLoot::new, LootContextParamSets.BLOCK)); |
| 48 | + } |
| 49 | + |
| 50 | + @Override |
| 51 | + protected void validate(Map<ResourceLocation, LootTable> map, ValidationContext validationtracker) { |
| 52 | + map.forEach((p_218436_2_, p_218436_3_) -> { |
| 53 | + LootTables.validate(validationtracker, p_218436_2_, p_218436_3_); |
| 54 | + }); |
| 55 | + } |
| 56 | + }); |
| 57 | + //tags |
| 58 | + event.getGenerator().addProvider(new BlockTagsProvider(event.getGenerator(),Oreganized.MOD_ID, event.getExistingFileHelper()){ |
| 59 | + @Override |
| 60 | + protected void addTags() { |
| 61 | + this.tag(BlockTags.MINEABLE_WITH_PICKAXE).add(RegistryHandler.LEAD_RAW_BLOCK.get(),RegistryHandler.LEAD_GRIMSTONE_ORE.get(), |
| 62 | + RegistryHandler.SILVER_RAW_BLOCK.get(),RegistryHandler.SILVER_GRIMSTONE_ORE.get(),RegistryHandler.GLANCE.get(), |
| 63 | + RegistryHandler.GLANCE_SPOTTED.get(),RegistryHandler.SILVER_ORE.get(),RegistryHandler.LEAD_ORE.get(), |
| 64 | + RegistryHandler.BLASTED_IRON_BLOCK.get(),RegistryHandler.CAST_IRON_BLOCK.get(),RegistryHandler.CUT_LEAD_COATING.get(), |
| 65 | + RegistryHandler.LEAD_COATING.get(),RegistryHandler.LEAD_BLOCK.get(),RegistryHandler.LIGHTENED_IRON_BLOCK.get(), |
| 66 | + RegistryHandler.SILVER_BLOCK.get(),RegistryHandler.TECHNICAL_NETHERITE_BLOCK.get()); |
| 67 | + this.tag(BlockTags.NEEDS_IRON_TOOL).add(RegistryHandler.SILVER_RAW_BLOCK.get(),RegistryHandler.SILVER_GRIMSTONE_ORE.get(), |
| 68 | + RegistryHandler.SILVER_ORE.get(),RegistryHandler.SILVER_BLOCK.get(),RegistryHandler.TECHNICAL_NETHERITE_BLOCK.get()); |
| 69 | + this.tag(BlockTags.NEEDS_STONE_TOOL).add(RegistryHandler.LEAD_RAW_BLOCK.get(),RegistryHandler.LEAD_GRIMSTONE_ORE.get(), |
| 70 | + RegistryHandler.BLASTED_IRON_BLOCK.get(),RegistryHandler.CAST_IRON_BLOCK.get(),RegistryHandler.CUT_LEAD_COATING.get(), |
| 71 | + RegistryHandler.LEAD_COATING.get(),RegistryHandler.LIGHTENED_IRON_BLOCK.get(),RegistryHandler.LEAD_BLOCK.get(), |
| 72 | + RegistryHandler.LEAD_ORE.get()); |
| 73 | + } |
| 74 | + }); |
| 75 | + //blockstate |
| 76 | + event.getGenerator().addProvider(new BlockStateProvider(event.getGenerator(),Oreganized.MOD_ID, event.getExistingFileHelper()) { |
| 77 | + @Override |
| 78 | + protected void registerStatesAndModels() { |
| 79 | + //simpleBlock(RegistryHandler.LEAD_RAW_BLOCK.get()); |
| 80 | + //simpleBlock(RegistryHandler.SILVER_RAW_BLOCK.get()); |
| 81 | + simpleBlock(RegistryHandler.LEAD_GRIMSTONE_ORE.get()); |
| 82 | + simpleBlock(RegistryHandler.SILVER_GRIMSTONE_ORE.get()); |
| 83 | + simpleBlock(RegistryHandler.GLANCE.get()); |
| 84 | + simpleBlock(RegistryHandler.GLANCE_SPOTTED.get()); |
| 85 | + } |
| 86 | + }); |
| 87 | + //items |
| 88 | + event.getGenerator().addProvider(new ItemModelProvider(event.getGenerator(), Oreganized.MOD_ID, event.getExistingFileHelper()) { |
| 89 | + @Override |
| 90 | + protected void registerModels() { |
| 91 | + withExistingParent(RegistryHandler.LEAD_GRIMSTONE_ORE_ITEM.get().getRegistryName().getPath(), new ResourceLocation(Oreganized.MOD_ID,"block/lead_grimstone_ore")); |
| 92 | + withExistingParent(RegistryHandler.SILVER_GRIMSTONE_ORE_ITEM.get().getRegistryName().getPath(), new ResourceLocation(Oreganized.MOD_ID,"block/silver_grimstone_ore")); |
| 93 | + withExistingParent(RegistryHandler.GLANCE_ITEM.get().getRegistryName().getPath(), new ResourceLocation(Oreganized.MOD_ID,"block/glance")); |
| 94 | + withExistingParent(RegistryHandler.GLANCE_SPOTTED_ITEM.get().getRegistryName().getPath(), new ResourceLocation(Oreganized.MOD_ID,"block/glance_spotted")); |
| 95 | + } |
| 96 | + }); |
| 97 | + //recipes |
| 98 | + event.getGenerator().addProvider(new ModRecipeProvider(event.getGenerator()){ |
| 99 | + @Override |
| 100 | + protected void buildCraftingRecipes(Consumer<FinishedRecipe> pFinishedRecipeConsumer) { |
| 101 | + nineBlockStorageRecipes(pFinishedRecipeConsumer, RegistryHandler.LEAD_RAW.get(), RegistryHandler.LEAD_RAW_BLOCK.get()); |
| 102 | + nineBlockStorageRecipes(pFinishedRecipeConsumer, RegistryHandler.SILVER_RAW.get(), RegistryHandler.SILVER_RAW_BLOCK.get()); |
| 103 | + |
| 104 | + nineBlockStorageRecipes(pFinishedRecipeConsumer, RegistryHandler.LEAD_INGOT.get(), RegistryHandler.LEAD_BLOCK.get()); |
| 105 | + |
| 106 | + oreSmelting(pFinishedRecipeConsumer, ImmutableList.of(RegistryHandler.LEAD_RAW.get(),RegistryHandler.LEAD_ORE.get(),RegistryHandler.LEAD_GRIMSTONE_ORE.get()),RegistryHandler.LEAD_INGOT.get(),1F,200,"lead_ingot"); |
| 107 | + oreBlasting(pFinishedRecipeConsumer, ImmutableList.of(RegistryHandler.LEAD_RAW.get(),RegistryHandler.LEAD_ORE.get(),RegistryHandler.LEAD_GRIMSTONE_ORE.get()),RegistryHandler.LEAD_INGOT.get(),1F,100,"lead_ingot"); |
| 108 | + oreSmelting(pFinishedRecipeConsumer, ImmutableList.of(RegistryHandler.SILVER_RAW.get(),RegistryHandler.SILVER_ORE.get(),RegistryHandler.SILVER_GRIMSTONE_ORE.get()),RegistryHandler.SILVER_INGOT.get(),1F,200,"silver_ingot"); |
| 109 | + oreBlasting(pFinishedRecipeConsumer, ImmutableList.of(RegistryHandler.SILVER_RAW.get(),RegistryHandler.SILVER_ORE.get(),RegistryHandler.SILVER_GRIMSTONE_ORE.get()),RegistryHandler.SILVER_INGOT.get(),1F,100,"silver_ingot"); |
| 110 | + |
| 111 | + |
| 112 | + } |
| 113 | + }); |
| 114 | + |
| 115 | + } |
| 116 | + } |
| 117 | + |
| 118 | + public static class ModBlockLoot extends BlockLoot { |
| 119 | + @Override |
| 120 | + protected void addTables() { |
| 121 | + this.add(RegistryHandler.LEAD_GRIMSTONE_ORE.get(), (i)->{ |
| 122 | + return createOreDrop(i, RegistryHandler.LEAD_RAW.get()); |
| 123 | + }); |
| 124 | + this.add(RegistryHandler.SILVER_GRIMSTONE_ORE.get(), (i)->{ |
| 125 | + return createOreDrop(i, RegistryHandler.SILVER_RAW.get()); |
| 126 | + }); |
| 127 | + this.add(RegistryHandler.LEAD_ORE.get(), (i)->{ |
| 128 | + return createOreDrop(i, RegistryHandler.LEAD_RAW.get()); |
| 129 | + }); |
| 130 | + this.add(RegistryHandler.SILVER_ORE.get(), (i)->{ |
| 131 | + return createOreDrop(i, RegistryHandler.SILVER_RAW.get()); |
| 132 | + }); |
| 133 | + this.dropSelf(RegistryHandler.GLANCE.get()); |
| 134 | + this.dropSelf(RegistryHandler.GLANCE_SPOTTED.get()); |
| 135 | + this.dropSelf(RegistryHandler.LEAD_RAW_BLOCK.get()); |
| 136 | + this.dropSelf(RegistryHandler.SILVER_RAW_BLOCK.get()); |
| 137 | + } |
| 138 | + |
| 139 | + @Override |
| 140 | + protected Iterable<Block> getKnownBlocks() { |
| 141 | + return List.of(RegistryHandler.GLANCE.get(),RegistryHandler.GLANCE_SPOTTED.get(),RegistryHandler.LEAD_GRIMSTONE_ORE.get(),RegistryHandler.SILVER_GRIMSTONE_ORE.get(), |
| 142 | + RegistryHandler.LEAD_RAW_BLOCK.get(),RegistryHandler.SILVER_RAW_BLOCK.get(),RegistryHandler.LEAD_ORE.get(),RegistryHandler.SILVER_ORE.get()); |
| 143 | + } |
| 144 | + } |
| 145 | + |
| 146 | + public static class ModRecipeProvider extends RecipeProvider { |
| 147 | + |
| 148 | + public ModRecipeProvider(DataGenerator pGenerator) { |
| 149 | + super(pGenerator); |
| 150 | + } |
| 151 | + |
| 152 | + public static void oreSmelting(Consumer<FinishedRecipe> pFinishedRecipeConsumer, List<ItemLike> pIngredients, ItemLike pResult, float pExperience, int pCookingTime, String pRecipeName) { |
| 153 | + oreCooking(pFinishedRecipeConsumer, RecipeSerializer.SMELTING_RECIPE, pIngredients, pResult, pExperience, pCookingTime, pRecipeName, "_from_smelting"); |
| 154 | + } |
| 155 | + |
| 156 | + public static void oreBlasting(Consumer<FinishedRecipe> pFinishedRecipeConsumer, List<ItemLike> pIngredients, ItemLike pResult, float pExperience, int pCookingTime, String pRecipeName) { |
| 157 | + oreCooking(pFinishedRecipeConsumer, RecipeSerializer.BLASTING_RECIPE, pIngredients, pResult, pExperience, pCookingTime, pRecipeName, "_from_blasting"); |
| 158 | + } |
| 159 | + |
| 160 | + private static void oreCooking(Consumer<FinishedRecipe> pFinishedRecipeConsumer, SimpleCookingSerializer<?> pCookingSerializer, List<ItemLike> pIngredients, ItemLike pResult, float pExperience, int pCookingTime, String pGroup, String pRecipeName) { |
| 161 | + for(ItemLike itemlike : pIngredients) { |
| 162 | + SimpleCookingRecipeBuilder.cooking(Ingredient.of(itemlike), pResult, pExperience, pCookingTime, pCookingSerializer).group(pGroup).unlockedBy(getHasName(itemlike), has(itemlike)).save(pFinishedRecipeConsumer, getItemName(pResult) + pRecipeName + "_" + getItemName(itemlike)); |
| 163 | + } |
| 164 | + |
| 165 | + } |
| 166 | + |
| 167 | + public static void nineBlockStorageRecipes(Consumer<FinishedRecipe> pFinishedRecipeConsumer, ItemLike pUnpacked, ItemLike pPacked) { |
| 168 | + nineBlockStorageRecipes(pFinishedRecipeConsumer, pUnpacked, pPacked, getSimpleRecipeName(pPacked), (String)null, getSimpleRecipeName(pUnpacked), (String)null); |
| 169 | + } |
| 170 | + |
| 171 | + public static void nineBlockStorageRecipes(Consumer<FinishedRecipe> pFinishedRecipeConsumer, ItemLike pUnpacked, ItemLike pPacked, String pPackingRecipeName, @Nullable String pPackingRecipeGroup, String pUnpackingRecipeName, @Nullable String pUnpackingRecipeGroup) { |
| 172 | + ShapelessRecipeBuilder.shapeless(pUnpacked, 9).requires(pPacked).group(pUnpackingRecipeGroup).unlockedBy(getHasName(pPacked), has(pPacked)).save(pFinishedRecipeConsumer, new ResourceLocation(pUnpackingRecipeName)); |
| 173 | + ShapedRecipeBuilder.shaped(pPacked).define('#', pUnpacked).pattern("###").pattern("###").pattern("###").group(pPackingRecipeGroup).unlockedBy(getHasName(pUnpacked), has(pUnpacked)).save(pFinishedRecipeConsumer, new ResourceLocation(pPackingRecipeName)); |
| 174 | + } |
| 175 | + |
| 176 | + public static String getHasName(ItemLike pItemLike) { |
| 177 | + return "has_" + getItemName(pItemLike); |
| 178 | + } |
| 179 | + |
| 180 | + public static String getItemName(ItemLike pItemLike) { |
| 181 | + return Registry.ITEM.getKey(pItemLike.asItem()).getPath(); |
| 182 | + } |
| 183 | + |
| 184 | + public static String getSimpleRecipeName(ItemLike pItemLike) { |
| 185 | + return getItemName(pItemLike); |
| 186 | + } |
| 187 | + |
| 188 | + } |
| 189 | + |
| 190 | +} |
0 commit comments