Compare commits

..
Author SHA1 Message Date
Polymeta f9dd1448e5 Merge branch 'item-2072' into 'main'
Added tab completion for the alpha property and three missing property aliases

Closes #2072

See merge request cable-mc/cobblemon!2388
2026-10-18 22:33:30 +00:00
Gitoido ecf5d57ad2 chore: resolve conflicts
# Conflicts:
#   common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/PropertiesCompletionProvider.kt
2026-10-18 22:16:27 +00:00
Polymeta 8663888abc Merge branch 'item-2013' into 'main'
Fixed GUI Pokémon cries playing on the Master category instead of Friendly Creatures

Closes #2013

See merge request cable-mc/cobblemon!2389
2026-10-18 22:14:04 +00:00
Polymeta f452cd9a05 Merge branch 'fix/ride-interact-checks' into 'main'
fix: stricter riding checks on server side

Closes #2124

See merge request cable-mc/cobblemon!2499
2026-10-18 22:12:19 +00:00
Kiritiop 4fe9cd7fd6 Fixed GUI pokemon cries using the Master volume slider instead of Friendly Creatures, added a new file to prevent code duplication. Credit to Gitoido 2026-10-18 13:19:07 -04:00
Gitoido Okaski 2c1d11ed11 chore: remove duplicate check that was accounted for earlier 2026-10-18 15:29:35 +03:00
Gitoido Okaski b88adf0479 fix: stricter riding checks on server side 2026-10-18 15:21:09 +03:00
Polymeta b1066671f5 Merge branch 'quick-fix' into 'main'
Flowerbed Clearning jigsaw fix, dripstone oasis jigsaw removal

See merge request cable-mc/cobblemon!2497
2026-10-18 12:09:48 +00:00
Polymeta 387e85d4ad Merge branch 'fix/preset-conditions-mergers' into 'main'
fix: Some spawn conditions merge minHeight/Depth data into max instead

Closes #2111

See merge request cable-mc/cobblemon!2498
2026-10-18 12:07:55 +00:00
Gitoido Okaski 77ab58d823 fix: spawn condition mergers writing minHeight/depth into maxHeight/depth instead 2026-10-18 14:14:28 +03:00
Slippy 1a9e736d8b Flowerbed Clearning jigsaw fix, dripstone oasis jigsaw removal 2026-10-18 00:11:56 -05:00
Hiroku aa39c1906e Merge branch 'implement_pokemon' into 'main'
implement_pokemon

See merge request cable-mc/cobblemon!2495
2026-10-17 23:48:54 +00:00
Polymeta a07ff7f442 Merge branch 'implement_pokemon' into 'main'
implement_pokemon

See merge request cable-mc/cobblemon!2494
2026-10-17 23:37:18 +00:00
Polymeta 5374569ea1 [skip-ci] tidy up changelog
Signed-off-by: Polymeta <4726322-polymeta@users.noreply.gitlab.com>
2026-10-18 00:15:37 +01:00
Polymeta af9c1196bf youre meant to be looking the other way
Signed-off-by: Polymeta <4726322-polymeta@users.noreply.gitlab.com>
2026-10-18 00:08:51 +01:00
Polymeta 09d5543469 Merge branch 'fix/haters-gonna-hate-properly' into 'main'
fix: Anger should be directed at proper target

Closes #2112

See merge request cable-mc/cobblemon!2492
2026-10-17 23:03:41 +00:00
Polymeta c8e408c50a actually copy components when building up evolution displays
Signed-off-by: Polymeta <4726322-polymeta@users.noreply.gitlab.com>
2026-10-17 23:57:05 +01:00
Gitoido Okaski e8a0467643 chore: move coercion at class variable level 2026-10-18 01:17:07 +03:00
Gitoido Okaski 2dd0b66b83 chore: remove duplicate i18n key 2026-10-18 01:04:29 +03:00
Gitoido Okaski 68374017e1 chore: changelog 2026-10-18 01:04:29 +03:00
Gitoido Okaski e8dea9773a feat: make sure zangoose and zeviper 100% hate each other 2026-10-18 00:59:40 +03:00
Gitoido Okaski 7b31e6bcc4 feat: make sure hate task uses new values from config and gamerule 2026-10-18 00:59:10 +03:00
Gitoido Okaski c6ffca639f feat: pokemon predation chance config i18n 2026-10-18 00:58:40 +03:00
Gitoido Okaski c491a1f7ca feat: introduce pokemon predation chance config 2026-10-18 00:56:06 +03:00
Gitoido Okaski 0b333b743d feat: introduce pokemon predation gamerule 2026-10-18 00:55:54 +03:00
Gitoido Okaski 0e2860cd90 chore: import cleanup skip_ci 2026-10-17 23:14:08 +03:00
Gitoido Okaski 3259bf032c chore: changelog skip_ci 2026-10-17 23:10:15 +03:00
Gitoido OkaskiandGitoido 116205cdf1 fix: Anger should be directed at proper target 2026-10-17 20:07:18 +00:00
Polymeta 86153419ee Merge branch 'implement_pokemon' into 'main'
implement_pokemon

See merge request cable-mc/cobblemon!2480
2026-10-17 17:36:00 +00:00
Polymeta 6e57d77d10 Merge branch 'More-Structure-Fixes' into 'main'
More structure fixes

See merge request cable-mc/cobblemon!2491
2026-10-16 22:54:46 +00:00
Slippy 2206d96a6e Lots of fixing 2026-10-16 14:26:55 -05:00
Slippy 33f05858f1 structure fixes for .3 2026-10-16 13:34:04 -05:00
Polymeta bcdfef4886 Merge branch 'lights-out' into 'main'
Bye Bye Magmarizer Glow

See merge request cable-mc/cobblemon!2490
2026-10-16 06:49:58 +00:00
dhi_holo a19adb463b Bye Bye Magmarizer Glow
- Removed Dynamic Lights data from the Magmarizer item for consistency with the block
2026-10-16 16:32:05 +10:00
Polymeta 5004edbbb6 Merge branch 'fix/party-overlay-hide-nf' into 'main'
fix: party overlay not hiding when player opens the pokedex scanner

Closes #2071

See merge request cable-mc/cobblemon!2467
2026-10-15 15:37:49 +00:00
Gitoido Okaski d8bdd6329a fix: tidy-up even more 2026-10-15 17:57:42 +03:00
Gitoido Okaski 82d56637a0 chore: method signature name 2026-10-15 17:07:28 +03:00
Gitoido Okaski 7232a43816 refactor: move and enqueue client event registration to separate fn, homogenizing behavior with common side registration 2026-10-15 17:05:50 +03:00
Gitoido Okaski 098eb7d14b chore: tidy up changelog skip-ci 2026-10-15 16:22:30 +03:00
Gitoido OkaskiandGitoido 835b70ed48 feat: AppleSkin compat for dex scanner mode 2026-10-15 13:20:53 +00:00
Gitoido 9d828a86fb fix: party overlay not hiding when player opens the pokedex scanner 2026-10-15 13:20:53 +00:00
Polymeta 910551ee70 Merge branch 'fix/berry-pots' into 'main'
fix: flower pots require some tending on neoforge

Closes #2126

