Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51976262d3 | ||
|
|
211232a81f | ||
|
|
e6352acb61 | ||
|
|
766b101722 | ||
|
|
34adb0d7a0 | ||
|
|
562418e324 | ||
|
|
016db10de7 | ||
|
|
61d01d3731 | ||
|
|
0319ac9a87 | ||
|
|
a5aea7a75f | ||
|
|
058c06f56b | ||
|
|
28bee4189a | ||
|
|
3f0e21b6b3 | ||
|
|
9ca2d47562 | ||
|
|
94f0914aa8 | ||
|
|
60101876b5 | ||
|
|
b8a4dfbcb4 | ||
|
|
fbc5959c67 | ||
|
|
49f20fe1a4 | ||
|
|
3c4288d7fc | ||
|
|
e03bb51a74 | ||
|
|
8545de321f | ||
|
|
5e353e9a6d | ||
|
|
c1fd257f63 | ||
|
|
ea0ff3bfb9 | ||
|
|
d4b6e36aab | ||
|
|
0fb721702d | ||
|
|
0e5053b787 | ||
|
|
f3867e0b1d | ||
|
|
a4fcd1ae7b | ||
|
|
ed9aff2448 | ||
|
|
8497a2a083 | ||
|
|
b389a95b5e | ||
|
|
c310027ce1 | ||
|
|
5ddb01df36 | ||
|
|
5a6f49aad5 | ||
|
|
793efcfa3d | ||
|
|
f785c5405f | ||
|
|
2dfca3ff89 |
@@ -2,14 +2,6 @@
|
||||
## [1.8.0 (MONTH Xth, 2026)](#1-8-0)
|
||||
|
||||
### Additions
|
||||
- Added riding statistics: `Distance by Pokémon on Land`, `Distance by Pokémon in Air` and `Distance by Pokémon in Liquid`.
|
||||
- Added the Partner Mark, which party Pokémon have a very small chance to earn as the player walks, provided they have enough friendship.
|
||||
- Added trades for Saccharine Saplings, Hearty Grains, Chipped Pot, and Masterpiece Teacup to the Wandering Trader.
|
||||
- Added brewing recipe for Throat Spray.
|
||||
- Added mood particles! Pokémon now visually react to certain actions:
|
||||
- Angry particles when attacking a mob.
|
||||
- Annoyed particles when a player tries to feed them while they’re already full.
|
||||
- Sweat droplets when they run out of stamina while being ridden.
|
||||
- Added config options to award experience to fainted Pokémon for opponents they helped defeat (`awardExperienceToFaintedPokemon`) and to still award experience for defeated enemies even after battle loss/forfeit (`awardExperienceOnBattleLoss`)
|
||||
- Party Overlay Exp Gained Animation will now display the amount of EXP the Pokémon gained
|
||||
- Added a toast to notify players of how they can scroll through their party. Did you know you can hold R and scroll instead of using arrow keys??!
|
||||
@@ -404,6 +396,7 @@
|
||||
- Fixed `/giveallpokemon` not respecting the min and max parameters
|
||||
- Fixed the choose starter toast not disappearing when capturing a Pokémon instead of opening the starter selection screen
|
||||
- Fixed an issue where certain Sinister Tea seasonings were only applying as instant effects and would not apply over time
|
||||
- Long config option labels now scroll instead of overflowing
|
||||
|
||||
### Developer
|
||||
- Added `PokeSnackSpawnerFactory` which allows influence registration on PokeSnack encounters
|
||||
|
||||
@@ -92,17 +92,13 @@ interface PokemonAndMoveSelectingItem {
|
||||
}
|
||||
|
||||
fun canUseOnPokemon(stack: ItemStack, pokemon: Pokemon): Boolean {
|
||||
if (pokemon.entity == null && stack.`is`(CobblemonItemTags.POKE_FOOD) && pokemon.isFull()) {
|
||||
return false
|
||||
if (stack.`is`(CobblemonItemTags.POKE_FOOD)) {
|
||||
return !pokemon.isFull()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
fun canUseOnBattlePokemon(stack: ItemStack, battlePokemon: BattlePokemon): Boolean {
|
||||
return bagItem!!.canUse(stack, battlePokemon.actor.battle, battlePokemon)
|
||||
}
|
||||
|
||||
fun canUseOnBattlePokemon(stack: ItemStack, battlePokemon: BattlePokemon): Boolean = bagItem!!.canUse(stack, battlePokemon.actor.battle, battlePokemon)
|
||||
fun canUseOnMove(stack: ItemStack, pokemon: Pokemon, move: Move): Boolean = canUseOnMove(stack, move)
|
||||
fun canUseOnMove(stack: ItemStack, move: Move): Boolean
|
||||
|
||||
|
||||
@@ -107,16 +107,13 @@ interface PokemonSelectingItem {
|
||||
}
|
||||
|
||||
fun canUseOnPokemon(stack: ItemStack, pokemon: Pokemon): Boolean {
|
||||
if (pokemon.entity == null && stack.`is`(CobblemonItemTags.POKE_FOOD) && pokemon.isFull()) {
|
||||
return false
|
||||
if (stack.`is`(CobblemonItemTags.POKE_FOOD)) {
|
||||
return !pokemon.isFull()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
fun canUseOnBattlePokemon(stack: ItemStack, battlePokemon: BattlePokemon): Boolean {
|
||||
return bagItem!!.canUse(stack, battlePokemon.actor.battle, battlePokemon)
|
||||
}
|
||||
fun canUseOnBattlePokemon(stack: ItemStack, battlePokemon: BattlePokemon): Boolean = bagItem!!.canUse(stack, battlePokemon.actor.battle, battlePokemon)
|
||||
|
||||
fun interactWithSpecificBattle(player: ServerPlayer, stack: ItemStack, battlePokemon: BattlePokemon): InteractionResultHolder<ItemStack> {
|
||||
return if (canUseOnBattlePokemon(stack, battlePokemon)) {
|
||||
|
||||
@@ -54,9 +54,8 @@ object PokemonMoLangFunctions : AbstractMoLangFunctionHolder<Pokemon>() {
|
||||
}
|
||||
map["feed_pokemon"] = { params ->
|
||||
val amount = params.getDouble(0)
|
||||
val playSound = params.getBooleanOrNull(1) != false
|
||||
val playMoodParticles = params.getBooleanOrNull(2) != false
|
||||
DoubleValue(pokemon.feedPokemon(amount.toInt(), playSound, playMoodParticles))
|
||||
val playSound = params.getBooleanOrNull(1) ?: true
|
||||
pokemon.feedPokemon(amount.toInt(), playSound)
|
||||
}
|
||||
map["behaviour"] = { pokemon.form.behaviour.struct }
|
||||
map["behavior"] = { pokemon.form.behaviour.struct } // Inferior
|
||||
|
||||
@@ -44,7 +44,6 @@ object ActionEffects : JsonDataRegistry<ActionEffectTimeline> {
|
||||
ActionEffectKeyframe.register<EntityMoLangActionEffectKeyframe>("entity_molang")
|
||||
ActionEffectKeyframe.register<MoLangActionEffectKeyframe>("molang")
|
||||
ActionEffectKeyframe.register<ParallelActionEffectKeyframe>("parallel")
|
||||
ActionEffectKeyframe.register<LoopActionEffectKeyframe>("loop")
|
||||
ActionEffectKeyframe.register<CanInterruptActionEffectKeyframe>("can_interrupt")
|
||||
ActionEffectKeyframe.register<CannotInterruptActionEffectKeyframe>("cannot_interrupt")
|
||||
ActionEffectKeyframe.register<RemoveHoldsActionEffectKeyframe>("remove_holds")
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.api.moves.animations.keyframes
|
||||
|
||||
import com.cobblemon.mod.common.api.moves.animations.ActionEffectContext
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
class LoopActionEffectKeyframe(
|
||||
val keyframe: ActionEffectKeyframe = PauseActionEffectKeyframe()
|
||||
) : ConditionalActionEffectKeyframe() {
|
||||
override fun playWhenTrue(context: ActionEffectContext): CompletableFuture<Unit> {
|
||||
val future = CompletableFuture<Unit>()
|
||||
runIteration(context, future)
|
||||
return future
|
||||
}
|
||||
|
||||
private fun runIteration(context: ActionEffectContext, future: CompletableFuture<Unit>) {
|
||||
context.currentKeyframes.add(keyframe)
|
||||
keyframe.play(context)
|
||||
.thenRun { context.currentKeyframes.remove(keyframe) }
|
||||
.thenAccept {
|
||||
if (condition.resolveBoolean(context.runtime)) {
|
||||
runIteration(context, future)
|
||||
} else {
|
||||
future.complete(Unit)
|
||||
}
|
||||
}
|
||||
.exceptionally {
|
||||
future.completeExceptionally(it)
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import net.minecraft.world.level.block.SoundType
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.world.level.block.entity.CommandBlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
@@ -80,11 +81,13 @@ class HabitatBlock(properties: Properties) : Block(properties), EntityBlock {
|
||||
}
|
||||
|
||||
override fun useWithoutItem(state: BlockState, level: Level, pos: BlockPos, player: Player, hitResult: BlockHitResult): InteractionResult {
|
||||
if (!level.isClientSide) {
|
||||
val be = level.getBlockEntity(pos) as? HabitatBlockEntity ?: return InteractionResult.PASS
|
||||
return be.onUse(player, hitResult)
|
||||
val blockEntity = level.getBlockEntity(pos)
|
||||
val be = level.getBlockEntity(pos) as? HabitatBlockEntity ?: return InteractionResult.PASS
|
||||
return if (blockEntity is HabitatBlockEntity && player.canUseGameMasterBlocks()) {
|
||||
be.onUse(player, hitResult)
|
||||
} else {
|
||||
InteractionResult.PASS
|
||||
}
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
|
||||
override fun getDrops(state: BlockState, params: LootParams.Builder): MutableList<ItemStack> {
|
||||
|
||||
@@ -41,6 +41,7 @@ class CobblemonConfigScreen(
|
||||
const val WIDGET_HEIGHT = SLOT_HEIGHT - PADDING
|
||||
const val LABEL_Y_OFFSET = 4
|
||||
const val WIDGET_Y_OFFSET = 0
|
||||
const val LABEL_MAX_WIDTH = SLOT_WIDTH - RESET_SLOT_WIDTH - WIDGET_WIDTH - PADDING * 2
|
||||
}
|
||||
|
||||
val clonedConfig = Cobblemon.config.clone()
|
||||
|
||||
@@ -8,17 +8,18 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.gui.config.variable
|
||||
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.LABEL_Y_OFFSET
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.LABEL_MAX_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.RESET_SLOT_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.SLOT_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.WIDGET_HEIGHT
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.WIDGET_Y_OFFSET
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigVariableList
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigVariableList.CobblemonConfigVariableListEntry
|
||||
import com.cobblemon.mod.common.client.render.drawScaledText
|
||||
import com.cobblemon.mod.common.client.render.drawScrollingText
|
||||
import com.cobblemon.mod.common.config.CobblemonConfig
|
||||
import com.cobblemon.mod.common.config.CobblemonConfigField
|
||||
import com.cobblemon.mod.common.util.lang
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.client.gui.components.Button
|
||||
import net.minecraft.client.gui.components.Tooltip
|
||||
@@ -91,12 +92,15 @@ abstract class CobblemonConfigVariable(
|
||||
val x = getX(left)
|
||||
val y = getY(top)
|
||||
|
||||
drawScaledText(
|
||||
context = context,
|
||||
text = labelLang,
|
||||
x = getX(left),
|
||||
y = getY(top) + LABEL_Y_OFFSET,
|
||||
shadow = true
|
||||
drawScrollingText(
|
||||
context,
|
||||
Minecraft.getInstance().font,
|
||||
labelLang,
|
||||
x,
|
||||
y + WIDGET_Y_OFFSET,
|
||||
x + LABEL_MAX_WIDTH,
|
||||
y + WIDGET_Y_OFFSET + WIDGET_HEIGHT,
|
||||
-1
|
||||
)
|
||||
|
||||
resetButton.x = x + SLOT_WIDTH - RESET_SLOT_WIDTH
|
||||
|
||||
@@ -18,17 +18,23 @@ import com.mojang.blaze3d.systems.RenderSystem
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer
|
||||
import com.mojang.math.Axis
|
||||
import net.minecraft.Util
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.gui.Font
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.client.renderer.MultiBufferSource
|
||||
import net.minecraft.client.renderer.RenderType
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture
|
||||
import net.minecraft.client.renderer.texture.TextureAtlas
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.chat.MutableComponent
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.FormattedCharSequence
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.item.ItemDisplayContext
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
fun renderScaledGuiItemIcon(itemStack: ItemStack, x: Double, y: Double, scale: Double = 1.0, zTranslation: Float = 100.0F, matrixStack: PoseStack? = null) {
|
||||
val itemRenderer = Minecraft.getInstance().itemRenderer
|
||||
@@ -97,6 +103,55 @@ fun getDepletableRedGreen(
|
||||
return r.toFloat() to g.toFloat()
|
||||
}
|
||||
|
||||
fun drawScrollingText(
|
||||
context: GuiGraphics,
|
||||
font: Font,
|
||||
text: Component,
|
||||
minX: Int,
|
||||
minY: Int,
|
||||
maxX: Int,
|
||||
maxY: Int,
|
||||
colour: Int,
|
||||
minScrollVelocity: Double? = 10.0
|
||||
) {
|
||||
val textWidth = font.width(text)
|
||||
val fittedMaxX = if (textWidth <= maxX - minX) minX + textWidth else maxX
|
||||
renderScrollingString(context, font, text, minX, minY, fittedMaxX, maxY, colour, minScrollVelocity)
|
||||
}
|
||||
|
||||
/** Copied from [net.minecraft.client.gui.components.AbstractWidget.renderScrollingString] **/
|
||||
fun renderScrollingString(
|
||||
context: GuiGraphics,
|
||||
font: Font,
|
||||
text: Component,
|
||||
minX: Int,
|
||||
minY: Int,
|
||||
maxX: Int,
|
||||
maxY: Int,
|
||||
colour: Int,
|
||||
minScrollVelocity: Double? = 10.0
|
||||
) {
|
||||
val textWidth = font.width(text)
|
||||
val centerY = (minY + maxY - 9) / 2 + 1
|
||||
val boxWidth = maxX - minX
|
||||
if (textWidth <= boxWidth) {
|
||||
val centerX = Mth.clamp((minX + maxX) / 2, minX + textWidth / 2, maxX - textWidth / 2)
|
||||
context.drawCenteredString(font, text, centerX, centerY, colour)
|
||||
return
|
||||
}
|
||||
|
||||
val overflow = textWidth - boxWidth
|
||||
var period = (overflow * 0.5).coerceAtLeast(3.0)
|
||||
if (minScrollVelocity != null) {
|
||||
period = period.coerceAtMost(2 * overflow / minScrollVelocity)
|
||||
}
|
||||
val time = Util.getMillis() / 1000.0
|
||||
val easedProgress = sin((Math.PI / 2) * cos(2 * Math.PI * time / period)) / 2.0 + 0.5
|
||||
val offset = Mth.lerp(easedProgress, 0.0, overflow.toDouble())
|
||||
context.enableScissor(minX, minY, maxX, maxY)
|
||||
context.drawString(font, text, minX - offset.toInt(), centerY, colour)
|
||||
context.disableScissor()
|
||||
}
|
||||
|
||||
fun drawScaledText(
|
||||
context: GuiGraphics,
|
||||
|
||||
@@ -34,7 +34,6 @@ import com.cobblemon.mod.common.client.render.models.blockbench.quirk.ModelQuirk
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.quirk.SimpleQuirk
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.WaveFunction
|
||||
import com.cobblemon.mod.common.client.util.exists
|
||||
import com.cobblemon.mod.common.entity.PosableEntity
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.generic.GenericBedrockEntity
|
||||
@@ -256,7 +255,7 @@ open class PosableModel(@Transient override val rootPart: Bone) : ModelFrame {
|
||||
}
|
||||
|
||||
fun setLayerContext(buffer: MultiBufferSource, state: PosableState, layers: Iterable<ModelLayer>) {
|
||||
currentLayers = layers
|
||||
currentLayers = layers.sortedBy { it.translucent }
|
||||
bufferProvider = buffer
|
||||
currentState = state
|
||||
}
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import com.cobblemon.mod.common.util.isUnderWater
|
||||
import com.cobblemon.mod.common.util.isInWater
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class ChinchouModel (root: ModelPart) : PokemonPosableModel(root) {
|
||||
override val rootPart = root.registerChildWithAllChildren("chinchou")
|
||||
|
||||
override var portraitScale = 1.75F
|
||||
override var portraitTranslation = Vec3(-0.3, -0.8, 0.0)
|
||||
|
||||
override var profileScale = 0.65F
|
||||
override var profileTranslation = Vec3(-0.05, 0.45, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var floating: CobblemonPose
|
||||
lateinit var swimming: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var watersleep: CobblemonPose
|
||||
lateinit var battleidle: CobblemonPose
|
||||
lateinit var waterbattleidle: CobblemonPose
|
||||
|
||||
// override val cryAnimation = CryProvider { bedrockStateful("chinchou", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("chinchou", "blink")}
|
||||
val idleQuirk = quirk(secondsBetweenOccurrences = 60F to 120F) { bedrockStateful("chinchou", "ground_quirk")}
|
||||
val waterQuirk = quirk(secondsBetweenOccurrences = 60F to 120F) { bedrockStateful("chinchou", "water_idle_quirk")}
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleeping",
|
||||
poseType = PoseType.SLEEP,
|
||||
condition = { !it.isInWater },
|
||||
animations = arrayOf(bedrock("chinchou", "sleep"))
|
||||
)
|
||||
|
||||
watersleep = registerPose(
|
||||
poseName = "water_sleeping",
|
||||
poseType = PoseType.SLEEP,
|
||||
condition = { it.isInWater },
|
||||
animations = arrayOf(bedrock("chinchou", "water_sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STAND,
|
||||
transformTicks = 10,
|
||||
condition = { !it.isBattling && !it.isInWater && !it.isUnderWater},
|
||||
quirks = arrayOf(blink, idleQuirk),
|
||||
animations = arrayOf(
|
||||
bedrock("chinchou", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
transformTicks = 10,
|
||||
poseType = PoseType.WALK,
|
||||
condition = { !it.isInWater && !it.isUnderWater},
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("chinchou", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
floating = registerPose(
|
||||
poseName = "floating",
|
||||
transformTicks = 10,
|
||||
poseType = PoseType.FLOAT,
|
||||
condition = { it.isInWater },
|
||||
quirks = arrayOf(blink, waterQuirk),
|
||||
animations = arrayOf(
|
||||
bedrock("chinchou", "water_idle")
|
||||
)
|
||||
)
|
||||
|
||||
swimming = registerPose(
|
||||
poseName = "swimming",
|
||||
transformTicks = 10,
|
||||
condition = { it.isInWater },
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("chinchou", "water_swim"),
|
||||
)
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling && !it.isInWater },
|
||||
animations = arrayOf(
|
||||
bedrock("chinchou", "battle_idle")
|
||||
)
|
||||
)
|
||||
|
||||
waterbattleidle = registerPose(
|
||||
poseName = "water_battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling && it.isInWater },
|
||||
animations = arrayOf(
|
||||
bedrock("chinchou", "water_battle_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, sleep)) bedrockStateful("chinchou", "faint") else if (state.isPosedIn( waterbattleidle, watersleep, floating, swimming )) bedrockStateful("chinchou", "water_faint") else null
|
||||
}
|
||||
@@ -368,7 +368,6 @@ object VaryingModelRepository {
|
||||
inbuilt("magcargo", ::MagcargoModel)
|
||||
inbuilt("slugma_shiny", ::SlugmaShinyModel)
|
||||
inbuilt("magcargo_shiny", ::MagcargoShinyModel)
|
||||
inbuilt("chinchou", ::ChinchouModel)
|
||||
inbuilt("clamperl", ::ClamperlModel)
|
||||
inbuilt("huntail", ::HuntailModel)
|
||||
inbuilt("gorebyss", ::GorebyssModel)
|
||||
|
||||
@@ -9,10 +9,7 @@
|
||||
package com.cobblemon.mod.common.entity.ai
|
||||
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.CobblemonMemories
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.getMemorySafely
|
||||
import com.cobblemon.mod.common.util.mainThreadRuntime
|
||||
import com.cobblemon.mod.common.util.resolveInt
|
||||
import com.cobblemon.mod.common.util.withQueryValue
|
||||
@@ -32,23 +29,12 @@ object FleeFromAttackerTask {
|
||||
Trigger { _, entity, _ ->
|
||||
val hurtByEntity = it.get(hurtByEntity)
|
||||
val avoidTarget = it.tryGet(avoidTarget).orElse(null)
|
||||
|
||||
if (avoidTarget != null && avoidTarget == hurtByEntity) {
|
||||
if (avoidTarget != null && avoidTarget == hurtByEntity.uuid) {
|
||||
return@Trigger false
|
||||
}
|
||||
|
||||
mainThreadRuntime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
|
||||
val avoidDurationTicks = mainThreadRuntime.resolveInt(avoidDurationTicks)
|
||||
|
||||
val pokemonEntity = entity as? PokemonEntity
|
||||
pokemonEntity?.let {
|
||||
it.after(1.0f) {
|
||||
it.playMoodParticle("mood_stress")
|
||||
}
|
||||
}
|
||||
|
||||
entity.brain.setMemoryWithExpiry(MemoryModuleType.AVOID_TARGET, hurtByEntity, avoidDurationTicks.toLong())
|
||||
|
||||
return@Trigger true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
package com.cobblemon.mod.common.entity.ai
|
||||
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.ai.behavior.OneShot
|
||||
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
|
||||
@@ -25,16 +24,10 @@ object GetAngryAtAttackerTask {
|
||||
Trigger { _, entity, _ ->
|
||||
val hurtByEntity = it.get(hurtByEntity)
|
||||
val angryAt = it.tryGet(angryAt).orElse(null)
|
||||
|
||||
if (angryAt != null && angryAt == hurtByEntity.uuid) {
|
||||
return@Trigger false
|
||||
}
|
||||
|
||||
val becomingAngry = angryAt == null
|
||||
entity.brain.setMemory(MemoryModuleType.ANGRY_AT, hurtByEntity.uuid)
|
||||
if (becomingAngry) {
|
||||
(entity as PokemonEntity?)?.playMoodParticle("mood_anger_steam")
|
||||
}
|
||||
return@Trigger true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,9 +34,6 @@ import com.cobblemon.mod.common.api.molang.MoLangFunctions.addPokemonFunctions
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.addStandardFunctions
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
|
||||
import com.cobblemon.mod.common.api.molang.ObjectValue
|
||||
import com.cobblemon.mod.common.api.moves.animations.ActionEffectContext
|
||||
import com.cobblemon.mod.common.api.moves.animations.ActionEffects
|
||||
import com.cobblemon.mod.common.api.moves.animations.UsersProvider
|
||||
import com.cobblemon.mod.common.api.net.serializers.PlatformTypeDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.PoseTypeDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.RideBoostsDataSerializer
|
||||
@@ -428,9 +425,6 @@ open class PokemonEntity(
|
||||
|
||||
var occupiedSeats = mutableMapOf<Seat, Entity>()
|
||||
|
||||
var moodParticleLock = false
|
||||
var playedZeroStaminaParticle = false
|
||||
|
||||
init {
|
||||
delegate.initialize(this)
|
||||
delegate.changePokemon(pokemon)
|
||||
@@ -910,27 +904,6 @@ open class PokemonEntity(
|
||||
return future
|
||||
}
|
||||
|
||||
fun playMoodParticle(particleName: String) {
|
||||
if (moodParticleLock) return
|
||||
|
||||
val actionEffect = ActionEffects.actionEffects[cobblemonResource(particleName)] ?: return
|
||||
|
||||
cry()
|
||||
|
||||
val context = ActionEffectContext(
|
||||
actionEffect = actionEffect,
|
||||
providers = mutableListOf(UsersProvider(this)),
|
||||
runtime = runtime,
|
||||
level = level()
|
||||
)
|
||||
actionEffect.run(context)
|
||||
|
||||
moodParticleLock = true
|
||||
after(5.0f) {
|
||||
moodParticleLock = false
|
||||
}
|
||||
}
|
||||
|
||||
override fun saveWithoutId(nbt: CompoundTag): CompoundTag {
|
||||
val tethering = this.tethering
|
||||
if (tethering != null) {
|
||||
@@ -2327,8 +2300,6 @@ open class PokemonEntity(
|
||||
ifRidingAvailable { _, _, state ->
|
||||
state.stamina.set(entityData.get(RIDE_STAMINA))
|
||||
}
|
||||
|
||||
playedZeroStaminaParticle = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2357,26 +2328,12 @@ open class PokemonEntity(
|
||||
|
||||
override fun tickRidden(driver: Player, movementInput: Vec3) {
|
||||
super.tickRidden(driver, movementInput)
|
||||
|
||||
ifRidingAvailable { behaviour, settings, state ->
|
||||
behaviour.tick(settings, state, this, driver, movementInput)
|
||||
if (entityData.get(RIDE_STAMINA) == -1F) {
|
||||
state.stamina.set(1F, forced = true)
|
||||
}
|
||||
|
||||
if (!level().isClientSide) {
|
||||
val stamina = state.stamina.get()
|
||||
|
||||
if (stamina <= 0f) {
|
||||
if (!playedZeroStaminaParticle) {
|
||||
playMoodParticle("mood_stress")
|
||||
playedZeroStaminaParticle = true
|
||||
}
|
||||
} else {
|
||||
playedZeroStaminaParticle = false
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.level().isClientSide) {
|
||||
val pose = behaviour.pose(settings, state, this)
|
||||
if (pose != this.entityData.get(POSE_TYPE)) {
|
||||
|
||||
@@ -44,11 +44,6 @@ class DefendOwnerSensor : Sensor<PokemonEntity>(10) {
|
||||
return@findClosest false
|
||||
}.map { mob -> mob as LivingEntity }
|
||||
|
||||
val previousAttacker = entity.brain.getMemorySafely(CobblemonMemories.NEAREST_VISIBLE_ATTACKER)
|
||||
val isNewAttacker = nearestAttacker.isPresent && previousAttacker.isEmpty
|
||||
entity.brain.setMemory(CobblemonMemories.NEAREST_VISIBLE_ATTACKER, nearestAttacker)
|
||||
if (isNewAttacker) {
|
||||
entity.playMoodParticle("mood_anger_steam")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
package com.cobblemon.mod.common.entity.pokemon.ai.tasks
|
||||
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.getMemorySafely
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.Mob
|
||||
import net.minecraft.world.entity.ai.behavior.OneShot
|
||||
@@ -61,12 +60,7 @@ object AttackHostileMobsTask {
|
||||
}
|
||||
|
||||
if (hostile != null) {
|
||||
val isNewTarget = currentTarget == null
|
||||
entity.brain.setMemory(MemoryModuleType.ATTACK_TARGET, hostile)
|
||||
if (isNewTarget) {
|
||||
(entity as? PokemonEntity)?.playMoodParticle("mood_anger_steam")
|
||||
}
|
||||
|
||||
true
|
||||
} else {
|
||||
false
|
||||
|
||||
@@ -91,7 +91,7 @@ class EatHeldItemTask(entity: PokemonEntity) : Behavior<PokemonEntity>(
|
||||
}
|
||||
this.timelastEaten = time
|
||||
if (itemConfig != null && itemConfig.fullnessValue > 0) {
|
||||
entity.pokemon.feedPokemon(itemConfig.fullnessValue, false, false)
|
||||
entity.pokemon.feedPokemon(itemConfig.fullnessValue, false)
|
||||
}
|
||||
// Check if the result item is something that should be dropped
|
||||
resultItemStack = entity.pokemon.heldItem()
|
||||
|
||||
@@ -13,9 +13,7 @@ import com.cobblemon.mod.common.api.apricorn.Apricorn
|
||||
import com.cobblemon.mod.common.api.item.PokemonSelectingItem
|
||||
import com.cobblemon.mod.common.api.riding.stats.RidingStat
|
||||
import com.cobblemon.mod.common.client.pot.CookingQuality
|
||||
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormEntityParticlePacket
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
@@ -94,9 +92,7 @@ class AprijuiceItem(val type: Apricorn): CobblemonItem(Properties().stacksTo(16)
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
pokemon.feedPokemon(1)
|
||||
|
||||
val boosts = getBoosts(stack)
|
||||
pokemon.addRideBoosts(boosts.mapValues { it.value.toFloat() })
|
||||
|
||||
@@ -96,9 +96,8 @@ class PokePuffItem : Item(Properties().stacksTo(64)), PokemonSelectingItem {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(4)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
// Feed the Pokémon 4 fullness points
|
||||
pokemon.feedPokemon(4)
|
||||
|
||||
val friendshipChange = PokePuffUtils.calculateFriendshipChange(stack, pokemon.nature)
|
||||
|
||||
|
||||
@@ -54,16 +54,14 @@ class FriendshipRaisingBerryItem(block: BerryBlock, val stat: Stat) : BerryItem(
|
||||
val evLowerAmount = max(genericRuntime.resolveInt(CobblemonMechanics.berries.evLowerAmount), 0)
|
||||
val decreasedEVs = pokemon.evs.add(stat, -evLowerAmount, ItemEvSource(player, stack, pokemon)) != 0
|
||||
|
||||
if (!increasedFriendship && !decreasedEVs) {
|
||||
return InteractionResultHolder.pass(stack)
|
||||
}
|
||||
return if (increasedFriendship || decreasedEVs) {
|
||||
pokemon.feedPokemon(1)
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
stack.consume(1, player)
|
||||
InteractionResultHolder.success(stack)
|
||||
} else {
|
||||
InteractionResultHolder.pass(stack)
|
||||
}
|
||||
|
||||
stack.consume(1, player)
|
||||
return InteractionResultHolder.success(stack)
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
|
||||
@@ -54,10 +54,7 @@ class HealingBerryItem(block: BerryBlock, val amount: () -> ExpressionLike): Ber
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
pokemon.feedPokemon(1)
|
||||
pokemon.currentHealth = Integer.min(pokemon.currentHealth + genericRuntime.resolveInt(amount(), pokemon), pokemon.maxHealth)
|
||||
stack.consume(1, player)
|
||||
return InteractionResultHolder.success(stack)
|
||||
@@ -65,7 +62,7 @@ class HealingBerryItem(block: BerryBlock, val amount: () -> ExpressionLike): Ber
|
||||
|
||||
override fun applyToBattlePokemon(player: ServerPlayer, stack: ItemStack, battlePokemon: BattlePokemon) {
|
||||
super.applyToBattlePokemon(player, stack, battlePokemon)
|
||||
battlePokemon.originalPokemon.feedPokemon(1, playMoodParticle = false)
|
||||
battlePokemon.originalPokemon.feedPokemon(1)
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
|
||||
@@ -48,26 +48,21 @@ class PPRestoringBerryItem(block: BerryBlock, val amount: () -> ExpressionLike):
|
||||
&& super.canUseOnPokemon(stack, pokemon)
|
||||
|
||||
override fun applyToPokemon(player: ServerPlayer, stack: ItemStack, pokemon: Pokemon, move: Move) {
|
||||
if (!canUseOnPokemon(stack, pokemon) && canUseOnMove(stack, move)) {
|
||||
return
|
||||
}
|
||||
if (canUseOnPokemon(stack, pokemon) && canUseOnMove(stack, move)) {
|
||||
pokemon.feedPokemon(1)
|
||||
val moveToRecover = pokemon.moveSet.find { it.template == move.template }
|
||||
if (moveToRecover != null && moveToRecover.currentPp < moveToRecover.maxPp) {
|
||||
moveToRecover.currentPp =
|
||||
min(moveToRecover.maxPp, moveToRecover.currentPp + genericRuntime.resolveInt(amount(), pokemon))
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return
|
||||
}
|
||||
|
||||
val moveToRecover = pokemon.moveSet.find { it.template == move.template }
|
||||
if (moveToRecover != null && moveToRecover.currentPp < moveToRecover.maxPp) {
|
||||
moveToRecover.currentPp =
|
||||
min(moveToRecover.maxPp, moveToRecover.currentPp + genericRuntime.resolveInt(amount(), pokemon))
|
||||
|
||||
stack.consume(1, player)
|
||||
stack.consume(1, player)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun applyToBattlePokemon(player: ServerPlayer, stack: ItemStack, battlePokemon: BattlePokemon, move: Move) {
|
||||
super.applyToBattlePokemon(player, stack, battlePokemon, move)
|
||||
battlePokemon.originalPokemon.feedPokemon(1, playMoodParticle = false)
|
||||
battlePokemon.originalPokemon.feedPokemon(1)
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
|
||||
@@ -59,9 +59,7 @@ class PortionHealingBerryItem(block: BerryBlock, val canCauseConfusion: Boolean,
|
||||
}
|
||||
|
||||
// count these berries as multiple feedings due to the amount they heal
|
||||
if (!pokemon.feedPokemon(5)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
pokemon.feedPokemon(5)
|
||||
|
||||
var amount = Integer.min(pokemon.currentHealth + (genericRuntime.resolveFloat(portion(), pokemon) * pokemon.maxHealth).toInt(), pokemon.maxHealth)
|
||||
CobblemonEvents.POKEMON_HEALED.postThen(PokemonHealedEvent(pokemon, amount, this), { cancelledEvent -> return InteractionResultHolder.fail(stack)}) { event ->
|
||||
@@ -75,7 +73,7 @@ class PortionHealingBerryItem(block: BerryBlock, val canCauseConfusion: Boolean,
|
||||
|
||||
override fun applyToBattlePokemon(player: ServerPlayer, stack: ItemStack, battlePokemon: BattlePokemon) {
|
||||
super.applyToBattlePokemon(player, stack, battlePokemon)
|
||||
battlePokemon.originalPokemon.feedPokemon(5, playMoodParticle = false)
|
||||
battlePokemon.originalPokemon.feedPokemon(5)
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
|
||||
@@ -58,23 +58,19 @@ class StatusCuringBerryItem(block: BerryBlock, vararg val status: Status): Berry
|
||||
stack: ItemStack,
|
||||
pokemon: Pokemon
|
||||
): InteractionResultHolder<ItemStack>? {
|
||||
if (!canUseOnPokemon(stack, pokemon)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
return if (canUseOnPokemon(stack, pokemon)) {
|
||||
pokemon.feedPokemon(1)
|
||||
pokemon.status = null
|
||||
stack.consume(1, player)
|
||||
InteractionResultHolder.success(stack)
|
||||
} else {
|
||||
InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
pokemon.status = null
|
||||
stack.consume(1, player)
|
||||
|
||||
return InteractionResultHolder.success(stack)
|
||||
}
|
||||
|
||||
override fun applyToBattlePokemon(player: ServerPlayer, stack: ItemStack, battlePokemon: BattlePokemon) {
|
||||
super.applyToBattlePokemon(player, stack, battlePokemon)
|
||||
battlePokemon.originalPokemon.feedPokemon(1, playMoodParticle = false)
|
||||
battlePokemon.originalPokemon.feedPokemon(1)
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
|
||||
@@ -316,7 +316,6 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.PASTURE)
|
||||
entries.accept(CobblemonItems.TM_MACHINE)
|
||||
entries.accept(CobblemonItems.DISC_SHELF)
|
||||
entries.accept(CobblemonItems.HABITAT_BLOCK)
|
||||
|
||||
entries.accept(CobblemonItems.GILDED_CHEST)
|
||||
entries.accept(CobblemonItems.YELLOW_GILDED_CHEST)
|
||||
|
||||
@@ -53,10 +53,7 @@ class BerryJuiceItem : CobblemonItem(Properties()), PokemonSelectingItem, Healin
|
||||
if (!canUseOnPokemon(stack, pokemon)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
pokemon.feedPokemon(1)
|
||||
|
||||
var amount = Integer.min(pokemon.currentHealth + 20, pokemon.maxHealth)
|
||||
CobblemonEvents.POKEMON_HEALED.postThen(PokemonHealedEvent(pokemon, amount, this), { cancelledEvent -> return InteractionResultHolder.fail(stack)}) { event ->
|
||||
@@ -77,9 +74,7 @@ class BerryJuiceItem : CobblemonItem(Properties()), PokemonSelectingItem, Healin
|
||||
|
||||
override fun applyToBattlePokemon(player: ServerPlayer, stack: ItemStack, battlePokemon: BattlePokemon) {
|
||||
super.applyToBattlePokemon(player, stack, battlePokemon)
|
||||
|
||||
battlePokemon.originalPokemon.feedPokemon(1, playMoodParticle = false)
|
||||
|
||||
battlePokemon.originalPokemon.feedPokemon(1)
|
||||
if (!player.hasInfiniteMaterials()) {
|
||||
val woodenBowlItemStack = ItemStack(Items.BOWL)
|
||||
if (!player.inventory.add(woodenBowlItemStack)) {
|
||||
|
||||
@@ -33,9 +33,7 @@ class FreshStartMochiItem : CobblemonItem(Properties()), PokemonSelectingItem {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
pokemon.feedPokemon(1)
|
||||
|
||||
pokemon.evs.forEach {
|
||||
pokemon.setEV(it.key, 0)
|
||||
|
||||
@@ -24,9 +24,7 @@ class MochiItem(stat: Stats): EVIncreaseItem(stat, 4) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
|
||||
if (!pokemon.feedPokemon(1)) {
|
||||
return InteractionResultHolder.fail(stack)
|
||||
}
|
||||
pokemon.feedPokemon(1)
|
||||
|
||||
return super.applyToPokemon(player, stack, pokemon)
|
||||
}
|
||||
|
||||
@@ -985,10 +985,6 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
this.recall()
|
||||
}
|
||||
|
||||
fun playMoodParticle(particleName: String) {
|
||||
entity?.playMoodParticle(particleName)
|
||||
}
|
||||
|
||||
fun heal() {
|
||||
CobblemonEvents.POKEMON_HEALED.postThen(PokemonHealedEvent(this)) { event ->
|
||||
this.currentHealth = maxHealth
|
||||
@@ -1060,13 +1056,23 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
else -> 0 // For weights less than 0.1
|
||||
}
|
||||
|
||||
fun feedPokemon(feedCount: Int, playSound: Boolean = true, playMoodParticle: Boolean = true): Boolean {
|
||||
playFullnessEffects(playSound, playMoodParticle)
|
||||
fun feedPokemon(feedCount: Int, playSound: Boolean = true) {
|
||||
// play sounds from the entity first (itemstack is consumed outside of this function)
|
||||
if (this.entity != null && playSound) {
|
||||
val fullnessPercent = ((this.currentFullness).toFloat() / (this.getMaxFullness()).toFloat()) * (.5f)
|
||||
|
||||
if (this.currentFullness >= this.getMaxFullness()) {
|
||||
this.entity?.playSound(CobblemonSounds.BERRY_EAT_FULL, 1F, 1F)
|
||||
}
|
||||
else {
|
||||
this.entity?.playSound(CobblemonSounds.BERRY_EAT, 1F, 1F + fullnessPercent)
|
||||
}
|
||||
}
|
||||
|
||||
// if it is already full we don't need to do anything
|
||||
// TODO this can happen when feeding in battle since we are temporarily ignoring fullness checks for pp/hp/status berries
|
||||
if (isFull()) {
|
||||
return false
|
||||
return
|
||||
}
|
||||
|
||||
this.currentFullness = (this.currentFullness + feedCount).coerceIn(0, this.getMaxFullness())
|
||||
@@ -1075,31 +1081,6 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
if (this.currentFullness == 1) {
|
||||
this.resetMetabolismCycle()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun playFullnessEffects(playSound: Boolean = true, playMoodParticle: Boolean = true) {
|
||||
if (!playSound && !playMoodParticle) return
|
||||
|
||||
val pokemonEntity = entity ?: return
|
||||
val fullnessPercent = ((this.currentFullness).toFloat() / (this.getMaxFullness()).toFloat()) * (.5f)
|
||||
|
||||
if (!isFull()) {
|
||||
if (playSound) {
|
||||
pokemonEntity.playSound(CobblemonSounds.BERRY_EAT, 1F, 1F + fullnessPercent)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if (playSound) {
|
||||
pokemonEntity.playSound(CobblemonSounds.BERRY_EAT_FULL, 1F, 1F)
|
||||
|
||||
if (playMoodParticle) {
|
||||
pokemonEntity.playMoodParticle("mood_annoyed")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// decrease a pokemon's Fullness value by a certain amount
|
||||
|
||||
@@ -115,8 +115,26 @@ object TradeManager : RequestManager<TradeManager.TradeRequest>() {
|
||||
}
|
||||
|
||||
CobblemonEvents.TRADE_EVENT_PRE.postThen(TradeEvent.Pre(player1, pokemon2, player2, pokemon1)) {
|
||||
party1.remove(pokemon1)
|
||||
party2.remove(pokemon2)
|
||||
val party1 = player1.party
|
||||
val party2 = player2.party
|
||||
|
||||
val player1Removed = party1.remove(pokemon1)
|
||||
val player2Removed = party2.remove(pokemon2)
|
||||
|
||||
if (!player1Removed || !player2Removed) {
|
||||
if (!player1Removed) {
|
||||
Cobblemon.LOGGER.warn("Failed to remove traded Pokémon ${pokemon1.species.resourceIdentifier} from ${player1.name.string}(${player1.uuid}). Aborting trade with ${player2.name.string}(${player2.uuid}), potential exploit abused.")
|
||||
}
|
||||
|
||||
if (!player2Removed) {
|
||||
Cobblemon.LOGGER.warn("Failed to remove traded Pokémon ${pokemon2.species.resourceIdentifier} from ${player2.name.string}(${player2.uuid}). Aborting trade with ${player1.name.string}(${player1.uuid}), potential exploit abused.")
|
||||
}
|
||||
|
||||
// Revert any changes if one of the removals failed
|
||||
if (player1Removed) party1.add(pokemon1)
|
||||
if (player2Removed) party2.add(pokemon2)
|
||||
return@postThen
|
||||
}
|
||||
|
||||
// If player1 is the OT, keep track of the friendship
|
||||
pokemon1.cacheFriendship(player1.uuid)
|
||||
|
||||
@@ -1575,470 +1575,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.substitute.destroy_burst": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": ["-0.3*Math.cos((query.anim_time-0) * 90 * 0.5+90) *0.3", 0, "0.3*Math.cos((query.anim_time-0) * 90 * 0.5) *0.3"],
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {
|
||||
"pre": [0, 0.25, 5],
|
||||
"post": [0, 0.25, 5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": [0, 0.25, 9.9],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [0, 0.25, 12.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [0, 0, 13.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": [0, 0, 13.3]
|
||||
},
|
||||
"scale": {
|
||||
"0.0": {
|
||||
"post": [1, 1, 1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.0417": {
|
||||
"post": [1, 1, 1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [1.11, 1.05, 0.9],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0.855, 1.025, 1.05],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [1, 1, 1],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": {
|
||||
"0.0": ["-2.5-3*Math.cos((query.anim_time-0.25) * 90 * 1) *0.05", 7.5, 0],
|
||||
"0.0833": [-2.54822, 7.5, 0],
|
||||
"0.125": {
|
||||
"pre": [19.95178, 10, 0],
|
||||
"post": [19.95178, 10, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-2.05, -90, -17],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-21.03, -80.89, -17.09],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [32.35, -50.6, -22],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [28.45, -46.5, -26],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": [28.45, -46.5, -26],
|
||||
"0.9583": {
|
||||
"pre": [32.01, -45.83, -30.71],
|
||||
"post": [32.01, -45.83, -30.71],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [54.92, -41.5, -61],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": [54.92, -41.5, -61]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {
|
||||
"pre": [0, 0.5, 0.25],
|
||||
"post": [0, 0.5, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": [0, 0.5, 0.25],
|
||||
"0.3333": {
|
||||
"pre": [0, -0.25, 0.25],
|
||||
"post": [0, -0.25, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": [0, -0.25, 0.25],
|
||||
"1.25": {
|
||||
"pre": [0, 0, 0.25],
|
||||
"post": [0, 0, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": [0, 0, 0.25]
|
||||
}
|
||||
},
|
||||
"tail": {
|
||||
"rotation": {
|
||||
"0.0": ["2.5+2*Math.cos((query.anim_time-0.5) * 90 * 1) *0.025", 0, 0],
|
||||
"0.0833": [2.5, 0, 0],
|
||||
"0.1667": {
|
||||
"pre": [6, -2.5, 2.5],
|
||||
"post": [6, -2.5, 2.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": [6, -2.5, 2.5],
|
||||
"0.2917": {
|
||||
"pre": [6.5, 0, 0],
|
||||
"post": [6.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [4, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [-11.8, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [-14.6, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9583": {
|
||||
"post": [-17.14, 0, -1.02],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": [-29.5, 0, -4.5]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.6667": [0, 0, 0],
|
||||
"1.25": [0, -0.3, 0]
|
||||
}
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": {
|
||||
"0.0": ["15+2*Math.cos((query.anim_time-0.75) * 90 * 1) *0.025", 0, 0],
|
||||
"0.0417": [15.04735, 0, 0],
|
||||
"0.125": {
|
||||
"pre": [20, 0, 0],
|
||||
"post": [20, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": [0, 0, 0],
|
||||
"0.2917": {
|
||||
"pre": [-2.95, 0, 0],
|
||||
"post": [-2.95, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-2.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [12.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": [7.5, 0, 0]
|
||||
}
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": {
|
||||
"0.0": [5, 5, 0],
|
||||
"0.0833": [5, 5, 0],
|
||||
"0.125": {
|
||||
"pre": [5, 12.5, 0],
|
||||
"post": [5, 12.5, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-7.5, -10, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [2.5, -7.5, -5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": [2.5, -7.5, -5],
|
||||
"0.6667": [2.5, -7.5, -5],
|
||||
"1.0": {
|
||||
"pre": [0.5, -7.5, 1.5],
|
||||
"post": [0.5, -7.5, 1.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": [0.5, -7.5, 1.5]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.0833": [0, 0, 0],
|
||||
"0.4167": [0, -0.5, -0.08],
|
||||
"1.0": [0.25, -0.75, -0.25]
|
||||
},
|
||||
"scale": 1
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": {
|
||||
"0.0": [5, -5, 0],
|
||||
"0.0833": [5, -5, 0],
|
||||
"0.125": {
|
||||
"pre": [5, -12.5, 0],
|
||||
"post": [5, -12.5, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-7.5, 10, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [2.5, 7.5, 5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": [2.5, 7.5, 5],
|
||||
"0.6667": [2.5, 7.5, 5],
|
||||
"1.0": {
|
||||
"pre": [2.5, 7.5, 2.5],
|
||||
"post": [2.5, 7.5, 2.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": [2.5, 7.5, 2.5]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.0833": [0, 0, 0],
|
||||
"0.4167": [0, -0.5, -0.08]
|
||||
}
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": {
|
||||
"0.0": ["-2.5-3*Math.cos((query.anim_time-0.25) * 90 * 1) *0.05", -7.5, 0],
|
||||
"0.0833": [-2.54822, -7.5, 0],
|
||||
"0.125": {
|
||||
"pre": [19.95178, -10, 0],
|
||||
"post": [19.95178, -10, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-2.05, 90, 17],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-21.03, 80.89, 17.09],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [32.35, 50.6, 22],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [28.45, 46.5, 26],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": [28.45, 46.5, 26],
|
||||
"1.0417": {
|
||||
"pre": [40.18, 36.5, 36.67],
|
||||
"post": [40.18, 36.5, 36.67],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [72.42, 9, 66],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": [72.42, 9, 66]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {
|
||||
"pre": [0, 0.5, 0.25],
|
||||
"post": [0, 0.5, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": [0, 0.5, 0.25],
|
||||
"0.3333": {
|
||||
"pre": [0, -0.25, 0.25],
|
||||
"post": [0, -0.25, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": [0, -0.25, 0.25],
|
||||
"1.25": {
|
||||
"pre": [0, 0.25, 0.25],
|
||||
"post": [0, 0.25, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": [0, 0.25, 0.25]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [3.47, 0, 1.13],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.0833": {
|
||||
"post": [-7, 0.3, -2.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-12, 0, -3.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [-2.89, 0, -1.77],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [3, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": {
|
||||
"post": [6.12, 0, 1.57],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": [8.28, 0, 3.68],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": [15.78, 0, 4.18]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [0, 0, 0],
|
||||
"0.25": {
|
||||
"pre": [0, 0.25, 0.25],
|
||||
"post": [0, 0.25, 0.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [0, 0.15, 0.15],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": [0, 0, 0],
|
||||
"0.6667": [0, 0, 0],
|
||||
"0.7917": [0, 0, 0],
|
||||
"0.9167": {
|
||||
"pre": [0.05, 0, 0],
|
||||
"post": [0.05, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": [0.25, -0.6, 0]
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.875": [1, 1, 1],
|
||||
"1.1667": {
|
||||
"pre": [1, 0.92, 1],
|
||||
"post": [1, 0.92, 1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": {
|
||||
"post": [1, 0.92, 1],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"head": {
|
||||
"relative_to": {
|
||||
"rotation": "entity"
|
||||
},
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0.01],
|
||||
"0.0833": {
|
||||
"pre": [12.17, 0, 5.33],
|
||||
"post": [12.17, 0, 5.33],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [-7.5, 2.5, 7.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-5, "5-2*math.sin(q.anim_time*90*20+60)", "12.5+1*math.sin(q.anim_time*90*40+60)"],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {
|
||||
"pre": [0, 0, 0.5],
|
||||
"post": [0, 0, 0.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": [0, 0.5, 0.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": [0, 0, 0]
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.0833": {
|
||||
"pre": [1.05, 0.9, 1.05],
|
||||
"post": [1.05, 0.9, 1.05],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": [0.95, 1.2, 0.95],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"stuffing_neck": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0.3, 0]}
|
||||
}
|
||||
},
|
||||
"locator_neck_fluff": {
|
||||
"rotation": [-180, 0, 0]
|
||||
},
|
||||
"stuffing_shoulder_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0.25, 0, 0]}
|
||||
}
|
||||
},
|
||||
"stuffing_arm_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [-0.25, 0, 0]}
|
||||
}
|
||||
},
|
||||
"stuffing_arm_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0.25, 0, 0]}
|
||||
}
|
||||
},
|
||||
"stuffing_shoulder_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [-0.25, 0, 0]}
|
||||
}
|
||||
}
|
||||
},
|
||||
"particle_effects": {
|
||||
"0.1667": {
|
||||
"effect": "substitute_fluff",
|
||||
"locator": "neck_fluff"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.substitute.flop_WIP": {
|
||||
"animation_length": 1.5,
|
||||
"bones": {
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:mood_anger_steam",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/mood/steam_center_double"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, "math.clamp((v.entity_radius*1.2),0.48,0.96)*0.75", 0]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp((v.entity_radius*1.5),0.9,2.4)", "math.clamp((v.entity_radius*0.5),0.3,0.8)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 48,
|
||||
"texture_height": 176,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [48, 16],
|
||||
"step_UV": [0, 16],
|
||||
"max_frame": 11,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:mood_anger_veins",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/mood/vein_red"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_initialization": {
|
||||
"creation_expression": "v.particle_size = math.clamp((v.entity_radius*0.75),0.15,0.4);"
|
||||
},
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"direction": ["math.random(-1,1)", 1.5, "math.random(-1,1)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1.25
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(-1,2)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "v.particle_size*13",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 0.75, 0],
|
||||
"linear_drag_coefficient": "v.particle_size*15"
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp((v.entity_radius*0.75),0.15,0.3)", "math.clamp((v.entity_radius*0.75),0.15,0.3)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 22,
|
||||
"texture_height": 11,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [11, 11],
|
||||
"step_UV": [11, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 2,
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {},
|
||||
"minecraft:particle_appearance_lighting": {},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age/v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.86": "#ffffffff",
|
||||
"1.0": "#FF000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:mood_annoyed",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/mood/scribble_purple"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_initialization": {
|
||||
"creation_expression": "v.particle_size = math.clamp((v.entity_radius*0.75),0.2,0.5);"
|
||||
},
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 2
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"direction": [0, 1, 0]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1
|
||||
},
|
||||
"minecraft:particle_initial_speed": "v.particle_size*10",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": 3
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp((v.entity_radius*0.75),0.2,0.5)", "math.clamp((v.entity_radius*0.75),0.2,0.5)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 168,
|
||||
"texture_height": 14,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [14, 14],
|
||||
"step_UV": [14, 0],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 12
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:mood_stress",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/mood/sweat_blue"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_initialization": {
|
||||
"creation_expression": "v.particle_height = math.clamp((v.entity_radius*1.2),0.48,0.96);"
|
||||
},
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, "math.clamp((v.entity_radius*1.2),0.48,0.96)*0.75", 0]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.45
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp((v.entity_radius*1.2),0.48,0.96)", "math.clamp((v.entity_radius*0.65),0.26,0.52)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 216,
|
||||
"texture_height": 13,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [24, 13],
|
||||
"step_UV": [24, 0],
|
||||
"max_frame": 9,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1222,7 +1222,7 @@
|
||||
"position": [0, 0, "-0.2+math.cos(q.anim_time*90*16/3*2)*0.3"]
|
||||
},
|
||||
"hair2": {
|
||||
"rotation": ["-2.5-math.cos(q.anim_time*90*16/3*2+30)*9", 0, 0]
|
||||
"rotation": ["-1-math.cos(q.anim_time*90*16/3*2+30)*6", 0, 0]
|
||||
},
|
||||
"wings_closed": {
|
||||
"rotation": ["-math.cos(q.anim_time*90*16/3*2-45)*2", 0, "math.sin(q.anim_time*90*16/3)*-1"]
|
||||
@@ -1462,9 +1462,6 @@
|
||||
"bones": {
|
||||
"pidgey": {
|
||||
"position": [0, 0, "20-q.anim_time*16*0.95"]
|
||||
},
|
||||
"head": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -152,6 +152,9 @@
|
||||
},
|
||||
"claw_outer_right": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"wings_open": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -207,6 +207,9 @@
|
||||
},
|
||||
"seat_1": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"wings_open": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1808,6 +1811,9 @@
|
||||
},
|
||||
"seat_1": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"wings_open": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2017,6 +2023,9 @@
|
||||
},
|
||||
"seat_1": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"wings_open": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3618,6 +3627,9 @@
|
||||
},
|
||||
"seat_1": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"wings_open": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -4926,8 +4938,14 @@
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.24": {"pre": [0, 0, 0], "post": [1, 1, 1]},
|
||||
"2.12": {"pre": [1, 1, 1], "post": [0, 0, 0]}
|
||||
"0.24": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
},
|
||||
"2.12": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"wing_open_left2": {
|
||||
@@ -5619,15 +5637,27 @@
|
||||
"pupil_left": {
|
||||
"position": {
|
||||
"0.0": [-0.25, 0, 0],
|
||||
"0.4": {"pre": [-0.25, 0, 0], "post": [0, 0, 0]},
|
||||
"1.4": {"pre": [0, 0, 0], "post": [-0.25, 0, 0]}
|
||||
"0.4": {
|
||||
"pre": [-0.25, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [-0.25, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.4": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0.1, 0, -0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
@@ -5898,8 +5928,14 @@
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.24": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"2.12": {"pre": [0, 0, 0], "post": [1, 1, 1]}
|
||||
"0.24": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"2.12": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"wing_closed_left1": {
|
||||
@@ -6141,15 +6177,27 @@
|
||||
"pupil_right": {
|
||||
"position": {
|
||||
"0.0": [-0.65, 0, 0],
|
||||
"0.4": {"pre": [-0.65, 0, 0], "post": [0, 0, 0]},
|
||||
"1.4": {"pre": [0, 0, 0], "post": [-0.65, 0, 0]}
|
||||
"0.4": {
|
||||
"pre": [-0.65, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [-0.65, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.4": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [-0.1, 0, -0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [-0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"head_angle": {
|
||||
@@ -6161,33 +6209,69 @@
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"1.4": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"scale": {
|
||||
"0.92": [1, 1, 1],
|
||||
"1.32": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"1.68": {"pre": [0, 0, 0], "post": [1, 1, 1]},
|
||||
"1.76": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"2.04": {"pre": [0, 0, 0], "post": [1, 1, 1]}
|
||||
"1.32": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.68": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
},
|
||||
"1.76": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"2.04": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.92": [0, 0, 0],
|
||||
"1.32": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.68": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.76": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.04": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"1.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.68": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.76": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"2.04": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"seat_1": {
|
||||
@@ -6498,8 +6582,14 @@
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.24": {"pre": [0, 0, 0], "post": [1, 1, 1]},
|
||||
"2.12": {"pre": [1, 1, 1], "post": [0, 0, 0]}
|
||||
"0.24": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
},
|
||||
"2.12": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"wing_open_left2": {
|
||||
@@ -7191,15 +7281,27 @@
|
||||
"pupil_left": {
|
||||
"position": {
|
||||
"0.0": [-0.25, 0, 0],
|
||||
"0.4": {"pre": [-0.25, 0, 0], "post": [0, 0, 0]},
|
||||
"1.4": {"pre": [0, 0, 0], "post": [-0.25, 0, 0]}
|
||||
"0.4": {
|
||||
"pre": [-0.25, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [-0.25, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.4": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0.1, 0, -0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"hair2": {
|
||||
@@ -7447,8 +7549,14 @@
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.24": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"2.12": {"pre": [0, 0, 0], "post": [1, 1, 1]}
|
||||
"0.24": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"2.12": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"wing_closed_left1": {
|
||||
@@ -7690,15 +7798,27 @@
|
||||
"pupil_right": {
|
||||
"position": {
|
||||
"0.0": [-0.65, 0, 0],
|
||||
"0.4": {"pre": [-0.65, 0, 0], "post": [0, 0, 0]},
|
||||
"1.4": {"pre": [0, 0, 0], "post": [-0.65, 0, 0]}
|
||||
"0.4": {
|
||||
"pre": [-0.65, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [-0.65, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.4": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [-0.1, 0, -0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [-0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"head_angle": {
|
||||
@@ -7710,29 +7830,53 @@
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"1.4": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.32": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.4": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"scale": {
|
||||
"0.92": [1, 1, 1],
|
||||
"1.32": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"2.04": {"pre": [0, 0, 0], "post": [1, 1, 1]}
|
||||
"1.32": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"2.04": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.92": [0, 0, 0],
|
||||
"1.32": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.04": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"1.32": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"2.04": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"seat_1": {
|
||||
@@ -12788,19 +12932,43 @@
|
||||
"mouth_ditto": {
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.4167": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"0.75": {"pre": [0, 0, 0], "post": [1, 1, 1]},
|
||||
"0.8333": {"pre": [1, 1, 1], "post": [0, 0, 0]},
|
||||
"1.125": {"pre": [0, 0, 0], "post": [1, 1, 1]}
|
||||
"0.4167": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.75": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
},
|
||||
"0.8333": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.125": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.75": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.8333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.4167": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.75": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.8333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.125": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12904,7 +13072,10 @@
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, -0.1],
|
||||
"0.2083": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
@@ -13185,7 +13356,10 @@
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, -0.1],
|
||||
"0.2083": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [-0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"wings": {
|
||||
@@ -13211,13 +13385,19 @@
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.2083": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13228,25 +13408,37 @@
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, -0.1],
|
||||
"0.2083": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, -0.1],
|
||||
"0.2083": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [-0.1, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.2083": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.2083": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
},
|
||||
"animation.chinchou.ground_walk": {
|
||||
"loop": true,
|
||||
"animation_length": 0.79167,
|
||||
"animation_length": 0.7917,
|
||||
"bones": {
|
||||
"stem_left": {
|
||||
"rotation": ["73.8265-0.5*math.sin(q.anim_time*90*10-30)*1", "-21.6937-3*math.sin(q.anim_time*90*5-150)*1", 6.1191]
|
||||
@@ -2294,7 +2294,7 @@
|
||||
}
|
||||
},
|
||||
"animation.chinchou.water_idle_quirk": {
|
||||
"animation_length": 3.79167,
|
||||
"animation_length": 3.7917,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": {
|
||||
@@ -2754,7 +2754,7 @@
|
||||
}
|
||||
},
|
||||
"animation.chinchou.blink": {
|
||||
"animation_length": 0.16667,
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
@@ -2879,29 +2879,10 @@
|
||||
"1.25": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chinchou.ground_walk speed test": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"chinchou": {
|
||||
"position": [0, 0, "-q.anim_time*90*0.12"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chinchou.ground_run speed test": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"chinchou": {
|
||||
"position": [0, 0, "-q.anim_time*90*0.2"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chinchou.water_swim speed test": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"chinchou": {
|
||||
"position": [0, 0, "-q.anim_time*90*0.2"]
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0833": {
|
||||
"effect": "pokemon.chinchou.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"animations": {
|
||||
"animation.metagross.ground_idle": {
|
||||
"loop": true,
|
||||
"animation_length": 0,
|
||||
"animation_length": 8,
|
||||
"bones": {
|
||||
"body2": {
|
||||
"position": [0, -11.9, 0]
|
||||
@@ -54,8 +54,7 @@
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"0.0": ["2+1*math.sin(q.anim_time*90*0.5)", "0.1*math.sin(q.anim_time*90*1-60)", "0.1*math.sin(q.anim_time*90*2-60)"],
|
||||
"11.4167": ["2.5796+1*math.sin(q.anim_time*90*0.5)", "0.3148+0.1*math.sin(q.anim_time*90*1-60)", "2.4153+0.1*math.sin(q.anim_time*90*2-60)"]
|
||||
"0.0": ["2+1*math.sin(q.anim_time*90*0.5)", "0.1*math.sin(q.anim_time*90*1-60)", "0.1*math.sin(q.anim_time*90*2-60)"]
|
||||
},
|
||||
"position": [0, "0.2*math.sin(q.anim_time*90*0.5-60)", 0]
|
||||
}
|
||||
|
||||
@@ -74,14 +74,19 @@
|
||||
"name": "neck",
|
||||
"parent": "torso2",
|
||||
"pivot": [0, 5.25, -7.5],
|
||||
"rotation": [52.5, 0, 0],
|
||||
"rotation": [52.5, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "neck_ai",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 5.25, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 4.75, -9], "size": [5, 5, 5], "inflate": -0.01, "uv": [22, 32]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"parent": "neck_ai",
|
||||
"pivot": [0, 10, -6.5]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "pidgeot",
|
||||
"pivot": [0, 32, 0],
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 32, 0]
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -69,9 +69,9 @@
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 25, 2],
|
||||
"pivot": [0, 22, 2],
|
||||
"locators": {
|
||||
"seat_1": [0, 25, 2]
|
||||
"seat_1": [0, 22, 2]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -119,8 +119,8 @@
|
||||
"cubes": [
|
||||
{"origin": [19, 50, 0], "size": [2, 2, 2], "inflate": 0.01, "uv": [0, 45]},
|
||||
{"origin": [21, 49.5, -0.5], "size": [8, 3, 3], "inflate": 0.01, "uv": [8, 45]},
|
||||
{"origin": [-21, 50, 0], "size": [2, 2, 2], "inflate": 0.01, "pivot": [0, 51, 3.5], "rotation": [0, 0, 0], "uv": [0, 49], "mirror": true},
|
||||
{"origin": [-29, 49.5, -0.5], "size": [8, 3, 3], "inflate": 0.01, "pivot": [0, 51, 3], "rotation": [0, 0, 0], "uv": [8, 51], "mirror": true},
|
||||
{"origin": [-21, 50, 0], "size": [2, 2, 2], "inflate": 0.01, "uv": [0, 49], "mirror": true},
|
||||
{"origin": [-29, 49.5, -0.5], "size": [8, 3, 3], "inflate": 0.01, "uv": [8, 51], "mirror": true},
|
||||
{"origin": [18, 50, 0], "size": [2, 2, 2], "inflate": 0.01, "pivot": [0, 51, 3], "rotation": [0, 0, -55], "uv": [0, 53]},
|
||||
{"origin": [-20, 50, 0], "size": [2, 2, 2], "inflate": 0.01, "pivot": [0, 51, 3.5], "rotation": [0, 0, 55], "uv": [30, 43], "mirror": true},
|
||||
{"origin": [-28, 49.5, -0.5], "size": [8, 3, 3], "inflate": 0.01, "pivot": [0, 51, 3], "rotation": [0, 0, 55], "uv": [58, 46], "mirror": true},
|
||||
@@ -447,14 +447,6 @@
|
||||
"cubes": [
|
||||
{"origin": [0, -24.5, -8], "size": [0, 12, 7], "uv": [98, 109]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "body",
|
||||
"pivot": [0, 54, -10],
|
||||
"locators": {
|
||||
"seat_1": [0, 54, -10]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
"standing": {
|
||||
"poseTypes": ["PORTRAIT", "PROFILE", "STAND", "NONE"],
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 35, -12.5, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 1.5, -12.5, 2.5, -2.5)",
|
||||
"q.bedrock('pidgey', 'ground_idle')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -41,7 +42,8 @@
|
||||
"walk": {
|
||||
"poseTypes": ["WALK"],
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 35, -12.5, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 1.5, -12.5, 2.5, -2.5)",
|
||||
"q.bedrock('pidgey', 'ground_walk')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -70,7 +72,8 @@
|
||||
"poseTypes": ["HOVER", "FLOAT"],
|
||||
"animations": [
|
||||
"q.pitch_tilt('body')",
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 35, -12.5, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 1.5, -12.5, 2.5, -2.5)",
|
||||
"q.bedrock('pidgey', 'air_idle')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -182,7 +185,8 @@
|
||||
"shoulder_left": {
|
||||
"poseTypes": ["SHOULDER_LEFT"],
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 35, -12.5, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 1.5, -12.5, 2.5, -2.5)",
|
||||
"q.bedrock('pidgey', 'shoulder_left')"],
|
||||
"quirks": ["q.bedrock_quirk('pidgey', 'blink')"],
|
||||
"transformedParts": [
|
||||
@@ -211,7 +215,8 @@
|
||||
"shoulder_right": {
|
||||
"poseTypes": ["SHOULDER_RIGHT"],
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 35, -12.5, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 1.5, -12.5, 2.5, -2.5)",
|
||||
"q.bedrock('pidgey', 'shoulder_right')"],
|
||||
"quirks": ["q.bedrock_quirk('pidgey', 'blink')"],
|
||||
"transformedParts": [
|
||||
|
||||
@@ -18,27 +18,10 @@
|
||||
"standing": {
|
||||
"poseTypes": ["PORTRAIT", "PROFILE", "STAND", "NONE"],
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck_ai', 1, 1, 30, -20, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 3.5, -7.5, 1.5, -1.5)",
|
||||
"q.bedrock('pidgeotto', 'ground_idle')"
|
||||
],
|
||||
"transformedParts": [
|
||||
{
|
||||
"part": "wing_open_left",
|
||||
"isVisible": false
|
||||
},
|
||||
{
|
||||
"part": "wing_open_right",
|
||||
"isVisible": false
|
||||
},
|
||||
{
|
||||
"part": "wing_closed_left",
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"part": "wing_closed_right",
|
||||
"isVisible": true
|
||||
}
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('pidgeotto', 'blink')",
|
||||
"q.bedrock_primary_quirk('pidgeotto', 'ground_quirk', 10, 30, 1, q.curve('symmetrical'))"
|
||||
@@ -47,7 +30,8 @@
|
||||
"walk": {
|
||||
"poseTypes": ["WALK"],
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck_ai', 1, 1, 30, -20, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 3.5, -7.5, 1.5, -1.5)",
|
||||
"q.bedrock('pidgeotto', 'ground_walk')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -76,7 +60,8 @@
|
||||
"poseTypes": ["HOVER", "FLOAT"],
|
||||
"animations": [
|
||||
"q.pitch_tilt('body')",
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck_ai', 1, 1, 30, -20, 7.5, -7.5)",
|
||||
"q.look('head_ai', 1, 1, 3.5, -7.5, 1.5, -1.5)",
|
||||
"q.bedrock('pidgeotto', 'air_idle')"
|
||||
],
|
||||
"transformedParts": [
|
||||
|
||||
@@ -24,8 +24,9 @@
|
||||
"isBattle": false,
|
||||
"condition": "!q.is_ridden",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'ground_idle')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -54,31 +55,14 @@
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'battle_idle')"
|
||||
],
|
||||
"namedAnimations": {
|
||||
"cry": "q.bedrock_primary('pidgeot', 'battle_cry', q.curve('symmetrical_wide'))"
|
||||
},
|
||||
"transformedParts": [
|
||||
{
|
||||
"part": "wing_open_left",
|
||||
"isVisible": false
|
||||
},
|
||||
{
|
||||
"part": "wing_open_right",
|
||||
"isVisible": false
|
||||
},
|
||||
{
|
||||
"part": "wing_closed_left",
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"part": "wing_closed_right",
|
||||
"isVisible": true
|
||||
}
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('pidgeot', 'blink')"
|
||||
]
|
||||
@@ -87,8 +71,9 @@
|
||||
"poseTypes": ["WALK"],
|
||||
"condition": "!q.is_ridden",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'ground_walk')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -118,8 +103,9 @@
|
||||
"condition": "!q.is_ridden",
|
||||
"animations": [
|
||||
"q.pitch_tilt('body')",
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'air_idle')"
|
||||
],
|
||||
"transformedParts": [
|
||||
@@ -263,8 +249,9 @@
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'mount_ground_idle')"
|
||||
],
|
||||
"condition": "q.has_entity && q.is_ridden && !q.in_air",
|
||||
@@ -293,8 +280,9 @@
|
||||
"isBattle": false,
|
||||
"condition": "q.is_ridden && !q.is_air && q.has_entity",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'ride_ground_walk')",
|
||||
"q.bedrock('pidgeot', 'mount_ground_walk')"
|
||||
],
|
||||
@@ -322,8 +310,9 @@
|
||||
"poseTypes": ["HOVER"],
|
||||
"condition": "!q.is_gliding && q.is_ridden && q.has_entity",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'ride_air_idle')",
|
||||
"q.bedrock('pidgeot', 'mount_air_idle')"
|
||||
],
|
||||
@@ -353,8 +342,9 @@
|
||||
"poseTypes": ["FLY"],
|
||||
"condition": "!q.is_gliding && q.is_ridden && q.has_entity",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'ride_air_fly')",
|
||||
"q.bedrock('pidgeot', 'mount_air_fly')"
|
||||
],
|
||||
@@ -385,8 +375,9 @@
|
||||
"condition": "q.is_gliding",
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('hair3', -1, 1, 30, -60, 0, 0)",
|
||||
"q.look('neck2', 1, 1, 12.5, -15, 10, -10)",
|
||||
"q.look('head_ai', 1, 1, 1, -7.5, 2.5, -2.5)",
|
||||
"q.look('hair3', -1, 1, 10, -20, 0, 0)",
|
||||
"q.bedrock('pidgeot', 'air_glide')",
|
||||
{
|
||||
"condition": "q.is_ridden",
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'battle_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
@@ -38,7 +39,8 @@
|
||||
"poseTypes": ["HOVER"],
|
||||
"isBattle": true,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'battle_air_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
@@ -53,7 +55,8 @@
|
||||
"condition": "q.has_entity ? !q.in_air : 1.0",
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'ground_idle')",
|
||||
{
|
||||
"condition": "q.is_ridden",
|
||||
@@ -77,7 +80,8 @@
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"condition": "q.has_entity ? !q.in_air && !q.is_sprinting : 1.0",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'ground_walk')",
|
||||
{
|
||||
"condition": "q.is_ridden",
|
||||
@@ -90,7 +94,8 @@
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"condition": "q.has_entity ? !q.in_air && q.is_sprinting : 0.0",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'ground_run')",
|
||||
{
|
||||
"condition": "q.is_ridden",
|
||||
@@ -106,7 +111,8 @@
|
||||
"isBattle": false,
|
||||
"condition": "!q.is_ridden",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'air_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
@@ -118,7 +124,8 @@
|
||||
"isBattle": false,
|
||||
"condition": "q.is_ridden",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'air_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
@@ -131,7 +138,8 @@
|
||||
"isBattle": false,
|
||||
"condition": "!q.is_gliding && !q.is_ridden",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'air_fly')"
|
||||
],
|
||||
"quirks": [
|
||||
@@ -143,7 +151,8 @@
|
||||
"isBattle": false,
|
||||
"condition": "!q.is_gliding && q.is_ridden",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'air_fly')",
|
||||
"q.bedrock('aerodactyl', 'ride_air_fly')"
|
||||
],
|
||||
@@ -157,7 +166,8 @@
|
||||
"isBattle": false,
|
||||
"condition": "q.is_gliding",
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.look('neck', 1, 1, 25, -20, 20, -20)",
|
||||
"q.look('head', 1, 1, 22.5, -10, 15, -15)",
|
||||
"q.bedrock('aerodactyl', 'air_glide')",
|
||||
"q.bedrock('aerodactyl', 'air_dive')",
|
||||
{
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"portraitScale": 1.75,
|
||||
"portraitTranslation": [-0.3, -0.8, 0],
|
||||
"profileScale": 0.65,
|
||||
"profileTranslation": [-0.05, 0.45, 0],
|
||||
"rootBone": "chinchou",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('chinchou', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"portrait": {
|
||||
"poseTypes": ["PORTRAIT", "PROFILE"],
|
||||
"animations": ["q.bedrock('chinchou', 'water_idle')"]
|
||||
},
|
||||
"battle-standing": {
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": ["q.bedrock('chinchou', 'battle_idle')"],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('chinchou', 'blink')"
|
||||
]
|
||||
},
|
||||
"water-battle-standing": {
|
||||
"poseTypes": ["FLOAT"],
|
||||
"isBattle": true,
|
||||
"animations": ["q.bedrock('chinchou', 'water_battle_idle')"],
|
||||
"namedAnimations": {
|
||||
"faint": "q.bedrock('chinchou', 'water_faint', q.curve('one'))"
|
||||
},
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('chinchou', 'blink')"
|
||||
]
|
||||
},
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE"],
|
||||
"isTouchingWater": false,
|
||||
"animations": ["q.bedrock('chinchou', 'ground_idle')"],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('chinchou', 'blink')",
|
||||
"q.bedrock_quirk('chinchou', 'ground_quirk')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK"],
|
||||
"isTouchingWater": false,
|
||||
"animations": ["q.bedrock('chinchou', 'water_swim')"],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('chinchou', 'blink')"
|
||||
]
|
||||
},
|
||||
"floating": {
|
||||
"poseTypes": ["FLOAT"],
|
||||
"isTouchingWater": true,
|
||||
"isUnderWater": true,
|
||||
"animations": ["q.bedrock('chinchou', 'water_idle')"],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('chinchou', 'blink')",
|
||||
"q.bedrock_quirk('chinchou', 'water_idle_quirk')"
|
||||
]
|
||||
},
|
||||
"swimming": {
|
||||
"poseTypes": ["SWIM"],
|
||||
"isTouchingWater": true,
|
||||
"isUnderWater": true,
|
||||
"animations": ["q.bedrock('chinchou', 'water_swim')"],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('chinchou', 'blink')"
|
||||
]
|
||||
},
|
||||
"water-sleeping": {
|
||||
"poseTypes": ["SLEEP"],
|
||||
"isTouchingWater": true,
|
||||
"namedAnimations": {
|
||||
"cry": "q.bedrock_stateful('dummy', 'cry')"
|
||||
},
|
||||
"animations": ["q.bedrock('chinchou', 'water_sleep')"]
|
||||
},
|
||||
"sleeping": {
|
||||
"poseTypes": ["SLEEP"],
|
||||
"isTouchingWater": false,
|
||||
"namedAnimations": {
|
||||
"cry": "q.bedrock_stateful('dummy', 'cry')"
|
||||
},
|
||||
"animations": ["q.bedrock('chinchou', 'sleep')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,15 +26,17 @@
|
||||
"battle-standing": {
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": ["q.bedrock('lanturn', 'battle_idle')"],
|
||||
"isTouchingWater": false,
|
||||
"animations": ["q.bedrock('lanturn', 'ground_battle_idle')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"water-battle-standing": {
|
||||
"poseTypes": ["FLOAT"],
|
||||
"isBattle": true,
|
||||
"isTouchingWater": true,
|
||||
"animations": ["q.bedrock('lanturn', 'water_battle_idle')"],
|
||||
"namedAnimations": {
|
||||
"sleep": "q.bedrock('lanturn', 'water_faint', q.curve('one'))"
|
||||
"faint": "q.bedrock('lanturn', 'water_faint', q.curve('one'))"
|
||||
},
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
@@ -42,42 +44,49 @@
|
||||
"poseTypes": ["STAND", "WALK"],
|
||||
"condition": "q.in_air",
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"],
|
||||
"transformTicks": 3,
|
||||
"transformToTicks": 3
|
||||
},
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE"],
|
||||
"isTouchingWater": false,
|
||||
"animations": ["q.bedrock('lanturn', 'water_idle')"]
|
||||
"animations": ["q.bedrock('lanturn', 'water_idle')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK"],
|
||||
"isTouchingWater": false,
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"]
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"surface-floating": {
|
||||
"poseTypes": ["STAND"],
|
||||
"isTouchingWater": true,
|
||||
"isUnderWater": false,
|
||||
"animations": ["q.bedrock('lanturn', 'water_idle')"]
|
||||
"animations": ["q.bedrock('lanturn', 'water_idle')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"surface-swimming": {
|
||||
"poseTypes": ["WALK"],
|
||||
"isTouchingWater": true,
|
||||
"isUnderWater": false,
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"]
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"floating": {
|
||||
"poseTypes": ["FLOAT"],
|
||||
"isTouchingWater": true,
|
||||
"isUnderWater": true,
|
||||
"animations": ["q.bedrock('lanturn', 'water_idle')"]
|
||||
"animations": ["q.bedrock('lanturn', 'water_idle')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"swimming": {
|
||||
"poseTypes": ["SWIM"],
|
||||
"isTouchingWater": true,
|
||||
"isUnderWater": true,
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"]
|
||||
"animations": ["q.bedrock('lanturn', 'water_swim')"],
|
||||
"quirks": ["q.bedrock_quirk('lanturn', 'blink')"]
|
||||
},
|
||||
"water-sleeping": {
|
||||
"poseTypes": ["SLEEP"],
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"namedAnimations": {
|
||||
"cry": "q.bedrock_primary('smeargle', 'battle_cry')"
|
||||
"cry": "q.bedrock_primary('smeargle', 'battle_cry', q.curve('symmetrical_wide'))"
|
||||
},
|
||||
"animations": ["q.look('head')", "q.bedrock('smeargle', 'battle_idle')"],
|
||||
"quirks": ["q.bedrock_quirk('smeargle', 'blink')"]
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
|
||||
"isBattle": false,
|
||||
"animations": ["q.look('head_ai')", "q.bedrock('snivy', 'ground_idle')"],
|
||||
"quirks": ["q.bedrock_quirk('snivy', 'blink')"]
|
||||
},
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
|
||||
"isBattle": true,
|
||||
"animations": ["q.bedrock('dewpider', 'ground_idle')"]
|
||||
},
|
||||
"walking": {
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
|
||||
"isBattle": true,
|
||||
"animations": ["q.bedrock('araquanid', 'ground_idle')"]
|
||||
},
|
||||
"walking": {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"rootBone": "tadbulb",
|
||||
"animations": {
|
||||
"faint": "q.bedrock_primary('tadbulb', 'faint', q.curve('one'))",
|
||||
"cry": "q.bedrock_stateful('tadbulb', 'cry')",
|
||||
"recoil": "q.bedrock_stateful('tadbulb', 'recoil')",
|
||||
"physical": "q.bedrock_primary('tadbulb', 'physical', q.curve('symmetrical_wide'))",
|
||||
"special": "q.bedrock_primary('tadbulb', 'special', q.curve('symmetrical'))",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"rootBone": "bellibolt",
|
||||
"animations": {
|
||||
"faint": "q.bedrock_primary('bellibolt', 'faint', q.curve('one'))",
|
||||
"cry": "q.bedrock_stateful('bellibolt', 'cry')",
|
||||
"recoil": "q.bedrock_stateful('bellibolt', 'recoil')",
|
||||
"physical": "q.bedrock_primary('bellibolt', 'physical', q.curve('symmetrical_wide'))",
|
||||
"special": "q.bedrock_primary('bellibolt', 'special', q.curve('symmetrical_wide'))",
|
||||
|
||||
@@ -14,6 +14,18 @@
|
||||
"shiny"
|
||||
],
|
||||
"texture": "cobblemon:textures/pokemon/0475_gallade/gallade_shiny.png"
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"alpha_eyes"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "alpha_eyes",
|
||||
"texture": "cobblemon:textures/pokemon/0475_gallade/gallade_alpha.png",
|
||||
"emissive": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -27,6 +27,18 @@
|
||||
"texture": "cobblemon:textures/pokemon/0486_regigigas/regigigas_emissive.png"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"alpha_eyes"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "alpha_eyes",
|
||||
"texture": "cobblemon:textures/pokemon/0486_regigigas/regigigas_alpha.png",
|
||||
"emissive": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
{
|
||||
"name": "translucent",
|
||||
"texture": "cobblemon:textures/pokemon/0751_dewpider/dewpider_translucent.png",
|
||||
"translucent": true
|
||||
"translucent": true,
|
||||
"translucent_cull": true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
{
|
||||
"name": "translucent",
|
||||
"texture": "cobblemon:textures/pokemon/0752_araquanid/araquanid_translucent.png",
|
||||
"translucent": true
|
||||
"translucent": true,
|
||||
"translucent_cull": true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1346,7 +1346,7 @@
|
||||
"sounds": [ { "name": "cobblemon:move/icebeam/icebeam_target_1", "volume": 0.8 } ]
|
||||
},
|
||||
"move.icebeam.target_2": {
|
||||
"sounds": [ { "name": "cobblemon:move/icebeam/icebeam_target_2", "volume": 0.8 } ]
|
||||
"sounds": [ { "name": "cobblemon:move/icebeam/icebeam_target_2", "volume": 0.5 } ]
|
||||
},
|
||||
"move.infestation.actor": {
|
||||
"sounds": [ { "name": "cobblemon:move/infestation/infestation_actor", "volume": 0.8 } ]
|
||||
@@ -1453,6 +1453,51 @@
|
||||
"move.waterpulse.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/waterpulse/waterpulse_target", "volume": 0.8 } ]
|
||||
},
|
||||
"move.leafstorm.actor": {
|
||||
"sounds": [ { "name": "cobblemon:move/leafstorm/leafstorm_actor", "volume": 1.0 } ]
|
||||
},
|
||||
"move.leafstorm.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/leafstorm/leafstorm_target", "volume": 1.0 } ]
|
||||
},
|
||||
"move.suckerpunch.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/suckerpunch/suckerpunch_target", "volume": 1.0 } ]
|
||||
},
|
||||
"move.blizzard.actor": {
|
||||
"sounds": [ { "name": "cobblemon:move/blizzard/blizzard_actor", "volume": 1.0 } ]
|
||||
},
|
||||
"move.blizzard.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/blizzard/blizzard_target", "volume": 1.0 } ]
|
||||
},
|
||||
"move.hydropump.actor": {
|
||||
"sounds": [ { "name": "cobblemon:move/hydropump/hydropump_actor", "volume": 1.0 } ]
|
||||
},
|
||||
"move.hydropump.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/hydropump/hydropump_target", "volume": 1.0 } ]
|
||||
},
|
||||
"move.lightscreen.actor": {
|
||||
"sounds": [ { "name": "cobblemon:move/lightscreen/lightscreen_actor", "volume": 1.0 } ]
|
||||
},
|
||||
"move.playrough.actor_1": {
|
||||
"sounds": [ { "name": "cobblemon:move/playrough/playrough_actor_1", "volume": 1.0 } ]
|
||||
},
|
||||
"move.playrough.actor_2": {
|
||||
"sounds": [ { "name": "cobblemon:move/playrough/playrough_actor_2", "volume": 1.0 } ]
|
||||
},
|
||||
"move.playrough.actor_3": {
|
||||
"sounds": [ { "name": "cobblemon:move/playrough/playrough_actor_3", "volume": 1.0 } ]
|
||||
},
|
||||
"move.playrough.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/playrough/playrough_target", "volume": 1.0 } ]
|
||||
},
|
||||
"move.gigatonhammer.tinkaton": {
|
||||
"sounds": [ { "name": "cobblemon:move/gigatonhammer/gigatonhammer_actor_tinkaton", "volume": 1.0} ]
|
||||
},
|
||||
"move.gigatonhammer.actor": {
|
||||
"sounds": [ { "name": "cobblemon:move/gigatonhammer/gigatonhammer_actor", "volume": 1.0 } ]
|
||||
},
|
||||
"move.gigatonhammer.target": {
|
||||
"sounds": [ { "name": "cobblemon:move/gigatonhammer/gigatonhammer_target", "volume": 1.0 } ]
|
||||
},
|
||||
"impact.normal": {
|
||||
"sounds": [
|
||||
{ "name": "cobblemon:move/impact_generic/impact_generic_fighting_1", "volume": 0.8 },
|
||||
|
||||
|
Before Width: | Height: | Size: 979 B |
|
Before Width: | Height: | Size: 744 B |
|
Before Width: | Height: | Size: 589 B |
|
Before Width: | Height: | Size: 290 B |
|
Before Width: | Height: | Size: 109 B After Width: | Height: | Size: 414 B |
|
After Width: | Height: | Size: 496 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 596 B |
|
After Width: | Height: | Size: 563 B |
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"timeline": [
|
||||
{
|
||||
"type": "entity_particles",
|
||||
"effect": "cobblemon:mood_anger_steam",
|
||||
"locators": ["head", "top"]
|
||||
},
|
||||
{
|
||||
"type": "loop",
|
||||
"condition": "q.entity.has_memory_value('minecraft:angry_at') || q.entity.has_memory_value('minecraft:attack_target') || q.entity.has_memory_value('cobblemon:nearest_visible_attacker')",
|
||||
"keyframe": {
|
||||
"type": "sequence",
|
||||
"keyframes": [
|
||||
{
|
||||
"type": "entity_particles",
|
||||
"effect": "cobblemon:mood_anger_veins",
|
||||
"locators": ["head", "top"]
|
||||
},
|
||||
{
|
||||
"type": "pause",
|
||||
"pause": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"timeline": [
|
||||
{
|
||||
"type": "entity_particles",
|
||||
"effect": "cobblemon:mood_annoyed",
|
||||
"locators": ["head", "top"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"timeline": [
|
||||
{
|
||||
"type": "entity_particles",
|
||||
"effect": "cobblemon:mood_stress",
|
||||
"locators": ["head", "top"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"timeline": [
|
||||
{
|
||||
"type": "add_holds",
|
||||
"holds": ["effects"]
|
||||
},
|
||||
{
|
||||
"type": "animation",
|
||||
"animation": ["gigatonhammer"],
|
||||
"delay": 0.3
|
||||
},
|
||||
{
|
||||
"type": "entity_molang",
|
||||
"entityCondition": "q.entity.is_user == true",
|
||||
"expressions": ["q.sound('move.gigatonhammer.tinkaton');"]
|
||||
},
|
||||
{
|
||||
"type": "pause",
|
||||
"pause": 0.73
|
||||
},
|
||||
{
|
||||
"type": "entity_molang",
|
||||
"entityCondition": "q.entity.is_user == true",
|
||||
"expressions": ["q.sound('move.gigatonhammer.actor');"]
|
||||
},
|
||||
{
|
||||
"type": "pause",
|
||||
"pause": 0.49
|
||||
},
|
||||
{
|
||||
"type": "entity_molang",
|
||||
"entityCondition": "q.entity.is_user == true && q.missed(q.entity.uuid) == false",
|
||||
"expressions": ["q.sound('move.gigatonhammer.target');"]
|
||||
},
|
||||
{
|
||||
"type": "remove_holds",
|
||||
"holds": ["effects"]
|
||||
},
|
||||
{
|
||||
"type": "pause",
|
||||
"pause": 1.5
|
||||
}
|
||||
]
|
||||
}
|
||||