Compare commits
50
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1dcede488 | ||
|
|
aaec9ea397 | ||
|
|
5011607415 | ||
|
|
580b0f2ccf | ||
|
|
fcd3951815 | ||
|
|
5caa6d5950 | ||
|
|
352ac4e15d | ||
|
|
e6d35e709e | ||
|
|
83cfcdce43 | ||
|
|
96ae28ea91 | ||
|
|
062fd2451a | ||
|
|
235de329ee | ||
|
|
aede012933 | ||
|
|
1613cd281d | ||
|
|
706fcc8ca4 | ||
|
|
5568bb6a95 | ||
|
|
d5f22e7394 | ||
|
|
0dc8456623 | ||
|
|
f5228db99f | ||
|
|
de8ebc9fcb | ||
|
|
093e0f2811 | ||
|
|
1a782e4185 | ||
|
|
2e054dd5e1 | ||
|
|
5e47102c10 | ||
|
|
e56a7d5325 | ||
|
|
9b8261d23b | ||
|
|
e1705056f2 | ||
|
|
76db87d9a5 | ||
|
|
780d9ece59 | ||
|
|
4b55783785 | ||
|
|
e3fca67d52 | ||
|
|
932cdaaad3 | ||
|
|
e3f9937e78 | ||
|
|
5b46d04c27 | ||
|
|
c23aeaba78 | ||
|
|
ecff621084 | ||
|
|
83ce63325d | ||
|
|
4f33612bbb | ||
|
|
4624faf63e | ||
|
|
187674afb6 | ||
|
|
fe5cf5a7d8 | ||
|
|
3b3219ba69 | ||
|
|
0e98b07b7b | ||
|
|
57d380e18f | ||
|
|
086cdcdbd1 | ||
|
|
2b796f7e4c | ||
|
|
b7d1f9bb2d | ||
|
|
ba0f0657b2 | ||
|
|
8f59ec871f | ||
|
|
b3d4306165 |
No files matched your search
+10
-1
@@ -18,6 +18,7 @@
|
||||
- Moves impacted by the abilities Pixelate, Refrigerate, Aerilate, Galvanize, and Normalize now display as their altered typing.
|
||||
- Added Polished Tumblestone and Tumblestone Brick block sets from Tumblestone, Black Tumblestone, and Sky Tumblestone.
|
||||
- Added Metronome, Protective Pads, Punching Glove, Room Service, Scope Lens, Shed Shell, Terrain Extender, Throat Spray, Utility Umbrella, Wide Lens, and Zoom Lens held items
|
||||
- Added particles for moves: Watersport, Mud Sport, and Psychic.
|
||||
- Added Fire, Water, Thunder, Leaf, Ice, Sun, Moon, Shiny, Dawn, and Dusk Stone storage blocks.
|
||||
- Added Eject Pack, Metronome, Protective Pads, Punching Glove, Room Service, Scope Lens, Shed Shell, Terrain Extender, Throat Spray, Utility Umbrella, Wide Lens, and Zoom Lens held items
|
||||
- Added `stonjourner_henge_ruins`, `luna_henge_ruins`, and `sol_henge_ruins` structures.
|
||||
@@ -31,10 +32,14 @@
|
||||
- New config setting `displayEntityNameLabel` and `displayEntityLabelsWhenCrouchingOnly` to control what and when is displayed for the pokemon label
|
||||
- `/freezepokemon` command to pause a Pokémon's animation at a specific point in time.
|
||||
- Added `no_ai` and `freeze_frame` options to the `/spawnpokemon` command.
|
||||
- Added `moves` option to Pokémon properties, allowing you to set the moves of a Pokémon in commands and spawn files using comma-separated move names.
|
||||
- Added shiny Pokémon effects.
|
||||
- Added effects for the burn status effect.
|
||||
- Added effects for the moves: Psychic, Water Sport, and Mud Sport.
|
||||
- Added a new universal locator called "top".
|
||||
- Added `moves` option to Pokémon properties, allowing you to set the moves of a Pokémon in commands and spawn files using comma-separated move names.
|
||||
- Added shiny Pokémon effects.
|
||||
- Added effects for the burn status effect.
|
||||
- Added effects for the moves: Seismic Toss, Withdraw, Bite, Crunch, Super Fang, Hyper Fang, Pursuit, Mist, Haze, Lick, Kinesis, Psychic, Water Sport, and Mud Sport.
|
||||
- Added a new universal locator called `top`.
|
||||
- Added shiny Pokémon particles with sound effects.
|
||||
- Added animation for trading.
|
||||
@@ -42,6 +47,8 @@
|
||||
- Added `/spawnnpc` and `/spawnnpcat` commands.
|
||||
- Pokémon are now animated when seen in any GUI that isn't the party GUI.
|
||||
- Quirk animations can now occur for Pokémon that are shoulder mounted.
|
||||
- Added `fishing boat` structures that contain a map to a shipwreck cove and a pokerod smithing template.
|
||||
- Added `submerged_shipwreck_cove` and `lush_shipwreck_cove` structures.
|
||||
|
||||
### Pokémon Added
|
||||
#### Gen 1
|
||||
@@ -394,6 +401,7 @@
|
||||
- Fixed text row selection highlight in battle log.
|
||||
- Fixed top black border rendering in scroll interfaces in summary UI.
|
||||
- Fixed aspect tracking for Advancements.
|
||||
- Fixed illusion not copying aspects or caught ball.
|
||||
|
||||
### Developer
|
||||
- `SpawnCause` is now an implementation of `SpawningInfluence`.
|
||||
@@ -424,6 +432,7 @@
|
||||
- Pokémon Heal (with context)
|
||||
- Added HealingSource, an interface applied to all sources of healing from player actions, for easier tracking of healing sources.
|
||||
- Move Change
|
||||
- Shiny Chance Calculation Event (with player context)
|
||||
- Rebuilt large swaths of the model animation code to simplify it.
|
||||
- Renamed a bunch of things from %Poseable% to %Posable% because spelling.
|
||||
- Renamed StatelessAnimation to PoseAnimation.
|
||||
|
||||
@@ -286,6 +286,8 @@ object Cobblemon {
|
||||
CustomPokemonProperty.register(FreezeFrameProperty)
|
||||
CustomPokemonProperty.register(NoAIProperty)
|
||||
|
||||
CobblemonEvents.POKEMON_PROPERTY_INITIALISED.emit()
|
||||
|
||||
ifDedicatedServer {
|
||||
isDedicatedServer = true
|
||||
}
|
||||
@@ -386,6 +388,9 @@ object Cobblemon {
|
||||
}
|
||||
|
||||
registerEventHandlers()
|
||||
|
||||
CobblemonEvents.COBBLEMON_INITIALISED.emit()
|
||||
|
||||
}
|
||||
|
||||
fun registerEventHandlers() {
|
||||
|
||||
@@ -26,7 +26,7 @@ import net.minecraft.nbt.NbtOps
|
||||
* @author Qu
|
||||
* @since January 9th, 2022
|
||||
*/
|
||||
open class Ability internal constructor(var template: AbilityTemplate, forced: Boolean) {
|
||||
open class Ability internal constructor(var template: AbilityTemplate, forced: Boolean, priority: Priority) {
|
||||
|
||||
val name: String
|
||||
get() = template.name
|
||||
@@ -57,7 +57,7 @@ open class Ability internal constructor(var template: AbilityTemplate, forced: B
|
||||
*
|
||||
* @see [Pokemon.updateAbility].
|
||||
*/
|
||||
var priority = Priority.LOWEST
|
||||
var priority = priority
|
||||
internal set
|
||||
|
||||
@Deprecated("Please use the Codec instead", ReplaceWith("Ability.CODEC"))
|
||||
@@ -111,7 +111,7 @@ open class Ability internal constructor(var template: AbilityTemplate, forced: B
|
||||
Codec.BOOL.optionalFieldOf(DataKeys.POKEMON_ABILITY_FORCED, false).forGetter(Ability::forced),
|
||||
Codec.INT.optionalFieldOf(DataKeys.POKEMON_ABILITY_INDEX, -1).forGetter(Ability::index),
|
||||
Priority.CODEC.optionalFieldOf(DataKeys.POKEMON_ABILITY_PRIORITY, Priority.LOWEST).forGetter(Ability::priority)
|
||||
).apply(it) { template, forced, index, priority -> Ability(template, forced).apply {
|
||||
).apply(it) { template, forced, index, priority -> Ability(template, forced, priority).apply {
|
||||
this.index = index
|
||||
this.priority = priority
|
||||
} }
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.abilities
|
||||
|
||||
import com.cobblemon.mod.common.api.Priority
|
||||
import com.cobblemon.mod.common.util.codec.CodecUtils
|
||||
import com.google.gson.JsonObject
|
||||
import com.mojang.serialization.Codec
|
||||
@@ -21,14 +22,14 @@ import net.minecraft.nbt.CompoundTag
|
||||
*/
|
||||
class AbilityTemplate(
|
||||
val name: String = "",
|
||||
var builder: (AbilityTemplate, forced: Boolean) -> Ability = { template, forced -> Ability(template, forced) },
|
||||
var builder: (AbilityTemplate, forced: Boolean, priority: Priority) -> Ability = { template, forced, priority -> Ability(template, forced, priority) },
|
||||
val displayName: String = "cobblemon.ability.$name",
|
||||
val description: String = "cobblemon.ability.$name.desc"
|
||||
) {
|
||||
/**
|
||||
* Returns the Ability or if applicable the extension connected to this template
|
||||
*/
|
||||
fun create(forced: Boolean = false) = builder(this, forced)
|
||||
fun create(forced: Boolean = false, priority: Priority = Priority.LOWEST) = builder(this, forced, priority)
|
||||
|
||||
/**
|
||||
* Returns the Ability and loads the given NBT Tag into it.
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* 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.battles.interpreter
|
||||
|
||||
import com.cobblemon.mod.common.battles.dispatch.InterpreterInstruction
|
||||
|
||||
/**
|
||||
* An exception thrown when properties from a [BattleMessage] cannot be interpreted for an [InterpreterInstruction].
|
||||
*
|
||||
* @author Segfault Guy
|
||||
* @since November 10th, 2024
|
||||
*/
|
||||
class InvalidInstructionException(battleMessage: BattleMessage) : Exception("Failed to interpret ${battleMessage.rawMessage}")
|
||||
@@ -8,11 +8,13 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.entity.pokemon
|
||||
|
||||
import com.cobblemon.mod.common.api.pokeball.PokeBalls
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.entity.pokemon.effects.IllusionEffect
|
||||
import com.cobblemon.mod.common.entity.pokemon.effects.TransformEffect
|
||||
import com.cobblemon.mod.common.pokeball.PokeBall
|
||||
import com.cobblemon.mod.common.pokemon.FormData
|
||||
import com.cobblemon.mod.common.pokemon.Species
|
||||
import com.cobblemon.mod.common.util.DataKeys
|
||||
@@ -95,4 +97,7 @@ interface MocKEffect : PhysicalEffect {
|
||||
get() = this.mock.form?.let {
|
||||
formID -> this.exposedSpecies?.forms?.firstOrNull { it.formOnlyShowdownId().equals(formID, true) } }
|
||||
?: this.exposedSpecies?.standardForm
|
||||
|
||||
val exposedBall: PokeBall?
|
||||
get() = this.mock.pokeball?.let { PokeBalls.getPokeBall(it.asIdentifierDefaultingNamespace()) }
|
||||
}
|
||||
@@ -54,6 +54,10 @@ import net.minecraft.server.level.ServerPlayer
|
||||
@Suppress("unused")
|
||||
object CobblemonEvents {
|
||||
|
||||
@JvmField
|
||||
val POKEMON_PROPERTY_INITIALISED = SimpleObservable<Unit>()
|
||||
@JvmField
|
||||
val COBBLEMON_INITIALISED = SimpleObservable<Unit>()
|
||||
@JvmField
|
||||
val DATA_SYNCHRONIZED = SimpleObservable<ServerPlayer>()
|
||||
@JvmField
|
||||
@@ -129,6 +133,8 @@ object CobblemonEvents {
|
||||
val POKEMON_ENTITY_SAVE_TO_WORLD = CancelableObservable<PokemonEntitySaveToWorldEvent>()
|
||||
@JvmField
|
||||
val ENTITY_SPAWN = CancelableObservable<SpawnEvent<*>>()
|
||||
@JvmField
|
||||
val SHINY_CHANCE_CALCULATION = EventObservable<ShinyChanceCalculationEvent>()
|
||||
|
||||
@JvmField
|
||||
val POKEMON_ENTITY_SPAWN = ENTITY_SPAWN
|
||||
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* 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.events.pokemon
|
||||
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
|
||||
/**
|
||||
* An event to modify the shiny chance of a Pokémon.
|
||||
*/
|
||||
class ShinyChanceCalculationEvent(
|
||||
val baseChance: Float,
|
||||
val pokemon: Pokemon
|
||||
) {
|
||||
val chance: Float = baseChance
|
||||
var isShiny: Boolean = false
|
||||
private val modifiers = mutableListOf<Float>()
|
||||
private val modificationFunctions = mutableListOf<(Float, ServerPlayer?, Pokemon) -> Float>()
|
||||
|
||||
/**
|
||||
* Adds a modifier to the shiny chance.
|
||||
*/
|
||||
fun addModifier(modifier: Float) {
|
||||
modifiers.add(modifier)
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a function to modify the shiny chance.
|
||||
*/
|
||||
fun addModificationFunction(function: (Float, ServerPlayer?, Pokemon) -> Float) {
|
||||
modificationFunctions.add(function)
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the shiny chance of a Pokémon.
|
||||
*/
|
||||
fun calculate(player: ServerPlayer?): Float {
|
||||
var result = baseChance
|
||||
for (modifier in modifiers) {
|
||||
result += modifier
|
||||
}
|
||||
for (function in modificationFunctions) {
|
||||
result = function(result, player, pokemon)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun isShiny(player: ServerPlayer?): Boolean {
|
||||
return calculate(player) >= chance || isShiny
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.nbt.ListTag
|
||||
import net.minecraft.nbt.StringTag
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.item.Item
|
||||
@@ -87,7 +88,8 @@ data class FishingBait(
|
||||
val BITE_TIME = cobblemonResource("bite_time")
|
||||
val GENDER_CHANCE = cobblemonResource("gender_chance")
|
||||
val LEVEL_RAISE = cobblemonResource("level_raise")
|
||||
val TERA = cobblemonResource("tera")
|
||||
val TYPING = cobblemonResource("typing")
|
||||
val EGG_GROUP = cobblemonResource("egg_group")
|
||||
val SHINY_REROLL = cobblemonResource("shiny_reroll")
|
||||
val HIDDEN_ABILITY_CHANCE = cobblemonResource("ha_chance")
|
||||
val POKEMON_CHANCE = cobblemonResource("pokemon_chance")
|
||||
@@ -108,7 +110,6 @@ data class FishingBait(
|
||||
EFFECT_FUNCTIONS[SHINY_REROLL] = { entity, effect -> FishingSpawnCause.shinyReroll(entity, effect) }
|
||||
EFFECT_FUNCTIONS[GENDER_CHANCE] = { entity, effect -> FishingSpawnCause.alterGenderAttempt(entity, effect) }
|
||||
EFFECT_FUNCTIONS[LEVEL_RAISE] = { entity, effect -> FishingSpawnCause.alterLevelAttempt(entity, effect) }
|
||||
EFFECT_FUNCTIONS[TERA] = { entity, effect -> FishingSpawnCause.alterTeraAttempt(entity, effect) }
|
||||
EFFECT_FUNCTIONS[HIDDEN_ABILITY_CHANCE] = { entity, _ -> FishingSpawnCause.alterHAAttempt(entity) }
|
||||
EFFECT_FUNCTIONS[FRIENDSHIP] = { entity, effect -> FishingSpawnCause.alterFriendshipAttempt(entity, effect) }
|
||||
CobblemonEvents.BAIT_EFFECT_REGISTRATION.post(BaitEffectFunctionRegistryEvent()) { event ->
|
||||
|
||||
+4
-4
@@ -11,12 +11,14 @@ package com.cobblemon.mod.common.api.moves.animations.keyframes
|
||||
import com.cobblemon.mod.common.api.molang.ExpressionLike
|
||||
import com.cobblemon.mod.common.api.moves.animations.ActionEffectContext
|
||||
import com.cobblemon.mod.common.api.moves.animations.EntityProvider
|
||||
import com.cobblemon.mod.common.api.moves.animations.TargetsProvider
|
||||
import com.cobblemon.mod.common.api.moves.animations.UsersProvider
|
||||
import com.cobblemon.mod.common.api.scheduling.delayedFuture
|
||||
import com.cobblemon.mod.common.entity.PosableEntity
|
||||
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormEntityParticlePacket
|
||||
import com.cobblemon.mod.common.util.asExpressionLike
|
||||
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
|
||||
import net.minecraft.commands.arguments.EntityArgument.getPlayers
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
|
||||
@@ -29,9 +31,7 @@ import net.minecraft.server.level.ServerLevel
|
||||
class EntityParticlesActionEffectKeyframe : ConditionalActionEffectKeyframe(), EntityConditionalActionEffectKeyframe {
|
||||
override val entityCondition = "q.entity.is_user".asExpressionLike()
|
||||
var effect: String? = null
|
||||
@Deprecated("Use the locators property instead", ReplaceWith("locators"))
|
||||
var locator: String = "root"
|
||||
var locators: Set<String> = setOf("root")
|
||||
var locators: List<String> = listOf("target")
|
||||
|
||||
val delay: ExpressionLike = "0".asExpressionLike()
|
||||
val visibilityRange = 200
|
||||
@@ -48,7 +48,7 @@ class EntityParticlesActionEffectKeyframe : ConditionalActionEffectKeyframe(), E
|
||||
}?.asIdentifierDefaultingNamespace() ?: return skip()
|
||||
|
||||
entities.filter { it is PosableEntity }.forEach { entity ->
|
||||
val packet = SpawnSnowstormEntityParticlePacket(effectIdentifier, entity.id, (locators + locator).toList())
|
||||
val packet = SpawnSnowstormEntityParticlePacket(effectIdentifier, entity.id, (locators).toList())
|
||||
val players = (entity.level() as ServerLevel).getPlayers { it.distanceTo(entity) <= visibilityRange }
|
||||
packet.sendToPlayers(players)
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ class NPCClass {
|
||||
var variables = mutableMapOf<String, MoValue>() // Questionable whether this should be here.
|
||||
var party: NPCPartyProvider? = null
|
||||
var skill: Int = 0
|
||||
var autoHealParty: Boolean = false
|
||||
var battleTheme: ResourceLocation? = null
|
||||
var ai: MutableList<BrainConfig> = mutableListOf()
|
||||
|
||||
@@ -77,6 +78,7 @@ class NPCClass {
|
||||
buffer.writeString(v.defaultValue)
|
||||
}
|
||||
buffer.writeInt(skill)
|
||||
buffer.writeBoolean(autoHealParty)
|
||||
buffer.writeMapK(size = IntSize.U_BYTE, map = variables) { (key, value) ->
|
||||
buffer.writeString(key)
|
||||
buffer.writeString(value.asString())
|
||||
@@ -116,6 +118,7 @@ class NPCClass {
|
||||
NPCConfigVariable(variableName, displayName, description, type, defaultValue)
|
||||
}.toMutableList()
|
||||
skill = buffer.readInt()
|
||||
autoHealParty = buffer.readBoolean()
|
||||
buffer.readMapK(size = IntSize.U_BYTE, map = variables) {
|
||||
val key = buffer.readString()
|
||||
val value = buffer.readString()
|
||||
|
||||
@@ -29,6 +29,7 @@ class NPCPreset {
|
||||
var hitbox: EntityDimensions? = null
|
||||
var ai: List<BrainConfig>? = null
|
||||
var skill: Int? = null
|
||||
var autoHealParty: Boolean? = null
|
||||
var battleTheme: ResourceLocation? = null
|
||||
|
||||
fun applyTo(npcClass: NPCClass) {
|
||||
@@ -47,6 +48,7 @@ class NPCPreset {
|
||||
names?.let { npcClass.names.addAll(it) }
|
||||
hitbox?.let { npcClass.hitbox = it }
|
||||
skill?.let { npcClass.skill = it }
|
||||
autoHealParty?.let { npcClass.autoHealParty = it }
|
||||
battleTheme?.let { npcClass.battleTheme = it }
|
||||
ai?.let { npcClass.ai.addAll(it) }
|
||||
}
|
||||
|
||||
+2
-2
@@ -8,15 +8,15 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.npc.configuration
|
||||
|
||||
import com.cobblemon.mod.common.api.npc.NPCPartyProvider
|
||||
import com.cobblemon.mod.common.util.DataKeys
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
|
||||
class NPCBattleConfiguration {
|
||||
var canChallenge = false
|
||||
var party: NPCPartyProvider? = null
|
||||
@Deprecated("This is not likely to get used")
|
||||
var simultaneousBattles = false
|
||||
@Deprecated("This is not likely to get used")
|
||||
var healAfterwards = true
|
||||
|
||||
fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
|
||||
+6
-3
@@ -16,7 +16,7 @@ import com.cobblemon.mod.common.util.toProperties
|
||||
import com.google.gson.JsonElement
|
||||
|
||||
/**
|
||||
* A basic party provider that just produces a [StaticNPCParty] based on a list of [PokemonProperties].
|
||||
* A basic party provider that just produces a [NPCPartyStore] based on a simple list of [PokemonProperties].
|
||||
*
|
||||
* @author Hiroku
|
||||
* @since August 19th, 2023
|
||||
@@ -28,12 +28,15 @@ class SimplePartyProvider : NPCPartyProvider {
|
||||
|
||||
@Transient
|
||||
override val type = TYPE
|
||||
@Transient
|
||||
override val isStatic = true
|
||||
override var isStatic = true
|
||||
|
||||
val pokemon = mutableListOf<PokemonProperties>()
|
||||
|
||||
override fun loadFromJSON(json: JsonElement) {
|
||||
val isStatic = json.asJsonObject.get("isStatic")?.asBoolean
|
||||
if (isStatic != null) {
|
||||
this.isStatic = isStatic
|
||||
}
|
||||
val pokemonList = json.asJsonObject.getAsJsonArray("pokemon")
|
||||
pokemonList.forEach {
|
||||
val pokemon = if (it.isJsonPrimitive) {
|
||||
|
||||
@@ -14,6 +14,8 @@ import com.bedrockk.molang.runtime.value.StringValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.abilities.Abilities
|
||||
import com.cobblemon.mod.common.api.abilities.Ability
|
||||
import com.cobblemon.mod.common.api.events.CobblemonEvents
|
||||
import com.cobblemon.mod.common.api.events.pokemon.ShinyChanceCalculationEvent
|
||||
import com.cobblemon.mod.common.api.moves.Moves
|
||||
import com.cobblemon.mod.common.api.pokeball.PokeBalls
|
||||
import com.cobblemon.mod.common.api.pokemon.aspect.AspectProvider
|
||||
@@ -56,6 +58,8 @@ import net.minecraft.nbt.Tag
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.chat.MutableComponent
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.Level
|
||||
|
||||
@@ -573,18 +577,24 @@ open class PokemonProperties {
|
||||
return true
|
||||
}
|
||||
|
||||
fun create(): Pokemon {
|
||||
@JvmOverloads
|
||||
fun create(player: ServerPlayer? = null): Pokemon {
|
||||
val pokemon = Pokemon()
|
||||
apply(pokemon)
|
||||
pokemon.initialize()
|
||||
roll(pokemon)
|
||||
roll(pokemon, player)
|
||||
return pokemon
|
||||
}
|
||||
|
||||
// TEST YOUR LUCK!
|
||||
fun roll(pokemon: Pokemon) {
|
||||
@JvmOverloads
|
||||
fun roll(pokemon: Pokemon, player: ServerPlayer? = null) {
|
||||
val baseTypes = pokemon.form.types.toList()
|
||||
if (this.shiny == null) pokemon.shiny = Cobblemon.config.shinyRate.checkRate()
|
||||
var shinyRate = Cobblemon.config.shinyRate
|
||||
CobblemonEvents.SHINY_CHANCE_CALCULATION.post(ShinyChanceCalculationEvent(shinyRate, pokemon)) { event ->
|
||||
shinyRate = event.calculate(player)
|
||||
}
|
||||
if (this.shiny == null) pokemon.shiny = shinyRate.checkRate()
|
||||
if (this.teraType == null) pokemon.teraType =
|
||||
if (Cobblemon.config.teraTypeRate.checkRate()) {
|
||||
var picked = TeraTypes.random(true)
|
||||
@@ -596,8 +606,9 @@ open class PokemonProperties {
|
||||
else TeraTypes.forElementalType(baseTypes.random())
|
||||
}
|
||||
|
||||
fun createEntity(world: Level): PokemonEntity {
|
||||
return PokemonEntity(world, create()).also { applyCustomProperties(it) }
|
||||
@JvmOverloads
|
||||
fun createEntity(world: Level, player: ServerPlayer? = null): PokemonEntity {
|
||||
return PokemonEntity(world, create(player)).also { applyCustomProperties(it) }
|
||||
}
|
||||
|
||||
// TODO Codecs at some point
|
||||
@@ -783,7 +794,7 @@ open class PokemonProperties {
|
||||
}
|
||||
|
||||
// If the config value is at least 1, then do 1/x and use that as the property chance
|
||||
private fun Float.checkRate(): Boolean = this >= 1 && (Random.Default.nextFloat() < 1 / this)
|
||||
private fun Float.checkRate(): Boolean = if (this >= 1) (Random.Default.nextFloat() < 1 / this) else Random.Default.nextFloat() < this
|
||||
|
||||
/**
|
||||
* Attempts to find an ability by ID and resolve if it should be forced or if it's legal for the given form.
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ fun interface PokemonPropertyExtractor {
|
||||
val EVS = add { pokemon, properties -> properties.evs = pokemon.evs }
|
||||
|
||||
@JvmField
|
||||
val ILLUSION = mutableListOf(SPECIES, FORM, ASPECTS, GENDER, NICKNAME, SHINY)
|
||||
val ILLUSION = mutableListOf(SPECIES, FORM, ASPECTS, GENDER, NICKNAME, SHINY, POKEBALL)
|
||||
@JvmField
|
||||
val TRANSFORM = mutableListOf(SPECIES, FORM, ASPECTS, GENDER)
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ package com.cobblemon.mod.common.api.pokemon.egg
|
||||
*
|
||||
* @property showdownID used for data synchronization with Showdown data format.
|
||||
*/
|
||||
enum class EggGroup(internal val showdownID: String) {
|
||||
enum class EggGroup(val showdownID: String) {
|
||||
|
||||
MONSTER("Monster"),
|
||||
WATER_1("Water 1"),
|
||||
@@ -31,6 +31,16 @@ enum class EggGroup(internal val showdownID: String) {
|
||||
WATER_2("Water 2"),
|
||||
DITTO("Ditto"),
|
||||
DRAGON("Dragon"),
|
||||
UNDISCOVERED("Undiscovered")
|
||||
UNDISCOVERED("Undiscovered");
|
||||
|
||||
companion object {
|
||||
private val identifierMap: Map<String, EggGroup> = entries.associateBy {
|
||||
it.showdownID.lowercase().replace(" ", "_").replace("-", "_")
|
||||
}
|
||||
|
||||
fun fromIdentifier(identifier: String): EggGroup? {
|
||||
val key = identifier.lowercase().replace(" ", "_").replace("-", "_")
|
||||
return identifierMap[key]
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
-2
@@ -10,6 +10,8 @@ package com.cobblemon.mod.common.api.scheduling
|
||||
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import com.cobblemon.mod.common.util.runOnServer
|
||||
import net.minecraft.world.TickRateManager
|
||||
import net.minecraft.world.level.Level
|
||||
|
||||
@Deprecated("Use afterOnServer or afterOnClient; ambiguous side is not good for your health")
|
||||
@JvmOverloads
|
||||
@@ -33,9 +35,13 @@ fun delayedFuture(ticks: Int = 0, seconds: Float = 0F, serverThread: Boolean = f
|
||||
* being completed after the delay does things like entity removal or other thread-unsafe actions.
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun afterOnServer(ticks: Int = 0, seconds: Float = 0F, action: () -> Unit) = ServerTaskTracker.after(seconds + ticks / 20F, action) // TODO this won't work with recent tickmanager changes
|
||||
fun afterOnServer(seconds: Float, action: () -> Unit) = ServerTaskTracker.after(seconds, action)
|
||||
@JvmOverloads
|
||||
fun afterOnClient(ticks: Int = 0, seconds: Float, action: () -> Unit) = ClientTaskTracker.after(seconds + ticks / 20F, action) // TODO this won't work with recent tickmanager changes
|
||||
fun afterOnServer(ticks: Int, level: Level, action: () -> Unit) = ServerTaskTracker.after(ticks / level.tickRateManager().tickrate(), action)
|
||||
@JvmOverloads
|
||||
fun afterOnClient(seconds: Float, action: () -> Unit) = ClientTaskTracker.after(seconds, action)
|
||||
@JvmOverloads
|
||||
fun afterOnClient(ticks: Int, level: Level, action: () -> Unit) = ClientTaskTracker.after(ticks / level.tickRateManager().tickrate(), action)
|
||||
|
||||
@Deprecated("Use lerpOnServer or lerpOnClient, side-ambiguity causes problems now")
|
||||
fun lerp(seconds: Float = 0F, serverThread: Boolean = false, action: (Float) -> Unit) = (if (serverThread) ServerTaskTracker else ClientTaskTracker).lerp(seconds, action = action)
|
||||
|
||||
+4
-1
@@ -15,6 +15,8 @@ import com.cobblemon.mod.common.api.spawning.context.SpawningContext
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.pokemon.feature.SeasonFeatureHandler
|
||||
import com.cobblemon.mod.common.util.weightedSelection
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.player.Player
|
||||
|
||||
/**
|
||||
* A [SpawnAction] that will spawn a single [PokemonEntity].
|
||||
@@ -44,7 +46,8 @@ class PokemonSpawnAction(
|
||||
} else {
|
||||
null
|
||||
}?.createStack(ctx)
|
||||
val entity = props.createEntity(ctx.world)
|
||||
val sourcePlayer = ctx.cause.entity as? ServerPlayer
|
||||
val entity = props.createEntity(ctx.world, sourcePlayer)
|
||||
entity.spawnCause = ctx.cause
|
||||
SeasonFeatureHandler.updateSeason(entity.pokemon, Cobblemon.seasonResolver(ctx.world, ctx.position))
|
||||
if (heldItem != null) {
|
||||
|
||||
+47
-8
@@ -17,6 +17,8 @@ import com.cobblemon.mod.common.api.events.fishing.BobberSpawnPokemonEvent
|
||||
import com.cobblemon.mod.common.api.fishing.FishingBait
|
||||
import com.cobblemon.mod.common.api.pokemon.Natures
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies
|
||||
import com.cobblemon.mod.common.api.pokemon.egg.EggGroup
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.Stat
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.Stats
|
||||
import com.cobblemon.mod.common.api.spawning.SpawnBucket
|
||||
import com.cobblemon.mod.common.api.spawning.SpawnCause
|
||||
@@ -24,6 +26,7 @@ import com.cobblemon.mod.common.api.spawning.context.SpawningContext
|
||||
import com.cobblemon.mod.common.api.spawning.detail.PokemonSpawnDetail
|
||||
import com.cobblemon.mod.common.api.spawning.detail.SpawnDetail
|
||||
import com.cobblemon.mod.common.api.spawning.spawner.Spawner
|
||||
import com.cobblemon.mod.common.api.types.ElementalTypes
|
||||
import com.cobblemon.mod.common.api.types.tera.TeraTypes
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.item.interactive.PokerodItem
|
||||
@@ -101,13 +104,6 @@ class FishingSpawnCause(
|
||||
pokemonEntity.pokemon.level = level
|
||||
}
|
||||
|
||||
fun alterTeraAttempt(pokemonEntity: PokemonEntity, effect: FishingBait.Effect) {
|
||||
if (pokemonEntity.pokemon.teraType == effect.subcategory?.let { TeraTypes.get(it.path) } ||
|
||||
TeraTypes.get(effect.subcategory!!.path) == null) return
|
||||
|
||||
pokemonEntity.pokemon.teraType = TeraTypes.get(effect.subcategory.path)!!
|
||||
}
|
||||
|
||||
fun alterHAAttempt(pokemonEntity: PokemonEntity) {
|
||||
//val species = pokemonEntity.pokemon.species.let { PokemonSpecies.getByName(it.name) } ?: return
|
||||
//val ability = species.abilities.mapping[Priority.LOW]?.first()?.template?.name ?: return
|
||||
@@ -122,7 +118,7 @@ class FishingSpawnCause(
|
||||
.randomOrNull ()
|
||||
?.let { ability ->
|
||||
// No need to force, this is legal
|
||||
pokemonEntity.pokemon.ability = ability.template.create(false)
|
||||
pokemonEntity.pokemon.ability = ability.template.create(false, ability.priority)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -179,6 +175,49 @@ class FishingSpawnCause(
|
||||
}
|
||||
}
|
||||
}
|
||||
// if bait exists and any effects are related to Typing
|
||||
if (bait != null && bait.effects.any{ it.type == FishingBait.Effects.TYPING }){
|
||||
if (detail is PokemonSpawnDetail) {
|
||||
val detailSpecies = detail.pokemon.species?.let { PokemonSpecies.getByName(it) }
|
||||
val baitEffect = bait.effects.firstOrNull { it.type == FishingBait.Effects.TYPING }
|
||||
val baitTypingEffect = baitEffect?.subcategory?.path?.let { ElementalTypes.get(it) }
|
||||
|
||||
if (detailSpecies != null && baitTypingEffect != null) {
|
||||
val isMatchingType = detailSpecies.types.contains(baitTypingEffect)
|
||||
return when {
|
||||
isMatchingType -> super.affectWeight(detail, ctx, weight * baitEffect.value.toFloat()) // multiply weight by multiplier of bait effect if typing is found
|
||||
else -> super.affectWeight(detail, ctx, weight) // use base spawn weight if typing is not same as bait
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if bait exists and any effects are related to Egg Groups
|
||||
if (bait != null && bait.effects.any { it.type == FishingBait.Effects.EGG_GROUP }) {
|
||||
if (detail is PokemonSpawnDetail) {
|
||||
val detailSpecies = detail.pokemon.species?.let { PokemonSpecies.getByName(it) }
|
||||
|
||||
if (detailSpecies != null) {
|
||||
// Collect all the egg group effects
|
||||
val eggGroupEffects = bait.effects.filter { it.type == FishingBait.Effects.EGG_GROUP }
|
||||
|
||||
// Check if any of the egg group effects match the species' egg groups
|
||||
val matchingEffect = eggGroupEffects.firstOrNull { effect ->
|
||||
val effectEggGroupKey = effect.subcategory?.path ?: return@firstOrNull false
|
||||
val eggGroup = EggGroup.fromIdentifier(effectEggGroupKey)
|
||||
if (eggGroup == null) {
|
||||
LOGGER.warn("Unknown egg group identifier: $effectEggGroupKey")
|
||||
return@firstOrNull false
|
||||
}
|
||||
detailSpecies.eggGroups.contains(eggGroup)
|
||||
}
|
||||
|
||||
if (matchingEffect != null) {
|
||||
val multiplier = matchingEffect.value
|
||||
return super.affectWeight(detail, ctx, (weight * multiplier).toFloat())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.affectWeight(detail, ctx, weight)
|
||||
}
|
||||
|
||||
|
||||
@@ -134,12 +134,12 @@ class Toast(
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes [expire] after the specified [ticks].
|
||||
* Invokes [expire] after the specified [seconds].
|
||||
*
|
||||
* @param ticks The number of ticks before the lifecycle of this toast ends.
|
||||
* @param seconds The number of seconds before the lifecycle of this toast ends.
|
||||
*/
|
||||
fun expireAfter(ticks: Int) {
|
||||
afterOnServer(ticks = ticks) {
|
||||
fun expireAfter(seconds: Float) {
|
||||
afterOnServer(seconds = seconds) {
|
||||
this.expire()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -334,12 +334,12 @@ object BattleBuilder {
|
||||
return errors
|
||||
}
|
||||
|
||||
val npcActor = NPCBattleActor(npcEntity, npcParty, npcEntity.skill ?: 0)
|
||||
val npcActor = NPCBattleActor(npcEntity, npcParty, npcEntity.skill ?: npcEntity.npc.skill)
|
||||
// if (npcEntity.battleIds.get().isPresent) {
|
||||
// errors.participantErrors[npcActor] += BattleStartError.alreadyInBattle(npcActor)
|
||||
// }
|
||||
|
||||
if (npcActor.pokemonList.size < battleFormat.battleType.slotsPerActor) {
|
||||
if (npcActor.pokemonList.filter { it.health > 0 }.size < battleFormat.battleType.slotsPerActor) {
|
||||
errors.participantErrors[npcActor] += BattleStartError.insufficientPokemon(
|
||||
actorEntity = npcEntity,
|
||||
requiredCount = battleFormat.battleType.slotsPerActor,
|
||||
|
||||
@@ -9,14 +9,11 @@
|
||||
package com.cobblemon.mod.common.battles
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon.LOGGER
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.BasicContext
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.BattleContext
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.BattleMessage
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.Effect
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.MissingContext
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.*
|
||||
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.EntityBackedBattleActor
|
||||
import com.cobblemon.mod.common.api.text.red
|
||||
import com.cobblemon.mod.common.api.text.yellow
|
||||
import com.cobblemon.mod.common.battles.dispatch.InstructionSet
|
||||
import com.cobblemon.mod.common.battles.dispatch.InterpreterInstruction
|
||||
@@ -63,12 +60,12 @@ object ShowdownInterpreter {
|
||||
updateInstructionParser["-ability"] = { _, instructionSet, message, _ -> AbilityInstruction(instructionSet, message) }
|
||||
updateInstructionParser["-activate"] = { _, instructionSet, message, _ -> ActivateInstruction(instructionSet, message) }
|
||||
updateInstructionParser["bagitem"] = { _, _, message, _ -> BagItemInstruction(message) }
|
||||
updateInstructionParser["-boost"] = { _, instructionSet, message, remainingLines -> BoostInstruction(instructionSet, message, remainingLines, true) }
|
||||
updateInstructionParser["-boost"] = { battle, _, message, _ -> BoostInstruction(battle, message, true) }
|
||||
updateInstructionParser["-block"] = { _, _, message, _ -> BlockInstruction(message) }
|
||||
updateInstructionParser["cant"] = { _, _, message, _ -> CantInstruction(message) }
|
||||
updateInstructionParser["-clearallboost"] = { _, _, message, _ -> ClearAllBoostInstruction(message) }
|
||||
updateInstructionParser["-clearnegativeboost"] = { _, _, message, _ -> ClearNegativeBoostInstruction(message) }
|
||||
updateInstructionParser["-clearboost"] = { _, _, message, _ -> ClearBoostInstruction(message) }
|
||||
updateInstructionParser["-clearboost"] = { _, _, message, _ -> ClearBoostInstruction(message) }
|
||||
updateInstructionParser["-copyboost"] = { _, _, message, _ -> CopyBoostInstruction(message) }
|
||||
updateInstructionParser["-crit"] = { _, instructionSet, message, _ -> CritInstruction(message, instructionSet) }
|
||||
updateInstructionParser["-curestatus"] = { _, _, message, _ -> CureStatusInstruction(message) }
|
||||
@@ -108,7 +105,7 @@ object ShowdownInterpreter {
|
||||
updateInstructionParser["-terastallize"] = { _, _, message, _ -> TerastallizeInstruction(message) }
|
||||
updateInstructionParser["-transform"] = { battle, _, message, _ -> TransformInstruction(battle, message) }
|
||||
updateInstructionParser["turn"] = { _, _, message, _ -> TurnInstruction(message) }
|
||||
updateInstructionParser["-unboost"] = { _, instructionSet, message, remainingLines -> BoostInstruction(instructionSet, message, remainingLines, false) }
|
||||
updateInstructionParser["-unboost"] = { battle, _, message, _ -> BoostInstruction(battle, message, false) }
|
||||
updateInstructionParser["upkeep"] = { _, _, _, _ -> UpkeepInstruction() }
|
||||
updateInstructionParser["-weather"] = { _, _, message, _ -> WeatherInstruction(message) }
|
||||
updateInstructionParser["win"] = { _, _, message, _ -> WinInstruction(message) }
|
||||
@@ -279,8 +276,16 @@ object ShowdownInterpreter {
|
||||
}
|
||||
instructionSet.execute(battle)
|
||||
}
|
||||
catch (e: InvalidInstructionException) {
|
||||
e.message?.let {
|
||||
battle.broadcastChatMessage(it.red())
|
||||
LOGGER.error(it)
|
||||
}
|
||||
|
||||
}
|
||||
catch (e: Exception) {
|
||||
LOGGER.error("Caught exception interpreting {}", e)
|
||||
battle.broadcastChatMessage("A fatal error occurred. Please report to developers.".red())
|
||||
LOGGER.error("Caught exception interpreting battle instructions.", e)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-7
@@ -11,6 +11,7 @@ package com.cobblemon.mod.common.battles.interpreter.instructions
|
||||
import com.bedrockk.molang.runtime.MoLangRuntime
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.BattleContext
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.BattleMessage
|
||||
import com.cobblemon.mod.common.api.battles.interpreter.InvalidInstructionException
|
||||
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
|
||||
import com.cobblemon.mod.common.api.moves.animations.ActionEffectContext
|
||||
import com.cobblemon.mod.common.api.moves.animations.ActionEffects
|
||||
@@ -19,7 +20,6 @@ import com.cobblemon.mod.common.api.pokemon.stats.Stats
|
||||
import com.cobblemon.mod.common.battles.ShowdownInterpreter
|
||||
import com.cobblemon.mod.common.battles.dispatch.ActionEffectInstruction
|
||||
import com.cobblemon.mod.common.battles.dispatch.GO
|
||||
import com.cobblemon.mod.common.battles.dispatch.InstructionSet
|
||||
import com.cobblemon.mod.common.battles.dispatch.UntilDispatch
|
||||
import com.cobblemon.mod.common.util.battleLang
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
@@ -33,19 +33,25 @@ import java.util.concurrent.CompletableFuture
|
||||
* @author Hiroku
|
||||
* @since August 20th, 2022
|
||||
*/
|
||||
class BoostInstruction(val instructionSet: InstructionSet, val message: BattleMessage, val remainingLines: Iterator<BattleMessage>, val isBoost: Boolean = true): ActionEffectInstruction {
|
||||
class BoostInstruction(battle: PokemonBattle, val message: BattleMessage, val isBoost: Boolean = true): ActionEffectInstruction {
|
||||
override var future: CompletableFuture<*> = CompletableFuture.completedFuture(Unit)
|
||||
override var holds = mutableSetOf<String>()
|
||||
override val id = cobblemonResource("boost")
|
||||
|
||||
val pokemon = message.battlePokemon(0, battle) ?: throw InvalidInstructionException(message)
|
||||
val statKey = message.argumentAt(1) ?: throw InvalidInstructionException(message)
|
||||
val stages = message.argumentAt(2)?.toInt() ?: throw InvalidInstructionException(message)
|
||||
val stat = Stats.getStat(statKey).displayName
|
||||
|
||||
override fun preActionEffect(battle: PokemonBattle) {
|
||||
|
||||
}
|
||||
|
||||
override fun runActionEffect(battle: PokemonBattle, runtime: MoLangRuntime) {
|
||||
if (stages == 0) return // only play effect if there was a stat change
|
||||
battle.dispatch {
|
||||
val actionEffect = if (isBoost) BOOST_EFFECT else UNBOOST_EFFECT
|
||||
val providers = mutableListOf<Any>(battle)
|
||||
val pokemon = message.battlePokemon(0, battle) ?: return@dispatch GO
|
||||
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
|
||||
val context = ActionEffectContext(
|
||||
actionEffect = actionEffect,
|
||||
@@ -60,10 +66,6 @@ class BoostInstruction(val instructionSet: InstructionSet, val message: BattleMe
|
||||
}
|
||||
|
||||
override fun postActionEffect(battle: PokemonBattle) {
|
||||
val pokemon = message.battlePokemon(0, battle) ?: return
|
||||
val statKey = message.argumentAt(1) ?: return
|
||||
val stages = message.argumentAt(2)?.toInt() ?: return
|
||||
val stat = Stats.getStat(statKey).displayName
|
||||
val severity = Stats.getSeverity(stages)
|
||||
val rootKey = if (isBoost) "boost" else "unboost"
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ class GildedChestBlock(settings: Properties, val type: Type = Type.RED) : BaseEn
|
||||
world.addFreshEntity(entity)
|
||||
|
||||
world.removeBlock(pos, false)
|
||||
afterOnServer(ticks = 2) {
|
||||
afterOnServer(seconds = 0.1F) {
|
||||
if (player !in player.level().players()) {
|
||||
return@afterOnServer
|
||||
}
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ class FossilMultiblockStructure (
|
||||
stack?.shrink(1)
|
||||
}
|
||||
|
||||
val pokemon = this.resultingFossil?.result?.create()
|
||||
val pokemon = this.resultingFossil?.result?.create(player)
|
||||
|
||||
if(pokemon != null) {
|
||||
pokemon.caughtBall = ballType
|
||||
|
||||
+6
-4
@@ -15,6 +15,7 @@ import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.entity.PokemonSideDelegate
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.addFunctions
|
||||
import com.cobblemon.mod.common.api.pokeball.PokeBalls
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies
|
||||
import com.cobblemon.mod.common.api.scheduling.ScheduledTask
|
||||
import com.cobblemon.mod.common.api.scheduling.SchedulingTracker
|
||||
@@ -31,10 +32,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.repository.Pokem
|
||||
import com.cobblemon.mod.common.client.render.pokemon.PokemonRenderer.Companion.ease
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.MovingSoundInstance
|
||||
import com.cobblemon.mod.common.util.asExpressionLike
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.resolve
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.network.syncher.EntityDataAccessor
|
||||
@@ -106,6 +104,10 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
|
||||
} else if (data == PokemonEntity.ASPECTS) {
|
||||
currentAspects = currentEntity.entityData.get(PokemonEntity.ASPECTS)
|
||||
currentEntity.pokemon.shiny = currentAspects.contains("shiny")
|
||||
} else if (data == PokemonEntity.CAUGHT_BALL) {
|
||||
PokeBalls.getPokeBall(currentEntity.entityData.get(PokemonEntity.CAUGHT_BALL).asIdentifierDefaultingNamespace())?.let {
|
||||
currentEntity.pokemon.caughtBall = it
|
||||
}
|
||||
} else if (data == PokemonEntity.DYING_EFFECTS_STARTED) {
|
||||
val isDying = currentEntity.entityData.get(PokemonEntity.DYING_EFFECTS_STARTED)
|
||||
if (isDying) {
|
||||
|
||||
-87
@@ -1,87 +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.gen4
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
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.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class HappinyModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("happiny")
|
||||
override val leftLeg = getPart("left_foot")
|
||||
override val rightLeg = getPart("right_foot")
|
||||
|
||||
override var portraitScale = 2.09F
|
||||
override var portraitTranslation = Vec3(-0.1, -0.8, 0.0)
|
||||
|
||||
override var profileScale = 0.76F
|
||||
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var battle_idle: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("happiny", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("happiny", "blink") }
|
||||
val hairQuirk = quirk { bedrockStateful("happiny", "hairshake_quirk") }
|
||||
val happy = quirk { bedrockStateful("happiny", "happy_quirk") }
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("happiny", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink, hairQuirk, happy),
|
||||
transformTicks = 10,
|
||||
animations = arrayOf(
|
||||
bedrock("happiny", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
transformTicks = 10,
|
||||
animations = arrayOf(
|
||||
bedrock("happiny", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
battle_idle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
quirks = arrayOf(blink, hairQuirk, happy),
|
||||
transformTicks = 10,
|
||||
condition = { it.isBattling },
|
||||
animations = arrayOf(
|
||||
bedrock("happiny", "battle_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, sleep, battle_idle)) bedrockStateful("happiny", "faint") else null
|
||||
}
|
||||
-1
@@ -169,7 +169,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
|
||||
inbuilt("hitmontop", ::HitmontopModel)
|
||||
inbuilt("electivire", ::ElectivireModel)
|
||||
inbuilt("glaceon", ::GlaceonModel)
|
||||
inbuilt("happiny", ::HappinyModel)
|
||||
inbuilt("leafeon", ::LeafeonModel)
|
||||
inbuilt("lickilicky", ::LickilickyModel)
|
||||
inbuilt("mimejr", ::MimejrModel)
|
||||
|
||||
+1
-1
@@ -136,7 +136,7 @@ abstract class VaryingModelRepository<T : PosableModel> {
|
||||
val jsonObject = gson.fromJson(json, JsonObject::class.java)
|
||||
return {
|
||||
var boneName = jsonObject.getAsJsonPrimitive("rootBone")
|
||||
adapter.modelPart = if (boneName != null && it.children[boneName.asString] != null) it.children[boneName.asString] else it.children[fileName] ?: it.children.values.first()
|
||||
adapter.modelPart = if (boneName != null && it.children[boneName.asString] != null) it.children[boneName.asString] else it.children[fileName] ?: it.children.entries.filter { LocatorAccess.PREFIX !in it.key }.first().value
|
||||
gson.fromJson(jsonObject, poserClass).also {
|
||||
it.poses.forEach { (poseName, pose) -> pose.poseName = poseName }
|
||||
}
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ object CobblemonTooltipGenerator : TooltipGenerator() {
|
||||
val resultLines = mutableListOf<Component>()
|
||||
|
||||
if (stack.item.builtInRegistryHolder().unwrapKey().isPresent && stack.item.builtInRegistryHolder().unwrapKey().get().location().namespace == Cobblemon.MODID) {
|
||||
if (stack.get(DataComponents.HIDE_TOOLTIP) != null) {
|
||||
if (stack.get(DataComponents.HIDE_ADDITIONAL_TOOLTIP) != null) {
|
||||
return null
|
||||
}
|
||||
val language = Language.getInstance()
|
||||
|
||||
+11
-1
@@ -9,6 +9,7 @@
|
||||
package com.cobblemon.mod.common.client.tooltips
|
||||
|
||||
import com.cobblemon.mod.common.api.fishing.FishingBaits
|
||||
import com.cobblemon.mod.common.api.pokemon.egg.EggGroup
|
||||
import com.cobblemon.mod.common.api.text.*
|
||||
import com.cobblemon.mod.common.api.types.ElementalTypes
|
||||
import com.cobblemon.mod.common.item.interactive.PokerodItem
|
||||
@@ -58,7 +59,16 @@ object FishingBaitTooltipGenerator : TooltipGenerator() {
|
||||
|
||||
"gender_chance" -> Genders[Gender.valueOf(effectSubcategory.toUpperCase())]
|
||||
|
||||
"tera" -> ElementalTypes.get(effectSubcategory)?.displayName
|
||||
"typing" -> ElementalTypes.get(effectSubcategory)?.displayName
|
||||
|
||||
"egg_group" -> {
|
||||
val effectSubcategory = effect.subcategory?.path
|
||||
val eggGroup = effectSubcategory?.let { EggGroup.fromIdentifier(it) }
|
||||
eggGroup?.let {
|
||||
val langKey = "egg_group.${it.name.lowercase()}"
|
||||
lang(langKey)
|
||||
} ?: Component.literal(effectSubcategory ?: "Unknown").gold()
|
||||
}
|
||||
|
||||
else -> Component.empty()
|
||||
} ?: Component.literal("cursed").obfuscate()
|
||||
|
||||
@@ -13,6 +13,8 @@ import com.cobblemon.mod.common.datafixer.fix.BlockPosUpdateFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.EvolutionProxyNestingFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.FeatureFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.IvEvToIdentifierFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.MovesetJsonFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.ShoulderStateJsonFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.TeraTypeFix
|
||||
import com.cobblemon.mod.common.datafixer.fix.TradeableMissingFix
|
||||
import com.cobblemon.mod.common.datafixer.schema.CobblemonRootSchema
|
||||
@@ -83,6 +85,8 @@ object CobblemonSchemas {
|
||||
builder.addFixer(ItemStackComponentizationFix(schema1))
|
||||
builder.addFixer(BlockPosUpdateFix(schema1))
|
||||
builder.addFixer(FeatureFix(schema1))
|
||||
builder.addFixer(MovesetJsonFix(schema1))
|
||||
builder.addFixer(ShoulderStateJsonFix(schema1))
|
||||
}
|
||||
|
||||
private class CobblemonDataFixerCodec<R>(private val baseCodec: Codec<R>, private val typeReference: TypeReference) : Codec<R> {
|
||||
@@ -98,7 +102,7 @@ object CobblemonSchemas {
|
||||
.map(Number::toInt)
|
||||
.result()
|
||||
// If none always do op unlike vanilla.
|
||||
.orElse(DATA_VERSION - 1)
|
||||
.orElse(0)
|
||||
val dynamicWithoutVersion = Dynamic(ops, ops.remove(input, VERSION_KEY))
|
||||
val dataFixedDynamic = DATA_FIXER.update(this.typeReference, dynamicWithoutVersion, inputVersion, DATA_VERSION)
|
||||
return this.baseCodec.decode(dataFixedDynamic)
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* 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.datafixer.fix
|
||||
|
||||
import com.mojang.datafixers.schemas.Schema
|
||||
import com.mojang.serialization.Dynamic
|
||||
|
||||
class MovesetJsonFix(output: Schema) : PokemonFix(output) {
|
||||
override fun fixPokemonData(dynamic: Dynamic<*>): Dynamic<*> {
|
||||
val moveSetJson = dynamic.get("MoveSet").asMapOpt().result()
|
||||
//Moveset is probably already a list,
|
||||
if (!moveSetJson.isPresent) {
|
||||
return dynamic
|
||||
}
|
||||
|
||||
return dynamic.set("MoveSet", dynamic.createList(moveSetJson.get().map { it.second }))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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.datafixer.fix
|
||||
|
||||
import com.mojang.datafixers.schemas.Schema
|
||||
import com.mojang.serialization.Dynamic
|
||||
|
||||
class ShoulderStateJsonFix(output: Schema) : PokemonFix(output) {
|
||||
override fun fixPokemonData(dynamic: Dynamic<*>): Dynamic<*> {
|
||||
val moveSetJson = dynamic.get("State").result()
|
||||
//State not here
|
||||
if (moveSetJson.isEmpty) {
|
||||
return dynamic
|
||||
}
|
||||
|
||||
if (moveSetJson.get().mapValues.getOrThrow().size == 0) {
|
||||
return dynamic.remove("State")
|
||||
}
|
||||
|
||||
return dynamic
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -725,7 +725,7 @@ class PokeRodFishingBobberEntity(type: EntityType<out PokeRodFishingBobberEntity
|
||||
hookedEntity = level().getEntity(hookedEntityID)
|
||||
}
|
||||
|
||||
afterOnServer(ticks = 2) {
|
||||
afterOnServer(seconds = 0.1F) {
|
||||
if (player !in player.level().players()) {
|
||||
return@afterOnServer
|
||||
}
|
||||
|
||||
@@ -9,31 +9,28 @@
|
||||
package com.cobblemon.mod.common.entity.npc
|
||||
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.bedrockk.molang.runtime.value.StringValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.AIBattleActor
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.ActorType
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.EntityBackedBattleActor
|
||||
import com.cobblemon.mod.common.api.net.NetworkPacket
|
||||
import com.cobblemon.mod.common.api.storage.party.PartyStore
|
||||
import com.cobblemon.mod.common.battles.ai.RandomBattleAI
|
||||
import com.cobblemon.mod.common.battles.ai.StrongBattleAI
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.net.messages.client.battle.BattleEndPacket
|
||||
import com.cobblemon.mod.common.util.battleLang
|
||||
import com.cobblemon.mod.common.util.chainFutures
|
||||
import com.cobblemon.mod.common.util.effectiveName
|
||||
import com.cobblemon.mod.common.util.update
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
class NPCBattleActor(
|
||||
val npc: NPCEntity,
|
||||
val party: PartyStore,
|
||||
pokemonList: List<BattlePokemon>,
|
||||
val skill: Int
|
||||
) : AIBattleActor(
|
||||
gameId = npc.uuid,
|
||||
pokemonList = party.toBattleTeam(),
|
||||
pokemonList = pokemonList,
|
||||
battleAI = StrongBattleAI(skill)
|
||||
), EntityBackedBattleActor<NPCEntity> {
|
||||
override val entity = npc
|
||||
@@ -42,6 +39,16 @@ class NPCBattleActor(
|
||||
override fun nameOwned(name: String) = battleLang("owned_pokemon", this.getName(), name)
|
||||
override val initialPos = entity.position()
|
||||
|
||||
constructor(
|
||||
npc: NPCEntity,
|
||||
party: PartyStore,
|
||||
skill: Int
|
||||
): this(
|
||||
npc,
|
||||
party.toBattleTeam(healPokemon = npc.npc.autoHealParty),
|
||||
skill
|
||||
)
|
||||
|
||||
override fun setupStruct() {
|
||||
super.setupStruct()
|
||||
struct.addFunction("skill") { DoubleValue(skill) }
|
||||
@@ -51,7 +58,7 @@ class NPCBattleActor(
|
||||
super.sendUpdate(packet)
|
||||
if (packet is BattleEndPacket) {
|
||||
if (npc.isAlive) {
|
||||
val allEntities = party.mapNotNull { it.entity }.toMutableList()
|
||||
val allEntities = pokemonList.mapNotNull { it.entity }.toMutableList()
|
||||
val finalFuture = CompletableFuture<Unit>()
|
||||
chainFutures(allEntities.map { pokemonEntity -> { pokemonEntity.recallWithAnimation() } }.iterator(), finalFuture)
|
||||
if (allEntities.isEmpty()) {
|
||||
@@ -72,11 +79,17 @@ class NPCBattleActor(
|
||||
override fun win(otherWinners: List<BattleActor>, losers: List<BattleActor>) {
|
||||
super.win(otherWinners, losers)
|
||||
npc.playAnimation(NPCEntity.WIN_ANIMATION)
|
||||
if (npc.npc.autoHealParty) {
|
||||
npc.party?.heal()
|
||||
}
|
||||
}
|
||||
|
||||
override fun lose(winners: List<BattleActor>, otherLosers: List<BattleActor>) {
|
||||
super.lose(winners, otherLosers)
|
||||
npc.playAnimation(NPCEntity.LOSE_ANIMATION)
|
||||
if (npc.npc.autoHealParty) {
|
||||
npc.party?.heal()
|
||||
}
|
||||
// winners.forEach {
|
||||
// rewards.forEach {
|
||||
// winner give reward :))
|
||||
|
||||
@@ -113,11 +113,12 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
val level: Int
|
||||
get() = entityData.get(LEVEL)
|
||||
|
||||
var skill: Int? = npc.skill ?: 0 // range from 0 - 5
|
||||
var skill: Int? = null // range from 0 - 5
|
||||
|
||||
var party: NPCPartyStore? = null
|
||||
|
||||
fun getPartyForChallenge(player: ServerPlayer): NPCPartyStore? {
|
||||
val party = this.party
|
||||
return if (party != null) {
|
||||
party
|
||||
} else if (npc.party?.isStatic == false) {
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.cobblemon.mod.common.net.messages.client.sound.UnvalidatedPlaySoundS2
|
||||
import com.cobblemon.mod.common.net.messages.client.spawn.SpawnPokemonPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.InteractPokemonUIPacket
|
||||
import com.cobblemon.mod.common.net.serverhandling.storage.SendOutPokemonHandler.SEND_OUT_DURATION
|
||||
import com.cobblemon.mod.common.pokeball.PokeBall
|
||||
import com.cobblemon.mod.common.pokedex.scanner.PokedexEntityData
|
||||
import com.cobblemon.mod.common.pokedex.scanner.ScannableEntity
|
||||
import com.cobblemon.mod.common.pokemon.FormData
|
||||
@@ -152,6 +153,7 @@ open class PokemonEntity(
|
||||
@JvmStatic val SPAWN_DIRECTION = SynchedEntityData.defineId(PokemonEntity::class.java, EntityDataSerializers.FLOAT)
|
||||
@JvmStatic val FRIENDSHIP = SynchedEntityData.defineId(PokemonEntity::class.java, EntityDataSerializers.INT)
|
||||
@JvmStatic val FREEZE_FRAME = SynchedEntityData.defineId(PokemonEntity::class.java, EntityDataSerializers.FLOAT)
|
||||
@JvmStatic val CAUGHT_BALL = SynchedEntityData.defineId(PokemonEntity::class.java, EntityDataSerializers.STRING)
|
||||
|
||||
const val BATTLE_LOCK = "battle"
|
||||
|
||||
@@ -255,6 +257,9 @@ open class PokemonEntity(
|
||||
/** The aspects exposed to the client */
|
||||
val exposedAspects: Set<String> get() = this.effects.mockEffect?.exposedForm?.aspects?.toSet() ?: this.pokemon.aspects
|
||||
|
||||
/** The pokeball exposed to the client. Used for sendout animation. */
|
||||
val exposedBall: PokeBall get() = this.effects.mockEffect?.exposedBall ?: this.pokemon.caughtBall
|
||||
|
||||
override val struct: QueryStruct = QueryStruct(hashMapOf())
|
||||
.addStandardFunctions()
|
||||
.addEntityFunctions(this)
|
||||
@@ -290,6 +295,7 @@ open class PokemonEntity(
|
||||
builder.define(COUNTS_TOWARDS_SPAWN_CAP, true)
|
||||
builder.define(FRIENDSHIP, 0)
|
||||
builder.define(FREEZE_FRAME, -1F)
|
||||
builder.define(CAUGHT_BALL, "")
|
||||
}
|
||||
|
||||
override fun onSyncedDataUpdated(data: EntityDataAccessor<*>) {
|
||||
@@ -386,7 +392,7 @@ open class PokemonEntity(
|
||||
}
|
||||
//This is so that pokemon in the pasture block are ALWAYS in sync with the pokemon box
|
||||
//Before, pokemon entities in pastures would hold an old ref to a pokemon obj and changes to that would not appear to the underlying file
|
||||
if (this.tethering != null) {
|
||||
if (this.tethering != null && age % 20 == 0) {
|
||||
// Only for online players
|
||||
this.ownerUUID?.let { ownerUUID ->
|
||||
val player = level().getPlayerByUUID(ownerUUID) as? ServerPlayer
|
||||
|
||||
+4
@@ -11,6 +11,7 @@ package com.cobblemon.mod.common.entity.pokemon
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.entity.PokemonSender
|
||||
import com.cobblemon.mod.common.api.entity.PokemonSideDelegate
|
||||
import com.cobblemon.mod.common.api.pokeball.PokeBalls
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.Stats
|
||||
import com.cobblemon.mod.common.api.pokemon.status.Statuses
|
||||
@@ -19,6 +20,7 @@ import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.pokemon.activestate.ActivePokemonState
|
||||
import com.cobblemon.mod.common.pokemon.activestate.SentOutState
|
||||
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
|
||||
import com.cobblemon.mod.common.util.getIsSubmerged
|
||||
import com.cobblemon.mod.common.util.playSoundServer
|
||||
import com.cobblemon.mod.common.util.update
|
||||
@@ -102,6 +104,7 @@ class PokemonServerDelegate : PokemonSideDelegate {
|
||||
val trackedSpecies = mock?.species ?: entity.pokemon.species.resourceIdentifier.toString()
|
||||
val trackedNickname = mock?.nickname ?: entity.pokemon.nickname ?: Component.empty()
|
||||
val trackedAspects = mock?.aspects ?: entity.pokemon.aspects
|
||||
val trackedBall = mock?.pokeball ?: entity.pokemon.caughtBall.name.toString()
|
||||
|
||||
//used getOwnerPlayer().uuid instead of getOwnerUUID() to avoid a potential NPE
|
||||
entity.ownerUUID = entity.pokemon.getOwnerPlayer()?.uuid
|
||||
@@ -113,6 +116,7 @@ class PokemonServerDelegate : PokemonSideDelegate {
|
||||
entity.entityData.set(PokemonEntity.LABEL_LEVEL, entity.pokemon.level)
|
||||
entity.entityData.set(PokemonEntity.MOVING, entity.deltaMovement.multiply(1.0, if (entity.onGround()) 0.0 else 1.0, 1.0).length() > 0.005F)
|
||||
entity.entityData.set(PokemonEntity.FRIENDSHIP, entity.pokemon.friendship)
|
||||
entity.entityData.set(PokemonEntity.CAUGHT_BALL, trackedBall)
|
||||
|
||||
updatePoseType()
|
||||
}
|
||||
|
||||
@@ -223,16 +223,6 @@ class PokerodItem(val pokeRodId: ResourceLocation, settings: Properties) : Fishi
|
||||
PokerodCastEvent.Pre(itemStack, bobberEntity, getBaitStackOnRod(itemStack)),
|
||||
{ event -> return InteractionResultHolder.fail(itemStack) },
|
||||
{ event ->
|
||||
// play the Rod casting sound and set it
|
||||
world.playSoundServer(
|
||||
Vec3(user.x,
|
||||
user.y,
|
||||
user.z),
|
||||
CobblemonSounds.FISHING_ROD_CAST,
|
||||
SoundSource.PLAYERS,
|
||||
1.0f,
|
||||
1.0f / (world.getRandom().nextFloat() * 0.4f + 0.8f)
|
||||
)
|
||||
world.addFreshEntity(bobberEntity)
|
||||
CobblemonCriteria.CAST_POKE_ROD.trigger(user as ServerPlayer, baitOnRod != null)
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ class SpawnPokemonPacket(
|
||||
entity.entityData.get(PokemonEntity.POSE_TYPE),
|
||||
entity.entityData.get(PokemonEntity.UNBATTLEABLE),
|
||||
entity.entityData.get(PokemonEntity.HIDE_LABEL),
|
||||
entity.pokemon.caughtBall.name,
|
||||
entity.exposedBall.name,
|
||||
entity.entityData.get(PokemonEntity.SPAWN_DIRECTION),
|
||||
entity.entityData.get(PokemonEntity.FRIENDSHIP),
|
||||
entity.entityData.get(PokemonEntity.FREEZE_FRAME),
|
||||
|
||||
@@ -10,7 +10,9 @@ package com.cobblemon.mod.common.pokedex.scanner
|
||||
|
||||
import com.cobblemon.mod.common.pokedex.scanner.PokedexUsageContext.Companion.BLOCK_LENGTH_PER_ZOOM_STAGE
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.level.ClipContext
|
||||
import net.minecraft.world.phys.AABB
|
||||
import net.minecraft.world.phys.HitResult
|
||||
|
||||
//Handles the actual raycasting to figure out what pokemon we are looking at
|
||||
object PokemonScanner {
|
||||
@@ -71,6 +73,21 @@ object PokemonScanner {
|
||||
closestEntity = entity
|
||||
closestDistance = distanceToEntity
|
||||
}
|
||||
if (closestEntity != null) {
|
||||
// Check if the view path collides with a solid block along the path
|
||||
val pathCollidesWithBlock = castingEntity.level().clip(
|
||||
ClipContext(
|
||||
eyePos,
|
||||
intersection.get(),
|
||||
ClipContext.Block.COLLIDER,
|
||||
ClipContext.Fluid.NONE,
|
||||
castingEntity
|
||||
)).type == HitResult.Type.BLOCK
|
||||
if (pathCollidesWithBlock) {
|
||||
// Targeted entity is obscured by a solid block
|
||||
closestEntity = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return closestEntity
|
||||
|
||||
@@ -509,7 +509,7 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
internal var heldItem: ItemStack = ItemStack.EMPTY
|
||||
|
||||
init {
|
||||
storeCoordinates.subscribe { if (it != null && it.store !is PCStore && this.tetheringId != null) afterOnServer(ticks = 1) { this.tetheringId = null } }
|
||||
storeCoordinates.subscribe { if (it != null && it.store !is PCStore && this.tetheringId != null) afterOnServer(seconds = 0.05F) { this.tetheringId = null } }
|
||||
storeCoordinates.subscribe {
|
||||
it?.store?.getObservingPlayers()?.forEach {
|
||||
CobblemonEvents.POKEMON_GAINED.post(PokemonGainedEvent(it.uuid, this))
|
||||
|
||||
@@ -56,7 +56,7 @@ open class CobblemonStarterHandler : StarterHandler {
|
||||
}
|
||||
|
||||
val properties = category.pokemon[index]
|
||||
val pokemon = properties.create()
|
||||
val pokemon = properties.create(player)
|
||||
|
||||
CobblemonEvents.STARTER_CHOSEN.postThen(StarterChosenEvent(player, properties, pokemon)) {
|
||||
Cobblemon.storage.getParty(player).add(
|
||||
|
||||
@@ -67,8 +67,8 @@ object TradeManager : RequestManager<TradeManager.TradeRequest>() {
|
||||
override fun onAccept(request: TradeRequest) {
|
||||
val trade = ActiveTrade(PlayerTradeParticipant(request.receiver), PlayerTradeParticipant(request.sender))
|
||||
activeTrades.add(trade)
|
||||
request.sendToSender(TradeStartedPacket(request.sender.uuid, request.sender.name.copy(), trade.player2.party.mapNullPreserving(::TradeablePokemon)))
|
||||
request.sendToReceiver(TradeStartedPacket(request.receiver.uuid, request.receiver.name.copy(), trade.player1.party.mapNullPreserving(::TradeablePokemon)))
|
||||
request.sendToSender(TradeStartedPacket(request.sender.uuid, request.sender.name.copy(), trade.player1.party.mapNullPreserving(::TradeablePokemon)))
|
||||
request.sendToReceiver(TradeStartedPacket(request.receiver.uuid, request.receiver.name.copy(), trade.player2.party.mapNullPreserving(::TradeablePokemon)))
|
||||
}
|
||||
|
||||
override fun canAccept(request: TradeRequest): Boolean {
|
||||
|
||||
@@ -69,6 +69,7 @@ object NPCClassAdapter : JsonDeserializer<NPCClass> {
|
||||
}
|
||||
obj.get("party")?.let { npcClass.party = ctx.deserialize(it, NPCPartyProvider::class.java) }
|
||||
obj.get("skill")?.let { npcClass.skill = it.asInt }
|
||||
obj.get("autoHealParty")?.let { npcClass.autoHealParty = it.asBoolean }
|
||||
obj.get("battleTheme")?.let { npcClass.battleTheme = it.asString.asIdentifierDefaultingNamespace() }
|
||||
obj.get("ai")?.let { npcClass.ai.addAll(it.asJsonArray.map<JsonElement, BrainConfig> { ctx.deserialize(it, BrainConfig::class.java) }.toMutableList()) }
|
||||
|
||||
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.seismictoss.actor": {
|
||||
"animation_length": 4,
|
||||
"bones": {
|
||||
"root_part": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [0, 0, -3],
|
||||
"0.25": [0, 0, -14],
|
||||
"0.375": [0, 0, -30],
|
||||
"0.5": [0, 0, -30],
|
||||
"3.375": [0, 0, -10],
|
||||
"3.4583": [0, 0, -4],
|
||||
"3.5833": [0, 0, 0]
|
||||
},
|
||||
"scale": {
|
||||
"0.1667": [1, 1, 1],
|
||||
"0.2083": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.25": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
},
|
||||
"0.2917": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.3333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
},
|
||||
"0.375": {
|
||||
"pre": [1, 1, 1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"3.375": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.seismictoss.target": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"root_part": {
|
||||
"position": {
|
||||
"0.0": ["math.sin(q.anim_time*90*360)*1", 0, 0],
|
||||
"0.2917": [0, 0, 0],
|
||||
"0.4167": [0, 0, 0],
|
||||
"0.625": [0, 250, 0],
|
||||
"0.75": [0, 300, 0],
|
||||
"2.0": [0, 300, 0],
|
||||
"2.0833": [0, 250, 0],
|
||||
"2.25": [0, 0, 0],
|
||||
"2.2917": [0, -1, 0],
|
||||
"2.3333": [0, 0, 0]
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.4167": [1, 1, 1],
|
||||
"0.4583": [0.5, 2.5, 0.5],
|
||||
"0.6667": [0, 3, 0],
|
||||
"2.0": [0, 3, 0],
|
||||
"2.25": [0.75, 2, 0.75],
|
||||
"2.2917": ["1-math.sin(q.anim_time*90*60)*0.7", "1+math.sin(q.anim_time*90*60)*0.4", "1-math.sin(q.anim_time*90*60)*0.7"],
|
||||
"2.9583": [1, 1, 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
"events": {
|
||||
"paraSparks": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:status.nonvolatile.paralysis.actor"
|
||||
"event_name": "cobblemon:status.paralysis.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
"events": {
|
||||
"poisonHit": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:status.nonvolatile.poison.actor"
|
||||
"event_name": "cobblemon:status.poison.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
"events": {
|
||||
"toxicHit": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:status.nonvolatile.toxpoison.actor"
|
||||
"event_name": "cobblemon:status.badlypoison.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:bite_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/bite"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.25]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.55
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.9, 0.9],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 320,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [32, 32],
|
||||
"step_UV": [0, 32],
|
||||
"frames_per_second": 18,
|
||||
"max_frame": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#002A1E11",
|
||||
"0.12": "#FFFFF1D3",
|
||||
"0.54": "#FFFFF1D3",
|
||||
"1.0": "#002A1E11"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:bite_targetspark",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/critical_hit"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.bitespark": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.87, 1, 0.5, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 14
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -0.25],
|
||||
"radius": 0.025,
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.35
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.75,4.55)*3",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -5, 0],
|
||||
"linear_drag_coefficient": 4
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.1*v.bitespark", "0.1*v.bitespark"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 8,
|
||||
"uv": [0, 0],
|
||||
"uv_size": [7, 7]
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FF291C0E",
|
||||
"0.27": "#FFFFDCA1",
|
||||
"1.0": "#FF291C0E"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:crunch_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/bite"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.25]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.55
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [1.05, 1.05],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 320,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [32, 32],
|
||||
"step_UV": [0, 32],
|
||||
"frames_per_second": 18,
|
||||
"max_frame": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00111E2A",
|
||||
"0.1": "#FF8D97A9",
|
||||
"0.63": "#FF8D97A9",
|
||||
"1.0": "#00FF0000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:crunch_targetrocks",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/impact-rockgrey"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.scale": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [1, 1, 0.92, 0.58, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 16
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.2],
|
||||
"direction": ["math.random(-0.61,0.61)", "math.random(-0.45,2.05)", "math.random(-0.61,0.61)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(0.85, 1.65)*0.65"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random(0,360)"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(6.5,11.5)*1.0",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -30, 0],
|
||||
"linear_drag_coefficient": 1
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.2-(v.particle_random_1*0.1)) * variable.scale", "(0.2-(v.particle_random_1*0.1)) * variable.scale"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 56,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [0, 8],
|
||||
"frames_per_second": 20,
|
||||
"max_frame": 7,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_drag": 1.5,
|
||||
"coefficient_of_restitution": 0.7,
|
||||
"collision_radius": 0.1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:crunch_targetspark",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/critical_hit"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.bitespark": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.91, 1, 0.25, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 24
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -0.25],
|
||||
"radius": 0.025,
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.7
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.75,4.05)*4",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -8, 0],
|
||||
"linear_drag_coefficient": 4
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.1*v.bitespark", "0.1*v.bitespark"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 8,
|
||||
"uv": [0, 0],
|
||||
"uv_size": [7, 7]
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FF3F000F",
|
||||
"0.29": "#FFD94066",
|
||||
"0.57": "#FFB82347",
|
||||
"0.9": "#00881D35",
|
||||
"1.0": "#00881D35"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:haze_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/poof"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.gassize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 1, 1, 1]
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.haze.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 180,
|
||||
"max_particles": 1000
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "event_sound"
|
||||
},
|
||||
"minecraft:emitter_shape_point": {},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(1.25,1.75)"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.25,4.45)*1.5",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1.5, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.2*v.gassize", "0.2*v.gassize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 8,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#50030404",
|
||||
"0.31": "#A00D1217",
|
||||
"0.67": "#A0091016",
|
||||
"1.0": "#00021026"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:haze_actorshroud",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/poof"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.gassize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 1, 1, 1]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 140,
|
||||
"max_particles": 1000
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 2.25
|
||||
},
|
||||
"minecraft:emitter_shape_disc": {
|
||||
"offset": [0, "math.random(0,6)", -2],
|
||||
"radius": 8,
|
||||
"direction": ["math.random(-1,1)", "math.random(0,1)", "math.random(-1,1)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(1.25,1.75)"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.25,4.45)*0.1",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.25*v.gassize", "0.25*v.gassize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 8,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#50030404",
|
||||
"0.31": "#A00D1217",
|
||||
"0.67": "#A0091016",
|
||||
"1.0": "#00021026"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:hyperfang_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/fang"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.25]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.55
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [1, 1],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 192,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [32, 32],
|
||||
"step_UV": [0, 32],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 6
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00FF0000",
|
||||
"0.16": "#FFFFF06F",
|
||||
"0.54": "#FFFFC25D",
|
||||
"1.0": "#00FF0000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:hyperfang_targetdot",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/xs-fadeorb"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.bitespark": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.87, 1, 0.5, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 9
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -0.25],
|
||||
"radius": 0.01,
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.45
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.0,2.5)*3",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -3, 0],
|
||||
"linear_drag_coefficient": 4
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.1*v.bitespark", "0.1*v.bitespark"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 45,
|
||||
"texture_height": 5,
|
||||
"flipbook": {
|
||||
"base_UV": [5, 0],
|
||||
"size_UV": [5, 5],
|
||||
"step_UV": [5, 0],
|
||||
"frames_per_second": 12,
|
||||
"max_frame": 8,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FFFF8500",
|
||||
"0.27": "#FFFFE100",
|
||||
"1.0": "#00FF0000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:hyperfang_targetspark",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/critical_hit"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.bitespark": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.87, 1, 0.5, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 14
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -0.25],
|
||||
"radius": 0.025,
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.45
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1,3)*4",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.125*v.bitespark", "0.125*v.bitespark"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 8,
|
||||
"uv": [0, 0],
|
||||
"uv_size": [7, 7]
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FFFF8500",
|
||||
"0.27": "#FFFFE100",
|
||||
"1.0": "#00FF0000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:hypnosis_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/psyring1"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 5,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": ["math.random(-0.03,0.03)", "math.random(-0.03,0.03)", -0.3],
|
||||
"direction": ["math.random(-1,1)*0.2", "math.random(-1,1)*0.2", -10]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.8
|
||||
},
|
||||
"minecraft:particle_initial_speed": 1.25,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": -0.25
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.25+(v.particle_age*0.5)", "0.25+(v.particle_age*0.5)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 117,
|
||||
"texture_height": 13,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [13, 13],
|
||||
"step_UV": [13, 0],
|
||||
"frames_per_second": 12,
|
||||
"max_frame": 9,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FFC377FF",
|
||||
"0.8": "#A09148FF",
|
||||
"1.0": "#009148FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:hypnosis_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/spiral"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": "math.clamp(8*q.entity_height,4,24)"
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 0.1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"radius": "(q.entity_radius*1.15)/math.clamp(q.entity_scale*1.1-0.1,1,9)",
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.95
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": 2,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1.5, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.225, 0.225],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 8,
|
||||
"max_frame": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00AE00FF",
|
||||
"0.25": "#A0FF51CD",
|
||||
"0.45": "#C0FF87E9",
|
||||
"0.6": "#D0DD00FF",
|
||||
"0.75": "#A0B702FF",
|
||||
"1.0": "#009600FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:hypnosis_targetimpact",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/psyspiral"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.spiralsize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.5, 0.82, 0.95, 1, 1]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-(q.entity_radius*1.375)/math.clamp(q.entity_scale*1.1-0.1,1,9)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.8
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.75*v.spiralsize", "0.75*v.spiralsize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 192,
|
||||
"texture_height": 24,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [24, 24],
|
||||
"step_UV": [24, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 8,
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FFC377FF",
|
||||
"0.8": "#A09148FF",
|
||||
"1.0": "#009148FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:kinesis_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/spoon"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-1.1/math.clamp(q.entity_scale*1.1-0.1,1,3)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 2
|
||||
},
|
||||
"minecraft:particle_motion_parametric": {
|
||||
"relative_position": [0, "math.sin(v.particle_age*300)*0.05", 0]
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.37, 0.4],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 42,
|
||||
"texture_height": 15,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [14, 15],
|
||||
"step_UV": [14, 0],
|
||||
"frames_per_second": 4,
|
||||
"max_frame": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00FF008D",
|
||||
"0.2": "#ffffffff",
|
||||
"0.8": "#ffffffff",
|
||||
"1.0": "#00FF008D"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:kinesis_actorspiral",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/spiral"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 7,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.75
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, "-1.1/math.clamp(q.entity_scale*1.1-0.1,1,3)"],
|
||||
"radius": 0.5,
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.95
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": 1,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1.5, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.2, 0.2],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 8,
|
||||
"max_frame": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00AE00FF",
|
||||
"0.25": "#A0FF51CD",
|
||||
"0.45": "#C0FF87E9",
|
||||
"0.6": "#D0DD00FF",
|
||||
"0.75": "#A0B702FF",
|
||||
"1.0": "#009600FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:lick_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/lick"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.lick.target"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0.1, -0.2]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.5
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.18, 0.6],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 42,
|
||||
"texture_height": 20,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [6, 20],
|
||||
"step_UV": [6, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 7,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FFFFFFFF",
|
||||
"0.65": "#FFFFFFFF",
|
||||
"1.0": "#00FFFFFF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:lick_targetdrip",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/splash"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.dousefade": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [1, 1, 1, 1, 1, 1, 1, 0.87, 0.57, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 6,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0.1, -0.15],
|
||||
"radius": "0.375/math.clamp(q.entity_scale*1.1-0.07,1,2)",
|
||||
"surface_only": true
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 2
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, "-v.particle_age*7", 0]
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.06*v.dousefade", "0.04*v.dousefade"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 12,
|
||||
"texture_height": 2,
|
||||
"flipbook": {
|
||||
"base_UV": ["math.random_integer(0,1)*3", 0],
|
||||
"size_UV": [3, 2],
|
||||
"step_UV": [3, 0],
|
||||
"frames_per_second": 1.5,
|
||||
"max_frame": 4
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_drag": 0.5,
|
||||
"coefficient_of_restitution": 0.2,
|
||||
"collision_radius": 0.01
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": [1, 1, 1, 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:lick_targetsplash",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/splash"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.dousefade": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [1, 1, 1, 1, 1, 1, 1, 0.87, 0.57, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 12
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0.1, -0.15],
|
||||
"radius": "0.1/math.clamp(q.entity_scale*1.1-0.07,1,2)",
|
||||
"surface_only": true,
|
||||
"direction": ["math.random(-15,15)", "math.random(-20,50)", "math.random(-15,15)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.65
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(4,12)",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -16, 0],
|
||||
"linear_drag_coefficient": 4
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.06*v.dousefade", "0.04*v.dousefade"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 12,
|
||||
"texture_height": 2,
|
||||
"flipbook": {
|
||||
"base_UV": ["math.random_integer(0,1)*3", 0],
|
||||
"size_UV": [3, 2],
|
||||
"step_UV": [3, 0],
|
||||
"frames_per_second": 3,
|
||||
"max_frame": 4
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_drag": 0.5,
|
||||
"coefficient_of_restitution": 0.85,
|
||||
"collision_radius": 0.01
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": [1, 1, 1, 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:mist_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/poof"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.gassize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 1, 1, 1]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 180,
|
||||
"max_particles": 1000
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_shape_point": {},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(1.25,1.75)"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.25,4.45)*1.5",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1.5, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.2*v.gassize", "0.2*v.gassize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 8,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#38FFFFFF",
|
||||
"0.28": "#A0DCF6FF",
|
||||
"0.67": "#A0B5E7FF",
|
||||
"1.0": "#005897FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:mist_actorshroud",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/poof"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.gassize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 1, 1, 1]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 140,
|
||||
"max_particles": 1000
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 2.25
|
||||
},
|
||||
"minecraft:emitter_shape_disc": {
|
||||
"offset": [0, "math.random(0,6)", -2],
|
||||
"radius": 8,
|
||||
"direction": ["math.random(-1,1)", "math.random(0,1)", "math.random(-1,1)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(1.25,1.75)"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.25,4.45)*0.1",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.25*v.gassize", "0.25*v.gassize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 8,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#38FFFFFF",
|
||||
"0.28": "#A0DCF6FF",
|
||||
"0.67": "#A0B5E7FF",
|
||||
"1.0": "#005897FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:pursuit_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/pursuit"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.pursuit.target"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 3,
|
||||
"max_particles": 2
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.75
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "event_sound"
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-0.3/math.clamp(q.entity_scale*1.1-0.1,1,9)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.75, 0.75],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 210,
|
||||
"texture_height": 21,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [21, 21],
|
||||
"step_UV": [21, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 10,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:pursuit_targetdots",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/xs-fadeorb"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 20
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, "-0.25/math.clamp(q.entity_scale*1.1-0.1,1,9)"],
|
||||
"radius": "0.025/math.clamp(q.entity_scale*1.1-0.1,1,3)",
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(2.1,6.3)",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": 1.5
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.1-(v.particle_random_1*0.05)", "0.1-(v.particle_random_1*0.05)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 45,
|
||||
"texture_height": 5,
|
||||
"flipbook": {
|
||||
"base_UV": [15, 0],
|
||||
"size_UV": [5, 5],
|
||||
"step_UV": [5, 0],
|
||||
"frames_per_second": 12,
|
||||
"max_frame": 6,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FF697BB8",
|
||||
"0.72": "#FF1F294B",
|
||||
"1.0": "#00588DFF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:pursuit_targethit",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/hit"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-0.2/math.clamp(q.entity_scale*1.1-0.1,1,9)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.2
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,1)*90"
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [1, 1],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 160,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [32, 32],
|
||||
"step_UV": [0, 32],
|
||||
"frames_per_second": 24,
|
||||
"max_frame": 5,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FF697BB8",
|
||||
"1.0": "#FF1F294B"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/quickattack_dashlines"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.qsquish": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 100,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.25
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -1],
|
||||
"radius": "math.clamp(query.entity_radius,1,50)",
|
||||
"direction": [0, 0, 1]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.2
|
||||
},
|
||||
"minecraft:particle_initial_speed": "9+v.particle_age",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 0, 1]
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.2*v.qsquish", 0.02],
|
||||
"facing_camera_mode": "lookat_direction",
|
||||
"uv": {
|
||||
"texture_width": 14,
|
||||
"texture_height": 1,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [2, 1],
|
||||
"step_UV": [2, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 7
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.17": "#FFFFC58D",
|
||||
"0.5": "#FFFFFBB4",
|
||||
"0.86": "#FFFFA372"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_actorgrab",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/grab"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.grabshrink": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [1, 0.75, 0.6, 0.52, 0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.3]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.5
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(q.entity_height,0.1,1.5)*v.grabshrink", "math.clamp(q.entity_height,0.1,1.5)*v.grabshrink"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 598,
|
||||
"texture_height": 23,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [23, 23],
|
||||
"step_UV": [46, 0],
|
||||
"frames_per_second": 24,
|
||||
"max_frame": 26
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00FFFFFF",
|
||||
"0.3": "#ffffffff",
|
||||
"0.5": "#ffffffff",
|
||||
"1.0": "#00FF0000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_actorin",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/xs-fadeorb"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.grabline": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 0.5, 0.25, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 24
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 0.2
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -0.3],
|
||||
"radius": "math.clamp(1.1+q.entity_height,1,3)/math.clamp(q.entity_scale,1,2)",
|
||||
"surface_only": true,
|
||||
"direction": "inwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.35
|
||||
},
|
||||
"minecraft:particle_initial_speed": "(20+(q.entity_height*3))/math.clamp(q.entity_scale,1,2)",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": "(6+(q.entity_height*1.5))/math.clamp(q.entity_scale,1,2)"
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(0.15*q.entity_height,0.15,0.25)*v.grabline", "math.clamp(0.15*q.entity_height,0.15,0.25)*v.grabline"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 45,
|
||||
"texture_height": 5,
|
||||
"uv": [10, 0],
|
||||
"uv_size": [5, 5]
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00FF6700",
|
||||
"0.21": "#FFFFE792",
|
||||
"0.5": "#FFFFD951",
|
||||
"1.0": "#00FF6700"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_ding",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/skyding"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.dingsize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.8, 1, 1, 1, 0.95, 0.85, 0.5, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0.4, 0.5]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.65
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.9*v.dingsize", "0.9*v.dingsize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 275,
|
||||
"texture_height": 25,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [25, 25],
|
||||
"step_UV": [25, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 11
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/quickattack_dashlines"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.qsquish": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 175,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.25
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"radius": "math.clamp(query.entity_radius,2.5,50)",
|
||||
"direction": [0, 1, 0]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": "12+v.particle_age",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": 3
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(0.25*q.entity_height,0.06,0.25)*v.qsquish", 0.02],
|
||||
"facing_camera_mode": "lookat_direction",
|
||||
"uv": {
|
||||
"texture_width": 14,
|
||||
"texture_height": 1,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [2, 1],
|
||||
"step_UV": [2, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 7
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.17": "#FFFFC58D",
|
||||
"0.5": "#FFFFFBB4",
|
||||
"0.86": "#FFFFA372"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_targetdrop",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/quickattack_dashlines"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.qsquish": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 1, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 225,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.225
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 2, 0],
|
||||
"radius": "math.clamp(query.entity_radius,2.5,50)",
|
||||
"direction": [0, -1, 0]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": "8+v.particle_age",
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(0.25*q.entity_height,0.06,0.25)*v.qsquish", 0.02],
|
||||
"facing_camera_mode": "lookat_direction",
|
||||
"uv": {
|
||||
"texture_width": 14,
|
||||
"texture_height": 1,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [2, 1],
|
||||
"step_UV": [2, 0],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 7
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.17": "#FFFFC58D",
|
||||
"0.5": "#FFFFFBB4",
|
||||
"0.86": "#FFFFA372"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_targetdust",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/smokeorb"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.mudsize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [1, 1, 1, 1, 1, 1, 0.5, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 600,
|
||||
"max_particles": 600
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.15
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0.05, 0.1],
|
||||
"radius": 0.1,
|
||||
"direction": ["math.random(-10,10)*1", "math.random(1.5,25.5)*1.25", "math.random(-10,10)*1"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1.3
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(2.3,22.2)*0.7",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -6, 0],
|
||||
"linear_drag_coefficient": 2.5
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.25+(v.particle_random_1*0.15))*v.mudsize", "(0.25+(v.particle_random_1*0.15))*v.mudsize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 99,
|
||||
"texture_height": 9,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [9, 9],
|
||||
"step_UV": [9, 0],
|
||||
"frames_per_second": 8,
|
||||
"max_frame": 10,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.1
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00454038",
|
||||
"0.14": "#7065594E",
|
||||
"1.0": "#00454038"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:seismictoss_targetrocks",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/impact-rock"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.mudsize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [1, 1, 1, 1, 1, 1, 1, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 500,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.25
|
||||
},
|
||||
"minecraft:emitter_shape_disc": {
|
||||
"offset": [0, 0.02, 0.1],
|
||||
"radius": 0.5,
|
||||
"direction": ["math.random(-10,10)*2", "math.random(2.5,34.5)*1.75", "math.random(-10,10)*2"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1.7
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(6.3,42.2)*0.8",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -30, 0],
|
||||
"linear_drag_coefficient": 0.75
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.075+(v.particle_random_1*0.2))*v.mudsize", "(0.075+(v.particle_random_1*0.2))*v.mudsize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 56,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [0, 8],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 7,
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_drag": 2,
|
||||
"coefficient_of_restitution": 0.7,
|
||||
"collision_radius": 0.01
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:sing_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/note"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.songsize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.63, 0.9, 0.98, 1, 1, 1, 1]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 3,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 2.75
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.15],
|
||||
"direction": ["math.sin(v.emitter_age*400)*2", "math.cos(v.emitter_age*390)*2", "math.random(-15,-10)"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1.75
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.31,1.325)*1.1",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 0.3, 0],
|
||||
"linear_drag_coefficient": 0.4
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.15*v.songsize)+(v.particle_random_2*0.04)", "(0.24375*v.songsize)+(v.particle_random_2*0.04)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 26,
|
||||
"flipbook": {
|
||||
"base_UV": [0, "math.round(v.particle_random_4)*13"],
|
||||
"size_UV": [8, 13],
|
||||
"step_UV": [8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 4,
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#60A5F8FF",
|
||||
"0.5": "#CC67BCFF",
|
||||
"1.0": "#005601FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:sing_actorwave",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/large-ring"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 2.5,
|
||||
"max_particles": 10
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 2
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.25],
|
||||
"direction": [0, 0, -1]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.7
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0.2,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": 0.5
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.5, 0.5],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 160,
|
||||
"texture_height": 20,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [20, 20],
|
||||
"step_UV": [20, 0],
|
||||
"frames_per_second": 13,
|
||||
"max_frame": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#6096E5FF",
|
||||
"0.35": "#CC67BCFF",
|
||||
"1.0": "#505601FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:sing_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/note"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.songsize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.63, 0.9, 0.98, 1, 1, 1]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": "5*(q.entity_radius*1.01)",
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 3
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0.2, 0],
|
||||
"radius": "q.entity_radius*1.1",
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 1.75
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.31,1.325)*0.3",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 0.3, 0],
|
||||
"linear_drag_coefficient": 0.4
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.15*v.songsize)+(v.particle_random_2*0.04)", "(0.24375*v.songsize)+(v.particle_random_2*0.04)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 26,
|
||||
"flipbook": {
|
||||
"base_UV": [0, "math.round(v.particle_random_4)*13"],
|
||||
"size_UV": [8, 13],
|
||||
"step_UV": [8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 4,
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00A5F8FF",
|
||||
"0.5": "#CC67BCFF",
|
||||
"1.0": "#005601FF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:superfang_actor",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/poof"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.smokesize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.66, 0.94, 1, 1, 1, 1, 1, 0.93, 0.66, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 10,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 0.8
|
||||
},
|
||||
"minecraft:emitter_shape_disc": {
|
||||
"offset": [0, "(0.2+(q.entity_height*1)-(q.entity_height*(v.particle_random_2*0.2)))/0.85", 0],
|
||||
"radius": "(q.entity_radius-(q.entity_radius*(v.particle_random_2*0.3)))/0.85",
|
||||
"surface_only": true,
|
||||
"direction": [0, 1, 0]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(1.1,1.7)"
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0.5,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.25*v.smokesize)-(v.particle_random_2*0.075)", "(0.25*v.smokesize)-(v.particle_random_2*0.075)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 5,
|
||||
"max_frame": 8,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00000000",
|
||||
"0.3": "#B0000000",
|
||||
"0.7": "#B0000000",
|
||||
"1.0": "#00000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:superfang_actorrage",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/impact-fighting"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.ragesize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.66, 0.94, 1, 1, 0.93, 0.66, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 10,
|
||||
"max_particles": 100
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 0.9
|
||||
},
|
||||
"minecraft:emitter_shape_disc": {
|
||||
"offset": [0, "0.25+(q.entity_height*1.1)-(q.entity_height*(v.particle_random_2*0.3))", 0],
|
||||
"radius": "q.entity_radius*1.1-(q.entity_radius*(v.particle_random_2*0.25))",
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.35
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0.2,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.2*v.ragesize", "0.2*v.ragesize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 56,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 8],
|
||||
"size_UV": [7, 7],
|
||||
"step_UV": [0, 8],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 5,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:superfang_target",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/fang"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, -0.25]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.55
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [1, 1],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 32,
|
||||
"texture_height": 192,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [32, 32],
|
||||
"step_UV": [0, 32],
|
||||
"frames_per_second": 16,
|
||||
"max_frame": 6
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#00FFFFFF",
|
||||
"0.16": "#FFFFEDEA",
|
||||
"0.38": "#FFFFAFA0",
|
||||
"0.58": "#FFFF4429",
|
||||
"1.0": "#008B0000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:superfang_targetspark",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/critical_hit"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.bitespark": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 0.87, 1, 0.5, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 14
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"offset": [0, 0, -0.25],
|
||||
"radius": 0.025,
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.45
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1,3)*4",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.125*v.bitespark", "0.125*v.bitespark"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 8,
|
||||
"texture_height": 8,
|
||||
"uv": [0, 0],
|
||||
"uv_size": [7, 7]
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01,
|
||||
"expire_on_contact": true
|
||||
},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_age / v.particle_lifetime",
|
||||
"gradient": {
|
||||
"0.0": "#FFFFAFA0",
|
||||
"0.35": "#FFFF4429",
|
||||
"1.0": "#00990000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:withdraw_actor1",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/withdraw"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.withdraw.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "event_sound"
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-q.entity_radius*0.7"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(q.entity_height*0.8,0.1,1.2)", "math.clamp(q.entity_height*0.8,0.1,1.2)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 147,
|
||||
"texture_height": 84,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [21, 21],
|
||||
"step_UV": [21, 0],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 7,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:withdraw_actor2",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/withdraw"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.withdraw.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "event_sound"
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-q.entity_radius*0.7"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(q.entity_height*0.8,0.1,1.2)", "math.clamp(q.entity_height*0.8,0.1,1.2)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 147,
|
||||
"texture_height": 84,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 21],
|
||||
"size_UV": [21, 21],
|
||||
"step_UV": [21, 0],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 7,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:withdraw_actor3",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/withdraw"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.withdraw.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "event_sound"
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-q.entity_radius*0.7"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(q.entity_height*0.8,0.1,1.2)", "math.clamp(q.entity_height*0.8,0.1,1.2)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 147,
|
||||
"texture_height": 84,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 42],
|
||||
"size_UV": [21, 21],
|
||||
"step_UV": [21, 0],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 7,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:withdraw_actor4",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particles/withdraw"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"event_sound": {
|
||||
"sound_effect": {
|
||||
"event_name": "cobblemon:move.withdraw.actor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_looping": {
|
||||
"active_time": 1.5
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "event_sound"
|
||||
},
|
||||
"minecraft:emitter_shape_point": {
|
||||
"offset": [0, 0, "-q.entity_radius*0.7"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.4
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0,
|
||||
"minecraft:particle_motion_dynamic": {},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["math.clamp(q.entity_height*0.8,0.1,1.2)", "math.clamp(q.entity_height*0.8,0.1,1.2)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 147,
|
||||
"texture_height": 84,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 63],
|
||||
"size_UV": [21, 21],
|
||||
"step_UV": [21, 0],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 7,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:withdraw_actorbubbles",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/small_bubble"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": "math.clamp(15*(q.entity_radius*0.75),15,35)",
|
||||
"max_particles": 120
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.4
|
||||
},
|
||||
"minecraft:emitter_shape_sphere": {
|
||||
"radius": "(q.entity_radius*(0.95+v.emitter_age))/math.clamp(q.entity_scale*1.1-0.1,1,2)",
|
||||
"surface_only": true,
|
||||
"direction": ["math.random(-1.5,1.5)*0.4", "math.random(1,2)", "math.random(-1.5,1.5)*0.4"]
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.7
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(1.55,3.75)+(q.entity_height*0.1)",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, -0.125, 0],
|
||||
"linear_drag_coefficient": 3
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.125+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)", "0.125+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 48,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [8, 0],
|
||||
"frames_per_second": 18,
|
||||
"max_frame": 6,
|
||||
"stretch_to_lifetime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
-16
@@ -365,15 +365,15 @@
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1010,18 +1010,6 @@
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"3.0": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.125": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.3333": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.375": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"3.0": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+432
-8
@@ -164,6 +164,438 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.milotic.ground_walk": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, -2, "-13+Math.cos((query.anim_time) * 90 * 2) * 1"]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"neck2": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"neck3": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"neck4": {
|
||||
"rotation": [12.5, 0, 0]
|
||||
},
|
||||
"neck5": {
|
||||
"rotation": [12.5, 0, 0]
|
||||
},
|
||||
"head_angle": {
|
||||
"rotation": [12.5, 0, 0]
|
||||
},
|
||||
"eyelash_left2": {
|
||||
"rotation": [0, 15, 0]
|
||||
},
|
||||
"eyelash_left3": {
|
||||
"rotation": [0, 15, 0]
|
||||
},
|
||||
"eyelash_left4": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"eyelash_left5": {
|
||||
"rotation": [0, -52.5, 0]
|
||||
},
|
||||
"eyelash_left6": {
|
||||
"rotation": [0, -62.5, 0]
|
||||
},
|
||||
"eyelash_right2": {
|
||||
"rotation": [0, -15, 0]
|
||||
},
|
||||
"eyelash_right3": {
|
||||
"rotation": [0, -15, 0]
|
||||
},
|
||||
"eyelash_right4": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"eyelash_right5": {
|
||||
"rotation": [0, 52.5, 0]
|
||||
},
|
||||
"eyelash_right6": {
|
||||
"rotation": [0, 62.5, 0]
|
||||
},
|
||||
"hair_left1": {
|
||||
"rotation": [0, -2.5, 77.5]
|
||||
},
|
||||
"hair_left2": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"hair_left3": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"hair_left4": {
|
||||
"rotation": [-0.07551, 4.97252, -3.02145]
|
||||
},
|
||||
"hair_left5": {
|
||||
"rotation": [0, -5, -10]
|
||||
},
|
||||
"hair_left6": {
|
||||
"rotation": [0, -5, 5]
|
||||
},
|
||||
"hair_left7": {
|
||||
"rotation": [0, -5, 7.5]
|
||||
},
|
||||
"hair_left8": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"hair_right1": {
|
||||
"rotation": [0, 2.5, -77.5]
|
||||
},
|
||||
"hair_right2": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"hair_right3": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"hair_right4": {
|
||||
"rotation": [-0.07551, -4.97252, 3.02145]
|
||||
},
|
||||
"hair_right5": {
|
||||
"rotation": [0, 5, 10]
|
||||
},
|
||||
"hair_right6": {
|
||||
"rotation": [0, 5, -5]
|
||||
},
|
||||
"hair_right7": {
|
||||
"rotation": [0, 5, -7.5]
|
||||
},
|
||||
"hair_right8": {
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [57.5, 0, "math.sin(q.anim_time*90*4+50)*2"]
|
||||
},
|
||||
"tail1": {
|
||||
"rotation": [32.5, 0, "math.sin(q.anim_time*90*4)*3"]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [-2.5, 0, "math.sin(q.anim_time*90*4-60)*4"]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*4-120)*6"]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*4-180)*10"]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": [2.49673, -0.02352, "0.2189+math.sin(q.anim_time*90*4-240)*10"]
|
||||
},
|
||||
"tail6": {
|
||||
"rotation": [25, 0, "math.sin(q.anim_time*90*4-360)*16"]
|
||||
},
|
||||
"tail7": {
|
||||
"rotation": [32.5, 0, "math.sin(q.anim_time*90*4-420)*15"]
|
||||
},
|
||||
"tail8": {
|
||||
"rotation": [45, 0, "math.sin(q.anim_time*90*4-460)*15"]
|
||||
},
|
||||
"tail_fins": {
|
||||
"rotation": [0, -50, "math.sin(q.anim_time*90*4-500)*15"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.milotic.water_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [0, -7.5, 0.00001],
|
||||
"position": [-0.5, "-5+Math.cos((query.anim_time) * 90 * 2) * 2", -10]
|
||||
},
|
||||
"neck2": {
|
||||
"rotation": [-32.22927, 13.82594, -19.1114]
|
||||
},
|
||||
"neck3": {
|
||||
"rotation": [-9.90769, 19.62486, -2.29425]
|
||||
},
|
||||
"neck4": {
|
||||
"rotation": [1.61029, 18.32496, -1.40133]
|
||||
},
|
||||
"eyebrow_left_rotation": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"hair_left2": {
|
||||
"rotation": [5.0763, -12.42428, -4.24916]
|
||||
},
|
||||
"hair_left3": {
|
||||
"rotation": [5.05707, -9.94292, -3.81228]
|
||||
},
|
||||
"hair_left4": {
|
||||
"rotation": [4.99935, -7.44357, -3.80355]
|
||||
},
|
||||
"hair_left5": {
|
||||
"rotation": [4.62863, -2.25659, -5.82345]
|
||||
},
|
||||
"hair_left6": {
|
||||
"rotation": [5.10395, 2.27982, -7.50755]
|
||||
},
|
||||
"hair_left7": {
|
||||
"rotation": [5, 0, -7.5]
|
||||
},
|
||||
"hair_left8": {
|
||||
"rotation": [5, 0, -5]
|
||||
},
|
||||
"eyelash_left": {
|
||||
"rotation": [2.5, 2.5, 0]
|
||||
},
|
||||
"eyelash_left2": {
|
||||
"rotation": [-5.0639, 17.49037, -0.22838]
|
||||
},
|
||||
"eyelash_left3": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"eyelash_left4": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"eyelash_left5": {
|
||||
"rotation": [0, -37.5, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [69.93033, -56.34612, 0.25026]
|
||||
},
|
||||
"tail1": {
|
||||
"rotation": [3.31937, 6.75962, -29.95713]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [0.10407, -0.51864, -41.2109]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": [-9.16112, -3.92892, -35.02617]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": [-9.0102, -4.02994, -40.05421]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": [-16.76884, 6.26649, -24.00507]
|
||||
},
|
||||
"tail8": {
|
||||
"rotation": [-15.75003, -9.40585, -9.52142]
|
||||
},
|
||||
"tail_fins": {
|
||||
"rotation": [-42.2098, 68.84015, -53.25769]
|
||||
},
|
||||
"tail_fin": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"tail_fin2": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"tail_fin3": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"head_angle": {
|
||||
"rotation": [40, 0, 0]
|
||||
},
|
||||
"tail7": {
|
||||
"rotation": [-12.85767, -4.59902, -21.11073]
|
||||
},
|
||||
"hair_right2": {
|
||||
"rotation": [5.0763, 12.42428, 4.24916]
|
||||
},
|
||||
"hair_right3": {
|
||||
"rotation": [5.05707, 9.94292, 3.81228]
|
||||
},
|
||||
"hair_right4": {
|
||||
"rotation": [4.99935, 7.44357, 3.80355]
|
||||
},
|
||||
"hair_right5": {
|
||||
"rotation": [4.62863, 2.25659, 5.82345]
|
||||
},
|
||||
"hair_right6": {
|
||||
"rotation": [5.33581, -4.75998, 7.28055]
|
||||
},
|
||||
"hair_right7": {
|
||||
"rotation": [4.95744, 0.65182, 0.02822]
|
||||
},
|
||||
"hair_right8": {
|
||||
"rotation": [4.99527, 0.21782, 2.5095]
|
||||
},
|
||||
"eyelash_right": {
|
||||
"rotation": [2.5, -2.5, 0],
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"eyelash_right2": {
|
||||
"rotation": [-5.0639, -17.49037, 0.22838]
|
||||
},
|
||||
"eyelash_right3": {
|
||||
"rotation": [0, -20, 0]
|
||||
},
|
||||
"eyelash_left6": {
|
||||
"rotation": [0, -50, 0]
|
||||
},
|
||||
"eyelash_right4": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"eyelash_right5": {
|
||||
"rotation": [0, 37.5, 0]
|
||||
},
|
||||
"eyelash_right6": {
|
||||
"rotation": [0, 50, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [25.57876, -51.11002, 15.25293]
|
||||
},
|
||||
"eyes": {
|
||||
"position": [0, 0.25, 0]
|
||||
},
|
||||
"hair_right1": {
|
||||
"rotation": [-0.6574, -7.4713, -69.95708]
|
||||
},
|
||||
"tail6": {
|
||||
"rotation": [-12.5244, 10.42548, -17.85594]
|
||||
},
|
||||
"eyebrow_right2": {
|
||||
"rotation": [-53.16171, -7.57131, 9.97528]
|
||||
},
|
||||
"hair_left1": {
|
||||
"rotation": [-0.6574, 7.4713, 69.95708]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"neck5": {
|
||||
"rotation": [7.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.milotic.water_swim": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [90, 0, 0],
|
||||
"position": [0, "-3+Math.cos((query.anim_time) * 90 * 2) * 2", "-7+Math.cos((query.anim_time) * 90 * 2) * 1"]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [-5, 0, "math.sin(q.anim_time*90*4)*1"]
|
||||
},
|
||||
"neck2": {
|
||||
"rotation": [10, 0, "math.sin(q.anim_time*90*4-60)*2"]
|
||||
},
|
||||
"neck3": {
|
||||
"rotation": [-10, 0, "math.sin(q.anim_time*90*4-60)*2"]
|
||||
},
|
||||
"neck4": {
|
||||
"rotation": [-15, 0, "math.sin(q.anim_time*90*4-120)*1"]
|
||||
},
|
||||
"neck5": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"head_angle": {
|
||||
"rotation": [-55, 0, "-math.sin(q.anim_time*90*4-60)*2"]
|
||||
},
|
||||
"eyelash_left2": {
|
||||
"rotation": [0, 15, 0]
|
||||
},
|
||||
"eyelash_left3": {
|
||||
"rotation": [0, 15, 0]
|
||||
},
|
||||
"eyelash_left4": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"eyelash_left5": {
|
||||
"rotation": [0, -52.5, 0]
|
||||
},
|
||||
"eyelash_left6": {
|
||||
"rotation": [0, -62.5, 0]
|
||||
},
|
||||
"eyelash_right2": {
|
||||
"rotation": [0, -15, 0]
|
||||
},
|
||||
"eyelash_right3": {
|
||||
"rotation": [0, -15, 0]
|
||||
},
|
||||
"eyelash_right4": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"eyelash_right5": {
|
||||
"rotation": [0, 52.5, 0]
|
||||
},
|
||||
"eyelash_right6": {
|
||||
"rotation": [0, 62.5, 0]
|
||||
},
|
||||
"hair_left1": {
|
||||
"rotation": [0, -5, 77.5]
|
||||
},
|
||||
"hair_left2": {
|
||||
"rotation": [0, -37.5, -5]
|
||||
},
|
||||
"hair_left3": {
|
||||
"rotation": [-3.28331, -15.28603, -4.67158]
|
||||
},
|
||||
"hair_left4": {
|
||||
"rotation": [-0.07788, -15.02746, -2.99471]
|
||||
},
|
||||
"hair_left5": {
|
||||
"rotation": [0, -5, -10]
|
||||
},
|
||||
"hair_left6": {
|
||||
"rotation": [0, -5, 5]
|
||||
},
|
||||
"hair_left7": {
|
||||
"rotation": [0, -5, 7.5]
|
||||
},
|
||||
"hair_left8": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"hair_right1": {
|
||||
"rotation": [0, 5, -77.5]
|
||||
},
|
||||
"hair_right2": {
|
||||
"rotation": [0, 37.5, 5]
|
||||
},
|
||||
"hair_right3": {
|
||||
"rotation": [-3.28331, 15.28603, 4.67158]
|
||||
},
|
||||
"hair_right4": {
|
||||
"rotation": [-0.07788, 15.02746, 2.99471]
|
||||
},
|
||||
"hair_right5": {
|
||||
"rotation": [0, 5, 10]
|
||||
},
|
||||
"hair_right6": {
|
||||
"rotation": [0, 5, -5]
|
||||
},
|
||||
"hair_right7": {
|
||||
"rotation": [0, 5, -7.5]
|
||||
},
|
||||
"hair_right8": {
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*4+50)*2"]
|
||||
},
|
||||
"tail1": {
|
||||
"rotation": ["-2.5+math.sin(q.anim_time*90*2)*2", 0, "math.sin(q.anim_time*90*4)*1"]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": ["2.5+math.sin(q.anim_time*90*2-40)*2", 0, "math.sin(q.anim_time*90*4-60)*3"]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": ["math.sin(q.anim_time*90*2-80)*1", 0, "math.sin(q.anim_time*90*4-120)*2"]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": ["2.5+math.sin(q.anim_time*90*2-120)*1", 0, "math.sin(q.anim_time*90*4-180)*3"]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": ["2.497+math.sin(q.anim_time*90*2-160)*1", -0.00692, "0.1714+math.sin(q.anim_time*90*4-240)*4"]
|
||||
},
|
||||
"tail6": {
|
||||
"rotation": ["-2.5+math.sin(q.anim_time*90*2-200)*1", 0, "math.sin(q.anim_time*90*4-360)*5"]
|
||||
},
|
||||
"tail7": {
|
||||
"rotation": [-2.5, 0, "math.sin(q.anim_time*90*4-420)*4"]
|
||||
},
|
||||
"tail8": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*4-460)*3"]
|
||||
},
|
||||
"tail_fins": {
|
||||
"rotation": [17.5, -15, "math.sin(q.anim_time*90*4-500)*5"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.milotic.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
@@ -255,14 +687,6 @@
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.milotic.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.milotic.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
-21
@@ -33,13 +33,14 @@
|
||||
"rotation": ["10-math.sin(q.anim_time*90*1-45)*4", 0, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": ["23.5+math.sin(q.anim_time*90*2)*6", 0, 0]
|
||||
"rotation": ["13+math.sin(q.anim_time*90*2)*5", 0, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 0, "-40-math.sin(q.anim_time*90*2)*4"]
|
||||
},
|
||||
"leg_left1": {
|
||||
"rotation": ["-30-math.sin(q.anim_time*90*2)*6", 0, "5+math.sin(q.anim_time*90*2)*1"]
|
||||
"rotation": ["-30-math.sin(q.anim_time*90*2)*6", 0, "5+math.sin(q.anim_time*90*2)*1"],
|
||||
"position": [0, "0-math.sin(q.anim_time*90*2)*0.2", "0+math.sin(q.anim_time*90*2)*0.3"]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": [7.5, "math.sin(q.anim_time*90*1-120)*8", 0]
|
||||
@@ -69,22 +70,23 @@
|
||||
"rotation": [17.5, "math.sin(q.anim_time*90*1-135)*8", 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": ["15-math.sin(q.anim_time*90*2)*2", 0, 0]
|
||||
"rotation": ["22.5-math.sin(q.anim_time*90*2)*3", 0, 0]
|
||||
},
|
||||
"foot_left2": {
|
||||
"rotation": [-25, 0, 0]
|
||||
"rotation": ["-23.0091-math.sin(q.anim_time*90*2)*-2", -0.48399, 1.94152]
|
||||
},
|
||||
"leg_right1": {
|
||||
"rotation": ["-30-math.sin(q.anim_time*90*2)*6", 0, "-5-math.sin(q.anim_time*90*2)*1"]
|
||||
"rotation": ["-30-math.sin(q.anim_time*90*2)*6", 0, "-5-math.sin(q.anim_time*90*2)*1"],
|
||||
"position": [0, "0-math.sin(q.anim_time*90*2)*0.2", "0+math.sin(q.anim_time*90*2)*0.3"]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": ["23.5+math.sin(q.anim_time*90*2)*6", 0, 0]
|
||||
"rotation": ["13+math.sin(q.anim_time*90*2)*5", 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": ["15-math.sin(q.anim_time*90*2)*2", 0, 0]
|
||||
"rotation": ["22.5-math.sin(q.anim_time*90*2)*3", 0, 0]
|
||||
},
|
||||
"foot_right2": {
|
||||
"rotation": [-25, 0, 0]
|
||||
"rotation": ["-23.0091-math.sin(q.anim_time*90*2)*-2", 0.48399, -1.94152]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -249,11 +251,6 @@
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0": {
|
||||
"effect": "pokemon.garchomp.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.garchomp.battle_idle": {
|
||||
@@ -291,13 +288,13 @@
|
||||
"rotation": ["7.5-math.sin(q.anim_time*90*4)*6", 0, "0-math.sin(q.anim_time*90*4)*1.5"]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": ["5.5+math.sin(q.anim_time*90*4)*9", "-math.sin(q.anim_time*90*4)*2", 5]
|
||||
"rotation": ["-0.5+math.sin(q.anim_time*90*4)*6", "-math.sin(q.anim_time*90*4)*2", 5]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 0, "-40-math.sin(q.anim_time*90*4)*6"]
|
||||
},
|
||||
"leg_left1": {
|
||||
"position": [0, "math.sin(q.anim_time*90*4)*0.1", 0]
|
||||
"position": [0, "0-math.sin(q.anim_time*90*4)*0.2", "0+math.sin(q.anim_time*90*4)*0.6"]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [-5.22206, "34.6575-math.sin(q.anim_time*90*4-45)*4", 15.86961]
|
||||
@@ -324,26 +321,27 @@
|
||||
"rotation": [17.5, "math.sin(q.anim_time*90*2-135)*8", 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": ["-10-math.sin(q.anim_time*90*4)*2", 0, 0]
|
||||
"rotation": ["-21-math.sin(q.anim_time*90*4)*2", 0, 0]
|
||||
},
|
||||
"foot_left2": {
|
||||
"rotation": ["-12.5-math.sin(q.anim_time*90*4)*2", 0, 0]
|
||||
"rotation": ["-2.7011-math.sin(q.anim_time*90*4)*3/2", -3.45533, 6.66067]
|
||||
},
|
||||
"leg_right0": {
|
||||
"rotation": ["-35-math.sin(q.anim_time*90*4)*6", 0, "2.5+math.sin(q.anim_time*90*4)*2"],
|
||||
"position": [0, "math.sin(q.anim_time*90*4)*0.2", 0]
|
||||
},
|
||||
"leg_right1": {
|
||||
"position": ["math.sin(q.anim_time*90*4)*0.1", 0, 0]
|
||||
"rotation": ["1.7287-math.sin(q.anim_time*90*4)*2", -7.18659, "2.1694-math.sin(q.anim_time*90*4)*1"],
|
||||
"position": [0, "0-math.sin(q.anim_time*90*4)*0.2", "0+math.sin(q.anim_time*90*4)*0.6"]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": ["20+math.sin(q.anim_time*90*4)*6", "5+math.sin(q.anim_time*90*4)*0.5", "5-math.sin(q.anim_time*90*4)*1"]
|
||||
"rotation": ["14.5+math.sin(q.anim_time*90*4)*7", 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": ["5-math.sin(q.anim_time*90*4)*2", "math.sin(q.anim_time*90*4)*2", 0]
|
||||
"rotation": ["32.5-math.sin(q.anim_time*90*4)*3", 0, 0]
|
||||
},
|
||||
"foot_right2": {
|
||||
"rotation": [-5, 0, "-math.sin(q.anim_time*90*4)*1"]
|
||||
"rotation": ["-31.0384-math.sin(q.anim_time*90*4)*-2", 0.87411, -4.41107]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+18
-2
@@ -23,6 +23,14 @@
|
||||
"root": [0, 0, -1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "charizard",
|
||||
"pivot": [0, 41, -1],
|
||||
"locators": {
|
||||
"top": [0, 41, -1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "charizard",
|
||||
@@ -37,11 +45,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_body",
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 20, -0.5],
|
||||
"locators": {
|
||||
"body": [0, 20, -0.5]
|
||||
"middle": [0, 20, -0.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -60,6 +68,14 @@
|
||||
{"origin": [-6, 18, -7], "size": [12, 7, 13], "uv": [0, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "torso2",
|
||||
"pivot": [0, 25, 5.5],
|
||||
"locators": {
|
||||
"seat_1": [0, 25, 5.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso2",
|
||||
|
||||
+49
-50
@@ -5,7 +5,7 @@
|
||||
"description": {
|
||||
"identifier": "geometry.onix",
|
||||
"texture_width": 256,
|
||||
"texture_height": 256,
|
||||
"texture_height": 128,
|
||||
"visible_bounds_width": 23,
|
||||
"visible_bounds_height": 4.5,
|
||||
"visible_bounds_offset": [0, 1.75, 0]
|
||||
@@ -25,13 +25,25 @@
|
||||
"parent": "body",
|
||||
"pivot": [0, 11, -30],
|
||||
"cubes": [
|
||||
{"origin": [-13, 0, -46], "size": [26, 22, 16], "inflate": 0.01, "uv": [0, 43]},
|
||||
{"origin": [-13, 4, -52], "size": [26, 18, 6], "inflate": 0.02, "uv": [0, 119]}
|
||||
{"origin": [-13, 0, -52], "size": [26, 21, 22], "inflate": 0.02, "uv": [0, 45]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "muzzle",
|
||||
"parent": "head",
|
||||
"pivot": [0, 5.75, -52],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 13, -52], "size": [12, 8, 6], "pivot": [11.5, 19, -52], "rotation": [0, -45, 0], "uv": [172, 108]},
|
||||
{"origin": [-11.5, 13, -52], "size": [12, 8, 6], "pivot": [-11.5, 19, -52], "rotation": [0, 45, 0], "uv": [166, 82]},
|
||||
{"origin": [-12, 6.05, -64.95], "size": [24, 7, 13], "uv": [60, 88]},
|
||||
{"origin": [-10, 6.05, -68.95], "size": [20, 7, 4], "uv": [96, 65]},
|
||||
{"origin": [-3, 11, -74.9], "size": [6, 8, 15], "inflate": 0.015, "pivot": [0, 19, -60.6], "rotation": [30, 0, 0], "uv": [210, 32]},
|
||||
{"origin": [-3, 16, -60.5], "size": [6, 5, 9], "inflate": 0.01, "uv": [178, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head",
|
||||
"parent": "muzzle",
|
||||
"pivot": [-13, 19, -52]
|
||||
},
|
||||
{
|
||||
@@ -40,7 +52,7 @@
|
||||
"pivot": [-7.2, 15.25, -55.8],
|
||||
"rotation": [0, 45, 0],
|
||||
"cubes": [
|
||||
{"origin": [-11.75, 13.25, -56.3], "size": [10, 5, 0], "pivot": [-6.2, 15.25, -56.3], "rotation": [0, 0, 2.5], "uv": [82, 5]}
|
||||
{"origin": [-10.75, 13.25, -56.2], "size": [9, 4, 0], "pivot": [-6.2, 15.25, -56.3], "rotation": [0, 0, 2.5], "uv": [82, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -48,15 +60,15 @@
|
||||
"parent": "eye_left",
|
||||
"pivot": [-3.5, 15, -56.3],
|
||||
"cubes": [
|
||||
{"origin": [-4, 14, -56.3], "size": [1, 2, 0], "inflate": 0.01, "pivot": [-3.5, 15, -56.3], "rotation": [0, 0, 0], "uv": [0, 2]}
|
||||
{"origin": [-4, 14, -56.21], "size": [1, 2, 0], "inflate": 0.01, "pivot": [-3.5, 15, -56.3], "rotation": [0, 0, 0], "uv": [0, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [-3.5, 15.25, -56.1],
|
||||
"pivot": [-3.5, 15.25, -56],
|
||||
"cubes": [
|
||||
{"origin": [-5, 14, -56.2], "size": [3, 2, 0], "inflate": 0.02, "pivot": [-3.5, 15.25, -56.1], "rotation": [0, 0, 0], "uv": [8, 2]}
|
||||
{"origin": [-5, 14, -56.1], "size": [3, 2, 0], "inflate": 0.03, "pivot": [-3.5, 15.25, -56], "rotation": [0, 0, 0], "uv": [8, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -65,73 +77,60 @@
|
||||
"pivot": [7.2, 15.25, -55.8],
|
||||
"rotation": [0, -45, 0],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 13.25, -56.3], "size": [10, 5, 0], "pivot": [6.2, 15.25, -56.3], "rotation": [0, 0, -2.5], "uv": [82, 0]}
|
||||
{"origin": [1.75, 13.25, -56.2], "size": [9, 4, 0], "pivot": [6.2, 15.25, -56.3], "rotation": [0, 0, -2.5], "uv": [82, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [3.5, 15.25, -56.3],
|
||||
"pivot": [3.5, 15, -56.3],
|
||||
"cubes": [
|
||||
{"origin": [3, 14, -56.3], "size": [1, 2, 0], "inflate": 0.01, "pivot": [3.5, 15.25, -56.3], "rotation": [0, 0, 0], "uv": [0, 0]}
|
||||
{"origin": [3, 14, -56.21], "size": [1, 2, 0], "inflate": 0.01, "pivot": [3.5, 15, -56.3], "rotation": [0, 0, 0], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [3.5, 15.25, -56.3],
|
||||
"parent": "eye_right",
|
||||
"pivot": [3.5, 15.25, -56],
|
||||
"cubes": [
|
||||
{"origin": [2, 14, -56.2], "size": [3, 2, 0], "inflate": 0.02, "pivot": [3.5, 15.25, -56.3], "rotation": [0, 0, 0], "uv": [8, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "muzzle",
|
||||
"parent": "head",
|
||||
"pivot": [0, 5.75, -52],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 13, -52], "size": [12, 9, 13], "pivot": [11.5, 19, -52], "rotation": [0, -45, 0], "uv": [148, 110]},
|
||||
{"origin": [-11.5, 13, -52], "size": [12, 9, 13], "pivot": [-11.5, 19, -52], "rotation": [0, 45, 0], "uv": [141, 154]},
|
||||
{"origin": [-12, 6.25, -63.75], "size": [24, 7, 12], "uv": [72, 36]},
|
||||
{"origin": [-10, 6.25, -67.75], "size": [20, 7, 4], "uv": [140, 141]},
|
||||
{"origin": [-3, 5, -67.5], "size": [6, 8, 21], "inflate": 0.01, "pivot": [0, 5, -67.5], "rotation": [25, 0, 0], "uv": [115, 112]},
|
||||
{"origin": [-3, 16, -60.6], "size": [6, 6, 9], "inflate": 0.01, "uv": [0, 169]}
|
||||
{"origin": [2, 14, -56.1], "size": [3, 2, 0], "inflate": 0.03, "pivot": [3.5, 15.25, -56], "rotation": [0, 0, 0], "uv": [8, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "horn",
|
||||
"parent": "head",
|
||||
"pivot": [0, 22, -51],
|
||||
"pivot": [0, 21, -51],
|
||||
"rotation": [-2.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 22, -51], "size": [3, 4, 14], "uv": [62, 0]},
|
||||
{"origin": [-0.5, 26, -48], "size": [1, 13, 6], "uv": [0, 0]},
|
||||
{"origin": [0, 25, -49], "size": [0, 20, 11], "uv": [48, 148]}
|
||||
{"origin": [-1.5, 21, -51], "size": [3, 4, 14], "uv": [62, 0]},
|
||||
{"origin": [-0.5, 25, -48], "size": [1, 13, 6], "uv": [0, 0]},
|
||||
{"origin": [0, 24, -49], "size": [0, 20, 11], "uv": [0, 36]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "jaw",
|
||||
"parent": "head",
|
||||
"pivot": [0, 6.25, -46],
|
||||
"pivot": [0, 6.25, -46.4],
|
||||
"rotation": [-5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-10.5, 0.25, -54], "size": [21, 6, 9], "uv": [135, 95]}
|
||||
{"origin": [-10.5, 0.25, -58.4], "size": [21, 6, 9], "uv": [80, 108]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "jaw2",
|
||||
"parent": "jaw",
|
||||
"pivot": [0, 0.25, -54],
|
||||
"pivot": [0, 0.25, -54.4],
|
||||
"cubes": [
|
||||
{"origin": [-9.5, 0.25, -64], "size": [19, 5, 10], "uv": [138, 0]}
|
||||
{"origin": [-9.5, 0.25, -64.4], "size": [19, 5, 6], "uv": [96, 76]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "jaw3",
|
||||
"parent": "jaw2",
|
||||
"pivot": [0, 0.25, -64],
|
||||
"pivot": [0, 0.25, -64.4],
|
||||
"rotation": [-10, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-7.5, 0.49881, -67.05452], "size": [15, 5, 3], "uv": [169, 132]}
|
||||
{"origin": [-7.5, 0.49881, -67.45452], "size": [15, 5, 3], "uv": [128, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -157,7 +156,7 @@
|
||||
"parent": "segment2",
|
||||
"pivot": [0, 11, 1],
|
||||
"cubes": [
|
||||
{"origin": [-9, 2, -8], "size": [18, 18, 18], "uv": [84, 0]}
|
||||
{"origin": [-9, 2, -8], "size": [18, 18, 18], "uv": [84, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -170,7 +169,7 @@
|
||||
"parent": "segment3",
|
||||
"pivot": [0, 11, 16.5],
|
||||
"cubes": [
|
||||
{"origin": [-7, 4, 10], "size": [14, 14, 13], "uv": [131, 42]}
|
||||
{"origin": [-7, 4, 10], "size": [14, 14, 13], "uv": [74, 38]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -183,7 +182,7 @@
|
||||
"parent": "segment4",
|
||||
"pivot": [0, 11, 33],
|
||||
"cubes": [
|
||||
{"origin": [-10, 1, 23], "size": [20, 20, 20], "uv": [64, 61]}
|
||||
{"origin": [-10, 1, 23], "size": [20, 20, 20], "uv": [0, 88]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -196,7 +195,7 @@
|
||||
"parent": "segment5",
|
||||
"pivot": [0, 11, 52],
|
||||
"cubes": [
|
||||
{"origin": [-9, 2, 43], "size": [18, 18, 18], "uv": [0, 83]}
|
||||
{"origin": [-9, 2, 43], "size": [18, 18, 18], "uv": [138, 20]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -209,7 +208,7 @@
|
||||
"parent": "segment6",
|
||||
"pivot": [0, 11, 69],
|
||||
"cubes": [
|
||||
{"origin": [-8, 3, 61], "size": [16, 16, 16], "uv": [72, 101]}
|
||||
{"origin": [-8, 3, 61], "size": [16, 16, 16], "uv": [192, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -222,7 +221,7 @@
|
||||
"parent": "segment7",
|
||||
"pivot": [0, 11, 84],
|
||||
"cubes": [
|
||||
{"origin": [-6, 5, 77], "size": [12, 12, 14], "uv": [144, 69]}
|
||||
{"origin": [-6, 5, 77], "size": [12, 12, 14], "uv": [204, 55]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -235,7 +234,7 @@
|
||||
"parent": "segment8",
|
||||
"pivot": [0, 11, 98],
|
||||
"cubes": [
|
||||
{"origin": [-6, 5, 91], "size": [12, 12, 14], "uv": [102, 141]}
|
||||
{"origin": [-6, 5, 91], "size": [12, 12, 14], "uv": [188, 82]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -248,7 +247,7 @@
|
||||
"parent": "segment9",
|
||||
"pivot": [0, 11, 112],
|
||||
"cubes": [
|
||||
{"origin": [-6, 5, 105], "size": [12, 12, 14], "uv": [50, 133]}
|
||||
{"origin": [-6, 5, 105], "size": [12, 12, 14], "uv": [152, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -261,7 +260,7 @@
|
||||
"parent": "segment10",
|
||||
"pivot": [0, 11, 124],
|
||||
"cubes": [
|
||||
{"origin": [-5, 6, 119], "size": [10, 10, 10], "uv": [156, 15]}
|
||||
{"origin": [-5, 6, 119], "size": [10, 10, 10], "uv": [138, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -274,7 +273,7 @@
|
||||
"parent": "segment11",
|
||||
"pivot": [0, 11, 133],
|
||||
"cubes": [
|
||||
{"origin": [-4, 7, 129], "size": [8, 8, 8], "uv": [94, 167]}
|
||||
{"origin": [-4, 7, 129], "size": [8, 8, 8], "uv": [224, 108]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -287,7 +286,7 @@
|
||||
"parent": "segment12",
|
||||
"pivot": [0, 11, 141],
|
||||
"cubes": [
|
||||
{"origin": [-4, 7, 137], "size": [8, 8, 8], "uv": [70, 159]}
|
||||
{"origin": [-4, 7, 137], "size": [8, 8, 8], "uv": [140, 108]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -300,7 +299,7 @@
|
||||
"parent": "segment13",
|
||||
"pivot": [0, 11, 153],
|
||||
"cubes": [
|
||||
{"origin": [-4, 6, 145], "size": [8, 10, 16], "uv": [0, 143]}
|
||||
{"origin": [-4, 6, 145], "size": [8, 10, 16], "uv": [134, 82]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -313,7 +312,7 @@
|
||||
"parent": "segment14",
|
||||
"pivot": [0, 11, 165],
|
||||
"cubes": [
|
||||
{"origin": [-3, 8, 161], "size": [6, 6, 8], "uv": [88, 133]}
|
||||
{"origin": [-3, 8, 161], "size": [6, 6, 8], "uv": [228, 82]}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
+7
-7
@@ -63,7 +63,7 @@
|
||||
{"origin": [-6, 43, -8.5], "size": [12, 6, 10], "inflate": 0.001, "uv": [84, 46]},
|
||||
{"origin": [-5, 44.5, -13.5], "size": [10, 4, 5], "uv": [127, 88]},
|
||||
{"origin": [-3.5, 44.5, -18.5], "size": [7, 3, 6], "uv": [57, 0]},
|
||||
{"origin": [-2.5, 44.51, -22.5], "size": [5, 2, 5], "uv": [117, 65]}
|
||||
{"origin": [-2.5, 44.5, -22.5], "size": [5, 2, 5], "uv": [117, 65]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -172,16 +172,16 @@
|
||||
"cubes": [
|
||||
{"origin": [5.5, 27.5, -10], "size": [9, 10, 10], "uv": [218, 4]},
|
||||
{"origin": [13, 29.5, -8], "size": [4, 6, 6], "uv": [206, 89]},
|
||||
{"origin": [17, 29, -8.5], "size": [5, 7, 7], "uv": [135, 97]},
|
||||
{"origin": [8, 37.5, -6], "size": [4, 5, 2], "uv": [98, 108]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left2",
|
||||
"parent": "arm_left",
|
||||
"pivot": [22, 32.5, -2],
|
||||
"pivot": [17, 32.5, -2],
|
||||
"cubes": [
|
||||
{"origin": [22, 30, -8], "size": [5, 5, 6], "uv": [138, 26]}
|
||||
{"origin": [22, 30, -8], "size": [5, 5, 6], "uv": [138, 26]},
|
||||
{"origin": [17, 29, -8.5], "size": [5, 7, 7], "uv": [135, 97]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -223,16 +223,16 @@
|
||||
"cubes": [
|
||||
{"origin": [-14.5, 27.5, -10], "size": [9, 10, 10], "uv": [89, 62]},
|
||||
{"origin": [-17, 29.5, -8], "size": [4, 6, 6], "uv": [186, 89]},
|
||||
{"origin": [-22, 29, -8.5], "size": [5, 7, 7], "uv": [203, 43]},
|
||||
{"origin": [-12, 37.5, -6], "size": [4, 5, 2], "uv": [32, 91]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right2",
|
||||
"parent": "arm_right",
|
||||
"pivot": [-22, 32.5, -2],
|
||||
"pivot": [-17, 32.5, -2],
|
||||
"cubes": [
|
||||
{"origin": [-27, 30, -8], "size": [5, 5, 6], "uv": [178, 46]}
|
||||
{"origin": [-27, 30, -8], "size": [5, 5, 6], "uv": [178, 46]},
|
||||
{"origin": [-22, 29, -8.5], "size": [5, 7, 7], "uv": [203, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Loaded 100 of 753 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user