Compare commits

...
Author SHA1 Message Date
apion 5363c17919 Test #8 2024-11-02 22:24:26 -04:00
apion daa331a30d Test #7 2024-11-02 22:21:21 -04:00
apion 9e3edd4f1c Test #6 2024-11-02 22:19:50 -04:00
apion 1ef069b08e Test #5 2024-11-02 22:18:45 -04:00
apion b558d04a58 Test #4 2024-11-02 22:17:50 -04:00
apion 96142387c5 Test #3 2024-11-02 22:15:37 -04:00
apion ccde9f79aa Test #2 2024-11-02 22:11:52 -04:00
apion b50762195e Added CI job for merging main into lang-updates when en_US is changed 2024-11-02 22:10:20 -04:00
apion a36b832826 Update translations (again!) 2024-11-02 21:48:08 -04:00
Hiroku 055583de1d Merge branch 'RevisedBattleSendouts' into 'main'
Revised pokemon sendouts to allow for smaller pokemon to be sendout closer to their opponents.

See merge request cable-mc/cobblemon!1246
2024-11-03 01:33:55 +00:00
JazzMcNade 63f2c49606 Merge branch 'main' into RevisedBattleSendouts 2024-11-02 20:20:49 -05:00
JazzMcNade ff879f488e Revised pokemon sendouts to allow for smaller pokemon to be sendout closer to their opponents.
This should reduce the number of instances in which a pokemon will be thrown behind the player
2024-11-02 20:14:37 -05:00
Apion 0942553bb7 Merge branch 'lang-updates' into 'main'
Update translations

See merge request cable-mc/cobblemon!1245
2024-11-03 00:55:23 +00:00
Apion ac7d2f6075 Update translations 2024-11-03 00:55:23 +00:00
Hiroku 1d460555af Merge branch 'implement_pokemon' into 'main'
Fix underwater anim conditions

Closes #1137

See merge request cable-mc/cobblemon!1243
2024-11-02 23:24:37 +00:00
Carmendar 904dcb61b0 Fix underwater anim conditions 2024-11-02 23:24:36 +00:00
Hiroku b038841242 Merge branch 'feature/small-fixes' into 'main'
fix pokedex crashing on custom mons and evos randomizing gender

Closes #1138 and #1135

See merge request cable-mc/cobblemon!1242
2024-11-02 23:10:24 +00:00
Polymeta 7efa155b51 fix pokedex crashing on custom mons and evos randomizing gender 2024-11-02 23:10:24 +00:00
Hiroku 07cef9c683 Merge branch '1.6-mongodb' into 'main'
MongoDB implementation for dex, player data and store.

See merge request cable-mc/cobblemon!1239
2024-11-02 23:06:08 +00:00
Hiroku 85b836ee28 Merge branch 'implement_pokemon' into 'main'
Implement a bunch of pokemon

Closes #1137

See merge request cable-mc/cobblemon!1234
2024-11-02 22:57:58 +00:00
Apion 74222fe727 Implement a bunch of pokemon 2024-11-02 22:57:58 +00:00
Apion a30dacb4be Merge branch 'move-effects' into 'main'
Added particles and sounds for moves.

See merge request cable-mc/cobblemon!1240
2024-11-02 21:14:20 +00:00
Tyzillion 66473d9b47 Added particles and sounds for moves. 2024-11-02 21:14:20 +00:00
navneetset 0764a932e1 Removed old mongo player data adapter. 2024-11-02 21:40:27 +01:00
navneetset d568644155 Added dex manager adapter to JSON and MongoDB codec 2024-11-02 10:05:24 +01:00
Hiroku 34a8badd6f Merge branch 'molang-function-fix' into 'main'
Better molang function adding

See merge request cable-mc/cobblemon!1235
2024-11-02 04:38:12 +00:00
navneetset 54cb857224 MongoDB implementation for 1.6 2024-11-02 00:14:40 +01:00
854 changed files with 149514 additions and 22773 deletions

No files matched your search

