Compare commits

...
Author SHA1 Message Date
Tyzillion f298f7a157 Added eating particles. 2025-02-03 20:31:41 -05:00
Tyzillion 7ac54d6d6a I broked the branch. :( So I deleted it and remade it. :) 2025-02-03 13:40:51 -05:00
14 changed files with 829 additions and 139 deletions
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.DefendOwnerSensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.DrowsySensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.ItemEntitySensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.PokemonAdultSensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.PokemonGrowableCropSensor
import com.cobblemon.mod.common.pokemon.ai.PokemonDisturbancesSensor
@@ -36,6 +37,8 @@ object CobblemonSensors {
val NEARBY_GROWABLE_CROPS = register("nearby_growable_crops", ::PokemonGrowableCropSensor)
val ITEM_SENSOR = register("item_sensor", ::ItemEntitySensor)
fun <E : Entity, U : Sensor<E>> register(id: String, supplier: Supplier<U>): SensorType<U> {
val sensor = SensorType(supplier)
sensors[id] = sensor
@@ -0,0 +1,29 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.ai.FollowWalkTargetTask
import com.cobblemon.mod.common.entity.ai.MoveToAttackTargetTask
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.MoveToItemAndEatTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class MoveToItemAndEatTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): BehaviorControl<LivingEntity>? {
return WrapperLivingEntityTask(
MoveToItemAndEatTask(),
PokemonEntity::class.java
)
}
}
@@ -80,6 +80,7 @@ interface TaskConfig {
"go_to_sleep" to GoToSleepTaskConfig::class.java,
"find_resting_place" to FindRestingPlaceTaskConfig::class.java,
"move_to_owner" to MoveToOwnerTaskConfig::class.java,
"move_to_item_and_eat" to MoveToItemAndEatTaskConfig::class.java,
)
val runtime = MoLangRuntime().setup()
@@ -15,6 +15,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import com.cobblemon.mod.common.util.asExpressionLike
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
@@ -34,6 +35,9 @@ class MunchlaxModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val cryAnimation = CryProvider { bedrockStateful("munchlax", "cry") }
override fun registerPoses() {
animations["eat"] = "q.bedrock_stateful('munchlax', 'eat_food', 'endures_primary_animations')".asExpressionLike()
animations["eat_multiple"] = "q.bedrock_stateful('munchlax', 'eat_multiple_food', 'endures_primary_animations')".asExpressionLike()
val blink = quirk { bedrockStateful("munchlax", "blink") }
standing = registerPose(
poseName = "standing",
@@ -0,0 +1,23 @@
package com.cobblemon.mod.common.entity.pokemon.ai.sensors
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.pokemon.Pokemon
import net.minecraft.server.level.ServerLevel
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.ai.sensing.Sensor
import net.minecraft.world.entity.item.ItemEntity
class ItemEntitySensor: Sensor<PokemonEntity>(100) {
override fun requires(): Set<MemoryModuleType<*>> {
return setOf(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM)
}
override fun doTick(level: ServerLevel, entity: PokemonEntity) {
val nearbyItems = level.getEntitiesOfClass(ItemEntity::class.java, entity.boundingBox.inflate(10.0)) { true }
if (nearbyItems.isNotEmpty()) {
entity.brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM, nearbyItems[0])
} else {
entity.brain.eraseMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM)
}
}
}
@@ -0,0 +1,106 @@
package com.cobblemon.mod.common.entity.pokemon.ai.tasks
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.client.render.models.blockbench.animation.ActiveAnimation
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.net.messages.client.animation.PlayPosableAnimationPacket
import com.google.common.collect.ImmutableMap
import net.minecraft.client.particle.Particle
import net.minecraft.core.BlockPos
import net.minecraft.core.particles.ItemParticleOption
import net.minecraft.core.particles.ParticleTypes
import net.minecraft.server.level.ServerLevel
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.entity.ai.behavior.Behavior
import net.minecraft.world.entity.ai.behavior.BlockPosTracker
import net.minecraft.world.entity.ai.behavior.PositionTracker
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.ai.memory.MemoryStatus
import net.minecraft.world.entity.ai.memory.WalkTarget
import net.minecraft.world.entity.item.ItemEntity
import net.minecraft.world.food.Foods
import net.minecraft.world.item.ItemStack
import java.util.Optional
import java.util.function.Consumer
import kotlin.enums.enumEntries
class MoveToItemAndEatTask(): Behavior<PokemonEntity> (
ImmutableMap.of(
MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM, MemoryStatus.VALUE_PRESENT
)
) {
private val eatRange = 1.5
private var lastEatTime: Long = 0
private var lastEatAnimationTime: Long = 0
private var cooldown: Long = 25
private var eatCooldown: Long = 15
override fun stop(world: ServerLevel, entity: PokemonEntity, time: Long) {
entity.brain.eraseMemory(MemoryModuleType.WALK_TARGET)
entity.brain.eraseMemory(MemoryModuleType.LOOK_TARGET)
}
override fun canStillUse(world: ServerLevel, entity: PokemonEntity, time: Long): Boolean {
return entity.brain.getMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM).isPresent
}
override fun tick(world: ServerLevel, entity: PokemonEntity, time: Long) {
val item = entity.brain.getMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM).get()
val itemPos = item.blockPosition()
val walkTarget = WalkTarget(itemPos, 0.5f, 1)
entity.brain.setMemory(MemoryModuleType.WALK_TARGET, walkTarget)
entity.brain.setMemory(MemoryModuleType.LOOK_TARGET, BlockPosTracker(itemPos))
if (entity.blockPosition().closerThan(item.blockPosition(), eatRange) && time >= lastEatTime + eatCooldown){
eatItem(world, entity, item)
}
if (entity.blockPosition().closerThan(item.blockPosition(), eatRange) && time >= lastEatAnimationTime + cooldown) {
eatItemAnimation(entity, item)
}
}
private fun eatItemAnimation(entity: PokemonEntity, item: ItemEntity) {
if (item.item.count > 0) {
cooldown = 35
eatMultipleAnimation(entity)
} else if (entity.mainHandItem.isEmpty()) {
cooldown = 62
eatAnimation(entity)
}
lastEatAnimationTime = entity.level().gameTime
}
private fun eatItem(world: ServerLevel, entity: PokemonEntity, item: ItemEntity) {
entity.setItemSlot(EquipmentSlot.MAINHAND, item.item)
entity.eat(world, item.item)
eatParticles(world, entity, item)
entity.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY)
lastEatTime = entity.level().gameTime
}
private fun eatParticles(world: ServerLevel, entity: Entity, item: ItemEntity) {
val itemStack = item.item
if (itemStack.isEmpty) {
return
}
val particleData = ItemParticleOption(ParticleTypes.ITEM, itemStack)
world.sendParticles(
particleData, // Particle type with item stack
entity.x, entity.y + 0.6, entity.z, // Position
10, // Number of particles
0.1, 0.1, 0.1, // Offset
0.1 // Speed
)
}
private fun eatMultipleAnimation(pokemon: PokemonEntity) {
val playPoseableAnimationPacket = PlayPosableAnimationPacket(pokemon.id, setOf("eat_multiple"), listOf())
playPoseableAnimationPacket.sendToPlayersAround(pokemon.x, pokemon.y, pokemon.z, 128.0, pokemon.level().dimension())
}
private fun eatAnimation(pokemon: PokemonEntity) {
val playPoseableAnimationPacket = PlayPosableAnimationPacket(pokemon.id, setOf("eat"), listOf())
playPoseableAnimationPacket.sendToPlayersAround(pokemon.x, pokemon.y, pokemon.z, 128.0, pokemon.level().dimension())
}
}
@@ -59,7 +59,8 @@ object PokemonBrain {
CobblemonSensors.POKEMON_DROWSY,
CobblemonSensors.POKEMON_ADULT,
SensorType.IS_IN_WATER,
CobblemonSensors.NEARBY_GROWABLE_CROPS
CobblemonSensors.NEARBY_GROWABLE_CROPS,
CobblemonSensors.ITEM_SENSOR
// CobblemonSensors.BATTLING_POKEMON,
// CobblemonSensors.NPC_BATTLING
@@ -162,7 +163,8 @@ object PokemonBrain {
MemoryModuleType.DISTURBANCE_LOCATION,
CobblemonMemories.NEARBY_GROWABLE_CROPS,
MemoryModuleType.AVOID_TARGET,
CobblemonMemories.POKEMON_SLEEPING
CobblemonMemories.POKEMON_SLEEPING,
MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM
)
fun updateActivities(pokemon:PokemonEntity) {
@@ -1570,6 +1570,233 @@
},
"1.0417": [0, 0, 0]
}
},
"eye_right": {
"position": {
"0.0": [0, 0, 0],
"2.1667": [0, 0, 0],
"2.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.01]},
"2.2917": {"pre": [0, 0, -0.01], "post": [0, 0, -0.035]},
"2.375": {"pre": [0, 0, -0.035], "post": [0, 0, 0.2]},
"3.2917": {"pre": [0, 0, 0.2], "post": [0, 0, 0.2]},
"3.4167": {"pre": [0, 0, 0.2], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [0, 0, 0],
"2.1667": [0, 0, 0],
"2.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.035]},
"2.2917": {"pre": [0, 0, -0.035], "post": [0, 0, -0.035]},
"2.375": {"pre": [0, 0, -0.035], "post": [0, 0, 0.2]},
"3.2917": {"pre": [0, 0, 0.2], "post": [0, 0, 0.2]},
"3.4167": {"pre": [0, 0, 0.2], "post": [0, 0, 0]}
}
},
"eyelid_happy_right": {
"position": {
"0.0": [0, 0, 0],
"2.1667": [0, 0, 0],
"2.375": {"pre": [0, 0, 0], "post": [0, 0, -0.5]},
"3.2917": {"pre": [0, 0, -0.5], "post": [0, 0, -0.5]},
"3.4167": {"pre": [0, 0, -0.5], "post": [0, 0, 0]}
}
},
"eyelid_happy_left": {
"position": {
"0.0": [0, 0, 0],
"2.1667": [0, 0, 0],
"2.375": {"pre": [0, 0, 0], "post": [0, 0, -0.975]},
"3.2917": {"pre": [0, 0, -0.975], "post": [0, 0, -0.975]},
"3.4167": {"pre": [0, 0, -0.975], "post": [0, 0, 0]}
}
}
}
},
"animation.munchlax.eat_multiple_food": {
"animation_length": 2,
"bones": {
"arm_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0, -62.5, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.375": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"arm_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0, -27.5, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.375": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"arm_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 57.5, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"arm_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 35, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [9.76336, 12.57727, -0.90731],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [9.6902, -15.01763, 0.79218],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"jaw": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5": {
"post": [-2.15, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [15.8, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [2.26, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [-2.01, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.8333": {
"post": [12.76, 0, 0],
"lerp_mode": "catmullrom"
},
"0.9167": {
"post": [0.44, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [20, 0, 0],
"lerp_mode": "catmullrom"
},
"1.1667": {
"post": [-1.28, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [7.52, 0, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [-1, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"eye_right": {
"position": [0, 0, 0.5]
},
"eye_left": {
"position": [0, 0, 0.5]
},
"eyelid_happy_right": {
"position": [0, 0, -0.775]
},
"eyelid_happy_left": {
"position": [0, 0, -1.275]
}
}
},
@@ -1775,20 +2002,265 @@
"2.8333": [0, 0, "math.sin(q.anim_time*90*5)*3"],
"3.6667": [0, 0, 0]
}
}
}
},
"animation.munchlax.hurt": {
"animation_length": 0.125,
"bones": {
"eyelid_clench_right": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"eyelid_clench_left": {
"position": [0, 0, -0.1]
}
}
},
"animation.munchlax.shocked": {
"loop": true,
"bones": {
"jaw": {
"rotation": [17.5, 0, 0]
},
"pupil_right": {
"scale": 0.6
},
"pupil_left": {
"scale": 0.6
}
}
},
"animation.munchlax.shifty": {
"loop": true,
"bones": {
"pupil_right": {
"position": [-1, -0.2, 0]
},
"pupil_left": {
"position": [0, -0.2, 0]
},
"eyelid_half_left": {
"position": [0, 1, -0.1]
},
"eye_emote_right2": {
"position": [0, 0, 0.1]
}
}
},
"animation.munchlax.sad": {
"loop": true,
"bones": {
"pupil_right": {
"position": [0, -0.3, 0]
},
"pupil_left": {
"position": [0, -0.3, 0]
},
"eye_emote_right1": {
"position": [0, 0, 0.1]
},
"eye_emote_left1": {
"position": [0, 0, 0.1]
}
}
},
"animation.munchlax.mad": {
"loop": true,
"bones": {
"jaw": {
"rotation": [17.5, 0, 0]
},
"pupil_right": {
"position": [0, -0.3, 0]
},
"pupil_left": {
"position": [0, -0.3, 0]
},
"eye_emote_right2": {
"position": [0, 0, 0.1]
},
"eye_emote_left2": {
"position": [0, 0, 0.1]
}
}
},
"animation.munchlax.dissapointed": {
"loop": true,
"bones": {
"pupil_right": {
"position": [0, -0.2, 0]
},
"pupil_left": {
"position": [0, -0.2, 0]
},
"eyelid_half_right": {
"position": [0, 1, -0.1]
},
"eyelid_half_left": {
"position": [0, 1, -0.1]
}
}
},
"animation.munchlax.happy": {
"loop": true,
"bones": {
"eyelid_clench_left": {
"scale": 1
}
}
},
"animation.munchlax.impactdemo": {
"animation_length": 3,
"bones": {
"body": {
"position": {
"0.0": [0, 0, 0],
"2.2083": {"pre": [0, 0, 0], "post": [0, -0.5, -0.11]},
"3.5417": {"pre": [0, -0.5, -0.11], "post": [0, 0, 0]}
"0.0": [0, 20, 0],
"0.5833": {
"pre": [0, 20, 0],
"post": [0, 20, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 25.2, 0],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [0, 16.92, 0],
"lerp_mode": "catmullrom"
},
"1.25": [0, 0, 0],
"1.2917": [0, 0.7, 0],
"1.3333": [0, -0.83, 0],
"1.375": [0, 0.44, 0],
"1.4167": [0, 0, 0],
"1.625": [0, 0, 0],
"2.2917": {
"pre": [0, 19, 0],
"post": [0, 19, 0],
"lerp_mode": "catmullrom"
},
"2.9167": {
"post": [0, 20, 0],
"lerp_mode": "catmullrom"
}
}
}
}
},
"animation.munchlax.ambattackdemo": {
"animation_length": 0.75,
"bones": {
"torso": {
"rotation": {
"0.0": [-12, 0, 0],
"0.0833": {
"pre": [6, 0, 0],
"post": [6, 0, 0],
"lerp_mode": "catmullrom"
},
"0.125": {
"post": [6, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
},
"eyelid_happy_left": {
"position": {
"0.0": [0, 0, 0],
"2.2083": {"pre": [0, 0, 0], "post": [0, -0.5, -0.11]},
"3.5417": {"pre": [0, -0.5, -0.11], "post": [0, 0, 0]}
"torso2": {
"rotation": {
"0.0": [4, 0, 0],
"0.0833": {
"pre": [1, 0, 0],
"post": [1, 0, 0],
"lerp_mode": "catmullrom"
},
"0.125": {
"post": [1, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": [0, 0, 0]
}
},
"arm_right": {
"rotation": {
"0.0": [0, -19, 0],
"0.0833": {
"pre": [0, 6, 0],
"post": [0, 6, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
},
"arm_left": {
"rotation": {
"0.0": [0, 19, 0],
"0.0833": {
"pre": [0, -6, 0],
"post": [0, -6, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
},
"head": {
"rotation": {
"0.0": [-10, 0, 0],
"0.0833": {
"pre": [-1, 0, 0],
"post": [-1, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5417": [0, 0, 0]
}
},
"jaw": {
"rotation": {
"0.0": [24, 0, 0],
"0.0833": [2, 0, 0],
"0.1667": [2, 0, 0],
"0.3333": {
"pre": [0, 0, 0],
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": [0, 0, 0]
}
}
}
},
"animation.munchlax.walkspeedtest": {
"loop": true,
"bones": {
"munchlax": {
"position": [0, 0, "-q.anim_time*90*0.035"]
}
}
}
@@ -7,8 +7,8 @@
"texture_width": 64,
"texture_height": 64,
"visible_bounds_width": 3,
"visible_bounds_height": 2.5,
"visible_bounds_offset": [0, 0.75, 0]
"visible_bounds_height": 3.5,
"visible_bounds_offset": [0, 1.25, 0]
},
"bones": [
{
@@ -25,49 +25,140 @@
"parent": "body",
"pivot": [0, 3, 0],
"cubes": [
{"origin": [-4, 8, -3], "size": [8, 2, 6], "uv": [4, 26]},
{"origin": [-5, 2, -4], "size": [10, 6, 8], "uv": [0, 0]}
]
},
{
"name": "fur_front",
"name": "torso2",
"parent": "torso",
"pivot": [0, 2, -4],
"rotation": [45, 0, 0],
"pivot": [0, 8, 1],
"cubes": [
{"origin": [-6.5, 2, -6], "size": [13, 0, 2], "uv": [-2, 41]}
{"origin": [-4, 8, -3], "size": [8, 2, 6], "uv": [4, 26]}
]
},
{
"name": "fur_right",
"parent": "torso",
"pivot": [-5, 2, 0],
"rotation": [0, 0, -45],
"name": "arm_right",
"parent": "torso2",
"pivot": [-4, 9.65, -0.25],
"cubes": [
{"origin": [-7, 2, -5.5], "size": [2, 0, 11], "uv": [-7, 43]}
{"origin": [-7, 6.65, -1.75], "size": [3, 3, 3], "uv": [26, 16]}
]
},
{
"name": "fur_left",
"parent": "torso",
"pivot": [5, 2, 0],
"rotation": [0, 0, 45],
"name": "arm_right2",
"parent": "arm_right",
"pivot": [-7, 9.65, 1.25],
"cubes": [
{"origin": [5, 2, -5.5], "size": [2, 0, 11], "uv": [-11, 43]}
{"origin": [-10, 6.65, -1.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [34, 22]}
]
},
{
"name": "fur_back",
"parent": "torso",
"pivot": [0, 2, 4],
"rotation": [-45, 0, 0],
"name": "finger_pinkie_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, 1.25],
"rotation": [0, 10, 0],
"cubes": [
{"origin": [-6.5, 2, 4], "size": [13, 0, 2], "uv": [-2, 39]}
{"origin": [-10.8, 8.15, 1.25], "size": [1, 1, 0], "uv": [28, 0]}
]
},
{
"name": "finger_ring_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, 0.45],
"rotation": [0, 5, 0],
"cubes": [
{"origin": [-11, 8.15, 0.45], "size": [1, 1, 0], "uv": [28, 1]}
]
},
{
"name": "finger_middle_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, -0.35],
"cubes": [
{"origin": [-11, 8.15, -0.35], "size": [1, 1, 0], "uv": [28, 2]}
]
},
{
"name": "finger_index_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, -1.15],
"rotation": [0, -5, 0],
"cubes": [
{"origin": [-11, 8.15, -1.15], "size": [1, 1, 0], "uv": [28, 3]}
]
},
{
"name": "finger_thumb_right",
"parent": "arm_right2",
"pivot": [-10, 8.65, -1.75],
"rotation": [0, -20, 0],
"cubes": [
{"origin": [-10.8, 7.65, -1.75], "size": [1, 1, 0], "uv": [28, 4]}
]
},
{
"name": "arm_left",
"parent": "torso2",
"pivot": [4, 9.65, -0.25],
"cubes": [
{"origin": [4, 6.65, -1.75], "size": [3, 3, 3], "uv": [38, 16]}
]
},
{
"name": "arm_left2",
"parent": "arm_left",
"pivot": [7, 9.65, 1.25],
"cubes": [
{"origin": [7, 6.65, -1.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [33, 29]}
]
},
{
"name": "finger_pinkie_left",
"parent": "arm_left2",
"pivot": [10, 9.15, 1.25],
"rotation": [0, -10, 0],
"cubes": [
{"origin": [9.8, 8.15, 1.25], "size": [1, 1, 0], "uv": [30, 0]}
]
},
{
"name": "finger_ring_left",
"parent": "arm_left2",
"pivot": [10, 9.15, 0.45],
"rotation": [0, -5, 0],
"cubes": [
{"origin": [10, 8.15, 0.45], "size": [1, 1, 0], "uv": [30, 1]}
]
},
{
"name": "finger_middle_left",
"parent": "arm_left2",
"pivot": [10, 9.15, -0.35],
"cubes": [
{"origin": [10, 8.15, -0.35], "size": [1, 1, 0], "uv": [30, 2]}
]
},
{
"name": "finger_index_left",
"parent": "arm_left2",
"pivot": [10, 9.15, -1.15],
"rotation": [0, 5, 0],
"cubes": [
{"origin": [10, 8.15, -1.15], "size": [1, 1, 0], "uv": [30, 3]}
]
},
{
"name": "finger_thumb_left",
"parent": "arm_left2",
"pivot": [10, 8.65, -1.75],
"rotation": [0, 20, 0],
"cubes": [
{"origin": [9.8, 7.65, -1.75], "size": [1, 1, 0], "uv": [30, 4]}
]
},
{
"name": "head",
"parent": "torso",
"parent": "torso2",
"pivot": [0, 10, 0],
"cubes": [
{"origin": [-4.5, 12, -4], "size": [9, 4, 8], "uv": [0, 14]},
@@ -163,7 +254,15 @@
"parent": "eye_right",
"pivot": [-2, 14, -3.4],
"cubes": [
{"origin": [-3, 13.5, -3.9], "size": [2, 1, 1], "inflate": 0.04, "uv": [21, 34]}
{"origin": [-4, 13.5, -3.9], "size": [2, 1, 1], "inflate": 0.04, "uv": [21, 34]}
]
},
{
"name": "eyelid_happy_right",
"parent": "eye_right",
"pivot": [-2, 14, -4],
"cubes": [
{"origin": [-3.5, 13, -3.75], "size": [3, 2, 1], "uv": [8, 43]}
]
},
{
@@ -222,6 +321,14 @@
{"origin": [1, 13.5, -3.9], "size": [2, 1, 1], "inflate": 0.04, "uv": [27, 34]}
]
},
{
"name": "eyelid_happy_left",
"parent": "eye_left",
"pivot": [2, 14, -4],
"cubes": [
{"origin": [0.5, 13, -3.25], "size": [3, 2, 1], "uv": [16, 43]}
]
},
{
"name": "ear_right",
"parent": "head",
@@ -243,123 +350,39 @@
]
},
{
"name": "arm_right",
"name": "fur_front",
"parent": "torso",
"pivot": [-4, 9.65, -0.25],
"pivot": [0, 2, -4],
"rotation": [45, 0, 0],
"cubes": [
{"origin": [-7, 6.65, -1.75], "size": [3, 3, 3], "uv": [26, 16]}
{"origin": [-6.5, 2, -6], "size": [13, 0, 2], "uv": [-2, 41]}
]
},
{
"name": "arm_right2",
"parent": "arm_right",
"pivot": [-7, 9.65, 1.25],
"cubes": [
{"origin": [-10, 6.65, -1.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [34, 22]}
]
},
{
"name": "finger_pinkie_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, 1.25],
"rotation": [0, 10, 0],
"cubes": [
{"origin": [-10.8, 8.15, 1.25], "size": [1, 1, 0], "uv": [28, 0]}
]
},
{
"name": "finger_ring_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, 0.45],
"rotation": [0, 5, 0],
"cubes": [
{"origin": [-11, 8.15, 0.45], "size": [1, 1, 0], "uv": [28, 1]}
]
},
{
"name": "finger_middle_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, -0.35],
"cubes": [
{"origin": [-11, 8.15, -0.35], "size": [1, 1, 0], "uv": [28, 2]}
]
},
{
"name": "finger_index_right",
"parent": "arm_right2",
"pivot": [-10, 9.15, -1.15],
"rotation": [0, -5, 0],
"cubes": [
{"origin": [-11, 8.15, -1.15], "size": [1, 1, 0], "uv": [28, 3]}
]
},
{
"name": "finger_thumb_right",
"parent": "arm_right2",
"pivot": [-10, 8.65, -1.75],
"rotation": [0, -20, 0],
"cubes": [
{"origin": [-10.8, 7.65, -1.75], "size": [1, 1, 0], "uv": [28, 4]}
]
},
{
"name": "arm_left",
"name": "fur_right",
"parent": "torso",
"pivot": [4, 9.65, -0.25],
"pivot": [-5, 2, 0],
"rotation": [0, 0, -45],
"cubes": [
{"origin": [4, 6.65, -1.75], "size": [3, 3, 3], "uv": [38, 16]}
{"origin": [-7, 2, -5.5], "size": [2, 0, 11], "uv": [-7, 43]}
]
},
{
"name": "arm_left2",
"parent": "arm_left",
"pivot": [7, 9.65, 1.25],
"name": "fur_left",
"parent": "torso",
"pivot": [5, 2, 0],
"rotation": [0, 0, 45],
"cubes": [
{"origin": [7, 6.65, -1.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [33, 29]}
{"origin": [5, 2, -5.5], "size": [2, 0, 11], "uv": [-11, 43]}
]
},
{
"name": "finger_pinkie_left",
"parent": "arm_left2",
"pivot": [10, 9.15, 1.25],
"rotation": [0, -10, 0],
"name": "fur_back",
"parent": "torso",
"pivot": [0, 2, 4],
"rotation": [-45, 0, 0],
"cubes": [
{"origin": [9.8, 8.15, 1.25], "size": [1, 1, 0], "uv": [30, 0]}
]
},
{
"name": "finger_ring_left",
"parent": "arm_left2",
"pivot": [10, 9.15, 0.45],
"rotation": [0, -5, 0],
"cubes": [
{"origin": [10, 8.15, 0.45], "size": [1, 1, 0], "uv": [30, 1]}
]
},
{
"name": "finger_middle_left",
"parent": "arm_left2",
"pivot": [10, 9.15, -0.35],
"cubes": [
{"origin": [10, 8.15, -0.35], "size": [1, 1, 0], "uv": [30, 2]}
]
},
{
"name": "finger_index_left",
"parent": "arm_left2",
"pivot": [10, 9.15, -1.15],
"rotation": [0, 5, 0],
"cubes": [
{"origin": [10, 8.15, -1.15], "size": [1, 1, 0], "uv": [30, 3]}
]
},
{
"name": "finger_thumb_left",
"parent": "arm_left2",
"pivot": [10, 8.65, -1.75],
"rotation": [0, 20, 0],
"cubes": [
{"origin": [9.8, 7.65, -1.75], "size": [1, 1, 0], "uv": [30, 4]}
{"origin": [-6.5, 2, 4], "size": [13, 0, 2], "uv": [-2, 39]}
]
},
{
@@ -6,7 +6,9 @@
"rootBone": "munchlax",
"animations": {
"cry": "q.bedrock_stateful('munchlax', 'cry')",
"recoil": "q.bedrock_stateful('munchlax', 'recoil', q.curve('symmetrical_wide'))"
"recoil": "q.bedrock_stateful('munchlax', 'recoil', q.curve('symmetrical_wide'))",
"eat": "q.bedrock_stateful('munchlax', 'eat_food', 'endures_primary_animations')",
"eat_multiple": "q.bedrock_stateful('munchlax', 'eat_multiple_food', 'endures_primary_animations')"
},
"poses": {
"battle-standing": {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

@@ -0,0 +1,17 @@
{
"name": "cobblemon.brain_preset.move_to_item_and_eat.name",
"description": "cobblemon.brain_preset.move_to_item_and_eat.desc",
"configurations": [
{
"type": "add_tasks_to_activity",
"activity": "idle",
"tasksByPriority": {
"0": [
{
"type": "move_to_item_and_eat"
}
]
}
}
]
}
@@ -14,6 +14,14 @@
"baby"
],
"aspects": [],
"ai": [
{
"type": "apply_presets",
"presets": [
"cobblemon:pokemon_move_to_item_and_eat"
]
}
],
"abilities": [
"pickup",
"thickfat",
@@ -52,7 +60,7 @@
"behaviour": {
"moving": {
"walk": {
"walkSpeed": 0.118
"walkSpeed": 0.2
}
},
"resting": {