Compare commits

...
40 Commits
Author SHA1 Message Date
Test c346f84844 speed 2026-02-21 21:17:26 -05:00
Paul d1b8094539 Validate party positions of traded Pokémon upon trading 2026-02-16 11:23:24 +10:00
Paul b8d79af911 Migrate to a more unique tag name for data and config on scriptable entities, closes #1869 2026-02-16 10:57:11 +10:00
Hiroku a7198fd324 Merge branch 'fossil_crash' into 'main'
Adjust fossil creation

Closes #1801

See merge request cable-mc/cobblemon!2150
2026-02-08 01:16:45 +00:00
aeroeng15 bc69ce91f3 Changelog 2026-02-07 16:00:00 -07:00
aeroeng15 1de1d8cdc3 Adjust ordering of party modification 2026-02-07 15:26:36 -07:00
Hiroku 087bf75500 Merge branch 'party-selection-toast' into 'main'
Party Selection Tutorial Toasts

See merge request cable-mc/cobblemon!2148
2026-02-02 05:58:58 +00:00
CeejayandHiroku bac435ba7b Party Selection Tutorial Toasts 2026-02-02 05:58:58 +00:00
Hiroku 74a6106eb6 Merge branch 'snack-stack-fix' into 'main'
Fixes odd stacking behavior with the poke_bait item.

See merge request cable-mc/cobblemon!2143
2026-02-01 03:29:20 +00:00
Neovitalism 5ec993ad3c Update CHANGELOG.md 2026-01-31 21:13:10 -06:00
Paul 73a03d90da Resnapshot 2026-01-31 13:22:11 +10:00
Paul e6fda6137e Teeny tiny changelog [skip-ci] 2026-01-31 10:47:13 +10:00
Paul afae39acc8 Missed a bit of changelog [skip-ci] 2026-01-31 09:21:40 +10:00
Paul 37264aff0f Changelog stuff and no snapshot 2026-01-31 09:17:43 +10:00
Paul 2b60e6de77 Merge remote-tracking branch 'origin/lang-updates' 2026-01-31 09:12:27 +10:00
Hiroku 4f29e7457c Merge branch 'feature/riding-scrape' into 'main'
scrape riding data and fix script

See merge request cable-mc/cobblemon!2141
2026-01-30 09:43:44 +00:00
Polymeta 04a6ab31f4 rescrape data
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2026-01-30 09:26:22 +00:00
Hiroku a2cdc847dd Merge branch 'packet-sync-error-fix' into 'main'
Fixed packet sync issue with pokemon interactions, added "chance" requirement type

Closes #1933 and #1938

