More loottables datagen api

This commit is contained in:
DBotThePony 2022-10-14 14:49:21 +07:00
parent 34cd04fb2d
commit cace26411a
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 13 additions and 5 deletions

View File

@ -4,7 +4,6 @@ import com.mojang.datafixers.util.Pair
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap
import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction
import it.unimi.dsi.fastutil.objects.ReferenceArraySet
import net.minecraft.advancements.critereon.StatePropertiesPredicate import net.minecraft.advancements.critereon.StatePropertiesPredicate
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraft.data.loot.LootTableProvider import net.minecraft.data.loot.LootTableProvider
@ -43,6 +42,15 @@ inline fun singleLootPool(f: (LootPool.Builder) -> Unit): LootTable.Builder {
} }
inline fun LootTable.Builder.lootPool(configurator: LootPool.Builder.() -> Unit): LootTable.Builder = withPool(LootPool.lootPool().also(configurator)) inline fun LootTable.Builder.lootPool(configurator: LootPool.Builder.() -> Unit): LootTable.Builder = withPool(LootPool.lootPool().also(configurator))
inline fun LootPool.Builder.item(item: ItemLike, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit) {
add(LootItem.lootTableItem(item).also(configurator))
}
fun LootPool.Builder.setRolls(count: Int): LootPool.Builder = setRolls(ConstantValue.exactly(count.toFloat()))
fun LootPool.Builder.setRolls(count: Float): LootPool.Builder = setRolls(ConstantValue.exactly(count))
fun LootPool.Builder.setRolls(min: Int, max: Int): LootPool.Builder = setRolls(UniformGenerator.between(min.toFloat(), max.toFloat()))
fun LootPool.Builder.setRolls(min: Float, max: Float): LootPool.Builder = setRolls(UniformGenerator.between(min, max))
fun <T : LootPoolSingletonContainer.Builder<*>> T.setCount(count: Int): T { fun <T : LootPoolSingletonContainer.Builder<*>> T.setCount(count: Int): T {
apply(SetItemCountFunction.setCount(ConstantValue.exactly(count.toFloat()))) apply(SetItemCountFunction.setCount(ConstantValue.exactly(count.toFloat())))

View File

@ -10,11 +10,11 @@ import ru.dbotthepony.mc.otm.registry.MItems
fun addChestLootTables(loot: LootTables) { fun addChestLootTables(loot: LootTables) {
loot.builder(LootContextParamSets.CHEST, modLocation("food_box")) { loot.builder(LootContextParamSets.CHEST, modLocation("food_box")) {
lootPool { lootPool {
add(LootItem.lootTableItem(Items.PACKED_ICE).setCount(minimal = 1, maximal = 3)) item(Items.PACKED_ICE) { setCount(minimal = 1, maximal = 3) }
add(LootItem.lootTableItem(MItems.NUTRIENT_PASTE).setCount(minimal = 1, maximal = 2)) item(MItems.NUTRIENT_PASTE) { setCount(minimal = 1, maximal = 2) }
add(LootItem.lootTableItem(Items.SNOWBALL).setCount(minimal = 1, maximal = 5)) item(Items.SNOWBALL) { setCount(minimal = 1, maximal = 5) }
setRolls(ConstantValue.exactly(3f)) setRolls(3)
} }
} }
} }