Moving to source sets
This commit is contained in:
@@ -1,24 +0,0 @@
|
||||
package appeng.forge.data;
|
||||
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
||||
|
||||
import appeng.core.AppEng;
|
||||
import appeng.forge.data.providers.loot.BlockDropProvider;
|
||||
import appeng.forge.data.providers.recipes.SlabStairRecipes;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = AppEng.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class AE2DataGenerators {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onGatherData(GatherDataEvent dataEvent) {
|
||||
DataGenerator generator = dataEvent.getGenerator();
|
||||
if (dataEvent.includeServer()) {
|
||||
generator.addProvider(new BlockDropProvider(dataEvent));
|
||||
generator.addProvider(new SlabStairRecipes(generator));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package appeng.forge.data.providers;
|
||||
|
||||
import net.minecraft.data.IDataProvider;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.definitions.IBlocks;
|
||||
import appeng.api.definitions.IItems;
|
||||
import appeng.api.definitions.IMaterials;
|
||||
|
||||
public interface IAE2DataProvider extends IDataProvider {
|
||||
IBlocks BLOCKS = AEApi.instance().definitions().blocks();
|
||||
IItems ITEMS = AEApi.instance().definitions().items();
|
||||
IMaterials MATERIALS = AEApi.instance().definitions().materials();
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
package appeng.forge.data.providers.loot;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonElement;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.data.DirectoryCache;
|
||||
import net.minecraft.data.IDataProvider;
|
||||
import net.minecraft.data.loot.BlockLootTables;
|
||||
import net.minecraft.enchantment.Enchantments;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.world.storage.loot.ConstantRange;
|
||||
import net.minecraft.world.storage.loot.ItemLootEntry;
|
||||
import net.minecraft.world.storage.loot.LootEntry;
|
||||
import net.minecraft.world.storage.loot.LootParameterSets;
|
||||
import net.minecraft.world.storage.loot.LootPool;
|
||||
import net.minecraft.world.storage.loot.LootTable;
|
||||
import net.minecraft.world.storage.loot.LootTableManager;
|
||||
import net.minecraft.world.storage.loot.RandomValueRange;
|
||||
import net.minecraft.world.storage.loot.conditions.SurvivesExplosion;
|
||||
import net.minecraft.world.storage.loot.functions.ApplyBonus;
|
||||
import net.minecraft.world.storage.loot.functions.SetCount;
|
||||
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
import appeng.core.AppEng;
|
||||
import appeng.forge.data.providers.IAE2DataProvider;
|
||||
|
||||
public class BlockDropProvider extends BlockLootTables implements IAE2DataProvider {
|
||||
private Map<Block, Function<Block, LootTable.Builder>> overrides = ImmutableMap.<Block, Function<Block, LootTable.Builder>>builder()
|
||||
.put(BLOCKS.matrixFrame().block(), $ -> LootTable.builder())
|
||||
.put(BLOCKS.quartzOre().block(),
|
||||
b -> droppingWithSilkTouch(BLOCKS.quartzOre().block(),
|
||||
withExplosionDecay(BLOCKS.quartzOre().block(),
|
||||
ItemLootEntry.builder(MATERIALS.certusQuartzCrystal().item())
|
||||
.acceptFunction(SetCount.builder(RandomValueRange.of(1.0F, 2.0F)))
|
||||
.acceptFunction(ApplyBonus.uniformBonusCount(Enchantments.FORTUNE)))))
|
||||
.put(BLOCKS.quartzOreCharged().block(),
|
||||
b -> droppingWithSilkTouch(BLOCKS.quartzOreCharged().block(),
|
||||
withExplosionDecay(BLOCKS.quartzOreCharged().block(),
|
||||
ItemLootEntry.builder(MATERIALS.certusQuartzCrystalCharged().item())
|
||||
.acceptFunction(SetCount.builder(RandomValueRange.of(1.0F, 2.0F)))
|
||||
.acceptFunction(ApplyBonus.uniformBonusCount(Enchantments.FORTUNE)))))
|
||||
.build();
|
||||
|
||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
||||
|
||||
private final Path outputFolder;
|
||||
|
||||
public BlockDropProvider(GatherDataEvent dataEvent) {
|
||||
outputFolder = dataEvent.getGenerator().getOutputFolder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void act(@Nonnull DirectoryCache cache) throws IOException {
|
||||
for (Map.Entry<Identifier, Block> entry : ForgeRegistries.BLOCKS.getEntries()) {
|
||||
LootTable.Builder builder;
|
||||
if (entry.getKey().getNamespace().equals(AppEng.MOD_ID)) {
|
||||
builder = overrides.getOrDefault(entry.getValue(), this::defaultBuilder).apply(entry.getValue());
|
||||
|
||||
IDataProvider.save(GSON, cache, toJson(builder), getPath(outputFolder, entry.getKey()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private LootTable.Builder defaultBuilder(Block block) {
|
||||
LootEntry.Builder<?> entry = ItemLootEntry.builder(block);
|
||||
LootPool.Builder pool = LootPool.builder().name("main").rolls(ConstantRange.of(1)).addEntry(entry)
|
||||
.acceptCondition(SurvivesExplosion.builder());
|
||||
|
||||
return LootTable.builder().addLootPool(pool);
|
||||
}
|
||||
|
||||
private Path getPath(Path root, Identifier id) {
|
||||
return root.resolve("data/" + id.getNamespace() + "/loot_tables/blocks/" + id.getPath() + ".json");
|
||||
}
|
||||
|
||||
public JsonElement toJson(LootTable.Builder builder) {
|
||||
return LootTableManager.toJson(finishBuilding(builder));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public LootTable finishBuilding(LootTable.Builder builder) {
|
||||
return builder.setParameterSet(LootParameterSets.BLOCK).build();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getName() {
|
||||
return AppEng.MOD_NAME + " Block Drops";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
package appeng.forge.data.providers.recipes;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraft.data.IFinishedRecipe;
|
||||
import net.minecraft.data.RecipeProvider;
|
||||
import net.minecraft.data.ShapedRecipeBuilder;
|
||||
import net.minecraft.data.SingleItemRecipeBuilder;
|
||||
import net.minecraft.recipe.Ingredient;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraftforge.common.crafting.ConditionalRecipe;
|
||||
|
||||
import appeng.api.definitions.IBlockDefinition;
|
||||
import appeng.core.AppEng;
|
||||
import appeng.forge.data.providers.IAE2DataProvider;
|
||||
|
||||
public class SlabStairRecipes extends RecipeProvider implements IAE2DataProvider {
|
||||
|
||||
IBlockDefinition[][] blocks = { { BLOCKS.skyStoneBlock(), BLOCKS.skyStoneSlab(), BLOCKS.skyStoneStairs() },
|
||||
{ BLOCKS.smoothSkyStoneBlock(), BLOCKS.smoothSkyStoneSlab(), BLOCKS.smoothSkyStoneStairs() },
|
||||
{ BLOCKS.skyStoneBrick(), BLOCKS.skyStoneBrickSlab(), BLOCKS.skyStoneBrickStairs() },
|
||||
{ BLOCKS.skyStoneSmallBrick(), BLOCKS.skyStoneSmallBrickSlab(), BLOCKS.skyStoneSmallBrickStairs() },
|
||||
{ BLOCKS.fluixBlock(), BLOCKS.fluixSlab(), BLOCKS.fluixStairs() },
|
||||
{ BLOCKS.quartzBlock(), BLOCKS.quartzSlab(), BLOCKS.quartzStairs() },
|
||||
{ BLOCKS.chiseledQuartzBlock(), BLOCKS.chiseledQuartzSlab(), BLOCKS.chiseledQuartzStairs() },
|
||||
{ BLOCKS.quartzPillar(), BLOCKS.quartzPillarSlab(), BLOCKS.quartzPillarStairs() }, };
|
||||
|
||||
public SlabStairRecipes(DataGenerator generatorIn) {
|
||||
super(generatorIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerRecipes(@Nonnull Consumer<IFinishedRecipe> consumer) {
|
||||
for (IBlockDefinition[] block : blocks) {
|
||||
slabRecipe(consumer, block[0], block[1]);
|
||||
stairRecipe(consumer, block[0], block[2]);
|
||||
}
|
||||
}
|
||||
|
||||
private void slabRecipe(Consumer<IFinishedRecipe> consumer, IBlockDefinition block, IBlockDefinition slabs) {
|
||||
Block inputBlock = block.block();
|
||||
Block outputBlock = slabs.block();
|
||||
|
||||
ShapedRecipeBuilder.shapedRecipe(slabs.block(), 6).patternLine("###").key('#', inputBlock)
|
||||
.addCriterion(criterionName(block), hasItem(inputBlock))
|
||||
.build(consumer, new Identifier(AppEng.MOD_ID, "shaped/slabs/" + block.identifier()));
|
||||
|
||||
SingleItemRecipeBuilder.stonecuttingRecipe(Ingredient.fromItems(inputBlock), outputBlock, 2)
|
||||
.addCriterion(criterionName(block), hasItem(inputBlock))
|
||||
.build(consumer, new Identifier(AppEng.MOD_ID, "block_cutter/slabs/" + slabs.identifier()));
|
||||
}
|
||||
|
||||
private void stairRecipe(Consumer<IFinishedRecipe> consumer, IBlockDefinition block, IBlockDefinition stairs) {
|
||||
Block inputBlock = block.block();
|
||||
Block outputBlock = stairs.block();
|
||||
|
||||
ShapedRecipeBuilder.shapedRecipe(outputBlock, 4).patternLine("# ").patternLine("## ").patternLine("###")
|
||||
.key('#', inputBlock).addCriterion(criterionName(block), hasItem(inputBlock))
|
||||
.build(consumer, new Identifier(AppEng.MOD_ID, "shaped/stairs/" + block.identifier()));
|
||||
|
||||
SingleItemRecipeBuilder.stonecuttingRecipe(Ingredient.fromItems(inputBlock), outputBlock)
|
||||
.addCriterion(criterionName(block), hasItem(inputBlock))
|
||||
.build(consumer, new Identifier(AppEng.MOD_ID, "block_cutter/stairs/" + stairs.identifier()));
|
||||
|
||||
}
|
||||
|
||||
private String criterionName(IBlockDefinition block) {
|
||||
return String.format("has_%s", block.identifier());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return AppEng.MOD_NAME + " Slabs and Stairs";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user