See merge request cable-mc/cobblemon!2147
2026-01-30 03:04:14 +00:00
阿鱼andWeblate 0bca678f56 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (9061 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2026-01-30 02:59:44 +00:00
Paul 067c3607aa Tweak /pctake to check the PC's box count and use that for constraints 2026-01-30 12:20:17 +10:00
Hiroku 823c1f6444 Merge branch 'main' into 'main'
Fixes PcTake not respecting defaultBoxCount

See merge request cable-mc/cobblemon!2146
2026-01-30 02:18:38 +00:00
Paul bfc00635cd Fixed packet sync issue with pokemon interactions, added "chance" requirement type 2026-01-30 12:16:01 +10:00
Hiroku b2e5b85ac5 Merge branch 'Custom-Ball-Resources-updated' into 'main'
updated ball texture locations missing from last update

See merge request cable-mc/cobblemon!2145
2026-01-30 00:24:49 +00:00
阿鱼andWeblate 2c27476954 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.7% (9034 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2026-01-29 13:40:10 +00:00
Auristite aab78d84fc Fixes PcTake not respecting defaultBoxCount
Command is also missing lang option for "cobblemon.command.pctake.removed" (Removing Pokémon from self)
2026-01-29 04:46:25 +00:00
Zack the GhastandWeblate cb632c2a65 Translated using Weblate (Portuguese (Portugal))
Currently translated at 67.9% (6154 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2026-01-29 01:28:38 +00:00
Dragonwhisper92 8d219f1338 updated ball texture locations 2026-01-28 23:45:08 +00:00
Zack the GhastandWeblate 1e6a4ed984 Translated using Weblate (Portuguese (Portugal))
Currently translated at 67.7% (6143 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2026-01-28 21:10:25 +00:00
geumuandWeblate 64240c31fc Translated using Weblate (Korean)
Currently translated at 100.0% (9061 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/ko/
2026-01-28 17:35:35 +00:00
Zack the GhastandWeblate d2222c3858 Translated using Weblate (Portuguese (Portugal))
Currently translated at 67.6% (6129 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2026-01-28 14:44:02 +00:00
geumuandWeblate c7f31c3e14 Translated using Weblate (Korean)
Currently translated at 100.0% (9061 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/ko/
2026-01-28 14:44:01 +00:00
Zack the GhastandWeblate 740e846b2d Translated using Weblate (Portuguese (Portugal))
Currently translated at 67.5% (6125 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2026-01-28 08:26:35 +00:00
Neovitalism 246d00aa3f Fixes odd stacking behavior with the poke_bait item. 2026-01-27 21:45:05 -06:00
Zack the GhastandWeblate 06f9d60595 Translated using Weblate (Portuguese (Portugal))
Currently translated at 67.5% (6123 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2026-01-27 04:12:54 +00:00
Zack the GhastandWeblate d54439ce14 Translated using Weblate (Portuguese (Portugal))
Currently translated at 67.3% (6103 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2026-01-26 02:31:37 +00:00
TeggyandWeblate 32ee4bb72a Translated using Weblate (Spanish)
Currently translated at 84.3% (7644 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/es/
2026-01-25 13:02:37 +00:00
Polymeta e7d2a46cc0 Bumping snapshot version 2026-01-25 06:57:31 +00:00
YasitoandWeblate 3ee94ec076 Translated using Weblate (French)
Currently translated at 100.0% (9061 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/fr/
2026-01-25 03:06:53 +00:00
YasitoandWeblate 589293abc4 Translated using Weblate (French (Canada))
Currently translated at 100.0% (9061 of 9061 strings)

Translation: Cobblemon/Mod
Translate-URL: https://lang.cobblemon.com/projects/cobblemon/mod/fr_CA/
2026-01-25 03:06:49 +00:00
Paul 279865cc7c Resnaps your shot 2026-01-25 11:53:29 +10:00
125 changed files with 2494 additions and 1333 deletions
+6 -115
View File
@@ -1,137 +1,28 @@
# Changelog
## [1.7.2 (January 25th, 2026)](#1-7-2)
## [1.7.4 (MONTH Xth, 2026)](#1-7-4)
### Additions
- Added Saccharine wood furniture for Adorn.
- Added the Partner Mark, which party Pokémon have a very small chance to earn as the player walks, provided they have enough friendship.
- Added decorative block models for existing items: Potion, Super Potion, Hyper Potion, Max Potion, Full Restore, Antidote, Awakening, Burn Heal, Ice Heal, Paralyze Heal, Full Heal, Ether, Elixir, Max Ether, Max Elixir, X Accuracy, X Attack, X Defence, X Special Attack, X Special Defence, X Speed, Dire Hit, Guard Spec, Weakness Policy, Blunder Policy, Cleanse Tag, and Spell Tag.
- Added decorative sign blocks called Plaques.
- Added ride style labels to ride stats in Pokédex, as well as ride style icons in the summary GUI.
- Added more seasonings for sinister tea:
- Mental Herb - Mental Restoration I for 10 seconds, which staves off Insomnia.
- White Herb - Removes negative effects.
- Milk, Moomoo Milk - Removes effects.
- Added dispenser support for:
- Applying a Honey Bottle to Saccharine Logs.
- Washing honey off of Saccharine Slathered Logs.
- Applying and removing honey on Saccharine Leaves.
- Added riding statistics: `Distance by Pokémon on Land`, `Distance by Pokémon in Air` and `Distance by Pokémon in Liquid`.
- Added a toast to notify players of how they can scroll through their party. Did you know you can hold R and scroll instead of using arrow keys??!
### New rideable Pokémon
- Honchkrow
- Mantine
### Pokémon Added
#### Gen 5
- Throh
- Sawk
#### Gen 6
- Litleo
- Pyroar
- Spritzee
- Aromatisse
- Swirlix
- Slurpuff
### Model updates for the following Pokémon
- Falinks
- Cottonee
- Whimsicott
- Ferroseed
- Ferrothorn
- Chingling
- Chimecho
### Animation updates for the following Pokémon
- Mantine (ride animations)
- Flygon (ride jump animation)
- Honchkrow (ride animations)
- Croagunk
- Toxicroak
### Changes
- Added a new config option, `Enable In-Flight Dismounting` (default: off), which lets you dismount while riding a Pokémon in the air. This is the textbook definition of caveat emptor.
- Ride sounds have been separated into stereo for passengers and mono for other players. Riding will now sound more spacious.
- Battle AI now uses a smarter threshold for switching, reducing unnecessary switches.
- AI will always use the most damaging move when at low HP and when it is not switching, improving endgame decision-making.
- Items given from interacting with Saccharine Leaves are placed in the active hotbar slot if possible.
- Added `label` as an alternate key to the `tag` property.
### Fixes
- Fixed crashing when viewing another player in spectator mode. Some said this was reason to release this update a month ago. They were probably right.
- Fixed crashing when sending a Pokémon out after editing its form.
- Fixed all Pokémon being saved to chunks and never despawning even when they should be.
- Fixed Poké Snacks crashing if there was no available spawn.
- Fixed Poké Snack / Bait effects so that EV Yield, Type, and Egg Group filters now all apply together when weighting spawns. And you thought you were going crazy.
- Fixed Furfrou not being trimmable on NeoForge specifically.
- Fixed honey from Saccharine Leaves being harvestable at less than the max age.
- Fixed possible error on world generation when Combee are placed in naturally generated bee nests.
- Fixed Galarian Weezing crashing the world if it decides to blink the wrong way. The same could happen to you!
- Fixed Galarian Mr. Mime incorrectly being rideable. Some would argue that regular Mr. Mime shouldn't be rideable, but that would make them wrong.
- Fixed missing apricorn textures for Adorn blocks.
- Fixed Apricorn block model rotation for counters/sinks/cupboards/drawers to match that of most recent version of Adorn.
- Fixed item interaction sometimes not working properly when playing on servers.
- Fixed Mint Leaves not being usable for filling the Resurrection Machine.
- Fixed Super Potion recipes incorrectly using Hondew Berry instead of Aguav Berry. They look similar, to be fair.
- Fixed Wishiwashi not schooling properly.
- Fixed battle item duplication issue. How did it work? Wouldn't you like to know, weather boy.
- Fixed the ordering of Aprijuice's riding stat boosts so they always have the same order.
- Fixed the movesets of certain Pokémon being incorrectly sanitized upon reload, causing some forms to keep losing moves.
- Fixed selected leading Pokémon in battle not being used when levels are set.
- Fixed the bottom half of pasture blocks having an incorrect hit-box when facing north or south.
- Fixed gimmicks not being usable in double and triple battles.
- Fixed gimmick buttons showing when already used in the same turn in double and triple battles.
- Fixed mochi items consuming two items at a time.
- Fixed Fresh Start Mochi's EV reset not syncing health changes properly.
- Fixed Pokémon spawn influences not being specific to regional forms.
- Fixed memory leak from battles not being cleaned up after ending.
- Fixed orientation not getting reset after crashing while flying and getting back on the Pokémon.
- Fixed shiny Pokémon not respecting the `silent` flag on spawn.
- Fixed 'Plain' prefix not being applied to all low-quality Aprijuice.
- Fixed Pokémon interactions not playing sound effects when the volume was not specified.
- Fixed Pokémon interaction cooldowns taking longer than intended when the Pokémon was in the player’s party.
- Fixed Pokémon interactions occasionally crashing the game when spamming an interaction with a 0 cooldown.
- Fixed Pokémon fullness decreasing more than intended when the Pokémon was pastured.
- Fixed Scraggy line, Milcery line, and Morpeko spawning on unnatural blocks.
- Fixed invulnerability-bypassed damage being resisted by invulnerable NPC entities.
- Fixed Fabric network packets not being handled immediately, fixing incompatibilities with Supplementaries, Prometheus, Sleep Tight, and others.
- Fixed killer not being set early enough on a wild Pokémon entity from `WinInstruction`.
- Fixed requirements such as `biomeCondition` crashing the game when used to define Pokémon interactions.
- Fixed an issue that prevented registering custom dispenser behaviours (no longer overrides vanilla behaviour).
- Fixed an issue navigation that prevented Combee from pathing into and out of Saccharine Leaves.
- Added Saccharine Boats and Saccharine Boat with Chests to relevant boat tags.
- Fixed Soothe Bell not being properly tagged as a held item.
- Fixed `/calculateseatpositions` expecting a locator format that even we don't use. It needs an underscore after "seat".
- Fixed the `run_script` Molang function to not fail if the environment's context is null.
- Fixed the Molang functions `date_local_time`, `date_of`, `date_is_after` to use the correct date format.
- Fixes https://gitlab.com/cable-mc/cobblemon/-/issues/1943
- Fix occasional crash on retrieving revived fossils
- Fixed a compatibility issue with World Game Rules which caused some log spam in specific cases.
- Fixed improper validation of Pokémon when performing a trade.
### Developer
- Changed the `owner` parameter in the `OwnerQueryRequirement` interface from `ServerPlayer` to `Player`. This method is now also called on the client to verify whether a Pokémon interaction succeeded, so make sure to update your implementations to handle both server and client contexts.
- Added the `pnx` to the `BattleFaintedEvent` and `FormeChangeEvent`.
- Added register methods for custom instructions to `ShowdownInterpreter`.
- Changed callback operations in `BattlePokemon` to allow multiple callbacks and be mutable.
- Added `display_name`, `description`, and `max_pp` functions to the `MoveTemplate` struct.
- Changed the implementations of `AIBattleActor` to be open classes to allow extension.
- Changed the resource location of Poké Ball icons in the GUI to use the balls namespace instead of Cobblemon's, allowing mods to properly use their own namespace for these textures.
### Molang & Datapacks
- Ride sounds can now be set as exclusive to passengers.
- Ride sounds no longer play when submerged unless specified with a new setting.
- Exception handling has been added to `run_molang`, resolving some crashes caused by malformed MoLang expressions.
- Added the `create_itemstack`, `has_inventory_space`, `set_inventory_slot`, and `give_item` MoLang functions for item and inventory utility.
- Added the `get_move_from_id` MoLang function for general move info queries without requiring a Moveset object to access.
- Added support for optional message variants in battle activate instructions for more context-specific battle text.
- Example: `this.add('-activate', pokemon, 'ability: example', '[msg]message1');` will parse to lang key `cobblemon.battle.activate.example.message1`.
### Localization
- Updated translations for:
- French
- Canadian French
- Simplified Chinese
- Ukrainian
- Brazilian Portuguese
- Spanish
- Korean
- Japanese
+137
View File
@@ -0,0 +1,137 @@
# Changelog
## [1.7.2 (January 25th, 2026)](#1-7-2)
### Additions
- Added Saccharine wood furniture for Adorn.
- Added the Partner Mark, which party Pokémon have a very small chance to earn as the player walks, provided they have enough friendship.
- Added decorative block models for existing items: Potion, Super Potion, Hyper Potion, Max Potion, Full Restore, Antidote, Awakening, Burn Heal, Ice Heal, Paralyze Heal, Full Heal, Ether, Elixir, Max Ether, Max Elixir, X Accuracy, X Attack, X Defence, X Special Attack, X Special Defence, X Speed, Dire Hit, Guard Spec, Weakness Policy, Blunder Policy, Cleanse Tag, and Spell Tag.
- Added decorative sign blocks called Plaques.
- Added ride style labels to ride stats in Pokédex, as well as ride style icons in the summary GUI.
- Added more seasonings for sinister tea:
- Mental Herb - Mental Restoration I for 10 seconds, which staves off Insomnia.
- White Herb - Removes negative effects.
- Milk, Moomoo Milk - Removes effects.
- Added dispenser support for:
- Applying a Honey Bottle to Saccharine Logs.
- Washing honey off of Saccharine Slathered Logs.
- Applying and removing honey on Saccharine Leaves.
- Added riding statistics: `Distance by Pokémon on Land`, `Distance by Pokémon in Air` and `Distance by Pokémon in Liquid`.
### New rideable Pokémon
- Honchkrow
- Mantine
### Pokémon Added
#### Gen 5
- Throh
- Sawk
#### Gen 6
- Litleo
- Pyroar
- Spritzee
- Aromatisse
- Swirlix
- Slurpuff
### Model updates for the following Pokémon
- Falinks
- Cottonee
- Whimsicott
- Ferroseed
- Ferrothorn
- Chingling
- Chimecho
### Animation updates for the following Pokémon
- Mantine (ride animations)
- Flygon (ride jump animation)
- Honchkrow (ride animations)
- Croagunk
- Toxicroak
### Changes
- Added a new config option, `Enable In-Flight Dismounting` (default: off), which lets you dismount while riding a Pokémon in the air. This is the textbook definition of caveat emptor.
- Ride sounds have been separated into stereo for passengers and mono for other players. Riding will now sound more spacious.
- Battle AI now uses a smarter threshold for switching, reducing unnecessary switches.
- AI will always use the most damaging move when at low HP and when it is not switching, improving endgame decision-making.
- Items given from interacting with Saccharine Leaves are placed in the active hotbar slot if possible.
- Added `label` as an alternate key to the `tag` property.
### Fixes
- Fixed crashing when viewing another player in spectator mode. Some said this was reason to release this update a month ago. They were probably right.
- Fixed crashing when sending a Pokémon out after editing its form.
- Fixed all Pokémon being saved to chunks and never despawning even when they should be.
- Fixed Poké Snacks crashing if there was no available spawn.
- Fixed Poké Snack / Bait effects so that EV Yield, Type, and Egg Group filters now all apply together when weighting spawns. And you thought you were going crazy.
- Fixed Furfrou not being trimmable on NeoForge specifically.
- Fixed honey from Saccharine Leaves being harvestable at less than the max age.
- Fixed possible error on world generation when Combee are placed in naturally generated bee nests.
- Fixed Galarian Weezing crashing the world if it decides to blink the wrong way. The same could happen to you!
- Fixed Galarian Mr. Mime incorrectly being rideable. Some would argue that regular Mr. Mime shouldn't be rideable, but that would make them wrong.
- Fixed missing apricorn textures for Adorn blocks.
- Fixed Apricorn block model rotation for counters/sinks/cupboards/drawers to match that of most recent version of Adorn.
- Fixed item interaction sometimes not working properly when playing on servers.
- Fixed Mint Leaves not being usable for filling the Resurrection Machine.
- Fixed Super Potion recipes incorrectly using Hondew Berry instead of Aguav Berry. They look similar, to be fair.
- Fixed Wishiwashi not schooling properly.
- Fixed battle item duplication issue. How did it work? Wouldn't you like to know, weather boy.
- Fixed the ordering of Aprijuice's riding stat boosts so they always have the same order.
- Fixed the movesets of certain Pokémon being incorrectly sanitized upon reload, causing some forms to keep losing moves.
- Fixed selected leading Pokémon in battle not being used when levels are set.
- Fixed the bottom half of pasture blocks having an incorrect hit-box when facing north or south.
- Fixed gimmicks not being usable in double and triple battles.
- Fixed gimmick buttons showing when already used in the same turn in double and triple battles.
- Fixed mochi items consuming two items at a time.
- Fixed Fresh Start Mochi's EV reset not syncing health changes properly.
- Fixed Pokémon spawn influences not being specific to regional forms.
- Fixed memory leak from battles not being cleaned up after ending.
- Fixed orientation not getting reset after crashing while flying and getting back on the Pokémon.
- Fixed shiny Pokémon not respecting the `silent` flag on spawn.
- Fixed 'Plain' prefix not being applied to all low-quality Aprijuice.
- Fixed Pokémon interactions not playing sound effects when the volume was not specified.
- Fixed Pokémon interaction cooldowns taking longer than intended when the Pokémon was in the player’s party.
- Fixed Pokémon interactions occasionally crashing the game when spamming an interaction with a 0 cooldown.
- Fixed Pokémon fullness decreasing more than intended when the Pokémon was pastured.
- Fixed Scraggy line, Milcery line, and Morpeko spawning on unnatural blocks.
- Fixed invulnerability-bypassed damage being resisted by invulnerable NPC entities.
- Fixed Fabric network packets not being handled immediately, fixing incompatibilities with Supplementaries, Prometheus, Sleep Tight, and others.
- Fixed killer not being set early enough on a wild Pokémon entity from `WinInstruction`.
- Fixed requirements such as `biomeCondition` crashing the game when used to define Pokémon interactions.
- Fixed an issue that prevented registering custom dispenser behaviours (no longer overrides vanilla behaviour).
- Fixed an issue navigation that prevented Combee from pathing into and out of Saccharine Leaves.
- Added Saccharine Boats and Saccharine Boat with Chests to relevant boat tags.
- Fixed Soothe Bell not being properly tagged as a held item.
- Fixed `/calculateseatpositions` expecting a locator format that even we don't use. It needs an underscore after "seat".
- Fixed the `run_script` Molang function to not fail if the environment's context is null.
- Fixed the Molang functions `date_local_time`, `date_of`, `date_is_after` to use the correct date format.
### Developer
- Changed the `owner` parameter in the `OwnerQueryRequirement` interface from `ServerPlayer` to `Player`. This method is now also called on the client to verify whether a Pokémon interaction succeeded, so make sure to update your implementations to handle both server and client contexts.
- Added the `pnx` to the `BattleFaintedEvent` and `FormeChangeEvent`.
- Added register methods for custom instructions to `ShowdownInterpreter`.
- Changed callback operations in `BattlePokemon` to allow multiple callbacks and be mutable.
- Added `display_name`, `description`, and `max_pp` functions to the `MoveTemplate` struct.
- Changed the implementations of `AIBattleActor` to be open classes to allow extension.
- Changed the resource location of Poké Ball icons in the GUI to use the balls namespace instead of Cobblemon's, allowing mods to properly use their own namespace for these textures.
### Molang & Datapacks
- Ride sounds can now be set as exclusive to passengers.
- Ride sounds no longer play when submerged unless specified with a new setting.
- Exception handling has been added to `run_molang`, resolving some crashes caused by malformed MoLang expressions.
- Added the `create_itemstack`, `has_inventory_space`, `set_inventory_slot`, and `give_item` MoLang functions for item and inventory utility.
- Added the `get_move_from_id` MoLang function for general move info queries without requiring a Moveset object to access.
- Added support for optional message variants in battle activate instructions for more context-specific battle text.
- Example: `this.add('-activate', pokemon, 'ability: example', '[msg]message1');` will parse to lang key `cobblemon.battle.activate.example.message1`.
### Localization
- Updated translations for:
- French
- Canadian French
- Simplified Chinese
- Ukrainian
- Brazilian Portuguese
- Spanish
- Korean
- Japanese
+23
View File
@@ -0,0 +1,23 @@
# Changelog
## [1.7.3 (January 31st, 2026)](#1-7-3)
### Fixes
- Fixed mounted Pokémon not playing sounds.
- Fixed players failing to join servers randomly.
- Fixed some Pokémon having no stamina for flying.
- Fixed `/pctake` not respecting the actual size of the PC.
### Developer
- Poké Ball GUI textures now respect the ball's namespace, enabling proper texture loading for custom balls from other mods.
### Molang & Datapacks
- Added a `chance` requirement type for Pokémon interactions.
### Localization
- Updated translations for:
- French
- Canadian French
- Korean
- Portuguese
- Simplified Chinese
- Spanish
@@ -35,6 +35,7 @@ import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.cobblemon.mod.common.client.gui.party.PartyTutorialToasts;
import static com.google.common.primitives.Floats.min;
import static net.minecraft.util.Mth.lerp;
@@ -85,11 +86,13 @@ public abstract class MouseHandlerMixin {
CobblemonClient.INSTANCE.getStorage().shiftSelected(false);
ci.cancel();
PartySendBinding.INSTANCE.actioned();
PartyTutorialToasts.INSTANCE.onHoldKeyScrollSwitchedSlot();
} else if (i < 0) {
accumulatedScrollY -= i;
CobblemonClient.INSTANCE.getStorage().shiftSelected(true);
ci.cancel();
PartySendBinding.INSTANCE.actioned();
PartyTutorialToasts.INSTANCE.onHoldKeyScrollSwitchedSlot();
}
}
}
@@ -65,7 +65,11 @@ import com.cobblemon.mod.common.api.storage.player.adapter.PlayerDataMongoBacken
import com.cobblemon.mod.common.api.storage.player.factory.CachedPlayerDataStoreFactory
import com.cobblemon.mod.common.api.tags.CobblemonEntityTypeTags
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
import com.cobblemon.mod.common.battles.*
import com.cobblemon.mod.common.battles.BagItems
import com.cobblemon.mod.common.battles.BattleFormat
import com.cobblemon.mod.common.battles.BattleRegistry
import com.cobblemon.mod.common.battles.BattleSide
import com.cobblemon.mod.common.battles.ShowdownThread
import com.cobblemon.mod.common.battles.actor.PokemonBattleActor
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.block.dispenser.DispenserBehaviorRegistry
@@ -76,7 +80,12 @@ import com.cobblemon.mod.common.config.LastChangedVersion
import com.cobblemon.mod.common.config.constraint.IntConstraint
import com.cobblemon.mod.common.config.starter.StarterConfig
import com.cobblemon.mod.common.data.CobblemonDataProvider
import com.cobblemon.mod.common.events.*
import com.cobblemon.mod.common.events.AdvancementHandler
import com.cobblemon.mod.common.events.CallbackHandler
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.net.messages.client.settings.ServerSettingsPacket
import com.cobblemon.mod.common.permission.LaxPermissionValidator
import com.cobblemon.mod.common.platform.events.PlatformEvents
@@ -90,11 +99,23 @@ import com.cobblemon.mod.common.pokemon.feature.SlowpokeTailRegrowthSpeciesFeatu
import com.cobblemon.mod.common.pokemon.feature.SlowpokeTailRegrowthSpeciesFeatureProvider
import com.cobblemon.mod.common.pokemon.feature.TagSeasonResolver
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
import com.cobblemon.mod.common.pokemon.properties.*
import com.cobblemon.mod.common.pokemon.properties.AspectPropertyType
import com.cobblemon.mod.common.pokemon.properties.BattleCloneProperty
import com.cobblemon.mod.common.pokemon.properties.FreezeFrameProperty
import com.cobblemon.mod.common.pokemon.properties.HiddenAbilityPropertyType
import com.cobblemon.mod.common.pokemon.properties.LabelProperty
import com.cobblemon.mod.common.pokemon.properties.NoAIProperty
import com.cobblemon.mod.common.pokemon.properties.UnaspectPropertyType
import com.cobblemon.mod.common.pokemon.properties.UncatchableProperty
import com.cobblemon.mod.common.pokemon.stat.CobblemonStatProvider
import com.cobblemon.mod.common.starter.CobblemonStarterHandler
import com.cobblemon.mod.common.util.*
import com.cobblemon.mod.common.util.DataKeys
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.ifDedicatedServer
import com.cobblemon.mod.common.util.isLaterVersion
import com.cobblemon.mod.common.util.party
import com.cobblemon.mod.common.util.requestWallpapers
import com.cobblemon.mod.common.util.server
import com.cobblemon.mod.common.world.feature.CobblemonPlacedFeatures
import com.cobblemon.mod.common.world.feature.ore.CobblemonOrePlacedFeatures
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
@@ -102,6 +123,17 @@ import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.client.MongoClient
import com.mongodb.client.MongoClients
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.PrintWriter
import java.util.UUID
import java.util.concurrent.TimeUnit
import kotlin.math.roundToInt
import kotlin.properties.Delegates
import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.isAccessible
import kotlin.reflect.jvm.javaField
import net.minecraft.client.Minecraft
import net.minecraft.commands.synchronization.SingletonArgumentInfo
import net.minecraft.resources.ResourceKey
@@ -114,17 +146,6 @@ import net.minecraft.world.level.Level
import net.minecraft.world.level.storage.LevelResource
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.PrintWriter
import java.util.*
import java.util.concurrent.TimeUnit
import kotlin.math.roundToInt
import kotlin.properties.Delegates
import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.isAccessible
import kotlin.reflect.jvm.javaField
object Cobblemon {
const val MODID = CobblemonBuildDetails.MOD_ID
@@ -165,7 +186,7 @@ object Cobblemon {
val statistics: CobblemonStats = CobblemonStats
@JvmStatic
val builtinPacks = listOf<CobblemonPack>(
val builtinPacks = listOf(
CobblemonPack(id = "adorncompatibility", name = "Adorn Compatibility", packType = PackType.CLIENT_RESOURCES, activationBehaviour = ResourcePackActivationBehaviour.ALWAYS_ENABLED, neededMods = setOf("adorn")),
CobblemonPack(id = "gyaradosjump", name = "Gyarados Jump Patterns", packType = PackType.CLIENT_RESOURCES, activationBehaviour = ResourcePackActivationBehaviour.DEFAULT_ENABLED),
CobblemonPack(id = "regionbiasforms", name = "Region Bias Forms", packType = PackType.CLIENT_RESOURCES, activationBehaviour = ResourcePackActivationBehaviour.DEFAULT_ENABLED),
@@ -451,7 +472,7 @@ object Cobblemon {
server()?.getLevel(dimension)
} else {
val mc = Minecraft.getInstance()
return mc.singleplayerServer?.getLevel(dimension) ?: mc.level
mc.singleplayerServer?.getLevel(dimension) ?: mc.level
}
}
@@ -21,12 +21,15 @@ import com.cobblemon.mod.common.client.net.callback.partymove.OpenPartyMoveCallb
import com.cobblemon.mod.common.client.net.cooking.ToggleCookingPotLidHandler
import com.cobblemon.mod.common.client.net.data.CobblemonMechanicsSyncHandler
import com.cobblemon.mod.common.client.net.data.DataRegistrySyncPacketHandler
import com.cobblemon.mod.common.client.net.data.PokemonInteractionsSyncHandler
import com.cobblemon.mod.common.client.net.data.RideSettingsSyncHandler
import com.cobblemon.mod.common.client.net.debug.OpenRidingStatsDebugGUIHandler
import com.cobblemon.mod.common.client.net.dialogue.DialogueClosedHandler
import com.cobblemon.mod.common.client.net.dialogue.DialogueOpenedHandler
import com.cobblemon.mod.common.client.net.effect.*
import com.cobblemon.mod.common.client.net.effect.PokeSnackBlockParticlesHandler
import com.cobblemon.mod.common.client.net.effect.RunPosableMoLangHandler
import com.cobblemon.mod.common.client.net.effect.SaccharineLogBlockParticlesHandler
import com.cobblemon.mod.common.client.net.effect.SpawnSnowstormEntityParticleHandler
import com.cobblemon.mod.common.client.net.effect.SpawnSnowstormParticleHandler
import com.cobblemon.mod.common.client.net.gui.ExpGainedDataPacketHandler
import com.cobblemon.mod.common.client.net.gui.InteractPokemonUIPacketHandler
import com.cobblemon.mod.common.client.net.gui.PokedexUIPacketHandler
@@ -34,7 +37,11 @@ import com.cobblemon.mod.common.client.net.gui.SummaryUIPacketHandler
import com.cobblemon.mod.common.client.net.npc.CloseNPCEditorHandler
import com.cobblemon.mod.common.client.net.npc.OpenNPCEditorHandler
import com.cobblemon.mod.common.client.net.orientation.ClientboundUpdateOrientationHandler
import com.cobblemon.mod.common.client.net.pasture.*
import com.cobblemon.mod.common.client.net.pasture.ClosePastureHandler
import com.cobblemon.mod.common.client.net.pasture.OpenPastureHandler
import com.cobblemon.mod.common.client.net.pasture.PokemonPasturedHandler
import com.cobblemon.mod.common.client.net.pasture.PokemonUnpasturedHandler
import com.cobblemon.mod.common.client.net.pasture.UpdatePastureConflictFlagHandler
import com.cobblemon.mod.common.client.net.pokedex.ServerConfirmedRegisterHandler
import com.cobblemon.mod.common.client.net.pokemon.update.ClientboundUpdateRidingStateHandler
import com.cobblemon.mod.common.client.net.pokemon.update.PokemonUpdatePacketHandler
@@ -52,7 +59,14 @@ import com.cobblemon.mod.common.client.net.storage.party.SetPartyPokemonHandler
import com.cobblemon.mod.common.client.net.storage.party.SetPartyReferenceHandler
import com.cobblemon.mod.common.client.net.storage.pc.*
import com.cobblemon.mod.common.client.net.toast.ToastPacketHandler
import com.cobblemon.mod.common.client.net.trade.*
import com.cobblemon.mod.common.client.net.trade.TradeAcceptanceChangedHandler
import com.cobblemon.mod.common.client.net.trade.TradeCancelledHandler
import com.cobblemon.mod.common.client.net.trade.TradeCompletedHandler
import com.cobblemon.mod.common.client.net.trade.TradeOfferExpiredHandler
import com.cobblemon.mod.common.client.net.trade.TradeOfferNotificationHandler
import com.cobblemon.mod.common.client.net.trade.TradeProcessStartedHandler
import com.cobblemon.mod.common.client.net.trade.TradeStartedHandler
import com.cobblemon.mod.common.client.net.trade.TradeUpdatedHandler
import com.cobblemon.mod.common.net.PacketRegisterInfo
import com.cobblemon.mod.common.net.messages.client.CalculateSeatPositionsPacket
import com.cobblemon.mod.common.net.messages.client.OpenBehaviourEditorPacket
@@ -69,12 +83,20 @@ import com.cobblemon.mod.common.net.messages.client.data.*
import com.cobblemon.mod.common.net.messages.client.debug.RequestOpenRidingStatsDebugGUIPacket
import com.cobblemon.mod.common.net.messages.client.dialogue.DialogueClosedPacket
import com.cobblemon.mod.common.net.messages.client.dialogue.DialogueOpenedPacket
import com.cobblemon.mod.common.net.messages.client.effect.*
import com.cobblemon.mod.common.net.messages.client.effect.PokeSnackBlockParticlesPacket
import com.cobblemon.mod.common.net.messages.client.effect.RunPosableMoLangPacket
import com.cobblemon.mod.common.net.messages.client.effect.SaccharineLogBlockParticlesPacket
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormEntityParticlePacket
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormParticlePacket
import com.cobblemon.mod.common.net.messages.client.npc.CloseNPCEditorPacket
import com.cobblemon.mod.common.net.messages.client.npc.OpenNPCEditorPacket
import com.cobblemon.mod.common.net.messages.client.orientation.ClientboundUpdateDriverInputPacket
import com.cobblemon.mod.common.net.messages.client.orientation.ClientboundUpdateOrientationPacket
import com.cobblemon.mod.common.net.messages.client.pasture.*
import com.cobblemon.mod.common.net.messages.client.pasture.ClosePasturePacket
import com.cobblemon.mod.common.net.messages.client.pasture.OpenPasturePacket
import com.cobblemon.mod.common.net.messages.client.pasture.PokemonPasturedPacket
import com.cobblemon.mod.common.net.messages.client.pasture.PokemonUnpasturedPacket
import com.cobblemon.mod.common.net.messages.client.pasture.UpdatePastureConflictFlagPacket
import com.cobblemon.mod.common.net.messages.client.pokedex.ServerConfirmedRegisterPacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.*
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.AddEvolutionPacket
@@ -94,19 +116,37 @@ import com.cobblemon.mod.common.net.messages.client.storage.party.InitializePart
import com.cobblemon.mod.common.net.messages.client.storage.party.MoveClientPartyPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.party.SetPartyPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.party.SetPartyReferencePacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.*
import com.cobblemon.mod.common.net.messages.client.storage.pc.ClosePCPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.InitializePCPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.MoveClientPCPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.OpenPCPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.RenamePCBoxPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.SetPCBoxPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.SetPCPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.wallpaper.ChangePCBoxWallpaperPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.wallpaper.RequestPCBoxWallpapersPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.wallpaper.SetPCBoxWallpapersPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.wallpaper.UnlockPCBoxWallpaperPacket
import com.cobblemon.mod.common.net.messages.client.toast.ToastPacket
import com.cobblemon.mod.common.net.messages.client.trade.*
import com.cobblemon.mod.common.net.messages.client.trade.TradeAcceptanceChangedPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeCancelledPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeCompletedPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeOfferExpiredPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeOfferNotificationPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeProcessStartedPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeStartedPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeUpdatedPacket
import com.cobblemon.mod.common.net.messages.client.ui.ExpGainedDataPacket
import com.cobblemon.mod.common.net.messages.client.ui.InteractPokemonUIPacket
import com.cobblemon.mod.common.net.messages.client.ui.PokedexUIPacket
import com.cobblemon.mod.common.net.messages.client.ui.SummaryUIPacket
import com.cobblemon.mod.common.net.messages.server.*
import com.cobblemon.mod.common.net.messages.server.battle.*
import com.cobblemon.mod.common.net.messages.server.battle.BattleSelectActionsPacket
import com.cobblemon.mod.common.net.messages.server.battle.BattleTeamLeavePacket
import com.cobblemon.mod.common.net.messages.server.battle.BattleTeamRequestPacket
import com.cobblemon.mod.common.net.messages.server.battle.BattleTeamResponsePacket
import com.cobblemon.mod.common.net.messages.server.battle.RemoveSpectatorPacket
import com.cobblemon.mod.common.net.messages.server.battle.SpectateBattlePacket
import com.cobblemon.mod.common.net.messages.server.behaviour.DamageOnCollisionPacket
import com.cobblemon.mod.common.net.messages.server.behaviour.SetEntityBehaviourPacket
import com.cobblemon.mod.common.net.messages.server.block.AdjustBlockEntityViewerCountPacket
@@ -131,7 +171,11 @@ import com.cobblemon.mod.common.net.messages.server.pasture.UnpasturePokemonPack
import com.cobblemon.mod.common.net.messages.server.pokedex.scanner.FinishScanningPacket
import com.cobblemon.mod.common.net.messages.server.pokedex.scanner.StartScanningPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.interact.InteractPokemonPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.*
import com.cobblemon.mod.common.net.messages.server.pokemon.update.ServerboundUpdateRidingStatePacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetActiveMarkPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetItemHiddenPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetMarkingsPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetNicknamePacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.evolution.AcceptEvolutionPacket
import com.cobblemon.mod.common.net.messages.server.riding.DismountPokemonPacket
import com.cobblemon.mod.common.net.messages.server.riding.ServerboundUpdateDriverInputPacket
@@ -139,14 +183,25 @@ import com.cobblemon.mod.common.net.messages.server.riding.ServerboundUpdateRide
import com.cobblemon.mod.common.net.messages.server.starter.RequestStarterScreenPacket
import com.cobblemon.mod.common.net.messages.server.storage.SwapPCPartyPokemonPacket
import com.cobblemon.mod.common.net.messages.server.storage.party.MovePartyPokemonPacket
import com.cobblemon.mod.common.net.messages.server.storage.party.PartyTutorialPacket
import com.cobblemon.mod.common.net.messages.server.storage.party.ReleasePartyPokemonPacket
import com.cobblemon.mod.common.net.messages.server.storage.party.SwapPartyPokemonPacket
import com.cobblemon.mod.common.net.messages.server.storage.pc.*
import com.cobblemon.mod.common.net.messages.server.trade.*
import com.cobblemon.mod.common.net.messages.server.trade.AcceptTradeRequestPacket
import com.cobblemon.mod.common.net.messages.server.trade.CancelTradePacket
import com.cobblemon.mod.common.net.messages.server.trade.ChangeTradeAcceptancePacket
import com.cobblemon.mod.common.net.messages.server.trade.OfferTradePacket
import com.cobblemon.mod.common.net.messages.server.trade.PerformTradePacket
import com.cobblemon.mod.common.net.messages.server.trade.UpdateTradeOfferPacket
import com.cobblemon.mod.common.net.serverhandling.ChallengeHandler
import com.cobblemon.mod.common.net.serverhandling.ChallengeResponseHandler
import com.cobblemon.mod.common.net.serverhandling.RequestInteractionsHandler
import com.cobblemon.mod.common.net.serverhandling.battle.*
import com.cobblemon.mod.common.net.serverhandling.battle.BattleSelectActionsHandler
import com.cobblemon.mod.common.net.serverhandling.battle.RemoveSpectatorHandler
import com.cobblemon.mod.common.net.serverhandling.battle.SpectateBattleHandler
import com.cobblemon.mod.common.net.serverhandling.battle.TeamLeaveHandler
import com.cobblemon.mod.common.net.serverhandling.battle.TeamRequestHandler
import com.cobblemon.mod.common.net.serverhandling.battle.TeamRequestResponseHandler
import com.cobblemon.mod.common.net.serverhandling.behaviour.DamageOnCollisionPacketHandler
import com.cobblemon.mod.common.net.serverhandling.behaviour.SetEntityBehaviourHandler
import com.cobblemon.mod.common.net.serverhandling.block.AdjustBlockEntityViewerCountHandler
@@ -165,6 +220,7 @@ import com.cobblemon.mod.common.net.serverhandling.dialogue.InputToDialogueHandl
import com.cobblemon.mod.common.net.serverhandling.evolution.AcceptEvolutionHandler
import com.cobblemon.mod.common.net.serverhandling.npc.SaveNPCHandler
import com.cobblemon.mod.common.net.serverhandling.orientation.ServerboundUpdateOrientationHandler
import com.cobblemon.mod.common.net.serverhandling.storage.party.PartyTutorialPacketHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.PasturePokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.SetPastureConflictHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.UnpastureAllPokemonHandler
@@ -172,7 +228,11 @@ import com.cobblemon.mod.common.net.serverhandling.pasture.UnpasturePokemonHandl
import com.cobblemon.mod.common.net.serverhandling.pokedex.scanner.FinishScanningHandler
import com.cobblemon.mod.common.net.serverhandling.pokedex.scanner.StartScanningHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.interact.InteractPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.*
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.ServerboundUpdateRidingStateHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetActiveMarkHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetItemHiddenHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetMarkingsHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetNicknameHandler
import com.cobblemon.mod.common.net.serverhandling.riding.DismountPokemonPacketHandler
import com.cobblemon.mod.common.net.serverhandling.riding.DriverInputPacketHandler
import com.cobblemon.mod.common.net.serverhandling.riding.ServerboundUpdateRiderRotationHandler
@@ -186,7 +246,12 @@ import com.cobblemon.mod.common.net.serverhandling.storage.party.MovePartyPokemo
import com.cobblemon.mod.common.net.serverhandling.storage.party.ReleasePCPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.party.SwapPartyPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.pc.*
import com.cobblemon.mod.common.net.serverhandling.trade.*
import com.cobblemon.mod.common.net.serverhandling.trade.AcceptTradeRequestHandler
import com.cobblemon.mod.common.net.serverhandling.trade.CancelTradeHandler
import com.cobblemon.mod.common.net.serverhandling.trade.ChangeTradeAcceptanceHandler
import com.cobblemon.mod.common.net.serverhandling.trade.OfferTradeHandler
import com.cobblemon.mod.common.net.serverhandling.trade.PerformTradeHandler
import com.cobblemon.mod.common.net.serverhandling.trade.UpdateTradeOfferHandler
import com.cobblemon.mod.common.util.server
import net.minecraft.server.level.ServerPlayer
@@ -332,7 +397,7 @@ object CobblemonNetwork {
// Data registries
list.add(PacketRegisterInfo(AbilityRegistrySyncPacket.ID, AbilityRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(CobblemonMechanicsSyncPacket.ID, CobblemonMechanicsSyncPacket::decode, CobblemonMechanicsSyncHandler))
list.add(PacketRegisterInfo(PokemonInteractionsSyncPacket.ID, PokemonInteractionsSyncPacket::decode, PokemonInteractionsSyncHandler))
list.add(PacketRegisterInfo(PokemonInteractionsSyncPacket.ID, PokemonInteractionsSyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(MovesRegistrySyncPacket.ID, MovesRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(BerryRegistrySyncPacket.ID, BerryRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(SpeciesRegistrySyncPacket.ID, SpeciesRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
@@ -460,7 +525,7 @@ object CobblemonNetwork {
list.add(PacketRegisterInfo(ReleasePCPokemonPacket.ID, ReleasePCPokemonPacket::decode, ReleasePCPokemonHandler))
list.add(PacketRegisterInfo(UnlinkPlayerFromPCPacket.ID, UnlinkPlayerFromPCPacket::decode, UnlinkPlayerFromPCHandler))
list.add(PacketRegisterInfo(RequestRenamePCBoxPacket.Companion.ID, RequestRenamePCBoxPacket.Companion::decode, RequestRenamePCBoxHandler))
list.add(PacketRegisterInfo(RequestRenamePCBoxPacket.ID, RequestRenamePCBoxPacket::decode, RequestRenamePCBoxHandler))
list.add(PacketRegisterInfo(PCBoxWallpapersPacket.ID, PCBoxWallpapersPacket::decode, PCBoxWallpapersHandler))
list.add(PacketRegisterInfo(RequestChangePCBoxWallpaperPacket.ID, RequestChangePCBoxWallpaperPacket::decode, RequestChangePCBoxWallpaperHandler))
list.add(PacketRegisterInfo(MarkPCBoxWallpapersSeenPacket.ID, MarkPCBoxWallpapersSeenPacket::decode, MarkPCBoxWallpapersSeenHandler))
@@ -518,6 +583,9 @@ object CobblemonNetwork {
list.add(PacketRegisterInfo(PartyPokemonMoveSelectedPacket.ID, PartyPokemonMoveSelectedPacket::decode, PartyPokemonMoveSelectedHandler))
list.add(PacketRegisterInfo(PartyMoveSelectCancelledPacket.ID, PartyMoveSelectCancelledPacket::decode, PartyMoveSelectCancelledHandler))
//Party move tutorial toasts packets
list.add(PacketRegisterInfo(PartyTutorialPacket.ID, PartyTutorialPacket::decode, PartyTutorialPacketHandler))
// Dialogue packets
list.add(PacketRegisterInfo(EscapeDialoguePacket.ID, EscapeDialoguePacket::decode, EscapeDialogueHandler))
list.add(PacketRegisterInfo(InputToDialoguePacket.ID, InputToDialoguePacket::decode, InputToDialogueHandler))
@@ -59,40 +59,32 @@ object PokemonInteractions : JsonDataRegistry<PokemonInteractionSet> {
.setPrettyPrinting()
.create()
val speciesInteractions = mutableListOf<PokemonInteractionSet>()
val generalInteractions = mutableListOf<PokemonInteractionSet>()
val interactions = mutableListOf<PokemonInteractionSet>()
override fun sync(player: ServerPlayer) {
PokemonInteractionsSyncPacket(
speciesInteractions,
generalInteractions,
).sendToPlayer(player)
PokemonInteractionsSyncPacket(interactions).sendToPlayer(player)
}
override fun reload(data: Map<ResourceLocation, PokemonInteractionSet>) {
speciesInteractions.clear()
generalInteractions.clear()
val split = data.entries.partition { it.value.requirements.any { requirement -> requirement is PokemonPropertiesRequirement && requirement.target.species != null } }
speciesInteractions.addAll(split.first.map {it.value})
generalInteractions.addAll(split.second.map {it.value})
Cobblemon.LOGGER.info("Loaded {} Pokémon interaction sets", data.size)
interactions.clear()
val split = data.entries
.partition {
it.value.requirements.any { requirement -> requirement is PokemonPropertiesRequirement && requirement.target.species != null }
}
// Put the species specific interactions first as they take priority
interactions.addAll(split.first.map {it.value})
interactions.addAll(split.second.map {it.value})
Cobblemon.LOGGER.info("Loaded {} Pokémon interaction sets", interactions.size)
}
fun findInteraction(pokemon: PokemonEntity): PokemonInteraction? {
val setCheck: (PokemonInteractionSet) -> Boolean = { it.requirements.all { req -> req.check(pokemon.pokemon) }}
val interactionCheck: (PokemonInteraction) -> Boolean = { it.requirements.all { req -> req.check(pokemon.pokemon) } && !pokemon.pokemon.isOnInteractionCooldown(it.grouping) }
// species-specific interactions take priority
val validInteractions = speciesInteractions
return interactions
.filter(setCheck)
.flatMap { it.interactions }
.filter(interactionCheck)
.toMutableList()
if (validInteractions.isEmpty()) { // if all species-specific interactions are absent/on cooldown, fallback to more generic ones
validInteractions.addAll(generalInteractions.filter(setCheck).flatMap { it.interactions }
.filter(interactionCheck)
)
}
return validInteractions.randomOrNull()
.firstOrNull(interactionCheck)
}
}
@@ -43,17 +43,9 @@ data class PokemonInteractionSet(
companion object {
fun decode(buffer: FriendlyByteBuf): PokemonInteractionSet {
val requirements = buffer.readList { it ->
CobblemonRequirementAdapter.decode(it)
}
val interactions = buffer.readList { it ->
PokemonInteraction.decode(it)
}
return PokemonInteractionSet(
requirements,
interactions,
)
val requirements = buffer.readList(CobblemonRequirementAdapter::decode)
val interactions = buffer.readList(PokemonInteraction::decode)
return PokemonInteractionSet(requirements, interactions)
}
}
}
@@ -2815,8 +2815,8 @@ object MoLangFunctions {
}
variable
}
else -> null
} ?: throw IllegalArgumentException("Invalid NBT element type: ${nbt.type}")
else -> VariableStruct()
}
}
}
@@ -28,6 +28,7 @@ data class GeneralPlayerData(
var starterUUID: UUID?,
var keyItems: MutableSet<ResourceLocation>,
var battleTheme: ResourceLocation?,
var partySelectTutorialDone: Boolean = false,
val extraData: MutableMap<String, PlayerDataExtension>,
) : InstancedPlayerData {
var advancementData: PlayerAdvancementData = PlayerAdvancementData()
@@ -53,7 +54,8 @@ data class GeneralPlayerData(
starterSelected,
starterUUID,
advancementData.totalBattleVictoryCount == 0,
battleTheme
battleTheme,
partySelectTutorialDone
)
}
@@ -36,7 +36,8 @@ class PlayerDataJsonBackend: JsonBackedPlayerDataStoreBackend<GeneralPlayerData>
starterUUID = null,
keyItems = Cobblemon.config.defaultKeyItems,
extraData = mutableMapOf(),
battleTheme = CobblemonSounds.PVP_BATTLE.location
battleTheme = CobblemonSounds.PVP_BATTLE.location,
partySelectTutorialDone = false
)}
override val gson = GsonBuilder()
@@ -37,7 +37,8 @@ class PlayerDataMongoBackend(mongoClient: MongoClient, databaseName: String, col
starterUUID = null,
keyItems = Cobblemon.config.defaultKeyItems,
extraData = mutableMapOf(),
battleTheme = CobblemonSounds.PVP_BATTLE.location
battleTheme = CobblemonSounds.PVP_BATTLE.location,
partySelectTutorialDone = false
)}
override val gson = GsonBuilder()
@@ -34,7 +34,8 @@ data class ClientGeneralPlayerData(
var starterSelected: Boolean = false,
var starterUUID: UUID? = null,
var showChallengeLabel: Boolean = true,
val battleTheme: ResourceLocation? = null
val battleTheme: ResourceLocation? = null,
var partySelectTutorialDone: Boolean = false
) : ClientInstancedPlayerData {
override fun encode(buf: RegistryFriendlyByteBuf) {
@@ -46,6 +47,7 @@ data class ClientGeneralPlayerData(
buf.writeNullable(starterUUID) { pb, value -> pb.writeString(value.toString()) }
buf.writeNullable(resetStarters) { pb, value -> pb.writeBoolean(value) }
buf.writeNullable(battleTheme) {pb, value -> pb.writeIdentifier(value)}
buf.writeBoolean(partySelectTutorialDone)
}
companion object {
fun decode(buffer: RegistryFriendlyByteBuf): SetClientPlayerDataPacket {
@@ -57,6 +59,7 @@ data class ClientGeneralPlayerData(
val starterUUID = buffer.readNullable { it.readString() }?.let { UUID.fromString(it) }
val resetStarterPrompt = buffer.readNullable { it.readBoolean() }
val battleTheme = buffer.readNullable { it.readIdentifier() }
val partySelectTutorialDone = buffer.readBoolean()
val data = ClientGeneralPlayerData(
resetStarterPrompt,
promptStarter,
@@ -64,7 +67,8 @@ data class ClientGeneralPlayerData(
starterSelected,
starterUUID,
showChallengeLabel,
battleTheme
battleTheme,
partySelectTutorialDone
)
//Weird to do this, but since the flag doesn't get passed to the decoded obj, do it here
//Should be fine, as long as decode doesn't get run on the server for some reason
@@ -128,11 +128,11 @@ class FossilMultiblockStructure (
if(pokemon != null) {
pokemon.caughtBall = ballType
player.party().add(pokemon)
this.fossilState.growthState = "Taken"
player.playSound(CobblemonSounds.FOSSIL_MACHINE_RETRIEVE_POKEMON, 1.0F, 1.0F)
CobblemonEvents.FOSSIL_REVIVED.post(FossilRevivedEvent(pokemon, player))
CobblemonCriteria.RESURRECT_POKEMON.trigger(player, pokemon)
player.party().add(pokemon)
}
// Turn the monitor off
@@ -24,9 +24,10 @@ import com.cobblemon.mod.common.block.entity.TintBlockEntity
import com.cobblemon.mod.common.client.battle.ClientBattle
import com.cobblemon.mod.common.client.gui.PartyOverlay
import com.cobblemon.mod.common.client.gui.PartyOverlayDataControl
import com.cobblemon.mod.common.client.gui.RideControlsOverlay
import com.cobblemon.mod.common.client.gui.RideOverlay
import com.cobblemon.mod.common.client.gui.battle.BattleOverlay
import com.cobblemon.mod.common.client.gui.cookingpot.CookingPotScreen
import com.cobblemon.mod.common.client.gui.party.PartyTutorialToasts
import com.cobblemon.mod.common.client.particle.BedrockParticleOptionsRepository
import com.cobblemon.mod.common.client.render.ClientPlayerIcon
import com.cobblemon.mod.common.client.render.DeferredRenderer
@@ -111,7 +112,7 @@ object CobblemonClient {
val overlay: PartyOverlay by lazy { PartyOverlay() }
val battleOverlay: BattleOverlay by lazy { BattleOverlay() }
val pokedexUsageContext: PokedexUsageContext by lazy { PokedexUsageContext() }
val rideControlsOverlay: RideControlsOverlay by lazy { RideControlsOverlay() }
val rideControlsOverlay: RideOverlay by lazy { RideOverlay() }
fun onLogin() {
clientPlayerData = ClientGeneralPlayerData()
@@ -128,6 +129,8 @@ object CobblemonClient {
battleOverlay.onLogout()
ClientTaskTracker.clear()
checkedStarterScreen = false
overlay.resetAttachedToast()
PartyTutorialToasts.reset()
// CobblemonDataProvider.canReload = true
DeferredRenderer.clearAll()
ClientPlayerIcon.clear()
@@ -165,13 +168,12 @@ object CobblemonClient {
PlatformEvents.CLIENT_TICK_POST.subscribe { event ->
val player = event.client.player
if (player != null) {
var selectedItem = player.inventory.getItem(player.inventory.selected)
val selectedItem = player.inventory.getItem(player.inventory.selected)
if (pokedexUsageContext.scanningGuiOpen &&
!(selectedItem.`is`(CobblemonItemTags.POKEDEX)) &&
!(player.offhandItem.`is`(CobblemonItemTags.POKEDEX) &&
player.isUsingItem == true &&
player.usedItemHand == InteractionHand.OFF_HAND
)
player.isUsingItem &&
player.usedItemHand == InteractionHand.OFF_HAND)
) {
// Stop using Pokédex in main hand if player switches to a different slot in hotbar
pokedexUsageContext.stopUsing(PokedexUsageContext.OPEN_SCANNER_BUFFER_TICKS + 1)
@@ -216,7 +218,7 @@ object CobblemonClient {
}
fun registerColors() {
this.implementation.registerBlockColors(BlockColor { blockState, view, blockPos, tintIndex ->
this.implementation.registerBlockColors(BlockColor { _, view, blockPos, _ ->
blockPos?.let { pos ->
view?.getBlockEntity(pos)?.let { blockEntity ->
if (blockEntity is TintBlockEntity) return@BlockColor blockEntity.getTint()
@@ -18,10 +18,10 @@ import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.client.CobblemonClient
import com.cobblemon.mod.common.client.CobblemonResources
import com.cobblemon.mod.common.client.gui.battle.BattleGUI
import com.cobblemon.mod.common.client.gui.party.PartyTutorialToasts
import com.cobblemon.mod.common.client.gui.toast.CobblemonToast
import com.cobblemon.mod.common.client.keybind.boundKey
import com.cobblemon.mod.common.client.keybind.keybinds.HidePartyBinding
import com.cobblemon.mod.common.client.keybind.keybinds.SummaryBinding
import com.cobblemon.mod.common.client.keybind.keybinds.*
import com.cobblemon.mod.common.client.render.drawScaledText
import com.cobblemon.mod.common.client.render.getDepletableRedGreen
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState
@@ -150,6 +150,9 @@ class PartyOverlay : Gui(Minecraft.getInstance()) {
val portraitFrameOffsetY = 2
val selectedSlot = CobblemonClient.storage.selectedSlot
val partySize = party.slots.count { it != null }
PartyTutorialToasts.onOverlayRender(partySize)
party.forEachIndexed { index, pokemon ->
if (pokemon != null) {
val selectedOffsetX = if (selectedSlot == index) 6 else 0
@@ -10,6 +10,8 @@ package com.cobblemon.mod.common.client.gui
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.gui.blitk
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourSettings
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
import com.cobblemon.mod.common.api.riding.behaviour.types.air.*
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeBehaviour
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeState
@@ -19,6 +21,7 @@ import com.cobblemon.mod.common.api.riding.behaviour.types.land.VehicleBehaviour
import com.cobblemon.mod.common.api.riding.behaviour.types.liquid.BoatBehaviour
import com.cobblemon.mod.common.api.riding.behaviour.types.liquid.BurstBehaviour
import com.cobblemon.mod.common.api.riding.behaviour.types.liquid.DolphinBehaviour
import com.cobblemon.mod.common.api.riding.behaviour.types.liquid.DolphinState
import com.cobblemon.mod.common.client.render.drawScaledText
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.asTranslated
@@ -30,17 +33,28 @@ import net.minecraft.client.gui.GuiGraphics
import net.minecraft.client.gui.screens.ChatScreen
import net.minecraft.client.gui.screens.Screen
import net.minecraft.client.player.Input
import net.minecraft.client.player.LocalPlayer
import net.minecraft.client.renderer.BiomeColors
import net.minecraft.network.chat.MutableComponent
import net.minecraft.resources.ResourceLocation
import net.minecraft.util.FastColor
import net.minecraft.util.Mth
import net.minecraft.world.entity.Entity
import net.minecraft.world.level.BlockAndTintGetter
import kotlin.math.floor
import kotlin.math.max
import kotlin.math.round
class RideControlsOverlay : Gui(Minecraft.getInstance()) {
class RideOverlay : Gui(Minecraft.getInstance()) {
companion object {
private const val CONTROLS_FADE_FRAMES = 20F
private const val BASELINE_FPS = 60F
private const val MOTION_FADE_FRAMES = 10
private const val MOTION_FRAMES = 10
private const val MOTION_OVERLAY_MAX_OPACITY = 0.6F
private const val HALF_SCALE = 0.5F
private val mouseResource = cobblemonResource("textures/gui/riding/mouse.png")
@@ -59,6 +73,8 @@ class RideControlsOverlay : Gui(Minecraft.getInstance()) {
private val keyJumpResource = cobblemonResource("textures/gui/riding/key_jump.png")
private val keySneakWideResource = cobblemonResource("textures/gui/riding/key_sneak_wide.png")
private val keyJumpWideResource = cobblemonResource("textures/gui/riding/key_jump_wide.png")
private val motionLinesResource = cobblemonResource("textures/gui/riding/motion_lines_overlay.png")
}
private val screenExemptions: List<Class<out Screen>> = listOf(ChatScreen::class.java)
@@ -67,6 +83,9 @@ class RideControlsOverlay : Gui(Minecraft.getInstance()) {
private var controlsDurationFrames = controlsMaxDurationFrames
private var controlsFadeFrames = CONTROLS_FADE_FRAMES
private var motionFrameIntervals = 0F
private var motionFadeFrames = 0
private var lastMouseX = 0
private var lastMouseY = 0
@@ -81,43 +100,70 @@ class RideControlsOverlay : Gui(Minecraft.getInstance()) {
override fun render(context: GuiGraphics, tickCounter: DeltaTracker) {
val minecraft = Minecraft.getInstance()
// Hiding if a Screen is open and not exempt
minecraft.screen?.let { screen ->
if ((!screenExemptions.contains(screen.javaClass as Class<out Screen>))) return
}
if (minecraft.options.hideGui || minecraft.debugOverlay.showDebugScreen()) return
minecraft.player?.let { player ->
// Hiding if a Screen is open and not exempt
minecraft.screen?.let { screen ->
if ((!screenExemptions.contains(screen.javaClass as Class<out Screen>))) return
}
if (minecraft.options.hideGui || minecraft.debugOverlay.showDebugScreen()) return
val riddenEntity = player.vehicle
if (riddenEntity != null && riddenEntity is PokemonEntity) {
// Only show controls to driver
if (riddenEntity === player.controlledVehicle) {
renderControls(minecraft, context, tickCounter, riddenEntity)
}
val ridingBehaviourSettings = riddenEntity.ridingController?.context?.settings ?: return
val ridingBehaviourState = riddenEntity.ridingController?.context?.state ?: return
setCurrentRideBehaviour(ridingBehaviourSettings, ridingBehaviourState)
val tickDelta = tickCounter.realtimeDeltaTicks.takeIf { !minecraft.isPaused } ?: 0F
val updateInterval = (tickDelta / 20F) * BASELINE_FPS
renderMotionOverlay(minecraft, player, riddenEntity, context, updateInterval, ridingBehaviourSettings, ridingBehaviourState)
renderRideControls(minecraft, context, updateInterval, ridingBehaviourSettings, ridingBehaviourState)
} else {
resetControlsOverlayState()
}
}
}
private fun renderControls(minecraft: Minecraft, context: GuiGraphics, tickCounter: DeltaTracker, riddenEntity: PokemonEntity) {
// Update max duration if user has changed config
val configDuration = Cobblemon.config.displayControlSeconds * BASELINE_FPS
if (controlsMaxDurationFrames != configDuration) {
controlsMaxDurationFrames = configDuration
resetControlsOverlayState()
fun renderMotionOverlay(minecraft: Minecraft, player: LocalPlayer, riddenEntity: Entity, context: GuiGraphics, updateInterval: Float, ridingBehaviourSettings: RidingBehaviourSettings, ridingBehaviourState: RidingBehaviourState) {
if (currentBehaviourKey == JetBehaviour.KEY || currentBehaviourKey == DolphinBehaviour.KEY) {
val isBoosting = if (currentBehaviourKey == JetBehaviour.KEY) (ridingBehaviourState as JetState).boosting.get()
else (ridingBehaviourState as DolphinState).boosting.get()
val interval = round(updateInterval).toInt()
motionFadeFrames = (motionFadeFrames + (interval * (if (isBoosting) 1 else -1))).coerceIn(0, MOTION_FADE_FRAMES)
val opacity = (motionFadeFrames * (1F / MOTION_FADE_FRAMES)).coerceIn(0F, MOTION_OVERLAY_MAX_OPACITY)
val tint = if (player.isUnderWater && currentBehaviourKey == DolphinBehaviour.KEY) BiomeColors.getAverageWaterColor(minecraft.level as BlockAndTintGetter, riddenEntity.blockPosition()) else 0xFFFFFF
motionFrameIntervals += updateInterval * (if (minecraft.options.cameraType.isMirrored) -1 else 1)
val frameIndex = floor(motionFrameIntervals).toInt() % MOTION_FRAMES
blitk(
matrixStack = context.pose(),
texture = motionLinesResource,
x = 0,
y = 0,
textureHeight = 2560,
width = minecraft.window.guiScaledWidth,
height = minecraft.window.guiScaledHeight,
vOffset = 256 * frameIndex,
alpha = opacity,
red = FastColor.ARGB32.red(tint) / 255F,
green = FastColor.ARGB32.green(tint) / 255F,
blue = FastColor.ARGB32.blue(tint) / 255F
)
} else if (motionFadeFrames > 0) {
motionFadeFrames = 0
}
}
// Don't render if duration config set to 0 or less
if (controlsMaxDurationFrames <= 0F) return
private fun setCurrentRideBehaviour(ridingBehaviourSettings: RidingBehaviourSettings, ridingBehaviourState: RidingBehaviourState) {
val rideBehaviourKey = ridingBehaviourSettings.key
val rideBehaviourSettings = riddenEntity.ridingController?.context?.settings ?: return
val ridingBehaviourState = riddenEntity.ridingController?.context?.state ?: return
val rideBehaviourKey = rideBehaviourSettings.key
// Update current ride behaviour if changed
// If composite, get active behaviour instead
// Update current ride behaviour if changed.
// If behaviour is composite, get active behaviour instead
if (rideBehaviourKey == CompositeBehaviour.KEY) {
val activeBehaviour = (ridingBehaviourState as CompositeState).activeBehaviour.get()
if (currentBehaviourKey != activeBehaviour) {
@@ -128,12 +174,21 @@ class RideControlsOverlay : Gui(Minecraft.getInstance()) {
currentBehaviourKey = rideBehaviourKey
resetControlsOverlayState()
}
}
private fun renderRideControls(minecraft: Minecraft, context: GuiGraphics, updateInterval: Float, ridingBehaviourSettings: RidingBehaviourSettings, ridingBehaviourState: RidingBehaviourState) {
// Update max duration if user has changed config
val configDuration = Cobblemon.config.displayControlSeconds * BASELINE_FPS
if (controlsMaxDurationFrames != configDuration) {
controlsMaxDurationFrames = configDuration
resetControlsOverlayState()
}
// Don't render if duration config set to 0 or less
if (controlsMaxDurationFrames <= 0F) return
// Render elements if entity has ride behaviour and if display duration has not ended yet
if (rideBehaviourSettings != null && controlsFadeFrames > 0) {
val tickDelta = tickCounter.realtimeDeltaTicks.takeIf { !minecraft.isPaused } ?: 0F
val updateInterval = (tickDelta / 20F) * BASELINE_FPS
if (ridingBehaviourSettings != null && controlsFadeFrames > 0) {
controlsDurationFrames = max(controlsDurationFrames - updateInterval, 0F)
if (controlsDurationFrames == 0F && controlsFadeFrames > 0) controlsFadeFrames = max(controlsFadeFrames - updateInterval, 0F)
@@ -0,0 +1,99 @@
/*
* 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.gui.party
import com.cobblemon.mod.common.CobblemonItems
import com.cobblemon.mod.common.api.text.darkGray
import com.cobblemon.mod.common.api.text.red
import com.cobblemon.mod.common.client.CobblemonClient
import com.cobblemon.mod.common.client.gui.toast.CobblemonToast
import com.cobblemon.mod.common.client.keybind.boundKey
import com.cobblemon.mod.common.client.keybind.keybinds.DownShiftPartyBinding
import com.cobblemon.mod.common.client.keybind.keybinds.PartySendBinding
import com.cobblemon.mod.common.client.keybind.keybinds.UpShiftPartyBinding
import com.cobblemon.mod.common.net.messages.server.storage.party.PartyTutorialPacket
import com.cobblemon.mod.common.util.lang
import com.mojang.blaze3d.platform.InputConstants
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.components.toasts.Toast
import net.minecraft.client.gui.components.toasts.AdvancementToast
import net.minecraft.network.chat.Component
import net.minecraft.util.Mth
object PartyTutorialToasts {
private var toastAttached = false
val upKey = UpShiftPartyBinding.boundKey()
val downKey = DownShiftPartyBinding.boundKey()
val upDisplay =
if (upKey.type == InputConstants.Type.KEYSYM && upKey.value == InputConstants.KEY_UP)
Component.literal("↑")
else upKey.displayName
val downDisplay =
if (downKey.type == InputConstants.Type.KEYSYM && downKey.value == InputConstants.KEY_DOWN)
Component.literal("↓")
else downKey.displayName
private val toast = CobblemonToast(
Mth.createInsecureUUID(),
CobblemonItems.POKEDEX_RED.defaultInstance,
lang("ui.party.party_select_title").red(),
lang(
"ui.party.party_select_description",
upDisplay,
downDisplay,
PartySendBinding.boundKey().displayName
).darkGray(),
AdvancementToast.BACKGROUND_SPRITE,
-1F,
0
)
fun reset() {
toastAttached = false
}
fun onOverlayRender(partySize: Int) {
if (partySize <= 1) return
if (!CobblemonClient.clientPlayerData.partySelectTutorialDone) {
showToast()
}
}
fun onArrowKeySwitchedSlot() {
if (CobblemonClient.clientPlayerData.partySelectTutorialDone) return
if (CobblemonClient.storage.party.count { it != null } < 2) return
PartyTutorialPacket().sendToServer()
hideToast()
}
fun onHoldKeyScrollSwitchedSlot() {
if (CobblemonClient.clientPlayerData.partySelectTutorialDone) return
if (CobblemonClient.storage.party.count { it != null } < 2) return
PartyTutorialPacket().sendToServer()
hideToast()
}
private fun showToast() {
val minecraft = Minecraft.getInstance()
if (!toastAttached) {
toast.nextVisibility = Toast.Visibility.SHOW
minecraft.toasts.addToast(toast)
toastAttached = true
}
}
private fun hideToast() {
if (toastAttached) toast.nextVisibility = Toast.Visibility.HIDE
}
}
@@ -40,6 +40,7 @@ import com.cobblemon.mod.common.util.asTranslated
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.isInventoryKeyPressed
import com.cobblemon.mod.common.util.lang
import com.cobblemon.mod.common.util.toAssetPath
import com.mojang.blaze3d.platform.InputConstants
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.GuiGraphics
@@ -463,7 +464,7 @@ class PCGUI(
)
// Poké Ball
val ballResource = cobblemonResource("textures/item/poke_balls/" + pokemon.caughtBall.name.path + ".png")
val ballResource = pokemon.caughtBall.name.toAssetPath("textures/item/poke_balls/", ".png")
blitk(
matrixStack = matrices,
texture = ballResource,
@@ -45,6 +45,7 @@ import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.isInventoryKeyPressed
import com.cobblemon.mod.common.util.lang
import com.cobblemon.mod.common.util.toAssetPath
import com.mojang.blaze3d.platform.InputConstants
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.GuiGraphics
@@ -558,7 +559,7 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
}
// Poké Ball
val ballResource = cobblemonResource("textures/item/poke_balls/" + selectedPokemon.caughtBall.name.path + ".png")
val ballResource = selectedPokemon.caughtBall.name.toAssetPath("textures/item/poke_balls/", ".png")
blitk(
matrixStack = matrices,
texture = ballResource,
@@ -19,11 +19,11 @@ import com.cobblemon.mod.common.client.render.drawScaledText
import com.cobblemon.mod.common.net.messages.server.RequestMoveSwapPacket
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.lang
import java.math.RoundingMode
import java.text.DecimalFormat
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.GuiGraphics
import net.minecraft.network.chat.Component
import java.math.RoundingMode
import java.text.DecimalFormat
class MovesWidget(
pX: Int, pY: Int,
@@ -20,6 +20,8 @@ import net.minecraft.resources.ResourceLocation
import net.minecraft.util.Mth
import java.util.*
import kotlin.math.min
import net.minecraft.client.gui.Font
import net.minecraft.util.FormattedCharSequence
@Environment(EnvType.CLIENT)
class CobblemonToast(
@@ -38,11 +40,18 @@ class CobblemonToast(
private var lastTime = 0L
internal var nextVisibility: Toast.Visibility = Toast.Visibility.SHOW
fun getLines(font: Font, maxWidth: Int): List<FormattedCharSequence> {
return font.split(this.description, maxWidth)
}
override fun render(context: GuiGraphics, manager: ToastComponent, startTime: Long): Toast.Visibility {
context.blitSprite(this.frameTexture, 0, 0, this.width(), this.height())
val maxWidth = 125
val textRenderer = manager.minecraft.font
context.blitSprite(this.frameTexture, 0, 0, this.width(), this.height() + (getLines(textRenderer, maxWidth).size - 1) * 10)
context.drawString(textRenderer, this.title, 30, 7, this.title.style.color?.value ?: -1, false)
context.drawString(textRenderer, this.description, 30, 18, this.description.style.color?.value ?: -1, false)
context.drawWordWrap(textRenderer, this.description, 30, 18, maxWidth, this.description.style.color?.value ?: -1)
context.renderFakeItem(this.icon, 8, 8)
if (this.hasProgressBar()) {
context.fill(3, 28, 157, 29, -1)
@@ -32,6 +32,7 @@ import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.asTranslated
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.lang
import com.cobblemon.mod.common.util.toAssetPath
import com.mojang.blaze3d.platform.InputConstants
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.GuiGraphics
@@ -584,7 +585,7 @@ class TradeGUI(
// Poké Ball
val nameXOffset = if (isOpposing) 75 else 0
val ballResource = cobblemonResource("textures/item/poke_balls/" + pokemon.caughtBall.name.path + ".png")
val ballResource = pokemon.caughtBall.name.toAssetPath("textures/item/poke_balls/", ".png")
blitk(
matrixStack = context.pose(),
texture = ballResource,
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.client.keybind.keybinds
import com.cobblemon.mod.common.client.CobblemonClient
import com.cobblemon.mod.common.client.gui.party.PartyTutorialToasts
import com.cobblemon.mod.common.client.keybind.CobblemonKeyBinding
import com.cobblemon.mod.common.client.keybind.KeybindCategories
import com.mojang.blaze3d.platform.InputConstants
@@ -21,5 +22,6 @@ object DownShiftPartyBinding : CobblemonKeyBinding(
) {
override fun onPress() {
CobblemonClient.storage.shiftSelected(true)
PartyTutorialToasts.onArrowKeySwitchedSlot()
}
}
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.client.keybind.keybinds
import com.cobblemon.mod.common.client.CobblemonClient
import com.cobblemon.mod.common.client.gui.party.PartyTutorialToasts
import com.cobblemon.mod.common.client.keybind.CobblemonKeyBinding
import com.cobblemon.mod.common.client.keybind.KeybindCategories
import com.mojang.blaze3d.platform.InputConstants
@@ -21,5 +22,6 @@ object UpShiftPartyBinding : CobblemonKeyBinding(
) {
override fun onPress() {
CobblemonClient.storage.shiftSelected(false)
PartyTutorialToasts.onArrowKeySwitchedSlot()
}
}
@@ -1,27 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.net.data
import com.cobblemon.mod.common.api.interaction.PokemonInteractions
import com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler
import com.cobblemon.mod.common.net.messages.client.data.PokemonInteractionsSyncPacket
import net.minecraft.client.Minecraft
object PokemonInteractionsSyncHandler : ClientNetworkPacketHandler<PokemonInteractionsSyncPacket> {
override fun handle(
packet: PokemonInteractionsSyncPacket,
client: Minecraft,
) {
PokemonInteractions.speciesInteractions.clear()
PokemonInteractions.speciesInteractions.addAll(packet.speciesInteractions)
PokemonInteractions.generalInteractions.clear()
PokemonInteractions.generalInteractions.addAll(packet.generalInteractions)
}
}
@@ -8,11 +8,11 @@
package com.cobblemon.mod.common.command
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.permission.CobblemonPermissions
import com.cobblemon.mod.common.api.storage.pc.PCPosition
import com.cobblemon.mod.common.api.storage.pc.POKEMON_PER_BOX
import com.cobblemon.mod.common.api.text.red
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.util.*
import com.mojang.brigadier.Command
import com.mojang.brigadier.CommandDispatcher
@@ -35,7 +35,7 @@ object PcTakeCommand {
.then(
Commands.argument("box", IntegerArgumentType.integer(1))
.then(
Commands.argument("slot", IntegerArgumentType.integer(1, 30))
Commands.argument("slot", IntegerArgumentType.integer(1, POKEMON_PER_BOX))
.executes(::execute)
)
)
@@ -60,8 +60,8 @@ object PcTakeCommand {
val slot = IntegerArgumentType.getInteger(context, "slot")
val pc = target.pc()
if (box > POKEMON_PER_BOX) {
context.source.sendFailure(commandLang("pctake.too_many_boxes", POKEMON_PER_BOX))
if (box > pc.boxes.size) {
context.source.sendFailure(commandLang("pctake.too_many_boxes", pc.boxes.size))
return 0
}
@@ -90,8 +90,10 @@ interface MoLangScriptingEntity {
behavioursAreCustom = nbt.getBoolean(DataKeys.SCRIPTED_BEHAVIOURS_ARE_CUSTOM)
behaviours.clear()
behaviours.addAll(nbt.getList(DataKeys.SCRIPTED_BEHAVIOURS, ListTag.TAG_STRING.toInt()).map { ResourceLocation.parse(it.asString) })
data = MoLangFunctions.readMoValueFromNBT(nbt.getCompound(DataKeys.SCRIPTED_DATA)) as VariableStruct
config = if (nbt.contains(DataKeys.SCRIPTED_CONFIG)) MoLangFunctions.readMoValueFromNBT(nbt.getCompound(DataKeys.SCRIPTED_CONFIG)) as VariableStruct else VariableStruct()
val dataKey = if (nbt.contains(DataKeys.SCRIPTED_DATA)) DataKeys.SCRIPTED_DATA else "Data" // migrate old use of "Data"
data = MoLangFunctions.readMoValueFromNBT(nbt.getCompound(dataKey)) as VariableStruct
val configKey = if (nbt.contains(DataKeys.SCRIPTED_CONFIG)) DataKeys.SCRIPTED_CONFIG else "Config" // migrate old use of "Config"
config = if (nbt.contains(configKey)) MoLangFunctions.readMoValueFromNBT(nbt.getCompound(configKey)) as VariableStruct else VariableStruct()
}
fun registerFunctionsForScripting(struct: QueryStruct) {
@@ -31,7 +31,7 @@ class BaitEffectsComponent(
}
override fun equals(other: Any?): Boolean {
return other is BaitEffectsComponent && effects.size == other.effects.size && effects.all { it in other.effects }
return other is BaitEffectsComponent && effects == other.effects
}
override fun hashCode(): Int {
@@ -49,9 +49,7 @@ class FoodColourComponent(
}
override fun equals(other: Any?): Boolean {
return other is FoodColourComponent &&
colours.size == other.colours.size &&
colours.mapIndexed { index, value -> value == other.colours[index] }.all { it }
return other is FoodColourComponent && colours == other.colours // List == List in kotlin checks for element order and index.
}
fun getColoursAsARGB(): List<Int> {
@@ -20,11 +20,12 @@ class BerryRegistrySyncPacket(berries: Collection<Berry>) : DataRegistrySyncPack
}
override val id = ID
override fun encodeEntry(buffer: RegistryFriendlyByteBuf, entry: Berry) {
entry.encode(buffer)
}
override fun decodeEntry(buffer: RegistryFriendlyByteBuf): Berry? = Berry.decode(buffer)
override fun decodeEntry(buffer: RegistryFriendlyByteBuf): Berry = Berry.decode(buffer)
override fun synchronizeDecoded(entries: Collection<Berry>) {
Berries.reload(entries.associateBy { it.identifier })
@@ -9,40 +9,30 @@
package com.cobblemon.mod.common.net.messages.client.data
import com.cobblemon.mod.common.api.interaction.PokemonInteractionSet
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.api.interaction.PokemonInteractions
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.network.RegistryFriendlyByteBuf
class PokemonInteractionsSyncPacket(
val speciesInteractions: List<PokemonInteractionSet>,
val generalInteractions: List<PokemonInteractionSet>,
) : NetworkPacket<PokemonInteractionsSyncPacket> {
entries: Collection<PokemonInteractionSet>,
) : DataRegistrySyncPacket<PokemonInteractionSet, PokemonInteractionsSyncPacket>(entries) {
override val id = ID
override fun encode(buffer: RegistryFriendlyByteBuf) {
buffer.writeCollection(speciesInteractions) { it, speciesInteraction ->
speciesInteraction.encode(it)
}
buffer.writeCollection(generalInteractions) { it, generalInteraction ->
generalInteraction.encode(it)
}
override fun encodeEntry(buffer: RegistryFriendlyByteBuf, entry: PokemonInteractionSet) {
entry.encode(buffer)
}
override fun decodeEntry(buffer: RegistryFriendlyByteBuf): PokemonInteractionSet {
return PokemonInteractionSet.decode(buffer)
}
override fun synchronizeDecoded(entries: Collection<PokemonInteractionSet>) {
PokemonInteractions.interactions.clear()
PokemonInteractions.interactions.addAll(entries)
}
companion object {
val ID = cobblemonResource("pokemon_interactions_sync")
fun decode(buffer: RegistryFriendlyByteBuf): PokemonInteractionsSyncPacket {
val speciesInteractions = buffer.readList { it ->
PokemonInteractionSet.decode(it)
}
val generalInteractions = buffer.readList { it ->
PokemonInteractionSet.decode(it)
}
return PokemonInteractionsSyncPacket(
speciesInteractions,
generalInteractions,
)
}
fun decode(buffer: RegistryFriendlyByteBuf): PokemonInteractionsSyncPacket = PokemonInteractionsSyncPacket(emptyList()).apply { decodeBuffer(buffer) }
}
}
@@ -0,0 +1,24 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.net.messages.server.storage.party
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.network.RegistryFriendlyByteBuf
class PartyTutorialPacket : NetworkPacket<PartyTutorialPacket> {
override val id = ID
override fun encode(buffer: RegistryFriendlyByteBuf) {}
companion object {
val ID = cobblemonResource("party_select_tutorial")
fun decode(buffer: RegistryFriendlyByteBuf): PartyTutorialPacket = PartyTutorialPacket()
}
}
@@ -0,0 +1,28 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.net.serverhandling.storage.party
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.net.ServerNetworkPacketHandler
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.net.messages.server.storage.party.PartyTutorialPacket
import net.minecraft.server.MinecraftServer
import net.minecraft.server.level.ServerPlayer
object PartyTutorialPacketHandler : ServerNetworkPacketHandler<PartyTutorialPacket> {
override fun handle(packet: PartyTutorialPacket, server: MinecraftServer, player: ServerPlayer) {
val pd = Cobblemon.playerDataManager.getGenericData(player)
if (!pd.partySelectTutorialDone) {
pd.partySelectTutorialDone = true
Cobblemon.playerDataManager.saveSingle(pd, PlayerInstancedDataStoreTypes.GENERAL)
pd.sendToPlayer(player)
}
}
}
@@ -67,6 +67,7 @@ object CobblemonRequirementAdapter : RequirementAdapter {
this.registerType(PropertyRangeRequirement.ADAPTER_VARIANT, PropertyRangeRequirement::class)
this.registerType(AdvancementRequirement.ADAPTER_VARIANT, AdvancementRequirement::class)
this.registerType(OwnerHoldsItemRequirement.ADAPTER_VARIANT, OwnerHoldsItemRequirement::class)
this.registerType(ChanceRequirement.ADAPTER_VARIANT, ChanceRequirement::class)
}
val gson: Gson by lazy {
@@ -0,0 +1,37 @@
/*
* 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.pokemon.requirements
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.pokemon.requirement.Requirement
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.genericRuntime
import com.cobblemon.mod.common.util.resolveFloat
import kotlin.random.Random
/**
* A requirement that will only pass the check if some random chance is satisfied.
*
* @author Hiroku
* @since January 30th, 2026
*/
class ChanceRequirement : Requirement {
companion object {
const val ADAPTER_VARIANT = "chance"
}
val chance: ExpressionLike = "1".asExpressionLike()
override fun check(pokemon: Pokemon): Boolean {
genericRuntime.environment.query.addFunction("pokemon") { pokemon.struct }
val chance = genericRuntime.resolveFloat(chance)
return Random.nextFloat() < chance
}
}
@@ -45,14 +45,15 @@ class ActiveTrade(val player1: TradeParticipant, val player2: TradeParticipant)
fun performTrade(tradeParticipant: TradeParticipant) {
val offer = getOpposingOffer(tradeParticipant)
if (offer.accepted && getOffer(tradeParticipant).accepted) {
TradeManager.performTrade(
activeTrade = this,
player1 = player1,
player2 = player2,
pokemon1 = player1Offer.pokemon!!,
pokemon2 = player2Offer.pokemon!!
)
completeTrade()
}
}
@@ -98,11 +98,23 @@ object TradeManager : RequestManager<TradeManager.TradeRequest>() {
}
}
fun performTrade(player1: TradeParticipant, pokemon1: Pokemon, player2: TradeParticipant, pokemon2: Pokemon) {
CobblemonEvents.TRADE_EVENT_PRE.postThen(TradeEvent.Pre(player1, pokemon2, player2, pokemon1)) {
val party1 = player1.party
val party2 = player2.party
fun performTrade(
activeTrade: ActiveTrade,
player1: TradeParticipant,
pokemon1: Pokemon,
player2: TradeParticipant,
pokemon2: Pokemon
) {
val party1 = player1.party
val party2 = player2.party
if (pokemon1 !in party1 || pokemon2 !in party2) {
Cobblemon.LOGGER.warn("Attempted to perform a trade with Pokémon that aren't in the party anymore. Could be attempted duping between ${player1.name} and ${player2.name}")
activeTrade.cancelTrade()
return
}
CobblemonEvents.TRADE_EVENT_PRE.postThen(TradeEvent.Pre(player1, pokemon2, player2, pokemon1)) {
party1.remove(pokemon1)
party2.remove(pokemon2)
@@ -120,6 +132,8 @@ object TradeManager : RequestManager<TradeManager.TradeRequest>() {
it.attemptEvolution(pokemon2, pokemon1)
}
activeTrade.completeTrade()
CobblemonEvents.TRADE_EVENT_POST.post(TradeEvent.Post(player1, pokemon2, player2, pokemon1))
}
}
@@ -261,8 +261,8 @@ object DataKeys {
const val SCRIPTED_BEHAVIOURS_ARE_CUSTOM = "BehavioursAreCustom"
const val SCRIPTED_BEHAVIOURS = "Behaviours"
const val SCRIPTED_DATA = "Data"
const val SCRIPTED_CONFIG = "Config"
const val SCRIPTED_DATA = "ScriptingData"
const val SCRIPTED_CONFIG = "ScriptingConfig"
// PokemonProperties
const val ELEMENTAL_TYPE = "ElementalType"
@@ -547,6 +547,8 @@
"cobblemon.trade.request_sent": "Offer'd to trade w'th %1$s",
"cobblemon.trade.offer": "%1$s offer'd to trade crewmates with ye.",
"cobblemon.ui.party": "Crew",
"cobblemon.ui.party.party_select_title": "Pick Yer Party Pal",
"cobblemon.ui.party.party_select_description": "Slam %1$s/%2$s...",
"cobblemon.ui.power": "Damage",
"cobblemon.ui.accuracy": "Shot rate",
"cobblemon.ui.effect": "Bonus",
@@ -824,10 +824,6 @@
"effect.cobblemon.cleanse_negative": "Negative Effect Cleanse",
"effect.cobblemon.mental_restoration": "Mental Restoration",
"effect.cobblemon.cleanse_all": "Effect Cleanse",
"effect.cobblemon.cleanse_negative": "Negative Effect Cleanse",
"effect.cobblemon.mental_restoration": "Mental Restoration",
"cobblemon.fossil.armor": "Armor",
"cobblemon.fossil.bird": "Bird",
"cobblemon.fossil.claw": "Claw",
@@ -1214,6 +1210,8 @@
"cobblemon.trade.error.duplicate": "You already sent a trade request to %1$s!",
"cobblemon.ui.party": "Party",
"cobblemon.ui.party.party_select_title": "Change Party Selection",
"cobblemon.ui.party.party_select_description": "Press %1$s/%2$s or hold %3$s and scroll.",
"cobblemon.ui.power": "Power",
"cobblemon.ui.accuracy": "Accuracy",
"cobblemon.ui.effect": "Effect",
@@ -6360,7 +6360,7 @@
"advancements.cobblemon.craft_rod.description": "Crea una Poké Caña en una mesa de herrería y descubre nuevas formas de pescar",
"advancements.cobblemon.use_bait.description": "Usa una baya como cebo en tu Poké Caña",
"advancements.cobblemon.craft_master_rod.description": "Fabrica una Poké Caña usando una Master Ball",
"advancements.cobblemon.craft_master_rod": "Dedicación magistral",
"advancements.cobblemon.craft_master_rod": "Esto repercutirá en las poblaciones de Whiscash",
"cobblemon.battle.shift": "%1$s se movió al centro",
"cobblemon.challenge.pending": "¡Aún no has respondido al desafío de %1$s!",
"cobblemon.challenge.multi.team_request.receiver": "¡%1$s ha solicitado hacer equipo contigo para combates múltiples!",
@@ -8687,5 +8687,35 @@
"cobblemon.ui.ride_style.land.cart": "Coche",
"effect.cobblemon.cleanse_all": "Limpieza de efectos",
"effect.cobblemon.cleanse_negative": "Limpieza de efectos negativos",
"effect.cobblemon.mental_restoration": "Descanso mental"
"effect.cobblemon.mental_restoration": "Descanso mental",
"block.cobblemon.white_plaque": "Placa blanca",
"block.cobblemon.light_gray_plaque": "Placa gris claro",
"block.cobblemon.gray_plaque": "Placa gris",
"block.cobblemon.black_plaque": "Placa negra",
"block.cobblemon.brown_plaque": "Placa marrón",
"block.cobblemon.red_plaque": "Placa roja",
"block.cobblemon.orange_plaque": "Placa naranja",
"block.cobblemon.yellow_plaque": "Placa amarilla",
"block.cobblemon.lime_plaque": "Placa verde lima",
"block.cobblemon.green_plaque": "Placa verde",
"block.cobblemon.cyan_plaque": "Placa cian",
"block.cobblemon.light_blue_plaque": "Placa azul claro",
"block.cobblemon.blue_plaque": "Placa azul",
"block.cobblemon.purple_plaque": "Placa morada",
"block.cobblemon.magenta_plaque": "Placa magenta",
"block.cobblemon.pink_plaque": "Placa rosa",
"advancements.cobblemon.cook_all_regional_delicacies": "Gira mundial culinaria",
"advancements.cobblemon.cook_all_regional_delicacies.description": "Cocina todas las delicatesen regionales",
"advancements.cobblemon.cook_all_ev_mochi": "¡Mucho mochi!",
"advancements.cobblemon.cook_all_ev_mochi.description": "Cocina todos los sabores de mochi, un delicioso tentempié que modifica los puntos de esfuerzo de un Pokémon",
"advancements.cobblemon.cook_snack": "Un aroma tentador",
"advancements.cobblemon.cook_snack.description": "Hornea un Poké Snack, un delicioso pastel que puede atraer a ciertos Pokémon según la baya que uses",
"advancements.cobblemon.use_poke_bait": "Seguro que pican",
"advancements.cobblemon.use_poke_bait.description": "Prepara Poké Cebo en una cacerola para hogueras y usalo para atraer a un Pokémon",
"advancements.cobblemon.max_ride_stats": "Poké Atleta de renombre",
"advancements.cobblemon.max_ride_stats.description": "Aumenta al máximo las estadísticas de montura de un Pokémon dándole bongurchata de sabores\nLos distintos sabores aumentan distintas características",
"advancements.cobblemon.interact_with_pokemon": "Zafarrancho en el rancho",
"advancements.cobblemon.interact_with_pokemon.description": "Usa alguna de tus herramientas para obtener recursos de uno de tus Pokémon",
"advancements.cobblemon.slather_saccharine": "Solo un mordisquito",
"advancements.cobblemon.slather_saccharine.description": "Unta una botella de miel en el tronco de un sacarino y atrae a ciertos Pokémon"
}
@@ -9191,10 +9191,12 @@
"tag.item.cobblemon.plaques": "Plaques",
"tag.item.cobblemon.display_case_items": "Modèles d'objets en vitrine",
"tag.item.cobblemon.item_blocks": "Objets décoratifs",
"cobblemon.behaviour.defend_owner.name": "Défendre le propriétaire",
"cobblemon.behaviour.defend_owner.desc": "Défend son propriétaire lorsqu'il est attaqué.",
"cobblemon.behaviour.defend_owner.name": "Défendre le dresseur",
"cobblemon.behaviour.defend_owner.desc": "Défend son dresseur lorsqu'il est attaqué.",
"stat.cobblemon.riding_land": "Distance parcourue par Pokémon sur terre",
"stat.cobblemon.riding_air": "Distance parcourue par Pokémon dans les airs",
"stat.cobblemon.riding_liquid": "Distance parcourue par Pokémon dans un liquide",
"cobblemon.ui.ride_style.air.bird": "Oiseau"
"cobblemon.ui.ride_style.air.bird": "Oiseau",
"effect.cobblemon.cleanse_all": "Nettoyage des effets",
"effect.cobblemon.cleanse_negative": "Nettoyage des effets négatifs"
}
@@ -9178,5 +9178,39 @@
"cobblemon.ui.ride_style.air.bird": "Oiseau",
"cobblemon.ui.ride_style.air.hover": "Flotte",
"cobblemon.ui.ride_style.air.jet": "Avion",
"cobblemon.ui.ride_style.air.rocket": "Fusée"
"cobblemon.ui.ride_style.air.rocket": "Fusée",
"cobblemon.ui.ride_style.land.horse": "Standard",
"cobblemon.ui.ride_style.land.cart": "Voiture",
"cobblemon.ui.ride_style.liquid.boat": "Bateau",
"cobblemon.ui.ride_style.liquid.dolphin": "Dauphin",
"cobblemon.ui.ride_style.liquid.submarine": "Sous-marin",
"cobblemon.config.ui.enable_in_flight_dismounting": "Activer le débarquement en vol",
"cobblemon.config.ui.enable_in_flight_dismounting.tooltip": "Permet aux joueurs de descendre de leur Pokémon en plein vol. Lorsque cette option est désactivée, il n'est possible de descendre que depuis le sol.",
"block.cobblemon.white_plaque": "Plaque blanche",
"block.cobblemon.light_gray_plaque": "Plaque gris clair",
"block.cobblemon.gray_plaque": "Plaque grise",
"block.cobblemon.black_plaque": "Plaque noire",
"block.cobblemon.brown_plaque": "Plaque marron",
"block.cobblemon.red_plaque": "Plaque rouge",
"block.cobblemon.orange_plaque": "Plaque orange",
"block.cobblemon.yellow_plaque": "Plaque jaune",
"block.cobblemon.lime_plaque": "Plaque vert clair",
"block.cobblemon.green_plaque": "Plaque verte",
"block.cobblemon.cyan_plaque": "Plaque cyan",
"block.cobblemon.light_blue_plaque": "Plaque bleu clair",
"block.cobblemon.blue_plaque": "Plaque bleue",
"block.cobblemon.purple_plaque": "Plaque violette",
"block.cobblemon.magenta_plaque": "Plaque magenta",
"block.cobblemon.pink_plaque": "Plaque rose",
"tag.item.cobblemon.chest_boats": "Bateaux de stockage",
"tag.item.cobblemon.plaques": "Plaques",
"tag.item.cobblemon.display_case_items": "Modèles d'objets en vitrine",
"tag.item.cobblemon.item_blocks": "Objets décoratifs",
"cobblemon.behaviour.defend_owner.name": "Défendre le dresseur",
"cobblemon.behaviour.defend_owner.desc": "Défend son dresseur lorsqu'il est attaqué.",
"stat.cobblemon.riding_land": "Distance parcourue par Pokémon sur terre",
"stat.cobblemon.riding_air": "Distance parcourue par Pokémon dans les airs",
"stat.cobblemon.riding_liquid": "Distance parcourue par Pokémon dans un liquide",
"effect.cobblemon.cleanse_all": "Nettoyage des effets",
"effect.cobblemon.cleanse_negative": "Nettoyage des effets négatifs"
}
@@ -322,7 +322,7 @@
"item.cobblemon.rich_mulch": "주렁주렁비료",
"item.cobblemon.sandy_mulch": "모래비료",
"item.cobblemon.surprise_mulch": "깜놀비료",
"item.cobblemon.medicinal_leek": "약초",
"item.cobblemon.medicinal_leek": "약초 대파",
"item.cobblemon.energy_root": "힘의뿌리",
"item.cobblemon.revival_herb": "부활초",
"item.cobblemon.roasted_leek": "구운 대파",
@@ -826,10 +826,10 @@
"advancements.cobblemon.first_shiny_catch.description": "특별한 색 포켓몬을 잡으세요",
"advancements.cobblemon.healing_machine": "치료의 힘",
"advancements.cobblemon.healing_machine.description": "치료 머신이 충전될 때까지 기다린 후 당신의 포켓몬들을 치료하세요",
"advancements.cobblemon.obtain_leek": "대파를 손에 넣었다!",
"advancements.cobblemon.obtain_leek.description": "담수 지역에서 자라는 약초를 획득하세요",
"advancements.cobblemon.obtain_leek": "약초 대파를 손에 넣었다!",
"advancements.cobblemon.obtain_leek.description": "담수 지역에서 자라는 약초 대파를 획득하세요",
"advancements.cobblemon.medicinal_brew": "동네 약국",
"advancements.cobblemon.medicinal_brew.description": "약초를 양조해 치유에 필요한 기본 재료를 만드세요",
"advancements.cobblemon.medicinal_brew.description": "약초 대파를 양조해 치유에 필요한 기본 재료를 만드세요",
"advancements.cobblemon.brew_potion": "기초적인 회복 아이템",
"advancements.cobblemon.brew_potion.description": "오랭열매와 약용물약을 양조해 상처약을 만드세요",
"advancements.cobblemon.brew_full_restore": "챔피언의 선택",
@@ -600,8 +600,8 @@
"cobblemon.healingmachine.alreadyhealing": "A tua equipa de Pokémon já está a ser curada noutro lado!",
"cobblemon.pc.inbattle": "Não podes usar o PC durante um combate!",
"cobblemon.held_item": "Item segurado",
"cobblemon.held_item.give": "%1$s passou a segurar %2$s.",
"cobblemon.held_item.replace": "Passaste %1$s de %2$s para %3$s segurar.",
"cobblemon.held_item.give": "%1$s recebeu %2$s.",
"cobblemon.held_item.replace": "Passaste %1$s de %2$s para %3$s.",
"cobblemon.held_item.take": "%2$s deixou de segurar %1$s.",
"cobblemon.held_item.already_holding": "%1$s já está a segurar %2$s!",
"cobblemon.ui.pokemonteam": "Equipa",
@@ -646,9 +646,9 @@
"item.cobblemon.babiri_berry": "Baga Babiri",
"item.cobblemon.babiri_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Aço",
"item.cobblemon.belue_berry": "Baga Belue",
"item.cobblemon.belue_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.belue_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.bluk_berry": "Baga Bluk",
"item.cobblemon.bluk_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.bluk_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.charti_berry": "Baga Charti",
"item.cobblemon.charti_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Rocha",
"item.cobblemon.cheri_berry": "Baga Cheri",
@@ -664,11 +664,11 @@
"item.cobblemon.colbur_berry": "Baga Colbur",
"item.cobblemon.colbur_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Escuridão",
"item.cobblemon.cornn_berry": "Baga Cornn",
"item.cobblemon.cornn_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.cornn_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.custap_berry": "Baga Custap",
"item.cobblemon.custap_berry.tooltip": "O portador move-se primeiro ao alcançar 1/4 do HP máximo",
"item.cobblemon.durin_berry": "Baga Durin",
"item.cobblemon.durin_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.durin_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.enigma_berry": "Baga Enigma",
"item.cobblemon.enigma_berry.tooltip": "Restaura 1/4 do HP máximo após o portador ser atingido por um movimento supereficaz",
"item.cobblemon.figy_berry": "Baga Figy",
@@ -682,7 +682,7 @@
"item.cobblemon.hondew_berry": "Baga Hondrew",
"item.cobblemon.hondew_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.hopo_berry": "Baga Hopo",
"item.cobblemon.hopo_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.hopo_berry.tooltip": "Restaura 10 PP do movimento selecionado quando consumida por um Pokémon",
"item.cobblemon.iapapa_berry": "Baga Iapapa",
"item.cobblemon.iapapa_berry.tooltip": "Restaura 1/3 do HP máximo ao alcançar 1/4 do HP máximo ou menos; confunde se Natureza -Def",
"item.cobblemon.jaboca_berry": "Baga Jaboca",
@@ -706,23 +706,23 @@
"item.cobblemon.mago_berry": "Baga Mago",
"item.cobblemon.mago_berry.tooltip": "Restaura 1/3 do HP máximo ao alcançar 1/4 do HP máximo ou menos; confunde se Natureza -Spe",
"item.cobblemon.magost_berry": "Baga Magost",
"item.cobblemon.magost_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.magost_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.maranga_berry": "Baga Maranga",
"item.cobblemon.maranga_berry.tooltip": "Aumenta a Defesa Especial do portador por 1 estágio após ser atingido por um ataque especial",
"item.cobblemon.micle_berry": "Baga Micle",
"item.cobblemon.micle_berry.tooltip": "O próximo ataque do portador tem 1.2x precisão ao alcançar 1/4 do HP máximo or menos",
"item.cobblemon.nanab_berry": "Baga Nanab",
"item.cobblemon.nanab_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.nanab_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.touga_berry": "Baga Touga",
"item.cobblemon.touga_berry.tooltip": "O portador é curado se ficar confuso",
"item.cobblemon.nomel_berry": "Baga Nomel",
"item.cobblemon.nomel_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.nomel_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.occa_berry": "Baga Occa",
"item.cobblemon.occa_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Fogo",
"item.cobblemon.oran_berry": "Baga Oran",
"item.cobblemon.oran_berry.tooltip": "Restaura 10 HP ao alcançar 1/2 do HP máximo ou menos",
"item.cobblemon.pamtre_berry": "Baga Pamtre",
"item.cobblemon.pamtre_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.pamtre_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.passho_berry": "Baga Passho",
"item.cobblemon.passho_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Água",
"item.cobblemon.payapa_berry": "Baga Payapa",
@@ -734,17 +734,17 @@
"item.cobblemon.petaya_berry": "Baga Petaya",
"item.cobblemon.petaya_berry.tooltip": "Aumenta o Ataque Especial do portador por 1 estágio ao alcançar 1/4 do HP máximo ou menos",
"item.cobblemon.pinap_berry": "Baga Pinap",
"item.cobblemon.pinap_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.pinap_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.pomeg_berry": "Baga Pomeg",
"item.cobblemon.pomeg_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.qualot_berry": "Baga Qualot",
"item.cobblemon.qualot_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.rabuta_berry": "Baga Rabuta",
"item.cobblemon.rabuta_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.rabuta_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.rawst_berry": "Baga Rawst",
"item.cobblemon.rawst_berry.tooltip": "O portador é curado se for queimado",
"item.cobblemon.razz_berry": "Baga Razz",
"item.cobblemon.razz_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.razz_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.rindo_berry": "Baga Rindo",
"item.cobblemon.rindo_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Planta",
"item.cobblemon.roseli_berry": "Baga Roseli",
@@ -758,7 +758,7 @@
"item.cobblemon.sitrus_berry": "Baga Sitrus",
"item.cobblemon.sitrus_berry.tooltip": "Restaura 1/4 do HP máximo quando alcançar 1/2 do HP máximo ou menos",
"item.cobblemon.spelon_berry": "Baga Spelon",
"item.cobblemon.spelon_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.spelon_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.starf_berry": "Baga Starf",
"item.cobblemon.starf_berry.tooltip": "Aumenta um atributo aleatório por 2 ao alcançar 1/4 do HP máximo ou menos",
"item.cobblemon.tamato_berry": "Baga Tamato",
@@ -768,9 +768,9 @@
"item.cobblemon.wacan_berry": "Baga Wacan",
"item.cobblemon.wacan_berry.tooltip": "Reduz pela metade o dano recebido de um ataque supereficaz do tipo Elétrico",
"item.cobblemon.watmel_berry": "Baga Watmel",
"item.cobblemon.watmel_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.watmel_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.wepear_berry": "Baga Wepear",
"item.cobblemon.wepear_berry.tooltip": "Não pode ser comida pelo portador",
"item.cobblemon.wepear_berry.tooltip": "Não pode ser comida durante batalhas",
"item.cobblemon.wiki_berry": "Baga Wiki",
"item.cobblemon.wiki_berry.tooltip": "Restaura 1/3 do HP máximo ao alcançar 1/4 do HP máximo ou menos; confunde se Natureza -SpA",
"item.cobblemon.yache_berry": "Baga Yache",
@@ -2240,7 +2240,7 @@
"cobblemon.mark.ribbon_event_color_green.desc": "Uma Fita comemorativa.",
"key.cobblemon.pokedex": "Abrir Pokédex",
"cobblemon.subtitle.wallpaper.unlock": "Papel de parede da caixa do PC desbloqueado",
"cobblemon.held_item.forbidden": "Tu não podes dar %1$s para %2$s segurar.",
"cobblemon.held_item.forbidden": "Tu não podes dar %1$s a %2$s.",
"cobblemon.cosmetic_item": "Item Cosmético",
"cobblemon.cosmetic_item.take": "Tu recuperaste %1$s de %2$s.",
"cobblemon.challenge.sent": "Tu desafiaste %1$s para uma %2$s.",
@@ -5509,7 +5509,7 @@
"cobblemon.team.error.missing_pokemon.receiver": "Não tens nenhum Pokémon usável!",
"item.cobblemon.grepa_berry.tooltip_1": "Diminui os EVs de Defesa Especial por 10 e aumenta Amizade",
"item.cobblemon.pomeg_berry.tooltip_1": "Diminui os EVs de HP por 10 e aumenta Amizade",
"item.cobblemon.hondew_berry.tooltip_2": "Não pode ser comida pelo portador",
"item.cobblemon.hondew_berry.tooltip_2": "Não pode ser comida durante batalhas",
"cobblemon.config.ui.default_box_count.tooltip": "O número de caixas disponíveis no PC.",
"cobblemon.config.ui.experience_multiplier.tooltip": "Multiplicador de Experiência adicional para o cálculo de Experiência.",
"cobblemon.battle.sidestart.ally.spikes": "Espinhos foram espalhados no chão à volta da tua equipa!",
@@ -5551,8 +5551,8 @@
"cobblemon.ui.challenge.challenge_title": "Pedido de Batalha",
"cobblemon.challenge.multi.error.invalid_team_size": "Equipas para Batalha Múltipla só podem ter %1$s jogadores!",
"item.cobblemon.kelpsy_berry.tooltip_1": "Diminui os EVs de Ataque por 10 e aumenta Amizade",
"item.cobblemon.qualot_berry.tooltip_2": "Não pode ser comida pelo portador",
"item.cobblemon.tamato_berry.tooltip_2": "Não pode ser comida pelo portador",
"item.cobblemon.qualot_berry.tooltip_2": "Não pode ser comida durante batalhas",
"item.cobblemon.tamato_berry.tooltip_2": "Não pode ser comida durante batalhas",
"cobblemon.command.behaviouredit.non_scriptable": "Não estás a olhar para uma entidade MoLang programável.",
"item.cobblemon.hondew_berry.tooltip_1": "Diminui os EVs de Ataque Especial por 10 e aumenta Amizade",
"cobblemon.command.cobblemon_config.reload": "Recarregando as configurações do Cobblemon.",
@@ -5611,7 +5611,7 @@
"item.cobblemon.mirror_herb.tooltip_1": "Permite ao portador refletir os aumentos de atributos de um adversário para aumentar os seus próprios atributos",
"item.cobblemon.revive.tooltip": "Reanima um Pokémon desmaiado até 50% do seu HP máximo",
"item.cobblemon.max_revive.tooltip": "Reanima e cura totalmente um Pokémon desmaiado",
"item.cobblemon.revival_herb.tooltip": "Revive totalmente um Pokémon desmaiado, mas reduz Amizade",
"item.cobblemon.revival_herb.tooltip": "Revive um Pokémon desmaiado até 25% do seu HP máximo, mas reduz Amizade",
"item.cobblemon.moomoo_milk": "Leite Moomoo",
"item.cobblemon.awakening.tooltip": "Desperta um Pokémon do sono",
"item.cobblemon.burn_heal.tooltip": "Cura um Pokémon de uma queimadura",
@@ -5622,12 +5622,12 @@
"item.cobblemon.genius_mochi": "Mochi Genial",
"item.cobblemon.clever_mochi": "Mochi Esperto",
"item.cobblemon.swift_mochi": "Mochi Rápido",
"item.cobblemon.health_mochi.tooltip": "Aumenta os EVs de HP do Pokémon por 10",
"item.cobblemon.muscle_mochi.tooltip": "Aumenta os EVs de Ataque do Pokémon por 10",
"item.cobblemon.resist_mochi.tooltip": "Aumenta os EVs de Defesa do Pokémon por 10",
"item.cobblemon.genius_mochi.tooltip": "Aumenta os EVs de Ataque Especial do Pokémon por 10",
"item.cobblemon.clever_mochi.tooltip": "Aumenta os EVs de Defesa Especial do Pokémon por 10",
"item.cobblemon.swift_mochi.tooltip": "Aumenta os EVs de Velocidade do Pokémon por 10",
"item.cobblemon.health_mochi.tooltip": "Aumenta os EVs de HP do Pokémon por 4",
"item.cobblemon.muscle_mochi.tooltip": "Aumenta os EVs de Ataque do Pokémon por 4",
"item.cobblemon.resist_mochi.tooltip": "Aumenta os EVs de Defesa do Pokémon por 4",
"item.cobblemon.genius_mochi.tooltip": "Aumenta os EVs de Ataque Especial do Pokémon por 4",
"item.cobblemon.clever_mochi.tooltip": "Aumenta os EVs de Defesa Especial do Pokémon por 4",
"item.cobblemon.swift_mochi.tooltip": "Aumenta os EVs de Velocidade do Pokémon por 4",
"item.cobblemon.fresh_start_mochi": "Mochi em Branco",
"item.cobblemon.fresh_start_mochi.tooltip": "Repõe todos os EVs do Pokémon a 0",
"item.cobblemon.aprijuice_black": "Sumo de Bolota Preta",
@@ -5636,7 +5636,7 @@
"item.cobblemon.aprijuice_pink": "Sumo de Bolota Rosa",
"item.cobblemon.aprijuice_white": "Sumo de Bolota Branca",
"item.cobblemon.aprijuice_yellow": "Sumo de Bolota Amarela",
"cobblemon.seasoning_food_header": "Comida",
"cobblemon.seasoning_food_header": "Nutrição",
"cobblemon.seasoning_flavor.dry": "Seco",
"cobblemon.seasoning_flavor.sweet": "Doce",
"item.cobblemon.tasty_tail": "Cauda Saborosa",
@@ -5648,7 +5648,7 @@
"cobblemon.item_class.seasonings": "Temperos",
"cobblemon.item_class.bait_effect_seasoning": "Tempero de Isca",
"cobblemon.item_class.mob_effect_seasoning": "Tempero de Efeito",
"cobblemon.item_class.food_seasoning": "Tempero de Comida",
"cobblemon.item_class.food_seasoning": "Temperos Nutricionais",
"cobblemon.seasoning_bait_effect_header": "Isca",
"cobblemon.seasoning_flavor_header": "Sabor",
"cobblemon.seasoning_bait_effect_info_header": "Informação da Isca:",
@@ -5742,11 +5742,11 @@
"cobblemon.team.error.existing_team.other": "%1$s já faz parte de uma equipa!",
"cobblemon.team.error.max_team_size.other": "%1$s não se pode juntar porque a equipa está cheia!",
"cobblemon.team.error.max_team_size.self": "Não é possível entrar, a equipa está cheia!",
"item.cobblemon.grepa_berry.tooltip_2": "Não pode ser comida pelo portador",
"item.cobblemon.kelpsy_berry.tooltip_2": "Não pode ser comida pelo portador",
"item.cobblemon.grepa_berry.tooltip_2": "Não pode ser comida durante batalhas",
"item.cobblemon.kelpsy_berry.tooltip_2": "Não pode ser comida durante batalhas",
"item.cobblemon.qualot_berry.tooltip_1": "Diminui os EVs de Defesa por 10 e aumenta Amizade",
"item.cobblemon.tamato_berry.tooltip_1": "Diminui os EVs de Velocidade por 10 e aumenta Amizade",
"item.cobblemon.pomeg_berry.tooltip_2": "Não pode ser comida pelo portador",
"item.cobblemon.pomeg_berry.tooltip_2": "Não pode ser comida durante batalhas",
"cobblemon.command.mark.invalid": "Nome de marca inválido.",
"cobblemon.command.error.nonpc": "Erro: Tu precisas de incluir um identificador de NPC válido.",
"cobblemon.command.freezepokemon.non_pokemon": "Não estás a olhar para um Pokémon.",
@@ -6165,5 +6165,66 @@
"tag.item.cobblemon.candies": "Guloseimas",
"tag.item.cobblemon.mint_leaves": "Folhas de Hortelã",
"tag.item.cobblemon.berries.stat_buff": "Bagas de Batalha",
"cobblemon.move.hydrovortex": "Vórtice Aquático"
"cobblemon.move.hydrovortex": "Vórtice Aquático",
"cobblemon.ui.ride_style.air.rocket": "Foguete",
"cobblemon.ui.ride_style.land": "Terrestre",
"cobblemon.ui.ride_style.land.horse": "Padrão",
"cobblemon.ui.ride_style.land.cart": "Carrinho",
"cobblemon.ui.ride_style.liquid": "Líquido",
"cobblemon.ui.ride_style.liquid.boat": "Barco",
"cobblemon.ui.ride_style.liquid.dolphin": "Golfinho",
"cobblemon.ui.ride_style.liquid.submarine": "Submarino",
"item.cobblemon.eggant_berry": "Baga Eggant",
"item.cobblemon.eggant_berry.tooltip": "O portador é curado se ficar apaixonado",
"cobblemon.battle.end.sandtomb": "%1$s foi libertado(a) da Sepultura de Areia!",
"gamerule.healersHealPC": "Curar Pokémon no PC ao usar uma Máquina de Cura",
"tag.item.cobblemon.berries.colour.white": "Bagas Brancas",
"tag.item.cobblemon.berries.colour.brown": "Bagas Castanhas",
"tag.item.cobblemon.berries.colour.red": "Bagas Vermelhas",
"tag.item.cobblemon.berries.colour.orange": "Bagas Laranjas",
"tag.item.cobblemon.berries.colour.yellow": "Bagas Amarelas",
"tag.item.cobblemon.berries.colour.lime": "Bagas Lima",
"tag.item.cobblemon.berries.colour.green": "Bagas Verdes",
"tag.item.cobblemon.berries.colour.cyan": "Bagas Ciano",
"tag.item.cobblemon.berries.colour.light_blue": "Bagas Azuis Claras",
"tag.item.cobblemon.berries.colour.blue": "Bagas Azuis",
"tag.item.cobblemon.berries.colour.purple": "Bagas Roxas",
"tag.item.cobblemon.berries.colour.magenta": "Bagas Magenta",
"tag.item.cobblemon.berries.colour.pink": "Bagas Rosa",
"tag.item.cobblemon.item_blocks": "Itens Decorativos",
"cobblemon.move.guardianofalola": "Guardião de Alola",
"cobblemon.move.guardianofalola.desc": "O utilizador, o Pokémon Espírito da Terra, obtém a energia de Alola usando o seu Poder-Z e ataca o alvo, reduzindo significativamente o HP do alvo.",
"cobblemon.move.oceanicoperetta": "Sinfonia Marítima",
"cobblemon.move.oceanicoperetta.desc": "O utilizador, Primarina, invoca uma enorme quantidade de água usando o seu Z-Power e ataca o alvo com toda a força.",
"cobblemon.move.pulverizingpancake": "Panqueca Pulverizadora",
"cobblemon.move.pulverizingpancake.desc": "O Poder-Z revela as verdadeiras capacidades do utilizador, Snorlax. O Pokémon move o seu enorme corpo energicamente e ataca o alvo com toda a força.",
"cobblemon.move.lightthatburnsthesky": "Luz Que Queima o Céu",
"cobblemon.move.lightthatburnsthesky.desc": "Este ataque compara os atributos de Ataque e Ataque Especial do utilizador e usa o que for mais elevado. Este movimento ignora a Habilidade do alvo.",
"cobblemon.move.letssnuggleforever": "Aconchego Eterno",
"cobblemon.move.letssnuggleforever.desc": "Usando o seu Poder-Z, o utilizador, Mimikyu, espanca o alvo com toda a sua força.",
"cobblemon.move.blackholeeclipse": "Buraco Negro Eclipsante",
"cobblemon.move.blackholeeclipse.desc": "O utilizador reúne energia negra usando o seu Poder-Z e suga o alvo para dentro dela. O poder varia, dependendo do movimento original.",
"cobblemon.entity.variable.resource_identifier.desc": "O identificador de recurso a ser usado para controlar a aparência do NPC, como cobblemon:standard ou cobblemon:mudkip.",
"cobblemon.entity.variable.resource_identifier.name": "Identificador de Recurso",
"cobblemon.move.continentalcrush": "Colisão Continental",
"cobblemon.move.continentalcrush.desc": "O utilizador invoca uma enorme montanha rochosa usando o seu Poder-Z e deixa-a cair sobre o alvo. O poder varia, dependendo do movimento original.",
"cobblemon.move.tectonicrage": "Fúria Tectónica",
"cobblemon.move.tectonicrage.desc": "O utilizador enterra-se no solo e atinge o alvo com toda a força do seu Poder-Z. O poder varia, dependendo do movimento original.",
"cobblemon.behaviour.configurable_resource_identifier.name": "Identificador de Recurso Configurável",
"cobblemon.behaviour.configurable_resource_identifier.desc": "Permite alterar o identificador de recurso que controla a aparência do NPC.",
"cobblemon.entity.variable.dialogue_selection.name": "Diálogo",
"cobblemon.entity.variable.dialogue_selection.desc": "O identificador de recurso do diálogo a ser aberto na interação, como cobblemon:your_dialogue",
"cobblemon.move.aciddownpour": "Dilúvio Ácido",
"cobblemon.move.aciddownpour.desc": "O utilizador cria um pântano venenoso usando o seu Poder-Z, afundando o alvo. O poder varia, dependendo do movimento original.",
"cobblemon.move.bloomdoom": "Desgraça Floral",
"cobblemon.move.bloomdoom.desc": "O utilizador recolhe energia vegetal usando o seu Poder-Z e ataca o alvo com toda a força. O poder varia, dependendo do movimento original.",
"cobblemon.behaviour.defend_owner.name": "Defender Dono",
"cobblemon.behaviour.defend_owner.desc": "Defende o seu dono quando este é atacado.",
"cobblemon.behaviour.pokemon_picks_up_items.name": "Apanha Itens",
"cobblemon.behaviour.pokemon_picks_up_items.desc": "O Pokémon irá apanhar itens que lhe interessam.",
"cobblemon.behaviour.player_textured.name": "Textura de Jogador",
"cobblemon.behaviour.player_textured.desc": "O NPC será texturizado com base num nome de utilizador de jogador específico.",
"cobblemon.behaviour.pokemon_gets_mad_at_thrower.name": "Fica Zangado com o Lançador da Pokébola",
"cobblemon.behaviour.pokemon_gets_mad_at_thrower.desc": "Fica zangado com o jogador que lhe atirou uma Pokébola. Pokémon agressivos atacarão o jogador e não agressivos fugirão.",
"cobblemon.move.twinkletackle": "Investida Brilhante"
}
@@ -9174,5 +9174,44 @@
"stat.cobblemon.battles_fled": "宝可梦对战逃跑次数",
"stat.cobblemon.eggs_collected": "已收集宝可梦蛋数",
"stat.cobblemon.level_up": "提升宝可梦等级次数",
"stat.cobblemon.times_ridden": "骑乘宝可梦次数"
"stat.cobblemon.times_ridden": "骑乘宝可梦次数",
"effect.cobblemon.cleanse_all": "效果清除",
"effect.cobblemon.cleanse_negative": "负面效果清除",
"effect.cobblemon.mental_restoration": "精神恢复",
"cobblemon.ui.ride_style.air.bird": "鸟类",
"cobblemon.ui.ride_style.air.hover": "悬浮",
"cobblemon.ui.ride_style.air.jet": "喷射",
"cobblemon.ui.ride_style.air.rocket": "火箭",
"cobblemon.ui.ride_style.land.horse": "常规",
"cobblemon.ui.ride_style.land.cart": "轮驱",
"cobblemon.ui.ride_style.liquid.boat": "乘船",
"cobblemon.ui.ride_style.liquid.dolphin": "海豚",
"cobblemon.ui.ride_style.liquid.submarine": "潜艇",
"cobblemon.config.ui.enable_in_flight_dismounting": "启用在飞行中离乘",
"cobblemon.config.ui.enable_in_flight_dismounting.tooltip": "允许玩家在空中骑乘宝可梦时离乘。禁用时,仅能在地面上离乘。",
"block.cobblemon.white_plaque": "白色标识牌",
"block.cobblemon.light_gray_plaque": "淡灰色标识牌",
"block.cobblemon.gray_plaque": "灰色标识牌",
"block.cobblemon.black_plaque": "黑色标识牌",
"block.cobblemon.brown_plaque": "棕色标识牌",
"block.cobblemon.red_plaque": "红色标识牌",
"block.cobblemon.orange_plaque": "橙色标识牌",
"block.cobblemon.yellow_plaque": "黄色标识牌",
"block.cobblemon.lime_plaque": "黄绿色标识牌",
"block.cobblemon.green_plaque": "绿色标识牌",
"block.cobblemon.cyan_plaque": "青色标识牌",
"block.cobblemon.light_blue_plaque": "淡蓝色标识牌",
"block.cobblemon.blue_plaque": "蓝色标识牌",
"block.cobblemon.purple_plaque": "紫色标识牌",
"block.cobblemon.magenta_plaque": "品红色标识牌",
"block.cobblemon.pink_plaque": "粉红色标识牌",
"tag.item.cobblemon.chest_boats": "箱船",
"tag.item.cobblemon.plaques": "标识牌",
"tag.item.cobblemon.display_case_items": "展示柜中的物品模型",
"tag.item.cobblemon.item_blocks": "装饰品",
"cobblemon.behaviour.defend_owner.name": "保护主人",
"cobblemon.behaviour.defend_owner.desc": "在主人受到攻击时保护他们。",
"stat.cobblemon.riding_land": "骑着宝可梦在陆地移动距离",
"stat.cobblemon.riding_air": "骑着宝可梦在空中移动距离",
"stat.cobblemon.riding_liquid": "骑着宝可梦在水域移动距离"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -58,15 +58,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.leather",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.leather.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.leather.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -173,6 +191,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "4",
"toleratedLeaders": [
@@ -186,23 +209,18 @@
"fly": {
"canFly": true
},
"walk": {
"walkSpeed": 0.3
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.3
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -73,7 +73,7 @@
"poseOffsets": [
{
"offset": {
"x": 1.8626451e-09,
"x": 1.8626451E-9,
"y": -1.2779657,
"z": 0.059787232
},
@@ -113,7 +113,7 @@
},
{
"offset": {
"x": 1.8626451e-09,
"x": 1.8626451E-9,
"y": -1.2779657,
"z": 0.059787232
},
@@ -146,30 +146,30 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"entityInteract": {
"avoidedBySkeleton": true
},
"fireImmune": true,
"moving": {
"walk": {
"walkSpeed": "0.25"
},
"swim": {
"avoidsWater": true,
"canSwimInLava": true
},
"walk": {
"walkSpeed": "0.25"
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"fireImmune": true
}
},
"drops": {
"amount": 3,
@@ -375,25 +375,25 @@
}
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"entityInteract": {
"avoidedBySkeleton": true
},
"fireImmune": true,
"moving": {
"swim": {
"avoidsWater": true,
"canSwimInLava": true
}
},
"entityInteract": {
"avoidedBySkeleton": true
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"moves": [
"1:rockslide",
@@ -53,11 +53,20 @@
"AIR": {
"key": "cobblemon:air/rocket",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -82,8 +91,35 @@
},
"LIQUID": {
"key": "cobblemon:liquid/submarine",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
"hitboxBreachPercentage": 0.75,
"rideSounds": [],
"stats": {
"ACCELERATION": "45-65",
"JUMP": "30-50",
@@ -103,7 +139,7 @@
"poseOffsets": [
{
"offset": {
"x": -0.000759989,
"x": -7.59989E-4,
"y": -2.7762213,
"z": -0.08708589
},
@@ -113,7 +149,7 @@
},
{
"offset": {
"x": 0.000713408,
"x": 7.13408E-4,
"y": -2.888495,
"z": -0.031018771
},
@@ -255,6 +291,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "5"
},
@@ -269,14 +310,9 @@
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -527,6 +563,11 @@
}
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "6"
},
@@ -535,11 +576,6 @@
"canBreatheUnderwater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -57,32 +57,32 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": true,
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": false,
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": true,
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.leather.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": false,
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.leather.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
@@ -195,6 +195,7 @@
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "5"
},
@@ -203,9 +204,9 @@
"canFly": true
},
"swim": {
"swimSpeed": 0.1,
"avoidsWater": true,
"canSwimInLava": true
"canSwimInLava": true,
"swimSpeed": 0.1
},
"walk": {
"walkSpeed": 0.147
@@ -213,11 +214,10 @@
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"drops": {
"amount": 4,
@@ -507,28 +507,28 @@
}
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "6"
},
"moving": {
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true,
"canSwimInLava": true
},
"fly": {
"canFly": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"evolutions": [],
"battleOnly": true,
@@ -628,28 +628,28 @@
}
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "6"
},
"moving": {
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true,
"canSwimInLava": true
},
"fly": {
"canFly": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"evolutions": [],
"battleOnly": true,
@@ -67,7 +67,34 @@
},
"LIQUID": {
"key": "cobblemon:liquid/dolphin",
"rideSounds": [],
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
"stats": {
"ACCELERATION": "50-75",
"JUMP": "25-50",
@@ -239,6 +266,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "5",
"toleratedLeaders": [
@@ -271,14 +301,11 @@
}
},
"resting": {
"drowsyChance": 0.0033,
"rouseChance": 0.0042,
"times": [
"day"
],
"drowsyChance": 0.0033,
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
]
}
},
"drops": {
@@ -58,19 +58,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"playForNonPassengers": true,
"submerged": false,
"soundLocation": "cobblemon:ride.loop.wind",
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": true,
"playForNonPassengers": true,
"submerged": false,
"soundLocation": "cobblemon:ride.loop.leather",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.leather.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.leather.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -101,37 +115,27 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": true,
"playForNonPassengers": false,
"submerged": false,
"soundLocation": "cobblemon:ride.loop.water_surface.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": false,
"playForNonPassengers": true,
"submerged": false,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": true,
"playForNonPassengers": false,
"submerged": true,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForPassengers": false,
"playForNonPassengers": true,
"submerged": true,
"soundLocation": "cobblemon:ride.loop.underwater.mono",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -306,6 +310,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"fly": {
"canFly": true
@@ -319,16 +328,11 @@
}
},
"resting": {
"drowsyChance": 0.0014,
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -54,11 +54,20 @@
"AIR": {
"key": "cobblemon:air/jet",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -86,11 +95,30 @@
"LIQUID": {
"key": "cobblemon:liquid/dolphin",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_surface",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -186,6 +214,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -207,17 +240,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -67,13 +67,21 @@
},
"LIQUID": {
"key": "cobblemon:liquid/boat",
"surfaceLevelOffset": -1.6,
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_surface",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -83,7 +91,8 @@
"SKILL": "50-75",
"SPEED": "25-40",
"STAMINA": "45-75"
}
},
"surfaceLevelOffset": -1.6
}
},
"seats": [
@@ -169,6 +178,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "6",
"toleratedLeaders": [
@@ -185,24 +199,19 @@
"moving": {
"swim": {
"canBreatheUnderwater": true,
"swimSpeed": 0.3,
"canWalkOnWater": true
"canWalkOnWater": true,
"swimSpeed": 0.3
},
"walk": {
"walkSpeed": 0.15,
"avoidsLand": true
"avoidsLand": true,
"walkSpeed": 0.15
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -147,6 +147,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "3"
},
@@ -155,9 +158,6 @@
"avoidsWater": true
}
},
"combat": {
"willDefendOwner": true
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -416,6 +416,7 @@
"fixed": false,
"width": 0.8
},
"riding": {},
"drops": {
"amount": 1,
"entries": [
@@ -596,8 +597,7 @@
"variant": "level_up"
}
],
"battleOnly": false,
"riding": {}
"battleOnly": false
}
],
"features": [
@@ -147,6 +147,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "3",
"toleratedLeaders": [
@@ -158,27 +163,22 @@
},
"moving": {
"canLook": false,
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.45
},
"wanderChance": 20,
"swim": {
"avoidsWater": true
}
"wanderChance": 20
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -147,6 +147,12 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "4"
},
@@ -159,16 +165,10 @@
"walkSpeed": 0.15
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"drops": {
"amount": 2,
@@ -147,6 +147,12 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -165,16 +171,10 @@
"walkSpeed": 0.2
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"drops": {
"amount": 2,
@@ -52,8 +52,8 @@
"behaviours": {
"LIQUID": {
"key": "cobblemon:liquid/submarine",
"hitboxBreachPercentage": 0.9,
"rideSounds": [],
"hitboxBreachPercentage": 0.9,
"stats": {
"ACCELERATION": "35-70",
"JUMP": "15-35",
@@ -146,6 +146,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -173,11 +178,6 @@
"walkSpeed": 0.17
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -146,6 +146,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -177,15 +182,10 @@
},
"moving": {
"swim": {
"swimSpeed": "0.25",
"avoidsWater": true
"avoidsWater": true,
"swimSpeed": "0.25"
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -476,14 +476,9 @@
]
},
"behaviour": {
"moving": {
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
@@ -515,6 +510,11 @@
}
]
},
"moving": {
"swim": {
"avoidsWater": true
}
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -740,6 +740,12 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -755,16 +761,10 @@
"canSwimInLava": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"moves": [
"1:tackle",
@@ -909,7 +909,6 @@
},
"LIQUID": {
"key": "cobblemon:liquid/boat",
"surfaceLevelOffset": -0.9,
"rideSounds": [
{
"muffleEnabled": true,
@@ -925,7 +924,8 @@
"SKILL": "40-55",
"SPEED": "30-40",
"STAMINA": "30-65"
}
},
"surfaceLevelOffset": -0.9
}
},
"seats": [
@@ -1011,6 +1011,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -1020,19 +1025,14 @@
}
]
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"moving": {
"swim": {
"canWalkOnWater": true
}
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
}
},
"moves": [
@@ -146,6 +146,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "7",
"toleratedLeaders": [
@@ -156,26 +161,21 @@
]
},
"moving": {
"walk": {
"walkSpeed": 0.135
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.135
}
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"night, noon"
],
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -390,25 +390,25 @@
}
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "8"
},
"resting": {
"times": [
"night, noon"
],
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"moving": {
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042,
"times": [
"night, noon"
]
}
},
"evolutions": [],
@@ -73,7 +73,7 @@
"poseOffsets": [
{
"offset": {
"x": 0.0009895586,
"x": 9.895586E-4,
"y": -0.6805381,
"z": 0.0058082193
},
@@ -85,7 +85,7 @@
"offset": {
"x": 0.008947004,
"y": -0.6557218,
"z": 0.0005530901
"z": 5.530901E-4
},
"poseTypes": [
"WALK"
@@ -146,30 +146,30 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "5"
},
"resting": {
"canSleep": true,
"light": "0-4",
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"walking": {
"walkSpeed": 0.18
},
"moving": {
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
]
},
"walking": {
"walkSpeed": 0.18
}
},
"drops": {
@@ -53,11 +53,20 @@
"AIR": {
"key": "cobblemon:air/hover",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -153,6 +162,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"fly": {
"canFly": true
@@ -166,17 +180,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -73,7 +73,7 @@
"poseOffsets": [
{
"offset": {
"x": 3.3534473e-19,
"x": 3.3534473E-19,
"y": -1.0998156,
"z": 0.22897746
},
@@ -83,7 +83,7 @@
},
{
"offset": {
"x": -6.446602e-19,
"x": -6.446602E-19,
"y": -1.060447,
"z": 0.23613866
},
@@ -93,7 +93,7 @@
},
{
"offset": {
"x": 3.3534473e-19,
"x": 3.3534473E-19,
"y": -1.0998156,
"z": 0.22897746
},
@@ -103,7 +103,7 @@
},
{
"offset": {
"x": -6.446602e-19,
"x": -6.446602E-19,
"y": -1.060447,
"z": 0.23613866
},
@@ -113,7 +113,7 @@
},
{
"offset": {
"x": 3.3534473e-19,
"x": 3.3534473E-19,
"y": -1.0998156,
"z": 0.22897746
},
@@ -123,7 +123,7 @@
},
{
"offset": {
"x": -6.446602e-19,
"x": -6.446602E-19,
"y": -1.060447,
"z": 0.23613866
},
@@ -133,7 +133,7 @@
},
{
"offset": {
"x": 3.3534473e-19,
"x": 3.3534473E-19,
"y": -1.0998156,
"z": 0.22897746
},
@@ -146,6 +146,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -161,19 +164,16 @@
},
"moving": {
"canWalk": true,
"walkSpeed": "0.2",
"swim": {
"avoidsWater": true
}
},
"walkSpeed": "0.2"
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
}
},
"drops": {
@@ -54,11 +54,20 @@
"AIR": {
"key": "cobblemon:air/bird",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -165,6 +174,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"fly": {
"canFly": true
@@ -174,16 +188,11 @@
}
},
"resting": {
"drowsyChance": 0.0021,
"rouseChance": 0.0042,
"times": [
"167-11833,13702-22299"
],
"drowsyChance": 0.0021,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -366,22 +375,22 @@
},
"baseExperienceYield": 210,
"behaviour": {
"resting": {
"times": [
"167-11833,13702-22299"
],
"drowsyChance": 0.0021,
"rouseChance": 0.0042
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
"resting": {
"drowsyChance": 0.0021,
"rouseChance": 0.0042,
"times": [
"167-11833,13702-22299"
]
}
},
"evolutions": [],
@@ -146,6 +146,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "7",
"toleratedLeaders": [
@@ -160,23 +165,18 @@
]
},
"moving": {
"walk": {
"walkSpeed": 0.15
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.15
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -145,27 +145,27 @@
]
},
"behaviour": {
"moving": {
"walk": {
"walkSpeed": 0.3
},
"swim": {
"avoidsWater": true
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "3"
},
"moving": {
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.3
}
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
}
},
"drops": {
@@ -54,11 +54,20 @@
"AIR": {
"key": "cobblemon:air/bird",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -167,6 +176,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -184,21 +196,18 @@
"fly": {
"canFly": true
},
"walking": {
"walkSpeed": 0.19
},
"swim": {
"avoidsWater": true
},
"walking": {
"walkSpeed": 0.19
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
}
},
"drops": {
@@ -401,6 +410,11 @@
},
"baseExperienceYield": 207,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -411,18 +425,13 @@
]
},
"moving": {
"swim": {
"avoidsWater": true
},
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -541,6 +541,12 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -560,16 +566,10 @@
"canSwimInLava": true
}
},
"combat": {
"willDefendOwner": true,
"willFlee": false,
"willDefendSelf": true
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"drops": {
"amount": 2,
@@ -762,6 +762,12 @@
},
"baseExperienceYield": 196,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -777,16 +783,10 @@
"canSwimInLava": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"evolutions": [],
"battleOnly": true,
@@ -56,15 +56,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.pow(math.min(math.max(0.5,(q.ride_velocity()*0.5 / 1.5) + 0.5), 1.0),2)",
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.saucer.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -160,6 +178,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "3"
},
@@ -176,17 +199,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -54,11 +54,20 @@
"AIR": {
"key": "cobblemon:air/bird",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -93,8 +102,8 @@
{
"offset": {
"x": 0.003290192,
"y": -1.3213174,
"z": 0.215731
"y": -1.2900676,
"z": 0.17198098
},
"poseTypes": [
"STAND"
@@ -133,8 +142,8 @@
{
"offset": {
"x": 0.003290192,
"y": -1.3213174,
"z": 0.215731
"y": -1.2900676,
"z": 0.17198098
},
"poseTypes": [
"FLOAT"
@@ -152,9 +161,9 @@
},
{
"offset": {
"x": 0.003290192,
"y": -1.3213174,
"z": 0.215731
"x": -2.4577955E-4,
"y": -1.4635844,
"z": -0.041512404
},
"poseTypes": [
"GLIDE"
@@ -165,6 +174,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9"
},
@@ -172,23 +186,18 @@
"fly": {
"canFly": true
},
"walk": {
"walkSpeed": 0.24
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.24
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -57,15 +57,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.pow(math.min(math.max(0.5,(q.ride_velocity()*0.5 / 1.5) + 0.5), 1.0),2)",
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.saucer.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -99,7 +117,7 @@
"poseOffsets": [
{
"offset": {
"x": -0.0007805396,
"x": -7.805396E-4,
"y": -1.2943133,
"z": -0.40744212
},
@@ -119,7 +137,7 @@
},
{
"offset": {
"x": 0.0007733833,
"x": 7.733833E-4,
"y": -1.4106412,
"z": -0.3683446
},
@@ -129,7 +147,7 @@
},
{
"offset": {
"x": 0.0007733833,
"x": 7.733833E-4,
"y": -1.4106412,
"z": -0.4224712
},
@@ -139,7 +157,7 @@
},
{
"offset": {
"x": 0.0007733833,
"x": 7.733833E-4,
"y": -1.4106412,
"z": -0.3683446
},
@@ -149,7 +167,7 @@
},
{
"offset": {
"x": 0.0007733833,
"x": 7.733833E-4,
"y": -1.4106412,
"z": -0.4224712
},
@@ -159,7 +177,7 @@
},
{
"offset": {
"x": 0.0007733833,
"x": 7.733833E-4,
"y": -1.4106412,
"z": -0.3683446
},
@@ -356,7 +374,7 @@
},
{
"offset": {
"x": 0.000753602,
"x": 7.53602E-4,
"y": -1.3993053,
"z": 0.38156968
},
@@ -366,7 +384,7 @@
},
{
"offset": {
"x": 0.000753602,
"x": 7.53602E-4,
"y": -1.3993053,
"z": 0.3274431
},
@@ -376,7 +394,7 @@
},
{
"offset": {
"x": 0.000753602,
"x": 7.53602E-4,
"y": -1.3993053,
"z": 0.38156968
},
@@ -386,7 +404,7 @@
},
{
"offset": {
"x": 0.000753602,
"x": 7.53602E-4,
"y": -1.3993053,
"z": 0.3274431
},
@@ -396,7 +414,7 @@
},
{
"offset": {
"x": 0.000753602,
"x": 7.53602E-4,
"y": -1.3993053,
"z": 0.38156968
},
@@ -409,6 +427,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "6"
},
@@ -425,17 +448,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -644,31 +662,31 @@
},
"baseExperienceYield": 350,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "7"
},
"resting": {
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"moving": {
"swim": {
"avoidsWater": true
},
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true
},
"walk": {
"canWalk": false
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
"resting": {
"drowsyChance": 0.0014,
"rouseChance": 0.0042,
"times": [
"any"
]
}
},
"evolutions": [],
@@ -54,8 +54,35 @@
"behaviours": {
"LIQUID": {
"key": "cobblemon:liquid/submarine",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
"hitboxBreachPercentage": 0.9,
"rideSounds": [],
"stats": {
"ACCELERATION": "25-40",
"JUMP": "50-75",
@@ -148,6 +175,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -172,14 +202,11 @@
}
},
"resting": {
"drowsyChance": 0.0014,
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
]
}
},
"drops": {
@@ -54,11 +54,20 @@
"AIR": {
"key": "cobblemon:air/bird",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -244,22 +253,22 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"fly": {
"canFly": true
},
"walking": {
"walkSpeed": 0.2
},
"swim": {
"avoidsWater": true
},
"walking": {
"walkSpeed": 0.2
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -465,19 +474,19 @@
},
"baseExperienceYield": 350,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"swim": {
"avoidsWater": true
},
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -52,7 +52,34 @@
"behaviours": {
"LIQUID": {
"key": "cobblemon:liquid/dolphin",
"rideSounds": [],
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
"stats": {
"ACCELERATION": "55-85",
"JUMP": "45-75",
@@ -145,6 +172,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -172,11 +204,6 @@
"walkSpeed": 0.7
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -356,6 +383,11 @@
},
"baseExperienceYield": 196,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -378,11 +410,6 @@
"avoidsLand": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -144,6 +144,9 @@
]
},
"behaviour": {
"combat": {
"willFlee": false
},
"herd": {
"maxSize": "8"
},
@@ -159,17 +162,14 @@
},
"resting": {
"canSleep": true,
"light": "0-14",
"sleepChance": "0.0023",
"depth": "comatose",
"drowsyChance": 0.0028,
"light": "0-14",
"rouseChance": 0.0028,
"sleepChance": "0.0023",
"times": [
"any"
],
"drowsyChance": 0.0028,
"rouseChance": 0.0028
},
"combat": {
"willFlee": false
]
}
},
"drops": {
@@ -55,11 +55,20 @@
"AIR": {
"key": "cobblemon:air/bird",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -68,7 +77,7 @@
"JUMP": "70-90",
"SKILL": "20-40",
"SPEED": "20-45",
"STAMINA": "40-70"
"STAMINA": "55-80"
}
},
"LAND": {
@@ -79,7 +88,7 @@
"JUMP": "10-20",
"SKILL": "30-50",
"SPEED": "15-25",
"STAMINA": "50-80"
"STAMINA": "55-85"
}
}
},
@@ -245,6 +254,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "6",
"toleratedLeaders": [
@@ -262,23 +276,18 @@
"fly": {
"canFly": true
},
"walk": {
"walkSpeed": 0.147
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.147
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -66,8 +66,35 @@
},
"LIQUID": {
"key": "cobblemon:liquid/submarine",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
"hitboxBreachPercentage": 0.75,
"rideSounds": [],
"stats": {
"ACCELERATION": "30-55",
"JUMP": "25-40",
@@ -160,6 +187,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "6",
"toleratedLeaders": [
@@ -189,12 +219,9 @@
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
}
},
"drops": {
@@ -66,8 +66,35 @@
},
"LIQUID": {
"key": "cobblemon:liquid/submarine",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"submerged": false,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.underwater.stereo",
"submerged": true,
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
"hitboxBreachPercentage": 0.85,
"rideSounds": [],
"stats": {
"ACCELERATION": "20-45",
"JUMP": "40-55",
@@ -1582,6 +1609,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "7",
"toleratedLeaders": [
@@ -1606,13 +1636,10 @@
},
"resting": {
"canSleep": true,
"light": "0-4",
"depth": "comatose",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
}
},
"drops": {
@@ -225,6 +225,10 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"fireImmune": true,
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -245,14 +249,10 @@
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
},
"fireImmune": true
}
},
"drops": {
"amount": 2,
@@ -57,15 +57,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.pow(math.min(math.max(0.5,(q.ride_velocity()*0.5 / 1.5) + 0.5), 1.0),2)",
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.saucer.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -240,6 +258,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "3"
},
@@ -256,18 +279,13 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-14",
"rouseChance": 0.0042,
"sleepChance": "0.0023",
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -54,11 +54,20 @@
"AIR": {
"key": "cobblemon:air/hover",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -81,7 +90,7 @@
"poseOffsets": [
{
"offset": {
"x": 2.9055437e-18,
"x": 2.9055437E-18,
"y": -3.171875,
"z": 0.53125
},
@@ -101,7 +110,7 @@
},
{
"offset": {
"x": 2.9055437e-18,
"x": 2.9055437E-18,
"y": -3.171875,
"z": 0.53125
},
@@ -121,7 +130,7 @@
},
{
"offset": {
"x": 2.9055437e-18,
"x": 2.9055437E-18,
"y": -3.171875,
"z": 0.53125
},
@@ -141,7 +150,7 @@
},
{
"offset": {
"x": 2.9055437e-18,
"x": 2.9055437E-18,
"y": -3.171875,
"z": 0.53125
},
@@ -154,6 +163,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "7",
"toleratedLeaders": [
@@ -176,15 +188,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0033,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"day"
],
"drowsyChance": 0.0033,
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
]
}
},
"drops": {
@@ -52,11 +52,20 @@
"AIR": {
"key": "cobblemon:air/hover",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -152,6 +161,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "4"
},
@@ -168,17 +182,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0033,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"day"
],
"drowsyChance": 0.0033,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -56,11 +56,20 @@
"speed": "Math.clamp(q.entity.velocity.horizontal_magnitude + 0.33, 0, 1)",
"key": "cobblemon:air/jet",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -98,13 +107,21 @@
},
"LIQUID": {
"key": "cobblemon:liquid/boat",
"surfaceLevelOffset": -1.7,
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_sufrace.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.water_surface",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.water_surface.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -114,7 +131,8 @@
"SKILL": "10-25",
"SPEED": "35-60",
"STAMINA": "5-10"
}
},
"surfaceLevelOffset": -1.7
}
},
"seats": [
@@ -167,7 +185,7 @@
},
{
"offset": {
"x": 0.0006860052,
"x": 6.860052E-4,
"y": -2.1426969,
"z": -0.23987202
},
@@ -187,7 +205,7 @@
},
{
"offset": {
"x": 0.0008643751,
"x": 8.643751E-4,
"y": -2.4092257,
"z": -0.33146888
},
@@ -200,6 +218,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "7"
},
@@ -208,8 +231,8 @@
"canFly": true
},
"swim": {
"canSwim": true,
"avoidsWater": true,
"canSwim": true,
"canWalkOnWater": true
},
"walk": {
@@ -218,14 +241,9 @@
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -415,22 +433,22 @@
},
"baseExperienceYield": 350,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "8"
},
"moving": {
"swim": {
"avoidsWater": true
},
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -149,6 +149,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"moving": {
"swim": {
"canBreatheUnderwater": true,
@@ -160,9 +163,6 @@
"walkSpeed": "0.2"
}
},
"combat": {
"willDefendOwner": true
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -327,18 +327,18 @@
"east-sea"
],
"behaviour": {
"moving": {
"walk": {
"avoidsLand": true
},
"swim": {
"canSwimInWater": false,
"canBreatheUnderwater": true
}
},
"combat": {
"willDefendOwner": true
},
"moving": {
"swim": {
"canBreatheUnderwater": true,
"canSwimInWater": false
},
"walk": {
"avoidsLand": true
}
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -224,24 +224,24 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"walk": {
"walkSpeed": 0.2
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.2
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -57,15 +57,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.pow(math.min(math.max(0.5,(q.ride_velocity()*0.5 / 1.5) + 0.5), 1.0),2)",
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.saucer.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.saucer.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -161,6 +179,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9"
},
@@ -177,17 +200,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -73,7 +73,7 @@
"poseOffsets": [
{
"offset": {
"x": 2.4365345e-18,
"x": 2.4365345E-18,
"y": -3.493299,
"z": -1.1497737
},
@@ -93,7 +93,7 @@
},
{
"offset": {
"x": 2.4365345e-18,
"x": 2.4365345E-18,
"y": -3.493299,
"z": -1.1497737
},
@@ -103,7 +103,7 @@
},
{
"offset": {
"x": 2.4365345e-18,
"x": 2.4365345E-18,
"y": -3.493299,
"z": -1.1497737
},
@@ -113,7 +113,7 @@
},
{
"offset": {
"x": 2.4365345e-18,
"x": 2.4365345E-18,
"y": -3.493299,
"z": -1.1497737
},
@@ -133,7 +133,7 @@
},
{
"offset": {
"x": 2.4365345e-18,
"x": 2.4365345E-18,
"y": -3.493299,
"z": -1.1497737
},
@@ -304,6 +304,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "8",
"toleratedLeaders": [
@@ -314,23 +319,18 @@
]
},
"moving": {
"walk": {
"walkSpeed": 0.2
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.2
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -74,7 +74,7 @@
"poseOffsets": [
{
"offset": {
"x": 0.00012022187,
"x": 1.2022187E-4,
"y": -3.0589306,
"z": -0.023141712
},
@@ -147,6 +147,12 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "2"
},
@@ -159,16 +165,10 @@
"walkSpeed": 0.2
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"drops": {
"amount": 2,
@@ -56,15 +56,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.plumage",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.plumage.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.plumage.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -100,7 +118,7 @@
"poseOffsets": [
{
"offset": {
"x": 0.0009571392,
"x": 9.571392E-4,
"y": -1.234365,
"z": 0.35967734
},
@@ -140,7 +158,7 @@
},
{
"offset": {
"x": 0.0009571392,
"x": 9.571392E-4,
"y": -1.234365,
"z": 0.35967734
},
@@ -160,7 +178,7 @@
},
{
"offset": {
"x": 0.0009571392,
"x": 9.571392E-4,
"y": -1.234365,
"z": 0.35967734
},
@@ -173,25 +191,25 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9"
},
"moving": {
"walk": {
"walkSpeed": 0.2
},
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.2
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -55,11 +55,20 @@
"AIR": {
"key": "cobblemon:air/jet",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -168,6 +177,9 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true
},
"herd": {
"maxSize": "8",
"toleratedLeaders": [
@@ -181,21 +193,18 @@
"fly": {
"canFly": true
},
"walk": {
"walkSpeed": 0.14
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.14
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendOwner": true
}
},
"drops": {
@@ -145,6 +145,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -158,21 +163,16 @@
}
]
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"moving": {
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
"resting": {
"canSleep": true,
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
}
},
"drops": {
@@ -168,6 +168,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -181,23 +186,18 @@
"fly": {
"canFly": true
},
"walk": {
"walkSpeed": 0.2
},
"swim": {
"avoidsWater": true
},
"walk": {
"walkSpeed": 0.2
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -376,15 +376,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.plumage",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.plumage.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.plumage.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -393,7 +411,7 @@
"JUMP": "40-60",
"SKILL": "30-50",
"SPEED": "40-65",
"STAMINA": "60-00"
"STAMINA": "60-90"
}
},
"LAND": {
@@ -493,6 +511,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "9",
"toleratedLeaders": [
@@ -503,18 +526,13 @@
]
},
"moving": {
"swim": {
"avoidsWater": true
},
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -384,25 +384,25 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"moving": {
"walk": {
"walkSpeed": 0.15
},
"swim": {
"avoidsWater": true,
"canSwimInWater": false
},
"walk": {
"walkSpeed": 0.15
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
}
},
"drops": {
@@ -147,6 +147,12 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "5",
"toleratedLeaders": [
@@ -157,26 +163,20 @@
]
},
"moving": {
"walk": {
"walkSpeed": 0.3
},
"swim": {
"avoidsWater": true,
"canSwimInLava": true
},
"walk": {
"walkSpeed": 0.3
}
},
"resting": {
"canSleep": true,
"light": "0-4",
"drowsyChance": 0.0333,
"light": "0-4",
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"fireImmune": true
}
},
"drops": {
"amount": 1,
@@ -368,6 +368,11 @@
"width": 1.3
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "5",
"toleratedLeaders": [
@@ -377,26 +382,21 @@
}
]
},
"resting": {
"depth": "comatose",
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"moving": {
"walk": {
"canWalk": false
},
"canLook": false,
"swim": {
"avoidsWater": true,
"canSwimInWater": false
},
"canLook": false
"walk": {
"canWalk": false
}
},
"combat": {
"willDefendOwner": true,
"willFlee": false
},
"fireImmune": true
"resting": {
"depth": "comatose",
"drowsyChance": 0.0333,
"rouseChance": 0.0042
}
},
"moves": [
"1:tackle",
@@ -549,6 +549,11 @@
"h:zenmode"
],
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "5",
"toleratedLeaders": [
@@ -563,11 +568,6 @@
"avoidsWater": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
@@ -745,6 +745,12 @@
},
"baseExperienceYield": 189,
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"fireImmune": true,
"herd": {
"maxSize": "5",
"toleratedLeaders": [
@@ -755,27 +761,21 @@
]
},
"moving": {
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true,
"canSwimInLava": true
},
"walk": {
"canWalk": false
},
"fly": {
"canFly": true
}
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
},
"resting": {
"drowsyChance": 0.0333,
"rouseChance": 0.0042
},
"fireImmune": true
}
},
"drops": {
"amount": 2,
@@ -54,18 +54,36 @@
"AIR": {
"key": "cobblemon:air/rocket",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.driver_input() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.rocket.stereo",
"volumeExpr": "math.pow(math.min((q.driver_input() / 1.5) + (q.ride_velocity() / 1.5), 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.driver_input() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.rocket",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.rocket.mono",
"volumeExpr": "math.pow(math.min((q.driver_input() / 1.5) + (q.ride_velocity() / 1.5), 1.0),2)"
}
],
@@ -331,34 +349,34 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "3"
},
"moving": {
"fly": {
"canFly": true
},
"swim": {
"avoidsWater": true,
"canSwimInWater": false
},
"walk": {
"walkSpeed": 0.35
},
"fly": {
"canFly": true
}
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -57,15 +57,33 @@
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.leather",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.leather.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.leather.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -101,7 +119,7 @@
"poseOffsets": [
{
"offset": {
"x": 8.215185e-05,
"x": 8.215185E-5,
"y": -2.4957511,
"z": 0.10059106
},
@@ -121,7 +139,7 @@
},
{
"offset": {
"x": 8.215185e-05,
"x": 8.215185E-5,
"y": -2.4957511,
"z": 0.10059106
},
@@ -253,6 +271,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "5"
},
@@ -266,17 +289,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {
@@ -53,11 +53,20 @@
"AIR": {
"key": "cobblemon:air/hover",
"rideSounds": [
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": false,
"playForPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind.stereo",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
},
{
"muffleEnabled": true,
"pitchExpr": "math.max(1.0 ,0.2 + math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2))",
"playForNonPassengers": true,
"soundLocation": "cobblemon:ride.loop.wind",
"playForPassengers": false,
"soundLocation": "cobblemon:ride.loop.wind.mono",
"volumeExpr": "math.pow(math.min(q.ride_velocity() / 1.5, 1.0),2)"
}
],
@@ -153,6 +162,11 @@
]
},
"behaviour": {
"combat": {
"willDefendOwner": true,
"willDefendSelf": true,
"willFlee": false
},
"herd": {
"maxSize": "8",
"toleratedLeaders": [
@@ -175,17 +189,12 @@
},
"resting": {
"canSleep": true,
"drowsyChance": 0.0014,
"light": "0-4",
"rouseChance": 0.0042,
"times": [
"any"
],
"drowsyChance": 0.0014,
"rouseChance": 0.0042
},
"combat": {
"willDefendSelf": true,
"willDefendOwner": true,
"willFlee": false
]
}
},
"drops": {

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