Moving to source sets

This commit is contained in:
Sebastian Hartte
2020-07-01 23:36:51 +02:00
parent f2e3d81fd7
commit 2642ced86b
2924 changed files with 794 additions and 796 deletions
@@ -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";
}
}