From 5c87e4a0eb1b3f6223e18d7e89bda6e8fccfb2dd Mon Sep 17 00:00:00 2001 From: Micle Date: Tue, 9 Jun 2026 23:45:42 +0100 Subject: [PATCH] Implemented block loot table. --- .../loot_tables/blocks/wildflowers.json | 92 +++++++++++++++++++ .../data/DataGenerators.java | 3 + .../data/loot/ModBlockLootTableProvider.java | 53 +++++++++++ .../data/server/ModLootTableProvider.java | 17 ++++ 4 files changed, 165 insertions(+) create mode 100644 src/generated/resources/data/wildflowers_backport/loot_tables/blocks/wildflowers.json create mode 100644 src/main/java/dev/micle/wildflowers_backport/data/loot/ModBlockLootTableProvider.java create mode 100644 src/main/java/dev/micle/wildflowers_backport/data/server/ModLootTableProvider.java diff --git a/src/generated/resources/data/wildflowers_backport/loot_tables/blocks/wildflowers.json b/src/generated/resources/data/wildflowers_backport/loot_tables/blocks/wildflowers.json new file mode 100644 index 0000000..61d0e34 --- /dev/null +++ b/src/generated/resources/data/wildflowers_backport/loot_tables/blocks/wildflowers.json @@ -0,0 +1,92 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "wildflowers_backport:wildflowers", + "condition": "minecraft:block_state_property", + "properties": { + "flower_amount": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "wildflowers_backport:wildflowers" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "wildflowers_backport:wildflowers", + "condition": "minecraft:block_state_property", + "properties": { + "flower_amount": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "wildflowers_backport:wildflowers" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "wildflowers_backport:wildflowers", + "condition": "minecraft:block_state_property", + "properties": { + "flower_amount": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "wildflowers_backport:wildflowers" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "wildflowers_backport:wildflowers", + "condition": "minecraft:block_state_property", + "properties": { + "flower_amount": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "wildflowers_backport:wildflowers" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "wildflowers_backport:blocks/wildflowers" +} \ No newline at end of file diff --git a/src/main/java/dev/micle/wildflowers_backport/data/DataGenerators.java b/src/main/java/dev/micle/wildflowers_backport/data/DataGenerators.java index 2dd1d3a..705e26c 100644 --- a/src/main/java/dev/micle/wildflowers_backport/data/DataGenerators.java +++ b/src/main/java/dev/micle/wildflowers_backport/data/DataGenerators.java @@ -3,6 +3,7 @@ package dev.micle.wildflowers_backport.data; import dev.micle.wildflowers_backport.WildflowersBackport; import dev.micle.wildflowers_backport.data.client.ModBlockStateProvider; import dev.micle.wildflowers_backport.data.client.ModItemModelProvider; +import dev.micle.wildflowers_backport.data.server.ModLootTableProvider; import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; import net.minecraftforge.common.data.ExistingFileHelper; @@ -22,5 +23,7 @@ public class DataGenerators { generator.addProvider(event.includeClient(), new ModBlockStateProvider(generator, existingFileHelper)); generator.addProvider(event.includeClient(), new ModItemModelProvider(generator, existingFileHelper)); + + generator.addProvider(event.includeServer(), new ModLootTableProvider(generator)); } } diff --git a/src/main/java/dev/micle/wildflowers_backport/data/loot/ModBlockLootTableProvider.java b/src/main/java/dev/micle/wildflowers_backport/data/loot/ModBlockLootTableProvider.java new file mode 100644 index 0000000..f908c76 --- /dev/null +++ b/src/main/java/dev/micle/wildflowers_backport/data/loot/ModBlockLootTableProvider.java @@ -0,0 +1,53 @@ +package dev.micle.wildflowers_backport.data.loot; + +import dev.micle.wildflowers_backport.block.FlowerBedBlock; +import dev.micle.wildflowers_backport.block.ModBlocks; +import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class ModBlockLootTableProvider extends BlockLootSubProvider { + public ModBlockLootTableProvider() { + super(Set.of(), FeatureFlags.REGISTRY.allFlags()); + } + + @Override + protected void generate() { + this.add(ModBlocks.WILDFLOWERS.get(), this::wildflowersLootTable); + } + + private LootTable.Builder wildflowersLootTable(Block block) { + LootPool.Builder pool = LootPool.lootPool(); + + for (int amount = FlowerBedBlock.MIN_SEGMENT; amount <= FlowerBedBlock.MAX_SEGMENT; amount++) { + pool.add( + LootItem.lootTableItem(block) + .when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(block) + .setProperties( + StatePropertiesPredicate.Builder.properties() + .hasProperty(FlowerBedBlock.AMOUNT, amount) + ) + ) + .apply(SetItemCountFunction.setCount(ConstantValue.exactly(amount))) + ); + } + + return LootTable.lootTable().withPool(pool); + } + + @Override + protected @NotNull Iterable getKnownBlocks() { + return ModBlocks.BLOCKS.getEntries().stream().map(RegistryObject::get)::iterator; + } +} diff --git a/src/main/java/dev/micle/wildflowers_backport/data/server/ModLootTableProvider.java b/src/main/java/dev/micle/wildflowers_backport/data/server/ModLootTableProvider.java new file mode 100644 index 0000000..2722715 --- /dev/null +++ b/src/main/java/dev/micle/wildflowers_backport/data/server/ModLootTableProvider.java @@ -0,0 +1,17 @@ +package dev.micle.wildflowers_backport.data.server; + +import dev.micle.wildflowers_backport.data.loot.ModBlockLootTableProvider; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; +import java.util.Set; + +public class ModLootTableProvider extends LootTableProvider { + public ModLootTableProvider(DataGenerator generator) { + super(generator.getPackOutput(), Set.of(), List.of( + new LootTableProvider.SubProviderEntry(ModBlockLootTableProvider::new, LootContextParamSets.BLOCK) + )); + } +}