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
|
package ru.dbotthepony.mc.otm.datagen.loot
|
||||||
|
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
import net.minecraft.util.valueproviders.UniformInt
|
|
||||||
import net.minecraft.world.entity.EntityType
|
import net.minecraft.world.entity.EntityType
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.Rarity
|
import net.minecraft.world.item.Rarity
|
||||||
import net.minecraft.world.level.storage.loot.BuiltInLootTables
|
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.LootItemCondition
|
||||||
import net.minecraft.world.level.storage.loot.predicates.LootItemKilledByPlayerCondition
|
|
||||||
import net.minecraftforge.common.loot.LootTableIdCondition
|
import net.minecraftforge.common.loot.LootTableIdCondition
|
||||||
import ru.dbotthepony.mc.otm.data.ChanceWithPlaytimeCondition
|
import ru.dbotthepony.mc.otm.data.ChanceWithPlaytimeCondition
|
||||||
import ru.dbotthepony.mc.otm.data.HasExosuitCondition
|
import ru.dbotthepony.mc.otm.data.HasExosuitCondition
|
||||||
import ru.dbotthepony.mc.otm.data.IRandomizableItem
|
import ru.dbotthepony.mc.otm.data.IRandomizableItem
|
||||||
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
||||||
import ru.dbotthepony.mc.otm.data.KilledByRealPlayer
|
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.LootTableSeparatedAppender
|
||||||
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
||||||
import ru.dbotthepony.mc.otm.item.ProceduralExoSuitSlotUpgradeItem
|
|
||||||
import ru.dbotthepony.mc.otm.registry.MItems
|
import ru.dbotthepony.mc.otm.registry.MItems
|
||||||
|
|
||||||
fun LootTableIdCondition(location: String): LootItemCondition {
|
fun LootTableIdCondition(location: String): LootItemCondition {
|
||||||
@ -126,7 +123,7 @@ fun addLootModifiers(it: LootModifiers) {
|
|||||||
ItemStack(MItems.NUTRIENT_PASTE, 38) to 0.1,
|
ItemStack(MItems.NUTRIENT_PASTE, 38) to 0.1,
|
||||||
))
|
))
|
||||||
|
|
||||||
it.add("exosuit_probe_enderman_drop", LootTableBasicAppender(
|
it.add("exosuit_probe_enderman_drop", BasicLootAppender(
|
||||||
arrayOf(
|
arrayOf(
|
||||||
LootTableIdCondition(EntityType.ENDERMAN.defaultLootTable),
|
LootTableIdCondition(EntityType.ENDERMAN.defaultLootTable),
|
||||||
HasExosuitCondition.INVERTED,
|
HasExosuitCondition.INVERTED,
|
||||||
@ -141,18 +138,16 @@ fun addLootModifiers(it: LootModifiers) {
|
|||||||
ItemStack(MItems.EXOSUIT_PROBE)
|
ItemStack(MItems.EXOSUIT_PROBE)
|
||||||
).invert().build()
|
).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)),
|
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)),
|
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
|
package ru.dbotthepony.mc.otm.data
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList
|
||||||
import com.mojang.serialization.Codec
|
import com.mojang.serialization.Codec
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList
|
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.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||||
import net.minecraftforge.common.loot.IGlobalLootModifier
|
import net.minecraftforge.common.loot.IGlobalLootModifier
|
||||||
import net.minecraftforge.common.loot.LootModifier
|
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>,
|
conditions: Array<out LootItemCondition>,
|
||||||
items: List<ItemStack>
|
items: Stream<ItemStack>
|
||||||
) : LootModifier(conditions) {
|
) : 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> {
|
override fun codec(): Codec<out IGlobalLootModifier> {
|
||||||
return CODEC
|
return CODEC
|
||||||
@ -24,14 +36,18 @@ class LootTableBasicAppender(
|
|||||||
generatedLoot: ObjectArrayList<ItemStack>,
|
generatedLoot: ObjectArrayList<ItemStack>,
|
||||||
context: LootContext
|
context: LootContext
|
||||||
): ObjectArrayList<ItemStack> {
|
): ObjectArrayList<ItemStack> {
|
||||||
generatedLoot.addAll(items)
|
for (item in items)
|
||||||
|
generatedLoot.add(item.copy())
|
||||||
|
|
||||||
return generatedLoot
|
return generatedLoot
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val CODEC: Codec<LootTableBasicAppender> by lazy {
|
val CODEC: Codec<BasicLootAppender> by lazy {
|
||||||
RecordCodecBuilder.create {
|
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> {
|
override fun doApply(generatedLoot: ObjectArrayList<ItemStack>, context: LootContext): ObjectArrayList<ItemStack> {
|
||||||
pools.forEach { it.addRandomItems(generatedLoot::add, context) }
|
pools.forEach { it.addRandomItems(generatedLoot::add, context) }
|
||||||
return generatedLoot
|
return generatedLoot
|
||||||
@ -54,11 +54,11 @@ class LootTableAppender(conditions: Array<out LootItemCondition>, private vararg
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val CODEC: Codec<LootTableAppender> by lazy {
|
val CODEC: Codec<LootPoolAppender> by lazy {
|
||||||
RecordCodecBuilder.create {
|
RecordCodecBuilder.create {
|
||||||
codecStart(it).and(
|
codecStart(it).and(
|
||||||
LootPoolCodec.fieldOf("pools").forGetter { appender -> appender.pools as Array<LootPool> }
|
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.DeferredRegister
|
||||||
import net.minecraftforge.registries.ForgeRegistries
|
import net.minecraftforge.registries.ForgeRegistries
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||||
import ru.dbotthepony.mc.otm.data.LootTableAppender
|
import ru.dbotthepony.mc.otm.data.LootPoolAppender
|
||||||
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.LootTableSeparatedAppender
|
||||||
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
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)
|
private val registry = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, OverdriveThatMatters.MOD_ID)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
registry.register("loot_appender") { LootTableAppender.CODEC }
|
registry.register("loot_appender") { LootPoolAppender.CODEC }
|
||||||
registry.register("loot_appender_separated") { LootTableSeparatedAppender.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 }
|
registry.register("randomizable_item_loot_appender") { RandomizableItemLootAppender.Companion }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user