Implemented block loot table.
This commit is contained in:
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<Block> getKnownBlocks() {
|
||||
return ModBlocks.BLOCKS.getEntries().stream().map(RegistryObject::get)::iterator;
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user