See merge request cable-mc/cobblemon!2486
2026-10-15 07:17:23 +00:00
Gitoido Okaski 94765da04a chore: small tidy-up 2026-10-14 14:11:30 +03:00
Gitoido Okaski 131ef31492 fix: tend to the pots registration on neoforge 2026-10-13 03:38:13 +03:00
Gitoido Okaski b6b067b1d3 chore: changelog skip-ci 2026-10-13 03:35:28 +03:00
Kiritiop fb4aaed220 Edit CHANGELOG.md 2026-10-11 08:57:22 +00:00
Kiritiop c5e1b37ead Manual rebase 2026-10-11 08:53:30 +00:00
Kiritiop 2be9d303ea Added tab completion for the alpha property and three missing property aliases
Closes #2072
2026-10-11 08:53:30 +00:00
Kiritiop 99ac6d213a Added tab completion for the alpha property and three missing property aliases
Closes #2072
2026-10-11 08:53:30 +00:00
2318 changed files with 10434 additions and 101910 deletions
+70 -8
View File
@@ -1,26 +1,88 @@
# Changelog
## [1.8.4 (MONTH xth, 2026)](#1-8-4)
## [1.8.3 (MONTH xth, 2026)](#1-8-3)
### Additions
### Particles
### Cries added/updated for the following Pokémon
- Hoppip
- Skiploom
- Jumpluff
- Houndour
- Houndoom
- Wurmple
- Silcoon
- Beautifly
- Cascoon
- Dustox
- Surskit
- Masquerain
- Torkoal
- Starly
- Staravia
- Staraptor
- Combee
- Vespiquen
- Dusknoir
- Helioptile
- Heliolisk
- Grubbin
- Charjabug
- Vikavolt
- Applin (updated)
- Flapple (updated)
- Appletun
- Runerigus
- Dipplin
### Model updates for the following Pokémon
### Animation updates for the following Pokémon
- Vikavolt
### Changes
- Changed the Misc icon in the Campfire Pot Recipe Book to Health Candy
- Moved EXP Candies from the Medicine recipe book category to the Misc category
- Removed Dynamic Lights data from the Magmarizer item for consistency with the block
- Added `doPokemonPredation` gamerule, which controls aggressiveness of Pokémon with `hate_entity` brain task defined
- Added `predation_chance` server config value, which controls the possibility of attacking the hated entity found by `hate_entity` brain task
- Prehistoric Eroded Pillar generates slightly more frequently
### Fixes
- Fixed datapacks with item interaction evolutions that don't specify an item crashing the world on load.
- Fixed the Pokédex evolution tree crashing when a datapack's dex entry is missing an evolution's form.
- Fixed the Pokédex evolution tree crashing with a stack overflow on evolutions that loop back on themselves.
- Fixed the Pokédex evolution tree crashing when looking at a dex that is not part of the "National Dex" aggregate.
- Fixed evolution trees not building properly when a Pokémon has several Pokédex entries for different regions.
- Fixed form-changing evolutions sometimes resolving to the source form in the Pokédex evolution tree.
- Broken datapack evolutions are now logged and skipped in the Pokédex evolution tree instead of crashing.
- Fixed the `alpha` property having no tab completion in commands such as `/pokespawn`, `/pokegive` and `/pokeedit`, and added the missing `dmax_level`, `gmax_factor` and `tradable` aliases to tab completion
- Fixed friendship booster items not being recognised as such
- Fixed conflicts with other mods that would make use of recipe books in certain ways (Farmer's Delight Cooking Pot)
- Fixed Pokémon battles stalling when a sidemod cancels the `THROWN_POKEBALL_HIT` hit event
- Fixed choice feature tab completion in `spawnpokemon/pokegive/pokeedit` commands
- Fixed MoLang that's targeting players intermittedly failing when they have died, needing them to relog
- Fixed a NeoForge bug where none of the Cobblemon plants/berries could be placed into pots
- Fixed party overlay not hiding when the player opens the Pokédex scanner
- Added compat for AppleSkin
- Fixed some display names having unintended font colours
- Fixed `hate_entity` task focusing on its own entity
- Thus enabled deadly warfare between Zangoose and Seviper
- Prehistoric Frozen Pond, Prehistoric Frozen Spike, and Prehistoric Lush Den now generate
- Fixed Frogadier floating in its battle_idle animation
- Fixed absence or incorrect mergers in spawning conditions, making max height/depth of conditions to use the min value instead
- Added stricter riding checks on server side to prevent possible packet forgery when player tries to ride pokemon
- Fixed Pokémon cries and animation sounds played from GUIs, such as the starter selection screen and the Pokédex, being tied to the Master volume slider instead of Friendly Creatures
### Developer
- Bumped NeoForge to `21.1.195` to get access to MixinExtras `0.5` and the expressions annotation
- New Platform Event `PLAYER_RESPAWN` which is fired when a player respawns (either through death or returning from the end)
- Platform Events `SERVER_PLAYER_TICK_PRE` and `SERVER_PLAYER_TICK_POST` no longer fire when the player is dead
- it is now tied much closer to the actual entity rather than the player (or their connection)
### Molang & Datapacks
- Added a `loot_table` drop entry type.
- Accepts an `id` field, pointing to a vanilla loot table.
- Added the `cobblemon:biome` and `cobblemon:pokemon_properties` loot conditions.
- `cobblemon:biome` returns true if the biome of death matches the `biome` field.
- `cobblemon:pokemon_properties` returns true if the Pokémon matches the `properties` field.
- Fixed `q.pokemon.nature` returning class instance instead of proper string value (`cobblemon:adamant`)
- Fixed `q.entity.is_looking_at` result being always `1` for whatever entity passed as target
- Added hate chance optional parameter to `hate_entity` task. `1.0` will make an entity always attack the target
### Localization
- Updated translations for:
@@ -16,7 +16,6 @@ import com.cobblemon.mod.common.api.drop.CommandDropEntry
import com.cobblemon.mod.common.api.drop.DropEntry
import com.cobblemon.mod.common.api.drop.EvolutionItemDropEntry
import com.cobblemon.mod.common.api.drop.ItemDropEntry
import com.cobblemon.mod.common.api.drop.LootTableDropEntry
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.CobblemonEvents.DATA_SYNCHRONIZED
import com.cobblemon.mod.common.api.habitats.HabitatPools
@@ -91,7 +90,6 @@ import com.cobblemon.mod.common.events.EntityCallbackHandler
import com.cobblemon.mod.common.events.PokedexHandler
import com.cobblemon.mod.common.events.ServerTickHandler
import com.cobblemon.mod.common.events.StatHandler
import com.cobblemon.mod.common.loot.CobblemonLootItemConditions
import com.cobblemon.mod.common.net.messages.client.settings.ServerSettingsPacket
import com.cobblemon.mod.common.permission.LaxPermissionValidator
import com.cobblemon.mod.common.platform.events.PlatformEvents
@@ -227,12 +225,10 @@ object Cobblemon {
implementation.registerEntitySubPredicates()
implementation.registerMobEffects()
DispenserBehaviorRegistry.registerDispenserBehaviors()
CobblemonLootItemConditions.touch()
DropEntry.register("command", CommandDropEntry::class.java)
DropEntry.register("item", ItemDropEntry::class.java, isDefault = true)
DropEntry.register("evolution", EvolutionItemDropEntry::class.java)
DropEntry.register("loot_table", LootTableDropEntry::class.java)
ExperienceGroups.registerDefaults()
CaptureCalculators.registerDefaults()
@@ -845,54 +845,35 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
@JvmField
val PEP_UP_FLOWER = this.create("pep_up_flower", FlowerBlock(MobEffects.LEVITATION, 10F, BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().instabreak().sound(SoundType.GRASS).offsetType(BlockBehaviour.OffsetType.XZ).pushReaction(PushReaction.DESTROY)))
@JvmField
val POTTED_PEP_UP_FLOWER = this.create("potted_pep_up_flower", BlocksInvoker.createFlowerPotBlock(PEP_UP_FLOWER))
@JvmField
val HEARTY_GRAINS = this.create("hearty_grains", HeartyGrainsBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).ignitedByLava().mapColor(MapColor.PLANT).noCollission().randomTicks().instabreak()))
@JvmField
val GALARICA_NUT_BUSH = this.create("galarica_nut_bush", NutBushBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).randomTicks().noCollission().sound(SoundType.SWEET_BERRY_BUSH).pushReaction(PushReaction.DESTROY)))
@JvmField
val POTTED_RED_APRICORN_SAPLING = this.create("potted_red_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(RED_APRICORN_SAPLING))
@JvmField
val POTTED_YELLOW_APRICORN_SAPLING = this.create("potted_yellow_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(YELLOW_APRICORN_SAPLING))
@JvmField
val POTTED_GREEN_APRICORN_SAPLING = this.create("potted_green_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(GREEN_APRICORN_SAPLING))
@JvmField
val POTTED_BLUE_APRICORN_SAPLING = this.create("potted_blue_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(BLUE_APRICORN_SAPLING))
@JvmField
val POTTED_PINK_APRICORN_SAPLING = this.create("potted_pink_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(PINK_APRICORN_SAPLING))
@JvmField
val POTTED_BLACK_APRICORN_SAPLING = this.create("potted_black_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(BLACK_APRICORN_SAPLING))
@JvmField
val POTTED_WHITE_APRICORN_SAPLING = this.create("potted_white_apricorn_sapling", BlocksInvoker.createFlowerPotBlock(WHITE_APRICORN_SAPLING))
@JvmField
val POTTED_SACCHARINE_SAPLING = this.create("potted_saccharine_sapling", BlocksInvoker.createFlowerPotBlock(SACCHARINE_SAPLING))
@JvmField
val RED_MINT_LEAF_LITTER = this.mintLitter("red_mint_leaf_litter", MapColor.COLOR_RED)
@JvmField
val POTTED_RED_MINT = this.pottedPlant("potted_red_mint", RED_MINT_LEAF_LITTER)
val POTTED_RED_MINT = this.flowerPot("potted_red_mint", RED_MINT_LEAF_LITTER)
@JvmField
val BLUE_MINT_LEAF_LITTER = this.mintLitter("blue_mint_leaf_litter", MapColor.COLOR_BLUE)
@JvmField
val POTTED_BLUE_MINT = this.pottedPlant("potted_blue_mint", BLUE_MINT_LEAF_LITTER)
val POTTED_BLUE_MINT = this.flowerPot("potted_blue_mint", BLUE_MINT_LEAF_LITTER)
@JvmField
val CYAN_MINT_LEAF_LITTER = this.mintLitter("cyan_mint_leaf_litter", MapColor.COLOR_CYAN)
@JvmField
val POTTED_CYAN_MINT = this.pottedPlant("potted_cyan_mint", CYAN_MINT_LEAF_LITTER)
val POTTED_CYAN_MINT = this.flowerPot("potted_cyan_mint", CYAN_MINT_LEAF_LITTER)
@JvmField
val PINK_MINT_LEAF_LITTER = this.mintLitter("pink_mint_leaf_litter", MapColor.COLOR_PINK)
@JvmField
val POTTED_PINK_MINT = this.pottedPlant("potted_pink_mint", PINK_MINT_LEAF_LITTER)
val POTTED_PINK_MINT = this.flowerPot("potted_pink_mint", PINK_MINT_LEAF_LITTER)
@JvmField
val GREEN_MINT_LEAF_LITTER = this.mintLitter("green_mint_leaf_litter", MapColor.COLOR_GREEN)
@JvmField
val POTTED_GREEN_MINT = this.pottedPlant("potted_green_mint", GREEN_MINT_LEAF_LITTER)
val POTTED_GREEN_MINT = this.flowerPot("potted_green_mint", GREEN_MINT_LEAF_LITTER)
@JvmField
val WHITE_MINT_LEAF_LITTER = this.mintLitter("white_mint_leaf_litter", MapColor.SNOW)
@JvmField
val POTTED_WHITE_MINT = this.pottedPlant("potted_white_mint", WHITE_MINT_LEAF_LITTER)
val POTTED_WHITE_MINT = this.flowerPot("potted_white_mint", WHITE_MINT_LEAF_LITTER)
@JvmField
val LOBAILA = this.create("lobaila", LobailaFlowerBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().instabreak().sound(SoundType.GRASS).offsetType(BlockBehaviour.OffsetType.XZ).ignitedByLava().pushReaction(PushReaction.DESTROY)))
@@ -1104,145 +1085,163 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
//val BINDING_SOIL = this.create("binding_soil", BindingSoilBlock(BlockBehaviour.Properties.of()))
@JvmField
val POTTED_AGUAV_BERRY = this.create("potted_aguav_berry", BlocksInvoker.createFlowerPotBlock(AGUAV_BERRY))
val POTTED_AGUAV_BERRY = this.flowerPot("potted_aguav_berry", AGUAV_BERRY)
@JvmField
val POTTED_APICOT_BERRY = this.create("potted_apicot_berry", BlocksInvoker.createFlowerPotBlock(APICOT_BERRY))
val POTTED_APICOT_BERRY = this.flowerPot("potted_apicot_berry", APICOT_BERRY)
@JvmField
val POTTED_ASPEAR_BERRY = this.create("potted_aspear_berry", BlocksInvoker.createFlowerPotBlock(ASPEAR_BERRY))
val POTTED_ASPEAR_BERRY = this.flowerPot("potted_aspear_berry", ASPEAR_BERRY)
@JvmField
val POTTED_BABIRI_BERRY = this.create("potted_babiri_berry", BlocksInvoker.createFlowerPotBlock(BABIRI_BERRY))
val POTTED_BABIRI_BERRY = this.flowerPot("potted_babiri_berry", BABIRI_BERRY)
@JvmField
val POTTED_BELUE_BERRY = this.create("potted_belue_berry", BlocksInvoker.createFlowerPotBlock(BELUE_BERRY))
val POTTED_BELUE_BERRY = this.flowerPot("potted_belue_berry", BELUE_BERRY)
@JvmField
val POTTED_BLUK_BERRY = this.create("potted_bluk_berry", BlocksInvoker.createFlowerPotBlock(BLUK_BERRY))
val POTTED_BLUK_BERRY = this.flowerPot("potted_bluk_berry", BLUK_BERRY)
@JvmField
val POTTED_CHARTI_BERRY = this.create("potted_charti_berry", BlocksInvoker.createFlowerPotBlock(CHARTI_BERRY))
val POTTED_CHARTI_BERRY = this.flowerPot("potted_charti_berry", CHARTI_BERRY)
@JvmField
val POTTED_CHERI_BERRY = this.create("potted_cheri_berry", BlocksInvoker.createFlowerPotBlock(CHERI_BERRY))
val POTTED_CHERI_BERRY = this.flowerPot("potted_cheri_berry", CHERI_BERRY)
@JvmField
val POTTED_CHESTO_BERRY = this.create("potted_chesto_berry", BlocksInvoker.createFlowerPotBlock(CHESTO_BERRY))
val POTTED_CHESTO_BERRY = this.flowerPot("potted_chesto_berry", CHESTO_BERRY)
@JvmField
val POTTED_CHILAN_BERRY = this.create("potted_chilan_berry", BlocksInvoker.createFlowerPotBlock(CHILAN_BERRY))
val POTTED_CHILAN_BERRY = this.flowerPot("potted_chilan_berry", CHILAN_BERRY)
@JvmField
val POTTED_CHOPLE_BERRY = this.create("potted_chople_berry", BlocksInvoker.createFlowerPotBlock(CHOPLE_BERRY))
val POTTED_CHOPLE_BERRY = this.flowerPot("potted_chople_berry", CHOPLE_BERRY)
@JvmField
val POTTED_COBA_BERRY = this.create("potted_coba_berry", BlocksInvoker.createFlowerPotBlock(COBA_BERRY))
val POTTED_COBA_BERRY = this.flowerPot("potted_coba_berry", COBA_BERRY)
@JvmField
val POTTED_COLBUR_BERRY = this.create("potted_colbur_berry", BlocksInvoker.createFlowerPotBlock(COLBUR_BERRY))
val POTTED_COLBUR_BERRY = this.flowerPot("potted_colbur_berry", COLBUR_BERRY)
@JvmField
val POTTED_CORNN_BERRY = this.create("potted_cornn_berry", BlocksInvoker.createFlowerPotBlock(CORNN_BERRY))
val POTTED_CORNN_BERRY = this.flowerPot("potted_cornn_berry", CORNN_BERRY)
@JvmField
val POTTED_CUSTAP_BERRY = this.create("potted_custap_berry", BlocksInvoker.createFlowerPotBlock(CUSTAP_BERRY))
val POTTED_CUSTAP_BERRY = this.flowerPot("potted_custap_berry", CUSTAP_BERRY)
@JvmField
val POTTED_DURIN_BERRY = this.create("potted_durin_berry", BlocksInvoker.createFlowerPotBlock(DURIN_BERRY))
val POTTED_DURIN_BERRY = this.flowerPot("potted_durin_berry", DURIN_BERRY)
@JvmField
val POTTED_EGGANT_BERRY = this.create("potted_eggant_berry", BlocksInvoker.createFlowerPotBlock(EGGANT_BERRY))
val POTTED_EGGANT_BERRY = this.flowerPot("potted_eggant_berry", EGGANT_BERRY)
@JvmField
val POTTED_ENIGMA_BERRY = this.create("potted_enigma_berry", BlocksInvoker.createFlowerPotBlock(ENIGMA_BERRY))
val POTTED_ENIGMA_BERRY = this.flowerPot("potted_enigma_berry", ENIGMA_BERRY)
@JvmField
val POTTED_FIGY_BERRY = this.create("potted_figy_berry", BlocksInvoker.createFlowerPotBlock(FIGY_BERRY))
val POTTED_FIGY_BERRY = this.flowerPot("potted_figy_berry", FIGY_BERRY)
@JvmField
val POTTED_GANLON_BERRY = this.create("potted_ganlon_berry", BlocksInvoker.createFlowerPotBlock(GANLON_BERRY))
val POTTED_GANLON_BERRY = this.flowerPot("potted_ganlon_berry", GANLON_BERRY)
@JvmField
val POTTED_GREPA_BERRY = this.create("potted_grepa_berry", BlocksInvoker.createFlowerPotBlock(GREPA_BERRY))
val POTTED_GREPA_BERRY = this.flowerPot("potted_grepa_berry", GREPA_BERRY)
@JvmField
val POTTED_HABAN_BERRY = this.create("potted_haban_berry", BlocksInvoker.createFlowerPotBlock(HABAN_BERRY))
val POTTED_HABAN_BERRY = this.flowerPot("potted_haban_berry", HABAN_BERRY)
@JvmField
val POTTED_HONDEW_BERRY = this.create("potted_hondew_berry", BlocksInvoker.createFlowerPotBlock(HONDEW_BERRY))
val POTTED_HONDEW_BERRY = this.flowerPot("potted_hondew_berry", HONDEW_BERRY)
@JvmField
val POTTED_HOPO_BERRY = this.create("potted_hopo_berry", BlocksInvoker.createFlowerPotBlock(HOPO_BERRY))
val POTTED_HOPO_BERRY = this.flowerPot("potted_hopo_berry", HOPO_BERRY)
@JvmField
val POTTED_IAPAPA_BERRY = this.create("potted_iapapa_berry", BlocksInvoker.createFlowerPotBlock(IAPAPA_BERRY))
val POTTED_IAPAPA_BERRY = this.flowerPot("potted_iapapa_berry", IAPAPA_BERRY)
@JvmField
val POTTED_JABOCA_BERRY = this.create("potted_jaboca_berry", BlocksInvoker.createFlowerPotBlock(JABOCA_BERRY))
val POTTED_JABOCA_BERRY = this.flowerPot("potted_jaboca_berry", JABOCA_BERRY)
@JvmField
val POTTED_KASIB_BERRY = this.create("potted_kasib_berry", BlocksInvoker.createFlowerPotBlock(KASIB_BERRY))
val POTTED_KASIB_BERRY = this.flowerPot("potted_kasib_berry", KASIB_BERRY)
@JvmField
val POTTED_KEBIA_BERRY = this.create("potted_kebia_berry", BlocksInvoker.createFlowerPotBlock(KEBIA_BERRY))
val POTTED_KEBIA_BERRY = this.flowerPot("potted_kebia_berry", KEBIA_BERRY)
@JvmField
val POTTED_KEE_BERRY = this.create("potted_kee_berry", BlocksInvoker.createFlowerPotBlock(KEE_BERRY))
val POTTED_KEE_BERRY = this.flowerPot("potted_kee_berry", KEE_BERRY)
@JvmField
val POTTED_KELPSY_BERRY = this.create("potted_kelpsy_berry", BlocksInvoker.createFlowerPotBlock(KELPSY_BERRY))
val POTTED_KELPSY_BERRY = this.flowerPot("potted_kelpsy_berry", KELPSY_BERRY)
@JvmField
val POTTED_LANSAT_BERRY = this.create("potted_lansat_berry", BlocksInvoker.createFlowerPotBlock(LANSAT_BERRY))
val POTTED_LANSAT_BERRY = this.flowerPot("potted_lansat_berry", LANSAT_BERRY)
@JvmField
val POTTED_LEPPA_BERRY = this.create("potted_leppa_berry", BlocksInvoker.createFlowerPotBlock(LEPPA_BERRY))
val POTTED_LEPPA_BERRY = this.flowerPot("potted_leppa_berry", LEPPA_BERRY)
@JvmField
val POTTED_LIECHI_BERRY = this.create("potted_liechi_berry", BlocksInvoker.createFlowerPotBlock(LIECHI_BERRY))
val POTTED_LIECHI_BERRY = this.flowerPot("potted_liechi_berry", LIECHI_BERRY)
@JvmField
val POTTED_LUM_BERRY = this.create("potted_lum_berry", BlocksInvoker.createFlowerPotBlock(LUM_BERRY))
val POTTED_LUM_BERRY = this.flowerPot("potted_lum_berry", LUM_BERRY)
@JvmField
val POTTED_MAGO_BERRY = this.create("potted_mago_berry", BlocksInvoker.createFlowerPotBlock(MAGO_BERRY))
val POTTED_MAGO_BERRY = this.flowerPot("potted_mago_berry", MAGO_BERRY)
@JvmField
val POTTED_MAGOST_BERRY = this.create("potted_magost_berry", BlocksInvoker.createFlowerPotBlock(MAGOST_BERRY))
val POTTED_MAGOST_BERRY = this.flowerPot("potted_magost_berry", MAGOST_BERRY)
@JvmField
val POTTED_MARANGA_BERRY = this.create("potted_maranga_berry", BlocksInvoker.createFlowerPotBlock(MARANGA_BERRY))
val POTTED_MARANGA_BERRY = this.flowerPot("potted_maranga_berry", MARANGA_BERRY)
@JvmField
val POTTED_MICLE_BERRY = this.create("potted_micle_berry", BlocksInvoker.createFlowerPotBlock(MICLE_BERRY))
val POTTED_MICLE_BERRY = this.flowerPot("potted_micle_berry", MICLE_BERRY)
@JvmField
val POTTED_NANAB_BERRY = this.create("potted_nanab_berry", BlocksInvoker.createFlowerPotBlock(NANAB_BERRY))
val POTTED_NANAB_BERRY = this.flowerPot("potted_nanab_berry", NANAB_BERRY)
@JvmField
val POTTED_NOMEL_BERRY = this.create("potted_nomel_berry", BlocksInvoker.createFlowerPotBlock(NOMEL_BERRY))
val POTTED_NOMEL_BERRY = this.flowerPot("potted_nomel_berry", NOMEL_BERRY)
@JvmField
val POTTED_OCCA_BERRY = this.create("potted_occa_berry", BlocksInvoker.createFlowerPotBlock(OCCA_BERRY))
val POTTED_OCCA_BERRY = this.flowerPot("potted_occa_berry", OCCA_BERRY)
@JvmField
val POTTED_ORAN_BERRY = this.create("potted_oran_berry", BlocksInvoker.createFlowerPotBlock(ORAN_BERRY))
val POTTED_ORAN_BERRY = this.flowerPot("potted_oran_berry", ORAN_BERRY)
@JvmField
val POTTED_PAMTRE_BERRY = this.create("potted_pamtre_berry", BlocksInvoker.createFlowerPotBlock(PAMTRE_BERRY))
val POTTED_PAMTRE_BERRY = this.flowerPot("potted_pamtre_berry", PAMTRE_BERRY)
@JvmField
val POTTED_PASSHO_BERRY = this.create("potted_passho_berry", BlocksInvoker.createFlowerPotBlock(PASSHO_BERRY))
val POTTED_PASSHO_BERRY = this.flowerPot("potted_passho_berry", PASSHO_BERRY)
@JvmField
val POTTED_PAYAPA_BERRY = this.create("potted_payapa_berry", BlocksInvoker.createFlowerPotBlock(PAYAPA_BERRY))
val POTTED_PAYAPA_BERRY = this.flowerPot("potted_payapa_berry", PAYAPA_BERRY)
@JvmField
val POTTED_PECHA_BERRY = this.create("potted_pecha_berry", BlocksInvoker.createFlowerPotBlock(PECHA_BERRY))
val POTTED_PECHA_BERRY = this.flowerPot("potted_pecha_berry", PECHA_BERRY)
@JvmField
val POTTED_PERSIM_BERRY = this.create("potted_persim_berry", BlocksInvoker.createFlowerPotBlock(PERSIM_BERRY))
val POTTED_PERSIM_BERRY = this.flowerPot("potted_persim_berry", PERSIM_BERRY)
@JvmField
val POTTED_PETAYA_BERRY = this.create("potted_petaya_berry", BlocksInvoker.createFlowerPotBlock(PETAYA_BERRY))
val POTTED_PETAYA_BERRY = this.flowerPot("potted_petaya_berry", PETAYA_BERRY)
@JvmField
val POTTED_PINAP_BERRY = this.create("potted_pinap_berry", BlocksInvoker.createFlowerPotBlock(PINAP_BERRY))
val POTTED_PINAP_BERRY = this.flowerPot("potted_pinap_berry", PINAP_BERRY)
@JvmField
val POTTED_POMEG_BERRY = this.create("potted_pomeg_berry", BlocksInvoker.createFlowerPotBlock(POMEG_BERRY))
val POTTED_POMEG_BERRY = this.flowerPot("potted_pomeg_berry", POMEG_BERRY)
@JvmField
val POTTED_QUALOT_BERRY = this.create("potted_qualot_berry", BlocksInvoker.createFlowerPotBlock(QUALOT_BERRY))
val POTTED_QUALOT_BERRY = this.flowerPot("potted_qualot_berry", QUALOT_BERRY)
@JvmField
val POTTED_RABUTA_BERRY = this.create("potted_rabuta_berry", BlocksInvoker.createFlowerPotBlock(RABUTA_BERRY))
val POTTED_RABUTA_BERRY = this.flowerPot("potted_rabuta_berry", RABUTA_BERRY)
@JvmField
val POTTED_RAWST_BERRY = this.create("potted_rawst_berry", BlocksInvoker.createFlowerPotBlock(RAWST_BERRY))
val POTTED_RAWST_BERRY = this.flowerPot("potted_rawst_berry", RAWST_BERRY)
@JvmField
val POTTED_RAZZ_BERRY = this.create("potted_razz_berry", BlocksInvoker.createFlowerPotBlock(RAZZ_BERRY))
val POTTED_RAZZ_BERRY = this.flowerPot("potted_razz_berry", RAZZ_BERRY)
@JvmField
val POTTED_RINDO_BERRY = this.create("potted_rindo_berry", BlocksInvoker.createFlowerPotBlock(RINDO_BERRY))
val POTTED_RINDO_BERRY = this.flowerPot("potted_rindo_berry", RINDO_BERRY)
@JvmField
val POTTED_ROSELI_BERRY = this.create("potted_roseli_berry", BlocksInvoker.createFlowerPotBlock(ROSELI_BERRY))
val POTTED_ROSELI_BERRY = this.flowerPot("potted_roseli_berry", ROSELI_BERRY)
@JvmField
val POTTED_ROWAP_BERRY = this.create("potted_rowap_berry", BlocksInvoker.createFlowerPotBlock(ROWAP_BERRY))
val POTTED_ROWAP_BERRY = this.flowerPot("potted_rowap_berry", ROWAP_BERRY)
@JvmField
val POTTED_SALAC_BERRY = this.create("potted_salac_berry", BlocksInvoker.createFlowerPotBlock(SALAC_BERRY))
val POTTED_SALAC_BERRY = this.flowerPot("potted_salac_berry", SALAC_BERRY)
@JvmField
val POTTED_SHUCA_BERRY = this.create("potted_shuca_berry", BlocksInvoker.createFlowerPotBlock(SHUCA_BERRY))
val POTTED_SHUCA_BERRY = this.flowerPot("potted_shuca_berry", SHUCA_BERRY)
@JvmField
val POTTED_SITRUS_BERRY = this.create("potted_sitrus_berry", BlocksInvoker.createFlowerPotBlock(SITRUS_BERRY))
val POTTED_SITRUS_BERRY = this.flowerPot("potted_sitrus_berry", SITRUS_BERRY)
@JvmField
val POTTED_SPELON_BERRY = this.create("potted_spelon_berry", BlocksInvoker.createFlowerPotBlock(SPELON_BERRY))
val POTTED_SPELON_BERRY = this.flowerPot("potted_spelon_berry", SPELON_BERRY)
@JvmField
val POTTED_STARF_BERRY = this.create("potted_starf_berry", BlocksInvoker.createFlowerPotBlock(STARF_BERRY))
val POTTED_STARF_BERRY = this.flowerPot("potted_starf_berry", STARF_BERRY)
@JvmField
val POTTED_TAMATO_BERRY = this.create("potted_tamato_berry", BlocksInvoker.createFlowerPotBlock(TAMATO_BERRY))
val POTTED_TAMATO_BERRY = this.flowerPot("potted_tamato_berry", TAMATO_BERRY)
@JvmField
val POTTED_TANGA_BERRY = this.create("potted_tanga_berry", BlocksInvoker.createFlowerPotBlock(TANGA_BERRY))
val POTTED_TANGA_BERRY = this.flowerPot("potted_tanga_berry", TANGA_BERRY)
@JvmField
val POTTED_TOUGA_BERRY = this.create("potted_touga_berry", BlocksInvoker.createFlowerPotBlock(TOUGA_BERRY))
val POTTED_TOUGA_BERRY = this.flowerPot("potted_touga_berry", TOUGA_BERRY)
@JvmField
val POTTED_WACAN_BERRY = this.create("potted_wacan_berry", BlocksInvoker.createFlowerPotBlock(WACAN_BERRY))
val POTTED_WACAN_BERRY = this.flowerPot("potted_wacan_berry", WACAN_BERRY)
@JvmField
val POTTED_WATMEL_BERRY = this.create("potted_watmel_berry", BlocksInvoker.createFlowerPotBlock(WATMEL_BERRY))
val POTTED_WATMEL_BERRY = this.flowerPot("potted_watmel_berry", WATMEL_BERRY)
@JvmField
val POTTED_WEPEAR_BERRY = this.create("potted_wepear_berry", BlocksInvoker.createFlowerPotBlock(WEPEAR_BERRY))
val POTTED_WEPEAR_BERRY = this.flowerPot("potted_wepear_berry", WEPEAR_BERRY)
@JvmField
val POTTED_WIKI_BERRY = this.create("potted_wiki_berry", BlocksInvoker.createFlowerPotBlock(WIKI_BERRY))
val POTTED_WIKI_BERRY = this.flowerPot("potted_wiki_berry", WIKI_BERRY)
@JvmField
val POTTED_YACHE_BERRY = this.create("potted_yache_berry", BlocksInvoker.createFlowerPotBlock(YACHE_BERRY))
val POTTED_YACHE_BERRY = this.flowerPot("potted_yache_berry", YACHE_BERRY)
@JvmField
val POTTED_PEP_UP_FLOWER = this.flowerPot("potted_pep_up_flower", PEP_UP_FLOWER)
@JvmField
val POTTED_RED_APRICORN_SAPLING = this.flowerPot("potted_red_apricorn_sapling", RED_APRICORN_SAPLING)
@JvmField
val POTTED_YELLOW_APRICORN_SAPLING = this.flowerPot("potted_yellow_apricorn_sapling", YELLOW_APRICORN_SAPLING)
@JvmField
val POTTED_GREEN_APRICORN_SAPLING = this.flowerPot("potted_green_apricorn_sapling", GREEN_APRICORN_SAPLING)
@JvmField
val POTTED_BLUE_APRICORN_SAPLING = this.flowerPot("potted_blue_apricorn_sapling", BLUE_APRICORN_SAPLING)
@JvmField
val POTTED_PINK_APRICORN_SAPLING = this.flowerPot("potted_pink_apricorn_sapling", PINK_APRICORN_SAPLING)
@JvmField
val POTTED_BLACK_APRICORN_SAPLING = this.flowerPot("potted_black_apricorn_sapling", BLACK_APRICORN_SAPLING)
@JvmField
val POTTED_WHITE_APRICORN_SAPLING = this.flowerPot("potted_white_apricorn_sapling", WHITE_APRICORN_SAPLING)
@JvmField
val POTTED_SACCHARINE_SAPLING = this.flowerPot("potted_saccharine_sapling", SACCHARINE_SAPLING)
init {
/**
@@ -1346,7 +1345,16 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
fun typeGemClusters() = typeGemClusters.toMap()
private fun pottedPlant(name: String, flower: Block) = this.create(name, BlocksInvoker.createFlowerPotBlock(flower))
private fun flowerPot(name: String, flower: Block) = this.create(
name,
FlowerPotBlock(
flower,
BlockBehaviour.Properties.of()
.instabreak()
.noOcclusion()
.pushReaction(PushReaction.DESTROY)
)
)
private fun mintLitter(name: String, color: MapColor) = this.create(
name,
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.ai.BehaviourConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
@@ -17,6 +18,7 @@ import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.mainThreadRuntime
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
@@ -34,6 +36,8 @@ import net.minecraft.world.entity.ai.sensing.SensorType
class HateEntityTaskConfig : SingleTaskConfig {
val entityCondition: Expression = "true".asExpression()
val range: ExpressionOrEntityVariable = Either.left("24".asExpression())
val chance: Float = Cobblemon.config.predationChance
private val coercedChance = chance.coerceIn(0f, 1f)
override fun getVariables(entity: LivingEntity, behaviourConfigurationContext: BehaviourConfigurationContext) = emptyList<MoLangConfigVariable>()
override fun createTask(
@@ -43,24 +47,44 @@ class HateEntityTaskConfig : SingleTaskConfig {
val range = range.resolveFloat(behaviourConfigurationContext.runtime)
behaviourConfigurationContext.addMemories(
MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES,
MemoryModuleType.ANGRY_AT
MemoryModuleType.ANGRY_AT,
MemoryModuleType.ATTACK_TARGET
)
behaviourConfigurationContext.addSensors(SensorType.NEAREST_LIVING_ENTITIES)
return BehaviorBuilder.create { instance ->
instance.group(
instance.present(MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES),
instance.registered(MemoryModuleType.ANGRY_AT)
).apply(instance) { entities, angryAt ->
instance.registered(MemoryModuleType.ANGRY_AT),
instance.registered(MemoryModuleType.ATTACK_TARGET),
).apply(instance) { entities, angryAt, attackTarget ->
Trigger { world, entity, _ ->
val target = instance.get(entities).findClosest {
mainThreadRuntime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
// bail if gamerule is disabled
if (!world.gameRules.getBoolean(CobblemonGameRules.DO_POKEMON_PREDATION)) return@Trigger false
val target = instance.get(entities).findClosest { hated ->
mainThreadRuntime.withQueryValue("entity", hated.asMostSpecificMoLangValue())
return@findClosest mainThreadRuntime.resolveBoolean(entityCondition)
}.orElse(null)
var shouldTrigger = false
if (target != null && target.distanceTo(entity) <= range) {
angryAt.set(target.uuid)
shouldTrigger = when {
// set always attacking if activity chance is equal to 1.0
coercedChance == 1f -> {
angryAt.set(target.uuid)
attackTarget.set(target)
true
}
// roll the dice in other way
coercedChance != 1f && world.random.nextFloat() < coercedChance -> {
angryAt.set(target.uuid)
attackTarget.set(target)
true
}
// fallback to peaceful behavior in unattended cases
else -> false
}
}
return@Trigger true
return@Trigger shouldTrigger
}
}
}
@@ -10,14 +10,9 @@ package com.cobblemon.mod.common.api.drop
import com.cobblemon.mod.common.api.events.CobblemonEvents.LOOT_DROPPED
import com.cobblemon.mod.common.api.events.drops.LootDroppedEvent
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.core.registries.Registries
import kotlin.random.Random
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.LivingEntity
@@ -110,11 +105,7 @@ class DropTable {
) {
LOOT_DROPPED.postThen(
event = LootDroppedEvent(this, player, entity, drops),
ifSucceeded = {
val pokemon = (entity as? PokemonEntity)?.pokemon?.species?.resourceIdentifier ?: return@postThen
it.drops.forEach { it.drop(entity, world, pos, player) }
// val lootKey = ResourceKey.create(Registries.LOOT_TABLE, cobblemonResource("pokemon/${pokemon}"))
}
ifSucceeded = { it.drops.forEach { it.drop(entity, world, pos, player) } }
)
}
@@ -1,64 +0,0 @@
package com.cobblemon.mod.common.api.drop
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.item.ItemEntity
import net.minecraft.world.level.storage.loot.LootParams
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import net.minecraft.world.level.storage.loot.parameters.LootContextParams
import net.minecraft.world.phys.Vec3
/**
* A drop entry that points to a vanilla loot table.
*/
class LootTableDropEntry(
override val percentage: Float,
override val quantity: Int,
override val maxSelectableTimes: Int,
val id: ResourceLocation
) : DropEntry {
override fun drop(
entity: LivingEntity?,
world: ServerLevel,
pos: Vec3,
player: ServerPlayer?
) {
val key = ResourceKey.create(Registries.LOOT_TABLE, id)
val playerEntity = player as? LivingEntity
if (entity == null) return
if (playerEntity != null) {
val params = LootParams.Builder(world)
.withParameter(LootContextParams.ATTACKING_ENTITY, playerEntity)
.withParameter(LootContextParams.DAMAGE_SOURCE, playerEntity.damageSources().genericKill())
.withParameter(LootContextParams.ORIGIN, pos)
.withParameter(LootContextParams.THIS_ENTITY, entity)
.create(LootContextParamSets.ENTITY)
val drops = world.server.reloadableRegistries().getLootTable(key)
.getRandomItems(params)
for (stack in drops) {
if (stack.isEmpty) continue
val itemEntity = ItemEntity(world, pos.x, pos.y, pos.z, stack)
itemEntity.setDefaultPickUpDelay()
world.addFreshEntity(itemEntity)
}
} else {
val params = LootParams.Builder(world)
.create(LootContextParamSets.EMPTY)
val drops = world.server.reloadableRegistries().getLootTable(key)
.getRandomItems(params)
for (stack in drops) {
if (stack.isEmpty) continue
val itemEntity = ItemEntity(world, pos.x, pos.y, pos.z, stack)
itemEntity.setDefaultPickUpDelay()
world.addFreshEntity(itemEntity)
}
}
}
}
@@ -88,7 +88,7 @@ fun getToolTipHeaderIcon(tradeEvolution: TradeEvolution): CobblemonDexEvolutionR
lang("ui.pokedex.evolution.trade.tooltip.with_any_species")
} else {
PokemonSpecies.getByIdentifier(species.asIdentifierDefaultingNamespace())
?.let { lang("ui.pokedex.evolution.trade.tooltip.with_species", it.translatedName.green()) }
?.let { lang("ui.pokedex.evolution.trade.tooltip.with_species", it.translatedName.plainCopy().green()) }
?: lang("ui.pokedex.evolution.trade.tooltip.with_any_species")
}
return CobblemonDexEvolutionRequirementDisplay(CobblemonItems.LINK_CABLE, tooltip)
@@ -282,7 +282,7 @@ fun buildLevelRequirement(levelRequirement: LevelRequirement): DexEvolutionRequi
fun buildMoonPhaseRequirement(moonPhaseRequirement: MoonPhaseRequirement): DexEvolutionRequirementDisplay {
val icon = Items.CLOCK
val moonPhaseComponent = moonPhaseRequirement.moonPhase.displayName().green()
val moonPhaseComponent = moonPhaseRequirement.moonPhase.displayName().plainCopy().green()
val tooltip = lang("ui.pokedex.requirement.moon_phase.tooltip", moonPhaseComponent)
return CobblemonDexEvolutionRequirementDisplay(icon, tooltip)
@@ -290,7 +290,7 @@ fun buildMoonPhaseRequirement(moonPhaseRequirement: MoonPhaseRequirement): DexEv
fun buildMoveSetRequirement(moveSetRequirement: MoveSetRequirement): DexEvolutionRequirementDisplay {
val icon = CobblemonItems.TECHNICAL_MACHINE
val tooltip = lang("ui.pokedex.requirement.has_move.tooltip", moveSetRequirement.move.displayName.green())
val tooltip = lang("ui.pokedex.requirement.has_move.tooltip", moveSetRequirement.move.displayName.plainCopy().green())
return CobblemonDexEvolutionRequirementDisplay(icon, tooltip)
}
@@ -319,7 +319,7 @@ fun buildMoveTypeRequirement(moveTypeRequirement: MoveTypeRequirement): DexEvolu
else -> CobblemonItems.NORMAL_GEM
}
val tooltip = lang("ui.pokedex.requirement.has_move_type.tooltip", moveTypeRequirement.type.displayName.green())
val tooltip = lang("ui.pokedex.requirement.has_move_type.tooltip", moveTypeRequirement.type.displayName.plainCopy().green())
return CobblemonDexEvolutionRequirementDisplay(icon, tooltip)
}
@@ -437,7 +437,7 @@ fun buildStructureRequirement(structureRequirement: StructureRequirement, negate
fun buildTimeRangeRequirement(timeRangeRequirement: TimeRangeRequirement): DexEvolutionRequirementDisplay? {
val icon = Items.CLOCK
val timeRangeComponent = timeRangeRequirement.range.displayName() ?: return null
val timeRangeComponent = timeRangeRequirement.range.displayName()?.plainCopy() ?: return null
val tooltip = lang("ui.pokedex.requirement.time_range.tooltip", timeRangeComponent.green())
return CobblemonDexEvolutionRequirementDisplay(icon, tooltip)
@@ -445,7 +445,7 @@ fun buildTimeRangeRequirement(timeRangeRequirement: TimeRangeRequirement): DexEv
fun buildUseMoveRequirement(useMoveRequirement: UseMoveRequirement): DexEvolutionRequirementDisplay {
val icon = CobblemonItems.CHOICE_BAND
val tooltip = lang("ui.pokedex.requirement.use_move.tooltip", useMoveRequirement.move.displayName.green())
val tooltip = lang("ui.pokedex.requirement.use_move.tooltip", useMoveRequirement.move.displayName.plainCopy().green())
return CobblemonDexEvolutionRequirementDisplay(icon, tooltip)
}
@@ -42,8 +42,8 @@ abstract class AreaTypeSpawningCondition<T : AreaSpawnablePosition> : SpawningCo
override fun copyFrom(other: SpawningCondition<*>, merger: Merger) {
super.copyFrom(other, merger)
if (other is AreaTypeSpawningCondition) {
merger.mergeSingle(minHeight, other.minHeight)
merger.mergeSingle(maxHeight, other.maxHeight)
minHeight = merger.mergeSingle(minHeight, other.minHeight)
maxHeight = merger.mergeSingle(maxHeight, other.maxHeight)
neededNearbyBlocks = merger.merge(neededNearbyBlocks, other.neededNearbyBlocks)?.toMutableList()
}
}
@@ -46,7 +46,7 @@ abstract class SubmergedTypeSpawningCondition<T : SubmergedSpawnablePosition> :
super.copyFrom(other, merger)
if (other is SubmergedTypeSpawningCondition) {
minDepth = merger.mergeSingle(minDepth, other.minDepth)
maxDepth = merger.mergeSingle(minDepth, other.minDepth)
maxDepth = merger.mergeSingle(maxDepth, other.maxDepth)
fluidIsSource = merger.mergeSingle(fluidIsSource, other.fluidIsSource)
fluid = merger.mergeSingle(fluid, other.fluid)
}
@@ -39,7 +39,7 @@ abstract class SurfaceTypeSpawningCondition<T : SurfaceSpawnablePosition> : Area
super.copyFrom(other, merger)
if (other is SurfaceTypeSpawningCondition) {
minDepth = merger.mergeSingle(minDepth, other.minDepth)
maxDepth = merger.mergeSingle(minDepth, other.minDepth)
maxDepth = merger.mergeSingle(maxDepth, other.maxDepth)
fluid = merger.mergeSingle(fluid, other.fluid)
}
}
@@ -85,6 +85,7 @@ class PartyOverlay : Gui(Minecraft.getInstance()) {
if (HidePartyBinding.shouldHide) {
return false
}
return true
}
}
@@ -558,4 +559,4 @@ class PartyOverlay : Gui(Minecraft.getInstance()) {
}
}
}
}
}
@@ -34,6 +34,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.bedrock.animatio
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.client.render.models.blockbench.quirk.ModelQuirk
import com.cobblemon.mod.common.client.render.models.blockbench.quirk.QuirkData
import com.cobblemon.mod.common.client.sound.instances.UIEntitySoundInstance
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
@@ -44,7 +45,6 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException
import java.util.concurrent.ConcurrentLinkedQueue
import net.minecraft.client.Minecraft
import net.minecraft.client.multiplayer.ClientLevel
import net.minecraft.client.resources.sounds.SimpleSoundInstance
import net.minecraft.commands.arguments.item.ItemParser
import net.minecraft.sounds.SoundEvent
import net.minecraft.world.entity.Entity
@@ -289,7 +289,7 @@ abstract class PosableState : Schedulable {
entity.level().playLocalSound(entity, soundEvent, entity.soundSource, volume, pitch)
}
} else {
Minecraft.getInstance().soundManager.play(SimpleSoundInstance.forUI(soundEvent, volume, pitch))
Minecraft.getInstance().soundManager.play(UIEntitySoundInstance(soundEvent, volume, pitch))
}
}
}
@@ -19,6 +19,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Bone
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
import com.cobblemon.mod.common.client.sound.instances.AlphaCrySoundInstance
import com.cobblemon.mod.common.client.sound.instances.UIEntitySoundInstance
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.effectiveName
import com.cobblemon.mod.common.util.genericRuntime
@@ -31,7 +32,6 @@ import net.minecraft.client.Minecraft
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.client.multiplayer.ClientLevel
import net.minecraft.client.resources.sounds.EntityBoundSoundInstance
import net.minecraft.client.resources.sounds.SimpleSoundInstance
import net.minecraft.resources.ResourceLocation
import net.minecraft.sounds.SoundEvent
import net.minecraft.world.entity.Entity
@@ -121,7 +121,7 @@ class BedrockSoundKeyframe(
}
}
} else {
Minecraft.getInstance().soundManager.play(SimpleSoundInstance.forUI(soundEvent, 1F, 1F))
Minecraft.getInstance().soundManager.play(UIEntitySoundInstance(soundEvent))
}
}
}
@@ -29,8 +29,8 @@ class FarfetchdGalarianModel(root: ModelPart) : PokemonPosableModel(root), Heade
override var portraitScale = 2.6F
override var portraitTranslation = Vec3(-0.2, -1.0, 0.0)
override var profileScale = 0.93F
override var profileTranslation = Vec3(-0.1, 0.36, 0.0)
override var profileScale = 1.1F
override var profileTranslation = Vec3(-0.1, 0.1, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
@@ -28,8 +28,8 @@ class FarfetchdModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame,
override var portraitScale = 2.6F
override var portraitTranslation = Vec3(-0.2, -1.0, 0.0)
override var profileScale = 0.93F
override var profileTranslation = Vec3(-0.1, 0.36, 0.0)
override var profileScale = 1.1F
override var profileTranslation = Vec3(-0.1, 0.1, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
@@ -23,8 +23,8 @@ class KabutoModel(root: ModelPart) : PokemonPosableModel(root) {
override var portraitScale = 3.3F
override var portraitTranslation = Vec3(0.0, -3.3, 0.0)
override var profileScale = 1.25F
override var profileTranslation = Vec3(0.0, -0.17, 0.0)
override var profileScale = 1.6F
override var profileTranslation = Vec3(0.0, -0.6, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
@@ -21,8 +21,8 @@ class HoothootModel (root: ModelPart) : PokemonPosableModel(root) {
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.25, -0.9, 0.0)
override var profileScale = 0.82F
override var profileTranslation = Vec3(0.0, 0.53, 0.0)
override var profileScale = 1.0F
override var profileTranslation = Vec3(0.0, 0.3, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
@@ -29,8 +29,8 @@ class WooperModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override var portraitScale = 2.0F
override var portraitTranslation = Vec3(-0.15, -0.65, 0.0)
override var profileScale = 0.75F
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.4, 0.0)
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
@@ -29,8 +29,8 @@ class WooperPaldeanModel(root: ModelPart) : PokemonPosableModel(root), HeadedFra
override var portraitScale = 2.0F
override var portraitTranslation = Vec3(-0.15, -0.65, 0.0)
override var profileScale = 0.75F
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.4, 0.0)
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
@@ -23,7 +23,7 @@ class CarbinkModel (root: ModelPart) : PokemonPosableModel(root) {
override var portraitScale = 1.8F
override var portraitTranslation = Vec3(0.0, 0.2, 0.0)
override var profileScale = 0.68F
override var profileScale = 0.85F
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
lateinit var standing: CobblemonPose
@@ -26,8 +26,8 @@ class ScatterbugModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame
override var portraitScale = 2.6F
override var portraitTranslation = Vec3(-0.2, -1.9, 0.0)
override var profileScale = 0.98F
override var profileTranslation = Vec3(0.0, 0.28, 0.0)
override var profileScale = 1.2F
override var profileTranslation = Vec3(0.0, 0.05, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
@@ -36,8 +36,8 @@ class CharcadetModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame,
override var portraitScale = 1.7F
override var portraitTranslation = Vec3(-0.15, 0.08, 0.0)
override var profileScale = 0.58F
override var profileTranslation = Vec3(0.0, 0.91, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
lateinit var standing: CobblemonPose
lateinit var walking: CobblemonPose
@@ -35,8 +35,8 @@ class QuaquavalModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame,
override var portraitScale = 2.3F
override var portraitTranslation = Vec3(-0.42, 3.7, 0.0)
override var profileScale = 0.36F
override var profileTranslation = Vec3(0.0, 1.19, 0.0)
override var profileScale = 0.32F
override var profileTranslation = Vec3(0.0, 1.24, 0.0)
lateinit var standing: CobblemonPose
lateinit var standing2: CobblemonPose
@@ -0,0 +1,22 @@
/*
* 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.sound.instances
import net.minecraft.client.resources.sounds.SimpleSoundInstance
import net.minecraft.client.resources.sounds.SoundInstance
import net.minecraft.sounds.SoundEvent
import net.minecraft.sounds.SoundSource
/**
* Plays a sound for a Pokémon rendered in a GUI, where there is no entity to take the sound source from.
* Unlike [SimpleSoundInstance.forUI] this uses [SoundSource.NEUTRAL] so the Friendly Creatures slider applies.
*/
class UIEntitySoundInstance(sound: SoundEvent, volume: Float = 1F, pitch: Float = 1F) :
SimpleSoundInstance(sound.location, SoundSource.NEUTRAL, volume, pitch, SoundInstance.createUnseededRandom(),
false, 0, SoundInstance.Attenuation.NONE, 0.0, 0.0, 0.0, true)
@@ -164,6 +164,9 @@ class CobblemonConfig {
@CobblemonConfigField(Category.Pokemon, lang = "experience_multiplier", SERVER)
var experienceMultiplier = 2F
@CobblemonConfigField(Category.Pokemon, lang = "predation_chance", SERVER)
var predationChance = 0.05F
@CobblemonConfigField(Category.Spawning, lang = "pokemon_per_chunk", SERVER)
var pokemonPerChunk = 1F
@@ -117,7 +117,6 @@ import net.minecraft.core.BlockPos
import net.minecraft.core.Direction
import net.minecraft.core.component.DataComponents
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.NbtOps
import net.minecraft.nbt.NbtUtils
@@ -133,7 +132,6 @@ import net.minecraft.network.protocol.game.DebugPackets
import net.minecraft.network.syncher.EntityDataAccessor
import net.minecraft.network.syncher.EntityDataSerializers
import net.minecraft.network.syncher.SynchedEntityData
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerEntity
import net.minecraft.server.level.ServerLevel
@@ -175,7 +173,6 @@ import net.minecraft.world.level.gameevent.GameEvent
import net.minecraft.world.level.material.EmptyFluid
import net.minecraft.world.level.material.FluidState
import net.minecraft.world.level.pathfinder.PathType
import net.minecraft.world.level.storage.loot.LootTable
import net.minecraft.world.phys.AABB
import net.minecraft.world.phys.Vec3
import java.util.*
@@ -245,12 +242,6 @@ open class PokemonEntity(
override val schedulingTracker = SchedulingTracker()
override fun getDefaultLootTable(): ResourceKey<LootTable?>? {
println(cobblemonResource("pokemon/${this.pokemon.species.resourceIdentifier.path}"))
// return ResourceKey.create(Registries.LOOT_TABLE, )
return super.getDefaultLootTable()
}
val form: FormData
get() = pokemon.form
val behaviour: FormPokemonBehaviour
@@ -1303,16 +1294,7 @@ open class PokemonEntity(
}
private fun showInteractionWheel(player: ServerPlayer, itemStack: ItemStack) {
val canRide = ifRidingAvailableSupply(false) { behaviour, settings, state ->
if (platform != PlatformType.NONE) return@ifRidingAvailableSupply false
if (tethering != null) return@ifRidingAvailableSupply false;
if (seats.isEmpty()) return@ifRidingAvailableSupply false;
if ((owner as? ServerPlayer)?.isInBattle() == true) return@ifRidingAvailableSupply false;
if (this.owner != player && this.passengers.isEmpty()) return@ifRidingAvailableSupply false;
if(pokemon.effectiveScale < Cobblemon.config.minimumRidingScale) return@ifRidingAvailableSupply false;
if(beamMode == 3) return@ifRidingAvailableSupply false;
return@ifRidingAvailableSupply behaviour.isActive(settings, state, this);
}
val canRide = isRideableFor(player)
if (pokemon.getOwnerPlayer() == player) {
val cosmeticItemDefinition = CobblemonCosmeticItems.findValidCosmeticForPokemonAndItem(
player.level().registryAccess(),
@@ -1334,6 +1316,18 @@ open class PokemonEntity(
}
}
fun isRideableFor(player: ServerPlayer): Boolean = ifRidingAvailableSupply(false) canRide@{ behaviour, settings, state ->
if (!player.canInteractWithEntity(this, player.entityInteractionRange())) return@canRide false
if (platform != PlatformType.NONE) return@canRide false
if (tethering != null) return@canRide false
if (seats.isEmpty()) return@canRide false
if ((owner as? ServerPlayer)?.isInBattle() == true) return@canRide false
if (this.owner != player && this.passengers.isEmpty()) return@canRide false
if (pokemon.effectiveScale < Cobblemon.config.minimumRidingScale) return@canRide false
if (beamMode == 3) return@canRide false
return@canRide behaviour.isActive(settings, state, this)
}
override fun getDimensions(pose: Pose): EntityDimensions {
val scale = effects.mockEffect?.scale ?: (form.baseScale * pokemon.effectiveScale)
var result = this.exposedForm.hitbox.scale(scale)
@@ -1615,9 +1609,8 @@ open class PokemonEntity(
|| stack.`is`(CobblemonItemTags.WHITELISTED_ITEMS_TO_HOLD)
fun tryRidingPokemon(player: ServerPlayer): Boolean {
if (pokemon.effectiveScale < Cobblemon.config.minimumRidingScale) {
return false
}
if (!isRideableFor(player)) return false
val event = RidePokemonEvent.Pre(player, this)
CobblemonEvents.RIDE_EVENT_PRE.post(event)
if (!event.isCanceled) {
@@ -1,28 +0,0 @@
package com.cobblemon.mod.common.loot
import com.cobblemon.mod.common.loot.conditions.BiomeLootItemCondition
import com.cobblemon.mod.common.loot.conditions.PokemonPropertiesLootItemCondition
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType
object CobblemonLootItemConditions {
@JvmField
val POKEMON_PROPERTIES_CONDITION = Registry.register(
BuiltInRegistries.LOOT_CONDITION_TYPE,
cobblemonResource("pokemon_properties"),
LootItemConditionType(PokemonPropertiesLootItemCondition.CODEC)
)
@JvmField
val BIOME_CONDITION = Registry.register(
BuiltInRegistries.LOOT_CONDITION_TYPE,
cobblemonResource("biome"),
LootItemConditionType(BiomeLootItemCondition.CODEC)
)
fun touch() = Unit
}
@@ -1,38 +0,0 @@
package com.cobblemon.mod.common.loot.conditions
import com.cobblemon.mod.common.api.conditional.RegistryLikeCondition
import com.cobblemon.mod.common.api.conditional.makeCodecForRegistryLikeCondition
import com.cobblemon.mod.common.loot.CobblemonLootItemConditions
import com.cobblemon.mod.common.util.toBlockPos
import com.mojang.serialization.MapCodec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.core.registries.Registries
import net.minecraft.world.level.biome.Biome
import net.minecraft.world.level.storage.loot.LootContext
import net.minecraft.world.level.storage.loot.parameters.LootContextParams
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType
class BiomeLootItemCondition(
val biome: RegistryLikeCondition<Biome>
) : LootItemCondition {
override fun getType(): LootItemConditionType {
return CobblemonLootItemConditions.BIOME_CONDITION
}
override fun test(t: LootContext): Boolean {
val temp = biome.fits(t.level.getBiome(t.getParam(LootContextParams.ORIGIN).toBlockPos()))
return temp
}
companion object {
private val BIOME_CODEC = makeCodecForRegistryLikeCondition("biome", Registries.BIOME)
val CODEC: MapCodec<BiomeLootItemCondition> = RecordCodecBuilder.mapCodec { instance ->
instance.group(
BIOME_CODEC.fieldOf("biome")
.forGetter(BiomeLootItemCondition::biome)
).apply(instance, ::BiomeLootItemCondition)
}
}
}
@@ -1,33 +0,0 @@
package com.cobblemon.mod.common.loot.conditions
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.loot.CobblemonLootItemConditions
import com.mojang.serialization.MapCodec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.world.level.storage.loot.LootContext
import net.minecraft.world.level.storage.loot.parameters.LootContextParams
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType
class PokemonPropertiesLootItemCondition(
val properties: PokemonProperties
) : LootItemCondition {
override fun getType(): LootItemConditionType {
return CobblemonLootItemConditions.POKEMON_PROPERTIES_CONDITION
}
override fun test(t: LootContext): Boolean {
val pokemon = t.getParamOrNull(LootContextParams.THIS_ENTITY) as? PokemonEntity ?: return false
return properties.matches(pokemon)
}
companion object {
val CODEC: MapCodec<PokemonPropertiesLootItemCondition> = RecordCodecBuilder.mapCodec { instance ->
instance.group(
PokemonProperties.CODEC.fieldOf("properties")
.forGetter(PokemonPropertiesLootItemCondition::properties)
).apply(instance, ::PokemonPropertiesLootItemCondition)
}
}
}
@@ -135,17 +135,18 @@ internal object PropertiesCompletionProvider : DataRegistry {
private fun addDefaults() {
this.inject(setOf("level", "lvl", "l"), setOf("1", "${Cobblemon.config.maxPokemonLevel}") )
this.inject(setOf("shiny", "s"), setOf("yes", "no"))
this.inject(setOf("alpha", "is_alpha"), setOf("yes", "no"))
this.inject(setOf("gender"), Gender.entries.map { it.name.lowercase() })
this.inject(setOf("friendship"), setOf("0", Cobblemon.config.maxPokemonFriendship.toString()))
this.inject(setOf("fullness"), setOf("0", "255"))
this.inject(setOf("pokeball"), PokeBalls.all().map { it.name.simplify() })
this.inject(setOf("nature"), Natures.all().map { it.name.simplify() })
this.inject(setOf("ability"), Abilities.all().map { if (it.name.asIdentifierDefaultingNamespace().namespace == Cobblemon.MODID) it.name.asIdentifierDefaultingNamespace().path else it.name })
this.inject(setOf("dmax"), setOf("0", Cobblemon.config.maxDynamaxLevel.toString()))
this.inject(setOf("gmax"), setOf("yes", "no"))
this.inject(setOf("dmax_level", "dmax"), setOf("0", Cobblemon.config.maxDynamaxLevel.toString()))
this.inject(setOf("gmax_factor", "gmax"), setOf("yes", "no"))
this.inject(setOf("type", "elemental_type"), ElementalTypes.all().map { it.name })
this.inject(setOf("tera_type", "tera"), TeraTypes.map { it.id.simplify() })
this.inject(setOf("tradeable"), setOf("yes", "no"))
this.inject(setOf("tradeable", "tradable"), setOf("yes", "no"))
this.inject(setOf("originaltrainer", "ot"), setOf(""))
this.inject(setOf("originaltrainertype", "ottype"), setOf("None", "Player", "NPC"))
this.inject(setOf("nickname", "nick"), setOf(""))
@@ -26,5 +26,6 @@ object CobblemonGameRules {
val SHINY_STARTERS: GameRules.Key<GameRules.BooleanValue> = Cobblemon.implementation.registerGameRule("doShinyStarters", GameRules.Category.MISC, BooleanRuleInvoker.`cobblemon$create`(false))
@JvmField
val HEALERS_HEAL_PC: GameRules.Key<GameRules.BooleanValue> = Cobblemon.implementation.registerGameRule("healersHealPC", GameRules.Category.MISC, BooleanRuleInvoker.`cobblemon$create`(false))
@JvmField
val DO_POKEMON_PREDATION: GameRules.Key<GameRules.BooleanValue> = Cobblemon.implementation.registerGameRule("doPokemonPredation", GameRules.Category.MOBS, BooleanRuleInvoker.`cobblemon$create`(true))
}
@@ -1,90 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/moves/watershuriken"
}
},
"curves": {
"variable.rsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 1, 1, 1, 1, 1]
}
},
"events": {
"trail": {
"particle_effect": {
"effect": "cobblemon:watershuriken_actortrail",
"type": "particle"
}
},
"hit": {
"particle_effect": {
"effect": "cobblemon:watershuriken_target",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.25
},
"minecraft:emitter_shape_disc": {
"offset": [0, 0.02, 0.1],
"radius": 0.5,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.35
},
"minecraft:particle_lifetime_events": {
"timeline": {
"0.00": "trail",
"0.06": "trail",
"0.12": "trail",
"0.18": "trail",
"0.24": "trail",
"0.30": "trail",
"0.34": "hit"
}
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["-v.target_deltax*(v.particle_age / v.particle_lifetime)", "(v.target_deltay*(v.particle_age / v.particle_lifetime))", "-v.target_deltaz*(v.particle_age / v.particle_lifetime)"]
},
"minecraft:particle_appearance_billboard": {
"size": ["0.4*v.rsize", "0.4*v.rsize"],
"facing_camera_mode": "lookat_direction",
"direction": {
"mode": "custom",
"custom_direction": [0, 0, -1]
},
"uv": {
"texture_width": 60,
"texture_height": 15,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 15],
"step_UV": [15, 0],
"frames_per_second": 24,
"max_frame": 4,
"loop": true
}
}
}
}
}
}
@@ -1,91 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_actoralt",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/moves/watershuriken"
}
},
"curves": {
"variable.rsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 1, 1, 1, 1, 1]
}
},
"events": {
"trail": {
"particle_effect": {
"effect": "cobblemon:watershuriken_actortrail",
"type": "particle"
}
},
"hit": {
"particle_effect": {
"effect": "cobblemon:watershuriken_target",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 7,
"max_particles": 3
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.4
},
"minecraft:emitter_shape_disc": {
"offset": [0, 0.02, 0.1],
"radius": 0.5,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.35
},
"minecraft:particle_lifetime_events": {
"timeline": {
"0.00": "trail",
"0.06": "trail",
"0.12": "trail",
"0.18": "trail",
"0.24": "trail",
"0.30": "trail",
"0.34": "hit"
}
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["-(v.target_deltax+((v.particle_random_1-0.5)*2))*(v.particle_age / v.particle_lifetime)", "(v.target_deltay+((v.particle_random_2-0.5)*2))*(v.particle_age / v.particle_lifetime)", "-v.target_deltaz*(v.particle_age / v.particle_lifetime)"]
},
"minecraft:particle_appearance_billboard": {
"size": ["0.4*v.rsize", "0.4*v.rsize"],
"facing_camera_mode": "lookat_direction",
"direction": {
"mode": "custom",
"custom_direction": [0, 0, -1]
},
"uv": {
"texture_width": 60,
"texture_height": 15,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 15],
"step_UV": [15, 0],
"frames_per_second": 24,
"max_frame": 4,
"loop": true
}
}
}
}
}
}
@@ -1,86 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_actorhor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/moves/watershuriken"
}
},
"curves": {
"variable.rsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 1, 1, 1, 1, 1]
}
},
"events": {
"trail": {
"particle_effect": {
"effect": "cobblemon:watershuriken_actortrail",
"type": "particle"
}
},
"hit": {
"particle_effect": {
"effect": "cobblemon:watershuriken_target",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.25
},
"minecraft:emitter_shape_disc": {
"offset": [0, 0.02, 0.1],
"radius": 0.5,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.35
},
"minecraft:particle_lifetime_events": {
"timeline": {
"0.00": "trail",
"0.06": "trail",
"0.12": "trail",
"0.18": "trail",
"0.24": "trail",
"0.30": "trail",
"0.34": "hit"
}
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["-v.target_deltax*(v.particle_age / v.particle_lifetime)", "(v.target_deltay*(v.particle_age / v.particle_lifetime))", "-v.target_deltaz*(v.particle_age / v.particle_lifetime)"]
},
"minecraft:particle_appearance_billboard": {
"size": ["0.4*v.rsize", "0.4*v.rsize"],
"facing_camera_mode": "emitter_transform_xz",
"uv": {
"texture_width": 60,
"texture_height": 15,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 15],
"step_UV": [15, 0],
"frames_per_second": 24,
"max_frame": 4,
"loop": true
}
}
}
}
}
}
@@ -1,63 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_actortrail",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_water"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"direction": ["v.particle_random_1-0.5", "v.particle_random_2-0.25", -3]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.3, 0.6)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": 8,
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -5, 0],
"linear_drag_coefficient": 8
},
"minecraft:particle_appearance_billboard": {
"size": ["0.22 * variable.scale", "0.22 * variable.scale"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 24],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 16,
"max_frame": 4
}
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.02
},
"minecraft:particle_appearance_tinting": {
"color": [0.61176, 0.87451, 1, 1]
}
}
}
}
@@ -1,86 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_actorvert",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/moves/watershuriken"
}
},
"curves": {
"variable.rsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 1, 1, 1, 1, 1]
}
},
"events": {
"trail": {
"particle_effect": {
"effect": "cobblemon:watershuriken_actortrail",
"type": "particle"
}
},
"hit": {
"particle_effect": {
"effect": "cobblemon:watershuriken_target",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.25
},
"minecraft:emitter_shape_disc": {
"offset": [0, 0.02, 0.1],
"radius": 0.5,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.35
},
"minecraft:particle_lifetime_events": {
"timeline": {
"0.00": "trail",
"0.06": "trail",
"0.12": "trail",
"0.18": "trail",
"0.24": "trail",
"0.30": "trail",
"0.34": "hit"
}
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["-v.target_deltax*(v.particle_age / v.particle_lifetime)", "(v.target_deltay*(v.particle_age / v.particle_lifetime))", "-v.target_deltaz*(v.particle_age / v.particle_lifetime)"]
},
"minecraft:particle_appearance_billboard": {
"size": ["0.4*v.rsize", "0.4*v.rsize"],
"facing_camera_mode": "emitter_transform_yz",
"uv": {
"texture_width": 60,
"texture_height": 15,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 15],
"step_UV": [15, 0],
"frames_per_second": 24,
"max_frame": 4,
"loop": true
}
}
}
}
}
}
@@ -1,69 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_water"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 0]
}
},
"events": {
"event": {
"particle_effect": {
"effect": "cobblemon:watershuriken_targetspark",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 240,
"max_particles": 14
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event"
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.3, 0.6)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "math.random(9,17)",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.3 * variable.scale", "0.3 * variable.scale"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 16],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 16,
"max_frame": 5
}
}
},
"minecraft:particle_appearance_tinting": {
"color": [0.61176, 0.87451, 1, 1]
}
}
}
}
@@ -1,62 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:watershuriken_targetspark",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/critical_hit"
}
},
"curves": {
"variable.bitespark": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 0.88, 0.66, 0.35, -0.05]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 7
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.25],
"direction": ["v.particle_random_1-0.5", "v.particle_random_2-0.25", "v.particle_random_3-0.5"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "0.5-(v.particle_random_4*0.1)"
},
"minecraft:particle_initial_speed": "math.random(1.75,3.55)*3",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -5, 0],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.125*v.bitespark", "0.125*v.bitespark"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 8,
"uv": [0, 0],
"uv_size": [7, 7]
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FF51D8FF",
"1.0": "#FF0076FF"
}
}
}
}
}
}
@@ -37,10 +37,10 @@
"rotation": [0, -7.5, 0]
},
"tail2": {
"rotation": ["30-math.sin(q.anim_time*90*2-60)*-3", 0, 0]
"rotation": [30, 0, 0]
},
"tail3": {
"rotation": ["12.5-math.sin(q.anim_time*90*2-120)*-3", 0, 0]
"rotation": [12.5, 0, 0]
},
"leg_right": {
"rotation": [0, 5, 0]
@@ -53,22 +53,6 @@
},
"wings_open": {
"scale": 0
},
"torso": {
"rotation": ["-math.sin(q.anim_time*90*2-90)*1", 0, "math.sin(q.anim_time*90*1-90)*1"],
"position": [0, "math.sin(q.anim_time*90*2)*0.1", 0]
},
"wing_closed_left": {
"rotation": ["-0-math.sin(q.anim_time*90*2-150)*1", 0, 0]
},
"wing_closed_right": {
"rotation": ["-0-math.sin(q.anim_time*90*2-150)*1", 0, 0]
},
"neck": {
"rotation": ["-math.sin(q.anim_time*90*2-180)*1", 0, 0]
},
"head": {
"rotation": ["-math.sin(q.anim_time*90*2-90)*-2", 0, "math.sin(q.anim_time*90*1-60)*-1"]
}
}
},
@@ -127,30 +111,6 @@
}
}
},
"torso": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.8333": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.1667": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"jaw": {
"rotation": {
"0.0": {
@@ -158,15 +118,19 @@
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [72.5, 0, 0],
"post": [85, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [85, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.8333": {
"post": [52.5, 0, 0],
"0.75": {
"post": [85, 0, 0],
"lerp_mode": "catmullrom"
},
"1.1667": {
@@ -174,32 +138,6 @@
"lerp_mode": "catmullrom"
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.5833": {
"pre": [0, 0, 0],
"post": [0.1, 0, -0.1]
},
"0.75": {
"pre": [0.1, 0, -0.1],
"post": [0, 0, 0]
}
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.5833": {
"pre": [0, 0, 0],
"post": [-0.1, 0, -0.1]
},
"0.75": {
"pre": [-0.1, 0, -0.1],
"post": [0, 0, 0]
}
}
}
},
"sound_effects": {
@@ -265,546 +203,6 @@
"position": [-0.1, 0, -0.1]
}
}
},
"animation.spearow.hold_item": {
"loop": true,
"bones": {
"jaw": {
"rotation": [30, 0, 0]
}
}
},
"animation.spearow.ground_walk": {
"loop": true,
"animation_length": 0.75,
"bones": {
"torso": {
"rotation": ["1-math.cos(q.anim_time*90*16/3*2)*-2", "-math.sin(q.anim_time*90*16/3+60)*3", "-1+math.sin(q.anim_time*90*16/3+30)*-4"],
"position": [0, "math.sin(q.anim_time*90*16/3*2)*0.2", 0]
},
"wings_open": {
"scale": 0
},
"wing_closed_left": {
"rotation": [3, 0, 0]
},
"wing_closed_right": {
"rotation": [3, 0, 0]
},
"tail2": {
"rotation": ["22-math.cos(q.anim_time*90*16/3*2)*5", 0, 0]
},
"tail3": {
"rotation": ["5-math.cos(q.anim_time*90*16/3*2)*5", 0, 0]
},
"neck": {
"rotation": {
"0.0": ["-math.cos(q.anim_time*90*16/3*2)*-12.5", "-math.sin(q.anim_time*90*16/3+60)*-3", "math.sin(q.anim_time*90*16/3+30)*3"],
"0.125": ["-math.cos(q.anim_time*90*16/3*2)*-9.5", "-math.sin(q.anim_time*90*16/3+60)*-3", "math.sin(q.anim_time*90*16/3+30)*3"],
"0.1667": ["-math.cos(q.anim_time*90*16/3*2)*-12.5", "-math.sin(q.anim_time*90*16/3+60)*-3", "math.sin(q.anim_time*90*16/3+30)*3"],
"0.375": ["-math.cos(q.anim_time*90*16/3*2)*-12.5", "-math.sin(q.anim_time*90*16/3+60)*-3", "math.sin(q.anim_time*90*16/3+30)*3"],
"0.5": ["-math.cos(q.anim_time*90*16/3*2)*-9.5", "-math.sin(q.anim_time*90*16/3+60)*-3", "math.sin(q.anim_time*90*16/3+30)*3"],
"0.5417": ["-math.cos(q.anim_time*90*16/3*2)*-12.5", "-math.sin(q.anim_time*90*16/3+60)*-3", "math.sin(q.anim_time*90*16/3+30)*3"]
},
"position": {
"0.0": [0, "math.cos(q.anim_time*90*16/3*2)*0.2", 0],
"0.0417": [0, -0.075, 0.025],
"0.0833": [0, "-0.2+math.cos(q.anim_time*90*16/3*2)*0.2", -0.2],
"0.125": [0, -0.22, -0.17],
"0.1667": [0, -0.21, -0.185],
"0.375": [0, "math.cos(q.anim_time*90*16/3*2)*0.2", 0],
"0.4167": [0, -0.075, 0.025],
"0.4583": [0, "-0.2+math.cos(q.anim_time*90*16/3*2)*0.2", -0.2],
"0.5": [0, -0.22, -0.17],
"0.5417": [0, -0.21, -0.185],
"0.75": [0, "math.cos(q.anim_time*90*16/3*2)*0.2", 0]
}
},
"head": {
"rotation": ["5-math.cos(q.anim_time*90*16/3*2)*18", 0, 0],
"position": [0, 0, "-0.2+math.cos(q.anim_time*90*16/3*2)*0.3"]
},
"scruff_left": {
"rotation": [0, "-0-math.cos(q.anim_time*90*16/3*2-30)*7", 0]
},
"scruff_right": {
"rotation": [0, "0+math.cos(q.anim_time*90*16/3*2-30)*7", 0]
},
"scruff_top_right": {
"rotation": ["-0-math.cos(q.anim_time*90*16/3*2-30)*5", 0, 0]
},
"scruff_bottom": {
"rotation": ["-0-math.cos(q.anim_time*90*16/3*2)*-12", 0, 0]
},
"leg_left": {
"rotation": {
"0.0": [25, -17.5, 0],
"0.125": {
"pre": [21.25, -12.5, 0],
"post": [21.25, -12.5, 0],
"lerp_mode": "catmullrom"
},
"0.375": [-40, -5, 0],
"0.75": [25, -17.5, 0]
},
"position": {
"0.0": [0.3, 0.1, 0.6],
"0.0417": [0.23, 0.25, 0.71],
"0.125": {
"pre": [0, 0.68, -0.08],
"post": [0, 0.68, -0.08],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, 0.97, -1.41],
"lerp_mode": "catmullrom"
},
"0.375": [0, -0.5, -2.15],
"0.5": [0, -0.19, -1.02],
"0.5833": [0, -0.07, -0.3],
"0.625": [0, -0.02, 0.21],
"0.7083": [0.1, 0.215, 0.43],
"0.75": [0.3, 0.1, 0.6]
}
},
"leg_left2": {
"rotation": {
"0.0": [0, 0, 0],
"0.125": {
"pre": [-30.83, 0, 0],
"post": [-30.83, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-2.65, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": [12.5, 0, 0],
"0.75": [0, 0, 0]
}
},
"foot_left": {
"rotation": {
"0.0": [27.5, 0, -5],
"0.125": {
"pre": [20.17, 0, 0],
"post": [20.17, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [12.596, 0.6637, -1.3486],
"lerp_mode": "catmullrom"
},
"0.375": [28, 0, 0],
"0.625": [-7.33, 0, 0],
"0.75": [27.5, 0, -5]
},
"position": {
"0.0": [0, 0.25, 0],
"0.125": [0, 0, 0],
"0.375": [0, 0, 0],
"0.625": [0, 0.17, 0],
"0.75": [0, 0.25, 0]
}
},
"toe_back_left": {
"rotation": {
"0.0": [-20, 0, 0],
"0.2083": {
"pre": [-8.33, 0, 0],
"post": [-8.33, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": [0, 0, 0],
"0.625": [0, 0, 0],
"0.75": [-20, 0, 0]
}
},
"toe_inner_left": {
"rotation": {
"0.0": [-55, 10, -7.5],
"0.125": {
"pre": [7.5, 15, 0],
"post": [7.5, 15, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [5, 15, 0],
"lerp_mode": "catmullrom"
},
"0.375": [0, 15, 0],
"0.625": [0, 15, 0],
"0.75": [-55, 10, -7.5]
},
"position": {
"0.0": [0, -0.75, 1.35],
"0.125": [0, 0, 0],
"0.625": [0, 0, 0],
"0.75": [0, -0.75, 1.35]
}
},
"toe_outer_left": {
"rotation": {
"0.0": [-51.5, -2.5, 10],
"0.125": {
"pre": [5, -15, 0],
"post": [5, -15, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [5, -15, 0],
"lerp_mode": "catmullrom"
},
"0.375": [0, -15, 0],
"0.625": [0, -15, 0],
"0.75": [-51.5, -2.5, 10]
},
"position": {
"0.0": [0, -0.75, 1.35],
"0.125": [0, 0, 0],
"0.625": [0, 0, 0],
"0.75": [0, -0.75, 1.35]
}
},
"leg_right": {
"rotation": {
"0.0": [-40, 5, 0],
"0.375": [25, 17.5, 0],
"0.5": {
"pre": [21.25, 12.5, 0],
"post": [21.25, 12.5, 0],
"lerp_mode": "catmullrom"
},
"0.75": [-40, 5, 0]
},
"position": {
"0.0": [0, -0.5, -2.15],
"0.125": [0, -0.19, -1.02],
"0.2083": [0, -0.07, -0.3],
"0.25": [0, -0.02, 0.21],
"0.3333": [-0.1, 0.215, 0.43],
"0.375": [-0.3, 0.1, 0.6],
"0.4167": [-0.23, 0.25, 0.71],
"0.5": {
"pre": [0, 0.68, -0.08],
"post": [0, 0.68, -0.08],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [0, 0.97, -1.41],
"lerp_mode": "catmullrom"
},
"0.75": [0, -0.5, -2.15]
}
},
"leg_right2": {
"rotation": {
"0.0": [12.5, 0, 0],
"0.375": [0, 0, 0],
"0.5": {
"pre": [-30.83, 0, 0],
"post": [-30.83, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-2.65, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [12.5, 0, 0]
}
},
"foot_right": {
"rotation": {
"0.0": [28, 0, 0],
"0.25": [-7.33, 0, 0],
"0.375": [27.5, 0, 5],
"0.5": {
"pre": [20.17, 0, 0],
"post": [20.17, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [12.596, -0.6637, 1.3486],
"lerp_mode": "catmullrom"
},
"0.75": [28, 0, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.25": [0, 0.17, 0],
"0.375": [0, 0.25, 0],
"0.5": [0, 0, 0],
"0.75": [0, 0, 0]
}
},
"toe_back_right": {
"rotation": {
"0.0": [0, 0, 0],
"0.25": [0, 0, 0],
"0.375": [-20, 0, 0],
"0.5833": {
"pre": [-8.33, 0, 0],
"post": [-8.33, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
},
"toe_inner_right": {
"rotation": {
"0.0": [0, -15, 0],
"0.25": [0, -15, 0],
"0.375": [-55, -10, 7.5],
"0.5": {
"pre": [7.5, -15, 0],
"post": [7.5, -15, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [5, -15, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, -15, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.25": [0, 0, 0],
"0.375": [0, -0.75, 1.35],
"0.5": [0, 0, 0],
"0.75": [0, 0, 0]
}
},
"toe_outer_right": {
"rotation": {
"0.0": [0, 15, 0],
"0.25": [0, 15, 0],
"0.375": [-51.5, 2.5, -10],
"0.5": {
"pre": [5, 15, 0],
"post": [5, 15, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [5, 15, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 15, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.25": [0, 0, 0],
"0.375": [0, -0.75, 1.35],
"0.5": [0, 0, 0],
"0.75": [0, 0, 0]
}
}
}
},
"animation.spearow.air_idle": {
"loop": true,
"animation_length": 4,
"bones": {
"body": {
"position": ["-math.sin(q.anim_time*90*3-45)*0.5", "math.sin(q.anim_time*90*6-45)*1.5", "math.sin(q.anim_time*90*6-45)*1/2"]
},
"torso": {
"rotation": ["-math.sin(q.anim_time*90*6-120)*-4", 0, "math.sin(q.anim_time*90*3-90)*4"]
},
"wing_open_left": {
"rotation": ["-math.sin(q.anim_time*90*6-90)*6", 0, "math.sin(q.anim_time*90*6)*65"],
"position": [0, "math.sin(q.anim_time*90*6)*-1", 0]
},
"wing_open_left2": {
"rotation": [0, 0, "20+math.sin(q.anim_time*90*6-45)*30"]
},
"wing_open_left3": {
"rotation": [0, 0, "0+math.sin(q.anim_time*90*6-75)*30"]
},
"wing_open_right": {
"rotation": ["-math.sin(q.anim_time*90*6-90)*6", 0, "-math.sin(q.anim_time*90*6)*65"],
"position": [0, "math.sin(q.anim_time*90*6)*-1", 0]
},
"wing_open_right2": {
"rotation": [0, 0, "-20-math.sin(q.anim_time*90*6-45)*30"]
},
"wing_open_right3": {
"rotation": [0, 0, "-0-math.sin(q.anim_time*90*6-75)*30"]
},
"tail2": {
"rotation": ["-math.sin(q.anim_time*90*6-30)*5", 0, 0]
},
"tail3": {
"rotation": ["-math.sin(q.anim_time*90*6-90)*5", 0, 0]
},
"neck": {
"rotation": ["5-math.sin(q.anim_time*90*6-140)*-1", 0, "math.sin(q.anim_time*90*3-00)*-1"]
},
"head": {
"rotation": ["-math.sin(q.anim_time*90*6-110)*3", 0, "math.sin(q.anim_time*90*3-120)*-2"]
},
"scruff_left": {
"rotation": [0, "-0-math.sin(q.anim_time*90*6-170)*4", 0]
},
"scruff_right": {
"rotation": [0, "0+math.sin(q.anim_time*90*6-170)*4", 0]
},
"scruff_top_right": {
"rotation": ["-0-math.sin(q.anim_time*90*6-210)*6", 0, 0]
},
"scruff_bottom": {
"rotation": ["-0-math.sin(q.anim_time*90*6-170)*3", 0, 0]
},
"leg_left": {
"rotation": [50, 0, 0]
},
"leg_left2": {
"rotation": [-100, 0, 0]
},
"foot_left": {
"rotation": ["40-math.sin(q.anim_time*90*6-30)*-5", -10, "math.sin(q.anim_time*90*3-150)*6"]
},
"toe_back_left": {
"rotation": [-27.5, 0, 0]
},
"toe_inner_left": {
"rotation": [37.5, 0, 0]
},
"toe_outer_left": {
"rotation": [37.5, 0, 0]
},
"leg_right": {
"rotation": [50, 0, 0]
},
"leg_right2": {
"rotation": [-100, 0, 0]
},
"foot_right": {
"rotation": ["40-math.sin(q.anim_time*90*6-30)*-5", 10, "-math.sin(q.anim_time*90*3-150)*6"]
},
"toe_back_right": {
"rotation": [-27.5, 0, 0]
},
"toe_inner_right": {
"rotation": [37.5, 0, 0]
},
"toe_outer_right": {
"rotation": [37.5, 0, 0]
}
},
"timeline": {
"0.6667": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"1.3333": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"2.0": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"2.6667": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"3.3333": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"4.0": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};"
}
},
"animation.spearow.air_fly": {
"loop": true,
"animation_length": 4,
"bones": {
"body": {
"position": ["-math.sin(q.anim_time*90*3-45)*0.5", "math.sin(q.anim_time*90*6-45)*1.5", "math.sin(q.anim_time*90*6-45)*1/2"]
},
"torso": {
"rotation": ["15-math.sin(q.anim_time*90*6-120)*-1.5", 0, "math.sin(q.anim_time*90*3-90)*4"]
},
"wing_open_left": {
"rotation": ["-math.sin(q.anim_time*90*6-90)*6", 0, "math.sin(q.anim_time*90*6)*65"],
"position": [0, "math.sin(q.anim_time*90*6)*-1", 0]
},
"wing_open_left2": {
"rotation": [0, 0, "20+math.sin(q.anim_time*90*6-45)*30"]
},
"wing_open_left3": {
"rotation": [0, 0, "0+math.sin(q.anim_time*90*6-75)*30"]
},
"wing_open_right": {
"rotation": ["-math.sin(q.anim_time*90*6-90)*6", 0, "-math.sin(q.anim_time*90*6)*65"],
"position": [0, "math.sin(q.anim_time*90*6)*-1", 0]
},
"wing_open_right2": {
"rotation": [0, 0, "-20-math.sin(q.anim_time*90*6-45)*30"]
},
"wing_open_right3": {
"rotation": [0, 0, "-0-math.sin(q.anim_time*90*6-75)*30"]
},
"tail": {
"rotation": [-10, 0, 0]
},
"tail2": {
"rotation": ["-math.sin(q.anim_time*90*6-30)*5", 0, 0]
},
"tail3": {
"rotation": ["-math.sin(q.anim_time*90*6-90)*5", 0, 0]
},
"neck": {
"rotation": ["5-math.sin(q.anim_time*90*6-140)*-1", 0, "math.sin(q.anim_time*90*3-00)*-1"]
},
"head_ai": {
"rotation": [5, 0, 0]
},
"head": {
"rotation": ["-7.5-math.sin(q.anim_time*90*6-110)*3", 0, "math.sin(q.anim_time*90*3-120)*-2"]
},
"scruff_left": {
"rotation": [0, "-0-math.sin(q.anim_time*90*6-170)*4", 0]
},
"scruff_right": {
"rotation": [0, "0+math.sin(q.anim_time*90*6-170)*4", 0]
},
"scruff_top_right": {
"rotation": ["-0-math.sin(q.anim_time*90*6-210)*6", 0, 0]
},
"scruff_bottom": {
"rotation": ["-0-math.sin(q.anim_time*90*6-170)*3", 0, 0]
},
"leg_left": {
"rotation": [50, 0, 0]
},
"leg_left2": {
"rotation": [-100, 0, 0]
},
"foot_left": {
"rotation": ["40-math.sin(q.anim_time*90*6-30)*-5", -10, "math.sin(q.anim_time*90*3-150)*6"]
},
"toe_back_left": {
"rotation": [-27.5, 0, 0]
},
"toe_inner_left": {
"rotation": [37.5, 0, 0]
},
"toe_outer_left": {
"rotation": [37.5, 0, 0]
},
"leg_right": {
"rotation": [50, 0, 0]
},
"leg_right2": {
"rotation": [-100, 0, 0]
},
"foot_right": {
"rotation": ["40-math.sin(q.anim_time*90*6-30)*-5", 10, "-math.sin(q.anim_time*90*3-150)*6"]
},
"toe_back_right": {
"rotation": [-27.5, 0, 0]
},
"toe_inner_right": {
"rotation": [37.5, 0, 0]
},
"toe_outer_right": {
"rotation": [37.5, 0, 0]
}
},
"timeline": {
"0.6667": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"1.3333": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"2.0": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"2.6667": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"3.3333": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};",
"4.0": "q.has_entity?{q.sound('animation.plumage.wing_flap.small');};"
}
}
}
}
@@ -3,274 +3,58 @@
"animations": {
"animation.mudkip.ground_idle": {
"loop": true,
"animation_length": 2,
"bones": {
"head": {
"rotation": ["2.5+math.sin(q.anim_time*90*4-90)*1.5", "math.sin(q.anim_time*90*2-60)*1.5", "math.sin(q.anim_time*90*2-60)*1"]
"rotation": [2.5, 0, 0]
},
"fin2": {
"rotation": [2.5, 0, "0+math.sin(q.anim_time*90*2-150)*-3"]
"rotation": [2.5, 0, 0]
},
"cheek_left2": {
"rotation": [0, -7.5, "0+math.sin(q.anim_time*90*4-90)*1.5"]
"rotation": [0, -7.5, 0]
},
"leg_front_left": {
"rotation": ["5+math.sin(q.anim_time*90*4)*2", 5, 0],
"position": [0, "-0.125+math.sin(q.anim_time*90*4)*-0.05", "0+math.sin(q.anim_time*90*4)*-0.07"]
"rotation": [7.5, 5, 0]
},
"leg_front_left2": {
"rotation": ["-5+math.sin(q.anim_time*90*4)*-2", 0, 0]
"rotation": [-7.5, 0, 0]
},
"leg_front_right": {
"rotation": ["5+math.sin(q.anim_time*90*4)*2", -5, 0],
"position": [0, "-0.125+math.sin(q.anim_time*90*4)*-0.05", "0+math.sin(q.anim_time*90*4)*-0.07"]
"rotation": [7.5, -5, 0]
},
"leg_front_right2": {
"rotation": ["-5+math.sin(q.anim_time*90*4)*-2", 0, 0]
"rotation": [-7.5, 0, 0]
},
"leg_back_left": {
"rotation": ["-5+math.sin(q.anim_time*90*4)*-1", -5, 0],
"position": [0, "-0.125+math.sin(q.anim_time*90*4)*-0.025", "0+math.sin(q.anim_time*90*4)*0.035"]
"rotation": [5, -5, 0]
},
"leg_back_left2": {
"rotation": ["5+math.sin(q.anim_time*90*4)*1", 0, 0]
"rotation": [-5, 0, 0]
},
"leg_back_right": {
"rotation": ["-5+math.sin(q.anim_time*90*4)*-1", 5, 0],
"position": [0, "-0.125+math.sin(q.anim_time*90*4)*-0.025", "0+math.sin(q.anim_time*90*4)*0.035"]
"rotation": [5, 5, 0]
},
"leg_back_right2": {
"rotation": ["5+math.sin(q.anim_time*90*4)*1", 0, 0]
"rotation": [-5, 0, 0]
},
"body": {
"position": [0, -0.1, 0]
},
"tail": {
"rotation": ["6+math.sin(q.anim_time*90*4)*1", "0+math.sin(q.anim_time*90*2-90)*-10", 0]
"rotation": [5, 0, 0]
},
"fin": {
"rotation": [2.5, 0, "0+math.sin(q.anim_time*90*2-90)*-4"]
"rotation": [2.5, 0, 0]
},
"cheek_right2": {
"rotation": [0, 7.5, "0+math.sin(q.anim_time*90*4-90)*-1.5"]
},
"torso": {
"rotation": ["0+math.sin(q.anim_time*90*4)*0.75", "0+math.sin(q.anim_time*90*2-30)*0.5", 0],
"position": [0, "0+math.sin(q.anim_time*90*4+30)*-0.05", 0]
},
"tail2": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-150)*-12.5", 0]
}
}
},
"animation.mudkip.battle_idle": {
"loop": true,
"animation_length": 2,
"bones": {
"head": {
"rotation": ["-7.5+math.sin(q.anim_time*90*4-90)*3", "math.sin(q.anim_time*90*2-60)*1", "math.sin(q.anim_time*90*2-60)*1"]
},
"fin2": {
"rotation": [2.5, 0, "0+math.sin(q.anim_time*90*2-120)*-3"]
},
"cheek_left2": {
"rotation": [0, -7.5, "-5+math.sin(q.anim_time*90*4-90)*1.5"]
},
"leg_front_left": {
"rotation": ["4.305+math.sin(q.anim_time*90*4)*2", 5.60922, -7.50745],
"position": [0, "-0.275+math.sin(q.anim_time*90*4)*-0.05", "0.3+math.sin(q.anim_time*90*4)*-0.07"]
},
"leg_front_left2": {
"rotation": ["-4.9575+math.sin(q.anim_time*90*4)*-2", 0.65182, 7.47178]
},
"leg_front_right": {
"rotation": ["4.305+math.sin(q.anim_time*90*4)*2", -5.60922, 7.50745],
"position": [0, "-0.275+math.sin(q.anim_time*90*4)*-0.05", "0.3+math.sin(q.anim_time*90*4)*-0.07"]
},
"leg_front_right2": {
"rotation": ["-4.9575+math.sin(q.anim_time*90*4)*-2", -0.65182, -7.47178]
},
"leg_back_left": {
"rotation": ["-5+math.sin(q.anim_time*90*4)*-1", -5, 0],
"position": [0, "-0.125+math.sin(q.anim_time*90*4)*-0.025", "0+math.sin(q.anim_time*90*4)*0.035"]
},
"leg_back_left2": {
"rotation": ["5+math.sin(q.anim_time*90*4)*1", 0, 0]
},
"leg_back_right": {
"rotation": ["-5+math.sin(q.anim_time*90*4)*-1", 5, 0],
"position": [0, "-0.125+math.sin(q.anim_time*90*4)*-0.025", "0+math.sin(q.anim_time*90*4)*0.035"]
},
"leg_back_right2": {
"rotation": ["5+math.sin(q.anim_time*90*4)*1", 0, 0]
},
"body": {
"position": [0, -0.1, 0]
},
"tail": {
"rotation": ["6+math.sin(q.anim_time*90*4)*1", "0+math.sin(q.anim_time*90*2-90)*-17.5", 0]
},
"fin": {
"rotation": [2.5, 0, "0+math.sin(q.anim_time*90*2-90)*-4"]
},
"cheek_right2": {
"rotation": [0, 7.5, "5+math.sin(q.anim_time*90*4-90)*-1.5"]
},
"torso": {
"rotation": ["10+math.sin(q.anim_time*90*4)*2.5", "math.sin(q.anim_time*90*2-30)*0.5", 0],
"position": [0, "0+math.sin(q.anim_time*90*4+30)*-0.07", 0]
},
"tail2": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-90)*-7.5", 0]
},
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
"rotation": [0, -7.5, 0]
}
}
},
"animation.mudkip.cry": {
"animation_length": 1.75,
"bones": {
"torso": {
"rotation": {
"0.0": [0, 0, 0],
"0.2917": [5, 0, 0],
"0.5": [0, 0, 0],
"1.0": [-2.5, 0, 0],
"1.5": [0, 0, 0]
}
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0833": {
"post": [-17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.2917": {
"post": [-3, 0, 0],
"lerp_mode": "catmullrom"
},
"1.625": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"jaw": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [35, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [15, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0": {
"post": [60, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0833": {
"post": [60, 0, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"fin": {
"rotation": {
"0.0": [0, 0, 0],
"0.25": [6, 0, 0],
"1.0": [-5, 0, 0],
"1.5": [0, 0, 0]
}
},
"cheek_left2": {
"rotation": {
"0.375": {
"pre": [0, 0, 0],
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [0, 0, -12.5],
"lerp_mode": "catmullrom"
},
"0.8333": {
"post": [0, 0, -12.5],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"cheek_right2": {
"rotation": {
"0.375": {
"pre": [0, 0, 0],
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [0, 0, 12.5],
"lerp_mode": "catmullrom"
},
"0.8333": {
"post": [0, 0, 12.5],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"tail": {
"rotation": {
"0.0": [0, 0, 0],
"0.625": [0, "0+math.sin(q.anim_time*90*12-90)*-25", 0],
"1.625": [0, 0, 0]
}
}
},
"animation_length": 1.2,
"sound_effects": {
"0.5417": {
"0.04": {
"effect": "pokemon.mudkip.cry"
}
}
@@ -423,14 +207,6 @@
"position": [-0.1, 0, -0.1]
}
}
},
"animation.mudkip.WALKSPEED_TEST": {
"loop": true,
"bones": {
"body": {
"position": [0, 0, "q.anim_time*90*-0.07"]
}
}
}
}
}
@@ -3,173 +3,83 @@
"animations": {
"animation.marshtomp.ground_idle": {
"loop": true,
"animation_length": 4,
"bones": {
"torso": {
"rotation": ["0+math.sin(q.anim_time*90*4)*-1", "math.sin(q.anim_time*90*2)*2", "math.sin(q.anim_time*90*2)*-1"],
"position": [0, "math.sin(q.anim_time*90*4-30)*-0.05", 0]
"rotation": [0, 0, 0]
},
"chest": {
"rotation": ["0+math.sin(q.anim_time*90*4-30)*-1", "math.sin(q.anim_time*90*2-30)*1", "math.sin(q.anim_time*90*2-30)*-0.5"]
},
"neck": {
"rotation": ["0+math.sin(q.anim_time*90*4-30)*2.5", 0, 0]
"rotation": [-2.5, 0, 0]
},
"head": {
"rotation": ["5+math.sin(q.anim_time*90*4-30)*-3", "math.sin(q.anim_time*90*2-30)*1", "math.sin(q.anim_time*90*2-30)*-1.5"]
},
"head_fin": {
"rotation": ["0+math.sin(q.anim_time*90*4-30)*-1.5", 0, 0]
"rotation": [5, 0, 0]
},
"arm_left": {
"rotation": [7.5, 0, "37.5+math.sin(q.anim_time*90*2)*-5"]
"rotation": [7.5, 0, 27.5]
},
"arm_left2": {
"rotation": [0, "15+math.sin(q.anim_time*90*2-30)*5", "2.5+math.sin(q.anim_time*90*2-60)*-5"]
"rotation": [0, 15, 2.5]
},
"hand_left": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-120)*3", "10+math.sin(q.anim_time*90*2-150)*-2.5"]
"rotation": [0, 0, 5]
},
"finger_front_left": {
"rotation": [0, 0, "10+math.sin(q.anim_time*90*2-60)*-5"]
"rotation": [0, 2.5, 15]
},
"finger_middle_left": {
"rotation": [0, 0, "10+math.sin(q.anim_time*90*2-120)*-5"]
"rotation": [0, 0, 10]
},
"finger_back_left": {
"rotation": [0, 0, "10+math.sin(q.anim_time*90*2-180)*-5"]
"rotation": [0, -5, 20]
},
"arm_right": {
"rotation": [7.5, 0, "-37.5+math.sin(q.anim_time*90*2)*-5"]
"rotation": [7.5, 0, -27.5]
},
"arm_right2": {
"rotation": [0, "-15+math.sin(q.anim_time*90*2-30)*5", "-2.5+math.sin(q.anim_time*90*2-60)*-5"]
"rotation": [0, -15, -2.5]
},
"hand_right": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-120)*3", "-10+math.sin(q.anim_time*90*2-150)*-2.5"]
"rotation": [0, 0, -5]
},
"finger_front_right": {
"rotation": [0, 0, "-10+math.sin(q.anim_time*90*2-60)*-5"]
"rotation": [0, -2.5, -15]
},
"finger_middle_right": {
"rotation": [0, 0, "-10+math.sin(q.anim_time*90*2-120)*-5"]
"rotation": [0, 0, -10]
},
"finger_back_right": {
"rotation": [0, 0, "-10+math.sin(q.anim_time*90*2-180)*-5"]
"rotation": [0, 5, -20]
},
"tail_fin_left": {
"rotation": [-5, "45+math.sin(q.anim_time*90*2)*-12", 0]
"rotation": [-5, 45, 0]
},
"tail_fin_right": {
"rotation": [-5, "-45+math.sin(q.anim_time*90*2)*12", 0]
"rotation": [-5, -45, 0]
},
"leg_left": {
"rotation": ["-2.5+math.sin(q.anim_time*90*2)*2.5", 0, 0],
"position": [0, "-0.05+math.sin(q.anim_time*90*2)*0.1", "0+math.sin(q.anim_time*90*2)*-0.1"]
},
"leg_left2": {
"rotation": ["2.5+math.sin(q.anim_time*90*2)*-2.5", 0, 0]
},
"leg_right": {
"rotation": ["-2.5+math.sin(q.anim_time*90*2)*-2.5", 0, 0],
"position": [0, "-0.05+math.sin(q.anim_time*90*2)*-0.1", "0+math.sin(q.anim_time*90*2)*0.1"]
},
"leg_right2": {
"rotation": ["2.5+math.sin(q.anim_time*90*2)*2.5", 0, 0]
}
}
},
"animation.marshtomp.battle_idle": {
"loop": true,
"animation_length": 4,
"bones": {
"torso": {
"rotation": ["0+math.sin(q.anim_time*90*4)*-2", "math.sin(q.anim_time*90*2)*4", "math.sin(q.anim_time*90*2)*-2"],
"position": [0, "math.sin(q.anim_time*90*4)*0.05", 0]
},
"chest": {
"rotation": ["-2.5+math.sin(q.anim_time*90*4-30)*-1", "math.sin(q.anim_time*90*2-30)*4", "math.sin(q.anim_time*90*2-30)*-2.5"]
},
"head": {
"rotation": ["5+math.sin(q.anim_time*90*4-30)*-3", "math.sin(q.anim_time*90*2-30)*-6", "math.sin(q.anim_time*90*2-30)*5"]
},
"arm_left": {
"rotation": [7.5, 0, "27.5+math.sin(q.anim_time*90*2)*-7.5"]
},
"arm_left2": {
"rotation": [0, "15+math.sin(q.anim_time*90*2-30)*5", "2.5+math.sin(q.anim_time*90*2-30)*-5"]
},
"hand_left": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-90)*5", "5+math.sin(q.anim_time*90*2-90)*-7.5"]
},
"finger_front_left": {
"rotation": [0, 2.5, "15+math.sin(q.anim_time*90*2-120)*-10"]
},
"finger_middle_left": {
"rotation": [0, 0, "10+math.sin(q.anim_time*90*2-150)*-10"]
},
"finger_back_left": {
"rotation": [0, -5, "20+math.sin(q.anim_time*90*2-180)*-10"]
},
"arm_right": {
"rotation": [7.5, 0, "-27.5+math.sin(q.anim_time*90*2)*-7.5"]
},
"arm_right2": {
"rotation": [0, "-15+math.sin(q.anim_time*90*2-30)*5", "-2.5+math.sin(q.anim_time*90*2-30)*-5"]
},
"hand_right": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-90)*5", "-5+math.sin(q.anim_time*90*2-90)*-7.5"]
},
"finger_front_right": {
"rotation": [0, -2.5, "-15+math.sin(q.anim_time*90*2-120)*-10"]
},
"finger_middle_right": {
"rotation": [0, 0, "-10+math.sin(q.anim_time*90*2-150)*-10"]
},
"finger_back_right": {
"rotation": [0, 5, "-20+math.sin(q.anim_time*90*2-180)*-10"]
},
"tail_fin_left": {
"rotation": [-5, "45+math.sin(q.anim_time*90*2)*-12", 0]
},
"tail_fin_right": {
"rotation": [-5, "-45+math.sin(q.anim_time*90*2)*12", 0]
},
"leg_left": {
"rotation": [2.4905, "0.2178+math.sin(q.anim_time*90*2)*1.5", -2.49527]
"rotation": [2.5, 0, -2.5]
},
"leg_left2": {
"rotation": [5, 0, 0]
},
"foot_left": {
"rotation": [-7.47178, "0.6518+math.sin(q.anim_time*90*2)*-1.5", 2.45744]
"rotation": [-7.5, 0, 2.5]
},
"leg_right": {
"rotation": [2.4905, "-0.2178+math.sin(q.anim_time*90*2)*1.5", 2.49527]
"rotation": [2.5, 0, 2.5]
},
"leg_right2": {
"rotation": [5, 0, 0]
},
"foot_right": {
"rotation": [-7.47178, "-0.6518+math.sin(q.anim_time*90*2)*-1.5", -2.45744]
},
"body": {
"position": [0, -0.15, 0]
},
"neck": {
"rotation": ["0+math.sin(q.anim_time*90*4-30)*2.5", 0, 0]
},
"head_fin": {
"rotation": ["0+math.sin(q.anim_time*90*4-30)*-1.5", 0, 0]
},
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
},
"jaw": {
"rotation": ["5+math.sin(q.anim_time*90*4-30)*-5", 0, 0]
"rotation": [-7.5, 0, -2.5]
}
}
},
"animation.marshtomp.cry": {
"animation_length": 1.2,
"sound_effects": {
"0.04": {
"effect": "pokemon.marshtomp.cry"
}
}
},
@@ -252,108 +162,6 @@
"position": [0, 0, -0.1]
}
}
},
"animation.marshtomp.cry": {
"animation_length": 2,
"bones": {
"chest": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.125": {
"post": [5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0833": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.125": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [-12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.8333": {
"post": [-12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [-12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4583": {
"post": [-1.53, 0, 0],
"lerp_mode": "catmullrom"
},
"1.7083": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"jaw": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5": {
"post": [27.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0833": {
"post": [40, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
}
},
"sound_effects": {
"0.4167": {
"effect": "pokemon.marshtomp.cry"
}
}
}
}
}
@@ -3,33 +3,30 @@
"animations": {
"animation.swampert.ground_idle": {
"loop": true,
"animation_length": 4,
"bones": {
"body": {
"position": [0, 1.75, 0]
},
"chest2": {
"rotation": ["-12.5+math.sin(q.anim_time*90*2-60)*0.75", 0, 0]
"rotation": [-12.5, 0, 0]
},
"neck": {
"rotation": ["-5+math.sin(q.anim_time*90*2-90)*1", "0+math.sin(q.anim_time*90*1-90)*-1", 0]
"rotation": [-5, 0, 0]
},
"leg_left": {
"rotation": ["8.7765+math.sin(q.anim_time*90*2)*-1.5", -12.0131, -53.28718],
"position": [0, "0+math.sin(q.anim_time*90*2)*-0.1", "0+math.sin(q.anim_time*90*2)*0.15"]
"rotation": [8.77647, -12.0131, -53.28718]
},
"leg_left2": {
"rotation": [4.5416, -0.2127, 45.09046]
"rotation": [4.54163, -0.2127, 45.09046]
},
"leg_left3": {
"rotation": [9.83802, -2.51058, 9.95791]
},
"foot_left": {
"rotation": [-27.58324, "-3.5552+math.sin(q.anim_time*90*2)*-1.5", 20.16242]
"rotation": [-27.58324, -3.55523, 20.16242]
},
"leg_right": {
"rotation": ["8.7765+math.sin(q.anim_time*90*2)*-1.5", 12.0131, 53.2872],
"position": [0, "0+math.sin(q.anim_time*90*2)*-0.1", "0+math.sin(q.anim_time*90*2)*0.15"]
"rotation": [8.77647, 12.0131, 53.2872]
},
"leg_right2": {
"rotation": [4.54163, 0.2127, -45.0905]
@@ -38,155 +35,16 @@
"rotation": [9.83802, 2.5106, -9.9579]
},
"foot_right": {
"rotation": [-27.58324, "3.5552+math.sin(q.anim_time*90*2)*1.5", -20.1624]
"rotation": [-27.58324, 3.5552, -20.1624]
},
"arm_left2": {
"rotation": [-4.36302, -31.26463, "17.6253+math.sin(q.anim_time*90*2-90)*2"]
"rotation": [-4.36302, -31.26463, 17.62528]
},
"arm_left3": {
"rotation": [1.80384, 2.38704, "35.4291+math.sin(q.anim_time*90*2-120)*2.5"]
"rotation": [1.80384, 2.38704, 35.42915]
},
"arm_left": {
"rotation": [-13.31914, "-14.6364+math.sin(q.anim_time*90*2-60)*2", 12.92638]
},
"finger_front_left": {
"rotation": [0, "-37.5+math.sin(q.anim_time*90*2-120)*-2.5", 20]
},
"finger_middle_left": {
"rotation": [0, "-32.5+math.sin(q.anim_time*90*2-120)*-2.5", 0]
},
"finger_back_left": {
"rotation": [0, "-30+math.sin(q.anim_time*90*2-120)*-2.5", -27.5]
},
"fingers_left": {
"rotation": [0, 37.5, 0]
},
"arm_right": {
"rotation": [-13.31914, "14.6364+math.sin(q.anim_time*90*2-60)*-2", -12.9264]
},
"arm_right2": {
"rotation": [-4.33052, "31.2647+math.sin(q.anim_time*90*2-90)*2", -17.60892]
},
"arm_right3": {
"rotation": [1.80384, -2.387, "-35.4292+math.sin(q.anim_time*90*2-120)*-2.5"]
},
"fingers_right": {
"rotation": [0, -37.5, 0]
},
"finger_front_right": {
"rotation": [0, "37.5+math.sin(q.anim_time*90*2-120)*2.5", -20]
},
"finger_middle_right": {
"rotation": [0, "32.5+math.sin(q.anim_time*90*2-120)*2.5", 0]
},
"finger_back_right": {
"rotation": [0, "30+math.sin(q.anim_time*90*2-120)*2.5", 27.5]
},
"torso": {
"rotation": ["-5+math.sin(q.anim_time*90*2)*0.5", 0, 0],
"position": [0, "0+math.sin(q.anim_time*90*2+30)*-0.4", 0]
},
"chest": {
"rotation": ["-7.5+math.sin(q.anim_time*90*2-30)*1.5", 0, 0]
},
"hand_left": {
"rotation": [0, "-17.5+math.sin(q.anim_time*90*2-90)*-5", 0]
},
"finger_front_left2": {
"rotation": [0, "-12.5+math.sin(q.anim_time*90*2-150)*-5", 0]
},
"finger_middle_left2": {
"rotation": [0, "-10+math.sin(q.anim_time*90*2-150)*-5", 0]
},
"finger_back_left2": {
"rotation": [0, "-15+math.sin(q.anim_time*90*2-150)*-5", 0]
},
"hand_right": {
"rotation": [0, "17.5+math.sin(q.anim_time*90*2-90)*5", 0]
},
"finger_front_right2": {
"rotation": [0, "12.5+math.sin(q.anim_time*90*2-150)*5", 0]
},
"finger_middle_right2": {
"rotation": [0, "10+math.sin(q.anim_time*90*2-150)*5", 0]
},
"finger_back_right2": {
"rotation": [0, "15+math.sin(q.anim_time*90*2-150)*5", 0]
},
"check_left_spike_front": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*3", 0]
},
"check_left_spike_back": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*3", 0]
},
"check_right_spike_front": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*-3", 0]
},
"check_right_spike_back": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*-3", 0]
},
"eyebrow_left": {
"rotation": [0, "-2.5+math.sin(q.anim_time*90*2-60)*-2.5", 0]
},
"eyebrow_right": {
"rotation": [0, "2.5-math.sin(q.anim_time*90*2-60)*-2.5", 0]
},
"tail": {
"rotation": ["0+math.sin(q.anim_time*90*2-30)*-2.5", 0, 0]
},
"head": {
"rotation": ["12.5+math.sin(q.anim_time*90*2-90)*-2.5", "-0+math.sin(q.anim_time*90*1-90)*-0.5", 0]
}
}
},
"animation.swampert.battle_idle": {
"loop": true,
"animation_length": 4,
"bones": {
"body": {
"position": [0, 1.75, 0]
},
"chest2": {
"rotation": ["-12.5+math.sin(q.anim_time*90*2-60)*0.75", 0, 0]
},
"neck": {
"rotation": ["-5+math.sin(q.anim_time*90*2-90)*1", "0+math.sin(q.anim_time*90*1-90)*-1", 0]
},
"leg_left": {
"rotation": ["8.7765+math.sin(q.anim_time*90*2)*-1.5", -12.0131, -53.28718],
"position": [0, "0+math.sin(q.anim_time*90*2)*-0.1", "0+math.sin(q.anim_time*90*2)*0.15"]
},
"leg_left2": {
"rotation": [4.5416, -0.2127, 45.09046]
},
"leg_left3": {
"rotation": [9.83802, -2.51058, 9.95791]
},
"foot_left": {
"rotation": [-27.58324, "-3.5552+math.sin(q.anim_time*90*2)*-1.5", 20.16242]
},
"leg_right": {
"rotation": ["8.7765+math.sin(q.anim_time*90*2)*-1.5", 12.0131, 53.2872],
"position": [0, "0+math.sin(q.anim_time*90*2)*-0.1", "0+math.sin(q.anim_time*90*2)*0.15"]
},
"leg_right2": {
"rotation": [4.54163, 0.2127, -45.0905]
},
"leg_right3": {
"rotation": [9.83802, 2.5106, -9.9579]
},
"foot_right": {
"rotation": [-27.58324, "3.5552+math.sin(q.anim_time*90*2)*1.5", -20.1624]
},
"arm_left2": {
"rotation": [-4.71002, "-12.8789-math.sin(q.anim_time*90*2-90)*2", 28.88472]
},
"arm_left3": {
"rotation": [1.81234, "10.1983-math.sin(q.anim_time*90*2-30)*-5", 25.6704]
},
"arm_left": {
"rotation": [-33.31914, "-14.6364-math.sin(q.anim_time*90*2-60)*-2", 12.9264],
"position": [0, "0-math.sin(q.anim_time*90*2-30)*-0.3", 0]
"rotation": [-13.31914, -14.63639, 12.92638]
},
"finger_front_left": {
"rotation": [0, -37.5, 20]
@@ -201,14 +59,13 @@
"rotation": [0, 37.5, 0]
},
"arm_right": {
"rotation": [-33.31914, "14.6364+math.sin(q.anim_time*90*2-60)*-2", -12.9264],
"position": [0, "0-math.sin(q.anim_time*90*2-30)*-0.3", 0]
"rotation": [-13.31914, 14.6364, -12.9264]
},
"arm_right2": {
"rotation": [-4.71002, "12.8789+math.sin(q.anim_time*90*2-90)*2", -28.88472]
"rotation": [-4.36302, 31.2646, -17.6253]
},
"arm_right3": {
"rotation": [1.81234, "-10.1983+math.sin(q.anim_time*90*2-30)*-5", -25.6704]
"rotation": [1.80384, -2.387, -35.4292]
},
"fingers_right": {
"rotation": [0, -37.5, 0]
@@ -223,65 +80,37 @@
"rotation": [0, 30, 27.5]
},
"torso": {
"rotation": ["12.5+math.sin(q.anim_time*90*2)*0.5", 0, 0],
"position": [0, "0+math.sin(q.anim_time*90*2+30)*-0.4", 0]
"rotation": [-2.5, 0, 0]
},
"chest": {
"rotation": ["-0+math.sin(q.anim_time*90*2-30)*1.5", 0, 0]
"rotation": [-7.5, 0, 0]
},
"hand_left": {
"rotation": [0, "-17.5-math.sin(q.anim_time*90*2-60)*-2", 0]
"rotation": [0, -17.5, 0]
},
"finger_front_left2": {
"rotation": [0, "-12.5+math.sin(q.anim_time*90*2-150)*-5", 0]
"rotation": [0, -12.5, 0]
},
"finger_middle_left2": {
"rotation": [0, "-10+math.sin(q.anim_time*90*2-150)*-5", 0]
"rotation": [0, -10, 0]
},
"finger_back_left2": {
"rotation": [0, "-15+math.sin(q.anim_time*90*2-150)*-5", 0]
"rotation": [0, -15, 0]
},
"head_angle": {
"rotation": [12.5, 0, 0]
},
"hand_right": {
"rotation": [0, "17.5+math.sin(q.anim_time*90*2-60)*-2", 0]
"rotation": [0, 17.5, 0]
},
"finger_front_right2": {
"rotation": [0, "12.5+math.sin(q.anim_time*90*2-150)*5", 0]
"rotation": [0, 12.5, 0]
},
"finger_middle_right2": {
"rotation": [0, "10+math.sin(q.anim_time*90*2-150)*5", 0]
"rotation": [0, 10, 0]
},
"finger_back_right2": {
"rotation": [0, "15+math.sin(q.anim_time*90*2-150)*5", 0]
},
"check_left_spike_front": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*3", 0]
},
"check_left_spike_back": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*3", 0]
},
"check_right_spike_front": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*-3", 0]
},
"check_right_spike_back": {
"rotation": [0, "0+math.sin(q.anim_time*90*2-30)*-3", 0]
},
"eyebrow_left": {
"rotation": [0, "-2.5+math.sin(q.anim_time*90*2-60)*-2.5", 0]
},
"eyebrow_right": {
"rotation": [0, "2.5-math.sin(q.anim_time*90*2-60)*-2.5", 0]
},
"tail": {
"rotation": ["0+math.sin(q.anim_time*90*2-30)*-2.5", 0, 0]
},
"head": {
"rotation": ["-5+math.sin(q.anim_time*90*2-90)*-2.5", "math.sin(q.anim_time*90*1-90)*-0.5", 0]
},
"eye_angry_left": {
"position": [0, -0.1, 0]
},
"eye_angry_right": {
"position": [0, -0.1, 0]
"rotation": [0, 15, 0]
}
}
},
@@ -404,6 +233,14 @@
}
}
},
"animation.swampert.cry": {
"animation_length": 1.2,
"sound_effects": {
"0.04": {
"effect": "pokemon.swampert.cry"
}
}
},
"animation.swampert.blink": {
"animation_length": 0.1667,
"bones": {
@@ -485,158 +322,6 @@
"position": [0, -0.1, 0]
}
}
},
"animation.swampert.cry": {
"animation_length": 2.5,
"bones": {
"chest2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2917": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": {
"post": [-6, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0417": {
"post": [-1, 0, 0],
"lerp_mode": "catmullrom"
},
"2.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"neck": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2917": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": {
"post": [-6, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0417": {
"post": [-1, 0, 0],
"lerp_mode": "catmullrom"
},
"2.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [-6, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0": {
"post": [1, 0, 0],
"lerp_mode": "catmullrom"
},
"2.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.25": {
"pre": [0, 0, 0],
"post": [0, -0.1, 0]
},
"0.4167": {
"pre": [0, -0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.25": {
"pre": [0, 0, 0],
"post": [0, -0.1, 0]
},
"0.4167": {
"pre": [0, -0.1, 0],
"post": [0, 0, 0]
}
}
},
"jaw": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.6667": {
"post": [30, 0, 0],
"lerp_mode": "catmullrom"
},
"0.9167": {
"post": [15, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [40, 0, 0],
"lerp_mode": "catmullrom"
},
"1.8333": {
"post": [40, 0, 0],
"lerp_mode": "catmullrom"
},
"2.1667": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
}
},
"sound_effects": {
"0.4167": {
"effect": "pokemon.swampert.cry"
}
}
}
}
}
@@ -1,8 +1,8 @@
{
"portraitScale": 2.1,
"portraitTranslation": [ -0.55, -1.55, 0 ],
"profileScale": 0.72,
"profileTranslation": [ 0, 0.63, 0 ],
"profileScale": 0.80,
"profileTranslation": [ 0, 0.55, 0 ],
"rootBone": "caterpie",
"animations": {
"cry": "q.bedrock_stateful('caterpie', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 2.3,
"portraitTranslation": [-0.53, -1.9, 0],
"profileScale": 0.72,
"profileTranslation": [ 0, 0.63, 0 ],
"profileScale": 0.80,
"profileTranslation": [0, 0.51, 0],
"rootBone": "weedle",
"animations": {
"cry": "q.bedrock_stateful('weedle', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 3.09,
"portraitTranslation": [-0.64, -1.03, 0],
"profileScale": 0.83,
"profileTranslation": [0, 0.53, 0.0],
"profileScale": 0.76,
"profileTranslation": [0, 0.62, 0.0],
"rootBone": "pidgeotto",
"animations": {
"cry": "q.bedrock_stateful('pidgeotto', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 2.2,
"portraitTranslation": [ -0.2, -1.4, 0 ],
"profileScale": 0.85,
"profileTranslation": [ 0.0, 0.45, 0 ],
"profileScale": 1.1,
"profileTranslation": [ 0.0, 0.1, 0 ],
"rootBone": "rattata",
"animations": {
"faint": "q.bedrock_primary('rattata', 'faint')",
@@ -1,8 +1,8 @@
{
"portraitScale": 2.2,
"portraitTranslation": [ -0.2, -1.4, 0 ],
"profileScale": 0.85,
"profileTranslation": [ 0.0, 0.45, 0 ],
"profileScale": 1.1,
"profileTranslation": [ 0.0, 0.1, 0 ],
"rootBone": "rattata",
"animations": {
"faint": "q.bedrock_primary('rattata_alolan', 'faint')",
@@ -4,14 +4,12 @@
"profileScale": 0.93,
"profileTranslation": [0, 0.39, 0],
"rootBone": "spearow",
"animations": {
"cry": "q.bedrock_stateful('spearow', 'cry')"
},
"animations": {"cry": "q.bedrock_stateful('spearow', 'cry')"},
"poses": {
"standing": {
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
"isBattle": false,
"animations": ["q.look('head_ai')", "q.bedrock('spearow', 'ground_idle')"],
"animations": ["q.look('head')", "q.bedrock('spearow', 'ground_idle')"],
"quirks": ["q.bedrock_quirk('spearow', 'blink')"],
"transformedParts": [
{
@@ -35,8 +33,9 @@
"walking": {
"poseTypes": ["WALK", "SWIM"],
"animations": [
"q.look('head_ai')",
"q.bedrock('spearow', 'ground_walk')"
"q.look('head')",
"q.bedrock('spearow', 'ground_idle')",
"q.biped_walk(1, 1, 'leg_left', 'leg_right')"
],
"quirks": ["q.bedrock_quirk('spearow', 'blink')"],
"transformedParts": [
@@ -62,9 +61,10 @@
"poseTypes": ["HOVER"],
"animations": [
"q.pitch_tilt('body')",
"q.sine_wing_flap(0.9, 0.9, 25, 'z', 'wing_open_left', 'wing_open_right')",
"q.look('neck', 1, 1, 70, -10, 20, -20)",
"q.look('head_ai')",
"q.bedrock('spearow', 'air_idle')"
"q.look('head')",
"q.bedrock('spearow', 'ground_idle')"
],
"quirks": ["q.bedrock_quirk('spearow', 'blink')"],
"transformedParts": [
@@ -90,9 +90,10 @@
"poseTypes": ["FLY"],
"animations": [
"q.pitch_tilt('body')",
"q.sine_wing_flap(0.9, 0.9, 25, 'z', 'wing_open_left', 'wing_open_right')",
"q.look('neck', 1, 1, 70, -10, 20, -20)",
"q.look('head_ai')",
"q.bedrock('spearow', 'air_fly')"
"q.look('head')",
"q.bedrock('spearow', 'ground_idle')"
],
"quirks": ["q.bedrock_quirk('spearow', 'blink')"],
"transformedParts": [
@@ -11,7 +11,7 @@
"isBattle": false,
"animations": [
"q.look('neck', 1, 1, 70, -10, 20, -20)",
"q.look('head_ai')",
"q.look('head')",
"q.bedrock('fearow', 'ground_idle')"
],
"transformedParts": [
@@ -37,8 +37,9 @@
"poseTypes": ["WALK", "SWIM"],
"animations": [
"q.look('neck', 1, 1, 70, -10, 20, -20)",
"q.look('head_ai')",
"q.bedrock('fearow', 'ground_walk')"
"q.look('head')",
"q.bedrock('fearow', 'ground_idle')",
"q.biped_walk(1, 1, 'leg_left', 'leg_right')"
],
"transformedParts": [
{
@@ -63,8 +64,9 @@
"poseTypes": ["HOVER"],
"animations": [
"q.pitch_tilt('body')",
"q.sine_wing_flap(0.9, 0.9, 25, 'z', 'wing_open_left', 'wing_open_right')",
"q.look('neck', 1, 1, 70, -10, 20, -20)",
"q.look('head_ai')",
"q.look('head')",
"q.bedrock('fearow', 'air_idle')"
],
"transformedParts": [
@@ -90,9 +92,10 @@
"poseTypes": ["FLY"],
"animations": [
"q.pitch_tilt('body')",
"q.sine_wing_flap(0.9, 0.9, 25, 'z', 'wing_open_left', 'wing_open_right')",
"q.look('neck', 1, 1, 70, -10, 20, -20)",
"q.look('head_ai')",
"q.bedrock('fearow', 'air_fly')"
"q.look('head')",
"q.bedrock('fearow', 'air_idle')"
],
"transformedParts": [
{
@@ -112,11 +115,6 @@
"isVisible": false
}
]
},
"sleep": {
"poseTypes": ["SLEEP"],
"animations": ["q.bedrock('fearow', 'sleep')"],
"namedAnimations": {"cry": "q.bedrock_stateful('dummy', 'cry')"}
}
}
}
@@ -1,8 +1,8 @@
{
"portraitScale": 2.0,
"portraitTranslation": [-0.16, -0.85, 0],
"profileScale": 0.79,
"profileTranslation": [0, 0.54, 0],
"profileScale": 1.03,
"profileTranslation": [0, 0.21, 0],
"rootBone": "nidoranf",
"animations": {
"cry": "q.bedrock_stateful('nidoranf', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 1.97,
"portraitTranslation": [-0.19, -1.08, 0],
"profileScale": 0.79,
"profileTranslation": [0, 0.54, 0],
"profileScale": 1.05,
"profileTranslation": [0, 0.11, 0],
"rootBone": "nidoranm",
"animations": {
"cry": "q.bedrock_stateful('nidoranm', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 2,
"portraitTranslation": [-0.05, -1.27, 0],
"profileScale": 0.75,
"profileTranslation": [0, 0.6, 0],
"profileScale": 0.85,
"profileTranslation": [0, 0.5, 0],
"rootBone": "oddish",
"animations": {
"cry": "q.bedrock_stateful('oddish', 'cry')",
@@ -17,7 +17,9 @@
"poseTypes": ["WALK", "SWIM"],
"animations": [
"q.look('head')",
"q.bedrock('magmar', 'ground_walk')"
"q.biped_walk(0.66, 0.6, 'leg_left', 'leg_right')",
"q.bimanual_swing(0.66, 0.6, 'arm_left', 'arm_right')",
"q.bedrock('magmar', 'ground_idle')"
],
"quirks": ["q.bedrock_quirk('magmar', 'blink')"]
}
@@ -2,8 +2,8 @@
"rootBone": "spinarak",
"portraitScale": 2.8,
"portraitTranslation": [-0.35, -2.65, 0],
"profileScale": 0.76,
"profileTranslation": [0, 0.48, 0],
"profileScale": 1.1,
"profileTranslation": [-0.1, 0, 0],
"animations": {
"cry": "q.bedrock_stateful('spinarak', 'cry')",
"recoil": "q.bedrock_stateful('spinarak', 'recoil')"
@@ -32,8 +32,7 @@
},
"sleep": {
"poseTypes": ["SLEEP"],
"animations": ["q.bedrock('pichu', 'sleep')"],
"namedAnimations": {"cry": "q.bedrock_stateful('dummy', 'cry')"}
"animations": ["q.bedrock('pichu', 'sleep')"]
},
"shoulder_left": {
"poseTypes": ["SHOULDER_LEFT"],
@@ -32,8 +32,7 @@
},
"sleep": {
"poseTypes": ["SLEEP"],
"animations": ["q.bedrock('pichu_cap', 'sleep')"],
"namedAnimations": {"cry": "q.bedrock_stateful('dummy', 'cry')"}
"animations": ["q.bedrock('pichu_cap', 'sleep')"]
},
"shoulder_left": {
"poseTypes": ["SHOULDER_LEFT"],
@@ -32,8 +32,7 @@
},
"sleep": {
"poseTypes": ["SLEEP"],
"animations": ["q.bedrock('pichu_ukulele', 'sleep')"],
"namedAnimations": {"cry": "q.bedrock_stateful('dummy', 'cry')"}
"animations": ["q.bedrock('pichu_ukulele', 'sleep')"]
},
"shoulder_left": {
"poseTypes": ["SHOULDER_LEFT"],
@@ -2,8 +2,8 @@
"rootBone": "murkrow",
"portraitScale": 3,
"portraitTranslation": [-0.35, -1.23, 0],
"profileScale": 0.85,
"profileTranslation": [0, 0.45, 0],
"profileScale": 0.95,
"profileTranslation": [0, 0.35, 0],
"animations": {
"cry": "q.bedrock_stateful('murkrow', 'cry')"
},
@@ -5,41 +5,21 @@
"profileTranslation": [0, 0.6, 0],
"rootBone": "magby",
"animations": {
"faint": "q.bedrock_primary('magby', 'faint', q.curve('one'))",
"recoil": "q.bedrock_stateful('magby', 'recoil')",
"physical": "q.bedrock_primary('magby', 'physical', q.curve('symmetrical_wide'))",
"special": "q.bedrock_primary('magby', 'special', q.curve('symmetrical_wide'))",
"status": "q.bedrock_primary('magby', 'status', q.curve('symmetrical_wide'))",
"cry": "q.bedrock_stateful('magby', 'cry')"
},
"poses": {
"battle-standing": {
"poseTypes": ["STAND"],
"isBattle": true,
"isTouchingWater": false,
"animations": [
"q.look('head')",
"q.bedrock('magby', 'battle_idle')"
],
"quirks": ["q.bedrock_quirk('magby', 'blink')"],
"namedAnimations": {
"cry": "q.bedrock_primary('magby', 'battle_cry', q.curve('symmetrical_wide'))"
}
},
"standing": {
"isBattle": false,
"isTouchingWater": false,
"poseTypes": ["STAND", "FLOAT", "NONE", "PORTRAIT", "PROFILE"],
"animations": ["q.look('head')", "q.bedrock('magby', 'ground_idle')"],
"quirks": ["q.bedrock_quirk('magby', 'blink')",
"q.bedrock_quirk('magby', 'quirk_noot', 30, 60, 1, q.curve('symmetrical_wide'))"
]
"quirks": ["q.bedrock_quirk('magby', 'blink')"]
},
"walking": {
"poseTypes": ["WALK", "SWIM"],
"animations": [
"q.look('head')",
"q.bedrock('magby', 'ground_walk')"
"q.biped_walk(0.66, 0.6, 'leg_left', 'leg_right')",
"q.bimanual_swing(0.66, 0.6, 'arm_left', 'arm_right')",
"q.bedrock('magby', 'ground_idle')"
],
"quirks": ["q.bedrock_quirk('magby', 'blink')"]
}
@@ -8,15 +8,6 @@
"cry": "q.bedrock_stateful('mudkip', 'cry')"
},
"poses": {
"battle-standing": {
"isBattle": true,
"poseTypes": ["STAND"],
"animations": [
"q.look('head')",
"q.bedrock('mdukip', 'battle_idle')"
],
"quirks": ["q.bedrock_quirk('mudkip', 'blink')"]
},
"standing": {
"poseTypes": ["STAND", "FLOAT", "PORTRAIT", "PROFILE", "NONE"],
"animations": ["q.look('head')", "q.bedrock('mudkip', 'ground_idle')"],
@@ -8,15 +8,6 @@
"cry": "q.bedrock_stateful('marshtomp', 'cry')"
},
"poses": {
"battle-standing": {
"isBattle": true,
"poseTypes": ["STAND"],
"animations": [
"q.look('head')",
"q.bedrock('marshtomp', 'battle_idle')"
],
"quirks": ["q.bedrock_quirk('marshtomp', 'blink')"]
},
"standing": {
"poseTypes": ["STAND", "FLOAT", "PORTRAIT", "PROFILE", "NONE"],
"animations": ["q.look('head')", "q.bedrock('marshtomp', 'ground_idle')"],
@@ -8,17 +8,7 @@
"cry": "q.bedrock_stateful('swampert', 'cry')"
},
"poses": {
"battle-standing": {
"isBattle": true,
"poseTypes": ["STAND"],
"animations": [
"q.look('head_ai')",
"q.bedrock('swampert', 'battle_idle')"
],
"quirks": ["q.bedrock_quirk('swampert', 'blink')"]
},
"standing": {
"isBattle": false,
"poseTypes": ["STAND", "FLOAT", "PORTRAIT", "PROFILE", "NONE"],
"animations": [
"q.look('head_ai')",
@@ -1,8 +1,8 @@
{
"portraitScale": 2.11,
"portraitTranslation": [-0.21, -0.6, 0],
"profileScale": 0.65,
"profileTranslation": [0.0, 0.75, 0.0],
"profileScale": 0.8,
"profileTranslation": [0.0, 0.56, 0.0],
"rootBone": "plusle",
"animations": {
"faint": "q.bedrock_primary('plusle', 'faint', q.curve('one'))",
@@ -1,8 +1,8 @@
{
"portraitScale": 2.11,
"portraitTranslation": [-0.21, -0.6, 0],
"profileScale": 0.65,
"profileTranslation": [0.0, 0.75, 0.0],
"profileScale": 0.8,
"profileTranslation": [0.0, 0.56, 0.0],
"rootBone": "minun",
"animations": {
"faint": "q.bedrock_primary('minun', 'faint', q.curve('one'))",
@@ -52,7 +52,7 @@
"q.bedrock_quirk('archeops', 'blink')"
],
"namedAnimations": {
"cry": "q.bedrock_stateful('archeops', 'air_cry')"
"cry": "q.bedrock_primary('archeops', 'air_cry', q.curve('symmetrical_wide'))"
}
},
"jump": {
@@ -127,7 +127,7 @@
"q.bedrock_quirk('archeops', 'blink')"
],
"namedAnimations": {
"cry": "q.bedrock_stateful('archeops', 'air_cry')"
"cry": "q.bedrock_primary('archeops', 'air_cry', q.curve('symmetrical_wide'))"
}
},
"fly": {
@@ -146,7 +146,7 @@
"q.bedrock_quirk('archeops', 'blink')"
],
"namedAnimations": {
"cry": "q.bedrock_stateful('archeops', 'air_cry')"
"cry": "q.bedrock_primary('archeops', 'air_cry', q.curve('symmetrical_wide'))"
}
},
"glide": {
@@ -1,8 +1,8 @@
{
"portraitScale": 1.9,
"portraitTranslation": [ -0.2, 1.4, 0 ],
"profileScale": 0.57,
"profileTranslation": [ 0, 0.88, 0 ],
"portraitTranslation": [ -0.1, 1.4, 0 ],
"profileScale": 0.7,
"profileTranslation": [ 0, 0.7, 0 ],
"rootBone": "frogadier",
"animations": {
"cry": "q.bedrock_stateful('frogadier', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 1.92,
"portraitTranslation": [-0.64,-0.32,0],
"profileScale": 0.57,
"profileTranslation": [-0.05,0.93,0],
"profileScale": 0.5,
"profileTranslation": [-0.05,1,0],
"rootBone": "helioptile",
"animations": {
"cry": "q.bedrock_stateful('helioptile', 'cry')"
@@ -1,8 +1,8 @@
{
"portraitScale": 2.1,
"portraitTranslation": [-0.11, -1.29, 0],
"profileScale": 1.0,
"profileTranslation": [-0.02, 0.22, 0],
"profileScale": 1.39,
"profileTranslation": [-0.02, -0.35, 0],
"rootBone": "rookidee",
"animations": {
"cry": "q.bedrock_stateful('rookidee', 'cry')",
@@ -1,8 +1,8 @@
{
"portraitScale": 2.14,
"portraitTranslation": [ -0.38, -0.64, 0],
"profileScale": 0.54,
"profileTranslation": [ 0, 0.97, 0],
"profileScale": 0.47,
"profileTranslation": [ 0, 1.04, 0],
"rootBone": "morpeko",
"poses": {
"standing": {
@@ -1,8 +1,8 @@
{
"portraitScale": 4.2,
"portraitTranslation": [0.0,-4.7,0],
"profileScale": 1.2,
"profileTranslation": [0.0,-0.09,0],
"profileScale": 1.25,
"profileTranslation": [0.0,-0.15,0],
"rootBone": "nacli",
"animations": {
"cry": "q.bedrock_stateful('nacli', 'cry')"
@@ -1,8 +1,8 @@
{
"portraitScale": 3.46,
"portraitTranslation": [-0.94,-2.28,0],
"profileScale": 0.9,
"profileTranslation": [0,0.3,0],
"portraitScale": 4.0,
"portraitTranslation": [-0.61,-3.0,0],
"profileScale": 1.05,
"profileTranslation": [0.1,0.1,0],
"rootBone": "naclstack",
"animations": {
"cry": "q.bedrock_stateful('naclstack', 'cry')"
@@ -1,8 +1,8 @@
{
"portraitScale": 2,
"portraitTranslation": [0, -1.01, 0.0],
"profileScale": 0.9,
"profileTranslation": [0.0, 0.40, 0.0],
"profileScale": 1,
"profileTranslation": [0.0, 0.25, 0.0],
"rootBone": "tinkatink",
"animations": {
"faint": "q.bedrock_primary('tinkatink', 'faint', q.curve('one'))",
@@ -1,8 +1,8 @@
{
"portraitScale": 1.9,
"portraitTranslation": [0, -0.41, 0.0],
"profileScale": 0.78,
"profileTranslation": [-0.02, 0.58, 0.0],
"profileScale": 0.9,
"profileTranslation": [-0.02, 0.46, 0.0],
"rootBone": "tinkatuff",
"animations": {
"faint": "q.bedrock_primary('tinkatuff', 'faint', q.curve('one'))",
@@ -1,8 +1,8 @@
{
"portraitScale": 1.7,
"portraitTranslation": [0.05, -0.71, 0],
"profileScale": 0.85,
"profileTranslation": [0, 0.4, 0],
"profileScale": 1,
"profileTranslation": [0, 0.1, 0],
"rootBone": "varoom",
"animations": {
"cry": "q.bedrock_stateful('varoom', 'cry')"
@@ -1,8 +1,8 @@
{
"portraitScale": 2,
"portraitTranslation": [-0.45,1.3,0],
"profileScale": 0.55,
"profileTranslation": [0,1.0,0],
"profileScale": 0.7,
"profileTranslation": [0,0.8,0],
"rootBone": "glimmet",
"animations": {
"faint": "q.bedrock_primary('glimmet', 'faint', q.curve('one'))",
@@ -7,15 +7,7 @@
"poser": "cobblemon:vikavolt",
"model": "cobblemon:vikavolt.geo",
"texture": "cobblemon:textures/pokemon/0738_vikavolt/vikavolt.png",
"layers": [
{
"name": "transparency",
"emissive": false,
"texture": "cobblemon:textures/pokemon/0738_vikavolt/vikavolt_transparency.png",
"translucent": true,
"translucent_cull": true
}
]
"layers": []
},
{
"aspects": [
@@ -1,6 +0,0 @@
{
"match": {
"items": "cobblemon:magmarizer"
},
"luminance": 15
}
@@ -2514,6 +2514,8 @@
"cobblemon.config.ui.allow_spectating.tooltip": "Whether to allow battles to be spectated.",
"cobblemon.config.ui.experience_multiplier": "Experience Multiplier",
"cobblemon.config.ui.experience_multiplier.tooltip": "Additional Exp. multiplier for Exp. calculation.",
"cobblemon.config.ui.predation_chance": "Pokémon predation chance",
"cobblemon.config.ui.predation_chance.tooltip": "Chance of Pokémon predating the enemy",
"cobblemon.config.ui.pokemon_per_chunk": "Pokémon per Chunk",
"cobblemon.config.ui.pokemon_per_chunk.tooltip": "The amount of Pokémon allowed within a Chunk when spawning.",
"cobblemon.config.ui.poke_snack_pokemon_per_chunk": "Poké Snack Pokémon per Chunk",
@@ -2964,7 +2966,6 @@
"cobblemon.battle.activate.custapberry": "%1$s can act faster than normal, thanks to its Custap Berry!",
"cobblemon.battle.activate.destinybond": "%1$s took its attacker down with it!",
"cobblemon.battle.activate.disguise": "Its disguise served it as a decoy!",
"cobblemon.battle.activate.eeriespell": "It reduced the PP of %1$s's %3$s by 3!",
"cobblemon.battle.activate.electricterrain": "%1$s surrounds itself with electrified terrain!",
"cobblemon.battle.activate.endure": "%1$s endured the hit!",
"cobblemon.battle.activate.ficklebeam": "%1$s is going all out for this attack!",
@@ -3326,7 +3327,6 @@
"cobblemon.battle.heal.drain": "%1$s had its HP drained!",
"cobblemon.battle.heal.healingwish": "The healing wish came true for %1$s!",
"cobblemon.battle.heal.revivalblessing": "%1$s was revived and is ready to fight again!",
"cobblemon.battle.heal.hospitality": "%2$s drank down all the matcha that %1$s made!",
"cobblemon.battle.heal.aquaring": "A veil of water restored %1$s's HP!",
"cobblemon.battle.heal.ingrain": "%1$s absorbed nutrients with its roots!",
"cobblemon.battle.heal.lunardance": "%1$s became cloaked in mystical moonlight!",
@@ -3650,7 +3650,6 @@
"tag.item.cobblemon.mochis": "Mochis",
"tag.item.cobblemon.poke_food": "Poké Foods",
"tag.item.cobblemon.full_heal_bottles": "Full Heal Bottles",
"tag.item.cobblemon.small_flowers": "Small Flowers",
"tag.item.cobblemon.held.blacklisted_items_to_hold": "Blacklisted Held Items",
"tag.item.cobblemon.held.whitelisted_items_to_hold": "Whitelisted Held Items",
"tag.item.cobblemon.recipe_filters.poke_puff_seasoning": "Poké Puff Seasoning Items",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

@@ -1,48 +0,0 @@
{
"timeline": [
{
"type": "add_holds",
"holds": ["effects"]
},
{
"type": "animation",
"animation": ["throw", "punch", "special"]
},
{
"type": "pause",
"pause": 1.25
},
{
"type": "entity_particles",
"effect": "cobblemon:watershuriken_actoralt",
"locators": ["hand_primary", "special", "target"],
"targetLocators": ["target"]
},
{
"type": "pause",
"pause": 0.5
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == false && q.missed(q.entity.uuid) == false",
"animation": ["recoil"]
},
{
"type": "pause",
"pause": 0.25
},
{
"type": "remove_holds",
"holds": ["effects"]
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == false && q.missed(q.entity.uuid) == false",
"animation": ["recoil"]
},
{
"type": "pause",
"pause": 0.5
}
]
}
@@ -1,147 +0,0 @@
{
"timeline": [
{
"type": "add_holds",
"holds": ["effects"]
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == true && q.hit_count <= 2",
"animation": ["watershuriken_2hit", "special"]
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == true && q.hit_count == 3",
"animation": ["watershuriken_3hit", "special"]
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == true && q.hit_count == 4",
"animation": ["watershuriken_4hit", "special"]
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == true && q.hit_count == 5",
"animation": ["watershuriken_5hit", "special"]
},
{
"type": "pause",
"pause": 0.17
},
{
"type": "entity_particles",
"entityCondition": "q.entity.is_user == true",
"effect": "cobblemon:watershuriken_actorhor",
"locators": ["hand_primary", "target"],
"targetLocators": ["target"]
},
{
"type": "pause",
"pause": 0.14
},
{
"type": "entity_particles",
"entityCondition": "q.entity.is_user == true",
"effect": "cobblemon:watershuriken_actorhor",
"locators": ["hand_secondary", "target"],
"targetLocators": ["target"]
},
{
"type": "pause",
"pause": 0.16
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == false && q.missed(q.entity.uuid) == false && q.hit_count >= 1",
"animation": ["recoil"]
},
{
"type": "pause",
"pause": 0.1
},
{
"type": "pause",
"condition": "q.hit_count >= 2",
"pause": 0.14
},
{
"type": "pause",
"condition": "q.hit_count >= 4",
"pause": 0.05
},
{
"type": "entity_particles",
"entityCondition": "q.entity.is_user == true && q.hit_count >= 3",
"effect": "cobblemon:watershuriken_actor",
"locators": ["hand_primary", "target"],
"targetLocators": ["target"]
},
{
"type": "pause",
"condition": "q.hit_count >= 3",
"pause": 0.25
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == false && q.missed(q.entity.uuid) == false && q.hit_count >= 4",
"animation": ["recoil"]
},
{
"type": "pause",
"condition": "q.hit_count >= 4",
"pause": 0.41
},
{
"type": "pause",
"condition": "q.hit_count == 5",
"pause": 0.03
},
{
"type": "entity_particles",
"entityCondition": "q.entity.is_user == true && q.hit_count >= 4",
"effect": "cobblemon:watershuriken_actorvert",
"locators": ["hand_primary", "target"],
"targetLocators": ["target"]
},
{
"type": "pause",
"condition": "q.hit_count >= 4",
"pause": 0.28
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == false && q.missed(q.entity.uuid) == false && q.hit_count == 5",
"animation": ["recoil"]
},
{
"type": "pause",
"condition": "q.hit_count == 5",
"pause": 0.76
},
{
"type": "entity_particles",
"entityCondition": "q.entity.is_user == true && q.hit_count == 5",
"effect": "cobblemon:watershuriken_actorhor",
"locators": ["hand_primary", "target"],
"targetLocators": ["target"]
},
{
"type": "pause",
"condition": "q.hit_count == 5",
"pause": 0.3
},
{
"type": "remove_holds",
"holds": ["effects"]
},
{
"type": "animation",
"entityCondition": "q.entity.is_user == false && q.missed(q.entity.uuid) == false",
"animation": ["recoil"]
},
{
"type": "pause",
"pause": 0.5
}
]
}
@@ -1,112 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:snowball",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 2
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:sweet_berries",
"functions": [
{
"function": "set_count",
"count": {
"min": 2,
"max": 4
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:never_melt_ice",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:occa_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/abomasnow"
}
@@ -1,85 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:ender_pearl",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 1
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:twisted_spoon",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.025
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:kasib_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.025
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/abra"
}
@@ -1,84 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:razor_claw",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:life_orb",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:roseli_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/absol"
}
@@ -1,32 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:shed_shell",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/accelgor"
}
@@ -1,111 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:iron_nugget",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 3
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:iron_sword",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:dusk_stone",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:ability_shield",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/aegislash"
}
@@ -1,59 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:bone",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 3
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:rocky_helmet",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/aerodactyl"
}
@@ -1,85 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_iron",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 3
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:hard_stone",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:chople_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/aggron"
}
@@ -1,59 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:nanab_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.025
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:tag",
"name": "cobblemon:apricorn_sprouts",
"expand": true,
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.025
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/aipom"
}
@@ -1,85 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:ender_pearl",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 3
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:twisted_spoon",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:kasib_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.1
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/alakazam"
}
@@ -1,59 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:sugar",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 2
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:cake",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/alcremie"
}
@@ -1,121 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:cod",
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
},
{
"conditions": [
{
"condition": "minecraft:any_of",
"terms": [
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"flags": {
"is_on_fire": true
}
}
},
{
"condition": "minecraft:entity_properties",
"entity": "direct_attacker",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantments": "#minecraft:smelts_loot"
}
]
}
}
}
}
}
]
}
],
"function": "minecraft:furnace_smelt"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:bone_meal",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:deep_sea_scale",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/alomomola"
}
@@ -1,122 +0,0 @@
{
"type": "minecraft:generic",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:white_wool",
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 2
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:chicken",
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
},
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
},
{
"conditions": [
{
"condition": "minecraft:any_of",
"terms": [
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"flags": {
"is_on_fire": true
}
}
},
{
"condition": "minecraft:entity_properties",
"entity": "direct_attacker",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantments": "#minecraft:smelts_loot"
}
]
}
}
}
}
}
]
}
],
"function": "minecraft:furnace_smelt"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "cobblemon:yache_berry",
"functions": [
{
"count": {
"type": "minecraft:uniform",
"max": 1,
"min": 0
},
"enchantment": "minecraft:looting",
"function": "minecraft:enchanted_count_increase"
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.05
}
]
}
]
}
],
"random_sequence": "cobblemon:pokemon/altaria"
}

Some files were not shown because too many files have changed in this diff Show More