feat: idle activities

This commit is contained in:
xtex 2023-07-30 16:09:16 +08:00
parent 0fceb397d1
commit 9aa47128c7
Signed by: xtex
GPG Key ID: B918086ED8045B91
3 changed files with 71 additions and 1 deletions

View File

@ -39,6 +39,7 @@ object Quaedam {
val memoryTypes = DeferredRegister.create(ID, Registries.MEMORY_MODULE_TYPE)!!
val sensors = DeferredRegister.create(ID, Registries.SENSOR_TYPE)!!
val soundEvents = DeferredRegister.create(ID, Registries.SOUND_EVENT)!!
val poiTypes = DeferredRegister.create(ID, Registries.POINT_OF_INTEREST_TYPE)!!
val projectionEffects by lazy { DeferredRegister.create(ID, ProjectionEffectType.registryKey)!! }
val creativeModeTab: RegistrySupplier<CreativeModeTab> = creativeModeTabs.register("quaedam") {
@ -72,6 +73,7 @@ object Quaedam {
memoryTypes.register()
sensors.register()
soundEvents.register()
poiTypes.register()
projectionEffects.register()
}

View File

@ -0,0 +1,58 @@
package quaedam.projection.swarm.ai
import net.minecraft.core.GlobalPos
import net.minecraft.world.entity.ai.behavior.AcquirePoi
import net.minecraft.world.entity.ai.behavior.StrollAroundPoi
import net.minecraft.world.entity.ai.behavior.StrollToPoi
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.ai.village.poi.PoiType
import net.minecraft.world.entity.ai.village.poi.PoiTypes
import net.minecraft.world.level.block.Blocks
import quaedam.Quaedam
import quaedam.projection.music.SmartInstrumentBlock
import java.util.*
object AmusementAI {
const val ID = "amusement"
val poiType = Quaedam.poiTypes.register(ID) {
PoiType(
setOf(
Blocks.NOTE_BLOCK,
SmartInstrumentBlock,
Blocks.HONEY_BLOCK,
Blocks.TARGET,
).flatMap { it.stateDefinition.possibleStates }.toSet(),
16, 10
)
}!!
val poiTypes by lazy {
setOf(
poiType.key,
PoiTypes.LIBRARIAN,
PoiTypes.MEETING,
)
}
val memory = Quaedam.memoryTypes.register(ID) {
MemoryModuleType(Optional.of(GlobalPos.CODEC))
}!!
fun createAcquirePoi() =
AcquirePoi.create({ it.`is` { key -> key in poiTypes } }, memory.get(), false, Optional.empty())
fun createStrollToPoi() =
StrollToPoi.create(memory.get(), 0.4f, 7, 15)
fun createStrollToPoiBaby() =
StrollToPoi.create(memory.get(), 0.7f, 5, 10)
fun createStrollAroundPoi() =
StrollAroundPoi.create(memory.get(), 0.4f, 10)
fun createStrollAroundPoiBaby() =
StrollAroundPoi.create(memory.get(), 0.55f, 8)
}

View File

@ -1,6 +1,7 @@
package quaedam.projection.swarm.ai
import com.google.common.collect.ImmutableList
import net.minecraft.core.Holder
import net.minecraft.core.registries.Registries
import net.minecraft.tags.TagKey
import net.minecraft.world.entity.LivingEntity
@ -10,6 +11,8 @@ import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.ai.memory.MemoryStatus
import net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities
import net.minecraft.world.entity.ai.sensing.SensorType
import net.minecraft.world.entity.ai.village.poi.PoiType
import net.minecraft.world.entity.ai.village.poi.PoiTypes
import net.minecraft.world.entity.monster.Monster
import net.minecraft.world.entity.schedule.Activity
import net.minecraft.world.entity.schedule.Schedule
@ -51,6 +54,7 @@ object ProjectedPersonAI {
init {
BedInChunkSensor
AmusementAI
NearestVisibleContainer
}
@ -129,6 +133,9 @@ object ProjectedPersonAI {
private fun initIdleActivity(brain: Brain<ProjectedPersonEntity>) {
brain.addActivity(
Activity.IDLE, ImmutableList.of(
5 weight AmusementAI.createStrollAroundPoi(),
7 weight AmusementAI.createStrollToPoi(),
9 weight AmusementAI.createAcquirePoi(),
10 weight createStrollBehavior(),
)
)
@ -137,7 +144,10 @@ object ProjectedPersonAI {
private fun initPlayActivity(brain: Brain<ProjectedPersonEntity>) {
brain.addActivity(
Activity.PLAY, ImmutableList.of(
7 weight GoToWantedItem.create(1.75f, true, 32),
3 weight GoToWantedItem.create(1.75f, true, 32),
5 weight AmusementAI.createStrollAroundPoiBaby(),
7 weight AmusementAI.createStrollToPoiBaby(),
9 weight AmusementAI.createAcquirePoi(),
10 weight JumpOnBed(1.0f),
10 weight createStrollBehavior(),
)