mirror of
https://github.com/TeamMidnightDust/ThisRocks.git
synced 2025-12-17 19:35:10 +01:00
Add Datagen for Loot Tables and Recipes
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
package eu.midnightdust.motschen.rocks;
|
||||
|
||||
import eu.midnightdust.motschen.rocks.datagen.LootTables;
|
||||
import eu.midnightdust.motschen.rocks.datagen.Recipes;
|
||||
import eu.midnightdust.motschen.rocks.datagen.Tags;
|
||||
import eu.midnightdust.motschen.rocks.world.configured_feature.MiscFeatures;
|
||||
import eu.midnightdust.motschen.rocks.world.configured_feature.NetherFeatures;
|
||||
import eu.midnightdust.motschen.rocks.world.configured_feature.RockFeatures;
|
||||
@@ -19,6 +22,9 @@ public class RocksDataGen implements DataGeneratorEntrypoint {
|
||||
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
|
||||
FabricDataGenerator.Pack pack = fabricDataGenerator.createPack();
|
||||
pack.addProvider(WorldGenData::new);
|
||||
pack.addProvider(LootTables.BlockLootTables::new);
|
||||
pack.addProvider(Tags.Blocks::new);
|
||||
pack.addProvider(Recipes::new);
|
||||
System.out.println("out");
|
||||
}
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package eu.midnightdust.motschen.rocks.datagen;
|
||||
|
||||
import eu.midnightdust.motschen.rocks.RocksMain;
|
||||
import eu.midnightdust.motschen.rocks.util.RockType;
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.enchantment.Enchantment;
|
||||
import net.minecraft.enchantment.Enchantments;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.loot.LootPool;
|
||||
import net.minecraft.loot.LootTable;
|
||||
import net.minecraft.loot.condition.TableBonusLootCondition;
|
||||
import net.minecraft.loot.entry.ItemEntry;
|
||||
import net.minecraft.loot.function.CopyStateLootFunction;
|
||||
import net.minecraft.loot.provider.number.ConstantLootNumberProvider;
|
||||
import net.minecraft.registry.RegistryKeys;
|
||||
import net.minecraft.registry.RegistryWrapper;
|
||||
import net.minecraft.state.property.Property;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class LootTables {
|
||||
public static class BlockLootTables extends FabricBlockLootTableProvider {
|
||||
public BlockLootTables(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
|
||||
super(dataOutput, registryLookup);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate() {
|
||||
RocksMain.rocksByType.forEach((rockType, rock) -> addSilkTouchDrop(rock, rockType != RockType.GRAVEL ? RocksMain.splittersByType.get(rockType) : Items.FLINT));
|
||||
RocksMain.sticksByType.forEach((stickType, stick) -> addSilkTouchDrop(stick, Items.STICK));
|
||||
addSilkTouchDrop(RocksMain.Pinecone, Items.SPRUCE_SAPLING);
|
||||
addSilkTouchOrRareDrop(RocksMain.Seashell, Items.NAUTILUS_SHELL, 0.02f, 0.022222223f, 0.025f, 0.033333335f, 0.1f);
|
||||
addCopyStateDrop(RocksMain.Starfish, RocksMain.STARFISH_VARIATION);
|
||||
}
|
||||
|
||||
public void addCopyStateDrop(Block block, Property<?>... properties) {
|
||||
var lootFunction = CopyStateLootFunction.builder(block);
|
||||
Arrays.stream(properties).forEach(lootFunction::addProperty);
|
||||
|
||||
addDrop(block, LootTable.builder().pool(this.addSurvivesExplosionCondition(block,
|
||||
LootPool.builder().rolls(ConstantLootNumberProvider.create(1.0F)).with(ItemEntry.builder(block)
|
||||
.apply(lootFunction)))));
|
||||
}
|
||||
public void addSilkTouchDrop(Block block, Item alternative) {
|
||||
addDrop(block, this.dropsWithSilkTouch(block, ItemEntry.builder(alternative)));
|
||||
}
|
||||
public void addSilkTouchOrRareDrop(Block block, Item alternative, float... chances) {
|
||||
RegistryWrapper.Impl<Enchantment> impl = this.registryLookup.getWrapperOrThrow(RegistryKeys.ENCHANTMENT);
|
||||
addDrop(block, this.dropsWithSilkTouch(block, ItemEntry.builder(alternative).conditionally(TableBonusLootCondition.builder(impl.getOrThrow(Enchantments.FORTUNE), chances))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package eu.midnightdust.motschen.rocks.datagen;
|
||||
|
||||
import eu.midnightdust.motschen.rocks.RocksMain;
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||
import net.minecraft.recipe.book.RecipeCategory;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.RegistryWrapper;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class Recipes extends FabricRecipeProvider {
|
||||
public Recipes(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
|
||||
super(output, registriesFuture);
|
||||
}
|
||||
@Override
|
||||
public void generate(RecipeExporter exporter) {
|
||||
generateCrafting(exporter);
|
||||
}
|
||||
|
||||
private void generateCrafting(RecipeExporter exporter) {
|
||||
RocksMain.splittersByType.forEach(((rockType, splitter) -> {
|
||||
|
||||
ShapelessRecipeJsonBuilder.create(RecipeCategory.BUILDING_BLOCKS, Registries.BLOCK.get(Identifier.ofVanilla(rockType.name().toLowerCase())))
|
||||
.input(splitter, 4)
|
||||
.criterion(FabricRecipeProvider.hasItem(splitter), FabricRecipeProvider.conditionsFromItem(splitter))
|
||||
.offerTo(exporter, rockType.name().toLowerCase()+"_from_splitter");
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package eu.midnightdust.motschen.rocks.datagen;
|
||||
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
|
||||
import net.minecraft.registry.RegistryWrapper;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class Tags {
|
||||
public static class Blocks extends FabricTagProvider.BlockTagProvider {
|
||||
// private static final TagKey<Block> PICKAXE_MINEABLE = TagKey.of(RegistryKeys.BLOCK, Identifier.ofVanilla("mineable/pickaxe"));
|
||||
// private static final TagKey<Block> AXE_MINEABLE = TagKey.of(RegistryKeys.BLOCK, Identifier.ofVanilla("mineable/axe"));
|
||||
// private static final TagKey<Block> NEEDS_STONE_TOOL = TagKey.of(RegistryKeys.BLOCK, Identifier.ofVanilla("needs_stone_tool"));
|
||||
|
||||
public Blocks(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
|
||||
super(output, registriesFuture);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure(RegistryWrapper.WrapperLookup arg) {
|
||||
// List<Block> pickaxeBlocks = new ArrayList<>(DecorativeMain.BLOCKS);
|
||||
// pickaxeBlocks.removeAll(LogsWithAxes.TYPES);
|
||||
// getOrCreateTagBuilder(PICKAXE_MINEABLE).setReplace(false)
|
||||
// .add(pickaxeBlocks.toArray(new Block[0]));
|
||||
// getOrCreateTagBuilder(AXE_MINEABLE).setReplace(false)
|
||||
// .add(LogsWithAxes.TYPES.toArray(new Block[0]));
|
||||
// getOrCreateTagBuilder(NEEDS_STONE_TOOL).setReplace(false)
|
||||
// .add(DecorativeMain.RockyAsphalt);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user