+29 -1
View File
@@ -1,9 +1,10 @@
image: amazoncorretto:21
image: amazoncorretto:21-alpine
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
stages:
- merge
- build
- deploy
@@ -64,3 +65,30 @@ deploy:
- ./*.jar
# - neoforge/build/libs/*+*.jar
# - fabric/build/libs/*+*.jar
merge_on_lang_change:
stage: merge
script:
# Check for changes in the specified file or directory
- |
apk add git
if git diff --name-only "$CI_COMMIT_BEFORE_SHA" "$CI_COMMIT_SHA" | grep -q "common/src/main/resources/assets/cobblemon/lang/en_us.json"; then
echo "US locale changed! Updating lang branch..."
# Configure Git user for the merge commit
git config --global user.email "noreply@weblate.org"
git config --global user.name "Weblate"
git remote set-url origin https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/cable-mc/cobblemon.git
# Fetch the target branch and merge main into it
git fetch origin lang-updates
git checkout lang-updates
git merge origin/ci-test
# Push the merged branch back to the repository
git push origin lang-updates:lang-updates-test
else
echo "No need to update lang"
fi
only:
- ci-test
+214 -5
View File
@@ -13,13 +13,12 @@
- Added support for Double Battles, Triple Battles, and Multi-battles.
- CriticalCaptures and Pokédex progress capture multiplier now work with the Pokédex.
- Added extra visuals to early berry growth stages.
- Hidden Power now displays its effective typing.
- 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
- Moves can now be benched without specifying a replacement move, allowing for empty move slots.
- Moves learned via Sketch now persist after battle.
- Added `stonjourner_henge_ruins`, `luna_henge_ruins`, and `sol_henge_ruins` structures.
- Added a `battleInvulnerability` gamerule to make players invulnerable to any damage during a battle.
- Added a `mobTargetInBattle` gamerule to exclude players from being targeted by mobs during a battle.
@@ -31,10 +30,18 @@
- 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 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 shiny Pokémon particles with sound effects.
- Added animation for trading.
### Pokémon Added
#### Gen 1
- Alola Bias Cubone
- Alolan Marowak
#### Gen 2
- Ledyba
- Ledian
@@ -42,13 +49,39 @@
- Sunflora
- Wobbuffet
- Girafarig
- Corsola
- Remoraid
- Octillery
- Mantine
- Smeargle
- Remoraid
- Octillery
- Mantine
- Corsola
#### Gen 3
- Slakoth
- Vigoroth
- Slaking
- Corphish
- Crawdaunt
- Feebas
- Milotic
- Wynaut
- Absol
- Spheal
- Sealeo
- Walrein
- Bagon
- Shelgon
- Salamence
#### Gen 4
- Shellos [East Sea form]
- Gastrodon [East Sea form]
- Finneon
- Lumineon
- Mantyke
- Feebas
- Milotic
- Spheal
@@ -67,12 +100,28 @@
#### Gen 5
- Purrloin
- Liepard
- Scraggy
- Scrafty
#### Gen 6
- Clauncher
- Clawitzer
#### Gen 7
- Pikipek
- Trumbeak
- Toucannon
- Mareanie
- Toxapex
- Sandygast
- Palossand
- Bruxish
#### Gen 8
- Cramorant
- Hatenna
- Hattrem
- Hatterene
- Bruxish
- Mareanie
- Toxapex
@@ -82,16 +131,168 @@
- Pincurchin
#### Gen 9
- Wattrel
- Kilowattrel
- Wiglett
- Wugtrio
- Flamigo
- Veluza
- Farigiraf
- Klawf
- Finizen
- Palafin
- Wiglett
- Wugtrio
- Flamigo
#### Unique Forms
- Magikarp Jump Variants
- Gyarados Jump Variants
### Added cries to the following Pokémon
- Sandshrew, Sandslash
- Magnemite, Magneton, Magnezone
- Gastly, Haunter, Gengar
- Rhyhorn, Rhydon, Rhyperior
- Happiny, Chansey
- Horsea, Seadra, Kingdra
- Magby, Magmar, Magmortar
- Porygon, Porygon2, Porygon-Z
- Sentret, Furret
- Misdreavus, Mismagius
- Corsola
- Mantyke, Mantine
- Girafarig, Farigiraf
- Wynaut, Wobbuffet
- Lunatone
- Solrock
- Corphish, Crawdaunt
- Feebas, Milotic
- Kecleon
- Absol
- Spheal, Sealeo, Walrein
- Relicanth
- Bagon, Shelgon, Salamence
- Munchlax
- Finneon, Lumineon
- Purrloin, Liepard
- Timburr, Gurdurr, Conkeldurr
- Joltik, Galvantula
- Elgyem, Beheeyem
- Golett, Golurk
- Deino, Zweilous, Hydreigon
- Flabébé, Floette, Florges
- Clauncher, Clawitzer
- Mareanie, Toxapex
- Wimpod, Golisopod
- Bruxish
- Hatenna, Hattrem, Hatterene
- Pincurchin
- Klawf
- Finizen, Palafin [Zero], Palafin [Hero]
- Dondozo
### Added shoulder mounts for the following Pokémon
- Weedle
- Caterpie
- Spearow
- Mew
- Murkrow
- Smoochum
- Larvitar
- Tailow
- Plusle
- Minun
- Beldum
- Starly
- Buneary
- Combee
- Pachirisu
- Tepig
- Pidove
- Petilil, Hisui Bias Petilil
- Zorua, Hisui Bias Zorua
- Elgyem
- Fletchling
- Skrelp
- Klefki
- Litten
- Fomantis
- Morelull
- Dreepy
- Sprigatito
- Shroodle
- Tatsugiri
- Glimmet
- Gimmighoul [Roaming]
### Animation updates for the following Pokémon
- Bellsprout, Weepinbel, Victreebel
- Shellder, Cloyster
- Porygon, Porygon2, Porygon-Z
- Furret
- Swinub, Piloswine, Mamoswine
- Skarmory
- Tyrogue
- Spinda
- Torkoal
- Nincada, Ninjask
- Lunatone
- Solrock
- Buneary, Lopunny
- Magnezone
- Alomomola
- Tepig, Pignite, Emboar
- Flabebe, Floette, Florges
- Litten, Torracat, Incineroar
- Fomantis, Lurantis
- Dreepy, Drakloak
- Kleavor
- Scorbunny
- Gimmighoul [Roaming]
### Model updates for the following Pokémon
- Bulbasaur, Ivysaur, Venusaur
- Charmander, Charmeleon, Charizard
- Kakuna, Beedrill
- Lapras
- Porygon, Porygon2, Porygon-Z
- Igglybuff, Jigglypuff, Wigglytuff
- Poliwhirl, Poliwrath
- Bellsprout, Weepinbell, Victreebel
- Shellder, Cloyster
- Gastly, Haunter
- Onix
- Krabby, Kingler
- Rhyhorn, Rhydon, Rhyperior
- Horsea, Seadra, Kingdra
- Goldeen, Seaking
- Magby, Magmar, Magmortar
- Magikarp, Gyarados
- Munchlax, Snorlax
- Swinub, Piloswine, Mamoswine
- Mudkip, Marshtomp, Swampert
- Baltoy, Claydol
- Carvanha
- Relicanth
- Prinplup, Empoleon
- Gible, Gabite, Garchomp
- Riolu, Lucario
- Snivy, Servine, Serperior
- Tepig, Pignite, Emboar
- Krookodile
- Dwebble, Crustle
- Joltik, Galvantula
- Klink, Klang, Klinglang
- Golett, Golurk
- Fennekin, Braixen, Delphox
- Phantump, Trevenant
- Litten, Torracat, Incineroar
- Popplio, Brionne, Primarina
- Lurantis
- Scorbunny, Cinderace
- Quaxly
- Tatsugiri
### Changes
- Buffed Dusk Ball catch multipliers: Increased multiplier to 3.5 (from 3.0) in light level 0. Increased multiplier to 3.0 (from 1.5) in light levels 1-7.
@@ -99,9 +300,7 @@
- Adjusted some berry balance values like yield and growth times.
- Adjusted volumes of sounds made by Display Cases, Berry Bushes, Energy Root, Medicinal Leek, Vivichoke, Mints, Revival Herbs and Gilded Chests.
- Changes to mulch buffs/durations.
- Dreepy is now shoulder mountable.
- Updated potion sprites.
- Weedle, Caterpie, Spearow, Smoochum, Mew, Murkrow, Larvitar, Taillow, Plusle, Minun, Beldum, Starly, Buneary, Combee, Pachirisu, Pidove, Petilil, Hisui Bias Petilil, Zorua, Hisuian Zorua, Elgyem, Fletchling, Skrelp, Klefki, Fomantis, Morelull, Dreepy, Shroodle, Tatsugiri, Glimmet, and Roaming Gimmighoul are now shoulder mountable.
- Link Cable recipe has been redesigned.
- Updated sounds for Medicinal Leeks, Big Roots, Energy Roots and Revival Herbs.
- Updated UI sounds for clicking and evolving Pokémon.
@@ -124,6 +323,15 @@
- The default number of digits for the Pokédex number in the summary has been increased, from 3 to 4.
- The pasture block model's screen is now off by default.
- The Poké Balls creative tab is now named Utility Items as it also encompasses Poké Rod and Pokédex items.
- Moves can now be benched without specifying a replacement move, allowing for empty move slots.
- Moves learned via Sketch now persist after battle.
- Updated potion sprites
- Removed the interchangeable evolution results for the first stage Hisuian starters to prevent confusion. The method still exists for stage 2 to 3, but stage 1 to 2 was not distinguishable enough for many users.
- Hidden Power now displays its effective typing.
- Updated particles for moves: Confusion, Protect, Sand Attack, and Quick Attack.
- Updated particles for status effects: Paralysis, Poison, and Sleep.
- Updated particles on Gastly.
- Revamped stat buff and de-buff particles.
### Fixes
- Scaled down Amaura's fetus model to avoid clipping through the tank while animating.
@@ -179,6 +387,7 @@
- Fixed Slowking's battle idle.
- Fixed Grafaiai's walk speed to prevent model sliding.
- Fixed Alolan Exeggutor's tail not showing in the party UI. It will now also stand in front of all Pokémon in the party menu :)
- Fixed Timburr duplicating its log while fainting.
- Fixed reviving items throwing an exception when used in battle.
- Fixed messages for Focus Sash, Confusion, Mummy, Ice Face, Own Tempo, and Revive.
- Improve error handling when loading spawn-sets to ensure invalid configurations don't crash the server.
@@ -43,6 +43,7 @@ import com.cobblemon.mod.common.api.spawning.prospecting.SpawningProspector
import com.cobblemon.mod.common.api.starter.StarterHandler
import com.cobblemon.mod.common.api.storage.PokemonStoreManager
import com.cobblemon.mod.common.api.storage.adapter.conversions.ReforgedConversion
import com.cobblemon.mod.common.api.storage.adapter.database.MongoDBStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.FileStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.JSONStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.NBTStoreAdapter
@@ -52,8 +53,7 @@ import com.cobblemon.mod.common.api.storage.pc.PCStore
import com.cobblemon.mod.common.api.storage.pc.link.PCLinkManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.api.storage.player.adapter.DexDataNbtBackend
import com.cobblemon.mod.common.api.storage.player.adapter.PlayerDataJsonBackend
import com.cobblemon.mod.common.api.storage.player.adapter.*
import com.cobblemon.mod.common.api.storage.player.factory.CachedPlayerDataStoreFactory
import com.cobblemon.mod.common.api.tags.CobblemonEntityTypeTags
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
@@ -106,7 +106,10 @@ import com.cobblemon.mod.common.util.*
import com.cobblemon.mod.common.world.feature.CobblemonPlacedFeatures
import com.cobblemon.mod.common.world.feature.ore.CobblemonOrePlacedFeatures
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.client.MongoClient
import com.mongodb.client.MongoClients
import java.io.File
import java.io.FileReader
import java.io.FileWriter
@@ -322,9 +325,7 @@ object Cobblemon {
}
}
/*
"mongodb" -> {
/*
try {
Class.forName("com.mongodb.client.MongoClient")
@@ -332,18 +333,22 @@ object Cobblemon {
.applyConnectionString(ConnectionString(config.mongoDBConnectionString))
.build()
mongoClient = MongoClients.create(mongoClientSettings)
val mongoFactory = MongoPlayerDataStoreFactory(mongoClient, config.mongoDBDatabaseName)
playerData.setFactory(mongoFactory, PlayerInstancedDataStoreType.GENERAL)
val generalMongoFactory = CachedPlayerDataStoreFactory(PlayerDataMongoBackend(mongoClient, config.mongoDBDatabaseName, "PlayerDataCollection"))
generalMongoFactory.setup(server)
val pokedexMongoFactory = CachedPlayerDataStoreFactory(DexDataMongoBackend(mongoClient, config.mongoDBDatabaseName, "PokeDexCollection"))
pokedexMongoFactory.setup(server)
playerDataManager.setFactory(generalMongoFactory, PlayerInstancedDataStoreTypes.GENERAL)
playerDataManager.setFactory(pokedexMongoFactory, PlayerInstancedDataStoreTypes.POKEDEX)
MongoDBStoreAdapter(mongoClient, config.mongoDBDatabaseName)
} catch (e: ClassNotFoundException) {
LOGGER.error("MongoDB driver not found.")
throw e
}
*/
}
*/
else -> throw IllegalArgumentException("Unsupported storageFormat: ${config.storageFormat}")
}
@@ -11,6 +11,7 @@ package com.cobblemon.mod.common.api.storage.player.adapter
import com.cobblemon.mod.common.api.pokedex.PokedexManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreType
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.util.adapters.CodecBackedAdapter
import com.cobblemon.mod.common.util.adapters.IdentifierAdapter
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
@@ -27,7 +28,7 @@ class DexDataJsonBackend: JsonBackedPlayerDataStoreBackend<PokedexManager>("poke
override val gson = GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.registerTypeAdapter(ResourceLocation::class.java, IdentifierAdapter)
.registerTypeAdapter(PokedexManager::class.java, CodecBackedAdapter(PokedexManager.CODEC))
.create()
override val classToken = TypeToken.get(PokedexManager::class.java)
override val defaultData = defaultDataFunc
@@ -0,0 +1,44 @@
/*
* 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.storage.player.adapter
import com.cobblemon.mod.common.api.pokedex.PokedexManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.util.adapters.CodecBackedAdapter
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import com.mongodb.client.MongoClient
import java.util.UUID
/**
* A [PlayerDataStoreBackend] for [PokedexManager]
*
* @author Pebbles
* @since October 26, 2024
*/
class DexDataMongoBackend(mongoClient: MongoClient, databaseName: String, collectionName: String) :
MongoBackedPlayerDataStoreBackend<PokedexManager>(mongoClient, databaseName, collectionName, PlayerInstancedDataStoreTypes.POKEDEX) {
override val gson = GsonBuilder()
.registerTypeAdapter(PokedexManager::class.java, CodecBackedAdapter(PokedexManager.CODEC))
.create()
override val classToken = TypeToken.get(PokedexManager::class.java)
override val defaultData = defaultDataFunc
override fun initialize(store: PokedexManager) {
store.initialize()
}
companion object {
val defaultDataFunc = { uuid: UUID ->
PokedexManager(uuid, mutableMapOf())
}
}
}
@@ -0,0 +1,59 @@
/*
* 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.storage.player.adapter
import com.cobblemon.mod.common.api.storage.player.InstancedPlayerData
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreType
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.mongodb.client.MongoClient
import com.mongodb.client.model.ReplaceOptions
import org.bson.Document
import java.io.BufferedReader
import java.io.FileReader
import java.io.PrintWriter
import java.util.UUID
import kotlin.reflect.KMutableProperty
import kotlin.reflect.full.memberProperties
abstract class MongoBackedPlayerDataStoreBackend<T : InstancedPlayerData>(
mongoClient: MongoClient, databaseName: String, collectionName: String, type: PlayerInstancedDataStoreType
) : MongoBasedPlayerDataStoreBackend<T>(mongoClient, type, databaseName, collectionName) {
abstract val gson: Gson
//The class GSON needs to deserialize to
abstract val classToken: TypeToken<T>
override fun save(playerData: T) {
collection.replaceOne(
Document("uuid", playerData.uuid.toString()),
Document.parse(gson.toJson(playerData)),
ReplaceOptions().upsert(true)
)
}
override fun load(uuid: UUID): T {
val filter = Document("uuid", uuid.toString())
val document = collection.find(filter).first()
return if (document != null) {
val jsonStr = document.toJson()
gson.fromJson(jsonStr, classToken).also {
val newProps = it::class.memberProperties.filterIsInstance<KMutableProperty<*>>()
.filter { member -> member.getter.call(it) == null }
if (newProps.isNotEmpty()) {
val defaultData = defaultData(uuid)
newProps.forEach { member -> member.setter.call(it, member.getter.call(defaultData)) }
}
}
} else {
defaultData(uuid).also(::save)
}
}
}
@@ -0,0 +1,36 @@
/*
* 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.storage.player.adapter
import com.cobblemon.mod.common.api.storage.player.InstancedPlayerData
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreType
import com.mongodb.client.MongoClient
import net.minecraft.server.MinecraftServer
import java.util.UUID
/**
* A [PlayerDataStoreBackend] that stores the [InstancedPlayerData] in a file.
*
* @author Pebbles
* @since October 27, 2024
*/
abstract class MongoBasedPlayerDataStoreBackend<T : InstancedPlayerData>(
val mongoClient: MongoClient, val type: PlayerInstancedDataStoreType, databaseName: String, collectionName: String
) : PlayerDataStoreBackend<T>(type) {
abstract val defaultData: (UUID) -> (T)
val collection by lazy {
mongoClient.getDatabase(databaseName).getCollection(collectionName)
}
override fun setup(server: MinecraftServer) {
// Ping the database to ensure it's connected
mongoClient.listDatabaseNames().first()
}
}
@@ -1,67 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
/*
package com.cobblemon.mod.common.api.storage.player.adapter
import com.cobblemon.mod.common.api.storage.player.PlayerData
import com.cobblemon.mod.common.api.storage.player.PlayerDataExtension
import com.cobblemon.mod.common.util.adapters.IdentifierAdapter
import com.google.gson.GsonBuilder
import com.mongodb.client.MongoClient
import com.mongodb.client.model.ReplaceOptions
import net.minecraft.resources.ResourceLocation
import org.bson.Document
import java.util.UUID
import kotlin.reflect.KMutableProperty
import kotlin.reflect.full.memberProperties
class MongoPlayerDataAdapter(
mongoClient: MongoClient,
databaseName: String
) : PlayerDataStoreAdapter {
companion object {
val gson = GsonBuilder()
.disableHtmlEscaping()
.registerTypeAdapter(PlayerDataExtension::class.java, PlayerDataExtensionAdapter)
.registerTypeAdapter(ResourceLocation::class.java, IdentifierAdapter)
.create()
}
private val collection = mongoClient.getDatabase(databaseName).getCollection("PlayerDataCollection")
override fun load(uuid: UUID): PlayerData {
val filter = Document("uuid", uuid.toString())
val document = collection.find(filter).first()
return if (document != null) {
val jsonStr = document.toJson()
gson.fromJson(jsonStr, PlayerData::class.java).also {
val newProps = it::class.memberProperties.filterIsInstance<KMutableProperty<*>>().filter { member -> member.getter.call(it) == null }
if (newProps.isNotEmpty()) {
val defaultData = PlayerData.defaultData(uuid)
newProps.forEach { member -> member.setter.call(it, member.getter.call(defaultData)) }
}
}
} else {
PlayerData.defaultData(uuid).also(::save)
}
}
override fun save(playerData: PlayerData) {
val jsonStr = gson.toJson(playerData)
val document = Document.parse(jsonStr)
document.put("uuid", playerData.uuid.toString())
val filter = Document("uuid", playerData.uuid.toString())
collection.replaceOne(filter, document, ReplaceOptions().upsert(true))
}
}
*/
@@ -0,0 +1,49 @@
/*
* 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.storage.player.adapter
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.api.storage.player.GeneralPlayerData
import com.cobblemon.mod.common.api.storage.player.PlayerDataExtension
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.util.adapters.IdentifierAdapter
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import com.mongodb.client.MongoClient
import net.minecraft.resources.ResourceLocation
import java.util.UUID
/**
* A [PlayerDataStoreBackend] for [GeneralPlayerData]
*
* @author Apion
* @since February 21, 2024
*/
class PlayerDataMongoBackend(mongoClient: MongoClient, databaseName: String, collectionName: String): MongoBackedPlayerDataStoreBackend<GeneralPlayerData>(
mongoClient, databaseName, collectionName, PlayerInstancedDataStoreTypes.GENERAL
){
override val defaultData = { forPlayer: UUID -> GeneralPlayerData(
uuid = forPlayer,
starterPrompted = false,
starterLocked = !Cobblemon.starterConfig.allowStarterOnJoin,
starterSelected = false,
starterUUID = null,
keyItems = mutableSetOf(),
extraData = mutableMapOf(),
battleTheme = CobblemonSounds.PVP_BATTLE.location
)}
override val gson = GsonBuilder()
.registerTypeAdapter(PlayerDataExtension::class.java, PlayerDataExtensionAdapter)
.registerTypeAdapter(ResourceLocation::class.java, IdentifierAdapter)
.create()
override val classToken = TypeToken.get(GeneralPlayerData::class.java)
}
@@ -35,6 +35,12 @@ interface Targetable {
}
}
fun getOppositeOpponent() : Targetable {
val digit = getDigit()
val sideSize = getFormat().battleType.pokemonPerSide
return getAllActivePokemon().first { pokemon -> !pokemon.isAllied(this) && (sideSize - pokemon.getDigit() + 1) - digit == 0 }
}
fun getAdjacentAllies() = getAdjacent().filter { it.isAllied(this) }
fun getAdjacentOpponents() = getAdjacent().filterNot { it.isAllied(this) }
@@ -148,59 +148,74 @@ object ShowdownInterpreter {
*/
fun getSendoutPosition(battle: PokemonBattle, activePokemon: ActiveBattlePokemon, battleActor: BattleActor): Vec3? {
val pnx = activePokemon.getPNX()
val entityPosList = battleActor.getSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
var entityPos = if (entityPosList.size == 1)
entityPosList[0]
else if (entityPosList.size > 1)
entityPosList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / entityPosList.size)) }
val actorEntityPosList = battleActor.getSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val actorEntityPos = if (actorEntityPosList.size == 1)
actorEntityPosList[0]
else if (actorEntityPosList.size > 1)
actorEntityPosList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / actorEntityPosList.size)) }
else
null
val opposingEntityList = battleActor.getSide().getOppositeSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val opposingEntityPos = if (opposingEntityList.size == 1)
opposingEntityList[0]
else if (opposingEntityList.size > 1)
opposingEntityList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / opposingEntityList.size)) }
val opposingActorEntityList = battleActor.getSide().getOppositeSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val opposingEntityPos = if (opposingActorEntityList.size == 1)
opposingActorEntityList[0]
else if (opposingActorEntityList.size > 1) {
// If multiple actors per side, avg their position
opposingActorEntityList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / opposingActorEntityList.size)) }
}
else null
var baseOffset = entityPos?.let { opposingEntityPos?.subtract(it) }
if (baseOffset != null) {
val minDistance = if (battle.isPvW) 8.0 else 5.0
val length = baseOffset.length()
if (length < minDistance) {
val temp = baseOffset.scale(minDistance / length) ?: baseOffset
entityPos = entityPos?.subtract(temp.subtract(baseOffset))
baseOffset = temp
var actorOffset = actorEntityPos?.let { opposingEntityPos?.subtract(it) }
var result = actorEntityPos
if (actorOffset != null) {
var widthSum = 4.0 // Leave a constant to allow double/triples alignment to be consistent
if (battle.format.battleType.pokemonPerSide == 1) {
activePokemon.battlePokemon?.let { battlePokemon ->
// sum of the hitbox widths of both pokemon
val opposingActivePokemon = (activePokemon.getOppositeOpponent() as ActiveBattlePokemon)
val pokemonWidth = battlePokemon.originalPokemon.form.hitbox.width * battlePokemon.originalPokemon.form.baseScale
val opposingPokemonWidth = opposingActivePokemon.battlePokemon?.let {
it.originalPokemon.form.hitbox.width * it.originalPokemon.form.baseScale
} ?: pokemonWidth
widthSum = (pokemonWidth + opposingPokemonWidth) / 2.0 // Only care about the front half of each hitbox
}
}
var vector = Vec3(baseOffset.x, 0.0, baseOffset.z).normalize()
val minDistance = 4.0 + widthSum
val actorDistance = actorOffset.length()
if (actorDistance < minDistance) {
val temp = actorOffset.scale(minDistance / actorDistance) ?: actorOffset
result = actorEntityPos?.subtract(temp.subtract(actorOffset))
actorOffset = temp
}
var vector = Vec3(actorOffset.x, 0.0, actorOffset.z).normalize()
vector = vector.cross(Vec3(0.0, 1.0, 0.0))
if (battle.format.battleType.pokemonPerSide == 1) { // Singles
entityPos = entityPos?.add(baseOffset.scale(if (battle.isPvW) 0.4 else 0.3))
result = result?.add(actorOffset.scale(if (battle.isPvW) 0.4 else 0.3))
activePokemon.battlePokemon?.let { battlePokemon ->
val hitbox = battlePokemon.originalPokemon.form.hitbox
val scale = battlePokemon.originalPokemon.form.baseScale
if (hitbox.height * scale > 1.1) {
entityPos = entityPos?.add(vector.scale(-1.5 - hitbox.width * scale / 2))
}
activePokemon.getAdjacentOpponents()
result = result?.add(vector.scale(-0.3 - hitbox.width * scale ))
}
} else if (battle.format.battleType.pokemonPerSide == 2) { // Doubles
} else if (battle.format.battleType.pokemonPerSide == 2) { // Doubles/Multi
if (battle.actors.first() !== battle.actors.last()) {
val offsetB = if (pnx[2] == 'a') vector.scale(-1.0) else vector
entityPos = entityPos?.add(baseOffset.scale(0.33))?.add(offsetB.scale(2.5))
result = result?.add(actorOffset.scale(0.33))?.add(offsetB.scale(2.5))
}
} else if (battle.format.battleType.pokemonPerSide == 3) { // Triples
if (battle.actors.first() !== battle.actors.last()) {
entityPos = when (pnx[2]) {
'a' -> entityPos?.add(baseOffset.scale(0.15))?.add(vector.scale(-3.5))
'b' -> entityPos?.add(baseOffset.scale(0.3))
'c' -> entityPos?.add(baseOffset.scale(0.15))?.add(vector.scale(3.5))
else -> entityPos
result = when (pnx[2]) {
'a' -> result?.add(actorOffset.scale(0.15))?.add(vector.scale(-3.5))
'b' -> result?.add(actorOffset.scale(0.3))
'c' -> result?.add(actorOffset.scale(0.15))?.add(vector.scale(3.5))
else -> result
}
}
}
}
return entityPos
return result
}
@@ -348,7 +348,10 @@ class PokedexGUI private constructor(
if (entries.isNotEmpty()) {
if (init && initSpecies != null) {
val entry = entries.first { it.speciesId == initSpecies }
var entry = entries.firstOrNull { it.speciesId == initSpecies }
if (entry == null) {
entry = entries.first()
}
setSelectedEntry(entry)
scrollScreen.scrollAmount = (entries.indexOf(entry).toDouble() / entries.size.toDouble()) * scrollScreen.maxScroll
} else {
@@ -96,6 +96,12 @@ class LocatorAccess(
state.getOrPut("middle") { MatrixWrapper() }.updateMatrix(matrixStack.last().pose())
matrixStack.popPose()
// If we have the entity, put in a "top" locator for top center of hitbox.
matrixStack.pushPose()
matrixStack.translate(0.0, -entity.boundingBox.ysize, 0.0)
matrixStack.scale(-1F, -1F, 1F)
state.getOrPut("top") { MatrixWrapper() }.updateMatrix(matrixStack.last().pose())
matrixStack.popPose()
}
for ((name, locator) in locators) {
@@ -1,74 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class AlakazamModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("alakazam")
override val head = getPart("head")
override val leftArm = getPart("left_shoulder")
override val rightArm = getPart("right_shoulder")
override val leftLeg = getPart("left_upper_leg")
override val rightLeg = getPart("right_upper_leg")
override var portraitScale = 1.75F
override var portraitTranslation = Vec3(-0.25, 0.85, 0.0)
override var profileScale = 0.73F
override var profileTranslation = Vec3(0.0, 0.65, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("alakazam", "blink")}
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook() ,
bedrock("alakazam", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("alakazam", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("alakazam", "faint") else null
}
@@ -1,60 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class BellsproutModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("bellsprout")
override val head = getPart("head")
override var portraitScale = 2.0F
override var portraitTranslation = Vec3(-0.1, 0.41, 0.0)
override var profileScale = 0.75F
override var profileTranslation = Vec3(0.0, 0.64, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("bellsprout", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("bellsprout", "ground_idle")
//bedrock("bellsprout", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("bellsprout", "faint") else null
}
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
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.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
@@ -33,6 +34,8 @@ class GengarModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame {
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("gengar", "cry") }
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
@@ -1,119 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
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.UI_POSES
import com.cobblemon.mod.common.util.isInWater
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class LaprasModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("lapras")
override val head = getPart("head_ai")
override val foreLeftLeg = getPart("leg_front_left")
override val foreRightLeg = getPart("leg_front_right")
override val hindLeftLeg = getPart("leg_back_left")
override val hindRightLeg = getPart("leg_back_right")
override var portraitScale = 1.14F
override var portraitTranslation = Vec3(-0.66, 1.91, 0.0)
override var profileScale = 0.48F
override var profileTranslation = Vec3(-0.01, 0.99, 0.0)
lateinit var landIdle: CobblemonPose
lateinit var landMove: CobblemonPose
lateinit var surfaceIdle: CobblemonPose
lateinit var surfaceMove: CobblemonPose
lateinit var underwaterIdle: CobblemonPose
lateinit var underwaterMove: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("lapras", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("lapras", "blink") }
landIdle = registerPose(
poseName = "land_idle",
poseTypes = UI_POSES + PoseType.STAND,
condition = { !it.isInWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lapras", "ground_idle")
)
)
landMove = registerPose(
poseName = "land_move",
poseTypes = setOf(PoseType.WALK),
condition = { !it.isInWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lapras", "ground_idle"),
QuadrupedWalkAnimation(this, 2.5F, 0.25F )
)
)
surfaceIdle = registerPose(
poseName = "surface_idle",
poseTypes = setOf(PoseType.STAND),
condition = { it.isInWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lapras", "surfacewater_idle")
)
)
surfaceMove = registerPose(
poseName = "surface_move",
poseTypes = setOf(PoseType.WALK),
condition = { it.isInWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lapras", "surfacewater_swim")
)
)
underwaterIdle = registerPose(
poseName = "underwater_idle",
poseTypes = setOf(PoseType.FLOAT),
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lapras", "surfacewater_idle")
)
)
underwaterMove = registerPose(
poseName = "underwater_move",
poseTypes = setOf(PoseType.SWIM),
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lapras", "surfacewater_swim")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(landIdle, landMove)) bedrockStateful("lapras", "faint") else null
}
@@ -1,68 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class MagmarModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("magmar")
override val head = getPart("head")
override val leftArm = getPart("leftarm")
override val rightArm = getPart("rightarm")
override val leftLeg = getPart("leftleg")
override val rightLeg = getPart("rightleg")
override var portraitScale = 2.8F
override var portraitTranslation = Vec3(-0.1, 0.3, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.58, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("magmar", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("magmar", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("magmar", "faint") else null
}
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
@@ -28,6 +29,8 @@ class MagnemiteModel(root: ModelPart) : PokemonPosableModel(root) {
lateinit var walk: Pose
lateinit var sleep: Pose
override val cryAnimation = CryProvider { bedrockStateful("magnemite", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("magnemite", "blink") }
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
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.Pose
import com.cobblemon.mod.common.entity.PoseType
@@ -28,6 +29,8 @@ class MagnetonModel(root: ModelPart) : PokemonPosableModel(root) {
lateinit var walk: Pose
lateinit var sleep: Pose
override val cryAnimation = CryProvider { bedrockStateful("magneton", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("magneton", "blink") }
@@ -1,102 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
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 OnixModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("onix")
override val head = getPart("head")
override var portraitScale = 1.1F
override var portraitTranslation = Vec3(-0.2, 1.4, 0.0)
override var profileScale = 0.55F
override var profileTranslation = Vec3(-0.1, 0.9, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var ui: Pose
lateinit var sleep: Pose
lateinit var battleidle: Pose
override val cryAnimation = CryProvider { bedrockStateful("onix", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("onix", "blink") }
ui = registerPose(
poseName = "ui",
poseTypes = UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("onix", "summary_idle")
)
)
sleep = registerPose(
poseType = PoseType.SLEEP,
transformTicks = 0,
animations = arrayOf(
bedrock("onix", "sleep"),
bedrock("onix", "slow_boulder_rotation")
)
)
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES,
transformTicks = 1,
condition = { !it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("onix", "ground_idle"),
bedrock("onix", "boulder_rotation")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 1,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("onix", "ground_walk"),
bedrock("onix", "boulder_rotation")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("onix", "battle_idle"),
bedrock("onix", "boulder_rotation")
)
)
}
override fun getFaintAnimation(state: PosableState) = bedrockStateful("onix", "faint")
}
@@ -1,72 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class PoliwhirlModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("poliwhirl")
override var portraitScale = 1.4F
override var portraitTranslation = Vec3(-0.1, 0.2, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.5, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var float: Pose
lateinit var swim: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("poliwhirl", "blink")}
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("poliwhirl", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STANDING_POSES + UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("poliwhirl", "ground_idle")
)
)
float = registerPose(
poseName = "float",
poseType = PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("poliwhirl", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("poliwhirl", "water_swim")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("poliwhirl", "faint") else null
}
@@ -1,72 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class PoliwrathModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("poliwrath")
override var portraitScale = 1.3F
override var portraitTranslation = Vec3(-0.1, 0.36, 0.0)
override var profileScale = 0.85F
override var profileTranslation = Vec3(0.0, 0.42, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var float: Pose
lateinit var swim: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("poliwrath", "blink")}
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STANDING_POSES + UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("poliwrath", "ground_idle")
)
)
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("poliwrath", "sleep"))
)
float = registerPose(
poseName = "float",
poseType = PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("poliwrath", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("poliwrath", "water_swim")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("poliwrath", "faint") else null
}
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
@@ -33,6 +34,8 @@ class SandshrewModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("sandshrew", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("sandshrew", "blink")}
standing = registerPose(
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
@@ -32,6 +33,8 @@ class SandslashModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("sandslash", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("sandslash", "blink")}
standing = registerPose(
@@ -1,56 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class VictreebelModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("victreebel")
override var portraitScale = 2.0F
override var portraitTranslation = Vec3(-0.1, -0.2, 0.0)
override var profileScale = 0.92F
override var profileTranslation = Vec3(0.0, 0.35, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
animations = arrayOf(
bedrock("victreebel", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
animations = arrayOf(
bedrock("victreebel", "ground_idle")
//bedrock("victreebel", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("victreebel", "faint") else null
}
@@ -1,54 +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.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class WeepinbellModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("weepinbell")
override var portraitScale = 1.73F
override var portraitTranslation = Vec3(0.0, -1.0, 0.0)
override var profileScale = 1.1F
override var profileTranslation = Vec3(0.0, 0.2, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
bedrock("weepinbell", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
animations = arrayOf(
bedrock("weepinbell", "ground_idle")
//bedrock("weepinbell", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("weepinbell", "faint") else null
}
@@ -1,63 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FurretModel (root: ModelPart) : PokemonPosableModel(root), QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("furret")
override val foreLeftLeg = getPart("arm_left")
override val foreRightLeg = getPart("arm_right")
override val hindLeftLeg = getPart("leg_left")
override val hindRightLeg = getPart("leg_right")
override var portraitScale = 2.1F
override var portraitTranslation = Vec3(-0.6, 0.2, 0.0)
override var profileScale = 0.82F
override var profileTranslation = Vec3(0.0, 0.54, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("furret", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("furret", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
QuadrupedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
bedrock("furret", "pose")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("furret", "faint") else null
}
@@ -1,68 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class MagbyModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("magby")
override val head = getPart("head")
override val leftArm = getPart("lefthand")
override val rightArm = getPart("righthand")
override val leftLeg = getPart("leftleg")
override val rightLeg = getPart("rightleg")
override var portraitScale = 2.4F
override var portraitTranslation = Vec3(-0.05, -0.45, 0.0)
override var profileScale = 0.78F
override var profileTranslation = Vec3(-0.03, 0.61, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("magby", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("magby", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("magby", "faint") else null
}
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
@@ -28,6 +29,8 @@ class MisdreavusModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("misdreavus", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("misdreavus", "blink") }
standing = registerPose(
@@ -12,6 +12,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.animation.Bimanu
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
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
@@ -35,6 +36,8 @@ class SentretModel (root: ModelPart) : PokemonPosableModel(root), BipedFrame, Bi
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("sentret", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("sentret", "blink") }
@@ -1,106 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BiWingedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SkarmoryModel (root: ModelPart) : PokemonPosableModel(root), BipedFrame, BiWingedFrame, HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("skarmory")
override val head = getPart("lower_neck")
override val leftLeg = getPart("left_thigh")
override val rightLeg = getPart("right_thigh")
override val leftWing = getPart("left_wing")
override val rightWing = getPart("right_wing")
override var portraitScale = 2.49F
override var portraitTranslation = Vec3(-1.05, 1.1, 0.0)
override var profileScale = 0.69F
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var sleeping: CobblemonPose
lateinit var hovering: CobblemonPose
lateinit var flying: CobblemonPose
lateinit var battleidle: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("skarmory", "blink") }
sleeping = registerPose(
poseName = "sleeping",
poseType = PoseType.SLEEP,
animations = arrayOf(
bedrock("skarmory", "sleep")
)
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES - PoseType.HOVER + PoseType.UI_POSES,
condition = { !it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("skarmory", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES - PoseType.FLY,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("skarmory", "ground_idle"),
BipedWalkAnimation(this,0.6F, 1F)
)
)
hovering = registerPose(
poseName = "hovering",
poseType = PoseType.HOVER,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("skarmory", "air_idle")
)
)
flying = registerPose(
poseName = "flying",
poseType = PoseType.FLY,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("skarmory", "air_idle")
)
)
battleidle = registerPose(
poseName = "battleidle",
poseTypes = PoseType.STATIONARY_POSES,
condition = { it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("skarmory", "battle_idle")
)
)
}
}
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SmeargleModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame {
override val rootPart = root.registerChildWithAllChildren("smeargle")
override val head = getPart("head")
/* No arm swinging because it's holding its tail */
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 1.29F
override var portraitTranslation = Vec3(-0.03, 0.96, 0.0)
override var profileScale = 0.67F
override var profileTranslation = Vec3(0.05, 0.8, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
//override val cryAnimation = CryProvider { _, _ -> bedrockStateful("smeargle", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("smeargle", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES + PoseType.SLEEP,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("smeargle", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("smeargle", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
)
)
}
}
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
@@ -35,6 +36,8 @@ class StantlerModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame,
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("stantler", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("stantler", "blink") }
@@ -1,112 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation.Companion.X_AXIS
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TyrogueModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("tyrogue")
override val head = getPart("head")
override var portraitScale = 2.56F
override var portraitTranslation = Vec3(-0.24, 0.1, 0.0)
override var profileScale = 0.73F
override var profileTranslation = Vec3(-0.03, 0.7, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
lateinit var battleidle: Pose
val shoulderOffset = 3
// override val cryAnimation = CryProvider { bedrockStateful("tyrogue", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("tyrogue", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("tyrogue", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
transformTicks = 10,
condition = { !it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("tyrogue", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("tyrogue", "ground_walk")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("tyrogue", "battle_idle")
)
)
shoulderLeft = registerPose(
poseType = PoseType.SHOULDER_LEFT,
quirks = arrayOf(blink),
condition = { !it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("tyrogue", "shoulder_left")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(X_AXIS, shoulderOffset)
)
)
shoulderRight = registerPose(
poseType = PoseType.SHOULDER_RIGHT,
quirks = arrayOf(blink),
condition = { !it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("tyrogue", "shoulder_right")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(X_AXIS, -shoulderOffset)
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, sleep)) bedrockStateful("tyrogue", "faint") else null
}
@@ -1,49 +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.gen3
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class LunatoneModel (root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("lunatone")
override var portraitScale = 1.05F
override var portraitTranslation = Vec3(0.23, 0.53, 0.0)
override var profileScale = 0.73F
override var profileTranslation = Vec3(0.05, 0.68, 0.0)
lateinit var sleep: CobblemonPose
lateinit var standing: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("lunatone", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("lunatone", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.ALL_POSES - PoseType.SLEEP,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("lunatone", "ground_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(sleep)) bedrockStateful("lunatone", "faint") else null
}
@@ -1,74 +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.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class NincadaModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("nincada")
override val head = getPart("head")
override val foreLeftLeg= getPart("leg_front_left")
override val foreRightLeg = getPart("leg_front_right")
override val hindLeftLeg = getPart("leg_back_left")
override val hindRightLeg = getPart("leg_back_right")
override var portraitScale = 2.0F
override var portraitTranslation = Vec3(-0.26, -1.0, 0.0)
override var profileScale = 0.7F
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("nincada", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("nincada", "blink") }
val flutter = quirk { bedrockStateful("nincada", "quirk_wingflutter") }
sleep = registerPose(
poseType = PoseType.SLEEP,
transformTicks = 10,
animations = arrayOf(bedrock("nincada", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = setOf(PoseType.NONE, PoseType.STAND, PoseType.PORTRAIT, PoseType.PROFILE),
transformTicks = 10,
quirks = arrayOf(blink, flutter),
animations = arrayOf(
singleBoneLook(),
bedrock("nincada", "ground_idle")
)
)
walk = registerPose(
poseName = "walking",
poseTypes = setOf(PoseType.SWIM, PoseType.WALK),
transformTicks = 10,
quirks = arrayOf(blink, flutter),
animations = arrayOf(
singleBoneLook(),
bedrock("nincada", "ground_walk")
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk)) bedrockStateful("nincada", "faint") else null
}
@@ -1,93 +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.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class NinjaskModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("ninjask")
override val head = getPart("head")
override var portraitScale = 1.8F
override var portraitTranslation = Vec3(-0.2, -0.4, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.3, 0.0)
lateinit var sleep: Pose
lateinit var stand: Pose
lateinit var walk: Pose
lateinit var hover: Pose
lateinit var fly: Pose
override val cryAnimation = CryProvider { bedrockStateful("ninjask", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("ninjask", "blink") }
val barrelRoll = quirk { bedrockStateful("ninjask", "run_quirk") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("ninjask", "sleep"))
)
stand = registerPose(
poseName = "standing",
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES - PoseType.HOVER,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("ninjask", "ground_idle")
)
)
hover = registerPose(
poseName = "hover",
poseType = PoseType.HOVER,
transformTicks = 10,
quirks = arrayOf(blink, barrelRoll),
animations = arrayOf(
singleBoneLook(),
bedrock("ninjask", "air_idle")
)
)
fly = registerPose(
poseName = "fly",
poseType = PoseType.FLY,
transformTicks = 10,
quirks = arrayOf(blink, barrelRoll),
animations = arrayOf(
singleBoneLook(),
bedrock("ninjask", "air_fly")
)
)
walk = registerPose(
poseName = "walking",
poseTypes = PoseType.MOVING_POSES - PoseType.FLY,
transformTicks = 10,
quirks = arrayOf(blink, barrelRoll),
animations = arrayOf(
singleBoneLook(),
bedrock("ninjask", "ground_walk")
)
)
}
override fun getFaintAnimation(state: PosableState) = bedrockStateful("ninjask", "faint")
}
@@ -1,49 +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.gen3
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SolrockModel (root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("solrock")
override var portraitScale = 1.6F
override var portraitTranslation = Vec3(-0.08, 0.31, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.74, 0.0)
lateinit var sleep: CobblemonPose
lateinit var standing: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("solrock", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("solrock", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.ALL_POSES - PoseType.SLEEP,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("solrock", "ground_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(sleep)) bedrockStateful("solrock", "faint") else null
}
@@ -1,57 +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.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SpindaModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame {
override val rootPart = root.registerChildWithAllChildren("spinda")
override val head = getPart("head")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 1.9F
override var portraitTranslation = Vec3(-0.5, -0.1, 0.0)
override var profileScale = 0.76F
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("spinda", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("spinda", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.7F)
//bedrock("spinda", "ground_walk")
)
)
}
}
@@ -1,74 +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.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TorkoalModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("torkoal")
override val head = getPart("neck")
override val foreLeftLeg= getPart("leg_front_left")
override val foreRightLeg = getPart("leg_front_right")
override val hindLeftLeg = getPart("leg_back_left")
override val hindRightLeg = getPart("leg_back_right")
override var portraitScale = 2.5F
override var portraitTranslation = Vec3(-1.3, -0.5, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.43, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var battleidle: CobblemonPose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
condition = { !it.isBattling },
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("torkoal", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("torkoal", "ground_idle"),
QuadrupedWalkAnimation(this, periodMultiplier = 0.7F, amplitudeMultiplier = 0.7F)
)
)
battleidle = registerPose(
poseName = "battleidle",
poseTypes = PoseType.STATIONARY_POSES,
condition = { it.isBattling },
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("torkoal", "battle_idle")
)
)
}
}
@@ -10,6 +10,7 @@ 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
@@ -36,6 +37,8 @@ class HappinyModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame {
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") }
@@ -1,83 +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.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class LucarioModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("lucario")
override val head = getPart("head")
override val leftArm = getPart("arm_left")
override val rightArm = getPart("arm_right")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.2, 2.2, 0.0)
override var profileScale = 0.6F
override var profileTranslation = Vec3(0.0, 0.83, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var battleIdle: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("lucario", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("lucario", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
condition = { !it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lucario", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lucario", "ground_idle"),
BimanualSwingAnimation(this),
BipedWalkAnimation(this)
)
)
battleIdle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
condition = { it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lucario", "ground_idle"),
bedrock("lucario", "battle_idle_aura_left"),
bedrock("lucario", "battle_idle_aura_right")
)
)
}
}
@@ -1,68 +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.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class MagmortarModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("magmortar")
override val head = getPart("head")
override val leftArm = getPart("leftarm")
override val rightArm = getPart("rightarm")
override val leftLeg = getPart("leftleg")
override val rightLeg = getPart("rightleg")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.35, 1.2, 0.0)
override var profileScale = 0.65F
override var profileTranslation = Vec3(0.0, 0.73, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("magmortar", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("magmortar", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("magmortar", "faint") else null
}
@@ -1,64 +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.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class MagnezoneModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("magnezone")
override var portraitScale = 1.4F
override var portraitTranslation = Vec3(-0.35, -0.28, 0.0)
override var profileScale = 0.6F
override var profileTranslation = Vec3(-0.1, 0.6, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var sleep: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("magnezone", "blink") }
// sleep = registerPose(
// poseType = PoseType.SLEEP,
// animations = arrayOf(bedrock("magnezone", "sleep"))
// )
registerPose(
poseName = "hover",
poseTypes = PoseType.ALL_POSES - PoseType.FLY - PoseType.SLEEP - PoseType.SWIM,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("magnezone", "ground_idle")
)
)
registerPose(
poseName = "fly",
poseTypes = setOf(PoseType.FLY, PoseType.SWIM),
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("magnezone", "ground_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("magnezone", "faint") else null
}
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
@@ -28,6 +29,8 @@ class MismagiusModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("mismagius", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("mismagius", "blink") }
standing = registerPose(
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
@@ -30,6 +31,8 @@ class MunchlaxModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("munchlax", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("munchlax", "blink") }
standing = registerPose(
@@ -1,67 +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.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class RioluModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("riolu")
override val head = getPart("head")
override val leftArm = getPart("arm_left")
override val rightArm = getPart("arm_right")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 2.8F
override var portraitTranslation = Vec3(0.0, -0.3, 0.0)
override var profileScale = 0.85F
override var profileTranslation = Vec3(0.0, 0.5, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("riolu", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("riolu", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("riolu", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("riolu", "ground_idle"),
BipedWalkAnimation(this),
BimanualSwingAnimation(this)
)
)
}
}
@@ -11,6 +11,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen5
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
@@ -35,6 +36,8 @@ class BeheeyemModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame,
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("beheeyem", "cry") }
override fun registerPoses() {
sleep = registerPose(
poseType = PoseType.SLEEP,
@@ -1,61 +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.gen5
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class CrustleModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("crustle")
override val head = getPart("head")
override var portraitScale = 4.0F
override var portraitTranslation = Vec3(-0.55, -4.0, 0.0)
override var profileScale = 1.0F
override var profileTranslation = Vec3(0.0, 0.1, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("crustle", "cry") }
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("crustle", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("crustle", "ground_idle")
//bedrock("crustle", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("crustle", "faint") else null
}
@@ -11,6 +11,7 @@ package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen5
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
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
@@ -35,7 +36,7 @@ class DeinoModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, Qua
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
// override val cryAnimation = CryProvider { bedrockStateful("deino", "cry") }
override val cryAnimation = CryProvider { bedrockStateful("deino", "cry") }
override fun registerPoses() {
standing = registerPose(
@@ -1,61 +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.gen5
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class DwebbleModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("dwebble")
override val head = getPart("head")
override var portraitScale = 2.6F
override var portraitTranslation = Vec3(-0.2, -1.9, 0.0)
override var profileScale = 1.0F
override var profileTranslation = Vec3(0.0, 0.2, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("dwebble", "cry") }
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("dwebble", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("dwebble", "ground_idle")
//bedrock("dwebble", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("dwebble", "faint") else null
}
@@ -13,6 +13,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.createTransforma
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
@@ -42,6 +43,8 @@ class ElgyemModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, Bi
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
override val cryAnimation = CryProvider { bedrockStateful("elgyem", "cry") }
val shoulderOffset = 5.6
override fun registerPoses() {
@@ -1,117 +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.gen5
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BiWingedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.cosineFunction
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.sineFunction
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.math.geometry.toRadians
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class HydreigonModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("hydreigon")
override val head = getPart("neck")
override var portraitScale = 1.57F
override var portraitTranslation = Vec3(-1.04, 1.93, 0.0)
override var profileScale = 0.58F
override var profileTranslation = Vec3(-0.06, 1.2, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
// override val cryAnimation = CryProvider { bedrockStateful("hydreigon", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("hydreigon", "blink") }
val wingFrame1 = object : BiWingedFrame {
override val rootPart = this@HydreigonModel.rootPart
override val leftWing = getPart("wing_top_left")
override val rightWing = getPart("wing_top_right")
}
val wingFrame2 = object : BiWingedFrame {
override val rootPart = this@HydreigonModel.rootPart
override val leftWing = getPart("wing_middle_left")
override val rightWing = getPart("wing_middle_right")
}
val wingFrame3 = object : BiWingedFrame {
override val rootPart = this@HydreigonModel.rootPart
override val leftWing = getPart("wing_bottom_left")
override val rightWing = getPart("wing_bottom_right")
}
standing = registerPose (
poseName = "standing",
quirks = arrayOf(blink),
transformTicks = 10,
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("hydreigon", "air_idle"),
wingFrame1.wingFlap(
flapFunction = sineFunction(verticalShift = -25F.toRadians(), period = 1.5F, amplitude = 0.8F),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
),
wingFrame2.wingFlap(
flapFunction = cosineFunction(verticalShift = -25F.toRadians(), period = 2F, amplitude = 0.65F),
timeVariable = { state, _, _ -> 0.01F + state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
),
wingFrame3.wingFlap(
flapFunction = sineFunction(verticalShift = -25F.toRadians(), period = 2F, amplitude = 0.5F),
timeVariable = { state, _, _ -> 0.01F + state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
)
)
)
walk = registerPose(
poseName = "walk",
quirks = arrayOf(blink),
transformTicks = 10,
poseTypes = PoseType.MOVING_POSES,
animations = arrayOf(
singleBoneLook(),
bedrock("hydreigon", "air_fly"),
wingFrame1.wingFlap(
flapFunction = sineFunction(verticalShift = -25F.toRadians(), period = 2F, amplitude = 0.5F),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
),
wingFrame2.wingFlap(
flapFunction = cosineFunction(verticalShift = -25F.toRadians(), period = 2F, amplitude = 0.65F),
timeVariable = { state, _, _ -> 0.01F + state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
),
wingFrame3.wingFlap(
flapFunction = sineFunction(verticalShift = -25F.toRadians(), period = 1.5F, amplitude = 0.8F),
timeVariable = { state, _, _ -> 0.01F + state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
)
//bedrock("hydreigon", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("hydreigon", "faint") else null
}
@@ -12,6 +12,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.animation.Quadru
import com.cobblemon.mod.common.client.render.models.blockbench.animation.SingleBoneLookAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
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
@@ -41,7 +42,7 @@ class ZweilousModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame,
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
// override val cryAnimation = CryProvider { bedrockStateful("zweilous", "cry") }
override val cryAnimation = CryProvider { bedrockStateful("zweilous", "cry") }
override fun registerPoses() {
@@ -1,82 +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.gen6
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FlabebeModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("flabebe")
override val head = getPart("head")
override var portraitScale = 2.26F
override var portraitTranslation = Vec3(0.0, -0.14, 0.0)
override var profileScale = 0.81F
override var profileTranslation = Vec3(0.0, 0.63, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var shoulderLeft: CobblemonPose
lateinit var shoulderRight: CobblemonPose
val shoulderOffset = 10.5
override fun registerPoses() {
val blink = quirk { bedrockStateful("flabebe", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES + PoseType.SLEEP,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("flabebe", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("flabebe", "ground_idle"),
)
)
shoulderLeft = registerPose(
poseType = PoseType.SHOULDER_LEFT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("flabebe", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(shoulderOffset, -2, 0)
)
)
shoulderRight = registerPose(
poseType = PoseType.SHOULDER_RIGHT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("flabebe", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(-shoulderOffset, -2, 0)
)
)
}
}
@@ -1,53 +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.gen6
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FloetteModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("floette")
override val head = getPart("head")
override var portraitScale = 1.8F
override var portraitTranslation = Vec3(-0.11, -0.11, 0.0)
override var profileScale = 0.73F
override var profileTranslation = Vec3(0.0, 0.68, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("floette", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES + PoseType.SLEEP,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(maxYaw = 10F),
bedrock("floette", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(maxYaw = 10F),
bedrock("floette", "ground_idle"),
)
)
}
}
@@ -1,53 +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.gen6
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FlorgesModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("florges")
override val head = getPart("head")
override var portraitScale = 1.8F
override var portraitTranslation = Vec3(-0.28, 2.31, 0.0)
override var profileScale = 0.54F
override var profileTranslation = Vec3(0.0, 1.04, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("florges", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES + PoseType.SLEEP,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("florges", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("florges", "ground_idle"),
)
)
}
}
@@ -1,104 +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.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
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 BrionneModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("brionne")
override val head = getPart("head")
override var portraitScale = 2.1F
override var portraitTranslation = Vec3(-0.4, -0.3, 0.0)
override var profileScale = 0.7F
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var float: Pose
lateinit var swim: Pose
lateinit var battleidle: Pose
// lateinit var sleep: Pose
override val cryAnimation = CryProvider { bedrockStateful("brionne", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("brionne", "blink") }
// sleep = registerPose(
// poseType = PoseType.SLEEP,
// animations = arrayOf(bedrock("brionne", "sleep"))
// )
standing = registerPose(
poseName = "standing",
poseTypes = UI_POSES + PoseType.STAND,
quirks = arrayOf(blink),
condition = { !it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("brionne", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseType = PoseType.WALK,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("brionne", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseType = PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("brionne", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("brionne", "water_swim")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("brionne", "battle_idle")
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, swim, float)) bedrockStateful("brionne", "faint") else null
}
@@ -1,73 +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.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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 net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FomantisModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("fomantis")
override val head = getPart("head")
override val leftArm = getPart("left_front_arm")
override val rightArm = getPart("right_front_arm")
override val leftLeg = getPart("left_leg")
override val rightLeg = getPart("right_leg")
override var portraitScale = 2.6F
override var portraitTranslation = Vec3(-0.22, -1.6, 0.0)
override var profileScale = 0.75F
override var profileTranslation = Vec3(0.0, 0.67, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("fomantis", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("fomantis", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("fomantis", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("fomantis", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
//bedrock("fomantis", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("fomantis", "faint") else null
}
@@ -1,73 +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.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class LurantisModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("lurantis")
override val head = getPart("head")
override val leftArm = getPart("left_arm")
override val rightArm = getPart("right_arm")
override val leftLeg = getPart("left_leg")
override val rightLeg = getPart("right_leg")
override var portraitScale = 2.57F
override var portraitTranslation = Vec3(-0.18, 0.35, 0.0)
override var profileScale = 0.71F
override var profileTranslation = Vec3(0.0, 0.69, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("lurantis", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("lurantis", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lurantis", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("lurantis", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
//bedrock("lurantis", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("lurantis", "faint") else null
}
@@ -1,134 +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.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
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 PopplioModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("popplio")
override val head = getPart("head")
override var portraitScale = 2.6F
override var portraitTranslation = Vec3(-0.25, -1.5, 0.0)
override var profileScale = 1.0F
override var profileTranslation = Vec3(0.0, 0.2, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var battleidle: Pose
lateinit var sleep: Pose
lateinit var float: Pose
lateinit var swim: Pose
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
val shoulderOffset = 1
override val cryAnimation = CryProvider { bedrockStateful("popplio", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("popplio", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("popplio", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = UI_POSES + PoseType.STAND,
quirks = arrayOf(blink),
condition = { !it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseType = PoseType.WALK,
quirks = arrayOf(blink),
condition = { !it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseType = PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "water_swim")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "battle_idle")
)
)
shoulderLeft = registerPose(
poseType = PoseType.SHOULDER_LEFT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "shoulder_left")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(ModelPartTransformation.X_AXIS, shoulderOffset)
)
)
shoulderRight = registerPose(
poseType = PoseType.SHOULDER_RIGHT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("popplio", "shoulder_right")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(ModelPartTransformation.X_AXIS, -shoulderOffset)
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, sleep, battleidle, swim, float)) bedrockStateful("popplio", "faint") else null
}
@@ -1,106 +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.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import com.cobblemon.mod.common.util.isBattling
import com.cobblemon.mod.common.util.isInWater
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class PrimarinaModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("primarina")
override val head = getPart("head")
override var portraitScale = 2.0F
override var portraitTranslation = Vec3(-0.7, 0.6, 0.0)
override var profileScale = 0.55F
override var profileTranslation = Vec3(0.0, 0.8, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var float: Pose
lateinit var swim: Pose
lateinit var sleep: Pose
lateinit var battleidle: Pose
override val cryAnimation = CryProvider { bedrockStateful("primarina", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("primarina", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("primarina", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = UI_POSES + PoseType.STAND,
condition = { !it.isBattling },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("primarina", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseType = PoseType.WALK,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("primarina", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseType = PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("primarina", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("primarina", "water_swim")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling && !it.isInWater },
animations = arrayOf(
singleBoneLook(),
bedrock("primarina", "battle_idle")
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, sleep)) bedrockStateful("primarina", "faint") else null
}
@@ -1,116 +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.gen9
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class GimmighoulRoamingModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("gimmighoul_roaming")
override val head = getPart("head")
override var portraitScale = 2.5F
override var portraitTranslation = Vec3(0.0, -1.3, 0.0)
override var profileScale = 0.7F
override var profileTranslation = Vec3(0.0, 0.76, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var battleIdle: CobblemonPose
lateinit var sleep: CobblemonPose
lateinit var shoulderLeft: CobblemonPose
lateinit var shoulderRight: CobblemonPose
val shoulderOffset = 1
override val cryAnimation = CryProvider { bedrockStateful("gimmighoul_roaming", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("gimmighoul_roaming", "blink") }
val quirk = quirk(secondsBetweenOccurrences = 30F to 120F) { bedrockStateful("gimmighoul_roaming", "idle_quirk") }
val sleepQuirk = quirk (secondsBetweenOccurrences = 30F to 60F) { bedrockStateful("gimmighoul_roaming", "sleep_quirk") }
sleep = registerPose(
poseName = "sleep",
poseType = PoseType.SLEEP,
quirks = arrayOf(sleepQuirk),
animations = arrayOf(bedrock("gimmighoul_roaming", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
condition = { !it.isBattling },
quirks = arrayOf(blink,quirk),
animations = arrayOf(
singleBoneLook(),
bedrock("gimmighoul_roaming", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("gimmighoul_roaming", "ground_walk")
)
)
battleIdle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("gimmighoul_roaming", "battle_idle")
)
)
shoulderLeft = registerPose(
poseType = PoseType.SHOULDER_LEFT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("gimmighoul_roaming", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(ModelPartTransformation.X_AXIS, shoulderOffset)
)
)
shoulderRight = registerPose(
poseType = PoseType.SHOULDER_RIGHT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("gimmighoul_roaming", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(ModelPartTransformation.X_AXIS, -shoulderOffset)
)
)
}
override fun getFaintAnimation(state: PosableState) = bedrockStateful("gimmighoul_roaming", "faint")
}
@@ -1,86 +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.gen9
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
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.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SprigatitoModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("sprigatito")
override val head = getPart("head")
override var portraitScale = 2.1F
override var portraitTranslation = Vec3(-0.35, -0.7, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.53, 0.0)
lateinit var standing: Pose
lateinit var walking: Pose
lateinit var sleep: Pose
lateinit var battleidle: Pose
override val cryAnimation = CryProvider { bedrockStateful("sprigatito", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("sprigatito", "blink") }
val earTwitchRight = quirk(secondsBetweenOccurrences = 60F to 120F) { bedrockStateful("sprigatito", "quirk_ear-twitch-left") }
val earTwitchLeft = quirk(secondsBetweenOccurrences = 60F to 120F) { bedrockStateful("sprigatito", "quirk_ear-twitch-right") }
sleep = registerPose(
poseType = PoseType.SLEEP,
quirks = arrayOf(earTwitchRight, earTwitchLeft),
animations = arrayOf(bedrock("sprigatito", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
transformTicks = 10,
condition = { !it.isBattling },
quirks = arrayOf(blink, earTwitchRight, earTwitchLeft),
animations = arrayOf(
singleBoneLook(),
bedrock("sprigatito", "ground_idle")
)
)
walking = registerPose(
poseName = "walking",
poseTypes = PoseType.MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink, earTwitchRight, earTwitchLeft),
animations = arrayOf(
singleBoneLook(),
bedrock("sprigatito", "ground_walk")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink, earTwitchRight, earTwitchLeft),
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("sprigatito", "battle_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walking, battleidle, sleep)) bedrockStateful("sprigatito", "faint") else null
}
@@ -69,16 +69,13 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("bellossom", ::BellossomModel)
inbuilt("voltorb", ::VoltorbModel)
inbuilt("electrode", ::ElectrodeModel)
inbuilt("lapras", ::LaprasModel)
inbuilt("ekans", ::EkansModel)
inbuilt("machop", ::MachopModel)
inbuilt("machoke", ::MachokeModel)
inbuilt("machamp", ::MachampModel)
inbuilt("alakazam", ::AlakazamModel)
inbuilt("arbok", ::ArbokModel)
inbuilt("arcanine", ::ArcanineModel)
inbuilt("articuno", ::ArticunoModel)
inbuilt("bellsprout", ::BellsproutModel)
inbuilt("chansey", ::ChanseyModel)
inbuilt("crobat", ::CrobatModel)
inbuilt("cubone", ::CuboneModel)
@@ -118,7 +115,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("koffing", ::KoffingModel)
inbuilt("krabby", ::KrabbyModel)
inbuilt("lickitung", ::LickitungModel)
inbuilt("magmar", ::MagmarModel)
inbuilt("magnemite", ::MagnemiteModel)
inbuilt("magneton", ::MagnetonModel)
inbuilt("marowak", ::MarowakModel)
@@ -137,13 +133,10 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("ninetales", ::NinetalesModel)
inbuilt("omanyte", ::OmanyteModel)
inbuilt("omastar", ::OmastarModel)
inbuilt("onix", ::OnixModel)
inbuilt("persian", ::PersianModel)
inbuilt("pikachu", ::PikachuModel)
inbuilt("pinsir", ::PinsirModel)
inbuilt("poliwag", ::PoliwagModel)
inbuilt("poliwhirl", ::PoliwhirlModel)
inbuilt("poliwrath", ::PoliwrathModel)
inbuilt("politoed", ::PolitoedModel)
inbuilt("ponyta", ::PonytaModel)
inbuilt("psyduck", ::PsyduckModel)
@@ -167,24 +160,18 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("vaporeon", ::VaporeonModel)
inbuilt("venomoth", ::VenomothModel)
inbuilt("venonat", ::VenonatModel)
inbuilt("victreebel", ::VictreebelModel)
inbuilt("vulpix", ::VulpixModel)
inbuilt("weepinbell", ::WeepinbellModel)
inbuilt("weezing", ::WeezingModel)
inbuilt("zapdos", ::ZapdosModel)
inbuilt("elekid", ::ElekidModel)
inbuilt("magby", ::MagbyModel)
inbuilt("pichu", ::PichuModel)
inbuilt("smoochum", ::SmoochumModel)
inbuilt("tyrogue", ::TyrogueModel)
inbuilt("hitmontop", ::HitmontopModel)
inbuilt("electivire", ::ElectivireModel)
inbuilt("glaceon", ::GlaceonModel)
inbuilt("happiny", ::HappinyModel)
inbuilt("leafeon", ::LeafeonModel)
inbuilt("lickilicky", ::LickilickyModel)
inbuilt("magmortar", ::MagmortarModel)
inbuilt("magnezone", ::MagnezoneModel)
inbuilt("mimejr", ::MimejrModel)
inbuilt("scizor", ::ScizorModel)
inbuilt("tangrowth", ::TangrowthModel)
@@ -214,8 +201,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("piplup", ::PiplupModel)
inbuilt("yanmega", ::YanmegaModel)
inbuilt("basculin", ::BasculinModel)
inbuilt("crustle", ::CrustleModel)
inbuilt("dwebble", ::DwebbleModel)
inbuilt("emolga", ::EmolgaModel)
inbuilt("maractus", ::MaractusModel)
inbuilt("bounsweet", ::BounsweetModel)
@@ -256,8 +241,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("klinklang", :: KlinklangModel)
inbuilt("morelull", :: MorelullModel)
inbuilt("shiinotic", :: ShiinoticModel)
inbuilt("riolu", :: RioluModel)
inbuilt("lucario", :: LucarioModel)
inbuilt("treecko", :: TreeckoModel)
inbuilt("grovyle", :: GrovyleModel)
inbuilt("sceptile", :: SceptileModel)
@@ -299,10 +282,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("chimchar", :: ChimcharModel)
inbuilt("monferno", :: MonfernoModel)
inbuilt("infernape", :: InfernapeModel)
inbuilt("popplio", :: PopplioModel)
inbuilt("brionne", :: BrionneModel)
inbuilt("primarina", ::PrimarinaModel)
inbuilt("spinda", ::SpindaModel)
inbuilt("seedot", ::SeedotModel)
inbuilt("nuzleaf", ::NuzleafModel)
inbuilt("shiftry", ::ShiftryModel)
@@ -315,7 +294,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("walkingwake", ::WalkingwakeModel)
inbuilt("ironleaves", ::IronleavesModel)
inbuilt("miltank", ::MiltankModel)
inbuilt("torkoal", ::TorkoalModel)
inbuilt("froakie", ::FroakieModel)
inbuilt("frogadier", ::FrogadierModel)
inbuilt("greninja", ::GreninjaModel)
@@ -365,7 +343,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("gliscor", ::GliscorModel)
inbuilt("poochyena", ::PoochyenaModel)
inbuilt("mightyena", ::MightyenaModel)
inbuilt("sprigatito", ::SprigatitoModel)
inbuilt("floragato", ::FloragatoModel)
inbuilt("meowscarada", ::MeowscaradaModel)
inbuilt("shroomish", ::ShroomishModel)
@@ -503,8 +480,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("crabominable", ::CrabominableModel)
inbuilt("wimpod", ::WimpodModel)
inbuilt("golisopod", ::GolisopodModel)
inbuilt("nincada", ::NincadaModel)
inbuilt("ninjask", ::NinjaskModel)
inbuilt("shedinja", ::ShedinjaModel)
inbuilt("ralts", ::RaltsModel)
inbuilt("kirlia", ::KirliaModel)
@@ -529,7 +504,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("litwick", ::LitwickModel)
inbuilt("lampent", ::LampentModel)
inbuilt("chandelure", ::ChandelureModel)
inbuilt("gimmighoulroaming", ::GimmighoulRoamingModel)
inbuilt("gimmighoulchest", ::GimmighoulChestModel)
inbuilt("gholdengo", ::GholdengoModel)
inbuilt("drifloon", ::DrifloonModel)
@@ -569,7 +543,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("voltorb_hisuian", ::VoltorbHisuianModel)
inbuilt("electrode_hisuian", ::ElectrodeHisuianModel)
inbuilt("sentret", ::SentretModel)
inbuilt("furret", ::FurretModel)
inbuilt("qwilfish", ::QwilfishModel)
inbuilt("qwilfish_hisuian", ::QwilfishHisuianModel)
inbuilt("overqwil", ::OverqwilModel)
@@ -590,8 +563,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("budew", ::BudewModel)
inbuilt("roselia", ::RoseliaModel)
inbuilt("roserade", ::RoseradeModel)
inbuilt("solrock", ::SolrockModel)
inbuilt("lunatone", ::LunatoneModel)
inbuilt("woobat", ::WoobatModel)
inbuilt("swoobat", ::SwoobatModel)
inbuilt("sandile", ::SandileModel)
@@ -602,11 +573,8 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("beartic", ::BearticModel)
inbuilt("deino", ::DeinoModel)
inbuilt("zweilous", ::ZweilousModel)
inbuilt("hydreigon", ::HydreigonModel)
inbuilt("larvesta", ::LarvestaModel)
inbuilt("volcarona", ::VolcaronaModel)
inbuilt("fomantis", ::FomantisModel)
inbuilt("lurantis", ::LurantisModel)
inbuilt("dreepy", ::DreepyModel)
inbuilt("drakloak", ::DrakloakModel)
inbuilt("dragapult", ::DragapultModel)
@@ -617,9 +585,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("alomomola", ::AlomomolaModel)
inbuilt("ferroseed", ::FerroseedModel)
inbuilt("ferrothorn", ::FerrothornModel)
inbuilt("flabebe", ::FlabebeModel)
inbuilt("floette", ::FloetteModel)
inbuilt("florges", ::FlorgesModel)
inbuilt("carbink", ::CarbinkModel)
inbuilt("goomy", ::GoomyModel)
inbuilt("goomy_hisui_bias", ::GoomyHisuiBiasModel)
@@ -628,7 +593,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("goodra", ::GoodraModel)
inbuilt("goodra_hisuian", ::GoodraHisuianModel)
inbuilt("heracross", ::HeracrossModel)
inbuilt("skarmory", ::SkarmoryModel)
inbuilt("salandit", ::SalanditModel)
inbuilt("salazzle", ::SalazzleModel)
inbuilt("jangmo-o", ::JangmoOModel)
@@ -653,7 +617,6 @@ object PokemonModelRepository : VaryingModelRepository<PokemonPosableModel>() {
inbuilt("rowlet_hisui_bias", ::RowletHisuiBiasModel)
inbuilt("dartrix_hisui_bias", ::DartrixHisuiBiasModel)
inbuilt("decidueye_hisuian", ::DecidueyeHisuianModel)
inbuilt("smeargle", ::SmeargleModel)
}
override fun conditionParser(json: JsonObject): List<(PosableState) -> Boolean> {
@@ -120,9 +120,17 @@ class Species : ClientDataSynchronizer<Species>, ShowdownIdentifiable {
} else if (it.maleRatio == 1F) {
setOf(Gender.MALE)
} else {
setOf(Gender.FEMALE)
setOf(Gender.FEMALE, Gender.MALE)
}
}.toSet()
}.toSet() + (if (maleRatio == -1F) {
setOf(Gender.GENDERLESS)
} else if (maleRatio == 0F) {
setOf(Gender.FEMALE)
} else if (maleRatio == 1F) {
setOf(Gender.MALE)
} else {
setOf(Gender.FEMALE, Gender.MALE)
})
/**
* Contains the evolutions of this species.
@@ -0,0 +1,29 @@
{
"format_version": "1.8.0",
"animations": {
"animation.psychic.target": {
"animation_length": 1.70833,
"bones": {
"root_part": {
"rotation": {
"0.0": [0, 0, 0],
"0.5": [0, "math.sin(q.anim_time*90*5-90)*5", 0],
"0.9583": [0, "math.sin(q.anim_time*90*12-90)*5", 0],
"1.0833": [0, 0, 0]
},
"scale": {
"0.0": [1, 1, 1],
"0.5": ["1+math.sin(q.anim_time*90*7-135)*0.15", "1+math.sin(q.anim_time*90*7)*0.15", 1],
"0.9583": ["1+math.sin(q.anim_time*90*7-135)*0.15", "1+math.sin(q.anim_time*90*7)*0.15", 1],
"1.0833": [
"1.2+math.sin(q.anim_time*90*7-135)*0.2+math.sin(q.anim_time*90*350)*0.4",
"1.2+math.sin(q.anim_time*90*7)*0.2+math.sin(q.anim_time*90*350)*0.25",
1.2
],
"1.3333": [1, 1, 1]
}
}
}
}
}
}
@@ -2,7 +2,7 @@
"format_version": "1.8.0",
"animations": {
"animation.quickattack.actor": {
"animation_length": 1.75,
"animation_length": 2.5833,
"bones": {
"root_part": {
"position": {
@@ -16,7 +16,7 @@
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [0, 0, -30],
"post": [0, 0, -35],
"lerp_mode": "catmullrom"
},
"1.375": {
@@ -40,11 +40,16 @@
"1.0833": [1, 1, 1],
"1.125": {"pre": [1, 1, 1], "post": [0, 0, 0]},
"1.1667": {"pre": [0, 0, 0], "post": [1, 1, 1]},
"1.2083": {"pre": [1, 1, 1], "post": [0, 0, 0]},
"1.2083": {"pre": [1, 1, 1.8], "post": [0, 0, 0]},
"1.6667": {"pre": [0, 0, 0], "post": [1, 1, 1]}
}
}
},
"sound_effects": {
"0.75": {
"effect": "move.quickattack.actor"
}
},
"particle_effects": {
"0.75": {
"effect": "cobblemon:quickattack_dust"
@@ -0,0 +1,67 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:burn_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/large-flame"
}
},
"curves": {
"variable.burnflicker": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.79, 1, 0.97, 0.88, 0.71, 0.5, 0.25, -0.05]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": "90*(q.entity_radius*1.2)",
"max_particles": 120
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.2
},
"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": "math.random(0.3,0.5)"
},
"minecraft:particle_initial_speed": "math.random(3.75,4.75)*1",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.1*v.burnflicker+(v.particle_random_2*0.1)", "0.15*v.burnflicker+(v.particle_random_2*0.1)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 56,
"texture_height": 10,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 10],
"step_UV": [8, 0],
"frames_per_second": 10,
"max_frame": 7,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.63": "#ffffffff",
"1.0": "#00B23000"
}
}
}
}
}
}
@@ -0,0 +1,58 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:burn_actorresidual",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/ember"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 40,
"max_particles": 20
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"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)", "math.random(0,2)", "math.random(-1.5,1.5)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.25
},
"minecraft:particle_initial_speed": "math.random(2.75,4.75)*0.45",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 6, 0],
"linear_drag_coefficient": 2
},
"minecraft:particle_appearance_billboard": {
"size": [0.12, 0.12],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 25,
"texture_height": 5,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 20,
"max_frame": 5
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFC8B3",
"1.0": "#FFB23000"
}
}
}
}
}
}
@@ -46,6 +46,11 @@
"effect": "cobblemon:confused_bird6",
"type": "particle"
}
},
"event_sound": {
"sound_effect": {
"event_name": "status.nonvolatile.confused.actor"
}
}
},
"components": {
@@ -56,7 +61,7 @@
"active_time": 1.5
},
"minecraft:emitter_lifetime_events": {
"creation_event": ["event_bird2", "event_bird3", "event_bird4", "event_bird5", "event_bird6"]
"creation_event": ["event_bird2", "event_bird3", "event_bird4", "event_bird5", "event_bird6", "event_sound"]
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
@@ -10,28 +10,24 @@
},
"events": {
"paraSparks": {
"particle_effect": {
"effect": "cobblemon:paralysis_actorresidual",
"type": "emitter"
},
"sound_effect": {
"event_name": "cobblemon:status.nonvolatile.paralysis.actor"
"event_name": "cobblemon:status.paralysis.actor"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 28,
"max_particles": 14
"spawn_rate": "math.clamp(30*(q.entity_radius*1.5),30,120)",
"max_particles": 140
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
"active_time": 0.3
},
"minecraft:emitter_lifetime_events": {
"creation_event": "paraSparks"
},
"minecraft:emitter_shape_sphere": {
"radius": "math.clamp(q.entity_radius*0.9,0.7,1.5)",
"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(-2,2))*math.random(2,4)", "math.random(12,15)", "(math.random(-2,2))*math.random(2,4)"]
},
@@ -44,7 +40,7 @@
"minecraft:particle_initial_speed": "math.random(0.55,0.85)*0.8",
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["(0.225-(variable.particle_random_3*0.075))*math.clamp(q.entity_height,1,1.25)", "(0.225-(variable.particle_random_3*0.075))*math.clamp(q.entity_height,1,1.25)"],
"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": 80,
@@ -18,7 +18,7 @@
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, 0],
"radius": "math.clamp(q.entity_radius*0.95,0.75,1.55)",
"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(-2,2))*math.random(2,4)", "math.random(12,15)", "(math.random(-2,2))*math.random(2,4)"]
},
@@ -31,7 +31,7 @@
"minecraft:particle_initial_speed": "math.random(0.55,0.85)*1",
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["(0.3-(variable.particle_random_3*0.085))*math.clamp(q.entity_height,1,1.25)", "(0.3-(variable.particle_random_3*0.085))*math.clamp(q.entity_height,1,1.25)"],
"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": 32,
@@ -18,7 +18,7 @@
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, 0],
"radius": "math.clamp(q.entity_radius*0.9,0.7,1.5)",
"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(-2,2))*math.random(2,4)", "math.random(12,15)", "(math.random(-2,2))*math.random(2,4)"]
},
@@ -10,42 +10,37 @@
},
"events": {
"poisonHit": {
"particle_effect": {
"effect": "cobblemon:poison_actorresidual",
"type": "emitter_bound"
},
"sound_effect": {
"event_name": "cobblemon:status.nonvolatile.poison.actor"
"event_name": "cobblemon:status.poison.actor"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 24,
"max_particles": 12
"spawn_rate": "math.clamp(30*(q.entity_radius*1.5),30,120)",
"max_particles": 120
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.7
"active_time": 0.2
},
"minecraft:emitter_lifetime_events": {
"creation_event": "poisonHit"
},
"minecraft:emitter_shape_sphere": {
"offset": [0, "((variable.particle_random_3-(variable.particle_random_3*0.5))*math.clamp(q.entity_height*0.6,1,2))", 0],
"radius": "math.clamp(q.entity_radius*0.55,0.65,1.3)",
"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,1))*math.random(3.75,5.0)", "math.random(3,15)", "(math.random(-1,1))*math.random(3.75,5.0)"]
"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(2.55,3.75)+(q.entity_height*0.1)",
"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.15+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)", "(0.15+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)"],
"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": 80,
@@ -33,7 +33,7 @@
"linear_drag_coefficient": 2
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.1+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)", "(0.1+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)"],
"size": ["0.1+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)", "0.1+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
@@ -30,7 +30,7 @@
"linear_drag_coefficient": 0.4
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.125+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)", "(0.125+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)"],
"size": ["0.07+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)", "0.07+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 80,
@@ -2,7 +2,7 @@
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:sleep_zzz",
"identifier": "cobblemon:sleep_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/sleep_zzz"
@@ -10,35 +10,36 @@
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 2,
"max_particles": 9
"spawn_rate": 1.6,
"max_particles": 3
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.5
"active_time": 2
},
"minecraft:emitter_shape_point": {
"direction": ["math.random(-0.25,0.25)", "math.random(0.8,1)", "math.random(-0.25,0.25)"]
"offset": [0, "q.entity_height*0.5", 0],
"direction": ["math.random(-4,-1)", 0.5, "math.random(-4,-1)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 4
"max_lifetime": 2.25
},
"minecraft:particle_initial_speed": "1/3",
"minecraft:particle_initial_speed": 0.5,
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 0.45, 0],
"linear_drag_coefficient": 0.85
"linear_acceleration": [0, 1, 0],
"linear_drag_coefficient": 0.5
},
"minecraft:particle_appearance_billboard": {
"size": ["math.clamp(v.particle_age*0.33/2, 0, 0.25)", "math.clamp(v.particle_age*0.66/2, 0, 0.25)"],
"size": ["0.15+(v.particle_age*0.125)", "0.15+(v.particle_age*0.125)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 24,
"texture_width": 192,
"texture_height": 12,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 1,
"max_frame": 3
"size_UV": [12, 12],
"step_UV": [12, 0],
"frames_per_second": 7,
"max_frame": 16
}
}
},
@@ -47,7 +48,7 @@
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#ffffffff",
"0.5": "#CCFFFFFF",
"0.61": "#ffffffff",
"1.0": "#00FFFFFF"
}
}
@@ -0,0 +1,58 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:sleep_actorresidual",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/sleep_bubble"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": "math.random(2.075,2.15)",
"max_particles": 16
},
"minecraft:emitter_lifetime_once": {
"active_time": 2.1
},
"minecraft:emitter_shape_point": {
"offset": ["math.random(-0.125,0.125)", "q.entity_height*0.5+math.random(0,0.125)", "math.random(-0.125,0.125)"],
"direction": ["math.random(-1.9,1.9)", "math.random(0.6,0.8)", "math.random(-1.9,1.9)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 1.5
},
"minecraft:particle_initial_speed": "math.random(0.21,0.66)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, "0.8-(v.particle_random_3*0.33)", 0],
"linear_drag_coefficient": 0.5
},
"minecraft:particle_appearance_billboard": {
"size": ["(v.particle_random_3*0.1)+math.clamp(v.particle_age*0.5, 0, 0.1)", "(v.particle_random_3*0.1)+math.clamp(v.particle_age*0.5, 0, 0.1)"],
"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": 4,
"max_frame": 6
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#ffffffff",
"0.85": "#ffffffff",
"1.0": "#00FFFFFF"
}
}
}
}
}
}
@@ -1,58 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:sleep_bubbles",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/bubble"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 4,
"max_particles": 16
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.5
},
"minecraft:emitter_shape_point": {
"direction": ["math.random(-0.55,0.55)", "math.random(0.8,1)", "math.random(-0.55,0.55)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 4
},
"minecraft:particle_initial_speed": "1/3",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 0.45, 0],
"linear_drag_coefficient": 0.85
},
"minecraft:particle_appearance_billboard": {
"size": ["math.clamp(v.particle_age*0.33/2, 0, 0.15)", "math.clamp(v.particle_age*0.33/2, 0, 0.15)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 16,
"texture_height": 48,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [0, 16],
"frames_per_second": 2,
"max_frame": 3,
"loop": true
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#ffffffff",
"0.5": "#CCFFFFFF",
"1.0": "#00FFFFFF"
}
}
}
}
}
}
@@ -10,42 +10,37 @@
},
"events": {
"toxicHit": {
"particle_effect": {
"effect": "cobblemon:toxpoison_actorresidual",
"type": "emitter_bound"
},
"sound_effect": {
"event_name": "cobblemon:status.nonvolatile.toxpoison.actor"
"event_name": "cobblemon:status.badlypoison.actor"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 24,
"max_particles": 12
"spawn_rate": "math.clamp(30*(q.entity_radius*1.5),30,120)",
"max_particles": 120
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.7
"active_time": 0.2
},
"minecraft:emitter_lifetime_events": {
"creation_event": "toxicHit"
},
"minecraft:emitter_shape_sphere": {
"offset": [0, "((variable.particle_random_3-(variable.particle_random_3*0.5))*math.clamp(q.entity_height*0.6,1,2))", 0],
"radius": "math.clamp(q.entity_radius*0.6,0.65,1.3)",
"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,1))*math.random(3.75,5.0)", "math.random(3,15)", "(math.random(-1,1))*math.random(3.75,5.0)"]
"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(2.55,3.75)+(q.entity_height*0.1)",
"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.15+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)", "(0.15+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)"],
"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": 80,
@@ -70,7 +65,8 @@
"1.0": "#FF7F00C7"
}
}
}
},
"minecraft:particle_appearance_lighting": {}
}
}
}
@@ -41,10 +41,7 @@
"linear_drag_coefficient": 2
},
"minecraft:particle_appearance_billboard": {
"size": [
"(0.1+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)",
"(0.1+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)"
],
"size": ["0.1+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)", "0.1+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
@@ -30,7 +30,7 @@
"linear_drag_coefficient": 0.4
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.125+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)", "(0.125+0.25*v.particle_random_2)*math.clamp(q.entity_height,1,1.25)"],
"size": ["0.07+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)", "0.07+(v.particle_random_2*0.1)*math.clamp(q.entity_height,1,1.25)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 80,
@@ -1,59 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:stat_down_circles",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/statdown_orb"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 35,
"max_particles": 150
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_disc": {
"offset": [0, "(q.entity_height+(0.4-(q.entity_height/3.5)))-(v.particle_random_3/2)", 0],
"radius": "math.clamp(q.entity_radius*0.8,0.6,999)",
"surface_only": true,
"direction": [0, -1, 0]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.625
},
"minecraft:particle_initial_speed": "(q.entity_height*1.5)+(math.random(0.4,1.95)*(q.entity_height/2))",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 1.05
},
"minecraft:particle_appearance_billboard": {
"size": ["0.05+0.15*v.particle_random_2", "0.05+0.15*v.particle_random_2"],
"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": 18,
"max_frame": 11
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FF116FFF",
"0.4": "#ffffffff",
"1.0": "#FF116FFF"
}
}
}
}
}
}
@@ -1,59 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:stat_down_lines",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/statdown_line"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 21,
"max_particles": 125
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_disc": {
"offset": ["math.sin(v.emitter_age/v.emitter_lifetime*270*9+v.emitter_random_1*360)", "(q.entity_height+(5.5+(q.entity_height/7))) * v.particle_random_1 * 0.2 - 0.15", "math.cos(v.emitter_age/v.emitter_lifetime*270*9+v.emitter_random_1*360)"],
"radius": "q.entity_radius*0.4",
"surface_only": true,
"direction": [0, -1, 0]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.34
},
"minecraft:particle_initial_speed": 3.5,
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 1
},
"minecraft:particle_appearance_billboard": {
"size": [0.06, 0.6],
"facing_camera_mode": "lookat_y",
"uv": {
"texture_width": 27,
"texture_height": 31,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [3, 31],
"step_UV": [3, 0],
"frames_per_second": 24,
"max_frame": 9
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FF116FFF",
"0.4": "#ffffffff",
"1.0": "#FF116FFF"
}
}
}
}
}
}
@@ -1,59 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:stat_up_circles",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/statup_orb"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 35,
"max_particles": 150
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_disc": {
"offset": [0, "(q.entity_height-(q.entity_height*1.5))+(v.particle_random_3/2)", 0],
"radius": "math.clamp(q.entity_radius*0.8,0.6,999)",
"surface_only": true,
"direction": [0, 10, 0]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.625
},
"minecraft:particle_initial_speed": "(q.entity_height*1.5)+(math.random(0.4,1.95)*(q.entity_height/2))",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 1.05
},
"minecraft:particle_appearance_billboard": {
"size": ["0.05+0.15*v.particle_random_2", "0.05+0.15*v.particle_random_2"],
"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": 18,
"max_frame": 11
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFF814B",
"0.43": "#ffffffff",
"1.0": "#FFFF814B"
}
}
}
}
}
}
@@ -1,58 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:stat_up_lines",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/statup_line"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 21,
"max_particles": 125
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_disc": {
"offset": ["math.sin(v.emitter_age/v.emitter_lifetime*270*9+v.emitter_random_1*360)", "((math.random(-2,1)/4)+(q.entity_height/7))", "math.cos(v.emitter_age/v.emitter_lifetime*360*9+v.emitter_random_1*360)"],
"radius": "q.entity_radius*0.4",
"direction": [0, 1, 0]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.34
},
"minecraft:particle_initial_speed": 3.5,
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 1
},
"minecraft:particle_appearance_billboard": {
"size": [0.06, 0.6],
"facing_camera_mode": "lookat_y",
"uv": {
"texture_width": 27,
"texture_height": 31,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [3, 31],
"step_UV": [3, 0],
"frames_per_second": 24,
"max_frame": 9
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFF814B",
"0.43": "#ffffffff",
"1.0": "#FFFF814B"
}
}
}
}
}
}
@@ -0,0 +1,63 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:statdown_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/xs-unboost"
}
},
"curves": {
"variable.shrink": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.75, 0.94, 1, 1, 1, 1, 1, 0.93, 0.7, 0]
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "stat.debuff"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 30,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.48,0.52)"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["(math.sin(v.particle_age*(280-(q.entity_height*8))+(v.particle_random_1*360))*(math.clamp(q.entity_radius*1.1,0.2,4)+(v.particle_age*0.5)))", "(0.15+(v.particle_random_1*0.25)-(v.particle_age*math.clamp(q.entity_height*2,1.5,5))-(v.particle_random_2*0.25))", "(math.cos(v.particle_age*(280-(q.entity_height*8))+(v.particle_random_1*360))*(math.clamp(q.entity_radius*1.1,0.2,4)+(v.particle_age*0.5)))"],
"direction": [0, 1, 0]
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.15*math.clamp(q.entity_height*0.85,1,1.75))*variable.shrink", "0.15*math.clamp(q.entity_height*0.85,1,1.75)*variable.shrink"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 45,
"texture_height": 5,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 10,
"max_frame": 9,
"stretch_to_lifetime": true
}
}
}
}
}
}
@@ -0,0 +1,63 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:statup_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/xs-boost"
}
},
"curves": {
"variable.shrink": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.75, 0.94, 1, 1, 1, 1, 1, 0.93, 0.7, 0]
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "stat.buff"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 30,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.48,0.52)"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["(math.sin(v.particle_age*(280-(q.entity_height*8))+(v.particle_random_1*360))*(math.clamp(q.entity_radius*1.1,0.2,4)+(v.particle_age*0.5)))", "-0.05+(v.particle_random_1*0.25)+(v.particle_age*math.clamp(q.entity_height*2.5,1.5,5))+(v.particle_random_2*0.25))", "(math.cos(v.particle_age*(280-(q.entity_height*8))+(v.particle_random_1*360))*(math.clamp(q.entity_radius*1.1,0.2,4)+(v.particle_age*0.5)))"],
"direction": [0, 1, 0]
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.15*math.clamp(q.entity_height,1,1.75))*variable.shrink", "0.15*math.clamp(q.entity_height,1,1.75)*variable.shrink"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 45,
"texture_height": 5,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 10,
"max_frame": 9,
"stretch_to_lifetime": true
}
}
}
}
}
}
@@ -0,0 +1,54 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:heavy_collapse_lines",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/speedlines"
}
},
"curves": {
"variable.grow": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 15
},
"minecraft:emitter_lifetime_once": {
"active_time": 2
},
"minecraft:emitter_shape_disc": {
"radius": 1.5,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.2
},
"minecraft:particle_initial_speed": "math.random(0.5, 3)",
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [0.2, "0.6 * variable.grow"],
"facing_camera_mode": "direction_y",
"uv": {
"texture_width": 16,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 48],
"size_UV": [16, 16],
"step_UV": [0, -16],
"frames_per_second": 5,
"max_frame": 3,
"stretch_to_lifetime": true
}
}
}
}
}
}
@@ -0,0 +1,57 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:heavy_collapse_smoke",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/smoke"
}
},
"curves": {
"variable.grow": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0.5, 1]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 15
},
"minecraft:emitter_lifetime_once": {
"active_time": 2
},
"minecraft:emitter_shape_disc": {
"radius": 0.1,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(1,1.4)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.random(0,360)"
},
"minecraft:particle_initial_speed": 10,
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.3 * variable.grow", "0.3 * variable.grow"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 16,
"texture_height": 96,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [0, 16],
"frames_per_second": 6,
"max_frame": 6
}
}
}
}
}
}
@@ -5,51 +5,48 @@
"identifier": "cobblemon:confusion_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/medium-fadeorb"
"texture": "textures/particles/psyring1"
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "cobblemon:move.confusion.actor"
"event_name": "move.confusion.actor"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 12
"minecraft:emitter_rate_steady": {
"spawn_rate": 8.5,
"max_particles": 100
},
"minecraft:emitter_lifetime_looping": {
"active_time": 0.4
"active_time": 1.25
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, -0.4],
"radius": "1.075-math.clamp(q.entity_height*0.2,0.2,0.35)",
"surface_only": true,
"direction": "inwards"
"minecraft:emitter_shape_point": {
"offset": ["math.random(-0.03,0.03)", "math.random(-0.03,0.03)", -0.3],
"direction": ["math.random(-1,1)", "math.random(-1,1)", -10]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.5
},
"minecraft:particle_initial_speed": 2.8,
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 2
"max_lifetime": 0.65
},
"minecraft:particle_initial_speed": 0.6,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["0.3+(v.emitter_age/2)", "0.3+(v.emitter_age/2)"],
"size": ["0.35+(v.particle_age*0.175)", "0.35+(v.particle_age*0.175)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 99,
"texture_height": 9,
"texture_width": 117,
"texture_height": 13,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [9, 9],
"step_UV": [9, 0],
"frames_per_second": 24,
"max_frame": 11
"size_UV": [13, 13],
"step_UV": [13, 0],
"frames_per_second": 12,
"max_frame": 9
}
}
},
@@ -57,9 +54,11 @@
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.1": "#7088F5FF",
"0.4": "#A0FFABDE",
"1.0": "#00BA16FF"
"0.0": "#009148FF",
"0.2": "#C0C377FF",
"0.6": "#A0EEE4FF",
"0.8": "#A09148FF",
"1.0": "#009148FF"
}
}
}
@@ -2,10 +2,10 @@
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:confusion_releasering",
"identifier": "cobblemon:confusion_actorglint",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/medium-ring"
"material": "particles_alpha",
"texture": "textures/particles/medium-sparkle"
}
},
"components": {
@@ -16,25 +16,25 @@
"active_time": 1
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.4]
"offset": ["math.random(-0.03,0.03)", "math.random(-0.03,0.03)", -0.3]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.4
"max_lifetime": 0.3
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [0.8, 0.8],
"size": [0.25, 0.25],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 90,
"texture_height": 15,
"texture_width": 63,
"texture_height": 9,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 15],
"step_UV": [15, 0],
"frames_per_second": 16,
"max_frame": 6
"size_UV": [9, 9],
"step_UV": [9, 0],
"frames_per_second": 20,
"max_frame": 5
}
}
},
@@ -42,10 +42,9 @@
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.2": "#F0FFABDE",
"0.5": "#90DE64FF",
"1.0": "#00AC31FF"
"0.0": "#FFFFD2F8",
"0.65": "#FFFF6DD0",
"1.0": "#FFA946FF"
}
}
}
@@ -5,34 +5,36 @@
"identifier": "cobblemon:confusion_impact",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/large-smokeorb"
"texture": "textures/particles/psyring2"
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.4
"minecraft:emitter_lifetime_looping": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.4]
"offset": [0, 0.1, -0.4]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.45
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [0.75, 0.75],
"size": [0.65, 0.65],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 143,
"texture_height": 13,
"texture_width": 153,
"texture_height": 17,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [13, 13],
"step_UV": [13, 0],
"frames_per_second": 24,
"max_frame": 11
"size_UV": [17, 17],
"step_UV": [17, 0],
"frames_per_second": 20,
"max_frame": 9
}
}
},
@@ -40,10 +42,12 @@
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.1": "#FFFFFFFF",
"0.6": "#9089E4FF",
"0.8": "#6B4BAAFF",
"1.0": "#001E94FF"
"0.0": "#009148FF",
"0.2": "#A09148FF",
"0.4": "#A0EEE4FF",
"0.6": "#A0EEE4FF",
"0.8": "#A09148FF",
"1.0": "#009148FF"
}
}
}
@@ -5,40 +5,40 @@
"identifier": "cobblemon:confusion_impactdots",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/small-fadeorb"
"texture": "textures/particles/xs-fadeorb"
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 300,
"max_particles": 16
"spawn_rate": 150,
"max_particles": 12
},
"minecraft:emitter_lifetime_looping": {
"active_time": 0.2
"active_time": 0.5
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, -0.4],
"radius": 0.2,
"offset": [0, 0.1, -0.4],
"radius": 0.5,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.45
"max_lifetime": 0.55
},
"minecraft:particle_initial_speed": "math.random(0.6,1.2)*7",
"minecraft:particle_initial_speed": "math.random(0.75,1.5)*2.8",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4
"linear_drag_coefficient": 3.5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.225-(v.particle_random_3*0.125)", "0.225-(v.particle_random_3*0.125)"],
"size": [0.15, 0.15],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 63,
"texture_height": 7,
"texture_width": 45,
"texture_height": 5,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [7, 7],
"step_UV": [7, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 20,
"max_frame": 9
}
@@ -48,10 +48,11 @@
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.1": "#FFFFFFFF",
"0.6": "#9089E4FF",
"0.8": "#6B4BAAFF",
"1.0": "#001E94FF"
"0.0": "#00CB48FF",
"0.2": "#80CB48FF",
"0.5": "#A0FF6DD0",
"0.8": "#80CB48FF",
"1.0": "#00CB48FF"
}
}
}
@@ -5,51 +5,49 @@
"identifier": "cobblemon:confusion_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/medium-fadeorb"
"texture": "textures/particles/psyswirl"
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "cobblemon:move.confusion.target"
"event_name": "move.confusion.target"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 9,
"max_particles": 100
},
"minecraft:emitter_lifetime_looping": {
"active_time": 0.6
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_rate_instant": {
"num_particles": 12
},
"minecraft:emitter_lifetime_looping": {
"active_time": 1
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, -0.4],
"radius": "1.2-math.clamp(q.entity_height*0.2,0.2,0.4)",
"surface_only": true,
"direction": "inwards"
"minecraft:emitter_shape_point": {
"offset": ["math.sin(v.emitter_age*1080)*0.03", "0.1+math.cos(v.emitter_age*1080)*0.03", -0.5],
"direction": [0, 0, -10]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.55
},
"minecraft:particle_initial_speed": 4.25,
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 3
"max_lifetime": 0.9
},
"minecraft:particle_initial_speed": -0.05,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["0.275+(v.emitter_age*0.75)", "0.275+(v.emitter_age*0.75)"],
"size": [0.55, 0.55],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 99,
"texture_height": 9,
"texture_width": 68,
"texture_height": 17,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [9, 9],
"step_UV": [9, 0],
"size_UV": [17, 17],
"step_UV": [17, 0],
"frames_per_second": 20,
"max_frame": 11
"max_frame": 4,
"loop": true
}
}
},
@@ -57,9 +55,12 @@
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#40FFE563",
"0.35": "#B0FFABDE",
"1.0": "#00BD21FF"
"0.0": "#00CB48FF",
"0.2": "#A09148FF",
"0.35": "#80FF6DD0",
"0.55": "#906E86FF",
"0.8": "#90BF31FF",
"1.0": "#00CB48FF"
}
}
}
@@ -8,6 +8,13 @@
"texture": "textures/particles/cotton"
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "move.cottonguard.actor"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": "math.clamp(350 * math.clamp(q.entity_size,0.5,3), 10, 100)",
@@ -16,6 +23,9 @@
"minecraft:emitter_lifetime_once": {
"active_time": 2
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_sphere": {
"radius": "math.clamp(q.entity_scale,0.9,1) + (1.8 / math.clamp(q.entity_size,1,1.2))",
"surface_only": true,
@@ -0,0 +1,74 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:mudsport_actor",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/mud_splash"
}
},
"curves": {
"variable.mudsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 1, 1, 0.5, 0]
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "cobblemon:move.mudsport.actor"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 160,
"max_particles": 60
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, 0.1],
"direction": ["math.random(-10,10)*1", "math.random(1.5,20)*1.75", "math.random(-10,10)*1"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.7
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "math.random(6.3,11.2)*1.75",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -15, 0],
"linear_drag_coefficient": 2
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.15+(v.particle_random_1*0.2))*v.mudsize", "(0.15+(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": 12,
"max_frame": 10
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 1.8,
"coefficient_of_restitution": 0.1,
"collision_radius": 0.01
}
}
}
}
@@ -0,0 +1,62 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:mudsport_actorbubbles",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/mud_bubble"
}
},
"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": 60,
"max_particles": 30
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, 0.1],
"direction": ["math.random(-10,10)*1.1", "math.random(5,20)*1.5", "math.random(-10,10)*1.1"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.4,0.7)"
},
"minecraft:particle_initial_speed": "math.random(6.3,11.2)*1.75",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -15, 0],
"linear_drag_coefficient": 2
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.1+(v.particle_random_1*0.05))*v.mudsize", "(0.1+(v.particle_random_1*0.05))*v.mudsize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 80,
"texture_height": 8,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [8, 0],
"frames_per_second": 8,
"max_frame": 10,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 1.1,
"coefficient_of_restitution": 0.5,
"collision_radius": 0.01
}
}
}
}
Loaded 100 of 854 files, more files were not shown because too many files have changed in this diff. Show more