Fix some bugs with basic loot appender
This commit is contained in:
parent
8091abe830
commit
a6d0957a5f
@ -1,23 +1,20 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.loot
|
||||
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.valueproviders.UniformInt
|
||||
import net.minecraft.world.entity.EntityType
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Rarity
|
||||
import net.minecraft.world.level.storage.loot.BuiltInLootTables
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemKilledByPlayerCondition
|
||||
import net.minecraftforge.common.loot.LootTableIdCondition
|
||||
import ru.dbotthepony.mc.otm.data.ChanceWithPlaytimeCondition
|
||||
import ru.dbotthepony.mc.otm.data.HasExosuitCondition
|
||||
import ru.dbotthepony.mc.otm.data.IRandomizableItem
|
||||
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
||||
import ru.dbotthepony.mc.otm.data.KilledByRealPlayer
|
||||
import ru.dbotthepony.mc.otm.data.LootTableBasicAppender
|
||||
import ru.dbotthepony.mc.otm.data.BasicLootAppender
|
||||
import ru.dbotthepony.mc.otm.data.LootTableSeparatedAppender
|
||||
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
||||
import ru.dbotthepony.mc.otm.item.ProceduralExoSuitSlotUpgradeItem
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
fun LootTableIdCondition(location: String): LootItemCondition {
|
||||
@ -126,7 +123,7 @@ fun addLootModifiers(it: LootModifiers) {
|
||||
ItemStack(MItems.NUTRIENT_PASTE, 38) to 0.1,
|
||||
))
|
||||
|
||||
it.add("exosuit_probe_enderman_drop", LootTableBasicAppender(
|
||||
it.add("exosuit_probe_enderman_drop", BasicLootAppender(
|
||||
arrayOf(
|
||||
LootTableIdCondition(EntityType.ENDERMAN.defaultLootTable),
|
||||
HasExosuitCondition.INVERTED,
|
||||
@ -141,18 +138,16 @@ fun addLootModifiers(it: LootModifiers) {
|
||||
ItemStack(MItems.EXOSUIT_PROBE)
|
||||
).invert().build()
|
||||
),
|
||||
listOf(
|
||||
ItemStack(MItems.EXOSUIT_PROBE)
|
||||
)
|
||||
ItemStack(MItems.EXOSUIT_PROBE)
|
||||
))
|
||||
|
||||
it.add("wither_exosuit_upgrades", LootTableSeparatedAppender(
|
||||
it.add("wither_exosuit_upgrades", BasicLootAppender(
|
||||
arrayOf(LootTableIdCondition(EntityType.WITHER.defaultLootTable)),
|
||||
ItemStack(MItems.ExosuitUpgrades.INVENTORY_UPGRADE_WITHER, 1) to 1.0,
|
||||
ItemStack(MItems.ExosuitUpgrades.INVENTORY_UPGRADE_WITHER),
|
||||
))
|
||||
|
||||
it.add("ender_dragon_exosuit_upgrades", LootTableSeparatedAppender(
|
||||
it.add("ender_dragon_exosuit_upgrades", BasicLootAppender(
|
||||
arrayOf(LootTableIdCondition(EntityType.ENDER_DRAGON.defaultLootTable)),
|
||||
ItemStack(MItems.ExosuitUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, 1) to 1.0,
|
||||
ItemStack(MItems.ExosuitUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON),
|
||||
))
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.data
|
||||
|
||||
import com.google.common.collect.ImmutableList
|
||||
import com.mojang.serialization.Codec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList
|
||||
@ -8,13 +9,24 @@ import net.minecraft.world.level.storage.loot.LootContext
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||
import net.minecraftforge.common.loot.IGlobalLootModifier
|
||||
import net.minecraftforge.common.loot.LootModifier
|
||||
import ru.dbotthepony.mc.otm.core.ImmutableList
|
||||
import java.util.Arrays
|
||||
import java.util.stream.Stream
|
||||
|
||||
class LootTableBasicAppender(
|
||||
class BasicLootAppender(
|
||||
conditions: Array<out LootItemCondition>,
|
||||
items: List<ItemStack>
|
||||
items: Stream<ItemStack>
|
||||
) : LootModifier(conditions) {
|
||||
private val items = ImmutableList(items.size) { items[it].copy() }
|
||||
constructor(
|
||||
conditions: Array<out LootItemCondition>,
|
||||
items: Collection<ItemStack>
|
||||
) : this(conditions, items.stream())
|
||||
|
||||
constructor(
|
||||
conditions: Array<out LootItemCondition>,
|
||||
vararg items: ItemStack
|
||||
) : this(conditions, Arrays.stream(items))
|
||||
|
||||
private val items = items.map { it.copy() }.collect(ImmutableList.toImmutableList())
|
||||
|
||||
override fun codec(): Codec<out IGlobalLootModifier> {
|
||||
return CODEC
|
||||
@ -24,14 +36,18 @@ class LootTableBasicAppender(
|
||||
generatedLoot: ObjectArrayList<ItemStack>,
|
||||
context: LootContext
|
||||
): ObjectArrayList<ItemStack> {
|
||||
generatedLoot.addAll(items)
|
||||
for (item in items)
|
||||
generatedLoot.add(item.copy())
|
||||
|
||||
return generatedLoot
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: Codec<LootTableBasicAppender> by lazy {
|
||||
val CODEC: Codec<BasicLootAppender> by lazy {
|
||||
RecordCodecBuilder.create {
|
||||
codecStart(it).and(ItemStackCodec.LIST.fieldOf("items").forGetter { it.items }).apply(it, ::LootTableBasicAppender)
|
||||
codecStart(it)
|
||||
.and(ItemStackCodec.LIST.fieldOf("items").forGetter(BasicLootAppender::items))
|
||||
.apply(it, ::BasicLootAppender)
|
||||
}
|
||||
}
|
||||
}
|
@ -43,7 +43,7 @@ private val LootPoolCodec: Codec<Array<LootPool>> by lazy {
|
||||
})
|
||||
}
|
||||
|
||||
class LootTableAppender(conditions: Array<out LootItemCondition>, private vararg val pools: LootPool) : LootModifier(conditions) {
|
||||
class LootPoolAppender(conditions: Array<out LootItemCondition>, private vararg val pools: LootPool) : LootModifier(conditions) {
|
||||
override fun doApply(generatedLoot: ObjectArrayList<ItemStack>, context: LootContext): ObjectArrayList<ItemStack> {
|
||||
pools.forEach { it.addRandomItems(generatedLoot::add, context) }
|
||||
return generatedLoot
|
||||
@ -54,11 +54,11 @@ class LootTableAppender(conditions: Array<out LootItemCondition>, private vararg
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: Codec<LootTableAppender> by lazy {
|
||||
val CODEC: Codec<LootPoolAppender> by lazy {
|
||||
RecordCodecBuilder.create {
|
||||
codecStart(it).and(
|
||||
LootPoolCodec.fieldOf("pools").forGetter { appender -> appender.pools as Array<LootPool> }
|
||||
).apply(it, ::LootTableAppender)
|
||||
).apply(it, ::LootPoolAppender)
|
||||
}
|
||||
}
|
||||
}
|
@ -4,8 +4,8 @@ import net.minecraftforge.eventbus.api.IEventBus
|
||||
import net.minecraftforge.registries.DeferredRegister
|
||||
import net.minecraftforge.registries.ForgeRegistries
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.data.LootTableAppender
|
||||
import ru.dbotthepony.mc.otm.data.LootTableBasicAppender
|
||||
import ru.dbotthepony.mc.otm.data.LootPoolAppender
|
||||
import ru.dbotthepony.mc.otm.data.BasicLootAppender
|
||||
import ru.dbotthepony.mc.otm.data.LootTableSeparatedAppender
|
||||
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
||||
|
||||
@ -13,9 +13,9 @@ object LootModifiers {
|
||||
private val registry = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, OverdriveThatMatters.MOD_ID)
|
||||
|
||||
init {
|
||||
registry.register("loot_appender") { LootTableAppender.CODEC }
|
||||
registry.register("loot_appender") { LootPoolAppender.CODEC }
|
||||
registry.register("loot_appender_separated") { LootTableSeparatedAppender.CODEC }
|
||||
registry.register("loot_appender_basic") { LootTableBasicAppender.CODEC }
|
||||
registry.register("loot_appender_basic") { BasicLootAppender.CODEC }
|
||||
registry.register("randomizable_item_loot_appender") { RandomizableItemLootAppender.Companion }
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user