feat: lost items

This commit is contained in:
xtex 2023-07-03 10:22:18 +08:00
parent b1f44ff2db
commit 88dcf52a57
Signed by: xtex
GPG Key ID: B918086ED8045B91
2 changed files with 28 additions and 0 deletions

View File

@ -0,0 +1,27 @@
package quaedam.projection.swarm.ai
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.OneShot
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.npc.InventoryCarrier
import net.minecraft.world.entity.schedule.Activity
import net.minecraft.world.level.block.Block
@Suppress("FunctionName")
fun <E> LostItem(chance: Int): OneShot<E>
where E : LivingEntity, E : InventoryCarrier = BehaviorBuilder.create { instance ->
instance.point(Trigger { level, entity: E, l: Long ->
if (entity.brain.isActive(Activity.REST)) return@Trigger false
if (level.random.nextInt(chance) != 0) return@Trigger false
val inventory = entity.inventory
val item = inventory.getItem(level.random.nextInt(inventory.containerSize))
if (!item.isEmpty) {
val count = level.random.nextInt(item.count)
item.shrink(count)
inventory.setChanged()
Block.popResource(level, entity.blockPosition(), item.copyWithCount(count))
}
return@Trigger true
})
}

View File

@ -101,6 +101,7 @@ object ProjectedPersonAI {
3 weight LookAtTargetSink(40, 70),
3 weight MoveToTargetSink(),
3 weight InteractWithDoor.create(),
3 weight LostItem(400),
10 weight GoToWantedItem.create(1.2f, false, 7),
)
)