diff --git a/.gitignore b/.gitignore index d5f737e..5f76d89 100644 --- a/.gitignore +++ b/.gitignore @@ -117,3 +117,6 @@ runs/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) !gradle-wrapper.jar + +# Fabric datagen output +**/generated/ diff --git a/src/client/java/com/smrising/firstmod/client/FirstmodDataGenerator.java b/src/client/java/com/smrising/firstmod/client/FirstmodDataGenerator.java index 72a6126..cdebd98 100644 --- a/src/client/java/com/smrising/firstmod/client/FirstmodDataGenerator.java +++ b/src/client/java/com/smrising/firstmod/client/FirstmodDataGenerator.java @@ -1,12 +1,72 @@ package com.smrising.firstmod.client; +import com.smrising.firstmod.Firstmod; +import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; +import net.minecraft.client.data.BlockStateModelGenerator; +import net.minecraft.client.data.ItemModelGenerator; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.RegistryWrapper; +import net.minecraft.registry.tag.BlockTags; +import net.minecraft.registry.tag.ItemTags; +import net.minecraft.registry.tag.TagKey; +import net.minecraft.util.Identifier; + +import java.util.concurrent.CompletableFuture; public class FirstmodDataGenerator implements DataGeneratorEntrypoint { @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); + pack.addProvider(ModBlockTagProvider::new); + pack.addProvider(ModLootTableProvider::new); + pack.addProvider(ModModelProvider::new); } + + private static class ModBlockTagProvider extends FabricTagProvider.BlockTagProvider { + public ModBlockTagProvider(FabricDataOutput output, CompletableFuture registriesFuture) { + super(output, registriesFuture); + } + + @Override + protected void configure(RegistryWrapper.WrapperLookup arg) { + getOrCreateTagBuilder(BlockTags.PICKAXE_MINEABLE) + .add(Firstmod.EXAMPLE_BLOCK); + } + } + + private static class ModLootTableProvider extends FabricBlockLootTableProvider { + public ModLootTableProvider(FabricDataOutput dataOutput, CompletableFuture registriesFuture) { + super(dataOutput, registriesFuture); + } + + @Override + public void generate() { + addDrop(Firstmod.EXAMPLE_BLOCK); + } + } + + private static class ModModelProvider extends FabricModelProvider { + public ModModelProvider(FabricDataOutput output) { + super(output); + } + + @Override + public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator) { + blockStateModelGenerator.registerSimpleCubeAll(Firstmod.EXAMPLE_BLOCK); + } + + @Override + public void generateItemModels(ItemModelGenerator itemModelGenerator) { + // Item model is automatically generated from block model + } + } + } diff --git a/src/main/java/com/smrising/firstmod/Firstmod.java b/src/main/java/com/smrising/firstmod/Firstmod.java index 36c5dd0..4943d20 100644 --- a/src/main/java/com/smrising/firstmod/Firstmod.java +++ b/src/main/java/com/smrising/firstmod/Firstmod.java @@ -1,9 +1,29 @@ package com.smrising.firstmod; import net.fabricmc.api.ModInitializer; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.item.Items; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.util.Identifier; + +import java.util.function.Function; public class Firstmod implements ModInitializer { + public static final Block EXAMPLE_BLOCK = register("example_block", Block::new, Block.Settings.create().strength(4.0f)); + + private static Block register(String path, Function factory, AbstractBlock.Settings settings) { + final Identifier identifier = Identifier.of("tutorial", path); + final RegistryKey registryKey = RegistryKey.of(RegistryKeys.BLOCK, identifier); + + final Block block = Blocks.register(registryKey, factory, settings); + Items.register(block); + return block; + } + @Override public void onInitialize() { }