Compare commits

...
Author SHA1 Message Date
Tyzillion f298f7a157 Added eating particles. 2025-02-03 20:31:41 -05:00
Tyzillion 7ac54d6d6a I broked the branch. :( So I deleted it and remade it. :) 2025-02-03 13:40:51 -05:00
Paul a9ed3750ad Added the wisdom of broccoli to the new water and air wander tasks 2025-01-31 20:48:35 +10:00
Paul 24fdae725e Merge branch 'main' into smarterer-pokemons 2025-01-31 20:10:17 +10:00
Hiroku 36169db388 Merge branch 'feature/save-file-juggling' into 'main'
old and temp files for everyone

See merge request cable-mc/cobblemon!1484
2025-01-31 07:46:10 +00:00
Paul 1900999a74 Changelogging [skip-ci] 2025-01-31 17:41:56 +10:00
Hiroku ab16814cd2 Merge branch 'fix-setpageondefaultdialoguepage' into 'main'
fix: calling setPages() when initializing the dialogue so default pages can have their timeout scheduled

Closes #1406

See merge request cable-mc/cobblemon!1504
2025-01-31 07:41:29 +00:00
Hiroku 9f622fcd74 Merge branch 'pc-box-2-fix' into 'main'
Fix PC opening on Box 2

See merge request cable-mc/cobblemon!1505
2025-01-31 07:40:16 +00:00
Hiroku 956e2c43b8 Merge branch 'feat-winners-and-losers' into 'main'
feat: set winners and losers on PokemonBattle end

See merge request cable-mc/cobblemon!1501
2025-01-31 07:37:14 +00:00
Hiroku 130f87c9f7 Merge branch 'strip-stripped-log' into 'main'
remove apricorn_stripped_log and apricorn_stripped_log_top as never used

See merge request cable-mc/cobblemon!1502
2025-01-31 07:27:54 +00:00
gbassinello 22b4e8c75f chore: changelog lines 2025-01-31 01:44:50 -03:00
gbassinello c19a3ca444 feat: set winners and losers on battle end 2025-01-31 01:44:50 -03:00
Polymetaandgbassinello a006eb5dcc revert previous attempt and fix camera mode
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-31 01:44:50 -03:00
gbassinello ed419e7e53 fix: removing activeDialogues from the DialogueManager map using the correct key (player uuid) 2025-01-31 01:44:50 -03:00
Hiroku bff2387b4d Merge branch 'feature/particle-fixes' into 'main'
revert previous attempt and fix camera mode

See merge request cable-mc/cobblemon!1506
2025-01-31 04:02:00 +00:00
Polymeta 41544efeba revert previous attempt and fix camera mode
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-30 23:15:08 +00:00
Paul e6e6c9f7f6 Merge remote-tracking branch 'origin/main' 2025-01-31 08:31:31 +10:00
Paul 22d8e39db3 back to snapshots 2025-01-31 08:31:17 +10:00
Paul 71fc844905 Wander water, air wander 2025-01-31 08:28:55 +10:00
Hiroku bfdf1e9e6c Merge branch 'fix-activedialoguesmapkey' into 'main'
fix: removing activeDialogues from the DialogueManager map using the correct key (player uuid)

Closes #1405

See merge request cable-mc/cobblemon!1503
2025-01-30 22:19:22 +00:00
BuildTools c3fccfde09 Fix PC opening on Box 2 because default value for 'box' in OpenPCPacket was '1' instead of '0' 2025-01-30 21:48:18 +02:00
gbassinello 4bb8d43a6e fix: calling setPages() when initializing the dialogue so default pages can have their timeout scheduled 2025-01-30 13:50:18 -03:00
gbassinello fda4b67776 fix: removing activeDialogues from the DialogueManager map using the correct key (player uuid) 2025-01-30 13:34:52 -03:00
Xander Forrest f1ee9d45de remove apricorn_stripped_log and apricorn_stripped_log_top as never used 2025-01-28 19:39:28 +00:00
Paul 24910778d4 Shoved molang structs in more places, you can't stop me 2025-01-27 16:53:44 +10:00
Paul 363c3e5f0a Merge remote-tracking branch 'origin/main' into smarterer-pokemons 2025-01-27 16:36:52 +10:00
Polymeta 01f7d13e3f update tag and preset list [skip-ci]
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-26 21:32:32 +00:00
Paul d85e30f3a6 But what if we didn't break the yarn mapping 2025-01-26 22:15:17 +10:00
Paul e6f147bd94 Changelog [skip-ci] 2025-01-26 09:34:42 +10:00
Paul c66de51e39 Snapnoshot 2025-01-26 08:53:26 +10:00
Hiroku 7d552735f3 Merge branch 'implement_pokemon' into 'main'
Wobbuffix (and charcadet)

See merge request cable-mc/cobblemon!1500
2025-01-25 22:32:19 +00:00
Carmendar 94c42e7e2c Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-25 16:27:21 -06:00
Carmendar ef4690d4fe Wobbuffet -w- 2025-01-25 16:26:48 -06:00
Polymeta 433c0ff345 Merge remote-tracking branch 'refs/remotes/origin/lang-updates' 2025-01-25 21:00:42 +00:00
FrankTheFarmer 59d42fb328 Updated Charcadet's eye height. Git being dumb 2025-01-26 06:19:18 +10:00
Gustavo PuerariandWeblate 17d6837e34 Translated using Weblate (Portuguese (Brazil))
Currently translated at 42.1% (2695 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-25 10:01:29 +00:00
Carmendar 34b4337849 Updated Eiscue Noice lang 2025-01-25 03:14:00 -06:00
Paul 392e8663be Merge remote-tracking branch 'origin/main' 2025-01-25 14:29:28 +10:00
Paul 578ff37705 More tweaks to bucket jumps for luck of the sea enchants 2025-01-25 14:29:18 +10:00
Hiroku 77406f91a3 Merge branch '1.6.1-spawns' into 'main'
Fixes to some spawns and tags.

See merge request cable-mc/cobblemon!1498
2025-01-25 02:08:20 +00:00
Polymeta 9bf526e93e deleted typo'd amoonguss file
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-25 02:00:33 +00:00
Veraxiel 29b763ef19 Updated spawns and tags. 2025-01-24 20:40:50 -05:00
Polymeta 938b7a7a94 flip UVs to make particle sprite point the other direction
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-25 01:38:00 +00:00
Paul f920639e3f Protect luck of the sea adjustments against custom buckets 2025-01-25 11:35:10 +10:00
Paul 8d336fca3e Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/FormData.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Species.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/EntityExtensions.kt
#	common/src/main/resources/data/cobblemon/flows/battle_victory/npc_battle_end_scripts.molang
#	common/src/main/resources/data/cobblemon/species/generation1/growlithe.json
#	common/src/main/resources/data/cobblemon/species/generation1/raticate.json
#	common/src/main/resources/data/cobblemon/species/generation3/zigzagoon.json
2025-01-25 11:25:57 +10:00
Paul ea499a935e Updated fishing bucket rates 2025-01-25 11:02:58 +10:00
Hiroku 1dbe5eb944 Merge branch 'npc-hide-nametag' into 'main'
Added hideNameTag field for NPCs

See merge request cable-mc/cobblemon!1488
2025-01-25 00:47:59 +00:00
Paul dba0bae810 Corrected luck of the sea bucket weights and simplified calculation code 2025-01-25 10:37:19 +10:00
Paul 8c04081af5 Fixed uncaught exception from fishing reeling in blocked entity spawns 2025-01-25 10:00:50 +10:00
Paul ff27676187 Started playing around with more generalised wandering through mediums 2025-01-25 09:48:23 +10:00
Hiroku d7de4b2463 Merge branch 'test/fix_targeting_variant' into 'main'
Fix default form in battle targeting

Closes #1376

See merge request cable-mc/cobblemon!1496
2025-01-24 22:58:15 +00:00
aeroeng15andHiroku 61b767158a Fix default form in battle targeting 2025-01-24 22:58:15 +00:00
Hiroku f2f16cdc9e Merge branch 'implement_pokemon' into 'main'
Merge implement into main

See merge request cable-mc/cobblemon!1497
2025-01-24 22:57:45 +00:00
Deltric 2aec4f972f Updated npc name tag hiding to allow individual entity based hiding. 2025-01-24 04:23:02 -06:00
Deltric bc8164cf17 Merge remote-tracking branch 'origin/npc-hide-nametag' into npc-hide-nametag 2025-01-24 04:22:09 -06:00
Deltric a09cf1b93d Updated NPC README.md with hideNameTag field. 2025-01-24 04:11:29 -06:00
Deltric b436c42cb1 Hide name tag field for NPCs 2025-01-24 04:11:29 -06:00
Polymeta 79b83bc8d7 Merge branch 'test/held_item_evos' into 'main'
Fix held items disappearing for evolutions on re-logs

Closes #1378

See merge request cable-mc/cobblemon!1495
2025-01-24 08:22:25 +00:00
aeroeng15andPolymeta a6b5453b34 Fix held items disappearing for evolutions on re-logs 2025-01-24 08:22:25 +00:00
Carmendar 7fcb9e8b4d Riolu can stare into your soul, Charizard now uses all of his quirks, Corphish & Crawdaunt no longer T-pose. 2025-01-24 02:19:37 -06:00
Hiroku f3740abd39 Merge branch 'sound-packet-updates' into 'main'
Updated UnvalidatedPlaySoundS2CPacket to be public instead of internal and made its fields mutable.

See merge request cable-mc/cobblemon!1494
2025-01-24 06:54:55 +00:00
Hiroku e4decf50ea Merge branch 'spawn-packet-updates' into 'main'
Updated spawn packet visibility and mutability for Pokemon & NPCs

See merge request cable-mc/cobblemon!1489
2025-01-24 04:47:30 +00:00
Hiroku 22d33ac5d8 Merge branch '#1377-npc-held-items-bug' into 'main'
[#1377] Fixed held items being stolen from NPCs

Closes #1377

See merge request cable-mc/cobblemon!1490
2025-01-24 04:46:48 +00:00
DeltricandHiroku f2392db3be [#1377] Fixed held items being stolen from NPCs 2025-01-24 04:46:48 +00:00
Hiroku 9fed44328f Merge branch '#1374-fix-evolution-mid-battle' into 'main'
[#1374] Fixed Pokémon being able to evolve mid-battle

Closes #1374

See merge request cable-mc/cobblemon!1491
2025-01-24 04:46:36 +00:00
Hiroku 26d0340fb5 Merge branch 'sterr/sounds' into 'main'
Sound fixes

See merge request cable-mc/cobblemon!1493
2025-01-24 04:45:06 +00:00
Gustavo PuerariandWeblate 21f2945dc4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 41.4% (2648 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-24 04:01:50 +00:00
Deltric 16a5316a69 Updated UnvalidatedPlaySoundS2CPacket to be public instead of internal and made its fields mutable. 2025-01-23 19:02:14 -06:00
Paul 1fd5d0ff4b Added following owner, resting to Brain AI, restructured base Species AI definitions, fixed DrowsySensor not modulo'ing time 2025-01-24 09:24:15 +10:00
Deltric 378a5ca401 Update evolution handler to disallow evolving while player is in battle. 2025-01-23 17:01:21 -06:00
Konoha d956ca2c3c Re-prep Inkay Easter Egg Evos :) 2025-01-23 17:25:35 -05:00
Deltric 14a079fae1 Updated NPC README.md with hideNameTag field. 2025-01-23 15:44:47 -06:00
Sterrezo 3e9331ec64 Updated the evolution sound to match the particle effect timing better 2025-01-23 22:34:19 +01:00
Sterrezo a7c43701c0 Wild shiny sounds now respect the shinyNoticeParticlesDistance config setting 2025-01-23 22:12:13 +01:00
Kenji_64 34aef306c1 Fixed shiny Flygon's goggles texture 2025-01-23 20:07:47 +01:00
Deltric b4e99204c8 Fixed Pokémon being able to evolve mid-battle 2025-01-23 03:21:04 -06:00
Deltric 8c09cebc59 Updated spawn packet visibility and mutability for Pokemon & NPCs 2025-01-23 01:54:48 -06:00
Deltric b5bfe44196 Hide name tag field for NPCs 2025-01-23 01:45:58 -06:00
Carmendar 38c5fcc23f Applied gravity to Arctozolt profile 2025-01-22 21:51:15 -06:00
Carmendar 9edfa279be Lucario can finally look at your aura. (can turn head) 2025-01-22 21:18:24 -06:00
Carmendar 2769d5560d Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-22 21:02:43 -06:00
Carmendar ed7d2d5d2a Hitbox fixes for Eiscue and Golem. 2025-01-22 21:02:09 -06:00
Test d839a13b7e Merge branch 'feature/my-fren' into 'main'
fix trading crashes

Closes #1336

See merge request cable-mc/cobblemon!1487
2025-01-23 00:56:36 +00:00
Test a23cd170b2 Merge branch 'test/split_pokedex_types' into 'main'
Split type strings in Pokedex view

Closes #1372

See merge request cable-mc/cobblemon!1485
2025-01-23 00:32:27 +00:00
aeroeng15andTest 3dec294728 Split type strings in Pokedex view 2025-01-23 00:32:26 +00:00
Polymeta c67cf2e05d validate event output from FRIENDSHIP_UPDATED event and also fix logic in internal handlers for friendship boosters
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-23 00:16:54 +00:00
Kenji_64 3b96beef36 Adjustments for Krokorok's/Krookodile's sand walk speed 2025-01-23 00:03:27 +01:00
Kenji_64 dcbac52fd7 Some Seaking animation and walk speed edits 2025-01-22 23:52:30 +01:00
Kenji_64 64dd8336c6 Made Krookodile's/Krokorok's look quirk rarer 2025-01-22 23:52:08 +01:00
Polymeta 2681cdc5ba Merge branch '1.6.1-spawns' into 'main'
Updated spawn files. Added Aether compat. Fixed errors with some conditions. Updated tags.

See merge request cable-mc/cobblemon!1486
2025-01-22 09:25:08 +00:00
Hiroku 8d265bd820 Merge branch 'features/help-is-on-the-way' into 'main'
more fixes

Closes #1365 and #1355

See merge request cable-mc/cobblemon!1482
2025-01-22 08:27:24 +00:00
PolymetaandHiroku 6b43e5d99d more fixes 2025-01-22 08:27:24 +00:00
washashu0905andWeblate b430b8a1b4 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 79.6% (5091 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hant/
2025-01-22 01:05:35 +00:00
TeggyandWeblate 329810407a Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-01-22 01:05:33 +00:00
Polymeta 6ca04bb064 Update 2 files
- /common/src/main/resources/data/cobblemon/spawn_pool_world/0591_amoongus.json
- /common/src/main/resources/data/cobblemon/spawn_pool_world/0591_amoonguss.json
2025-01-22 00:24:16 +00:00
Veraxiel ebf0144222 Removed space spawns for now. 2025-01-21 18:50:54 -05:00
Konoha a71cfaadc8 Toggleable Mooshtank var. in dex
Also stubs unimplemented branch regional evolutions (Avalugg/Weezing/Mr. Mime) + biome fix to fix chat spam in nether during night.
2025-01-21 11:17:02 -05:00
Konoha 31195dacdb Resolve invalid Molang expression for Golem sleep anim 2025-01-21 09:57:35 -05:00
Polymeta 4074aa50ce refactor storage layer and introduce .old filetype as a stopgap for file corruption during crashes
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-21 02:14:35 +00:00
Konoha 107ec7634d Temp-Swap Unsupported Evo Item References & Sidemod Tutor Support
Temporarily exchanges items that aren't in Cobblemon referenced on some species with items that are, avoiding the crash that would occur when Bisharp's evolution was parsed.
Adds a new utility script to mass-manage TM/Tutor moves from the movepool.
Reintroduces the "tutor" subset of TMs for addons that utilize the source already.
More aggressive culling on unplanned base-mod TM moves from level/egg pools, this prevents breakage with addons using the "lazy" way of only pulling the source in species data. Doing this will eventually break custom TMs in the TMM, so it is recommended that addons/plugins migrate to global lists of TMs for interfacing moves instead of just pulling "tm:" for each species.
Also re-preps the aspect format for Keldeo's species feature to match others.
2025-01-20 16:16:28 -05:00
Hiroku ed85de34b3 Merge branch 'feature/small-fixes-berrylicious' into 'main'
small fixes

Closes #1343

See merge request cable-mc/cobblemon!1480
2025-01-20 12:15:42 +00:00
Polymeta 6dbf1288a0 fix berry bonus yield and sodium dynamic lights compatibility (also small version bumps)
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-20 11:38:01 +00:00
Hiroku aee915dc91 Merge branch 'fix-evolution-dropping-held-item' into 'main'
Fix evolution dropping held item

Closes #1361

See merge request cable-mc/cobblemon!1481
2025-01-20 07:26:53 +00:00
Luan Nadaletti a1974fbe74 add held item autocomplete 2025-01-20 02:28:36 -03:00
Luan Nadaletti 145481530d fix evolution dropping held item 2025-01-20 02:27:56 -03:00
GenotypeXD-Dev b5694b4e13 Palm tree texture fix 2025-01-19 16:18:56 -07:00
GenotypeXD-Dev 9df4669865 Oops animations and model didnt push 2025-01-19 16:14:16 -07:00
GenotypeXD-Dev 92543f9aed Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-19 16:13:17 -07:00
GenotypeXD-Dev 5d5cb3a240 Implement Alolan Exeggutor Remodel 2025-01-19 16:13:07 -07:00
Hiroku 452117c781 Edit CHANGELOG.md 2025-01-19 22:11:37 +00:00
Konoha bc267ec72b Correct "Undiscovered" form oversight with data tag culling
This only affects the 3 forms who are in the undiscovered group and had accidentally inherited the base form's egg groups during the culling script's comparison, and did not have handling for their "legacy" movesets not totally covered by newer games.
2025-01-19 17:09:33 -05:00
Hiroku 33a2a0a8e0 Edit CHANGELOG.md 2025-01-19 20:29:34 +00:00
Hiroku dac1b3cbf0 Merge branch 'pc-command-box-arg' into 'main'
Added box number argument to PC command.

See merge request cable-mc/cobblemon!1477
2025-01-19 20:25:07 +00:00
Kenji_64 6d89b737a7 Added flame animations to Charcadet 2025-01-19 21:02:53 +01:00
Kenji_64 53e540472a Fixed Eiscue's scale (1 -> 0.85) 2025-01-19 21:02:33 +01:00
Konoha e2804dc83f Reimplement non-Torterra wood choices to Cobblemon Tree feature. 2025-01-19 09:53:16 -05:00
Paul 46752a3911 Pokemon pausing in battles (like the good old days) 2025-01-19 20:31:37 +10:00
TeggyandWeblate 82e82cb28e Translated using Weblate (Spanish)
Currently translated at 99.3% (6350 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-01-19 05:07:47 +00:00
Hiroku 052fee56a1 Merge branch 'drop-fixes' into 'main'
Drop fixes

See merge request cable-mc/cobblemon!1479
2025-01-19 05:00:08 +00:00
Hiroku 15970f2ab0 Merge branch 'open-player-instanced-data-store' into 'main'
Mark PlayerInstancedDataStoreManager as open alongside methods.

See merge request cable-mc/cobblemon!1478
2025-01-19 03:18:11 +00:00
Paul 3874867b74 Changelog 2025-01-19 13:15:57 +10:00
Paul ed6485f1d3 Merge remote-tracking branch 'origin/lang-updates' 2025-01-19 13:12:26 +10:00
Deltric c7b1036bdf Wrong index for openOnBox default. 2025-01-18 21:06:45 -06:00
Deltric 8730ff3a3e Mark PlayerInstancedDataStoreManager as open alongside methods. 2025-01-18 21:05:42 -06:00
Deltric c8bd7c8604 Added box number argument to PC command. 2025-01-18 20:59:50 -06:00
Hiroku b049a39680 Merge branch 'fix-stat-evolution-requirement-crash' into 'main'
Fix 'defence' stat evolution requirement crashing the game

See merge request cable-mc/cobblemon!1476
2025-01-19 02:57:21 +00:00
Paul 6503b0806a Ran drops script again 2025-01-19 12:48:16 +10:00
Hiroku ef0e785855 Merge branch 'fishing_templates-begone!' into 'main'
Make it so only 1 fishing template fished up at a time (not 3+)

See merge request cable-mc/cobblemon!1474
2025-01-19 02:46:34 +00:00
Hiroku cccd30a284 Merge branch 'more-useful-pokedex-event' into 'main'
Rework pokedex events to actually be useful (always have a Pokemon instance)

See merge request cable-mc/cobblemon!1473
2025-01-19 02:45:21 +00:00
Paul be35e937d9 Merge remote-tracking branch 'origin/main' into drop-fixes
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation3/deoxys.json
#	common/src/main/resources/data/cobblemon/species/generation5/samurott.json
#	common/src/main/resources/data/cobblemon/species/generation5/zorua.json
#	common/src/main/resources/data/cobblemon/species/generation8/zacian.json
#	common/src/main/resources/data/cobblemon/species/generation8/zamazenta.json
2025-01-19 12:38:07 +10:00
Hiroku 5a73456202 Merge branch 'implement_pokemon' into 'main'
An implementation merge request, your majesty

See merge request cable-mc/cobblemon!1475
2025-01-19 02:32:13 +00:00
Guilherme Pereira 089e6c15da fix 'defence' stat evolution requirement crashing the game 2025-01-18 23:15:14 -03:00
Hiroku 4f63c40096 Merge branch 'main' into 'implement_pokemon'
# Conflicts:
#   common/src/main/resources/data/cobblemon/species/generation1/grimer.json
#   common/src/main/resources/data/cobblemon/species/generation1/muk.json
2025-01-19 01:54:09 +00:00
Paul 218d33d78d Corrected None-form defect in drops 2025-01-19 11:25:01 +10:00
Sterrezo dae5445c3a Added cries for Nidorans and Pinsir. Fixed Mudkip line and Hitmontop cries that got lost in implementation 2025-01-19 00:55:20 +01:00
Konoha 57f9d5b6dc Reimplement Assignments to Cobblemon Tree feature. 2025-01-18 18:15:33 -05:00
Konoha fdfa10f5fe Reimplement Cobblemon Vivillon patterns to feature choice! 2025-01-18 18:14:30 -05:00
Plastered_Crab e12a1df252 Get those heaps of fishing templates out of my water! 2025-01-18 14:31:41 -08:00
Konoha 69e74be5e5 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-18 17:26:03 -05:00
Konoha 8c9ee22547 We don't like special characters.
But we should probably retain them for compat anyways.
2025-01-18 17:25:49 -05:00
Kenji_64 c8074dd825 Fixed Tauros Blaze and Aqua Breeds using the wrong poser 2025-01-18 23:25:14 +01:00
Kenji_64 bda5e2ade2 Fixed Pinsir's scale + walk speed 2025-01-18 23:24:49 +01:00
Kenji_64 0c5118b840 Added Galarian Slowking's animations 2025-01-18 23:23:42 +01:00
Kenji_64 0d0eaf2465 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-18 23:21:44 +01:00
Kenji_64 4eb90400aa Fixed Galarian Slowpoke's walk speed 2025-01-18 23:21:12 +01:00
Kenji_64 7387612f0e Fixed Munchlax and Snorlax insomnia (sweet dreams) 2025-01-18 23:17:38 +01:00
Kenji_64 5188318f20 Added Eiscue's new animations + fixed it walk speed 2025-01-18 23:17:06 +01:00
GenotypeXD-Dev 627ee5e9b2 Add Implemented tag to foongus and Ducklett line 2025-01-18 15:13:46 -07:00
Kenji_64 7f3bd8bec2 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-18 23:01:39 +01:00
Konoha db70a0f816 Duplicate Key Culling & Inheritance
Cuts down on file size by culling duplicate species data keys. Inherits the necessary implementation keys if only a selection of differences are present.
Removes empty behaviour keys.
2025-01-18 16:21:21 -05:00
Kenji_64 ab9a66c556 Fixed female Seaking's model 2025-01-18 22:19:09 +01:00
Konoha f5e1dfe080 Toxel Pre-Implementation Evo
Corrects the feature requirement on the newly generated Toxel evolution.
2025-01-18 15:01:39 -05:00
Konoha 175aa93284 Last of implemented form corrections.
Resolves the base form of Shellos and Gastrodon to "West Sea," solving an issue where the dex would default to "East Sea" when the entry was given via command, locking the player out of viewing the West Sea.
Fixes an oversight where "Season" was parsed as "Sea" on Deerling and Sawsbuck's form aspects.
2025-01-18 11:32:55 -05:00
Konoha b7926a70ab "Permanent" evo tag implementation. It was new, sorry!
Incorporates the "permanent" evo tag onto scraper gen, resolving an issue with the 3 species that required it aside from Milcery and fixing an oversight where Milcery's evos would be cut off.
Alcremie evolutions now work "as intended" and no longer require 1 sweet per cream, but rather 1 sweet being consumed for the "under 5 seconds" spin and an additional sweet consumed for the "over 5 seconds" spin. Any more than two sweets was excessive.
2025-01-18 10:17:22 -05:00
Konoha 28f2caff58 "Permanent" evo tag implementation. It was new, sorry!
Incorporates the "permanent" evo tag onto scraper gen, resolving an issue with the 3 species that required it aside from Milcery and fixing an oversight where Milcery's evos would be cut off.
Alcremie evolutions now work "as intended" and no longer require 1 sweet per cream, but rather 1 sweet being consumed for the "under 5 seconds" spin and an additional sweet consumed for the "over 5 seconds" spin. Any more than two sweets was excessive.
2025-01-18 10:15:25 -05:00
Konoha 128451785f Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-18 08:36:17 -05:00
Wi2tert 0171ed9747 add "implemented": true 2025-01-18 21:30:59 +08:00
Paul 1fb09e27fc Rework pokedex events to actually be useful (always have a Pokemon instance) 2025-01-18 21:04:06 +10:00
Paul 30a3d6ed83 Updated drops, fixed drops script 2025-01-18 20:02:04 +10:00
Veraxiel 4aa4c229fa Updated spawn files. Added Aether and space mod compat. Fixed errors with some conditions. Updated tags. 2025-01-18 03:32:57 -05:00
Wi2tert 18cecc68dd Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-18 16:09:15 +08:00
Wi2tert 5036ed0db1 fixes Karrablast shelmet Line Missing texture 2025-01-18 16:08:58 +08:00
Konoha 3b3150fc72 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-17 23:44:33 -05:00
Sterrezo b9fb970ec4 Added trailer cries, updated Sceptile's cry 2025-01-18 05:43:52 +01:00
Hiroku 761b306590 Merge branch 'implement_pokemon' into 'main'
Pokemon Implementation

Closes #1230 and #1137

See merge request cable-mc/cobblemon!1472
2025-01-18 04:22:13 +00:00
Konoha 1e7dfce918 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation5/shelmet.json
2025-01-17 23:04:06 -05:00
Konoha a453199eae It was new, sorry!
Reimplements the new Shelmet/Karrablast evo method.
2025-01-17 23:00:52 -05:00
GenotypeXD-Dev f5267c832f Add implemented tag to rufflet/Dewpider lines 2025-01-17 20:44:23 -07:00
GenotypeXD-Dev 7f6e0c0377 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation5/braviary.json
#	common/src/main/resources/data/cobblemon/species/generation5/rufflet.json
#	common/src/main/resources/data/cobblemon/species/generation7/araquanid.json
#	common/src/main/resources/data/cobblemon/species/generation7/dewpider.json
2025-01-17 20:41:58 -07:00
GenotypeXD-Dev 420d42b36d Added implemented tag to rufflet/Dewpider lines 2025-01-17 20:39:02 -07:00
Tyzillion a45028d83b Palean Tauros < Paldean Tauros 2025-01-17 22:23:42 -05:00
Tyzillion 76ab7e998b Removed duplicate category on changelog. 2025-01-17 22:20:35 -05:00
Tyzillion cbbfa974aa Updated Changelog and merged main to branch. 2025-01-17 22:16:08 -05:00
Tyzillion 9dc6649eb7 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	common/src/main/resources/data/cobblemon/dex_entries/pokemon/galar/dubwool.json
#	common/src/main/resources/data/cobblemon/species/generation5/petilil.json
#	common/src/main/resources/data/cobblemon/species/generation9/dudunsparce.json
#	common/src/main/resources/data/cobblemon/species/generation9/palafin.json
2025-01-17 22:13:08 -05:00
Tyzillion 97ef0dda0a Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-17 21:53:23 -05:00
Paul 76ad22b53d License and registration please 2025-01-18 10:01:10 +10:00
Paul a2ddcaebf8 Minor refactors for Pokemon brains to use brain configs rather than pure presets, translated sleep tasks to data 2025-01-18 09:59:28 +10:00
Hiroku 71334dc889 Merge branch 'lion-eats-bugs' into 'main'
Small fixes

Closes #1198

See merge request cable-mc/cobblemon!1471
2025-01-17 23:49:58 +00:00
lionandHiroku 4d8c4b1d7b Small fixes 2025-01-17 23:49:58 +00:00
Hiroku 0701380a36 Merge branch 'the_great_scraper_migration' into 'implement_pokemon'
Migrate species data to accurate sourcing (and fixes)

See merge request cable-mc/cobblemon!1452
2025-01-17 23:47:25 +00:00
Konoha 2b03e5660e Nicely asking the giant centipede not to crush me in my sleep. 2025-01-17 18:08:11 -05:00
Konoha b44a53efce Merge branch 'implement_pokemon' into the_great_scraper_migration
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation1/golem.json
#	common/src/main/resources/data/cobblemon/species/generation1/graveler.json
#	common/src/main/resources/data/cobblemon/species/generation5/braviary.json
#	common/src/main/resources/data/cobblemon/species/generation5/rufflet.json
#	common/src/main/resources/data/cobblemon/species/generation5/sandile.json
#	common/src/main/resources/data/cobblemon/species/generation7/araquanid.json
#	common/src/main/resources/data/cobblemon/species/generation7/dewpider.json
2025-01-17 17:58:55 -05:00
Konoha 5678776938 Restricted label for competitive rules. 2025-01-17 16:49:42 -05:00
Konoha f3985d8250 Refactors form moves back to form_change.
Adds the Pink Flower as a dex variation.
Re-adds alternate "striped" key for "fish_stripes"
Corrects scraper generated sweet_decoration back to just decoration
2025-01-17 16:30:16 -05:00
Konoha b497c603ca Re-runs the scrape against latest implementation.
Implements Delibird and dex variation for Mooshtank.
2025-01-17 15:23:58 -05:00
Konoha b9807773ee Merge branch 'refs/heads/implement_pokemon' into the_great_scraper_migration
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation1/snorlax.json
#	common/src/main/resources/data/cobblemon/species/generation1/tauros.json
#	common/src/main/resources/data/cobblemon/species/generation2/wobbuffet.json
#	common/src/main/resources/data/cobblemon/species/generation4/munchlax.json
#	common/src/main/resources/data/cobblemon/species/generation4/piplup.json
#	common/src/main/resources/data/cobblemon/species/generation5/accelgor.json
#	common/src/main/resources/data/cobblemon/species/generation5/amoonguss.json
#	common/src/main/resources/data/cobblemon/species/generation5/ducklett.json
#	common/src/main/resources/data/cobblemon/species/generation5/escavalier.json
#	common/src/main/resources/data/cobblemon/species/generation5/karrablast.json
#	common/src/main/resources/data/cobblemon/species/generation5/shelmet.json
#	common/src/main/resources/data/cobblemon/species/generation5/swanna.json
#	common/src/main/resources/data/cobblemon/species/generation6/barbaracle.json
#	common/src/main/resources/data/cobblemon/species/generation6/binacle.json
#	common/src/main/resources/data/cobblemon/species/generation8/kubfu.json
#	common/src/main/resources/data/cobblemon/species/generation8a/basculegion.json
#	common/src/main/resources/data/cobblemon/species/generation9/armarouge.json
#	common/src/main/resources/data/cobblemon/species/generation9/ceruledge.json
#	common/src/main/resources/data/cobblemon/species/generation9/gimmighoul.json
#	common/src/main/resources/data/cobblemon/species_feature_assignments/tauros_bull_breed.json
#	common/src/main/resources/data/cobblemon/species_features/bull_breed.json
2025-01-17 13:20:34 -05:00
Hiroku aba02d7b53 Merge branch 'youre-telling-me-theres-a-second-loader-worth-of-tags' into 'main'
Tag Changes (Everything)

Closes #1350

See merge request cable-mc/cobblemon!1464
2025-01-17 09:19:42 +00:00
Hiroku 0eef30af4a Merge branch 'fix-pasture-overlap-when-draggin-pokemon' into 'main'
Fix pasture overlap when dragging Pokémon on PC

See merge request cable-mc/cobblemon!1469
2025-01-17 06:44:53 +00:00
pv 3a064c7269 Merge branch cobblemon:main into fix-pasture-overlap-when-draggin-pokemon 2025-01-17 05:58:14 +00:00
Luan Nadaletti 1cece70687 fix Pasture overlap being overlapped from selected Pokemon 2025-01-17 02:56:24 -03:00
dhi_holo c2d85df3e0 Merge branch 'main' into youre-telling-me-theres-a-second-loader-worth-of-tags 2025-01-17 11:04:36 +10:00
dhi_holo a7c0242575 Update CobblemonItemTags.kt
I don't get how that got there, legitimately. Only idea I have is when I auto-pilot typed in createTag (which is what the block file uses) while doing the items, it auto-imported it.
2025-01-17 11:04:29 +10:00
Hiroku 97a7554e79 Merge branch 'hanging-in-there' into 'main'
Close Combat Crossover Collab... Paintings

Closes #853

See merge request cable-mc/cobblemon!1466
2025-01-16 22:52:06 +00:00
Hiroku 77108ae687 Merge branch 'fix-karrablast-trade-evolution' into 'main'
Fix Karrablast trade evolution

See merge request cable-mc/cobblemon!1465
2025-01-16 22:30:34 +00:00
lionandHiroku 413271546f Fix Karrablast trade evolution 2025-01-16 22:30:34 +00:00
Hiroku 75e3c4be7a Merge branch 'fortunate-tweaking' into 'main'
Breaking Crop Improvements

See merge request cable-mc/cobblemon!1467
2025-01-16 22:26:04 +00:00
Hiroku 7891347d90 Merge branch 'fix-fast-ball-capture-rate' into 'main'
Fix Fast Ball capture rate ignoring Pokémon stat

Closes #1352

See merge request cable-mc/cobblemon!1468
2025-01-16 21:37:51 +00:00
Luan Nadaletti 0a9b1c5c97 fix fast ball capture rate 2025-01-16 17:39:46 -03:00
dhi_holo 89d86aa6e3 Probably Pointless
Updated the block and item tag kt files to be up to date with all current tags, not touching biome stuff because I don't want to process that, I don't *think* there's a reason for me to make sure it's all referenced, but I was thinking it over, and it's better safe than having addon mod devs shouting at me in 7 months when the list is twice as long or something. Probably.
2025-01-16 21:47:41 +10:00
dhi_holo fd45dacad2 Update CHANGELOG.md
no other crops needed tweaking after investigation, so reworded and finalized
2025-01-16 21:01:47 +10:00
dhi_holo a336f0968a Fortunate Mints
Mint seeds can drop a couple more with fortune, cleaned up the loot tables a touch
2025-01-16 20:21:41 +10:00
Gustavo PuerariandWeblate df852ace9b Translated using Weblate (Portuguese (Brazil))
Currently translated at 41.2% (2634 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-16 06:28:25 +00:00
dhi_holo 9d6ae6952c Pick Up Your Berries!
Breaking any age 0 berries will drop their item again
2025-01-16 08:53:24 +10:00
dhi_holo 19c6f98ea4 Phase 1: Proof of Concept
Oran Berries now drop themselves when broken at growth age 0
Tomorrow, the other 68 berries.
2025-01-15 23:28:49 +10:00
Paul 6fc725b6ff Fixed wandering being busted due to the pathfinding malus override (will make fliers less keen to land) 2025-01-15 20:49:58 +10:00
Carmendar dbc1674416 Added new anims for the Sandile line (Extra sandy!), and fixed Slaking's portrait. 2025-01-15 00:56:14 -06:00
dhi_holo 3e8c0ed14e Finally, we have them all
Closes #853 after 7 months of having it on my to-do list. Happy Crossovers!
2025-01-15 16:35:21 +10:00
GenotypeXD-Dev 5f8ee45f1e Added Flight/Swim behavior to Rufflet/Dewpider lines 2025-01-14 22:34:42 -07:00
GenotypeXD-Dev 5f3e1fb395 Implement Rufflet and Braviary 2025-01-14 20:29:55 -07:00
GenotypeXD-Dev 4befb0a16a Implement Dewpider and Araquanid 2025-01-14 20:18:11 -07:00
RedGenesectNinja aab55966a8 Fixed Foongus and Amoonguss not using shiny textures when shiny 2025-01-14 20:03:35 -06:00
Kenji_64 746c29c6f6 Added tap_quirk anim to Armarouge 2025-01-14 17:18:47 +01:00
Kenji_64 0c31f14b15 Implemented Geodude line remodel + added Alolan variant. Translated their posers to json (wild_sleep not working yet) 2025-01-14 17:18:10 +01:00
Paul 01efc8d9e0 Task and brain configs are able to check the entity when providing variable list 2025-01-14 22:19:12 +10:00
Tyzillion e565426291 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-13 21:13:24 -05:00
Kenji_64 6f115e44e3 Deleted old posers for Armarouge and Ceruledge 2025-01-13 20:43:59 +01:00
Kenji_64 dd161c2d53 Fixed minor errors in Ceruledge's GEO, fixed the blink animation and interpolation of battle_intro in the poser 2025-01-13 20:43:31 +01:00
Konoha 50500ab204 Minor Asset Corrections and Refactor
Corrects the "klwaf" typo to "klawf".
Reverts "rhyperior_brown" back to "rhyperior" as it was pre-1.6.
Bulbasaur and Ivysaur's new gender differences refactored to follow the format every other gender difference does.
Refactors the Bagon line's resolver folders to have the padded dex number every other line has.
2025-01-13 13:26:40 -05:00
Kenji_64 169c406f03 Adjusted the interpolation of Armarouge's special attack (thank you Hobo) 2025-01-13 18:56:44 +01:00
dhi_holo 985691958f Hopefully Final Cleanup
Doing final tests before submitting a merge request.
2025-01-13 22:03:51 +10:00
Kenji_64 d972b2f998 Added new GEO for Goldeen and implemented animations. Fixed a naming error in Seaking's poser as well 2025-01-13 12:36:18 +01:00
Kenji_64 5dc03a71f6 Fixed Armarouge's battle cry not playing and added a missing texture (oopsie) 2025-01-13 12:04:28 +01:00
dhi_holo 6535dd950a Tweaks
As Shelmet-Karrablast is being implemented, altered the advancement to use the new item, added the item to the item tag, and also some more block tag improvements as I work on those more
2025-01-13 19:47:52 +10:00
dhi_holo 840d7f50ee Error Fixing 2025-01-13 18:21:01 +10:00
dhi_holo 1d7da21e69 Big Upgrades
Lot of recipes updated to use the Convention tags. For most people, this literally changes nothing, for like 3 people maybe this is huge, but hey, compat that takes no effort xD
2025-01-13 17:35:10 +10:00
Wi2tert c33adf3a8b Remodels Pinsir 2025-01-13 14:57:28 +08:00
Wi2tert c39eeb69f4 change 2025-01-13 14:54:01 +08:00
Wi2tert 32d6811884 implementation Shelmet Line 2025-01-13 14:53:25 +08:00
Wi2tert fa7eb0d98c implementation karrblast Line 2025-01-13 14:50:36 +08:00
dhi_holo 242fa3fed8 Tags in Recipes
Since NeoForge and Fabric use the same convention tags, we can make stuff a bit more compatible. This is a first push for that.
2025-01-13 16:26:15 +10:00
RedGenesectNinja 9364992979 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-12 23:12:20 -06:00
dhi_holo 488f9b995a Miracle Seed Compat Fix (plus more progress) 2025-01-13 14:51:01 +10:00
dhi_holo 05f58f86c2 More Work
Collection of current work so it's preserved
2025-01-13 14:39:17 +10:00
RedGenesectNinja 3fa3f06a02 Implemented Ducklett and Swanna 2025-01-12 22:01:47 -06:00
dhi_holo 0a80269670 Fabric
Added to all relevant tags I could find on https://github.com/FabricMC/fabric/tree/769ff5bcf9b2ec8ef5a6f5367cfebac35c27006c/fabric-convention-tags-v2/src/generated/resources/data/c/tags
2025-01-13 13:39:38 +10:00
dhi_holo 5e2373c656 Issue #1350
Resolves #1350
2025-01-13 13:21:56 +10:00
Kenji_64 60b95b6fa5 Charcadet line remodels + new animations added!! Oh boy here we go: Added animated textures, made new posers in json, adjusted all of their portraits, added battle_cry for Armarouge and adjusted their scale and hitbox 2025-01-13 02:04:07 +01:00
Hiroku 77d7bb0fe4 Merge branch 'karrablast-singleplayer-evolution-method' into 'main'
Add Karrablast single-player evolution method

Closes #821

See merge request cable-mc/cobblemon!1463
2025-01-12 23:40:34 +00:00
lionandHiroku bf78e68831 Add Karrablast single-player evolution method 2025-01-12 23:40:34 +00:00
Paul bbd2b3aeed Updated sprites for galarica nuts, cuff, wreath 2025-01-13 08:37:39 +10:00
Kenji_64 49a6dd826a Added Wobbuffet animations + walk speed 2025-01-12 15:48:30 +01:00
Kenji_64 b0d80d6c96 Added Dondozo animations + walk speed 2025-01-12 15:48:18 +01:00
Kenji_64 ca1f008319 Updated Seaking models and added animations + walk speed 2025-01-12 15:47:55 +01:00
Kenji_64 d22d7cc5b4 Fixed Magikarp playing the wrong faint on water surface 2025-01-12 15:47:16 +01:00
Kenji_64 1ceba8973f Fixed Swampert line's permanent blink 2025-01-12 15:07:57 +01:00
Kenji_64 558daea446 Adjusted Snorlax line walk speed 2025-01-12 15:07:22 +01:00
Hiroku 33951c868b Merge branch 'main' into 'main'
Fix Potions from applying more health than intended

See merge request cable-mc/cobblemon!1461
2025-01-12 00:23:35 +00:00
Chase 02f0e62bf8 Edit CHANGELOG.md 2025-01-12 00:01:08 +00:00
Nico MerenqandWeblate 6f5a298a5c Translated using Weblate (Russian)
Currently translated at 83.4% (5332 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-11 22:55:39 +00:00
Hiroku 977b39e65c Merge branch '1.6.1-molang-expansion' into 'main'
[1.6.1] Add flows and expand some structs, also add FormeChangeEvent

See merge request cable-mc/cobblemon!1444
2025-01-11 22:55:33 +00:00
Konoha e016d48584 Misc. scraper fixes
Addresses a tiny bit of the most noticeable issues leftover from old scraper.
Gimmighoul-Roaming has been granted an actual moveset
Lilligant-Hisui given its appropriate EV Yield
Basculegion-M given its proper gender ratio to not potentially confuse the Pokedex
Piplup given its correct Hidden Ability (which is now accessible via fishing!)
(Unimplemented) Kubfu's stubbed HA updated.
(Unimplemented) Capsakid's base stats corrected.
2025-01-11 14:08:11 -05:00
Konoha 9540a4b3eb Timburr Feature Corrections
Implements "base" Timburr which was previously occupied by the oak variant.
Designates "oak" layer for the resolver to point to when the variant is used.
Adds "cherry" Timburr, which was previously referenced by the resolver but had no texture.
All wood types are now iterable variants in the Pokedex.
2025-01-11 13:51:31 -05:00
Konoha e7234daff6 Animation for Family of Three Maushold
Implements the idle animation for Maushold's base form.
Corrects placement of single child.
Brings the form up to snuff with Family of Four.
2025-01-11 12:43:21 -05:00
Konoha 7fbc2b5143 Form corrections for Paldean Tauros
Creates iterable dex entry so the forms can be accessed in-game via dex.
Reimplements as a Paldean form for feature parity with other regionals.
Refactors species feature to more concisely handle the separation of breed and regional.
Tweaks resolver to point to the right combination of aspects, fallback to Combat breed as "base" Paldean.
2025-01-11 12:12:25 -05:00
washashu0905andWeblate 9d50dae3d1 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 71.8% (4591 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hant/
2025-01-11 16:35:51 +00:00
Gustavo PuerariandWeblate 655a467193 Translated using Weblate (Portuguese (Brazil))
Currently translated at 41.0% (2623 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-11 16:35:50 +00:00
Kenji_64 cbc6c56c9e Implemented Tauros remodel + Paldean variants. Translated their posers to json and made new ones for the variants. Also added paldean_breed species feature assignment for Tauros 2025-01-11 17:03:01 +01:00
Chase 25a02e0b27 Small tweak to logic 2025-01-11 15:55:12 +00:00
Chase 4950297daa Remove unused variable 2025-01-11 15:52:26 +00:00
Chase 1c09cf6f30 Fix potion items from calling heal function twice 2025-01-11 15:50:56 +00:00
Kenji_64 360de79482 Translated Poliwrath's poser to .json 2025-01-11 16:33:20 +01:00
Kenji_64 8e7ceae7e1 Added new Poliwrath animations for ground_idle, ground_walk, physical and quirk 2025-01-11 16:32:03 +01:00
Kenji_64 92221e0e98 Fixed Lurantis' antenna problem 2025-01-11 16:31:27 +01:00
Kenji_64 27285e3e7f Implemented new Snorlax and Munchlax animations, added walk speed, sleep and got rid of unnecessary files 2025-01-11 16:31:01 +01:00
Paul 00d72902af Added recipes for galarica cuff and wreath 2025-01-11 17:41:29 +10:00
Paul eb986087cf Pipeline fixo (as if by magic!!!) 2025-01-11 16:31:39 +10:00
Paul 294e439f5e Moved the repurposed structures stuff to an inbuilt pack 2025-01-11 15:56:55 +10:00
Paul 6e7e870a1f Added galarica nut item 2025-01-11 12:09:29 +10:00
Hiroku ab78185689 Merge branch 'main' into 'main'
Add Built-in 1.21.1+ Compat With Repurposed Structures

See merge request cable-mc/cobblemon!1457
2025-01-10 20:40:00 +00:00
amo 7403556fa2 fixes for threads 2025-01-10 13:22:50 +00:00
Paul 7f451f1989 Cleaned up duplicates in changelog 2025-01-10 20:36:26 +10:00
Hiroku 3b2bfd5548 Merge branch 'display-cases' into 'main'
Fixed display cases not dropping items if destroyed via explosions

See merge request cable-mc/cobblemon!1460
2025-01-10 09:27:10 +00:00
Hiroku 3d1ee5ee0f Merge branch 'lion-eats-bugs' into 'main'
Small Fixes

Closes #1329, #1324, #1318, and #1325

See merge request cable-mc/cobblemon!1455
2025-01-10 09:13:36 +00:00
Guilherme Pereira 0584276189 emit pokemon aspects changed event only when pokemon is owned 2025-01-10 06:01:59 -03:00
Hiroku a16b17582d Merge branch 'feat/dynamic-pokemon-name-render' into 'main'
Better Pokédex discovery system

See merge request cable-mc/cobblemon!1442
2025-01-10 04:20:53 +00:00
Hiroku 71c1ae5540 Merge branch 'palafin-hero' into 'main'
Add features to several mons

See merge request cable-mc/cobblemon!1439
2025-01-10 04:10:42 +00:00
Hiroku 0233d2b0be Merge branch 'feature/migration-post-mortem' into 'main'
fix moves having raised stages that are beyond what new codecs expect when migrating from 1.5.2

See merge request cable-mc/cobblemon!1453
2025-01-10 03:55:28 +00:00
PolymetaandHiroku b67d474386 fix moves having raised stages that are beyond what new codecs expect when migrating from 1.5.2 2025-01-10 03:55:28 +00:00
Kenji_64 04612d58f3 Fixed Shiny Dracovish's fins being textured wrongly 2025-01-09 21:27:59 +01:00
Wi2tert ffd5dbb717 Updata Primeape Animations 2025-01-10 00:02:56 +08:00
Test 3239362e1a fix incorrect texture size for interact interface 2025-01-08 23:41:52 -05:00
Conan 0d240f01b6 Fixed display cases not dropping items if destroyed via explosions. 2025-01-09 02:55:27 +01:00
washashu0905andWeblate d7242d2895 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 70.2% (4491 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hant/
2025-01-08 21:23:54 +00:00
washashu0905andWeblate 51c2a418ce Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 69.0% (4415 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hant/
2025-01-08 20:26:38 +00:00
Gustavo PuerariandWeblate 882a5921e8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 40.4% (2587 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-08 20:26:36 +00:00
Paul 3a05bd5e2e Updating variables now reinitializes brains, fixed too-low default on float chance in StayAfloat tasks 2025-01-08 20:10:32 +10:00
Wi2tert 9b58e229d6 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-07 19:14:57 +08:00
Wi2tert d357c2cbcb Add Binacle Barbaracle 2025-01-07 19:13:47 +08:00
Test 99a71dc2e1 restore pokedex close transition 2025-01-06 20:20:52 -05:00
washashu0905andWeblate 5621326c43 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 65.8% (4208 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hant/
2025-01-06 21:05:37 +00:00
Gustavo PuerariandWeblate 9fd2b3f1d6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 40.2% (2575 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-06 21:05:36 +00:00
Paul 439c9647ca Moved Pokémon more properly to the data driven AI, with basic defaults so far, added /brainedit to debug pokemon brains 2025-01-06 14:17:46 +10:00
Paul fd99573a46 Fixed NPC editing GUI not immediately applying aspect changes on save 2025-01-05 18:16:52 +10:00
Nico MerenqandWeblate a89d428699 Translated using Weblate (Russian)
Currently translated at 83.4% (5333 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-05 07:30:58 +00:00
Guilherme Pereira fbcae404c0 update CHANGELOG.md 2025-01-05 03:11:27 -03:00
Guilherme Pereira 68cfd16fed emit pokemon aspects changed event only when aspects really changed 2025-01-05 03:10:13 -03:00
Guilherme Pereira 818038c715 fix hay bales not going into restoration machines 2025-01-05 03:09:47 -03:00
TelepathicGrunt 7c4b31db25 Add Built-in Compat With Repurposed Structures 2025-01-04 19:22:10 -05:00
RedGenesectNinja 91eda647fa Added Amoonguss 2025-01-04 17:49:14 -06:00
Konoha c0da612281 Re-implement color and metal variance features for pokedex 2025-01-04 15:17:22 -05:00
Guilherme Pereira da6a88292e fix berry shear sound 2025-01-04 16:54:17 -03:00
Nico MerenqandWeblate 7dc76fdeb3 Translated using Weblate (Russian)
Currently translated at 83.5% (5342 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-04 18:41:55 +00:00
Guilherme Pereira dee9a268d7 update CHANGELOG.md 2025-01-04 14:38:32 -03:00
Guilherme Pereira 5fd37438fc add player to pokerod reel event 2025-01-04 14:35:00 -03:00
Guilherme Pereira 51b30ab468 close pokedex and dialogues on inventory keybind press 2025-01-04 14:27:08 -03:00
Guilherme Pereira 36a3549b3e fix petilil typo 2025-01-04 13:03:31 -03:00
Guilherme Pereira 9e0ea63db6 fix vivichoke dip and leek and potato stew not returning bowls 2025-01-04 12:56:18 -03:00
Guilherme Pereira 739459c061 fix wooloo dex registration 2025-01-04 12:51:13 -03:00
Paul eb952319e0 Major refactor of data-driven AI, added variables declarations to task configs, GUI for editing brain presets 2025-01-04 16:26:48 +10:00
TeggyandWeblate 7e11497c64 Translated using Weblate (Spanish)
Currently translated at 99.1% (6339 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-01-03 21:17:19 +00:00
Konoha 81978f025b Revert zen and noice aspects to partial flag 2025-01-03 16:08:54 -05:00
TeggyandWeblate 8dc3eaafc7 Translated using Weblate (Spanish)
Currently translated at 98.8% (6317 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-01-03 19:20:31 +00:00
Konoha c0af1abf9f Tree-Feature Dex Fix 2025-01-03 13:16:19 -05:00
Nico MerenqandWeblate b2d56c339c Translated using Weblate (Russian)
Currently translated at 82.5% (5273 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-03 16:50:37 +00:00
TeggyandWeblate bc49537e16 Translated using Weblate (Spanish)
Currently translated at 98.7% (6309 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-01-03 16:50:36 +00:00
Konoha c4c59e6aa5 Corrections and future species feature prep 2025-01-03 10:54:36 -05:00
Konoha de3cac46fb Stub references to scraper-generated species features 2025-01-03 09:53:32 -05:00
Polymeta a6e06c80fe flipping more signs for particles
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-01-03 13:18:45 +00:00
Polymeta fc1cc54107 Merge branch 'BanInBattleRocketry' into 'main'
Ban in battle rocketry

See merge request cable-mc/cobblemon!1451
2025-01-03 12:07:49 +00:00
Nico MerenqandWeblate 995ad49336 Translated using Weblate (Russian)
Currently translated at 82.3% (5262 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-03 11:44:00 +00:00
Konoha 1abe38f97b Migrate to accurate species data 2025-01-03 01:51:44 -05:00
Konoha ff7fa49baa Migrate to accurate species data 2025-01-03 01:49:36 -05:00
Konoha 92b2612350 Merge branch 'main' into the_great_scraper_migration 2025-01-03 01:08:11 -05:00
Nico MerenqandWeblate ba17f0d35f Translated using Weblate (Russian)
Currently translated at 82.3% (5262 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-03 03:55:29 +00:00
JazzMcNade 210bf9f5fb Updated Changelog 2025-01-02 21:13:01 -06:00
JazzMcNade 9454f2046a Addition comments 2025-01-02 20:58:24 -06:00
JazzMcNade 5621e69d58 Merge branch 'main' into BanInBattleRocketry 2025-01-02 20:51:11 -06:00
Kenji_64 5a628b4c39 Fixed Raboot's quirk playing during the battle idle 2025-01-03 03:35:51 +01:00
Kenji_64 0b46516ed1 Fixed Feraligatr's head tilt 2025-01-03 03:35:29 +01:00
Polymeta 0c0f022e34 Merge branch 'fix-pokedex-command' into 'main'
Pokédex command and GUI fixes

Closes #1320 and #1321

See merge request cable-mc/cobblemon!1450
2025-01-02 16:58:35 +00:00
lionandPolymeta 220b363864 Pokédex command and GUI fixes 2025-01-02 16:58:35 +00:00
RedGenesectNinja 715b5d1a08 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-01 23:12:38 -06:00
FrankTheFarmer 44ca37207f Updated Changelog with some placeholders for incoming implementation 2025-01-02 12:24:43 +10:00
RedGenesectNinja cd363e4ef7 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-01-01 20:22:54 -06:00
RedGenesectNinja 9d234fa556 Added Foongus 2025-01-01 20:21:03 -06:00
Nico MerenqandWeblate 47e49993ad Translated using Weblate (Russian)
Currently translated at 82.3% (5262 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-01-02 01:37:26 +00:00
FrankTheFarmer 7afdbd2d4b Merge branch 'main' into implement_pokemon 2025-01-02 10:04:01 +10:00
Ezequiel Neri FerreiraandWeblate 38e699aa44 Translated using Weblate (Portuguese (Brazil))
Currently translated at 35.0% (2241 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-31 23:22:39 +00:00
Polymeta 26d97f2043 Merge branch 'add-base-scale-npc-property' into 'main'
Add 'baseScale' NPC property

Closes #1268

See merge request cable-mc/cobblemon!1448
2024-12-31 14:54:38 +00:00
lionandPolymeta c4f5416bb3 Add 'baseScale' NPC property 2024-12-31 14:54:38 +00:00
Polymeta 8066a92ab5 Merge branch 'lion-eats-bugs' into 'main'
Small Fixes

Closes #1311, #889, and #1197

See merge request cable-mc/cobblemon!1449
2024-12-31 14:42:00 +00:00
lionandPolymeta f149439da8 Small Fixes 2024-12-31 14:41:59 +00:00
JazzMcNade 978064d2d0 Update PokemonMoveControl.kt 2024-12-31 02:54:49 -06:00
PolymetaandWeblate 2b26e47876 Translated using Weblate (German)
Currently translated at 98.7% (6313 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-12-31 03:20:55 +00:00
Polymeta 95dd6cbfcb Merge branch 'test/adorn_compat' into 'main'
Fixing up Adorn compatibility

See merge request cable-mc/cobblemon!1441
2024-12-30 16:17:17 +00:00
aeroeng15andPolymeta 551b3ebe87 Fixing up Adorn compatibility 2024-12-30 16:17:17 +00:00
Polymeta 89914813a1 Merge branch 'fix-pokemon-forgetting-moves-when-evolving' into 'main'
Fix Pokémon forgetting moves when evolving on specific cases

Closes #1252

See merge request cable-mc/cobblemon!1437
2024-12-30 15:54:09 +00:00
lionandPolymeta 742ec131d5 Fix Pokémon forgetting moves when evolving on specific cases 2024-12-30 15:54:09 +00:00
Polymeta 4175c36388 Merge branch 'fix/no-next-level-at-cap' into 'main'
Align the "To next level" display with official games logic, it will now show 0 when at cap.

See merge request cable-mc/cobblemon!1445
2024-12-30 15:32:33 +00:00
Konoha D 2f07f33a71 Scale A-Exeggutor more accurately based on K-Exeggutor. 2024-12-30 14:09:25 +00:00
Hiroku f6ed1b38f8 Merge branch 'make-berries-shearable' into 'main'
Made berry trees be shearable by dispenser blocks

Closes #1071

See merge request cable-mc/cobblemon!1419
2024-12-30 11:39:21 +00:00
Faintful c299967cce Updated changelog 2024-12-30 12:35:44 +01:00
Polymeta b79f569def Merge branch 'fix-pokemon-riding-two-boats' into 'main'
Fix Pokémon riding two boats

Closes #1281

See merge request cable-mc/cobblemon!1447
2024-12-30 10:54:31 +00:00
lionandPolymeta 944144a671 Fix Pokémon riding two boats 2024-12-30 10:54:31 +00:00
PolymetaandWeblate eaec3612aa Translated using Weblate (German)
Currently translated at 98.6% (6306 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-12-30 05:39:46 +00:00
Kenji_64 db0c2a0cc2 Added shiny Slowpoke's new texture 2024-12-30 03:47:55 +01:00
Kenji_64 c431cf7b1e Fixed Serperior's poser playing the ground_walk in battle and the dex 2024-12-30 03:47:31 +01:00
Kenji_64 a5dd0eb924 Scaled up Slowpoke (0.75 > 1) and fixed Slowpoke line posers not having water animations 2024-12-30 03:06:32 +01:00
Polymeta 586b5a860f Merge branch 'fix-npc-player-lose-command' into 'main'
Fix npc player lose command

Closes #1306 and #1282

See merge request cable-mc/cobblemon!1443
2024-12-30 01:33:47 +00:00
lionandPolymeta 29d91fb191 Fix npc player lose command 2024-12-30 01:33:46 +00:00
Kenji_64 466d91fcbf Implemented Smeargle model tweaks 2024-12-30 01:53:54 +01:00
Kenji_64 e1a3077780 Fixed Incineroar's fuzzy fur tail clipping into the tip 2024-12-30 01:53:13 +01:00
Kenji_64 5936ced1d7 Added Eiscue + No Ice Form remodel and adjusted the portrait 2024-12-30 01:52:43 +01:00
Polymeta 183d85a3b6 Merge branch 'overlay-invisible-man-collab' into 'main'
fix: Party overlay not respecting hidden UI (F1)

See merge request cable-mc/cobblemon!1440
2024-12-30 00:48:56 +00:00
Kenji_64 3d6967d3c7 Implemented Slowking Remodel + added Galarian regional. Translated poser to json 2024-12-30 01:15:43 +01:00
Polymeta 0795b06ca0 use 1.4.1 instead 1.4.0 for tags history [skip-ci]
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-12-30 00:15:21 +00:00
Kenji_64 449a8cdb53 Implemented Slowbro Remodel + added Galarian regional. Translated poser to json and added quirk animations 2024-12-30 01:15:11 +01:00
Kenji_64 c91d4a9515 Implemented Slowpoke Remodel + added Galarian regional. Translated poser to json 2024-12-30 01:14:05 +01:00
Polymeta 6fdd87f5cf update tags directory to keep history [skip-ci]
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-12-29 23:59:02 +00:00
Ina 3b364a4590 fix: Align the "To next level" display with official games logic, it will now show 0 when at cap. 2024-12-29 17:20:01 +00:00
Ina baca93c9b2 feat: Support for Illusion in the dex reveal process. 2024-12-29 16:54:17 +00:00
amo b6d13b8861 Merge branch 'refs/heads/main' into 1.6.1-molang-expansion
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/pokemon/BattlePokemon.kt
2024-12-29 16:42:55 +00:00
amo b271223f6a lots o' stuff 2024-12-29 16:31:25 +00:00
Ina 004f2de623 chore: Changelog 2024-12-29 15:11:45 +00:00
Ina 570629bff2 feat: Improve Pokemon reveal logic 2024-12-29 15:08:16 +00:00
Ina 7e5b8260de refactor: Simplify base label resolving logic. 2024-12-29 13:45:23 +00:00
Ina 3e5e851dba fix: Don't instance new texts for static elements every tick. 2024-12-29 11:25:50 +00:00
Ina 9f866aa292 chore: Hiro bullies the work-challenged. 2024-12-29 11:18:54 +00:00
Ina 4e4417d4df Merge branch 'main' into overlay-invisible-man-collab 2024-12-29 11:17:39 +00:00
Hiroku 900ca0cd8d Merge branch 'feature/small-fixes' into 'main'
fixes and minor cleanup

Closes #1277, #1302, and #1310

See merge request cable-mc/cobblemon!1432
2024-12-29 01:04:53 +00:00
PolymetaandHiroku 5448031cae fixes and minor cleanup 2024-12-29 01:04:53 +00:00
Ina abd92c2325 fix: Party overlay not respecting hidden UI (F1) 2024-12-28 22:07:37 +00:00
Vaniron c4948a6611 Add three_segment feature to Dudunsparce 2024-12-28 18:24:52 +00:00
Vaniron cc459c99aa Add hero features to Palafin 2024-12-28 18:15:28 +00:00
Polymeta a3ac3c36e6 Merge branch 'fix-bait-consumption' into 'main'
Fixed bait being consumed when not reeling in any Pokémon.

Closes #1308 and #1307

See merge request cable-mc/cobblemon!1438
2024-12-28 12:22:19 +00:00
lionandPolymeta 36ce262755 Fixed bait being consumed when not reeling in any Pokémon. 2024-12-28 12:22:19 +00:00
Apion 9246523853 Merge branch 'particle-stuff' into 'main'
A bunch of particle changes

See merge request cable-mc/cobblemon!1295
2024-12-28 03:03:56 +00:00
Apion db2c2f0089 A bunch of particle changes 2024-12-28 03:03:56 +00:00
Polymeta 3a090ba01c Merge branch 'RestorePokemonSpawnYaw' into 'main'
Restore pokemon spawn yaw

See merge request cable-mc/cobblemon!1436
2024-12-28 02:11:17 +00:00
JazzMcNadeandPolymeta 3c4481c9cc Restore pokemon spawn yaw 2024-12-28 02:11:17 +00:00
Polymeta 4e73a19ade Merge branch 'configurable-dex-scanning-range' into 'main'
Add config to max Pokédex scanning range

Closes #1247

See merge request cable-mc/cobblemon!1387
2024-12-28 00:33:24 +00:00
lionandPolymeta c58ba08a65 Add config to max Pokédex scanning range 2024-12-28 00:33:24 +00:00
Polymeta 18940956a8 Merge branch 'fix-pasture-pokemon-list-padding' into 'main'
Fix pasture Pokémon list padding

Closes #1273

See merge request cable-mc/cobblemon!1421
2024-12-27 23:52:04 +00:00
lionandPolymeta 68520307b4 Fix pasture Pokémon list padding 2024-12-27 23:52:04 +00:00
Hiroku 84825dbd69 Add vietnamese 2024-12-27 22:45:16 +00:00
Patch Notes GuyandWeblate 793f059f3c Deleted translation using Weblate (Vietnamese) 2024-12-27 22:42:29 +00:00
Weblate 7200e87886 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2024-12-27 22:40:07 +00:00
Patch Notes GuyandWeblate a1dc5c8340 Added translation using Weblate (Vietnamese) 2024-12-27 22:40:05 +00:00
Polymeta b231a80b68 Merge branch 'moe-eats-bugs' into 'main'
Advancement fixes

Closes #1262

See merge request cable-mc/cobblemon!1417
2024-12-27 13:04:27 +00:00
MoeBoy76andPolymeta d2796b8755 Advancement fixes 2024-12-27 13:04:27 +00:00
Polymeta 1ab3ca8628 Merge branch 'fix-collidable-invisible-pokemon' into 'main'
Fix Pokémon being collidable when trying to capture them

Closes #401

See merge request cable-mc/cobblemon!1382
2024-12-27 12:55:22 +00:00
lionandPolymeta f4da1436a5 Fix Pokémon being collidable when trying to capture them 2024-12-27 12:55:22 +00:00
Faintful 9a0b779ca3 Merge remote-tracking branch 'upstream/main' into make-berries-shearable 2024-12-27 13:40:11 +01:00
Polymeta 2bcb42270a Merge branch 'hide-unimplemented-pokemon-from-the-dex' into 'main'
Add config to hide unimplemented Pokémon from the Pokédex

Closes #1274

See merge request cable-mc/cobblemon!1422
2024-12-27 12:37:32 +00:00
lionandPolymeta 51472d2369 Add config to hide unimplemented Pokémon from the Pokédex 2024-12-27 12:37:32 +00:00
Polymeta 2cb430d927 Merge branch 'is-standing-on-blocks-molang-function' into 'main'
Add 'is_standing_on_blocks' MoLang function

See merge request cable-mc/cobblemon!1393
2024-12-27 12:36:04 +00:00
lionandPolymeta 7bbfbf5852 Add 'is_standing_on_blocks' MoLang function 2024-12-27 12:36:04 +00:00
Polymeta 93a368a844 Merge branch 'fix_fishing_condition' into 'main'
Internal change, move condition variables related to fishing into...

See merge request cable-mc/cobblemon!1430
2024-12-27 01:46:23 +00:00
Polymeta 5c934a0b66 Merge branch 'FossilMachineReturnFossilFix' into 'main'
FossilMachineReturnFossilFix

See merge request cable-mc/cobblemon!1426
2024-12-27 01:36:24 +00:00
JazzMcNadeandPolymeta 1a4034ded4 FossilMachineReturnFossilFix 2024-12-27 01:36:23 +00:00
JPAK dbd73c53ea Internal change, move condition variables related to fishing into FishingSpawningCondition.kt instead of SpawningCondition.kt 2024-12-26 11:28:11 -06:00
Polymeta 25d17a271b Merge branch 'toms-fixed' into 'main'
Fix crash when placing a restoration tank next to Tom's Storage block.

See merge request cable-mc/cobblemon!1427
2024-12-26 11:39:22 +00:00
JordanandPolymeta e9b3940eb6 Fix crash when placing a restoration tank next to Tom's Storage block. 2024-12-26 11:39:22 +00:00
Hiroku e442ca2732 Merge branch 'yamask-patch' into 'main'
Add galarian yamask as feature

See merge request cable-mc/cobblemon!1428
2024-12-26 07:40:17 +00:00
Vaniron b34e1f30d1 Add galarian yamask as feature 2024-12-26 07:33:40 +00:00
Polymeta 8747d3cd6f changelog 1.6.1 prep [skip-ci]
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-12-26 00:06:13 +00:00
Hiroku ca7a4e12be Merge branch 'change-modmenu-links' into 'main'
Update mod menu links

See merge request cable-mc/cobblemon!1424
2024-12-25 09:08:44 +00:00
lionandHiroku 9c3b713c4a Update mod menu links 2024-12-25 09:08:44 +00:00
Hiroku 6c0c352001 Merge branch 'fix-dex-crash-when-switching-forms' into 'main'
Fix Pokédex crash when switching forms

See merge request cable-mc/cobblemon!1423
2024-12-25 06:29:12 +00:00
lionandHiroku 51c1706a9a Fix Pokédex crash when switching forms 2024-12-25 06:29:11 +00:00
Hiroku 5320704702 Edit gradle.properties 2024-12-25 06:27:07 +00:00
Paul 4787c1d35b Merge remote-tracking branch 'origin/main' into smarterer-pokemons 2024-12-25 15:04:33 +10:00
Paul 91e28616a9 Lil changelog amendment [skip-ci] 2024-12-25 11:39:29 +10:00
Paul 8df06a4836 The grinch stole the jar!! [skip-ci] 2024-12-25 09:25:42 +10:00
Hiroku f2c9886ae0 Merge branch 'feature/updated-tag-scripts' into 'main'
update and run tag scripts

See merge request cable-mc/cobblemon!1420
2024-12-24 23:25:12 +00:00
PolymetaandHiroku d74ca7b70d update and run tag scripts 2024-12-24 23:25:12 +00:00
Paul 2e3302bdec not snap 2024-12-25 08:40:38 +10:00
Paul f77af7c954 Merge remote-tracking branch 'origin/lang-updates' 2024-12-25 07:56:12 +10:00
Hiroku 63ed488b03 Merge branch 'quic-molang-additions' into 'main'
[1.6] Add entity type id molang function

See merge request cable-mc/cobblemon!1415
2024-12-24 21:50:53 +00:00
Hiroku fcce15e210 Edit MoLangFunctions.kt 2024-12-24 21:50:15 +00:00
Test d816710566 Changelog shenanigans 3 [skip-ci] 2024-12-24 21:48:16 +00:00
Hiroku c8a8e689cc Merge branch 'actually-on-hit' into 'main'
[1.6] make THROWN_POKEBALL_HIT actually do what it says on the tin

See merge request cable-mc/cobblemon!1418
2024-12-24 21:47:49 +00:00
Paul 222f6dd955 Changelog shenanigans 2 [skip-ci] 2024-12-25 07:46:03 +10:00
Faintful ba7a3ab3c2 Made berry trees be shearable by dispenser blocks 2024-12-24 17:27:33 +01:00
amo f61efb11b1 fix silly 2024-12-24 14:58:03 +00:00
Briar 19b4d841f4 im a FOOL 2024-12-24 14:31:31 +00:00
Briar 704320f1bc oops 2024-12-24 14:22:42 +00:00
Briar e5480bd05b make THROWN_POKEBALL_HIT actually do what it says on the tin 2024-12-24 14:17:57 +00:00
Briar 8d504d23e1 Update file MoLangFunctions.kt 2024-12-24 13:58:51 +00:00
Paul 2912ffdad9 Changelog shenanigans [skip-ci] 2024-12-24 23:38:25 +10:00
Paul 986f22c5a5 Added clamping for pokemon angles in the hopes of killing the watchdog killer 2024-12-24 18:58:10 +10:00
Hiroku 880f6de77a Merge branch 'fix-no-ai-property' into 'main'
Fix no_ai property not working when set to false

Closes #1270

See merge request cable-mc/cobblemon!1413
2024-12-24 08:01:50 +00:00
lionandHiroku 7f87b0f184 Fix no_ai property not working when set to false 2024-12-24 08:01:50 +00:00
Hiroku a811a823e6 Merge branch 'fix-shiny-magikarp-jump-variations' into 'main'
Fix shiny Magikarp jump variations

See merge request cable-mc/cobblemon!1416
2024-12-24 08:01:20 +00:00
lionandHiroku a45999894b Fix shiny Magikarp jump variations 2024-12-24 08:01:19 +00:00
Hiroku eeba80e7e7 Merge branch 'patch-1' into 'main'
Galarian Mr.Mime typo

See merge request cable-mc/cobblemon!1414
2024-12-24 08:00:17 +00:00
Briar 97b20158e9 Update file MoLangFunctions.kt 2024-12-24 02:28:33 +00:00
VanironCZ 586eaa9135 Fix typo, make form work 2024-12-24 00:58:06 +00:00
Polymeta dc7925ab3e Merge branch 'ci-fixes' into 'main'
Fix CI

See merge request cable-mc/cobblemon!1412
2024-12-23 22:46:40 +00:00
complacentdevandPolymeta 8986159a25 Fix CI 2024-12-23 22:46:39 +00:00
Test b864f715ea update item sprites 2024-12-23 17:24:19 -05:00
Nick 02b7d5eeae Merge branch 'fix/neoforge-payload-logging' into 'main'
No longer log all packets by state, just register

See merge request cable-mc/cobblemon!1411
2024-12-23 21:05:03 +00:00
Nick 614be610d4 No longer log all packets by state, just register 2024-12-23 13:02:40 -08:00
Polymeta 1084c7a289 Merge branch 'ci' into 'main'
Make Cobblemon 20% Smaller

See merge request cable-mc/cobblemon!1224
2024-12-23 17:55:16 +00:00
complacentdevandPolymeta 110d6dc828 Make Cobblemon 20% Smaller 2024-12-23 17:55:16 +00:00
Paul d98d68c7d4 Added cancellation and handler ordering support to flows, more cleanup for Pokedex event, changelog for flows, removed old junk 2024-12-23 21:50:44 +10:00
Hiroku 6369d876e3 Merge branch 'HorizontalTeamAlignmentForMoveTargeting' into 'main'
Horizontal team alignment for move targeting

See merge request cable-mc/cobblemon!1410
2024-12-23 10:31:06 +00:00
Hiroku 8388a53017 Merge branch 'date-and-timolang' into 'main'
[1.6] system time and date molang

See merge request cable-mc/cobblemon!1405
2024-12-23 10:17:04 +00:00
Hiroku 3a59d7d7c9 Edit MoLangFunctions.kt 2024-12-23 10:08:03 +00:00
Hiroku 3d9d3318b1 Merge branch 'cancelable-dex-knowledge' into 'main'
[1.6] Cancelable dex data event, split into pre & post

See merge request cable-mc/cobblemon!1403
2024-12-23 09:26:26 +00:00
Paul d032e0449b Tweaks for inbuilt region bias pack and changelog 2024-12-23 19:25:05 +10:00
Hiroku bcdbb19a75 Merge branch 'fix-pasture-shiny-effect' into 'main'
Fix shiny pasture Pokémon playing the shiny effect incorrectly

Closes #1257

See merge request cable-mc/cobblemon!1409
2024-12-23 09:24:36 +00:00
lionandHiroku 2181cdb4ef Fix shiny pasture Pokémon playing the shiny effect incorrectly 2024-12-23 09:24:36 +00:00
JazzMcNade 24257a4c6e Swapped team alignment from vertical to horizontal 2024-12-23 02:12:19 -06:00
Test 2a293def4f Merge branch 'inbuilt-packs' into 'main'
Setup inbuilt resource packs for various things

See merge request cable-mc/cobblemon!1408
2024-12-23 07:28:33 +00:00
Hiroku a3d77dd2a0 Merge branch 'CounterMovesUITargetingFix' into 'main'
Fix UI targeting for MetalBurst, Counter, MIrrorCoat, etc

See merge request cable-mc/cobblemon!1407
2024-12-23 06:51:43 +00:00
Paul 311f0e3192 Setup inbuilt resource packs for various things 2024-12-23 16:30:20 +10:00
JazzMcNade be2099130b Fix UI targeting for MetalBurst, Counter, MIrrorCoat, etc 2024-12-23 00:18:35 -06:00
FrankTheFarmer 2345e7efcc Merge branch 'main' into implement_pokemon 2024-12-23 16:01:53 +10:00
Hiroku 6ebe0b9c7e Merge branch 'fix-spectators-obscuring-line-of-sight' into 'main'
Fix spectators obscuring line of sight when interacting with other players

Closes #1261

See merge request cable-mc/cobblemon!1406
2024-12-23 04:11:58 +00:00
lionandHiroku dde5c00789 Fix spectators obscuring line of sight when interacting with other players 2024-12-23 04:11:57 +00:00
amo d980faed64 resolve threads 2024-12-23 03:22:39 +00:00
Hiroku 7a80bc54ea Merge branch 'disable-entity-labels-when-crouching-only' into 'main'
Set 'displayEntityLabelsWhenCrouchingOnly' config default to false

See merge request cable-mc/cobblemon!1390
2024-12-23 02:53:53 +00:00
lionandHiroku f207206b13 Set 'displayEntityLabelsWhenCrouchingOnly' config default to false 2024-12-23 02:53:52 +00:00
amo edf510d8e8 split dex data changed event into pre and post, make pre cancelable 2024-12-23 02:30:38 +00:00
Hiroku 721384547f Merge branch 'feature/small-fixes' into 'main'
(1.6) Small fixes

Closes #1188 and #1264

See merge request cable-mc/cobblemon!1404
2024-12-23 01:36:36 +00:00
PolymetaandHiroku ce5189e83a (1.6) Small fixes 2024-12-23 01:36:36 +00:00
amo d7fc09b967 split dex data changed event into pre and post, make pre cancelable 2024-12-22 22:47:45 +00:00
Sterrezo d32ed6309c Fixed Horsea and Seadra missing cries 2024-12-22 23:47:40 +01:00
Gustavo PuerariandWeblate 703eb7645c Translated using Weblate (Portuguese (Brazil))
Currently translated at 34.8% (2228 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-22 21:41:42 +00:00
Polymeta 604c184029 Merge branch 'This-time-I-wont-mess-up' into 'main'
Let's try this again

See merge request cable-mc/cobblemon!1402
2024-12-22 19:00:29 +00:00
Slippy 727ada3e00 Let's try this again 2024-12-22 12:51:58 -06:00
Hiroku d29e471ab4 Merge branch 'ok-fine-heres-a-journey-molang-mr' into 'main'
[1.6 pls] Journey Molang Migration

See merge request cable-mc/cobblemon!1385
2024-12-22 08:10:23 +00:00
Paul 6c1e6677b3 More molang cleanup 2024-12-22 18:03:31 +10:00
Paul aaa7fcee47 Cleaned up particle molang functions, moved reusable particle spawning logic from netcode to ParticleStorm 2024-12-22 18:01:05 +10:00
Hiroku 37b050f2e5 Merge branch 'ihatebugtypes' into 'main'
Ihatebugtypes

Closes #1167, #1201, and #1225

See merge request cable-mc/cobblemon!1369
2024-12-22 06:24:19 +00:00
Hiroku 16ccd6bcc3 Merge branch 'upstream/npcs' into 'main'
Allow for programmatic persistence of npcs

See merge request cable-mc/cobblemon!1388
2024-12-22 06:23:00 +00:00
Paul 8b0d228339 Merge remote-tracking branch 'origin/main' 2024-12-22 12:07:59 +10:00
Paul 5019026472 Further reworked brewing, JEI/EMI compat might exist on Neo now (fabric is impossibru (for now)) 2024-12-22 12:07:48 +10:00
Polymeta 72e9481946 fix cry checker script looking at wrong columns
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-12-21 23:51:53 +00:00
Sterrezo f3ba7ef121 Un-sabotaged a json, no one saw that 2024-12-21 23:44:34 +01:00
amo ace38ad6be Merge branch 'main' into ok-fine-heres-a-journey-molang-mr 2024-12-21 17:03:47 +00:00
Polymeta 5c885112ef Merge branch '1.6-additional-additions' into 'main'
1.6 additional additions

See merge request cable-mc/cobblemon!1398
2024-12-21 14:23:06 +00:00
Plastered_CrabandPolymeta a37532579e 1.6 additional additions 2024-12-21 14:23:05 +00:00
Sterrezo e9aca93f70 Fixed Mareanie and Toxapex missing cries 2024-12-21 14:38:44 +01:00
Segfault Guy 0f751eb732 cleanup 2024-12-21 07:18:41 -05:00
Paul 9840a2758a Fixed everything being medicinal brew. Drink it!!! (fixes #1249) 2024-12-21 22:07:30 +10:00
Paul ad52d1ed5f Fixed busted flowers tag, fixed party check criterion 2024-12-21 21:48:09 +10:00
Paul 74464dc13a Fixed PC block waterlog property not being the right one, causing export issues, closes #1253 2024-12-21 21:33:24 +10:00
Hiroku f280ec8979 Merge branch 'half-slabs' into 'main'
Stonecutter Fixes

Closes #1260

See merge request cable-mc/cobblemon!1399
2024-12-21 05:57:42 +00:00
dhi_holo 25ca0fbd13 Recreate flowers.json
Moved the working flowers.json from being just in items to being a block tag too
2024-12-21 15:25:33 +10:00
dhi_holo 2c8d544088 Tag Fix
Cleans up a tag, removes a recursive tag error, and tweaks a spawn to be valid again.
2024-12-21 15:16:12 +10:00
Segfault Guy 7dbe31d084 Merge remote-tracking branch 'origin/main' into ihatebugtypes 2024-12-20 23:47:30 -05:00
Segfault Guy de05133b31 update licenses 2024-12-20 23:45:45 -05:00
Segfault Guy 3b70b8351a Block battles on evolution. 2024-12-20 23:44:36 -05:00
dhi_holo 784439475a Stonecutter Fixes
Moved the count value from outside the result to inside of it. No idea why it ended up outside, but hey, easy fix. Resolves #1260
2024-12-21 14:22:44 +10:00
Paul 2024ddb4f0 Wrap spawn direction angle within acceptable entity rotation values 2024-12-21 12:37:32 +10:00
Paul ad35be7ddb Added player level range influence to fishing 2024-12-21 10:51:27 +10:00
Paul dbf688fade Merge remote-tracking branch 'origin/lang-updates'
# Conflicts:
#	common/src/main/resources/assets/cobblemon/lang/de_de.json
#	common/src/main/resources/assets/cobblemon/lang/es_mx.json
#	common/src/main/resources/assets/cobblemon/lang/th_th.json
2024-12-21 09:30:37 +10:00
Polymeta 17d3d5f829 Merge branch 'implement_pokemon' into 'main'
This weeks pokemon implementation

Closes #1230 and #1137

See merge request cable-mc/cobblemon!1397
2024-12-20 13:30:37 +00:00
Frank The FarmerandPolymeta fba00c23b4 This weeks pokemon implementation 2024-12-20 13:30:35 +00:00
FrankTheFarmer 6f8e3bca29 Added missing implementations to changelog before merge requesting 2024-12-20 22:40:27 +10:00
FrankTheFarmer 49349848b8 Santa is canon in pokemon 🎅🐧📫 2024-12-20 22:31:33 +10:00
FrankTheFarmer bfe1afda4b Merge branch 'main' into implement_pokemon 2024-12-20 21:12:17 +10:00
Hiroku cfe516e086 Merge branch 'RaftClientSyncFix' into 'main'
Fixed client sync issue with platforms. (Clients do not possess accurate behavior data.)

See merge request cable-mc/cobblemon!1394
2024-12-20 10:29:40 +00:00
Polymeta 63d921cb12 Merge branch 'fix-drop-message' into 'main'
Fix 'air dropped to the ground' message when Pokémon are killed in lava and drop no loot

See merge request cable-mc/cobblemon!1395
2024-12-20 09:23:07 +00:00
lionandPolymeta 6acde8c90f Fix 'air dropped to the ground' message when Pokémon are killed in lava and drop no loot 2024-12-20 09:23:07 +00:00
Hiroku 196ce2ab6d Merge branch 'fix-evolution-animation' into 'main'
Fix evolution animation not playing back to back

Closes #1229

See merge request cable-mc/cobblemon!1396
2024-12-20 09:09:12 +00:00
lionandHiroku 6fb6ea2927 Fix evolution animation not playing back to back 2024-12-20 09:09:12 +00:00
JazzMcNade 538027cb1b Fixed client sync issue with platforms. (Clients do not possess accurate behavior data.) 2024-12-19 17:47:17 -06:00
FrankTheFarmer bd54020c9c Merge branch 'main' into implement_pokemon 2024-12-20 07:20:57 +10:00
Kenji_64 605d44f2c2 Caterpie remodel! 2024-12-19 12:43:21 +01:00
Paul 51fcc91d88 Fixed blinks not running 2024-12-19 21:24:00 +10:00
Gustavo Felippi PuerariandWeblate 63c603cc01 Translated using Weblate (Portuguese (Brazil))
Currently translated at 33.9% (2169 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-18 23:02:36 +00:00
TeggyandWeblate a7406dd321 Translated using Weblate (Spanish)
Currently translated at 98.0% (6267 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2024-12-18 23:02:36 +00:00
FrankTheFarmer 5c42b441fd Fixed Lotad using Charmander's blink animation for over a year now 2024-12-19 08:50:11 +10:00
Kenji_64 2211232652 Updated Goldeen's regular + shiny texture 2024-12-18 15:49:09 +01:00
Kenji_64 4ef8c40a83 Updated Skeledirge's shiny texture 2024-12-18 15:48:51 +01:00
Kenji_64 99ca941c73 Updated Mudbray's texture 2024-12-18 15:48:36 +01:00
Kenji_64 e5b977ff1a Updated Caterpie's model + textures 2024-12-18 15:48:08 +01:00
Kenji_64 0e381ac098 Fixed the bracket in Whiscash's data 2024-12-18 14:28:30 +01:00
FrankTheFarmer ace08a5673 Fixed Noctowl not having a proper placeholder fly animation 2024-12-18 21:59:00 +10:00
FrankTheFarmer de00622235 Merge branch 'main' into implement_pokemon 2024-12-18 21:23:54 +10:00
Paul 0e1611fd8e Merge remote-tracking branch 'origin/main' 2024-12-18 19:15:35 +10:00
Paul 51e575c6a6 Fixed action effects not playing animations, particles, or sounds in many circumstances. Tweaked spawn direction handling 2024-12-18 19:15:17 +10:00
Test 8789d16a53 replace hardcoded values with attribute for item interaction range 2024-12-17 22:09:12 -05:00
Gustavo Felippi PuerariandWeblate f7986d5ccf Translated using Weblate (Portuguese (Brazil))
Currently translated at 33.7% (2160 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-18 02:41:45 +00:00
Felipe Bermudes OrmeñoandWeblate c7423408a9 Translated using Weblate (Spanish (Mexico))
Currently translated at 30.6% (1960 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es_MX/
2024-12-18 02:41:44 +00:00
TeggyandWeblate 52b0c63751 Translated using Weblate (Spanish)
Currently translated at 96.8% (6189 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2024-12-18 02:41:44 +00:00
Polymeta 7ae20ccd60 Merge branch 'scrappy-lang-fix' into 'main'
Updated Scrappy's ability description

See merge request cable-mc/cobblemon!1389
2024-12-17 23:53:29 +00:00
Kenji_64 e652b5773d Bigger Big Whiscash! (scale is 1.2 now) 2024-12-18 00:46:46 +01:00
Conan 621b867d14 Updated Scrappy's ability description 2024-12-17 21:46:24 +01:00
chasem-dev b0ea22d220 Allow for programmatic persistence of npcs 2024-12-17 15:19:56 -05:00
Kenji_64 ae1f6393b7 Fixed big shiny Whiscash using the wrong texture 2024-12-17 15:04:51 +01:00
Kenji_64 ddb0ad4dda More texture fixes on the Charmander line 2024-12-17 12:53:31 +01:00
Kenji_64 83bc1292ea Charmeleon's tail fire is animated now too! 2024-12-17 11:15:55 +01:00
Kenji_64 39075b843e Charmander's tail fire is animated now! 2024-12-17 11:15:22 +01:00
amo dfb54b3bc3 brainfart 2024-12-17 01:17:01 +00:00
Polymeta 2928667500 Merge branch '1.6-spawns' into 'main'
Updated recipes for Scope Lens, Wide Lens, and Zoom Lens. Updated spawns....

See merge request cable-mc/cobblemon!1384
2024-12-16 23:50:04 +00:00
VeraxielandPolymeta 1c528a909c Updated recipes for Scope Lens, Wide Lens, and Zoom Lens. Updated spawns.... 2024-12-16 23:50:04 +00:00
Kenji_64 7db59cc3bd Fixed Alolan Raichu's insomnia. Sleep well! 2024-12-16 15:25:05 +01:00
amo 1083e770d0 add player-specific packet molang methods for snowstorm particles & animations 2024-12-16 12:43:15 +00:00
Paul 920f3f114b Merge remote-tracking branch 'origin/main' 2024-12-16 21:08:27 +10:00
Hiroku 9ca5d12f84 Merge branch 'FixInBattleFlightFidgeting' into 'main'
FixInBattleFlightFidgeting

See merge request cable-mc/cobblemon!1383
2024-12-16 09:41:22 +00:00
Hiroku cc9bb528a8 Merge branch 'npc-hitbox' into 'main'
Fixed npcs not being able to take custom hitbox properties

See merge request cable-mc/cobblemon!1381
2024-12-16 09:40:46 +00:00
Paul 1cbd00691f Merge remote-tracking branch 'origin/main' 2024-12-16 19:05:10 +10:00
Paul 98394333da More variable conversions for the task configs 2024-12-16 19:04:56 +10:00
JazzMcNade f4c847fdd5 Replaced isGrounded with the more reliable isAirborne. Prevented pokemon from currently flying from receiving a raft. 2024-12-16 01:04:46 -06:00
Conan ec6e1403e7 Fixed npcs not being able to take custom hitbox properties 2024-12-16 05:24:26 +01:00
Hiroku 10a4a03a8b Merge branch 'close-battle-gui-with-mouse' into 'main'
Fix battle GUI not closing with mouse keybind

Closes #1093

See merge request cable-mc/cobblemon!1380
2024-12-16 03:06:46 +00:00
lionandHiroku e0a86f8794 Fix battle GUI not closing with mouse keybind 2024-12-16 03:06:45 +00:00
FrankTheFarmer 5e5f35b306 Corrected rotations in Snivy's head bone set 2024-12-16 10:14:29 +10:00
FrankTheFarmer 65ef2076eb Updated Snivy poser to use head_ai bone instead 2024-12-16 10:09:55 +10:00
FrankTheFarmer e8f6bbd742 Updated Servine poser to use head_ai bone instead 2024-12-16 10:09:40 +10:00
Paul 653b9be4a3 Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/npc/widgets/ConfigVariableList.kt
2024-12-16 10:03:13 +10:00
Paul 767e024ec4 Debug logging of pokemon entity ticking 2024-12-16 09:55:45 +10:00
FrankTheFarmer 5256bf1267 Updated placeholder animations for Braixen and Delphox 2024-12-16 08:54:54 +10:00
FrankTheFarmer d2a5dfcdc0 Updated Serperior's placeholders and added a water surface pose because serpent 2024-12-16 08:23:49 +10:00
FrankTheFarmer 124eb876de Merge branch 'main' into implement_pokemon 2024-12-16 08:21:46 +10:00
Polymeta c8b0f36049 Merge branch 'bugfixes-apion' into 'main'
Fixes #1182

Closes #1182

See merge request cable-mc/cobblemon!1373
2024-12-15 18:25:02 +00:00
ApionandPolymeta be2a0be806 Fixes #1182 2024-12-15 18:25:02 +00:00
Paul ba4d42ccf6 Try tweaking spawn direction handling 2024-12-15 23:04:08 +10:00
Paul 5545d3498f Include 2 more variables in clamping of rotations 2024-12-15 20:53:50 +10:00
Paul a3460a4b8f Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/npc/widgets/ConfigVariableList.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2024-12-15 20:50:05 +10:00
Hiroku 641bd7ebaa Merge branch 'advancing' into 'main'
1.6 Advancement Reworks

See merge request cable-mc/cobblemon!1374
2024-12-15 09:16:28 +00:00
dhi_holoandHiroku 234c4fa0d4 1.6 Advancement Reworks 2024-12-15 09:16:28 +00:00
Hiroku 3dfda71ed5 Merge branch 'AbilityPatchCapsuleRefactor' into 'main'
AbilityPatchCapsuleRefactor

See merge request cable-mc/cobblemon!1377
2024-12-15 09:08:05 +00:00
Hiroku 65ee6de93f Merge branch 'chest-boat-interact' into 'main'
moved changes to chest boat (i'm dumb)

Closes #1214

See merge request cable-mc/cobblemon!1379
2024-12-15 09:07:48 +00:00
Paul be88b727bc Added useFixedRandom to pool party provider, added randomizePartyOrder to NPC classes and presets for randomly choosing lead battle pokemon 2024-12-15 18:04:04 +10:00
luke a69fc462ee moved changes to chest boat (i'm dumb) 2024-12-15 00:38:08 -07:00
Hiroku 7d5c30d27c Merge branch 'shift-click-interact' into 'main'
Changed distance to use player attribute

Closes #1232

See merge request cable-mc/cobblemon!1378
2024-12-15 07:32:39 +00:00
Hiroku f7c9c9d4f4 Update AbilityTypeChanger.kt 2024-12-15 07:30:12 +00:00
luke 41bc14168a Changed distance to use player attribute 2024-12-15 00:24:38 -07:00
Paul 9540c38a72 Updated readme example for NPC 2024-12-15 16:58:31 +10:00
JazzMcNade 7a96ed7cd1 Refactored queryPossible() as to not to require explicit Priority values 2024-12-15 00:45:51 -06:00
Hiroku 677adc8d2f Merge branch 'starter-selection-cry' into 'main'
Play cry when Pokémon is clicked on the starter selection screen

See merge request cable-mc/cobblemon!1362
2024-12-15 06:25:29 +00:00
lionandHiroku a99b1dfc6c Play cry when Pokémon is clicked on the starter selection screen 2024-12-15 06:25:29 +00:00
Hiroku 4a718ad0f6 Merge branch 'dex-update-event' into 'main'
Dex Data Updated Event

See merge request cable-mc/cobblemon!1353
2024-12-15 05:27:08 +00:00
Paul ddd417d458 Added player to PokedexDataChangedEvent's flow context 2024-12-15 15:19:43 +10:00
Paul 10a12a897e Merge remote-tracking branch 'origin/main' into dex-update-event 2024-12-15 15:15:48 +10:00
Paul 9fce99ed73 Improved dex event, added dex update flow, expanded dex molang and added q.player.pokedex 2024-12-15 15:15:13 +10:00
Hiroku c35f60dd5d Merge branch 'AbilitiesFixesRedux' into 'main'
AbilitiesFixesRedux

Closes #1245

See merge request cable-mc/cobblemon!1376
2024-12-15 03:11:07 +00:00
JazzMcNade 54e5a5e819 Fixed single abilities mons always evolving into the hidden ability. Fixed ability capsule / patch not being able to revert abilities. 2024-12-14 20:35:23 -06:00
Test 79ae35ea9e Merge branch 'n-p-c' into 'main'
fix npc scaling + eye height, update edit interface

See merge request cable-mc/cobblemon!1375
2024-12-15 02:17:45 +00:00
Test 58f85e6d0d fix npc scaling + eye height, update edit interface 2024-12-15 02:17:45 +00:00
Polymeta 71bfdf41f4 Merge branch 'the-else-strikes-back' into 'main'
Fix Feebas spawning

Closes #1187

See merge request cable-mc/cobblemon!1365
2024-12-15 01:13:26 +00:00
JordanandPolymeta 9976965673 Fix Feebas spawning 2024-12-15 01:13:26 +00:00
Hiroku 098df1a5a6 Merge branch 'dex-travelling-dimensions' into 'main'
Fix Pokédex screen getting stuck when changing dimensions or opening the battle GUI

See merge request cable-mc/cobblemon!1370
2024-12-15 01:09:47 +00:00
Guilherme PereiraandHiroku f49f34efa3 Fix Pokédex screen getting stuck when changing dimensions or opening the battle GUI 2024-12-15 01:09:47 +00:00
Hiroku eac19929c4 Merge branch 'fix-dex-animations-not-playing' into 'main'
Fix animations not playing on Pokédex

See merge request cable-mc/cobblemon!1355
2024-12-15 00:43:09 +00:00
Guilherme PereiraandHiroku 59cced5b2c Fix animations not playing on Pokédex 2024-12-15 00:43:08 +00:00
Apion f07707221f Merge branch 'implement_pokemon' into 'main'
Pokémon fixes and tweaks

Closes #1230 and #1137

See merge request cable-mc/cobblemon!1371
2024-12-14 23:57:34 +00:00
PolymetaandApion 89b89592ab Pokémon fixes and tweaks 2024-12-14 23:57:33 +00:00
Hiroku cdeb977769 Update DexInformationChangedEvent.kt 2024-12-14 23:55:43 +00:00
Gustavo Felippi PuerariandWeblate 78192c43a7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 33.6% (2148 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-14 18:41:41 +00:00
Paul a3987b433c Merge remote-tracking branch 'origin/main' 2024-12-14 22:19:51 +10:00
Paul 99de91bd7e Added optional level property to pool party providers for using molang to force a level value, closes #1244 2024-12-14 22:19:39 +10:00
Paul 4b292b1241 Less zealous on the warning logging 2024-12-14 22:16:07 +10:00
Hiroku 1e6e4d8c5f Merge branch 'moe-eats-bugs' into 'main'
Added ignore checks to prevent passive healing/revival when config values are 0

Closes #875

See merge request cable-mc/cobblemon!1372
2024-12-14 11:41:35 +00:00
MoeBoy76 9a61c3471b Added ignore checks to prevent passive healing/revival when config values are 0 2024-12-14 22:12:08 +11:00
Paul 77f7439853 Fixed brewing on neoforged 2024-12-14 14:51:01 +10:00
Segfault Guy 439161c180 Merge remote-tracking branch 'origin/main' into ihatebugtypes 2024-12-13 23:39:22 -05:00
Paul e9718b7e8b Merge remote-tracking branch 'origin/main' 2024-12-14 14:29:28 +10:00
Hiroku 4cadd4e20f Merge branch 'fix/watchdog' into 'main'
Watchdog: Possible fix for watchdog crashing

See merge request cable-mc/cobblemon!1368
2024-12-14 04:26:24 +00:00
Hiroku 17a3d86324 Update PokemonEntity.kt 2024-12-14 04:25:19 +00:00
Hiroku 48653073f5 if ( 2024-12-14 04:21:49 +00:00
Nick 82c7c03e28 Initial tests for watchdog fix 2024-12-13 20:18:13 -08:00
Nick 2d7f3257d1 Merge branch 'hiro-fix' into 'main'
I fix bugs too

Closes #1212, #1222, and #1228

See merge request cable-mc/cobblemon!1367
2024-12-14 04:16:35 +00:00
HirokuandNick bc7b4f94c2 I fix bugs too 2024-12-14 04:16:35 +00:00
Paul 7a9e9d7ced Fixed battles being startable while pokemon are busy, closes #1212 2024-12-14 13:52:19 +10:00
Paul 0f85ece16f Fixed cry sound effects playing twice for specific cases, closes #1222 2024-12-14 13:36:53 +10:00
Paul c4656e1a4e Fixed cubone alola bias not being visible, closes #1228 2024-12-14 12:57:17 +10:00
Paul 0c48a318c5 Added /runmolangscript, updated molang version 2024-12-14 12:22:25 +10:00
Paul dab89a9f8c Merge remote-tracking branch 'origin/main' 2024-12-14 11:05:55 +10:00
Paul 53fd2dba2d Fixed flows double-registering then triple-registering then quadruple-registering then- 2024-12-14 11:05:48 +10:00
Polymeta a5b15c6127 Merge branch 'more-items-tooltips' into 'main'
Add tooltips to many items

See merge request cable-mc/cobblemon!1346
2024-12-14 00:48:11 +00:00
Guilherme PereiraandPolymeta 174fb59bbb Add tooltips to many items 2024-12-14 00:48:11 +00:00
Paul 2f8bd44938 Added q.set_query for assigning new query function values, closes #1240 2024-12-14 10:36:53 +10:00
Paul 9d58c7126e Fixed set_npc_variable not initializing NPC data properly 2024-12-14 10:12:50 +10:00
Paul fd74f157a8 Work on generalised entity brain configurations to apply to pokemon 2024-12-14 10:06:39 +10:00
Hiroku 2afd722125 Incl default return for get_npc_variable when no data exists for the NPC yet 2024-12-14 00:03:25 +00:00
Polymeta c9cfe489d6 Merge branch 'EV-Berry-Lang-fixes' into 'main'
Fixed lang files for EV lowering berries to actually be correct

See merge request cable-mc/cobblemon!1364
2024-12-13 11:23:29 +00:00
Kenji_64 7b1f50b183 Transferred Sobble line's posers to json, gave them a sleep placeholder so it no longer t-poses and did minor fixes to their animations 2024-12-13 00:12:51 +01:00
Plastered_Crab 4ee029fa54 Fixed lang files for EV lowering berries to actually be correct 2024-12-12 09:41:17 -08:00
FrankTheFarmer 2c9705e230 Added missing changelog for poser conditions 😠 2024-12-12 16:54:22 +10:00
FrankTheFarmer b78d05611d Added missing minYaw configuration for q.look() function in JSON posers. oopsies 2024-12-12 15:53:21 +10:00
FrankTheFarmer 4574e9ae65 Merge branch 'main' into implement_pokemon 2024-12-12 15:49:08 +10:00
TeggyandWeblate e2ebb32708 Translated using Weblate (Spanish)
Currently translated at 87.6% (5601 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2024-12-11 15:53:06 +00:00
Kenji_64 4508f47c93 Made Venusaur's leaves not clip into its knees anymore. These leaves are tricky 2024-12-11 14:09:21 +01:00
FrankTheFarmer 683d62f9e0 Fixed Bewear T posing 0.25 seconds if fainting out of battle. fixes #1230 2024-12-11 14:27:24 +10:00
FrankTheFarmer 217b1cc561 Wailord is now 25% bigger 2024-12-11 13:18:09 +10:00
Segfault Guy b0466447cc Temp fix for missing form langs. 2024-12-10 21:59:39 -05:00
Kenji_64 b72f90551e Made Venusaur's leaves not clip into its back anymore 2024-12-11 02:41:58 +01:00
Kenji_64 30b146a59d Added walking speeds to the Kanto starters 2024-12-11 02:17:16 +01:00
Kenji_64 1e4afe36be Fixed Ivysaur's head clipping into its leaf 2024-12-10 22:34:30 +01:00
Zack the GhastandWeblate 727ff96ff8 Translated using Weblate (Portuguese (Portugal))
Currently translated at 28.9% (1851 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2024-12-10 12:41:43 +00:00
Gustavo Felippi PuerariandWeblate 9307f957b7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.6% (2089 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-10 12:41:43 +00:00
TeggyandWeblate d48978f6a4 Translated using Weblate (Spanish)
Currently translated at 86.5% (5531 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2024-12-10 12:41:42 +00:00
FrankTheFarmer a76ec37e63 Removed unused future drop data from Ho-oh's drops 2024-12-10 17:02:18 +10:00
FrankTheFarmer c3f397b508 Gave Corsola a placeholder ground walk 2024-12-10 16:56:54 +10:00
FrankTheFarmer d4f5b1c0ca Gave Corsola the look animation 2024-12-10 16:47:52 +10:00
FrankTheFarmer ae4680f546 Updated chewtle and drednaw drops to use new turtle scute id 2024-12-10 16:28:25 +10:00
FrankTheFarmer b0c14c686c Moved Trevenant to a JSON poser and also fixed its T pose sleep 2024-12-10 15:34:25 +10:00
FrankTheFarmer 4a59c02340 Set Seaking's ground idle to loop to prevent error message 2024-12-10 14:50:28 +10:00
FrankTheFarmer 9754515ec6 Re committed the Raichu thingy without the build folder path thingy 2024-12-10 14:04:43 +10:00
FrankTheFarmer f810cdb090 Revert "Replaced Alolan Raichu's kotline poser with a .json one and made it being able to surf on water now"
This reverts commit 2e39aa7f7f.
2024-12-10 14:03:19 +10:00
FrankTheFarmer af8cfa8b3d Corrected Alolan Raichu's poser conditions 2024-12-10 14:02:56 +10:00
amo d1a8171079 resolve threads 2024-12-09 23:57:38 +00:00
amo d4b673ea38 Merge branch 'main' into dex-update-event 2024-12-09 23:54:08 +00:00
FrankTheFarmer c9de2b2bf1 Moved Alolan Raichu poser to the right place 2024-12-10 06:04:18 +10:00
FrankTheFarmer f3bd112f3e Tweaked sight cone for Pignite 2024-12-10 05:04:17 +10:00
FrankTheFarmer 2d3bd8c2af Tweaked eye height, and sight cone for Incineroar 2024-12-10 05:03:54 +10:00
FrankTheFarmer 8a9a59fd3c Tweaked hitbox, eye height, and sight cone for Emboar 2024-12-10 05:03:22 +10:00
FrankTheFarmer c738f55078 Merge branch 'main' into implement_pokemon 2024-12-10 02:30:30 +10:00
Paul 885cde045a Merge remote-tracking branch 'origin/main' into smarterer-pokemons 2024-12-09 11:32:36 +10:00
Kenji_64 2e39aa7f7f Replaced Alolan Raichu's kotline poser with a .json one and made it being able to surf on water now 2024-12-08 18:37:32 +01:00
Kenji_64 c65aaf03eb Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-12-08 16:20:50 +01:00
Sterrezo d3e18cb8c0 Fixed Garchomp missing it's cry 2024-12-08 14:38:48 +01:00
Sterrezo 8de519ad3f Fixed timing on Gabite's cry 2024-12-08 14:31:39 +01:00
Kenji_64 d06c735585 Made Farigiraf bigger and better (changed the scale from 0.95 to 1.5) 2024-12-08 13:11:53 +01:00
Kenji_64 c820a01db0 -fixed Horsea's and Seadra's posers using the wrong animation
-added ground_walk to Horsea
-added walk speeds to Horsea and Seadra
-fixed Seadra's left fin animation
2024-12-07 21:41:25 +01:00
amo de21b7c402 forgot me loighter 2024-12-07 04:44:27 +00:00
amo 10fe3c4362 🍋‍🟩 Chore: Add Dex data update event 2024-12-07 04:40:50 +00:00
Gustavo Felippi PuerariandWeblate aca1433595 Translated using Weblate (Portuguese (Brazil))
Currently translated at 30.8% (1969 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-07 03:41:43 +00:00
TeggyandWeblate 082c382179 Translated using Weblate (Spanish)
Currently translated at 80.4% (5140 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2024-12-07 03:41:42 +00:00
Paul bfcaa4bda4 pokemon AI tweaking 2024-12-07 12:23:13 +10:00
Paul 7370841e62 Ported up to latest main 2024-12-06 20:23:28 +10:00
Paul 3c347214a8 Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonActivities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/GiveAllPokemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/AttackAngryAtTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/MoveToAttackTargetTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/npc/NPCEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/ai/PokemonMoveControl.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/WorldExtensions.kt
2024-12-06 20:12:55 +10:00
Sterrezo 0d6f6221cb Tweaked Elekid's cry sound keyframe timing 2024-12-05 09:48:06 +01:00
FrankTheFarmer 77e6070e78 Several adjustment's to Venusaur to allow the leaf to move with the head 2024-12-05 15:52:18 +10:00
Segfault Guy c2d85a0cdf Battle performance, bugs, and PokemonEntity fixes. 2024-12-05 00:22:20 -05:00
FrankTheFarmer 46c5849842 Fixed Charizard tilting its head while looking 2024-12-05 11:07:25 +10:00
FrankTheFarmer 72bca5b6fc Stopped Kingdra from T posing underwater 2024-12-05 10:25:19 +10:00
FrankTheFarmer 94d12f69fe Fixed Hippowdon falling asleep every time it battled 2024-12-05 10:02:25 +10:00
FrankTheFarmer 1f68bab455 Feebas hitbox updated 2024-12-04 16:42:55 +10:00
FrankTheFarmer 390d214976 Magikarp rescaled to 1 2024-12-04 16:36:38 +10:00
FrankTheFarmer 5b40c8bab2 Removed Feebas' ability to walk on water 2024-12-04 15:22:27 +10:00
FrankTheFarmer 7eee9117c0 Feebas and Milotic portrait fixes 2024-12-04 15:22:13 +10:00
FrankTheFarmer 49e1b6ac00 Merge branch 'main' into implement_pokemon 2024-12-04 15:22:08 +10:00
Tyzillion d356ad3a3d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2024-12-03 22:55:11 -05:00
Weblate 7cea5ad69e Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2024-12-04 00:41:50 +00:00
Zack the GhastandWeblate 0b9b5ac306 Translated using Weblate (Portuguese (Portugal))
Currently translated at 28.8% (1845 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2024-12-04 00:41:46 +00:00
Gustavo Felippi PuerariandWeblate 8941f3079b Translated using Weblate (Portuguese (Brazil))
Currently translated at 29.1% (1866 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2024-12-04 00:41:44 +00:00
Alexis SalgueiroandWeblate e9a0815ca6 Translated using Weblate (French)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-12-04 00:41:41 +00:00
FrankTheFarmer 0f38eb5bca Corrected Charizard poser to use head_ai bone instead. 2024-12-02 23:14:30 +10:00
FrankTheFarmer 1d3e54a54a Kecleon can now sleep and also updated its idle to prevent clipping 2024-12-02 21:12:16 +10:00
FrankTheFarmer 4792b14051 Buneary animation update to fix walk and fluff 2024-12-02 21:11:38 +10:00
FrankTheFarmer 66d87d68de Gyarados portrait readjustment 2024-12-02 20:30:16 +10:00
FrankTheFarmer 5d60825c7d Fixed Charizard sometimes using ground idle over water. 2024-12-02 20:10:47 +10:00
FrankTheFarmer 4ca40b59d9 Charizard animation update with poser tweaks to battle and sleeping poses 2024-12-02 18:53:53 +10:00
FrankTheFarmer a9b6e02a71 Fixed Magikarp using ground idle on water surface 🐟🤛🤛🤛👨‍🌾 2024-12-02 16:49:37 +10:00
FrankTheFarmer 055eaab819 Merge branch 'main' into implement_pokemon 2024-12-02 11:11:41 +10:00
FrankTheFarmer 1f467a72a6 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-12-02 11:11:38 +10:00
FrankTheFarmer 14ee434e13 Fixed Flying charizards in battle using their ground battle animations. These are the first air battle anims i think 2024-12-02 11:11:14 +10:00
Sterrezo d317a4488e Update skarmory_cry.ogg 2024-12-01 16:23:08 +01:00
FrankTheFarmer 3b78d68ed0 Fixed Hisuian Sneasel using Johtonian Sneasel's cry 2024-12-01 09:39:46 +10:00
FrankTheFarmer 2d234931d7 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-12-01 09:12:02 +10:00
FrankTheFarmer ff01cc1551 AAAAAAAAAAAAAHHHHHHHHHHHHHHH 2024-12-01 09:11:45 +10:00
FrankTheFarmer 4ae49291ad Merge branch 'main' into implement_pokemon 2024-12-01 09:09:44 +10:00
FrankTheFarmer 268f219754 Renamed and Reorganizes the magikarp jump stuff again lmao. This time, it's for real. 2024-11-30 15:52:32 +10:00
Zack the GhastandWeblate fe48da6277 Translated using Weblate (Portuguese (Portugal))
Currently translated at 27.3% (1750 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2024-11-29 09:15:34 +00:00
MiaandWeblate 12c9c1c295 Translated using Weblate (German)
Currently translated at 88.8% (5679 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-11-29 09:15:33 +00:00
Zack the GhastandWeblate 7471b336be Translated using Weblate (Portuguese (Portugal))
Currently translated at 26.9% (1720 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_PT/
2024-11-26 12:15:28 +00:00
FrankTheFarmer 6d819a0507 Restored Popplio's shoulder animation and removed an unintentional recoil animation 2024-11-26 20:30:11 +10:00
FrankTheFarmer 41e0c1bf2d Fixed Liepard using Purrloin's cry 2024-11-26 19:56:12 +10:00
FrankTheFarmer db8b5ab631 Porygon 2 poser adjustments due to seperate portrait animation. 2024-11-26 19:38:40 +10:00
FrankTheFarmer d7c531d51f Merge branch 'main' into implement_pokemon 2024-11-26 19:29:54 +10:00
FrankTheFarmer 03f690e450 Porygon 2 animation fixes. Holy flip this was a pain lol. 2024-11-26 19:29:47 +10:00
FrankTheFarmer 6ffc6b98e5 Stopped popplio from using battle idle when shoulder mounted. still need to look for shoulder animation tho 2024-11-23 21:16:36 +10:00
FrankTheFarmer a99865e0c6 Porygonz quirk interpolation fix 2024-11-23 21:15:48 +10:00
FrankTheFarmer 2c7d5a937f Merge branch 'main' into implement_pokemon 2024-11-23 20:30:18 +10:00
FrankTheFarmer 37c9c7970a Emergency placeholder spheal rolling animation after community outrage 2024-11-22 19:39:12 +10:00
FrankTheFarmer a9c1c318dc Set default to none for magikarp jump patterns. 2024-11-21 16:22:57 +10:00
FrankTheFarmer 4e74e85976 Oops. Got the order number wrong. 😨 2024-11-21 15:00:29 +10:00
FrankTheFarmer 30f9e506b2 Reorganized the entirety of Magikarp jump patterns to standards and added purple eyed gyarados. theres so many damn gyarados combos dude 2024-11-21 14:50:07 +10:00
FrankTheFarmer 72b17e3c04 Merge branch 'main' into implement_pokemon 2024-11-21 09:02:12 +10:00
FrankTheFarmer ca00521ba8 Merge branch 'main' into implement_pokemon 2024-11-20 14:30:40 +10:00
FrankTheFarmer 3f289b1deb Merge branch 'main' into implement_pokemon 2024-11-19 20:52:17 +10:00
FrankTheFarmer cbd86be78c Fixed hitbox sizes for Grotle and Torterra being set to default values 2024-11-19 14:11:19 +10:00
FrankTheFarmer c62e1bcc28 Merge branch 'main' into implement_pokemon 2024-11-19 13:28:35 +10:00
FrankTheFarmer 6c91bc273e removed female specifications in Seaking's animations causing a crash 2024-11-19 13:17:15 +10:00
FrankTheFarmer 76d9fae579 Removed single quote that broke flamigo profile and portrait 2024-11-19 10:34:50 +10:00
FrankTheFarmer 76de1f6076 Let paldean wooper temporarily use johtonian cry 2024-11-19 10:10:47 +10:00
FrankTheFarmer b1971f90be Quagsire will now inherit the wooper heart aspect from wooper but there are no assets 2024-11-19 10:02:01 +10:00
Natchakot ChuchokjatupornandWeblate 948f299f8f Translated using Weblate (Thai)
Currently translated at 90.1% (5764 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/th/
2024-11-18 21:41:42 +00:00
FrankTheFarmer e702d0088d Krookodile animation update with corrected quirk sound event 2024-11-18 20:43:52 +10:00
FrankTheFarmer 332a0a6e1b Merge branch 'main' into implement_pokemon 2024-11-17 20:36:03 +10:00
FrankTheFarmer 58bf92eeab Merge branch 'main' into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/animations/0350_milotic/milotic.animation.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0350_milotic/milotic.json
2024-11-17 20:34:44 +10:00
FrankTheFarmer 7787d749c9 Magikarp faint fix 2024-11-17 20:32:51 +10:00
FrankTheFarmer b075145090 Hydreigon will now look at you properly. With one of its heads anyways 2024-11-17 15:41:21 +10:00
FrankTheFarmer afe7fff061 Changed Alomomola's pose in the portrait. No more sad fish out of water 2024-11-17 15:14:27 +10:00
FrankTheFarmer 6f3abd0986 Wiglett and Wugtrio will no longer float to the surface and can breathe underwater 2024-11-17 11:14:01 +10:00
FrankTheFarmer 2da2c41011 fixed looping absol blink 2024-11-17 10:53:59 +10:00
FrankTheFarmer 252a223e89 tweaked milotic movement speeds to match the values from the bbmodel 2024-11-15 15:34:25 +10:00
FrankTheFarmer dcf8b22592 fixed Charizard jaw z fighting 2024-11-15 15:34:10 +10:00
FrankTheFarmer 5c1dbfff7b fixed alomomola crashing the game when it tried to sleep quirk (it never had one) 2024-11-15 15:33:51 +10:00
FrankTheFarmer e8c9ae1a64 Fixed mamoswine and piloswine shiny textures 2024-11-15 15:33:18 +10:00
FrankTheFarmer b1f9796e21 Emergency feebas line animations 2024-11-15 14:36:32 +10:00
Natchakot ChuchokjatupornandWeblate 5c075d7d29 Translated using Weblate (Thai)
Currently translated at 88.7% (5671 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/th/
2024-11-13 22:41:55 +00:00
Carmendar 02847c428d Fixed some invisible mons. 2024-11-12 19:49:19 -06:00
Carmendar 7552038d48 Removed duplicate aspects for Alcremie & Vivillon. Scaled down Kakuna. 2024-11-12 18:03:48 -06:00
Weblate 854f02d34f Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2024-11-12 21:41:59 +00:00
Natchakot ChuchokjatupornandWeblate a3c3fa12e5 Translated using Weblate (Thai)
Currently translated at 87.1% (5567 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/th/
2024-11-12 21:41:53 +00:00
Alexis SalgueiroandWeblate 3527da02a6 Translated using Weblate (French)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-12 21:41:48 +00:00
MiaandWeblate 96f537fa27 Translated using Weblate (German)
Currently translated at 87.5% (5596 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-11-12 21:41:45 +00:00
Carmendar 84d6a8b110 Merge branch 'main' into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0973_flamigo/flamigo.json
2024-11-10 03:55:05 -06:00
Carmendar e9be40848a Merge remote-tracking branch 'origin/main' 2024-11-10 03:17:24 -06:00
Carmendar d8dd485d3f Milotic placeholder anims. 2024-11-10 03:12:38 -06:00
Carmendar b27924bd4a converted happiny to poser, and updated garchomp anim. 2024-11-09 17:11:43 -06:00
Natchakot ChuchokjatupornandWeblate e9f58df359 Translated using Weblate (Thai)
Currently translated at 84.1% (5381 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/th/
2024-11-09 21:29:17 +00:00
Adam IdriciandWeblate 6885569f9e Translated using Weblate (French)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-09 21:29:15 +00:00
Alexis SalgueiroandWeblate 601927406c Translated using Weblate (French)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-09 21:29:15 +00:00
Carmendar be61d2d2ad Locator update for Charizard, Pivot fix for Aggron, Model fixes for Onix & Gible, Fixed Abra & Flamigo portrait, Height fix for Lapras surfacewater anims. 2024-11-09 00:08:03 -06:00
Natchakot ChuchokjatupornandWeblate 347b0bfa37 Translated using Weblate (Thai)
Currently translated at 81.4% (5206 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/th/
2024-11-07 23:47:02 +00:00
Alexis SalgueiroandWeblate efa63b105f Translated using Weblate (French)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-07 23:47:01 +00:00
Adam IdriciandWeblate 18d8c19df7 Translated using Weblate (French)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-07 23:47:01 +00:00
Carmendar 647989944e Fixed changelog! 2024-11-07 17:30:56 -06:00
Carmendar e80facfd3b Merge branch 'main' into implement_pokemon 2024-11-07 17:27:38 -06:00
Carmendar 43dbc87a1e Merge remote-tracking branch 'origin/main' 2024-11-07 17:23:40 -06:00
Natchakot ChuchokjatupornandWeblate 8d7c92f30e Translated using Weblate (Thai)
Currently translated at 80.9% (5173 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/th/
2024-11-07 22:41:43 +00:00
Alexis SalgueiroandWeblate 4e7b7d8d59 Translated using Weblate (French)
Currently translated at 96.6% (6179 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-07 22:41:41 +00:00
Felipe Bermudes OrmeñoandWeblate 1213fc9145 Translated using Weblate (Spanish (Mexico))
Currently translated at 30.5% (1954 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es_MX/
2024-11-07 22:41:40 +00:00
Carmendar 4b4ef77d4e Merge remote-tracking branch 'origin/main' 2024-11-07 00:36:25 -06:00
Sterrezo cb431c0b5f Added a placeholder cry animation to Hydreigon 2024-11-07 01:45:35 +01:00
Sterrezo f56960d15b Update gyarados.animation.json 2024-11-07 01:33:30 +01:00
Carmendar 41017342c9 Added temp surface water idle & swim for Flamigo. Updated scale for Electabuzz, Magmar and Rhyperior. Fixed Galvantula blinking breaking game. Added sleep behavior for Spinda. Made Litten line use correct naming scheme for walk behavior. Removed empty line on Tepig species file. Added missing L to "weepinbel" in changelog. 2024-11-06 01:57:15 -06:00
Carmendar 9b218bb4f7 Merge remote-tracking branch 'origin/main' 2024-11-05 17:13:29 -06:00
Carmendar fbe37cf81a Merge branch 'main' into implement_pokemon 2024-11-05 01:53:46 -06:00
Carmendar 6ec091dfa5 Gave Zarude temp walk anims, and added implemented line to Kecleon. little changelog addition. 2024-11-05 01:45:49 -06:00
Carmendar e6a9c8e32e Added implemented line to Finizen & Palafin. 2024-11-05 00:48:27 -06:00
Carmendar ba034be048 Added implemented line to Mantine & Mantyke.
Removed implemented line from Kecleon, Finizen & Palafin.
2024-11-05 00:01:15 -06:00
Carmendar 157fe0435b Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-11-04 22:56:25 -06:00
Carmendar 1123d10b05 implemented shellos & gastrodon west-sea forms as well as clauncher & clawitzer right-claw forms. Gave octillery the ability to swim, and added placeholder walking anims for shellos & gastrodon. 2024-11-04 22:55:59 -06:00
Hiroku 8f7fa9a324 Merge branch 'main' into 'implement_pokemon'
# Conflicts:
#   common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0365_walrein/walrein.json
#   common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0999_gimmighoul/gimmighoulroaming.json
2024-11-05 02:45:30 +00:00
Carmendar 7cf60159c4 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0365_walrein/walrein.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0999_gimmighoul/gimmighoulroaming.json
2024-11-04 17:40:07 -06:00
Carmendar c5add81e90 Fixed Roaming Gimmighoul's recoil anim, updated textures for Salamence, and updated model & gave temp idle as well as a cry anim for Walrein. 2024-11-04 17:36:14 -06:00
Carmendar 5a6ada47b9 Merge remote-tracking branch 'origin/main' 2024-11-04 17:24:17 -06:00
Adam IdriciandWeblate 071038dc09 Translated using Weblate (French)
Currently translated at 96.6% (6176 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-04 12:28:48 +00:00
Weblate 2688e37f77 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2024-11-03 22:31:01 +00:00
阿鱼andWeblate e8a9ea1185 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2024-11-03 22:30:58 +00:00
Alexis SalgueiroandWeblate 4770c273f9 Translated using Weblate (French)
Currently translated at 96.3% (6159 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-03 22:30:55 +00:00
Adam IdriciandWeblate 0e2e42b826 Translated using Weblate (French)
Currently translated at 96.3% (6159 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2024-11-03 22:30:54 +00:00
GottvaterNougatKoenigandWeblate de819828ce Translated using Weblate (German)
Currently translated at 87.5% (5597 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-11-03 22:30:53 +00:00
MiaandWeblate fed34e9b98 Translated using Weblate (German)
Currently translated at 87.5% (5597 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-11-03 22:30:53 +00:00
Polymeta f4336c9227 Merge branch 'refs/heads/main' into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0091_cloyster/cloyster.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0129_magikarp/magikarp.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0130_gyarados/gyarados.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0131_lapras/lapras.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0594_alomomola/alomomola.json
2024-11-03 13:32:29 +00:00
Carmendar 123562c672 Merge remote-tracking branch 'origin/main' 2024-11-03 00:47:41 -05:00
tmetcalfe89 493101850e fornatted posers/resolvers 2024-11-02 18:45:22 -07:00
Carmendar 6bba26a848 Gyarados no longer pretends to be a diglett. 2024-11-02 19:23:32 -05:00
Carmendar 46474f67b8 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-11-02 18:35:14 -05:00
Carmendar 14f0a4643c Removed erroneous anims. 2024-11-02 18:34:37 -05:00
Carmendar 037e667411 Merge branch 'main' into 'implement_pokemon'
# Conflicts:
#   common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0091_cloyster/cloyster.json
#   common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0131_lapras/lapras.json
#   common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0594_alomomola/alomomola.json
2024-11-02 23:07:35 +00:00
Carmendar 0a25c286cd Fixed underwater anim conditions. 2024-11-02 18:01:55 -05:00
Carmendar 5561270a60 Merge branch 'main' into implement_pokemon 2024-11-02 15:27:26 -05:00
Carmendar 1d499bbce8 Gave Hydreigon placeholder anims. 2024-11-02 14:56:37 -05:00
Carmendar 6e8bf6999c updated Model & animations for Tepig line, tweaked Absol model & textures, fixed shoulder mount placements, added some walkSpeeds for some pokemon. Updated changelog. 2024-11-02 02:45:37 -05:00
Carmendar 5da8977ec0 fixed Serperior portrait 2024-11-01 22:40:31 -05:00
Carmendar fcb32062d3 Merge remote-tracking branch 'origin/main' 2024-11-01 22:30:53 -05:00
Carmendar 9e74c7fd18 Added some placeholder anims for serperior, liepard, mareanie, toxapex, sandygast, palossand, regieleki, regidrago. Anim fixes for scorbunny, roaming gimmighoul. Added anims for Fomantis, Lurantis, Smeargle, Tyrogue. Tweak to porygon-z anims. 2024-11-01 22:20:23 -05:00
Carmendar d3d73cc30d Merge branch 'refs/heads/main' into implement_pokemon 2024-11-01 22:10:26 -05:00
Sterrezo d9f76677c0 Fixed a missing cry animation for Trapinch
Closes https://gitlab.com/cable-mc/cobblemon/-/issues/1137
2024-11-02 00:39:23 +01:00
Sterrezo 151999c2cd Fixed cries for Gyarados and Munchlax, updated Magikarp's and Gyarados' cries 2024-11-01 23:58:10 +01:00
Carmendar 0460f17c1f Merge remote-tracking branch 'origin/main' 2024-11-01 00:47:17 -05:00
Carmendar 2c69513d2b Updated PokemonModelRepository.kt 2024-11-01 00:18:35 -05:00
Carmendar 617efe6a58 Remodeled Popplio line, tweaks for Garchomp, Mareanie line, Porygon, added anims for Flabebe line, Litten line, Finneon line, Bagon line, Flamigo, Lapras, Magnezone, Sprigatito. Updated Changelog.
- Removed Herobrine.
2024-11-01 00:05:52 -05:00
Wi2tert 2734f1d00c Update Bulbasaur Ivysaur Venusaur Animation 2024-10-31 12:20:53 +08:00
tmetcalfe89 e66069b270 swapped smeargle colors right way around 2024-10-30 01:49:28 -07:00
tmetcalfe89 a661575451 de-dyed smeargle 2024-10-29 23:16:22 -07:00
Carmendar a23017cd1f Updated scaling of a handful of pokemon, gave pory line dummy sleep cries, fixed mantine antennae, and onix has math.mod now.
- Removed Herobrine.
2024-10-29 22:13:20 -05:00
tmetcalfe89 0df19ce18a integrated retro's changes
Fixed Bellsprout's GEO ("arns" to "arms", "foor" to "foot", etcetera).
Altered Weepinbell's Scale and Hitbox
Altered Victreebel's Walk Speed and Hitbox.
2024-10-29 15:22:53 -07:00
Wi2ter 5a751546ec Update Changelog 2024-10-29 18:38:25 +08:00
Carmendar ee9e1cabc1 remodeled Poliwhirl, Poliwrath, Riolu & Lucario. Added animations for Bagon line, Shellder line, Kecleon, Furret & Spinda. Updated changelog.
- Removed Herobrine.
2024-10-29 01:44:02 -05:00
Wi2ter d78b46155f Update Klink Line animation 2024-10-28 17:26:14 +08:00
Wi2ter 1afd61d517 Update Dreepy Drakloak Animation 2024-10-28 16:27:57 +08:00
Carmendar 97a5083ff5 Updated swim speeds for some water mons & merged main into implement. 2024-10-27 19:43:51 -05:00
Carmendar 0d31e74790 Merge branch 'main' into implement_pokemon 2024-10-27 17:42:35 -05:00
Carmendar 02214196f4 Merge remote-tracking branch 'origin/main' 2024-10-27 17:40:11 -05:00
Carmendar aae268cfc5 New water pokemon can actually water now. 2024-10-27 17:05:46 -05:00
Carmendar 20f37d8799 Third coming of Klawf. (fixed the cry for real this time. 2024-10-27 15:52:46 -05:00
Carmendar 0b825bcda3 The second coming of Klawf (its cry), animation updates for a handful of mons, Portrait/Picture & scale fixes for a handful of mons, added species feature for three-segment dudunsparce, added dummy animation file for sleep cries, and added cries for Magikarp & Gyarados.
- Removed Herobrine.
2024-10-27 15:48:29 -05:00
GenotypeXD-Dev aba3bd22c7 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-26 22:02:04 -06:00
GenotypeXD-Dev b1fc33f5a1 Added Klawf 2024-10-26 22:01:39 -06:00
tmetcalfe89 f2033f5e33 fix alakazam json poser 2024-10-25 12:51:57 -07:00
tmetcalfe89 6c600b7bdb alakazam - kt->json 2024-10-25 12:27:33 -07:00
Wi2ter e93bfb7f0f Update Kleavor Animation 2024-10-25 18:25:09 +08:00
Wi2ter 8976909742 Update Alomomola Animation 2024-10-25 18:23:06 +08:00
Wi2ter 30a9c2f53e Update Mantyke Mantine Animation 2024-10-25 18:18:58 +08:00
Wi2ter ea60790865 I forgot to change the poser! 😭 2024-10-25 11:36:38 +08:00
Wi2ter f906fac8f3 Update Buneary and Lopunny animation 2024-10-25 11:28:57 +08:00
Wi2ter 05b324a3cb Remodel Swinub Piloswine Mamoswine [big guy] 2024-10-25 09:40:37 +08:00
Carmendar 8ce1c7ccf5 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-24 19:06:09 -05:00
Carmendar a37f93241f Slowed Numel, and fixed shiny Staryu emissive texture. 2024-10-24 19:05:14 -05:00
Wi2ter 6689663ca9 remodel Snivy Servin Serperior 🌿 🐍 2024-10-24 19:10:37 +08:00
Carmendar 959b81a58f flashy new models for ✨ Dwebble & Crustle ✨ 2024-10-24 01:27:11 -05:00
Carmendar 62e607b44e Forgot to remove magby line & onix from the kotlin model repository. 2024-10-23 23:22:19 -05:00
Carmendar 407bb6b977 Merge remote-tracking branch 'origin/main' 2024-10-23 20:07:59 -05:00
Carmendar a9efd327b8 Magby line & Onix are now beautiful. 2024-10-23 19:58:34 -05:00
Carmendar 64cb4d2ff8 Removed Herobrine 2024-10-23 00:36:52 -05:00
FrankTheFarmer 54786fa82e I forgot the changelog again 😔 2024-10-23 15:06:56 +10:00
FrankTheFarmer ecab1b7825 Porygon line poser fixes 🖥🦆 2024-10-23 14:57:22 +10:00
FrankTheFarmer 75d7106f46 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-23 14:37:28 +10:00
Carmendar 6f82c09afa angry crying 😠😢 2024-10-22 23:21:40 -05:00
Carmendar 778e5e219c Everyone is crying 😢 so sad. 2024-10-22 22:05:42 -05:00
FrankTheFarmer f4682e0bd2 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-23 11:07:21 +10:00
Tyzillion 906d487ffc Added rootBone to all existing json posers. 2024-10-22 08:08:31 -04:00
Tyzillion 817b801bf7 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/animations/0006_charizard/charizard.animation.json
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/posers/0595_joltik/joltik.json
2024-10-22 07:44:07 -04:00
Sterrezo e401b11ab9 Added a sound keyframe to absol.animation.json 2024-10-22 10:21:08 +02:00
Carmendar 165f70e01d Updated changelog 2024-10-22 02:05:50 -05:00
GenotypeXD-Dev fddfbfb4ed Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-21 20:03:46 -06:00
GenotypeXD-Dev 03e229c511 Implemented Absol and Veluza. Fixed Charizard sleep crash 2024-10-21 20:02:26 -06:00
Sterrezo 0b08372407 Pushed an updated cry checker script. Corrected cries for Smearlge, Ledyba, Ledian, Sunkern, Sunflora, Smeargle.
Thanks to Polymeta for saving the script
2024-10-21 00:43:33 +02:00
Carmendar 6d26b5de20 Joltik can now blink while walking without blowing up your game. 2024-10-20 02:16:00 -05:00
Carmendar ef179410f9 Joltik can now blink while walking without blowing up your game. 2024-10-20 02:08:30 -05:00
FrankTheFarmer 194f6e019a Bellsprout line remodeled and animated 2024-10-18 16:29:15 +10:00
FrankTheFarmer 1f933827b9 Merge branch 'main' into implement_pokemon 2024-10-18 16:08:20 +10:00
FrankTheFarmer 28765bb2ce Merge branch 'main' into implement_pokemon 2024-10-18 13:29:35 +10:00
FrankTheFarmer 136391db04 👨‍🌾🔫🐲 2024-10-18 13:27:26 +10:00
Wi2ter 0cc39e71fc revamp Klink Klang and Klingklang 2024-10-18 10:11:53 +08:00
FrankTheFarmer d65cc08793 Several data fixes for posers and hitboxes 2024-10-17 23:11:43 +10:00
GenotypeXD-Dev a1729a0266 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-17 01:43:17 -06:00
GenotypeXD-Dev 8505634df3 Implement Charmander, Charmeleon, And Charizard Remodels + Gyarados Poser Fixes 2024-10-17 01:42:40 -06:00
FrankTheFarmer 02047c1ec0 Like a bajillion data fixes for posers and hitboxes 2024-10-17 17:24:39 +10:00
FrankTheFarmer 068fa4b2ef Updated Firefox. Make sure to update yours too! 2024-10-17 09:48:45 +10:00
Carmendar bfd266a40e Updated Toxapex, revamped Porygon line, remodeled Gastly and Haunter, updated portraits & pictures for many pokemon. 2024-10-15 23:54:34 -05:00
FrankTheFarmer 6367d4e2aa Tweaked Regional Pokédex orders to allow for proper ordering of the National Pokédex. 2024-10-16 12:59:16 +10:00
FrankTheFarmer f8a680f381 :*: **:** *:*:* :: :***: :;: 2024-10-15 22:32:01 +10:00
GenotypeXD-Dev 81750e6eb9 Added Implemented tag to Finizen and Palafin 2024-10-14 02:17:18 -06:00
GenotypeXD-Dev 818cf682bf Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-14 02:15:11 -06:00
GenotypeXD-Dev 3112a0650f Implemented Finizen and Palafin (+Hero form) 2024-10-14 02:14:51 -06:00
FrankTheFarmer 747ef94f04 Fixed baltoy and claydol exploding the game when scanned. 2024-10-14 15:56:38 +10:00
FrankTheFarmer dbacada48c Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-14 15:16:12 +10:00
FrankTheFarmer 26db8a40cc Un deleted female oinkolognes. This will affect the oinkologne population. 2024-10-14 15:15:30 +10:00
GenotypeXD-Dev 6e5feda00e Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-13 23:12:07 -06:00
GenotypeXD-Dev f04330074b Added implemented tag to all currently implemented 1.6 pokemon 2024-10-13 23:11:46 -06:00
FrankTheFarmer 80d733d329 Merge branch 'main' into implement_pokemon 2024-10-14 14:18:08 +10:00
FrankTheFarmer 0099dcf5c5 Alolan Exeggutor will now appear in front of all pokemon in the dex no matter what lol 2024-10-14 14:16:42 +10:00
GenotypeXD-Dev 0a30551b7d Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-13 19:23:49 -06:00
GenotypeXD-Dev e4ee0227fd Reapply "Implement Magikarp and Gyarados Remodels + Jump Variants"
This reverts commit 4ec7168499.
2024-10-13 19:22:35 -06:00
GenotypeXD-Dev 4ec7168499 Revert "Implement Magikarp and Gyarados Remodels + Jump Variants"
This reverts commit 650647e94b.
2024-10-13 19:20:46 -06:00
GenotypeXD-Dev 650647e94b Implement Magikarp and Gyarados Remodels + Jump Variants 2024-10-13 19:19:46 -06:00
Carmendar a5371f4b5d Updated Tepig line & Baltoy line. 2024-10-13 16:03:10 -05:00
Wi2ter d47e7fb3c4 Implemented Corphish Crawdaunt 2024-10-13 12:32:27 +08:00
Carmendar ef983e17fe Implemented Palossand, updated Bulbasaur texture, Ivysaur model & texture, Mudkip model & texture. Fixed portraits, pictures & scales for many Pokemon. 2024-10-12 22:42:41 -05:00
GenotypeXD-Dev d78975be6e Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-12 01:15:01 -06:00
GenotypeXD-Dev 19a264870c Implemented Scraggy, Scrafty, Hatenna, Hattrem, Hatterene, Wattrel, Kilowattrel, Alola_bias cubone. Fixed Resolver typo from last Push 2024-10-12 01:14:11 -06:00
Carmendar ee1753de67 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-10-11 01:28:24 -05:00
Carmendar 742354b2cb Implemented Slakoth, Vigoroth, Slaking. Adjusted Larvitar scale. 2024-10-11 01:24:30 -05:00
GenotypeXD-Dev e2f6aaa4de Shelgon Basescale adjustment 2024-10-10 18:53:12 -06:00
GenotypeXD-Dev abc2911059 Implemented Bagon, Shelgon, Salamence, Pikipek, Trumbeak, Toucannon, Dondozo, Alolan Marowak 2024-10-10 17:46:09 -06:00
FrankTheFarmer d76caf7093 i forgot to write implemented 😩 2024-10-10 10:37:38 +10:00
FrankTheFarmer bf859f8435 Sand castle :) 2024-10-10 10:06:19 +10:00
Paul 592b4276c8 Added some combat behaviour and reworked activity swapping logic for pokemon brains 2024-10-05 10:47:42 +10:00
FrankTheFarmer b31c10cc52 Took Venusaurs foot off the pedal (bone name changes) 2024-10-04 09:30:45 +10:00
FrankTheFarmer 89e3c7d8b0 Sealeo zfight fix 2024-10-04 08:52:20 +10:00
FrankTheFarmer 167b09f24f Fixed Diggersby using its walk animation in its battle portrait 2024-10-01 21:18:09 +10:00
FrankTheFarmer 39165266d5 🎬🔴👗 👠 2024-10-01 20:35:01 +10:00
FrankTheFarmer 7405f2de75 💍⚡🕶️⚡🧋 2024-10-01 20:34:20 +10:00
FrankTheFarmer 762fe87454 ✨🎡🧣 2024-10-01 20:33:41 +10:00
FrankTheFarmer ebbc81b605 💋🎙️🇫🇷 🎩 2024-10-01 20:33:01 +10:00
FrankTheFarmer 12d41aada1 👁️🍧👁️ 2024-10-01 20:32:20 +10:00
FrankTheFarmer 61fe9c23ce 💅 🪨 👜 🐩 2024-10-01 20:31:20 +10:00
FrankTheFarmer 945c9c60a9 Mmm monkey 2024-10-01 20:30:10 +10:00
FrankTheFarmer 8413b0392e Venusaur scaling stuff for Jazz 😈 2024-10-01 16:26:55 +10:00
FrankTheFarmer 868edcd392 Looped Walreins temp idle animation 2024-10-01 16:21:43 +10:00
FrankTheFarmer a3b2f9b6fc Rotom assets for future implementation 2024-10-01 16:07:26 +10:00
FrankTheFarmer 12b444bb41 Kecleon Assets for future implementation 2024-10-01 16:06:57 +10:00
FrankTheFarmer 0e814fd567 Added Flamigo 🔫🦩 2024-10-01 16:05:42 +10:00
FrankTheFarmer 7b083aa038 Added Walrein 🗡️ 🦭 2024-10-01 15:56:16 +10:00
FrankTheFarmer 4e0a4c84b5 Added Sealeo 🦭 2024-10-01 15:54:30 +10:00
FrankTheFarmer 2d9b47e645 Added Spheal 🪩 2024-10-01 15:53:38 +10:00
FrankTheFarmer 39a2182736 Added Toxapex ☂️ 2024-10-01 15:51:23 +10:00
FrankTheFarmer 5a996abbf3 Added Mareanie ☂️ 2024-10-01 15:50:31 +10:00
FrankTheFarmer a20def5161 Snail textures woops 2024-10-01 15:09:31 +10:00
FrankTheFarmer 030f370290 Added Gastrodon 🐌 2024-10-01 11:15:43 +10:00
FrankTheFarmer f3ade3cb82 Added Shellos 🐌 2024-10-01 11:14:14 +10:00
FrankTheFarmer 315cb6a1ac Added Lumineon 🐠 2024-10-01 10:48:35 +10:00
FrankTheFarmer 60615d32f5 Added Finneon 🐟 2024-10-01 10:48:18 +10:00
FrankTheFarmer 1d27d9cf5b Added Clawitzer 🔫🦞 2024-10-01 10:40:21 +10:00
FrankTheFarmer 2ba760d0f9 Added Clauncher 🦞 2024-10-01 10:38:35 +10:00
FrankTheFarmer c31ec3b418 Added Bruxish 🪥🐟🌈 2024-10-01 10:30:52 +10:00
FrankTheFarmer d0afab9604 Added Wugtrio 🪱🪱🪱 2024-10-01 10:16:39 +10:00
FrankTheFarmer 4e9f8fe1c0 Added Wiglett 🪱 2024-10-01 10:16:18 +10:00
FrankTheFarmer 803f93aa73 Added Corsola 🪸 2024-09-30 17:21:31 +10:00
FrankTheFarmer 853940d009 Added Pincurchin 🦔 2024-09-30 17:16:38 +10:00
FrankTheFarmer 6ddb746d49 Fired for not using indents of 2 again 2024-09-30 17:05:47 +10:00
FrankTheFarmer 2b86b15132 Added Liepard 🐆 2024-09-30 17:05:34 +10:00
FrankTheFarmer 5f0f5d0aa5 Added Purrloin 🐈 2024-09-30 17:02:17 +10:00
FrankTheFarmer 136aab872a Added Mantine 🌊🥞 2024-09-30 17:00:04 +10:00
FrankTheFarmer a1d4702af0 Added Mantyke 🥞 2024-09-30 16:59:33 +10:00
FrankTheFarmer b2777c13b8 Added Milotic 🐍 2024-09-30 16:55:33 +10:00
FrankTheFarmer 26cb473b9d Added Feebas 🎣 2024-09-30 16:55:09 +10:00
FrankTheFarmer 907c639e28 Added Octillery 🐙 2024-09-30 16:52:21 +10:00
FrankTheFarmer 80d2eafed7 Added Remoraid 🐟 2024-09-30 16:51:40 +10:00
FrankTheFarmer 519122e5be Little bit of Rhyhorn line resizing 2024-09-29 22:45:59 +10:00
FrankTheFarmer c211768d5c Forgor to remove Rhyhorn line kotlin posers 2024-09-29 22:45:35 +10:00
FrankTheFarmer 908f318eeb Carvanha remodel 2024-09-29 22:40:27 +10:00
FrankTheFarmer 0143f93577 Rhyperior remodel 🌤🦏 2024-09-29 22:31:46 +10:00
FrankTheFarmer f8615aeb82 Rhyhorn remodel 🦏 2024-09-29 22:26:06 +10:00
FrankTheFarmer b113448a9c Rhydon remodel 🦏 2024-09-29 22:23:56 +10:00
FrankTheFarmer 2930a11c75 Garchomp remodel ✈ 2024-09-29 22:13:00 +10:00
FrankTheFarmer 982de7f5c7 Gabite remodel 🦈 2024-09-29 22:12:08 +10:00
FrankTheFarmer bfdb5e9787 Gible remodel 🐟 2024-09-29 22:11:27 +10:00
FrankTheFarmer d5ea945c6b Krookodile remodel 2024-09-29 22:00:52 +10:00
FrankTheFarmer 5a18d038a2 Wigglytuff remodel 🍎 2024-09-29 21:51:56 +10:00
FrankTheFarmer d0389d6c9c Jigglypuff remodel 🎤 2024-09-29 21:51:32 +10:00
FrankTheFarmer c9bc6e24fe Igglybuff remodel 2024-09-29 21:50:39 +10:00
FrankTheFarmer 8b4a8e9534 oop. Tatsugiri resolver fix 2024-09-29 21:46:25 +10:00
FrankTheFarmer 5adfd00509 Tatsugiri model update 🍙🐟 2024-09-29 21:26:31 +10:00
FrankTheFarmer 4090e038ae Cloyster model update 2024-09-29 21:25:33 +10:00
FrankTheFarmer f3ab282fd1 Shellder model update 2024-09-29 21:25:16 +10:00
FrankTheFarmer 40b97d3c1e Merge branch 'main' into implement_pokemon 2024-09-29 21:17:27 +10:00
FrankTheFarmer 829b97270d Seaking model update 2024-09-29 21:16:49 +10:00
FrankTheFarmer 61111c8038 Goldeen model update 2024-09-29 21:16:34 +10:00
FrankTheFarmer 1f4fbaa177 oop. relicanth resolver update 2024-09-29 21:16:16 +10:00
FrankTheFarmer 9e8ef7e875 Relicanth remodel 2024-09-29 21:15:35 +10:00
FrankTheFarmer 190d90a966 Empoleon remodel 2024-09-29 20:56:38 +10:00
FrankTheFarmer 5a07c82a5d Prinplup remodel 2024-09-29 20:55:57 +10:00
FrankTheFarmer 9c2e56ee8b Cinderace remodel 2024-09-29 20:52:27 +10:00
FrankTheFarmer c83f194dc9 Scorbunny remodel 2024-09-29 20:52:06 +10:00
FrankTheFarmer b9bcb66d2a Swampert remodel 2024-09-29 20:47:43 +10:00
FrankTheFarmer b72050da1d Marshtomp remodel 2024-09-29 20:46:36 +10:00
FrankTheFarmer 82522ad6ab Mudkip remodel 💙 2024-09-29 20:46:02 +10:00
Paul a73cdfbb4f Removed duplicate class (baffling) 2024-09-29 18:57:36 +10:00
FrankTheFarmer d40e2e6103 Changelog for incoming implementation 2024-09-29 11:41:52 +10:00
FrankTheFarmer 96715770a7 Incineroar Remodel 🔥🧍‍♂️ 2024-09-29 11:41:09 +10:00
Paul 770a2e52f6 Pokemon but dangerous 2024-09-29 11:41:01 +10:00
FrankTheFarmer 48fa67c2e4 Torracat Remodel 🔥🐆 2024-09-29 11:40:31 +10:00
FrankTheFarmer 9a6217f755 Litten Remodel 🔥🐈 2024-09-29 11:39:38 +10:00
FrankTheFarmer f1f035b5f9 Fired for not using double spaced (2)JSON indents 2024-09-29 11:31:44 +10:00
FrankTheFarmer 19aa53effc Horsea Remodel 2024-09-29 11:24:46 +10:00
FrankTheFarmer be7cb4583c Seadra Remodel 2024-09-29 11:24:36 +10:00
FrankTheFarmer 887891f74d Kingdra Remodel 2024-09-29 11:24:19 +10:00
Paul 6629b27f33 Fixed issues from merging main 2024-09-29 10:08:06 +10:00
Paul 73b06d2f99 Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonActivities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonMemories.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/npc/NPCEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/WorldExtensions.kt
2024-09-29 09:28:03 +10:00
FrankTheFarmer d83cd34bf4 Removed several pokemon from PokemonModelRepository as they have JSON posers now! 2024-09-28 20:08:54 +10:00
FrankTheFarmer bee41a90f9 Venusaur remodel 2024-09-28 19:59:28 +10:00
FrankTheFarmer 79afe9d812 Ivysaur remodel 2024-09-28 19:59:07 +10:00
FrankTheFarmer 9fe55c5692 Bulbasaur remodel 2024-09-28 19:58:44 +10:00
FrankTheFarmer feddce2575 Merge branch 'main' into implement_pokemon 2024-09-28 19:39:36 +10:00
FrankTheFarmer 4ddc5e3a93 Cetitan can now cry and walk/sleep at the same time! Unfortunately relatable! 2024-09-28 06:43:47 +10:00
FrankTheFarmer f63f1764ab Merge branch 'main' into implement_pokemon 2024-09-28 06:35:49 +10:00
FrankTheFarmer 7c694e9733 Corrected Dachsbun's resolver name. Was using Fidough 2024-09-25 21:19:58 +10:00
FrankTheFarmer 21b6977387 Merge branch 'main' into implement_pokemon 2024-09-25 21:09:08 +10:00
FrankTheFarmer 408735399c Merge branch 'main' into implement_pokemon 2024-09-24 21:13:15 +10:00
FrankTheFarmer f6c856d161 Merge branch 'main' into implement_pokemon 2024-09-24 08:23:07 +10:00
FrankTheFarmer 8173cf13a8 data updates for walking wake and iron leaves 2024-09-17 22:28:39 +10:00
FrankTheFarmer 7d0becf1bd Fixed that one elekid thing that was breaking the thingy™ 2024-09-17 09:45:15 +10:00
FrankTheFarmer 9b4a87ce68 Merge branch 'main' into implement_pokemon 2024-09-16 14:51:53 +10:00
Hiroku 464c4d349d Update CHANGELOG.md 2024-09-15 09:31:47 +00:00
Hiroku a35d3131f8 Update CHANGELOG.md 2024-09-15 09:30:28 +00:00
FrankTheFarmer 9d99d3c331 Merge branch 'main' into implement_pokemon 2024-09-14 19:49:29 +10:00
Paul b100516b24 Fixed JSON posed mons having _issues_ when evolved 2024-09-14 12:31:40 +10:00
FrankTheFarmer 8da5396443 Merge branch 'main' into implement_pokemon 2024-09-13 20:58:59 +10:00
FrankTheFarmer 5d2a727311 Chest Gimmighoul quirk fixes 2024-09-13 20:01:19 +10:00
FrankTheFarmer d7f03215e2 Merge branch 'main' into implement_pokemon 2024-09-13 15:18:46 +10:00
FrankTheFarmer d366471e71 Merge branch 'main' into implement_pokemon 2024-09-12 20:17:22 +10:00
FrankTheFarmer e5163f154a The "true".asExpressionLike fix for the bird wing visibility 2024-09-12 20:16:20 +10:00
FrankTheFarmer cfc497d8ed Consistency update for the first few json posers 2024-09-11 18:39:58 +10:00
FrankTheFarmer 35f8ab0257 Removed life ending comma 2024-09-11 17:35:25 +10:00
FrankTheFarmer e890743c86 Merge branch 'main' into implement_pokemon 2024-09-11 17:34:19 +10:00
FrankTheFarmer ffec6e307d Move over poser! 2024-09-11 16:16:01 +10:00
FrankTheFarmer 7c35db7eaa Temp horse data 2024-09-11 16:15:38 +10:00
FrankTheFarmer 9f0c2296bc Fixed the wing flap placeholder animation 2024-09-09 10:32:27 +10:00
FrankTheFarmer 6b0a06c64d I have restored the named animations. i think they got lost. 2024-09-08 15:18:12 +10:00
FrankTheFarmer 160186931f Merge branch 'main' into implement_pokemon 2024-09-08 14:23:54 +10:00
FrankTheFarmer 22c4a14fbe Changelog and maybe added fortnite 2024-09-08 14:22:14 +10:00
FrankTheFarmer 241a82764b Removal of Kingler kotlin poser. im too lazy to do krabby rn lol 2024-09-08 14:18:58 +10:00
FrankTheFarmer 6e4d48bb07 Cramorant remodel 🐟 2024-09-08 14:16:55 +10:00
FrankTheFarmer 7a383f419a 🦀🦀 Krabby & Kingler updates 🦀🦀 2024-09-08 13:30:16 +10:00
FrankTheFarmer 933b99d349 Wobbuffet! 💁‍♀️ 2024-09-08 11:03:30 +10:00
FrankTheFarmer 72d78084f6 Merge branch 'main' into implement_pokemon 2024-09-08 10:21:30 +10:00
FrankTheFarmer fcee4d2774 Merge branch 'main' into implement_pokemon 2024-09-08 07:47:04 +10:00
FrankTheFarmer 61c7f3bc13 sunkern line look animation fixes 2024-09-08 07:45:15 +10:00
FrankTheFarmer 3830637f3c Stupid ass dinosaur crying in his sleep 2024-09-08 07:45:14 +10:00
FrankTheFarmer 45f8049521 💖🌱Sunkern & Sunflora🌻✨ given Retro's placeholder assets and data 2024-09-06 16:47:43 +10:00
FrankTheFarmer 823774bcfe Merge branch 'main' into implement_pokemon 2024-09-06 10:48:03 +10:00
FrankTheFarmer 920e5211c0 Somebody forgot the changelog again 2024-09-06 10:47:02 +10:00
FrankTheFarmer 7da61e3d8d Fixed the look animations for the ledyba line 2024-09-06 10:41:34 +10:00
FrankTheFarmer 754b60b15c fixed Maushold faints not playing 2024-09-03 21:29:09 +10:00
FrankTheFarmer 839454bfd6 Fixed Slowking battle idle not playing properly 2024-09-03 20:31:41 +10:00
FrankTheFarmer 3b6a0667d6 Adjusted Grafaiai walk speed to reduce feet sliding 2024-09-03 20:05:56 +10:00
FrankTheFarmer f298adaea8 Vivillon will stop being naked when removing Vivillon addons 2024-09-03 09:36:53 +10:00
FrankTheFarmer 641206b811 Merge branch 'main' into implement_pokemon 2024-09-02 14:52:59 +10:00
Paul a07a9a75c0 Ported to mojmaps 2024-08-17 19:19:20 +10:00
Paul d6fdb4c6da Merge branch 'sega_bass_pro_fishing_2' into smarterer-pokemons
# Conflicts:
#	common/src/main/java/com/cobblemon/mod/common/GenericsCheatClass.java
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonActivities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonMemories.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonSensors.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/interpreter/instructions/MoveInstruction.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/AttackAngryAtTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/FollowWalkTargetTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/GetAngryAtAttackerTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/MoveToAttackTargetTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/StayAfloatTask.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonServerDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/ai/PokemonMoveControl.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/ai/PokemonNavigation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/WorldExtensions.kt
#	common/src/main/resources/cobblemon-common.accesswidener
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/CobblemonForge.kt
2024-08-17 10:57:53 +10:00
Tyzillion 93a94b4900 Updated model for Beedrill and Kingler.
Implement Cramorant.
2024-08-05 17:43:24 -04:00
Tyzillion 40363c2ea1 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-08-04 14:09:00 -04:00
FrankTheFarmer 6f15d65d90 Unbiases your hisuian starter evolution methods 2024-07-15 16:37:53 +10:00
FrankTheFarmer 02f9b21cff Small changelog tweak. I didn't forget i promise. 2024-07-15 12:56:41 +10:00
FrankTheFarmer 79cf154304 What if we take bikini bottom and push it somewhere else?! 2024-07-15 12:19:29 +10:00
JazzMcNade c5e036934a Added Logic to allow specific pokemon to cause Creepers and Skeletons to flee 2024-07-14 21:18:49 -05:00
FrankTheFarmer a650683d45 Merge remote-tracking branch 'origin/main' into implement_pokemon 2024-07-15 10:54:23 +10:00
JazzMcNade d9938a5cfd Added flee on failed capture behavior, prevented sleepwalking, wake up and attack if harmed while sleeping 2024-07-06 03:27:52 -05:00
Apion 311dc3dc9c Merge branch 'json-poser-conversion' into 'implement_pokemon'
Json poser conversion

See merge request cable-mc/cobblemon!1081
2024-06-27 23:50:31 +00:00
Tyzillion fc5d9615fc Moved the bonemeal detection out of the task and put it in its own sensor. 2024-06-27 14:59:21 -04:00
FrankTheFarmer bda1f80ecc Corrected Zangoose's egg moves being in its leveled move list. 2024-06-26 14:28:03 +10:00
FrankTheFarmer 817796bf40 Corrected Klevin's stats to match current databases post S/V patch 2024-06-26 10:22:02 +10:00
FrankTheFarmer 8a48eeab8b Merge branch 'main' into implement_pokemon 2024-06-23 20:48:59 +10:00
FrankTheFarmer 0061104c0d I did not forget the changelog this time 2024-06-23 20:47:37 +10:00
FrankTheFarmer 5110a1be17 Removed Chikorita's ability to look due to some awkward pivots and head structure 2024-06-23 20:28:37 +10:00
FrankTheFarmer 4cbb998106 Adjusted Shroomish's Yaw range for looks. Yeehaw 2024-06-23 20:24:20 +10:00
FrankTheFarmer 17de3f496c Adjusted Bellossom shoulder pose to clip a lot less than before. 2024-06-23 20:08:22 +10:00
FrankTheFarmer b54181e93a Glimmet and Tatsugiri are now shoulder mountable 2024-06-23 20:05:21 +10:00
FrankTheFarmer eaf7edcd94 Fletchling, Skrelp, Klefki, Fomantis, Morelull and Shroodle are now shoulder mountable 2024-06-23 19:46:16 +10:00
FrankTheFarmer cdf1631e2b ZORUA 2 STOP FLOATING 2024-06-23 18:51:40 +10:00
FrankTheFarmer 841f49553e Pidove, Petilil, Hisui Bias Petilil, Zorua, Zorua 2 and Elgyem are now shoulder mountable 2024-06-23 18:51:22 +10:00
FrankTheFarmer 57d7d5a1b9 Minun, Beldum, Starly, Buneary, Combee and Pachirisu are now shoulder mountable 2024-06-23 17:46:41 +10:00
FrankTheFarmer b1f2ab2ed7 Merge branch 'main' into implement_pokemon 2024-06-23 17:26:01 +10:00
FrankTheFarmer f629d95844 Spearow, Murkrow, Mew, Larvitar, Taillow and Plusleare now shoulder mountable 2024-06-23 16:58:37 +10:00
FrankTheFarmer 30904fbdda Caterpie, Weedle, and Smoochum are now shoulder mountable 2024-06-23 16:00:14 +10:00
FrankTheFarmer 9a3be6a85a Roaming Gimmighoul is now shoulder mountable 2024-06-23 15:01:17 +10:00
FrankTheFarmer 88c91d9bdd Reverted Hisuian Zoroark stats to be different from base Zoroark 2024-06-23 09:50:05 +10:00
FrankTheFarmer 5d2efe3e6b Merge branch 'main' into implement_pokemon 2024-06-23 09:41:59 +10:00
Tyzillion e160a42b83 Fixed pokemon class not passing the correct pokemon to the brain upon Pokemon Entity initialization. 2024-06-21 11:32:11 -04:00
FrankTheFarmer d6354d3d94 Fixed Duskull and Dusclops spawn data 2024-06-14 11:51:33 +10:00
FrankTheFarmer 4ddfdd828c Merge branch 'main' into implement_pokemon 2024-06-14 11:30:43 +10:00
FrankTheFarmer 06b70c6204 After nearly 2 years, the Magby line received their placeholder walks 2024-06-12 14:05:54 +10:00
FrankTheFarmer 2dc9d11f79 Merge branch 'main' into implement_pokemon 2024-06-12 14:00:10 +10:00
FrankTheFarmer fbb161c511 I FORGOT THE CHANGELOG 2024-06-04 14:36:35 +10:00
FrankTheFarmer f84bc62d61 Dreepy can now float on your shoulders 2024-06-04 14:17:39 +10:00
FrankTheFarmer 2e20554d1e Fixed Chimchar and Monferno sleeping T pose 2024-06-04 13:55:16 +10:00
apion bb9fcc64ed Started working on Aerodactyl JSON poser 2024-05-24 21:52:16 -04:00
Plastered_Crab fa68aa44c5 - commented out 1 brain task to test other tasks 2024-05-24 09:18:40 -07:00
apion 2d908468ea Fixed issue where singular conditions not met, abra is now completely working with a JSON poser 2024-05-24 11:21:01 -04:00
apion c9ae148d86 Moved Abra to JSON poser, pose conditions not properly working 2024-05-24 10:24:50 -04:00
Plastered_Crab f3de9840b5 - party pokemon will try to defend their owners better (still wip) 2024-05-23 22:17:00 -07:00
Plastered_Crab 64e3909cea - party pokemon will try to defend their owners (still wip) 2024-05-22 23:30:16 -07:00
Plastered_Crab 735c4b910e - pokemon are kill (almost still) 2024-05-22 15:43:02 -07:00
Plastered_Crab 26a9a1f9e1 - pokemon is kill (almost) 2024-05-21 18:02:18 -07:00
amo 832ab8db95 RANDOM BULLSHIT GO 2024-05-20 02:46:43 +01:00
broccoli 1d9029ef51 feature: add fertilizing task 2024-05-16 19:05:07 +01:00
broccoli a875ba7536 remove comment 2024-05-16 00:22:39 +01:00
broccoli 93de4785b4 use resourceIdentifier instead of pokedex id 2024-05-16 00:22:12 +01:00
broccoli 765f0e5494 feature: make baby pokemon follow more evolved pokemon 2024-05-16 00:13:42 +01:00
broccoli 4fc232ff31 fix: resolve mapping issues by downgrading loom
fixes regression in fd7b82dbe3
2024-05-14 23:28:33 +01:00
broccoli a4d75e9f32 refactor: split brain out of entity 2024-05-13 17:38:08 +01:00
broccoli a86ae09dc9 Merge branch 'main' into smarterer-pokemons 2024-05-12 15:18:56 +01:00
Paul a5fbafe64d Import corrections 2024-04-11 12:48:43 +10:00
Paul 1de93b4933 Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2024-04-11 12:46:21 +10:00
Paul f8dfc7c6cc Implemented owner following on Brain pokemon AI 2024-04-11 11:58:46 +10:00
Paul accbed9c2b Set up entity AI for battles on Brain system 2024-04-08 13:15:33 +10:00
Paul 8b0e615777 Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2024-04-08 11:13:12 +10:00
Paul 746f12c724 Migrated the eat grass goal to the brain system 2024-04-06 21:22:26 +10:00
Paul a11d306a1b Merge remote-tracking branch 'origin/main' into smarterer-pokemons
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2024-04-06 17:49:24 +10:00
Paul 40d140e84d Added find resting place AI task 2024-03-25 10:08:55 +10:00
Paul ffdb4842ac Merge remote-tracking branch 'origin/main' into smarterer-pokemons 2024-03-18 15:48:32 +10:00
Paul 6baf60d07c Added CobblemonMemories and Sensors from NPC branch (merge conflicts are future me's problem) 2024-03-18 10:04:43 +10:00
Paul cb3b7784b0 Fixed pokemon speeds on new brain 2024-03-18 10:04:20 +10:00
Paul ee4f3b1629 Started giving pokemon brains 2024-03-17 16:43:32 +10:00
Paul 518a7daa0e Reverted partial run change 2024-03-17 12:46:08 +10:00
4506 changed files with 302629 additions and 165796 deletions
+148 -29
View File
@@ -3,23 +3,155 @@ image: amazoncorretto:21
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
# TODO add client reference test process, search for import com.cobblemon.mod.common.client
stages:
- preprocessing
- packsquash
- replaceresources
- build
- deploy
#TODO add client reference test process, search for import com.cobblemon.mod.common.client
check_assets_cache:
stage: preprocessing
script:
- echo "Checking if cached hash matches current hash"
# Calculate the current hash
- find common/src/main/resources/assets common/src/main/resources/data -type f -exec sha256sum {} + | sort -k 2 | sha256sum > current_hash.txt
- echo "Current hash:"
- cat current_hash.txt
# Check for the existence of the previous hash
- if [[ -f assets_data_hash.txt ]]; then
echo "Previous cached hash found:";
cat assets_data_hash.txt;
if cmp -s assets_data_hash.txt current_hash.txt; then
echo "Hashes match, skipping PackSquash";
rm -f run_packsquash.flag || true;
else
echo "Hashes differ, PackSquash needed";
touch run_packsquash.flag;
fi;
else
echo "No cached hash found, marking PackSquash as required";
touch run_packsquash.flag;
fi
# Save the current hash for future runs
- echo "Saving current hash to cache";
- cp current_hash.txt assets_data_hash.txt
artifacts:
paths:
- current_hash.txt
- assets_data_hash.txt
- run_packsquash.flag
expire_in: 7 days
cache:
key: "cache-${CI_COMMIT_REF_NAME}"
paths:
- assets_data_hash.txt
- ./compressed_pack.zip
setup_resource_pack:
stage: preprocessing
script:
- echo "Setting up fake resource pack"
- mkdir ./fake_resource_pack
- cp -r common/src/main/resources/assets common/src/main/resources/data ./fake_resource_pack/
- echo '{"pack":{"pack_format":34,"description":"Fake Cobblemon Pack"}}' > ./fake_resource_pack/pack.mcmeta
artifacts:
paths:
- ./fake_resource_pack/
expire_in: 7 days
setup_packsquash:
stage: preprocessing
script:
- echo "Installing wget & unzip"
- yum install -y wget unzip
- echo "Downloading PackSquash"
- wget https://github.com/ComunidadAylas/PackSquash/releases/download/v0.4.0/PackSquash.CLI.executable.x86_64-unknown-linux-musl.zip
- unzip PackSquash.CLI.executable.x86_64-unknown-linux-musl.zip -d ./packsquash_bin
- echo "Creating PackSquash options.toml"
- |
cat <<EOF > ./options.toml
pack_directory = "./fake_resource_pack/"
output_file_path = "./compressed_pack.zip"
zip_spec_conformance_level = "high"
['**/*?.ogg']
transcode_ogg = false
two_pass_vorbis_optimization_and_validation = false
sampling_frequency = 999999
empty_audio_optimization=false
EOF
artifacts:
paths:
- ./packsquash_bin/
- ./options.toml
expire_in: 7 days
default:
artifacts:
expire_in: 7 days
run_packsquash:
stage: packsquash
dependencies:
- check_assets_cache
- setup_resource_pack
- setup_packsquash
script:
- ls -l
- if [[ ! -f ./compressed_pack.zip || -f run_packsquash.flag ]]; then
echo "Running PackSquash";
chmod +x ./packsquash_bin/packsquash;
./packsquash_bin/packsquash ./options.toml;
else
echo "Skipping PackSquash; no changes detected and compressed pack exists";
fi
cache:
key: "cache-${CI_COMMIT_REF_NAME}"
policy: pull-push
paths:
- assets_data_hash.txt
- ./compressed_pack.zip
artifacts:
paths:
- ./compressed_pack.zip
replace_resources:
stage: replaceresources
dependencies:
- run_packsquash
script:
- echo "Installing unzip"
- yum install -y unzip
- echo "Unzipping compressed pack"
- mkdir temp_unpack
- unzip ./compressed_pack.zip -d temp_unpack
- echo "Removing original assets and data"
- rm -rf common/src/main/resources/assets
- rm -rf common/src/main/resources/data
- echo "Replacing assets and data"
- mv temp_unpack/assets common/src/main/resources/
- mv temp_unpack/data common/src/main/resources/
artifacts:
paths:
- common/src/main/resources/
build:
stage: build
only:
- branches@cable-mc/cobblemon
dependencies:
- replace_resources
script:
- export GRADLE_OPTS="-Xmx4G -Xms4G"
- chmod +x ./gradlew
- ./gradlew build
cache:
key: "$CI_COMMIT_REF_NAME"
policy: push
artifacts:
paths:
- neoforge/build/libs
- fabric/build/libs
@@ -28,39 +160,26 @@ publish:
stage: deploy
dependencies:
- build
cache:
key: "CI_COMMIT_REF_NAME"
policy: pull
paths:
- neoforge/build/libs/*.jar
- fabric/build/libs/*.jar
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
- if: '$CI_PROJECT_PATH == "cable-mc/cobblemon" && $CI_COMMIT_BRANCH == "main"'
script:
- export GRADLE_OPTS="-Xmx4G -Xms4G"
- chmod +x ./gradlew
- ./gradlew publish
# Separate step to deploy the artifacts, save Norry the headache of keeping even more shit around
deploy:
stage: deploy
dependencies:
- build
when: manual
cache:
key: "$CI_COMMIT_REF_NAME"
policy: pull
artifacts:
paths:
- neoforge/build/libs/*.jar
- fabric/build/libs/*.jar
script:
deploy_artifacts:
stage: deploy
dependencies:
- build
script:
- echo "Collecting artifacts..."
- mv neoforge/build/libs/*+*.jar ./
- mv fabric/build/libs/*+*.jar ./
- find neoforge/build/libs/ -type f -name "*.jar" | grep -vE "dev-shadow|sources|javadoc" | xargs -I {} mv {} ./
- find fabric/build/libs/ -type f -name "*.jar" | grep -vE "dev-shadow|sources|javadoc" | xargs -I {} mv {} ./
- for f in *.jar; do mv "$f" "$(echo "$f" | sed s/+/b$CI_PIPELINE_IID+/)"; done
artifacts:
expire_in: 28 days
paths:
- ./*.jar
# - neoforge/build/libs/*+*.jar
# - fabric/build/libs/*+*.jar
+318 -94
View File
@@ -1,62 +1,286 @@
# Changelog
## [1.6.0 - The Record Catch Update (Month Xth, 2024)](#1-6-0)
## [1.7.0 (Month xth, 2025)](#1-7-0)
### Fixes
- Fixed Particles sometimes facing the wrong direction (looking at you, Swords Dance)
- Fixed PCs always opening at box 2 instead of box 1.
### Developer
- A finished battle now has winners and losers set inside of `PokemonBattle` instead of them always being empty.
- Dialogues are correctly removed from memory when they are stopped.
- Dialogues with variably-set initial pages now properly start timeout tracking.
## [1.6.1 (January 26th, 2025)](#1-6-1)
### Additions
- Added crossover paintings from Close Combat: Premonition, Altar, Slumber, and Nomad.
- Added Galarica Nuts, used for crafting Galarica Cuffs and Wreaths. Dropped from certain Pokémon. Take a wild guess which.
- Added compatibility with Repurposed Structures. (Thank you, TelepathicGrunt!)
- Added an evolution method for Karrablast to evolve into Escavalier in singleplayer.
- Pokédexes can now be placed in Chiseled Bookshelves.
- Added optional box argument to the /pc command.
- Pokédex and Dialogue screens now close when the inventory keybind is pressed.
- Added config setting `maxPokedexScanningDetectionRange` to control from what distance the player can scan Pokémon using the Pokédex.
- Added config setting `hideUnimplementedPokemonInThePokedex` which hides unimplemented Pokémon from the Pokédex when set to true.
- Added debug renderer for posable entity locators.
- Added crossover paintings from Close Combat, Premonition, Altar, Slumber, and Nomad.
- Added optional box argument to the /pc command
### Changes
- Pokémon will now be dynamically revealed to the Pokédex as they're seen instead of revealing entire parties at the end of battle regardless.
- Unseen wild Pokémon will update their name from '???' to their real name as soon as a battle starts to reflect the battle UI showing the actual species name.
- Pokémon under the illusion effect will reveal their disguise to the Pokédex first and then the base Pokémon once the disguise is broken.
- Added more support for a variety of Fabric/NeoForge Convention tags.
- Reformatted some tags to be more consistent.
- Edited some recipes to utilize tags instead of direct item ids, for greater mod compatibility.
- Berries will drop if broken at age 0
- Improved Fortune drops on Mint Seeds
- New Slowpoke shiny texture.
- Updated drops for many Pokémon.
- Completely resynced Pokémon move and stat data based on later games. Learnsets have changed considerably to maximise available moves.
- Cobblemon save data now saves .old files where applicable as a means to recover from file corruption due to crashes or similar abrupt stops
### Pokémon Added
#### Gen 5
- Ducklett
- Swanna
- Shelmet
- Accelgor
- Karrablast
- Escavalier
- Rufflet
- Braviary
- Foongus
- Amoonguss
#### Gen 6
- Binacle
- Barbaracle
#### Gen 7
- Dewpider
- Araquanid
- Alolan Geodude
- Alolan Graveler
- Alolan Golem
#### Gen 8
- Galarian Slowpoke
- Galarian Slowbro
- Galarian Slowking
#### Gen 9
- Paldean Tauros
### Added cries to the following Pokémon
- All Nidorans
- Shellder, Cloyster
- Pinsir
- Tyrogue, Hitmontop
- Spinda
### Animation updates for the following Pokémon
- Primeape
- Munchlax
- Snorlax
- Poliwrath
- Goldeen
- Seaking
- Dondozo
- Wobbuffet
- Charcadet
- Armarouge
- Ceruledge
- Geodude
- Graveler
- Golem
- Sandile
- Krokorok
- Krookodile
### Model updates for the following Pokémon
- Slowpoke
- Slowbro
- Slowking
- Eiscue
- Tauros
- Goldeen
- Seaking
- Charcadet
- Armarouge
- Ceruledge
- Pinsir
- Geodude
- Graveler
- Golem
### Cry updates for the following Pokémon
- Sceptile
### Changes
- Completely re-synced Pokémon move and stat data based on later games. Learnsets have changed considerably to maximise available moves.
- Pokémon will now be dynamically revealed to the Pokédex as they're seen in battle instead of revealing entire parties at the end of battle.
- Unseen wild Pokémon will update their name from '???' to their real name as soon as a battle starts to match how the battle UI shows the actual species name.
- Pokémon under the illusion effect will reveal their disguise to the Pokédex first and then the base Pokémon once the disguise is broken.
- Berries will now drop from berry trees if broken at age 0 so you aren't punished for mistaken planting.
- Increased Fortune drops on Mint Seeds.
- Updated Slowpoke's shiny texture.
- Updated drops for many Pokémon.
- Adjusted the evolution sound to match the timing of the particle effect.
- Made berry trees shear-able by dispenser blocks. I'm sure nobody will make unholy contraptions with this.
- Edited some recipes to utilize tags instead of direct item IDs, for better mod compatibility.
- Added more support for a variety of Fabric/NeoForge conventional tags.
- Reformatted some tags to be more consistent.
### Fixes
- Fixed Pokédex sometimes crashing when switching forms.
- Fixed Pokédex interface not transitioning out when closed.
- Fixed texture dimensions for the player and Pokémon interact interface.
- Fixed crash related to Tom's Simple Storage mod and the Fossil Machine.
- Fixed not being able to retrieve a fossil from the Fossil Machine with an empty hand.
- Fixed Pokémon being collidable (collidible? collissionable? kaleidoscopable?) while being captured by a Poké Ball.
- Fixed `full_party`, `own_zangoose_seviper`, `use_revive` and `use_candy` Advancement triggers.
- Fixed `healing_machine` Advancement by using the correct 1.21 trigger.
- Fix Display Cases not dropping items if destroyed through explosions.
- Fixed an issue where the first Pokémon in the pastured Pokémon list clipped into the interface.
- Fixed all Pokémon facing South on spawn.
- Fixed bait being consumed even when not reeling in any Pokémon.
- Fixed Miltank milk magically disappearing out of your bucket.
- Fixed Pokémon nicknames migrating from 1.5.2 not being displayed properly.
- Fixed capitalization in one of our config options. It was a very important fix. Very important. Old configs are fine.
- Fixed Poké Rods not working if Lure or Luck of the Sea enchantments get removed by other mods.
- Fixed crashes related to Pokémon when they are ready to evolve while holding an enchanted item. Very specific.
- Fixed a crash that sometimes occurred when evolving Nincada.
- Fixed Cobblemon plants not being compostable on NeoForge.
- Fixed hide UI (F1 key) not hiding the party overlay.
- Fixed NPC MoLang command `player_lose_command` not working.
- Fixed misaligned tooltips with edit boxes in the NPC editor screen.
- Fixed Pokémon riding two boats when attempting to deploy a platform on water.
- Fixed the summary screen showing there's experience to reach the next level when they are at the level cap.
- Fixed Pokémon forgetting moves when evolving on specific cases.
- Fixed Adorn compatibility, including improvements when using JEI/REI (Apricorn items now show up under the collapsed entries rather than standalone).
- Fixed error message appearing on battle log when using Solar Beam with Sunny Day.
- Fixed Pokémon Model offsets for larger species.
- Fixed `/pokedex grant all` command not giving male/female/shininess completion for some Pokémon.
- Fixed `/pokedex grant only` and `/pokedex remove only` not respecting the form parameter passed.
- Fixed variant forms appearing incorrectly in the Pokédex when the normal form had not been unlocked.
- Fixed Pokémon occasionally being shot into the sky during battle. No Pokémon were harmed by this bug, probably.
- Fixed NPC editing GUI not updating aspects until a game restart.
- Fixed some users being unable to open their PC if a Pokémon in it had a lot of PP raises beyond normal bounds. How did you get those, anyway? Tell me or the Bellossom gets it.
- Fixed some color variants (Dubwool, Conkeldurr and Undyed wooloo) being missing in the Pokédex.
- Fixed invalid species or held items causing Players to not be able to load into their world anymore (commonly happening after removing addons/mods).
- Fixed Wooloo variants not being automatically registered in the owner's Pokédex when dyed.
- Fixed Vivichoke Dip and Leek & Potato Stew not returning a bowl upon consumption.
- Fixed Fossil Restoration Tank not accepting Hay Bales as organic material.
- Fixed Potion items applying double their intended healing value.
- Fixed Fast Ball capture bonuses applying to all Pokémon, making it the Best Ball instead of the Mediocre Edge-Case Ball.
- Fixed "learned new move" messages appearing for already-known moves on Pokémon evolutions.
- Fixed Pokémon Item Models breaking shadows nearby when being placed in Display Cases or Item Frames.
- Fixed berries not giving bonus yields when planted in their preferred biomes. I'm sure we've fixed that 5 times now.
- Fixed the NeoForge version not supporting "SodiumDynamicLights".
- Fixed players disconnecting from servers if they made changes to certain config options.
- Fixed players with shouldered Pokémon not being able to rejoin their 1.5.2 worlds using 1.6.
- Fixed `PokemonProperties` utilizing `ability=<some ability>` being treated as a forced ability even when it is a legal ability for the Pokémon.
- Fixed type formatting in Pokédex scanner mode when dual types require two lines.
- Fixed trading sometimes crashing the game or server.
- Fixed Wild shiny sounds not respecting the `shinyNoticeParticlesDistance` config setting.
- Fixed Pokémon being able to evolve mid-battle.
- Fixed NPC held items being able to be stolen by players. Don't be a thief!
- Fixed evolutions that require a held item consuming it as soon as meeting requirements when it should only be consumed upon evolution.
- Fixed Pokémon showing only the default form when selecting them as a target in battle.
- Fixed a possible error coming out of reeling fishing rods in specific situations.
- Fixed incorrect weights being used when Poké Fishing with Luck of the Sea.
- Parametric particle motion now works.
- Event-spawned particles now work.
- Particles can now have independent coordinate spaces.
### Developer
- Updated the Pokédex data updated events to always include a `Pokemon` instance, and optionally a `DisguiseData` instance.
- Updated fields in `SpawnNPCPacket` and `SpawnPokemonPacket` to be visible and mutable.
- Updated `UnvalidatedPlaySoundS2CPacket` to be public instead of internal and made its fields mutable.
- Added `hideNameTag` field and `HideNPCNameTag` nbt tag to `NPCEntity` to allow hiding the name tag of the NPC.
- Added the player to `PokerodReelEvent` so you know who is doing the reeling.
### MoLang & Datapacks
- Added flows for:
- `forme_change`: Triggered when a Pokémon changes form in battle.
- `mega_evolution`: Triggered when a Pokémon mega evolves in battle. (Note: Third-party mods are required for this feature currently)
- `zpower_used`: Triggered when a Pokémon uses a Z-Power move in battle. (Note: Third-party mods are required for this feature currently)
- `terastallization`: Triggered when a Pokémon terastallizes in battle. (Note: Third-party mods are required for this feature currently)
- `battle_fainted`: Triggered when a Pokémon faints in battle.
- `battle_fled`: Triggered when a player flees from battle.
- `battle_started_pre`: Triggered when a battle starts. Cancelable!
- `battle_started_post`: Triggered when a battle starts.
- `apricorn_harvested`: Triggered when an Apricorn is harvested.
- `thrown_pokeball_hit`: Triggered when a thrown Pokéball hits a Pokémon.
- `level_up`: Triggered when a Pokémon levels up.
- `pokemon_fainted`: Triggered when a Pokémon faints.
- `pokemon_gained`: Triggered when a player gains a Pokémon.
- Added MoLang functions:
- For Pokémon:
- `pokemon.apply(PokemonProperties)`: Applies the given properties to the Pokémon.
- `pokemon.owner`: Returns the owner of the Pokémon or 0.0 if there is no owner or they are not online.
- For all entities:
- `entity.is_standing_on_blocks(depth, blocks...)`: Returns whether the specified entity is standing on a specific block or set of blocks. Example usage: `q.is_standing_on_blocks(2, minecraft:sand)`
- Added NPC field:
- `hideNameTag`: Hides the name tag of the NPC.
- Added `baseScale` property to NPCs.
- Added MoLang particle queries for getting distance to targeted entities.
## [1.6.0 - The Record Catch Update (December 25th, 2024)](#1-6-0)
#### "Now that there's a fishing mechanic, the mod is actually good!"
### Additions
- Added the Pokédex as a craftable item that can be placed on lecterns.
- Added Pokémon (and item) fishing using modified fishing rods - Poké Rods! You'll need a Poké Rod smithing template, a fishing rod, and some type of Poké Ball. Each Poké Ball makes a differently themed rod. Why not?
- Added Pokémon (and item) fishing using modified fishing rods - Poké Rods! You'll need a Poké Rod smithing template, a fishing rod, and some type of Poké Ball. Each Poké Ball makes a differently themed rod because it's cool.
- Added Lure Ball functionality, increasing the catch rate of Pokémon that were caught on a fishing rod.
- Added Repeat Ball functionality, increasing the catch rate of Pokémon that are already registered as caught in a player's Pokédex.
- Added property chaining support for duplicate CustomPokemonPropertyType elements.
- Added flat level battling with options to set all Pokémon to level 50, 100, or 5 for the duration of a battle. No experience or EVs are granted for a flat battle.
- Added `aspect` and `unaspect` PokemonProperty arguments (which also includes commands such as `/pokemonedit`, `/spawnpokemon`, and `/givepokemon`) to allow forcing or un-forcing an aspect on a Pokémon.
- Added `type` alternatively `elemental_type` PokemonProperty argument, this is only used for filtering and is not applied to Pokémon. Example `type=fire` would be true for Charmander but false for Squirtle.
- Added support for Double Battles, Triple Battles, and Multi-battles.
- Added raft platforms for non-swimming, non-flying Pokémon to stand on during battles that take place on the water's surface (Flying Pokémon will fly over water in battle, and water breathing Pokémon will swim in water during battle).
- Added smarter send-out positions for Pokémon in battle. They should get in your way less!
- CriticalCaptures and Pokédex progress capture multiplier now work with the Pokédex.
- Added extra visuals to early berry growth stages.
- Moves impacted by the abilities Pixelate, Refrigerate, Aerilate, Galvanize, and Normalize now display as their altered typing.
- Added Polished Tumblestone and Tumblestone Brick block sets from Tumblestone, Black Tumblestone, and Sky Tumblestone.
- Added Metronome, Protective Pads, Punching Glove, Room Service, Scope Lens, Shed Shell, Terrain Extender, Throat Spray, Utility Umbrella, Wide Lens, and Zoom Lens held items
- Added particles for moves: Watersport, Mud Sport, and Psychic.
- Added Fire, Water, Thunder, Leaf, Ice, Sun, Moon, Shiny, Dawn, and Dusk Stone storage blocks.
- Added Eject Pack, Metronome, Protective Pads, Punching Glove, Room Service, Scope Lens, Shed Shell, Terrain Extender, Throat Spray, Utility Umbrella, Wide Lens, and Zoom Lens held items
- Added `stonjourner_henge_ruins`, `luna_henge_ruins`, and `sol_henge_ruins` structures.
- Added a `battleInvulnerability` gamerule to make players invulnerable to any damage during a battle.
- Added a `mobTargetInBattle` gamerule to exclude players from being targeted by mobs during a battle.
- Added battle log messages for switching out Pokémon.
- Added Evolution particles and sounds for Pokémon that are sent out when evolution is started.
- Added a Nurse profession that can be unlocked by having villagers claim a healing machine block.
- Added Pokémon Centers to all 5 village types.
- Added a `natural` block state property for the healing machine block; when property is set to true, the block will have a different texture and drop an iron ingot instead of itself.
- New config setting `displayEntityNameLabel` and `displayEntityLabelsWhenCrouchingOnly` to control what and when is displayed for the pokemon label
- `/freezepokemon` command to pause a Pokémon's animation at a specific point in time.
- Added `no_ai` and `freeze_frame` options to the `/spawnpokemon` command.
- Added shiny Pokémon effects.
- Added effects for the burn status effect.
- Added effects for the moves: Psychic, Water Sport, and Mud Sport.
- Added a new universal locator called `top`.
- Added `moves` option to Pokémon properties, allowing you to set the moves of a Pokémon in commands and spawn files using comma-separated move names.
- Added shiny Pokémon effects.
- Added shiny Pokémon particle effects and sounds to help find them.
- Added effects for the burn status effect.
- Added effects for the moves: Seismic Toss, Withdraw, Bite, Crunch, Super Fang, Hyper Fang, Pursuit, Mist, Haze, Lick, Kinesis, Psychic, Water Sport, and Mud Sport.
- Added a new universal locator called `top`.
- Added shiny Pokémon particles with sound effects.
- Added extra visuals to early berry growth stages.
- Added Polished Tumblestone and Tumblestone Brick block sets from Tumblestone, Black Tumblestone, and Sky Tumblestone.
- Moves impacted by the abilities Pixelate, Refrigerate, Aerilate, Galvanize, and Normalize now display as their altered typing.
- Added Fire, Water, Thunder, Leaf, Ice, Sun, Moon, Shiny, Dawn, and Dusk Stone storage blocks.
- Added Eject Pack, Metronome, Protective Pads, Punching Glove, Room Service, Scope Lens, Shed Shell, Terrain Extender, Throat Spray, Utility Umbrella, Wide Lens, and Zoom Lens held items.
- Added a full evolution particle effect for Pokémon that are sent out when evolution is started.
- Added a Nurse profession that can be unlocked by having villagers claim a healing machine block.
- Pokémon are now animated when seen in any GUI that isn't the party GUI.
- Added animation and sounds for trading.
- Added icons for pending trade, team-up, and battle requests from other players.
- Added `/spawnnpc` and `/spawnnpcat` commands.
- Pokémon are now animated when seen in any GUI that isn't the party GUI.
- Quirk animations can now occur for Pokémon that are shoulder mounted.
- Added `fishing boat` structures that contain an Explorer Map leading to a shipwreck cove and a Poké Rod Smithing Template.
- Added `submerged_shipwreck_cove` and `lush_shipwreck_cove` structures.
- Added new sounds for Poké Balls bouncing off of Pokémon and landing on the ground during capture.
- Added a unique set of sounds for Ancient Poké Balls.
- Added a sound for using Exp Candy and Rare Candy items.
- Added raft platforms for non-swimming, non-flying Pokémon to stand on during battles that take place on the water's surface. (Flying Pokémon will fly over water in battle, and water breathing Pokémon will swim in water during battle.)
- Added revamped Poké Ball animation for Pokémon breaking out.
- Added battle log messages for switching out Pokémon.
- Added config setting `displayEntityNameLabel` and `displayEntityLabelsWhenCrouchingOnly` to control what and when is displayed for the pokemon label.
- Added `no_ai` and `freeze_frame` options to the `/spawnpokemon` command.
- Added `moves` option to Pokémon properties, allowing you to set the moves of a Pokémon in commands and spawn files using comma-separated move names.
- Added a `natural` block state property for the healing machine block; when property is set to true, the block will have a different texture and drop an iron ingot instead of itself.
- Added a `battleInvulnerability` gamerule to make players invulnerable to any damage during a battle.
- Added a `mobTargetInBattle` gamerule to exclude players from being targeted by mobs during a battle.
- Added a `/freezepokemon` command to pause a Pokémon's animation at a specific point in time.
- Added `/spawnnpc` and `/spawnnpcat` commands.
- Added `hiddenability=false` option to `/spawnpokemon` and `/pokemonedit` commands, allowing the Pokémon's ability to be reverted to a normal ability.
- Added `aspect` and `unaspect` PokemonProperty arguments (which also includes commands such as `/pokemonedit`, `/spawnpokemon`, and `/givepokemon`) to allow forcing or un-forcing an aspect on a Pokémon.
- Added `type` alternatively `elemental_type` PokemonProperty argument, this is only used for filtering and is not applied to Pokémon. Example `type=fire` would be true for Charmander but false for Squirtle.
### Structures Added
- Fishing boat structure that contain an Explorer Map leading to a shipwreck cove and a Poké Rod Smithing Template.
- Stonjourner Henge Ruins, Luna Henge Ruins, and Sol Henge Ruins.
- Submerged Shipwreck Cove and Lush Shipwreck Cove.
- Pokémon Centers to all 5 village types.
### Pokémon Added
#### Gen 1
- Alola Bias Cubone
- Alola Bias Cubone (built-in resource pack)
- Alolan Marowak
#### Gen 2
@@ -71,6 +295,7 @@
- Octillery
- Mantine
- Smeargle
- Delibird
#### Gen 3
- Slakoth
@@ -128,9 +353,6 @@
#### Gen 9
- Wattrel
- Kilowattrel
- Wiglett
- Wugtrio
- Flamigo
- Veluza
- Farigiraf
- Klawf
@@ -142,8 +364,8 @@
- Dondozo
#### Unique Forms
- Magikarp Jump Variants
- Gyarados Jump Variants
- Magikarp Jump variants for Magikarp
- Magikarp Jump variants for Gyarados (built-in resource pack, enabled by default on Fabric)
### Added cries to the following Pokémon
- Sandshrew, Sandslash
@@ -250,6 +472,7 @@
### Model updates for the following Pokémon
- Bulbasaur, Ivysaur, Venusaur
- Charmander, Charmeleon, Charizard
- Caterpie
- Kakuna, Beedrill
- Lapras
- Porygon, Porygon2, Porygon-Z
@@ -285,9 +508,11 @@
- Phantump, Trevenant
- Litten, Torracat, Incineroar
- Popplio, Brionne, Primarina
- Mudbray
- Lurantis
- Scorbunny, Cinderace
- Quaxly
- Skeledirge
- Tatsugiri
### Changes
@@ -297,43 +522,37 @@
- Adjusted volumes of sounds made by Display Cases, Berry Bushes, Energy Root, Medicinal Leek, Vivichoke, Mints, Revival Herbs and Gilded Chests.
- Changes to mulch buffs/durations.
- Updated potion sprites.
- Link Cable recipe has been redesigned.
- Changed Link Cable recipe to be much cheaper.
- Updated sounds for Medicinal Leeks, Big Roots, Energy Roots and Revival Herbs.
- Updated UI sounds for clicking and evolving Pokémon.
- Updated cries for Chansey, Crobat, Hoothoot, Noctowl.
- Removed the interchangeable evolution results for the first stage Hisuian starters to prevent confusion. The method still exists for stage 2 to 3, but stage 1 to 2 was not distinguishable enough for many users.
- Bulbasaur, Ivysaur, Venusaur, Kakuna, Beedrill, Snorlax, Munchlax, Krabby, Kingler, Lurantis, Horsea, Seadra, Kingdra, Litten, Torracat, Incineroar, Mudkip, Marshtomp, Swampert, Scorbunny, Cinderace, Prinplup, Empoleon, Relicanth, Goldeen, Seaking, Shellder, Cloyster, Tatsugiri, Igglybuff, Jigglypuff, Wigglytuff, Krookodile, Gible, Gabite, Garchomp, Rhyhorn, Rhydon, Rhyperior, and Carvanha received model updates.
- Vivillon wings will stop being clear when you remove any Vivillon related resourcepacks. The default pattern will be the meadow wings.
- Adjusted Pokémon sendout positions for single battles.
- Wild Pokémon interaction range increased to 12 blocks (from 10 blocks).
- Player trade range increased to 12 blocks (from 10 blocks).
- PvP battle range increased to 32 blocks (from 10 blocks).
- Spectate range increased to 64 blocks (from 10 blocks).
- The inventory key now closes our GUIs if they are open, mirroring how Minecraft screens usually work.
- The noise from the pasture and PC blocks being interacted with now activates Sculk sensors.
- Updated dialogue GUI assets with proper assets.
- Updated dialogue GUI assets with proper assets not made by a programmer. Well, it was still a programmer, but- someone who can also draw!
- Updated party switching interface when in battle.
- Relic coin pouches can now be waterlogged.
- Pokémon name and level labels are now only visible when crouching by default. Set the `displayEntityLabelsWhenCrouchingOnly` config to `false` to always have them displayed.
- The "Press R to start battle prompt" will now disappear after a player's first battle has been won.
- The default number of digits for the Pokédex number in the summary has been increased, from 3 to 4.
- The "Press R to start battle prompt" will now disappear after a player's first battle has been won. You've probably figured that detail out by then.
- The default number of digits for the Pokédex number in the summary has been increased, from 3 to 4. There sure are a lot of Pokémon these days.
- The pasture block model's screen is now off by default.
- The Poké Balls creative tab is now named Utility Items as it also encompasses Poké Rod and Pokédex items.
- Moves can now be benched without specifying a replacement move, allowing for empty move slots.
- Moves learned via Sketch now persist after battle.
- Updated potion sprites
- Removed the interchangeable evolution results for the first stage Hisuian starters to prevent confusion. The method still exists for stage 2 to 3, but stage 1 to 2 was not distinguishable enough for many users.
- Hidden Power now displays its effective typing.
- Updated particles for moves: Confusion, Protect, Sand Attack, and Quick Attack.
- Updated particles for status effects: Paralysis, Poison, and Sleep.
- Updated particles on Gastly.
- Revamped stat buff and de-buff particles.
- Improved the performance of display cases that contain Pokémon photos.
- Updated sounds for Poké Balls.
- Updated the Poké Ball animation for Pokémon breaking out.
- Updated sounds for Poké Balls closing, opening and for Pokémon breaking out.
- Improved the performance of display cases that contain Pokémon Model items.
- Removed species Base Stats from the summary interface as it is now viewable within the Pokédex.
- Changed summary tab text labels to icons.
- Changed summary tab text labels to icons. You'll get used to them. Or else.
- Clicking the summary interface exit button while the swap moves or evolve screen is open will cause the interface to switch back to the party screen. The button will exit the interface otherwise.
- Ancient Poke Balls now jump once rather than shaking 3 times when capturing Pokémon.
- The jump height indicate the number of shakes that would have occurred.
@@ -343,12 +562,15 @@
- A short jump indicates that you caught the Pokémon.
- Pokémon sent out during battle will spawn facing their opponent.
- Pokémon sent out outside a battle will spawn facing their trainer.
- Wailord is now 25% bigger. ... [But I have an idea.](https://tenor.com/view/star-wars-more-gif-21856591)
- Region-biased Pokémon forms are now optional to a built-in resource pack. This pack is enabled by default for Fabric. For NeoForge users, all our built-in resource packs default to disabled because that's all it supports right now.
- Update item sprites for Cell Battery, Chipped Pot, Covert Cloak, Cracked Pot, Masterpiece Teacup, Red Card, Sachet, and Unremarkable Teacup.
### Fixes
- Fixed Ability Patches not reverting Hidden Abilities back to Normal Abilities.
- Fixed awarding Pokémon experience upon forfeiting battles.
- Scaled down Amaura's fetus model to avoid clipping through the tank while animating.
- Fixed Cubone's cry not having a sound.
- Fixed Cubone's cry not having a sound (as if that Pokémon needed to be more tragic).
- Fixed the sendout sound erroneously playing when a wild Pokémon breaks out of a Poké ball.
- Flamethrower is no longer missing sounds.
- Fixed the Seafloor spawning context not being a usable context.
@@ -356,61 +578,58 @@
- Fixed Gilded Chests not dropping the chest itself when broken, only the contents.
- Fixed Pokémon losing their Hidden Ability through evolution if the middle stage did not have a Hidden Ability.
- Hidden Power no longer plays the water type action effect (It now plays the normal type action effect).
- Fixed Chimchar and Monferno T-posing whenever they sleep.
- Fixed Cetitan's cry breaking its walk and sleep animations.
- Fixed Crumbling Arch not blending in with the world.
- Fixed Energy Root applying being usable on a fainted Pokémon.
- Fixed Pokémon entity not spawning when starting a battle while recalling said Pokémon.
- Fixed Crumbling Arch structures not blending in with the world.
- Fixed Energy Root being usable on a fainted Pokémon.
- Fixed Pokémon not being sent out when starting a battle while recalling said Pokémon.
- Fixed species comparison not using namespace for both sides in `PokemonProperties.isSubsetOf`.
- Fixed `PokemonProperties#asString` prefixing nicknames with a '$'.
- Fixed PC not saving when Pokémon was changed outside.
- Fixed shearable Pokémon not dropping correct wool colors.
- Fixed pasture spawning Pokémon inside solid blocks when closest spawning position is blocked off.
- Fixed Tumbling Down advancement not being granted by tumblestone variants.
- Improve error handling when loading spawn sets to ensure invalid configurations don't crash the server.
- Fixed empty `JsonPlayerData` files resulting in players being unable to join server/world.
- Evolution notification and UI sound is now correctly playing (again).
- Sound for evolving Pokémon through the Summary Menu is now correctly playing again.
- Fix Starter prompt not showing up.
- Fix evolution now granting Pokédex entries.
- Fix Pokédex crash when a form is looked up without ever seeing the "normal" form.
- Fixed owned poké balls floating upwards if pausing mid-transition.
- Fixed owned Poké balls floating upwards if pausing the game mid-transition (which looked absolutely hilarious).
- Fixed all mouse buttons working for Battle UI navigation (now it's only primary/left click).
- Fixed trading Pokémon setting their friendship to 0 instead of the base value.
- Fixed a scenario where a Pokémon that rolled to spawn with a special Tera type sometimes has a Tera type that is already a part of their natural typing.
- Fixed a scenario where a Pokémon that rolled to spawn with a special Tera type sometimes having a Tera type that is already a part of their natural typing.
- Fixed PokemonProperty argument suggestions for `tera` and `tera_type` not suggesting `stellar`.
- Fixed being able to stack Relic Coin Pouches on top of each other.
- Fixed Model loader generating misleading crash-reports when client is crashing.
- Fixed model loader generating misleading crash-reports when client is crashing - that resurrection tank error wasn't our fault! We're innocent, your honour!
- Big Roots and Energy Roots now share the same sounds as intended.
- Fixed sounds made by blocks playing at a lower pitch than intended.
- Fixed Chimchar and Monferno T posing whenever they sleep.
- Fixed Chimchar and Monferno comically T posing whenever they sleep.
- Fixed Cetitan's cry breaking its walk and sleep animations.
- Fixed the Magby line not having any placeholder walk animations.
- Fixed Duskull and Dusclops using skylight levels for their nether spawn data. There is no sun in the Nether!
- Fixed Hisuian Zoroark using base Zoroark stats.
- Fixed Bellossom clipping into the player head when shoulder mounted.
- Fixed Shroomish's look range to prevent it from looking higher than it should.
- Fixed Maushold's faint animations not playing. It's sadder than Tandemaus!
- Fixed Maushold's faint animations not playing. It's even sadder than Tandemaus!
- Fixed Slowking's battle idle.
- Fixed Grafaiai's walk speed to prevent model sliding.
- Fixed Maushold's faint animations not playing. It's sadder than Tandemaus!
- Fixed Slowking's battle idle.
- Fixed Grafaiai's walk speed to prevent model sliding.
- Fixed Alolan Exeggutor's tail not showing in the party UI. It will now also stand in front of all Pokémon in the party menu :)
- Fixed Timburr duplicating its log while fainting.
- Fixed hitbox sizes for Grotle and Torterra being set to default values.
- Fixed reviving items throwing an exception when used in battle.
- Fixed Hisuian Sneasel using Johtonian Sneasel's cry. Johto-nian. Jotonion. Jotunheim?
- Fixed Trevenant T-posing after 8 seconds of sleeping. I also do that.
- Fixed Bewear T-posing for a bit if a wild one faints where you can see.
- Fixed Noctowl's placeholder fly animation.
- Corrected Lotad blinking animation.
- Fixed reviving items causing errors when used in battle.
- Fixed messages for Focus Sash, Confusion, Mummy, Ice Face, Own Tempo, and Revive.
- Improve error handling when loading spawn-sets to ensure invalid configurations don't crash the server.
- Fixed `crumbling_arch_ruins` from generating a giant cube of air and removed the chest.
- Fixed Crumbling Arch Ruins generating a giant cube of air and removed the chest.
- Fixed possible crash on large population servers due to concurrent access of data.
- Quickly sending out and recalling Pokémon now looks smoother and can no longer be spammed to cause desync issues.
- Pokémon are now invulnerable during sendout animation and intangible during recall animation.
- Pokémon are now invincible during sendout animation and intangible during recall animation.
- Scrolling with party keybinding now behaves properly when using high scroll speed or scroll sensitivity.
- Fixed battle log GUI flashing when Battle GUI is opened.
- Bag Items used during a turn will now be refunded if the battle ends before the next turn begins.
- Pokémon whose current owner is not its Original Trainer now gains extra experience.
- Pokémon whose current owner is not its Original Trainer now gain extra experience.
- Fixed Fossil Resurrection advancement not being granted.
- Fixed village generation caps not applying for berry farms. You were not meant to see more than two berry farms per village!
- Fixed village generation caps not applying for berry farms. You were not meant to see more than two berry farms per village! This has been broken for ages but no one noticed... Hmmm... We could just remove it from here...
- Fixed the Ice Face ability activation being displayed incorrectly in a battle.
- Fixed edge case of F1 and R locking you in battle with no R functionality (requiring ESC to get out).
- Fixed Poké Ball render orientation in battle interface when capturing.
@@ -423,26 +642,23 @@
- Fixed top black border rendering in scroll interfaces in summary UI.
- Fixed aspect tracking for Advancements.
- Fixed illusion not copying aspects or caught ball.
- Delay when successfully catching a Pokémon in an Ancient Poké Ball has been increased to account for the new sounds and particles.
- Prevent summary stats tab from making sounds when clicking on an already open tab.
- Fixed display case not being able to be fed items from underneath.
- Fixed Pokémon battling in water continuously sinking to the bottom.
- Fixed passive healing and wake from faint not disabling when their config values are set to 0.
- Fixed an issue where rebinding the R key to a mouse button prevented players from closing the battle interface using that button.
### Developer
- `SpawnCause` is now an implementation of `SpawningInfluence`.
- Many types related to `Pokemon` including itself now have dedicated `Codec`, please migrate to them from the NBT/JSON/PacketBuffer write/read methods.
- `TeraTypes` now implements `Iterable`.
- `PokemonBattle` now starts on turn 0.
- SpawnCause is now an implementation of SpawningInfluence.
- Renamed Pokemon.hp to Pokemon.maxHealth to make it clearer. Backwards compatibility is provided but it is an active deprecation, please migrate away from it.
- Many types related to ``Pokemon`` including itself now have dedicated ``Codec``, please migrate to them from the NBT/JSON/PacketBuffer write/read methods.
- Serialization of PokemonStores and Pokemon themselves now require registry access, which will break some sidemods. This sucked for us more than it will suck for you! If you have a world or player instance, you can get it from there.
- ``TeraTypes`` now implements ``Iterable``.
- PokemonBattle now starts on turn 0.
- Added `forcedAspects` to Pokémon to make it easier to easily add basic aspects to a Pokémon in a way that persists. We already know that everyone is going to overuse this.
- Made the `Pokemon.aspects` setter private. This could technically break side-mods but if you are affected by this then you were using it wrong! Use `Pokemon.forcedAspects` to fix it.
- Cobblemon's main logger is properly static now.
- PokemonEntity.enablePoseTypeRecalculation can be used to disable automatic pose type recalculation.
- `PokemonEntity.enablePoseTypeRecalculation` can be used to disable automatic pose type recalculation.
- Added CollectEggEvent and HatchEggEvent for compatibility usage.
- Added events for:
- Showdown Instructions
@@ -458,34 +674,42 @@
- Added HealingSource, an interface applied to all sources of healing from player actions, for easier tracking of healing sources.
- Move Change
- Shiny Chance Calculation Event (with player context)
- Dex Information Changed (Pre and Post); this event is fired when the Pokédex is updated with new information.
- Rebuilt large swaths of the model animation code to simplify it.
- Renamed a bunch of things from %Poseable% to %Posable% because spelling.
- Renamed StatelessAnimation to PoseAnimation.
- Renamed StatefulAnimation to ActiveAnimation.
- Documented the animation system.
- Allowed for SpawnSnowstormEntityParticleHandler to handle non-posable entities (due to being non-posable, locators are useless, to set the offset use the settings in the particle itself)
- Allowed for SpawnSnowstormEntityParticleHandler to handle non-posable entities (due to being non-posable, locators are useless - to set the offset use the settings in the particle itself).
- Added property chaining support for duplicate CustomPokemonPropertyType elements.
### Data Pack & Resource Pack Creators
- Added experimental `flow` datapack directory for handling events using MoLang event handlers.
- Added support for "shedders" similar to Shedinja's evolution logic.
- Fixed the placeholder `WingFlapIdle` animation so the wings are not rotating opposite to each other.
- 'player' type dialogue faces can now be explicitly stated so that NPC mods that use fake players can show in dialogue portraits.
- Added `isLeftSide` field for dialogue faces. This determines what side of dialogue box the portrait is on.
- "sounds/attacks" folder has been renamed to "sounds/move"
- `sounds/attacks` directory has been renamed to `sounds/move`.
- Moves sharing generic sounds now have unique sound events, allowing them to be changed with resource packs.
- All move sound events have been renamed to "move.NAME.SOURCE" for consistency.
- Status moves have been moved out of the 'attacks' folder and split into volatile and nonvolatile.
- 'status.badlypoison.actor' sound event has been renamed to "status.toxpoison.actor"
- Mulch and berry harvesting sound events have been renamed and moved to their respective folders in "sounds/block."
- All sounds related to evolving Pokémon have been moved to the "sounds/evolution" folder.
- Sound events for all blocks now start with "block."
- All move sound events have been renamed to `move.<NAME>.<SOURCE>` for consistency.
- Status moves have been moved out of the `attacks` directory and split into volatile and nonvolatile.
- `status.badlypoison.actor` sound event has been renamed to `status.toxpoison.actor`
- Mulch and berry harvesting sound events have been renamed and moved to their respective directories in `sounds/block`.
- All sounds related to evolving Pokémon have been moved to the `sounds/evolution` directory.
- Sound events for all blocks now start with `block`.
- Gimmighoul chest and item interaction sounds have been moved to where its cry is.
- Unused sound files and sound events have been removed.
- Poké Ball sounds are now in their animation files, making them more flexible to edit.
- Added MoLang compatibility in the isVisible property for transformed parts.
- Added q.has_aspect('some_aspect') function to animations, posers, and entity particle effects.
- Added `q.has_aspect('some_aspect')` function to animations, posers, and entity particle effects.
- Added support for conditional pose animations.
- Added a new universal locator called "top".
- Added `eggs_collected` and `eggs_hatched` Advancement triggers.
- Added missing `minYaw` configuration to the `q.look()` function for JSON posers.
- Some pose condition names have been changed:
- `isTouchingWaterOrRain` has been changed to `isInWaterOrRain`
- `isSubermegedInWater` has been changed to `isUnderWater`
### Localization
- Updated translations for:
@@ -1720,6 +1944,7 @@ Thank you so much to all of our community translators that bring the mod to the
- Lowered spawn rate of Tauros.
- Sableye now spawns near gem ores as well as amethyst.
- Added evolution stones and items to item tags
- Pokémon now play their cry animations when clicked on the starter selection screen.
### Fixes
- Fixed catch rates being entirely too difficult.
@@ -1904,5 +2129,4 @@ Thank you so much to all of our community translators that bring the mod to the
- Added species, ability, and move translations for `ko_ko`, `jp_jp`, `fr_fr`, `es_es`, `it_it`, and `zh_cn`.
## [1.0.0 (November 12th, 2022)](#1-0-0)
- Initial release.
- Initial release.
+1 -1
View File
@@ -5,7 +5,7 @@ plugins {
version = "${project.property("mod_version")}+${project.property("mc_version")}"
val isSnapshot = project.property("snapshot")?.equals("true") ?: false
val isSnapshot = project.property("snapshot")?.equals("true") == true
if (isSnapshot) {
val fixedBranchName = versioning.info.branch.substringAfter("/")
version = "$version-${fixedBranchName}-${versioning.info.build}"
@@ -0,0 +1,61 @@
/*
* 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.mixin;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import com.cobblemon.mod.common.pokemon.ai.EntityBehaviour;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.world.entity.monster.Creeper;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Creeper.class)
public class EntityCreeperMixin extends Mob {
private EntityCreeperMixin(net.minecraft.world.entity.EntityType<? extends Creeper> entityType, Level world) {
super(entityType, world);
}
@Inject(method = "registerGoals", at = @At(value = "TAIL"), cancellable = false)
private void cobblemon$initGoals(CallbackInfo callbackInfo) {
final Creeper creeper = (Creeper) (Object) this;
// Pokemon Entities
this.goalSelector.addGoal(
3,
new AvoidEntityGoal<>(
creeper,
PokemonEntity.class,
6.0f,
1.0,
1.2,
entity -> ((PokemonEntity)entity).getBehaviour().getEntityInteract().getAvoidedByCreeper() && ((PokemonEntity)entity).getBeamMode() != 1
)
);
// Players with shoulder mounted Pokemon
this.goalSelector.addGoal(
3,
new AvoidEntityGoal<>(
creeper,
ServerPlayer.class,
6.0f,
1.0,
1.2,
entity -> EntityBehaviour.Companion.hasCreeperFearedShoulderMount((ServerPlayer)entity)
)
);
}
}
@@ -0,0 +1,39 @@
/*
* 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.mixin;
import net.minecraft.world.entity.monster.Phantom;
import org.spongepowered.asm.mixin.Mixin;
@Mixin(targets = "net/minecraft/world/entity/monster/Phantom$PhantomSweepAttackGoal")
public class EntityPhantomMixin {
// TODO: Figure out how to access the outer class that wraps SwoopMovementGoal
// Need to find the cat mons that are near the phantom
// @Inject(method = "shouldContinue", at = @At(value = "RETURN"), cancellable = true)
// public void cobblemon$shouldContinue(CallbackInfoReturnable<Boolean> ci) {
//// var goalSelectorField = PhantomEntity.class.getClasses();// PhantomEntity.class.getFields();// .class.getDeclaredField("goalSelector");
//
//// goalSelectorField.setAccessible(true);
//// GoalSelector goalSelector = (GoalSelector) goalSelectorField.get(mobEntity);
//// final SwoopMovementGoal phantom = (SwoopMovementGoal) (Object) this;
//// if(ci.getReturnValue() == false) {
//// var result = this$0.getWorld().getEntitiesByClass(
//// PokemonEntity.class,
//// this$0.getBoundingBox().expand(16.0),
//// entity -> {
//// return ((PokemonEntity) entity).getBehaviour().getEntityInteract().getAvoidedByPhantom();
//// }
//// ).isEmpty();
////
//// ci.setReturnValue(result);
//// }
// }
}
@@ -9,6 +9,20 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.CobblemonClient;
import com.cobblemon.mod.common.client.render.MatrixWrapper;
import com.cobblemon.mod.common.client.render.models.blockbench.PosableModel;
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState;
import com.cobblemon.mod.common.entity.PosableEntity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import org.joml.Vector3f;
import org.spongepowered.asm.mixin.Debug;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
@@ -34,4 +48,39 @@ public class EntityRenderDispatcherMixin {
public void resourceManagerReloadHook(ResourceManager resourceManager, CallbackInfo ci) {
CobblemonClient.INSTANCE.onAddLayer(this.playerRenderers);
}
@Inject(
method = "renderHitbox(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraft/world/entity/Entity;FFFF)V",
at = @At(value = "TAIL")
)
private static void renderLocators(
PoseStack poseStack,
VertexConsumer buffer,
Entity entity,
float red,
float green,
float blue,
float alpha,
CallbackInfo ci
) {
if (entity instanceof PosableEntity posableEntity) {
if (posableEntity.getDelegate() instanceof PosableState state) {
state.getLocatorStates().forEach((locator, matrix) -> {
poseStack.pushPose();
Vec3 pos = matrix.getOrigin().subtract(entity.position());
LevelRenderer.renderLineBox(
poseStack,
buffer,
AABB.ofSize(pos, 0.25, 0.25, 0.25),
0F,
1F,
0F,
1F
);
poseStack.popPose();
});
}
}
}
}
@@ -0,0 +1,62 @@
/*
* 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.mixin;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import com.cobblemon.mod.common.pokemon.ai.EntityBehaviour;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.world.entity.monster.AbstractSkeleton;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(AbstractSkeleton.class)
public class EntitySkeletonMixin extends Mob {
private EntitySkeletonMixin(EntityType<? extends Mob> entityType, Level world) {
super(entityType, world);
}
@Inject(method = "registerGoals", at = @At(value = "TAIL"), cancellable = false)
private void cobblemon$initGoals(CallbackInfo callbackInfo) {
final AbstractSkeleton skeleton = (AbstractSkeleton) (Object) this;
// Pokemon Entities
this.goalSelector.addGoal(
3,
new AvoidEntityGoal<>(
skeleton,
PokemonEntity.class,
6.0f,
1.0,
1.2,
entity -> ((PokemonEntity)entity).getBehaviour().getEntityInteract().getAvoidedBySkeleton() && ((PokemonEntity)entity).getBeamMode() != 1
)
);
// Players with shoulder mounted Pokemon
this.goalSelector.addGoal(
3,
new AvoidEntityGoal<>(
skeleton,
ServerPlayer.class,
6.0f,
1.0,
1.2,
entity -> EntityBehaviour.Companion.hasSkeletonFearedShoulderMount((ServerPlayer)entity)
)
);
}
}
@@ -14,6 +14,7 @@ import com.cobblemon.mod.common.api.events.CobblemonEvents;
import com.cobblemon.mod.common.api.events.item.LeftoversCreatedEvent;
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies;
import com.cobblemon.mod.common.api.storage.party.PartyStore;
import com.cobblemon.mod.common.api.storage.party.PlayerPartyStore;
import com.cobblemon.mod.common.api.tags.CobblemonItemTags;
import com.cobblemon.mod.common.pokedex.scanner.PokedexEntityData;
import com.cobblemon.mod.common.pokedex.scanner.ScannableEntity;
@@ -178,10 +179,10 @@ public abstract class PlayerMixin extends LivingEntity implements ScannableEntit
@Override @Nullable
public PokedexEntityData resolvePokemonScan() {
if(CompoundTagUtilities.isShoulderPokemon(this.getShoulderEntityRight())){
if (CompoundTagUtilities.isShoulderPokemon(this.getShoulderEntityRight())){
return getDataFromShoulderPokemon(this.getShoulderEntityRight());
}
if(CompoundTagUtilities.isShoulderPokemon(this.getShoulderEntityLeft())){
if (CompoundTagUtilities.isShoulderPokemon(this.getShoulderEntityLeft())){
return getDataFromShoulderPokemon(this.getShoulderEntityLeft());
}
return null;
@@ -190,30 +191,34 @@ public abstract class PlayerMixin extends LivingEntity implements ScannableEntit
@Nullable @Unique
private PokedexEntityData getDataFromShoulderPokemon(CompoundTag shoulderTag) {
CompoundTag pokemonTag = shoulderTag.getCompound(DataKeys.POKEMON);
if(pokemonTag.isEmpty()) return null;
if (pokemonTag.isEmpty()) return null;
Species species = PokemonSpecies.INSTANCE.getByIdentifier(ResourceLocation.parse(pokemonTag.getString(DataKeys.POKEMON_SPECIES_IDENTIFIER)));
if(species == null) return null;
if (species == null) return null;
String formId = pokemonTag.getString(DataKeys.POKEMON_FORM_ID);
FormData form = species.getStandardForm();
List<FormData> formList = species.getForms().stream().filter(it -> it.formOnlyShowdownId().equals(formId)).toList();
if(!formList.isEmpty()) form = formList.getFirst();
if(form == null) return null;
if (!formList.isEmpty()) form = formList.getFirst();
if (form == null) return null;
String genderString = pokemonTag.getString(DataKeys.POKEMON_GENDER);
if(genderString.isEmpty()) return null;
if (genderString.isEmpty()) return null;
Gender gender = Gender.valueOf(genderString);
boolean shiny = pokemonTag.getBoolean(DataKeys.POKEMON_SHINY);
int level = pokemonTag.getInt(DataKeys.POKEMON_LEVEL);
Set<String> aspects = shoulderTag.getList(DataKeys.SHOULDER_ASPECTS, Tag.TAG_STRING).stream().map(Tag::getAsString).collect(Collectors.toSet());
return new PokedexEntityData(
species,
form,
gender,
aspects,
shiny,
level,
this.getUUID()
);
Pokemon pokemon = new Pokemon();
if (level().isClientSide) {
pokemon.setSpecies(species);
pokemon.setForm(form);
pokemon.setGender(gender);
pokemon.setShiny(shiny);
pokemon.setLevel(level);
pokemon.setForcedAspects(aspects);
} else {
PlayerPartyStore party = Cobblemon.INSTANCE.getStorage().getParty(this.getUUID(), this.registryAccess());
pokemon = party.get(shoulderTag.getUUID(DataKeys.SHOULDER_UUID));
}
return new PokedexEntityData(pokemon, null);
}
@Override
@@ -14,6 +14,7 @@ import com.cobblemon.mod.common.api.SeasonResolver
import com.cobblemon.mod.common.api.data.DataProvider
import com.cobblemon.mod.common.api.drop.CommandDropEntry
import com.cobblemon.mod.common.api.drop.DropEntry
import com.cobblemon.mod.common.api.drop.EvolutionItemDropEntry
import com.cobblemon.mod.common.api.drop.ItemDropEntry
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.CobblemonEvents.DATA_SYNCHRONIZED
@@ -54,7 +55,10 @@ import com.cobblemon.mod.common.api.storage.pc.PCStore
import com.cobblemon.mod.common.api.storage.pc.link.PCLinkManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.api.storage.player.adapter.*
import com.cobblemon.mod.common.api.storage.player.adapter.DexDataMongoBackend
import com.cobblemon.mod.common.api.storage.player.adapter.DexDataNbtBackend
import com.cobblemon.mod.common.api.storage.player.adapter.PlayerDataJsonBackend
import com.cobblemon.mod.common.api.storage.player.adapter.PlayerDataMongoBackend
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
@@ -65,16 +69,8 @@ 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.command.argument.DexArgumentType
import com.cobblemon.mod.common.command.argument.DialogueArgumentType
import com.cobblemon.mod.common.command.argument.FormArgumentType
import com.cobblemon.mod.common.command.argument.MoveArgumentType
import com.cobblemon.mod.common.command.argument.NPCClassArgumentType
import com.cobblemon.mod.common.command.argument.PartySlotArgumentType
import com.cobblemon.mod.common.command.argument.PokemonPropertiesArgumentType
import com.cobblemon.mod.common.command.argument.PokemonStoreArgumentType
import com.cobblemon.mod.common.command.argument.SpawnBucketArgumentType
import com.cobblemon.mod.common.command.argument.SpeciesArgumentType
import com.cobblemon.mod.common.client.CobblemonPack
import com.cobblemon.mod.common.command.argument.*
import com.cobblemon.mod.common.config.CobblemonConfig
import com.cobblemon.mod.common.config.LastChangedVersion
import com.cobblemon.mod.common.config.constraint.IntConstraint
@@ -94,17 +90,21 @@ import com.cobblemon.mod.common.pokemon.evolution.variants.BlockClickEvolution
import com.cobblemon.mod.common.pokemon.feature.TagSeasonResolver
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
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.NoAIProperty
import com.cobblemon.mod.common.pokemon.properties.UnaspectPropertyType
import com.cobblemon.mod.common.pokemon.properties.UncatchableProperty
import com.cobblemon.mod.common.pokemon.properties.BattleCloneProperty
import com.cobblemon.mod.common.pokemon.properties.tags.PokemonFlagProperty
import com.cobblemon.mod.common.pokemon.stat.CobblemonStatProvider
import com.cobblemon.mod.common.starter.CobblemonStarterHandler
import com.cobblemon.mod.common.trade.TradeManager
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.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
@@ -116,7 +116,7 @@ import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.PrintWriter
import java.util.*
import java.util.UUID
import kotlin.math.roundToInt
import kotlin.properties.Delegates
import kotlin.reflect.full.memberProperties
@@ -125,6 +125,7 @@ import kotlin.reflect.jvm.javaField
import net.minecraft.client.Minecraft
import net.minecraft.commands.synchronization.SingletonArgumentInfo
import net.minecraft.resources.ResourceKey
import net.minecraft.server.packs.PackType
import net.minecraft.world.item.NameTagItem
import net.minecraft.world.level.Level
import net.minecraft.world.level.storage.LevelResource
@@ -164,6 +165,16 @@ object Cobblemon {
var statProvider: StatProvider = CobblemonStatProvider
var seasonResolver: SeasonResolver = TagSeasonResolver
@JvmStatic
val builtinPacks = listOf<CobblemonPack>(
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),
CobblemonPack(id = "uniqueshinyforms", name = "Shinies for Magikarp Jump", packType = PackType.CLIENT_RESOURCES, activationBehaviour = ResourcePackActivationBehaviour.NORMAL),
CobblemonPack(id = "repurposedstructurescobblemon", name = "Repurposed Structures Cobblemon", packType = PackType.SERVER_DATA, activationBehaviour = ResourcePackActivationBehaviour.DEFAULT_ENABLED, neededMods = setOf("repurposed_structures")),
)
fun preInitialize(implementation: CobblemonImplementation) {
this.implementation = implementation
@@ -190,6 +201,7 @@ object Cobblemon {
DropEntry.register("command", CommandDropEntry::class.java)
DropEntry.register("item", ItemDropEntry::class.java, isDefault = true)
DropEntry.register("evolution", EvolutionItemDropEntry::class.java)
ExperienceGroups.registerDefaults()
CaptureCalculators.registerDefaults()
@@ -208,7 +220,7 @@ object Cobblemon {
storage.onPlayerDataSync(it)
playerDataManager.syncAllToPlayer(it)
starterHandler.handleJoin(it)
ServerSettingsPacket(this.config.preventCompletePartyDeposit, this.config.displayEntityLevelLabel, this.config.displayEntityNameLabel).sendToPlayer(it)
ServerSettingsPacket(this.config.preventCompletePartyDeposit, this.config.displayEntityLevelLabel, this.config.displayEntityNameLabel, this.config.maxPokemonLevel, this.config.maxPokemonFriendship, this.config.maxDynamaxLevel).sendToPlayer(it)
}
PlatformEvents.SERVER_PLAYER_LOGOUT.subscribe {
PCLinkManager.removeLink(it.player.uuid)
@@ -246,6 +258,8 @@ object Cobblemon {
// Lowest priority because this applies after luxury ball bonus as of gen 4
CobblemonEvents.FRIENDSHIP_UPDATED.subscribe(Priority.LOWEST) { event ->
var increment = (event.newFriendship - event.pokemon.friendship).toFloat()
if (increment <= 0) //these affects are only meant to affect positive gains
return@subscribe
// Our Luxury ball spec is diff from official, but we will still assume these stack
if (event.pokemon.heldItemNoCopy().`is`(CobblemonItemTags.IS_FRIENDSHIP_BOOSTER)) {
increment += increment * 0.5F
@@ -386,8 +400,13 @@ object Cobblemon {
BattleFormat.GEN_9_SINGLES,
BattleSide(PokemonBattleActor(UUID.randomUUID(), BattlePokemon(Pokemon().initialize()), -1F)),
BattleSide(PokemonBattleActor(UUID.randomUUID(), BattlePokemon(Pokemon().initialize()), -1F)),
true
).ifSuccessful { it.mute = true }
false
).ifSuccessful {
it.mute = true
}.ifErrored {
val errors = it.errors.joinToString("\n") { it.javaClass.name }
LOGGER.error("Failed to start dummy Showdown battle: $errors")
}
}
registerEventHandlers()
@@ -15,6 +15,8 @@ object CobblemonActivities {
val BATTLING = register(Activity("battling"))
val ACTION_EFFECT = register(Activity("action_effect"))
val NPC_CHATTING = register(Activity("npc_chatting"))
val POKEMON_SLEEPING_ACTIVITY = register(Activity("pokemon_sleeping"))
val POKEMON_GROW_CROP = register(Activity("pokemon_grow_crop"))
fun register(activity: Activity): Activity {
activities.add(activity)
@@ -121,10 +121,17 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
val APRICORN_PRESSURE_PLATE = this.create("apricorn_pressure_plate", PressurePlateBlockInvoker.`cobblemon$create`(APRICORN_BLOCK_SET_TYPE, BlockBehaviour.Properties.of().mapColor(APRICORN_PLANKS.defaultMapColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)))
@JvmField
val APRICORN_SIGN = this.create("apricorn_sign", CobblemonSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SIGN), APRICORN_WOOD_TYPE))
@JvmField //if you wonder why we don't copy of OAK_WALL_SIGN, then I can tell you its because it uses Properties#dropsLike to point to the SIGN loot table, but we cant use that in our setup due to a deeper rooted issue, so falling back to this and writing dedicated (duplicated) loot tables
val APRICORN_WALL_SIGN = this.create(
"apricorn_wall_sign",
CobblemonWallSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SIGN), APRICORN_WOOD_TYPE)
)
@JvmField
val APRICORN_WALL_SIGN = this.create("apricorn_wall_sign", CobblemonWallSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_WALL_SIGN), APRICORN_WOOD_TYPE))
@JvmField
val APRICORN_HANGING_SIGN = this.create("apricorn_hanging_sign", CobblemonHangingSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_WALL_HANGING_SIGN), APRICORN_WOOD_TYPE))
val APRICORN_HANGING_SIGN = this.create(
"apricorn_hanging_sign",
CobblemonHangingSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_HANGING_SIGN), APRICORN_WOOD_TYPE)
)
@JvmField
val APRICORN_WALL_HANGING_SIGN = this.create("apricorn_wall_hanging_sign", CobblemonWallHangingSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_HANGING_SIGN), APRICORN_WOOD_TYPE))
@JvmField
@@ -9,27 +9,35 @@
package com.cobblemon.mod.common
import com.bedrockk.molang.Expression
import com.cobblemon.mod.common.CobblemonNetwork.sendPacket
import com.cobblemon.mod.common.api.ai.BrainPreset
import com.cobblemon.mod.common.api.ai.config.BrainConfig
import com.cobblemon.mod.common.api.ai.config.task.TaskConfig
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.api.reactive.SimpleObservable
import com.cobblemon.mod.common.net.messages.client.data.BrainPresetSyncPacket
import com.cobblemon.mod.common.util.adapters.ActivityAdapter
import com.cobblemon.mod.common.util.adapters.BrainConfigAdapter
import com.cobblemon.mod.common.util.adapters.ExpressionAdapter
import com.cobblemon.mod.common.util.adapters.ExpressionLikeAdapter
import com.cobblemon.mod.common.util.adapters.ExpressionOrEntityVariableAdapter
import com.cobblemon.mod.common.util.adapters.IdentifierAdapter
import com.cobblemon.mod.common.util.adapters.TaskConfigAdapter
import com.cobblemon.mod.common.util.adapters.TranslatedTextAdapter
import com.cobblemon.mod.common.util.cobblemonResource
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import com.mojang.datafixers.util.Either
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.server.packs.PackType
import net.minecraft.world.entity.schedule.Activity
object CobblemonBrainConfigs : JsonDataRegistry<List<BrainConfig>> {
object CobblemonBrainConfigs : JsonDataRegistry<BrainPreset> {
override val gson: Gson = GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(Activity::class.java, ActivityAdapter)
@@ -37,21 +45,27 @@ object CobblemonBrainConfigs : JsonDataRegistry<List<BrainConfig>> {
.registerTypeAdapter(ExpressionLike::class.java, ExpressionLikeAdapter)
.registerTypeAdapter(BrainConfig::class.java, BrainConfigAdapter)
.registerTypeAdapter(TaskConfig::class.java, TaskConfigAdapter)
.registerTypeAdapter(
TypeToken.getParameterized(Either::class.java, Expression::class.java, MoLangConfigVariable::class.java).type,
ExpressionOrEntityVariableAdapter
)
.registerTypeAdapter(Component::class.java, TranslatedTextAdapter)
.registerTypeAdapter(ResourceLocation::class.java, IdentifierAdapter)
.create()
override val typeToken = TypeToken.getParameterized(List::class.java, BrainConfig::class.java) as TypeToken<List<BrainConfig>>
override val typeToken = TypeToken.get(BrainPreset::class.java)
override val resourcePath = "brain_presets"
override val id: ResourceLocation = cobblemonResource("brain_presets")
override val type = PackType.SERVER_DATA
override val observable = SimpleObservable<CobblemonBrainConfigs>()
val presets = mutableMapOf<ResourceLocation, List<BrainConfig>>()
val presets = mutableMapOf<ResourceLocation, BrainPreset>()
override fun sync(player: ServerPlayer) {
// TODO implement probs ay
player.sendPacket(BrainPresetSyncPacket(presets))
}
override fun reload(data: Map<ResourceLocation, List<BrainConfig>>) {
override fun reload(data: Map<ResourceLocation, BrainPreset>) {
presets.clear()
presets.putAll(data)
}
@@ -56,6 +56,8 @@ object CobblemonCommands {
AbandonMultiTeam.register(dispatcher)
FreezePokemonCommand.register(dispatcher)
ApplyPlayerTextureCommand.register(dispatcher)
RunMolangScriptCommand.register(dispatcher)
BrainEditCommand.register(dispatcher)
// Possibly lock down registration if and only if under dev environment or running in an environment
// with a certain system environment variable set
@@ -12,6 +12,7 @@ import com.bedrockk.molang.runtime.MoLangRuntime
import com.bedrockk.molang.runtime.value.MoValue
import com.cobblemon.mod.common.CobblemonNetwork.sendPacket
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.events.Cancelable
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.api.reactive.SimpleObservable
@@ -48,19 +49,23 @@ object CobblemonFlows : DataRegistry {
val flows = hashMapOf<ResourceLocation, MutableList<ExpressionLike>>()
override fun reload(manager: ResourceManager) {
clientFlows.clear()
flows.clear()
val unsortedFlows = mutableMapOf<ResourceLocation, MutableList<Pair<String, ExpressionLike>>>()
val folderBeforeNameRegex = ".*\\/([^\\/]+)\\/[^\\/]+\$".toRegex()
manager.listResources("flows") { path -> path.endsWith(CobblemonScripts.MOLANG_EXTENSION) }.forEach { (identifier, resource) ->
resource.openAsReader().use { stream ->
stream.buffered().use { reader ->
try {
val expression = reader.readText().asExpressionLike()
val event = folderBeforeNameRegex.find(identifier.path)?.groupValues?.get(1)
?: throw IllegalArgumentException("Invalid flow path: $identifier. Should have a folder structure that includes the name of the event being flowed.")
if (identifier.path.startsWith("flows/client/")) {
clientFlows.getOrPut(ResourceLocation.fromNamespaceAndPath(identifier.namespace, event)) { mutableListOf() }.add(expression)
} else {
flows.getOrPut(ResourceLocation.fromNamespaceAndPath(identifier.namespace, event)) { mutableListOf() }.add(expression)
}
val flowKey = ResourceLocation.fromNamespaceAndPath(identifier.namespace, event)
unsortedFlows.putIfAbsent(flowKey, mutableListOf())
unsortedFlows[flowKey]!!.add(identifier.path to expression)
} catch (exception: Exception) {
throw ExecutionException("Error loading MoLang script for flow: $identifier", exception)
}
@@ -68,11 +73,31 @@ object CobblemonFlows : DataRegistry {
}
}
Cobblemon.LOGGER.info("Loaded ${CobblemonScripts.scripts.size} flows and ${CobblemonScripts.clientScripts.size} client flows")
unsortedFlows.forEach { (key, value) ->
value.sortBy { it.first }
if (key.path.startsWith("flows/client/")) {
clientFlows.getOrPut(key) { mutableListOf() }.addAll(value.map { it.second })
} else {
flows.getOrPut(key) { mutableListOf() }.addAll(value.map { it.second })
}
}
Cobblemon.LOGGER.info("Loaded ${flows.size} flows and ${clientFlows.size} client flows")
observable.emit(this)
}
fun run(eventResourceLocation: ResourceLocation, context: Map<String, MoValue>) {
flows[eventResourceLocation]?.forEach { it.resolve(runtime, context) }
fun run(eventResourceLocation: ResourceLocation, context: Map<String, MoValue>, cancelable: Cancelable? = null) {
if (cancelable == null) {
runtime.environment.query.functions.remove("cancel")
} else {
runtime.environment.query.addFunction("cancel") { cancelable }
}
flows[eventResourceLocation]?.forEach {
if (cancelable != null && cancelable.isCanceled) {
return
}
it.resolve(runtime, context)
}
}
}
@@ -8,25 +8,22 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.mojang.brigadier.arguments.ArgumentType
import kotlin.reflect.KClass
import net.minecraft.commands.synchronization.ArgumentTypeInfo
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.MinecraftServer
import net.minecraft.server.level.ServerPlayer
import net.minecraft.server.packs.PackType
import net.minecraft.server.packs.resources.PreparableReloadListener
import net.minecraft.server.packs.resources.ResourceManager
import net.minecraft.tags.TagKey
import net.minecraft.world.level.GameRules
import net.minecraft.world.level.ItemLike
import net.minecraft.world.level.biome.Biome
import net.minecraft.world.level.levelgen.GenerationStep
import net.minecraft.world.level.levelgen.placement.PlacedFeature
import kotlin.reflect.KClass
interface CobblemonImplementation {
val modAPI: ModAPI
@@ -178,16 +175,6 @@ interface CobblemonImplementation {
* @param chance The chance % of increasing the composter level, 0 to 1 expected.
*/
fun registerCompostable(item: ItemLike, chance: Float)
/**
* Registers a builtin resource pack.
*
* @param id The unique [ResourceLocation] of this pack.
* @param title The title displayed in the resource pack GUI, the description is still a part of the pack metadata.
* @param activationBehaviour The [ResourcePackActivationBehaviour] for this pack.
*/
fun registerBuiltinResourcePack(id: ResourceLocation, title: Component, activationBehaviour: ResourcePackActivationBehaviour)
}
enum class ResourcePackActivationBehaviour {
@@ -54,6 +54,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
override val registry: Registry<Item> = BuiltInRegistries.ITEM
override val resourceKey: ResourceKey<Registry<Item>> = Registries.ITEM
@JvmField
val NPC_EDITOR = create("npc_editor", CobblemonItem(Item.Properties().stacksTo(1)))
@JvmField
val pokeBalls = mutableListOf<PokeBallItem>()
@JvmField
@@ -314,6 +317,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField val RAZOR_FANG = noSettingsItem("razor_fang")
@JvmField val AUSPICIOUS_ARMOR = heldItem("auspicious_armor")
@JvmField val MALICIOUS_ARMOR = heldItem("malicious_armor")
@JvmField val SHELL_HELMET = heldItem("shell_helmet")
private val berries = mutableMapOf<ResourceLocation, BerryItem>()
// Plants
@@ -389,6 +393,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField val BERRY_JUICE = this.create("berry_juice", BerryJuiceItem())
@JvmField
val GALARICA_NUTS = create("galarica_nuts", GalaricaNutItem())
// Medicine
@JvmField
val RARE_CANDY = candyItem("rare_candy") { _, pokemon -> pokemon.getExperienceToNextLevel() }
@@ -439,6 +446,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
.saturationModifier(1.2F)
.effect(MobEffectInstance(MobEffects.ABSORPTION, 900, 0), 1F)
.alwaysEdible()
.usingConvertsTo(Items.BOWL)
.build())) {
override fun finishUsingItem(stack: ItemStack, world: Level, user: LivingEntity): ItemStack {
user.removeAllEffects()
@@ -474,7 +482,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val HEAL_POWDER = create("heal_powder", HealPowderItem())
@JvmField
val LEEK_AND_POTATO_STEW = create("leek_and_potato_stew", Item(Item.Properties().food(FoodProperties.Builder().nutrition(8).saturationModifier(0.6f).build()).stacksTo(1)))
val LEEK_AND_POTATO_STEW = create("leek_and_potato_stew", Item(Item.Properties().food(FoodProperties.Builder().nutrition(8).saturationModifier(0.6f).usingConvertsTo(Items.BOWL).build()).stacksTo(1)))
@JvmField
val REVIVE = create("revive", ReviveItem(max = false))
@JvmField
@@ -16,14 +16,31 @@ import com.mojang.serialization.codecs.PrimitiveCodec
import net.minecraft.core.UUIDUtil
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import java.util.Optional
import java.util.UUID
import net.minecraft.core.BlockPos
import net.minecraft.world.entity.LivingEntity
object CobblemonMemories {
val memories = mutableMapOf<String, MemoryModuleType<*>>()
/*
* When a memory doesn't have a codec provided, it's because it doesn't
* get serialized during relogs. This makes sense for things like battles which
* do not survive a relog therefore any memory of it should be temporary.
*/
val BATTLING_POKEMON = register("battling_pokemon", ListCodec(UUIDUtil.CODEC, 0, 31))
val NPC_BATTLING = register("npc_battling", PrimitiveCodec.BOOL)
val DIALOGUES = register<List<ActiveDialogue>>("npc_dialogues")
val ACTIVE_ACTION_EFFECT = register<ActionEffectContext>("active_action_effect")
val POKEMON_FLYING = register("pokemon_flying", PrimitiveCodec.BOOL)
val POKEMON_DROWSY = register("pokemon_drowsy", PrimitiveCodec.BOOL)
val POKEMON_SLEEPING = register("pokemon_sleeping", PrimitiveCodec.BOOL)
val POKEMON_BATTLE = register<UUID>("pokemon_battle")
val REST_PATH_COOLDOWN = register("rest_path_cooldown", PrimitiveCodec.BOOL)
val TARGETED_BATTLE_POKEMON = register<UUID>("targeted_battle_pokemon")
val NEAREST_VISIBLE_ATTACKER = register<LivingEntity>("nearest_visible_attacker")
val NEARBY_GROWABLE_CROPS = register<BlockPos>("nearby_growable_crops")
fun <U> register(id: String, codec: Codec<U>): MemoryModuleType<U> {
val memoryModule = MemoryModuleType(Optional.of(codec))
@@ -36,4 +53,4 @@ object CobblemonMemories {
memories[id] = memoryModule
return memoryModule
}
}
}
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.client.net.OpenBehaviourEditorHandler
import com.cobblemon.mod.common.client.net.PlayerInteractOptionsHandler
import com.cobblemon.mod.common.client.net.SetClientPlayerDataHandler
import com.cobblemon.mod.common.client.net.animation.PlayPosableAnimationHandler
@@ -51,8 +52,16 @@ import com.cobblemon.mod.common.client.net.storage.pc.OpenPCHandler
import com.cobblemon.mod.common.client.net.storage.pc.SetPCBoxPokemonHandler
import com.cobblemon.mod.common.client.net.storage.pc.SetPCPokemonHandler
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.OpenBehaviourEditorPacket
import com.cobblemon.mod.common.net.messages.client.PlayerInteractOptionsPacket
import com.cobblemon.mod.common.net.messages.client.SetClientPlayerDataPacket
import com.cobblemon.mod.common.net.messages.client.animation.PlayPosableAnimationPacket
@@ -93,14 +102,38 @@ 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.SetPCBoxPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.SetPCPokemonPacket
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.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.BattleChallengePacket
import com.cobblemon.mod.common.net.messages.server.BattleChallengeResponsePacket
import com.cobblemon.mod.common.net.messages.server.BenchMovePacket
import com.cobblemon.mod.common.net.messages.server.RequestMoveSwapPacket
import com.cobblemon.mod.common.net.messages.server.RequestPlayerInteractionsPacket
import com.cobblemon.mod.common.net.messages.server.SelectStarterPacket
import com.cobblemon.mod.common.net.messages.server.SendOutPokemonPacket
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.SetEntityBehaviourPacket
import com.cobblemon.mod.common.net.messages.server.block.AdjustBlockEntityViewerCountPacket
import com.cobblemon.mod.common.net.messages.server.callback.move.MoveSelectCancelledPacket
import com.cobblemon.mod.common.net.messages.server.callback.move.MoveSelectedPacket
@@ -130,9 +163,22 @@ import com.cobblemon.mod.common.net.messages.server.storage.pc.MovePartyPokemonT
import com.cobblemon.mod.common.net.messages.server.storage.pc.ReleasePCPokemonPacket
import com.cobblemon.mod.common.net.messages.server.storage.pc.SwapPCPokemonPacket
import com.cobblemon.mod.common.net.messages.server.storage.pc.UnlinkPlayerFromPCPacket
import com.cobblemon.mod.common.net.messages.server.trade.*
import com.cobblemon.mod.common.net.serverhandling.*
import com.cobblemon.mod.common.net.serverhandling.battle.*
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.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.SetEntityBehaviourHandler
import com.cobblemon.mod.common.net.serverhandling.block.AdjustBlockEntityViewerCountHandler
import com.cobblemon.mod.common.net.serverhandling.callback.move.MoveSelectCancelledHandler
import com.cobblemon.mod.common.net.serverhandling.callback.move.MoveSelectedHandler
@@ -166,7 +212,12 @@ import com.cobblemon.mod.common.net.serverhandling.storage.pc.MovePartyPokemonTo
import com.cobblemon.mod.common.net.serverhandling.storage.pc.ReleasePartyPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.pc.SwapPCPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.pc.UnlinkPlayerFromPCHandler
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
@@ -304,6 +355,7 @@ object CobblemonNetwork {
list.add(PacketRegisterInfo(DexEntrySyncPacket.ID, DexEntrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(FishingBaitRegistrySyncPacket.ID, FishingBaitRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(FlowRegistrySyncPacket.ID, FlowRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(BrainPresetSyncPacket.ID, BrainPresetSyncPacket::decode, DataRegistrySyncPacketHandler()))
// Effects
list.add(PacketRegisterInfo(SpawnSnowstormParticlePacket.ID, SpawnSnowstormParticlePacket::decode, SpawnSnowstormParticleHandler))
@@ -354,6 +406,9 @@ object CobblemonNetwork {
list.add(PacketRegisterInfo(CloseNPCEditorPacket.ID, CloseNPCEditorPacket::decode, CloseNPCEditorHandler))
list.add(PacketRegisterInfo(OpenNPCEditorPacket.ID, OpenNPCEditorPacket::decode, OpenNPCEditorHandler))
// Behaviours
list.add(PacketRegisterInfo(OpenBehaviourEditorPacket.ID, OpenBehaviourEditorPacket::decode, OpenBehaviourEditorHandler))
// Pokédex scanning
list.add(PacketRegisterInfo(ServerConfirmedRegisterPacket.ID, ServerConfirmedRegisterPacket::decode, ServerConfirmedRegisterHandler))
return list
@@ -443,6 +498,9 @@ object CobblemonNetwork {
// NPC packets
list.add(PacketRegisterInfo(SaveNPCPacket.ID, SaveNPCPacket::decode, SaveNPCHandler))
// Behaviour Packets
list.add(PacketRegisterInfo(SetEntityBehaviourPacket.ID, SetEntityBehaviourPacket::decode, SetEntityBehaviourHandler))
return list
}
@@ -8,6 +8,12 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.DefendOwnerSensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.DrowsySensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.ItemEntitySensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.PokemonAdultSensor
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.PokemonGrowableCropSensor
import com.cobblemon.mod.common.pokemon.ai.PokemonDisturbancesSensor
import com.cobblemon.mod.common.entity.sensor.BattlingPokemonSensor
import com.cobblemon.mod.common.entity.sensor.NPCBattlingSensor
import java.util.function.Supplier
@@ -20,10 +26,22 @@ object CobblemonSensors {
val NPC_BATTLING = register("npc_battling", ::NPCBattlingSensor)
val BATTLING_POKEMON = register("battling_pokemon", ::BattlingPokemonSensor)
// val NPC_BATTLING = register("npc_battling", ::NPCBattlingSensor)
val POKEMON_DROWSY = register("pokemon_drowsy", ::DrowsySensor)
val POKEMON_ADULT = register("pokemon_adult_sensor", ::PokemonAdultSensor)
val POKEMON_DISTURBANCE = register("pokemon_disturbance_sensor", ::PokemonDisturbancesSensor)
val POKEMON_DEFEND_OWNER = register("pokemon_owner_under_attack", ::DefendOwnerSensor)
val NEARBY_GROWABLE_CROPS = register("nearby_growable_crops", ::PokemonGrowableCropSensor)
val ITEM_SENSOR = register("item_sensor", ::ItemEntitySensor)
fun <E : Entity, U : Sensor<E>> register(id: String, supplier: Supplier<U>): SensorType<U> {
val sensor = SensorType(supplier)
sensors[id] = sensor
return sensor
}
}
}
@@ -55,6 +55,8 @@ object CobblemonCriteria : PlatformRegistry<Registry<CriterionTrigger<*>>, Resou
val CAST_POKE_ROD = this.create("cast_poke_rod", SimpleCriterionTrigger(CastPokeRodCriterionCondition.CODEC))
val REEL_IN_POKEMON = this.create("reel_in_pokemon", SimpleCriterionTrigger(ReelInPokemonCriterionCondition.CODEC))
// Advancement criteria for [grow_tumblestone.json]
val PLANT_TUMBLESTONE = this.create("plant_tumblestone", SimpleCriterionTrigger(PlantTumblestoneCriterion.CODEC))
@@ -8,26 +8,30 @@
package com.cobblemon.mod.common.advancement.criterion
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.PrimitiveCodec
import com.mojang.serialization.codecs.RecordCodecBuilder
import java.util.Optional
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.server.level.ServerPlayer
import net.minecraft.resources.ResourceLocation
class CastPokeRodContext(val baitId: ResourceLocation)
class CastPokeRodCriterionCondition(
playerCtx: Optional<ContextAwarePredicate>,
val hasBait: Boolean
): SimpleCriterionCondition<Boolean>(playerCtx) {
playerCtx: Optional<ContextAwarePredicate>,
val baitId: String
): SimpleCriterionCondition<CastPokeRodContext>(playerCtx) {
companion object {
val CODEC: Codec<CastPokeRodCriterionCondition> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(CastPokeRodCriterionCondition::playerCtx),
PrimitiveCodec.BOOL.fieldOf("hasBait").forGetter(CastPokeRodCriterionCondition::hasBait)
).apply(it, ::CastPokeRodCriterionCondition) }
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(CastPokeRodCriterionCondition::playerCtx),
Codec.STRING.optionalFieldOf("baitId", "empty_bait").forGetter(CastPokeRodCriterionCondition::baitId)
).apply(it, { playerCtx, baitId -> CastPokeRodCriterionCondition(playerCtx, baitId.ifEmpty { "empty_bait" }) }) }
}
override fun matches(player: ServerPlayer, context: Boolean): Boolean {
return hasBait == context
override fun matches(player: ServerPlayer, context: CastPokeRodContext): Boolean {
return (context.baitId == this.baitId.asIdentifierDefaultingNamespace() || this.baitId.equals("empty_bait"))
}
}
}
@@ -26,76 +26,25 @@ class PartyCheckCriterion(
companion object {
val CODEC: Codec<PartyCheckCriterion> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(PartyCheckCriterion::playerCtx),
ResourceLocation.CODEC.listOf().optionalFieldOf("id", listOf()).forGetter(PartyCheckCriterion::party)
ResourceLocation.CODEC.listOf().optionalFieldOf("party", listOf()).forGetter(PartyCheckCriterion::party)
).apply(it, ::PartyCheckCriterion) }
}
override fun matches(player: ServerPlayer, context: PlayerPartyStore): Boolean {
val matches = mutableListOf<ResourceLocation>()
party.forEach {
if (it == "any".asIdentifierDefaultingNamespace()) {
if (it == "any".asIdentifierDefaultingNamespace("minecraft") || it == "any".asIdentifierDefaultingNamespace()) {
matches.add(it)
}
}
val partyCount = context.count()
if (matches.containsAll(party) && party.size == partyCount && matches.size == partyCount) return true
matches.clear()
context.iterator().forEach {
if (party.contains(it.species.resourceIdentifier)) {
matches.add(it.species.resourceIdentifier)
}
}
return matches.containsAll(party) && matches.size == partyCount
return matches.containsAll(party) && matches.size == party.size
}
}
/*class PartyCheckCriterion(id: Identifier, entity: LootContextPredicate) : SimpleCriterionCondition<PartyCheckContext>(id, entity){
val party = mutableListOf<Identifier>()
override fun toJson(json: JsonObject) {
json.add("party", JsonArray(party.size).also {
party.forEach { pokemon -> it.add(pokemon.toString()) }
})
}
override fun fromJson(json: JsonObject) {
party.clear()
json.getAsJsonArray("party").forEach { element ->
party.add(element.asString.asIdentifierDefaultingNamespace())
}
}
override fun matches(player: ServerPlayer, context: PartyCheckContext): Boolean {
val playerParty = player.party()
val matches = mutableListOf<Identifier>()
party.forEach {
if (it == "any".asIdentifierDefaultingNamespace()) {
matches.add(it)
}
}
val partyCount = playerParty.count()
if (matches.containsAll(party) && party.size == partyCount && matches.size == partyCount) return true
playerParty.iterator().forEach {
if (party.contains(it.species.resourceIdentifier)) {
matches.add(it.species.resourceIdentifier)
}
}
return matches.containsAll(party) && matches.size == partyCount
}
}
open class PartyCheckContext(val party : PlayerPartyStore)*/
@@ -0,0 +1,39 @@
/*
* 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.advancement.criterion
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import java.util.Optional
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.server.level.ServerPlayer
import net.minecraft.resources.ResourceLocation
class ReelInPokemonContext(val pokemonId : ResourceLocation, val baitId: ResourceLocation)
class ReelInPokemonCriterionCondition(
playerCtx: Optional<ContextAwarePredicate>,
val pokemonId: String,
val baitId: String
) : SimpleCriterionCondition<ReelInPokemonContext>(playerCtx) {
companion object {
val CODEC: Codec<ReelInPokemonCriterionCondition> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter { it.playerCtx },
Codec.STRING.optionalFieldOf("pokemonId", "any").forGetter { it.pokemonId },
Codec.STRING.optionalFieldOf("baitId", "empty_bait").forGetter { it.baitId }
).apply(it, { playerCtx, pokemonId, baitId -> ReelInPokemonCriterionCondition(playerCtx, pokemonId, baitId.ifEmpty { "empty_bait" }) }) }
}
override fun matches(player: ServerPlayer, context: ReelInPokemonContext): Boolean {
return (context.pokemonId == this.pokemonId.asIdentifierDefaultingNamespace() || this.pokemonId == "any") && (context.baitId == this.baitId.asIdentifierDefaultingNamespace() || this.baitId == "empty_bait")
}
}
@@ -9,11 +9,14 @@
package com.cobblemon.mod.common.api.ai
import com.cobblemon.mod.common.api.ai.config.BrainConfig
import com.cobblemon.mod.common.entity.MoLangScriptingEntity
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.schedule.Activity
import net.minecraft.world.entity.schedule.Schedule
class BrainConfigurationContext {
var appliedBrainPresets: MutableSet<ResourceLocation> = mutableSetOf()
var defaultActivity = Activity.IDLE
var coreActivities = setOf(Activity.CORE)
@@ -27,6 +30,11 @@ class BrainConfigurationContext {
fun apply(entity: LivingEntity, brainConfigs: List<BrainConfig>) {
val brain = entity.brain
if (entity is MoLangScriptingEntity) {
entity.registerVariables(brainConfigs.flatMap { it.getVariables(entity) })
entity.initializeScripting()
}
// Setup the brain config
brainConfigs.forEach { it.configure(entity, this) }
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai
import com.cobblemon.mod.common.api.ai.config.BrainConfig
import com.cobblemon.mod.common.util.asTranslated
import com.cobblemon.mod.common.util.entityTypeRegistry
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.LivingEntity
class BrainPreset(
val name: Component = "dummy".asTranslated(),
val description: Component = "".asTranslated(),
val entityType: ResourceLocation? = null,
val configurations: List<BrainConfig> = mutableListOf()
) {
fun canBeApplied(entity: LivingEntity) = entityType?.let { entity.type == entity.level().entityTypeRegistry.get(it) } != false
}
@@ -0,0 +1,20 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai
import com.bedrockk.molang.Expression
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.mojang.datafixers.util.Either
import kotlin.jvm.optionals.getOrNull
typealias ExpressionOrEntityVariable = Either<Expression, MoLangConfigVariable>
fun List<ExpressionOrEntityVariable>.asVariables() = mapNotNull { it.right().getOrNull() }
@@ -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.api.ai
/**
* The medium that an entity might be in which motivates what type of wandering it should do.
*
* If you've discovered this in main and it's not being used outside of that unused extension function, delete me
*
* @author Hiroku
* @since January 25th, 2025
*/
enum class PathfindingMedium {
LAND,
WATER,
LAVA,
AIR
}
@@ -8,27 +8,23 @@
package com.cobblemon.mod.common.api.ai.config
import com.bedrockk.molang.runtime.MoLangRuntime
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.TaskConfig
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.cobblemon.mod.common.util.asExpression
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.schedule.Activity
class AddTasksToActivity : BrainConfig {
val activity = Activity.IDLE
val condition = "true".asExpressionLike()
val condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
val tasksByPriority = mutableMapOf<Int, List<TaskConfig>>()
override fun getVariables(entity: LivingEntity) = tasksByPriority.values.flatten().flatMap { it.getVariables(entity) } + listOf(condition).asVariables()
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {
val runtime = MoLangRuntime().setup()
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return
if (!checkCondition(entity, condition)) return
val activity = brainConfigurationContext.getOrCreateActivity(activity)
tasksByPriority.forEach { (priority, taskConfigs) ->
@@ -9,8 +9,13 @@
package com.cobblemon.mod.common.api.ai.config
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.MoLangScriptingEntity
import net.minecraft.world.entity.LivingEntity
object DummyBrainConfig : BrainConfig {
class AddVariablesConfig : BrainConfig {
override fun getVariables(entity: LivingEntity) = mutableListOf<MoLangConfigVariable>()
// Configuration happens naturally through the override on variables
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {}
}
@@ -8,28 +8,42 @@
package com.cobblemon.mod.common.api.ai.config
import com.bedrockk.molang.runtime.MoLangRuntime
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.CobblemonBrainConfigs
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.mojang.datafixers.util.Either
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.LivingEntity
class ApplyPresets : BrainConfig {
val condition = "true".asExpressionLike()
var condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
val presets = mutableListOf<ResourceLocation>()
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {
val runtime = MoLangRuntime().setup()
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return
override fun getVariables(entity: LivingEntity): List<MoLangConfigVariable> {
return if (checkCondition(entity, condition)) {
presets.flatMap {
CobblemonBrainConfigs.presets[it]?.configurations?.flatMap { it.getVariables(entity) } ?: emptyList()
} + listOf(condition).asVariables()
} else {
listOf(condition).asVariables()
}
}
val presetConfigs = presets.flatMap { CobblemonBrainConfigs.presets[it] ?: return Cobblemon.LOGGER.warn("Preset $it not found") }
presetConfigs.forEach { it.configure(entity, brainConfigurationContext) }
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {
if (!checkCondition(entity, condition)) return
val presetConfigs = presets.flatMap { CobblemonBrainConfigs.presets[it]?.takeIf { it.canBeApplied(entity) }?.configurations ?: return Cobblemon.LOGGER.warn("Preset $it not found") }
// Why not just add the presets to the context directly?
// Nested preset application is a thing, and I only want to track the top level presets.
// i.e. if a preset applies another preset, I don't want to track the inner preset, since it's redundant if we track the top one.
val originalContextPresets = brainConfigurationContext.appliedBrainPresets.toMutableSet()
presetConfigs.forEach {
it.configure(entity, brainConfigurationContext)
}
originalContextPresets.addAll(presets)
brainConfigurationContext.appliedBrainPresets = originalContextPresets
}
}
@@ -8,7 +8,15 @@
package com.cobblemon.mod.common.api.ai.config
import com.bedrockk.molang.runtime.MoLangRuntime
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
/**
@@ -30,12 +38,21 @@ interface BrainConfig {
"add_tasks_to_activity" to AddTasksToActivity::class.java,
"apply_presets" to ApplyPresets::class.java,
"set_default_activity" to SetDefaultActivity::class.java,
"set_core_activities" to SetCoreActivities::class.java
"set_core_activities" to SetCoreActivities::class.java,
"add_variables" to AddVariablesConfig::class.java,
"set_variables" to SetVariablesConfig::class.java,
)
}
fun checkCondition(entity: LivingEntity, expressionOrEntityVariable: ExpressionOrEntityVariable): Boolean {
val runtime = MoLangRuntime().setup()
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
return runtime.resolveBoolean(expressionOrEntityVariable.map({ it }, { "q.entity.config.${it.variableName}".asExpression() }))
}
// fun encode(buffer: RegistryFriendlyByteBuf)
// fun decode(buffer: RegistryFriendlyByteBuf)
fun getVariables(entity: LivingEntity): List<MoLangConfigVariable>
fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext)
}
@@ -117,3 +117,49 @@ Example brain preset (`uses_healing_machine.json`):
}
]
```
### add_variables
The `add_variables` type adds some number of MoLang variables to the entity that can be configured in-game or left with defaults.
- `variables`: A list of objects, each representing a variable that can be configured.
Each variable has the following properties:
- `variableName`: The name of the variable. This is the name that will be accessible from MoLang scripts.
- `defaultValue`: The default value of the variable. This is a MoLang expression that will be used if the variable is not set.
- `displayName`: The display name of the variable. This is used in the UI to label the variable. This can be a translation key.
- `description`: A description of the variable. This is used in the UI to describe what the variable does. This can be a translation key.
- `type`: The type of the variable. This can be `TEXT`, `NUMBER`, or `BOOLEAN`.
Example:
```json
{
"type": "add_variables",
"variables": [
{
"variableName": "can_heal_using_machine",
"defaultValue": "false",
"displayName": "Can Use Healing Machine",
"description": "Whether or not the entity can use a healing machine.",
"type": "BOOLEAN"
}
]
}
```
### set_variables
The `set_variables` type sets some values for pre-established variables. This is useful in cases where a preset has defined a variable
but it's locked in by a specific entity using that preset. This strongly forces the variable to a specific value. In future this
probably should deregister the variable so that the client cannot edit them once they've been forced, as currently that will
be possible yet the value will get repeatedly overwritten.
The values inside the variables map can be MoLang expressions (with `q.entity` as the entity) or simple JSON primitives.
Example:
```json
{
"type": "set_variables",
"variables": {
"aggressive": true,
"attack_range": "10"
}
}
```
@@ -15,8 +15,10 @@ import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.ai.ActivityConfigurationContext
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.MoLangFunctions.addStandardFunctions
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.api.molang.ObjectValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.api.scripting.CobblemonScripts
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.activityRegistry
@@ -33,10 +35,11 @@ import net.minecraft.world.entity.ai.behavior.BehaviorControl
class ScriptBrainConfig : BrainConfig {
val condition = "true".asExpressionLike()
val script = cobblemonResource("dummy")
override fun getVariables(entity: LivingEntity) = mutableListOf<MoLangConfigVariable>()
override fun configure(entity: LivingEntity, context: BrainConfigurationContext) {
val runtime = MoLangRuntime().setup()
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!runtime.resolveBoolean(condition)) return
val struct = createBrainStruct(entity, context)
@@ -50,7 +53,7 @@ class ScriptBrainConfig : BrainConfig {
fun createBrainStruct(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): QueryStruct {
return QueryStruct(hashMapOf()).addStandardFunctions()
.addFunction("entity") { (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()) }
.addFunction("entity") { entity.asMostSpecificMoLangValue() }
.addFunction("create_activity") { params ->
val name = params.getString(0).asIdentifierDefaultingNamespace()
val activity = entity.level().activityRegistry.get(name) ?: return@addFunction run {
@@ -9,11 +9,13 @@
package com.cobblemon.mod.common.api.ai.config
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.schedule.Activity
class SetCoreActivities : BrainConfig {
val activities = mutableListOf<Activity>()
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {
brainConfigurationContext.coreActivities = activities.toSet()
}
@@ -9,11 +9,13 @@
package com.cobblemon.mod.common.api.ai.config
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.schedule.Activity
class SetDefaultActivity : BrainConfig {
val activity: Activity = Activity.IDLE
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {
brainConfigurationContext.defaultActivity = activity
}
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config
import com.bedrockk.molang.runtime.MoLangRuntime
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.MoLangScriptingEntity
import com.cobblemon.mod.common.util.resolve
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
class SetVariablesConfig : BrainConfig {
var variableValues = mutableMapOf<String, ExpressionLike>()
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun configure(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext) {
val runtime = MoLangRuntime().setup()
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (entity is MoLangScriptingEntity) {
variableValues.forEach { (variableName, valueExpression) ->
entity.config.setDirectly(variableName, runtime.resolve(valueExpression))
}
}
}
}
@@ -0,0 +1,74 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.WanderTaskConfig.Companion.WANDER
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.BlockPosTracker
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.ai.memory.WalkTarget
import net.minecraft.world.entity.ai.util.HoverRandomPos
class AirWanderTaskConfig : SingleTaskConfig {
val condition = booleanVariable(WANDER, "air_wanders", true).asExpressible()
val wanderChance = numberVariable(WANDER, "air_wander_chance", 1/(20 * 1F)).asExpressible()
val horizontalRange = numberVariable(WANDER, "horizontal_wander_range", 20).asExpressible()
val verticalRange = numberVariable(WANDER, "vertical_wander_range", 5).asExpressible()
val speedMultiplier = numberVariable(SharedEntityVariables.MOVEMENT_CATEGORY, SharedEntityVariables.WALK_SPEED, 0.35).asExpressible()
val minUpwardsMovement: ExpressionOrEntityVariable = Either.left("3.0".asExpression())
val minDownwardsMovement: ExpressionOrEntityVariable = Either.left("3.0".asExpression())
override fun getVariables(entity: LivingEntity): List<MoLangConfigVariable> {
return listOf(condition, wanderChance, horizontalRange, verticalRange, speedMultiplier, minUpwardsMovement, minDownwardsMovement).asVariables()
}
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return BehaviorBuilder.create {
it.group(
it.absent(MemoryModuleType.WALK_TARGET),
it.registered(MemoryModuleType.LOOK_TARGET)
).apply(it) { walkTarget, lookTarget ->
Trigger { world, entity, time ->
if (entity !is PathfinderMob || entity.isInWater) {
return@Trigger false
}
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
val wanderChance = wanderChance.resolveFloat()
if (wanderChance <= 0 || world.random.nextFloat() > wanderChance) return@Trigger false
val rotVec = entity.getViewVector(0F)
val target = HoverRandomPos.getPos(entity, horizontalRange.resolveInt(), verticalRange.resolveInt(), rotVec.x, rotVec.y, 1.5707964f, minUpwardsMovement.resolveInt(), minDownwardsMovement.resolveInt())
?: return@Trigger false
walkTarget.set(WalkTarget(target, speedMultiplier.resolveFloat(), 3))
lookTarget.set(BlockPosTracker(target))
return@Trigger true
}
}
}
}
}
@@ -8,25 +8,36 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class AllOfTaskConfig : TaskConfig {
val condition = "true".asExpressionLike()
val condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
val tasks: List<TaskConfig> = emptyList()
override fun getVariables(entity: LivingEntity): List<MoLangConfigVariable> {
return if (checkCondition(entity, condition))
tasks.flatMap { it.getVariables(entity) } + listOf(condition).asVariables()
else
listOf(condition).asVariables()
}
override fun createTasks(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): List<BehaviorControl<in LivingEntity>> {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return emptyList()
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return emptyList()
return tasks.flatMap { it.createTasks(entity, brainConfigurationContext) }
}
}
@@ -8,9 +8,10 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.ai.AttackAngryAtTask
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
@@ -19,13 +20,15 @@ import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class AttackAngryAtTaskConfig : SingleTaskConfig {
val condition = "true".asExpressionLike()
val condition = booleanVariable(SharedEntityVariables.ATTACKING_CATEGORY, "should_attack_angry_at", true).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(condition).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return AttackAngryAtTask.create()
}
}
@@ -8,24 +8,28 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.VillagerCalmDown
class CalmDownTaskConfig : SingleTaskConfig {
var condition = "true".asExpression()
var condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(condition).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return VillagerCalmDown.create()
}
}
@@ -8,30 +8,34 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.DoNothing
class DoNothingTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val minDurationTicks = "40".asExpression()
val maxDurationTicks = "80".asExpression()
val condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
val minDurationTicks: ExpressionOrEntityVariable = Either.left("40".asExpression())
val maxDurationTicks: ExpressionOrEntityVariable = Either.left("80".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(condition, minDurationTicks, maxDurationTicks).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
return DoNothing(runtime.resolveInt(minDurationTicks), runtime.resolveInt(maxDurationTicks))
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return DoNothing(minDurationTicks.resolveInt(), maxDurationTicks.resolveInt())
}
}
@@ -8,14 +8,14 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.battles.BattleRegistry
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.entity.npc.NPCEntity
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
@@ -24,15 +24,21 @@ import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
class ExitBattleWhenHurtTaskConfig : SingleTaskConfig {
var condition = "true".asExpression()
var includePassiveDamage = true
var condition = booleanVariable(SharedEntityVariables.BATTLING_CATEGORY, "exit_battle_when_hurt", true).asExpressible()
var includePassiveDamage = booleanVariable(SharedEntityVariables.BATTLING_CATEGORY, "exit_battle_from_passive_damage", true).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
includePassiveDamage
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
val includePassiveDamage = includePassiveDamage.resolveBoolean()
if (!condition.resolveBoolean()) return null
if (entity is NPCEntity) {
fun cancelNPCBattles(npcEntity: NPCEntity): Boolean {
@@ -52,7 +58,7 @@ class ExitBattleWhenHurtTaskConfig : SingleTaskConfig {
.apply(it) { _, _ -> Trigger { world, entity, _ -> return@Trigger cancelNPCBattles(entity as NPCEntity) } }
}
}
} else { return null }/* else if (entity is PokemonEntity) { TODO uncomment when pokemon have brain :)
} else if (entity is PokemonEntity) {
fun cancelPokemonBattle(pokemonEntity: PokemonEntity): Boolean {
val battle = BattleRegistry.getBattle(pokemonEntity.battleId ?: return false)
battle?.end()
@@ -61,15 +67,17 @@ class ExitBattleWhenHurtTaskConfig : SingleTaskConfig {
return if (includePassiveDamage) {
BehaviorBuilder.create {
it.group(it.present(MemoryModuleType.HURT_BY), it.present(CobblemonMemories.POKEMON_BATTLING))
it.group(it.present(MemoryModuleType.HURT_BY), it.present(CobblemonMemories.POKEMON_BATTLE))
.apply(it) { _, _ -> Trigger { world, entity, _ -> return@Trigger cancelPokemonBattle(entity as PokemonEntity) } }
}
} else {
BehaviorBuilder.create {
it.group(it.present(MemoryModuleType.HURT_BY_ENTITY), it.present(CobblemonMemories.POKEMON_BATTLING))
it.group(it.present(MemoryModuleType.HURT_BY_ENTITY), it.present(CobblemonMemories.POKEMON_BATTLE))
.apply(it) { _, _ -> Trigger { world, entity, _ -> return@Trigger cancelPokemonBattle(entity as PokemonEntity) } }
}
}
}*/
} else {
return null
}
}
}
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.FindRestingPlaceTask
import com.cobblemon.mod.common.util.asExpression
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class FindRestingPlaceTaskConfig : SingleTaskConfig {
val horizontalSearchDistance: ExpressionOrEntityVariable = Either.left("16".asExpression())
val verticalSearchDistance: ExpressionOrEntityVariable = Either.left("5".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(horizontalSearchDistance, verticalSearchDistance).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
return WrapperLivingEntityTask(
FindRestingPlaceTask.create(horizontalSearchDistance.resolveInt(), verticalSearchDistance.resolveInt()),
PokemonEntity::class.java
)
}
}
@@ -8,14 +8,12 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveFloat
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.FLEE_DESIRED_DISTANCE
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.FLEE_SPEED_MULTIPLIER
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
@@ -24,18 +22,24 @@ import net.minecraft.world.entity.ai.behavior.SetWalkTargetAwayFrom
import net.minecraft.world.entity.ai.memory.MemoryModuleType
class FleeAttackerTaskConfig : SingleTaskConfig {
var condition = "true".asExpression()
var speedMultiplier = "0.5".asExpression()
var desiredDistance = "9".asExpression()
var condition = booleanVariable(SharedEntityVariables.FEAR_CATEGORY, "flee_attacker", true).asExpressible()
var speedMultiplier = numberVariable(SharedEntityVariables.FEAR_CATEGORY, FLEE_SPEED_MULTIPLIER, 0.5).asExpressible()
var desiredDistance = numberVariable(SharedEntityVariables.FEAR_CATEGORY, FLEE_DESIRED_DISTANCE, 9).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
speedMultiplier,
desiredDistance
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition) || entity !is PathfinderMob) return null
val speedMultiplier = runtime.resolveFloat(speedMultiplier)
val desiredDistance = runtime.resolveInt(desiredDistance)
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean() || entity !is PathfinderMob) return null
val speedMultiplier = speedMultiplier.resolveFloat()
val desiredDistance = desiredDistance.resolveInt()
return WrapperLivingEntityTask(
SetWalkTargetAwayFrom.entity(MemoryModuleType.HURT_BY_ENTITY, speedMultiplier, desiredDistance, false),
PathfinderMob::class.java
@@ -8,14 +8,13 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveFloat
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.FLEE_DESIRED_DISTANCE
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.FLEE_SPEED_MULTIPLIER
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
@@ -24,18 +23,20 @@ import net.minecraft.world.entity.ai.behavior.SetWalkTargetAwayFrom
import net.minecraft.world.entity.ai.memory.MemoryModuleType
class FleeNearestHostileTaskConfig : SingleTaskConfig {
var condition = "true".asExpression()
var speedMultiplier = "0.5".asExpression()
var desiredDistance = "9".asExpression()
var condition = booleanVariable(SharedEntityVariables.FEAR_CATEGORY, "flee_nearest_hostile", true).asExpressible()
var speedMultiplier = numberVariable(SharedEntityVariables.FEAR_CATEGORY, FLEE_SPEED_MULTIPLIER, 0.5).asExpressible()
var desiredDistance = numberVariable(SharedEntityVariables.FEAR_CATEGORY, FLEE_DESIRED_DISTANCE, 9).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(condition, speedMultiplier, desiredDistance).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition) || entity !is PathfinderMob) return null
val speedMultiplier = runtime.resolveFloat(speedMultiplier)
val desiredDistance = runtime.resolveInt(desiredDistance)
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean() || entity !is PathfinderMob) return null
val speedMultiplier = speedMultiplier.resolveFloat()
val desiredDistance = desiredDistance.resolveInt()
return WrapperLivingEntityTask(
SetWalkTargetAwayFrom.entity(MemoryModuleType.NEAREST_HOSTILE, speedMultiplier, desiredDistance, false),
PathfinderMob::class.java
@@ -8,32 +8,31 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.ai.FollowWalkTargetTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class FollowWalkTargetTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val minRunTicks: Expression = "150".asExpression()
val maxRunTicks: Expression = "250".asExpression()
val condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
val minRunTicks: ExpressionOrEntityVariable = Either.left("150".asExpression())
val maxRunTicks: ExpressionOrEntityVariable = Either.left("250".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(minRunTicks, maxRunTicks).asVariables()
override fun createTask(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): BehaviorControl<LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
return WrapperLivingEntityTask(
FollowWalkTargetTask(runtime.resolveInt(minRunTicks), runtime.resolveInt(maxRunTicks)),
FollowWalkTargetTask(minRunTicks.resolveInt(), maxRunTicks.resolveInt()),
PathfinderMob::class.java
)
}
@@ -8,26 +8,30 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.ATTACKING_CATEGORY
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.entity.ai.GetAngryAtAttackerTask
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class GetAngryAtAttackerTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
companion object {
const val GET_ANGRY_AT_ATTACKER = "get_angry_at_attacker"
}
val condition = booleanVariable(ATTACKING_CATEGORY, GET_ANGRY_AT_ATTACKER, true).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(condition).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return GetAngryAtAttackerTask.create()
}
}
@@ -8,38 +8,43 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.entity.npc.ai.GoToHealingMachineTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class GoToHealingMachineTaskConfig(
val condition: ExpressionLike = "true".asExpressionLike(),
val horizontalSearchRange: Expression = "10".asExpression(),
val verticalSearchRange: Expression = "5".asExpression(),
val speedMultiplier: Expression = "0.35".asExpression(),
val completionRange: Expression = "1".asExpression()
) : SingleTaskConfig {
class GoToHealingMachineTaskConfig : SingleTaskConfig {
val condition = booleanVariable(SELF_HEALING, USE_HEALING_MACHINES, true).asExpressible()
val horizontalSearchRange: ExpressionOrEntityVariable = Either.left("10".asExpression())
val verticalSearchRange: ExpressionOrEntityVariable = Either.left("5".asExpression())
val completionRange: ExpressionOrEntityVariable = Either.left("1".asExpression())
val walkSpeed = numberVariable(SharedEntityVariables.MOVEMENT_CATEGORY, SharedEntityVariables.WALK_SPEED, 0.35).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(condition, walkSpeed, horizontalSearchRange, verticalSearchRange, completionRange).asVariables()
companion object {
const val SELF_HEALING = "self_healing"
const val USE_HEALING_MACHINES = "use_healing_machines"
}
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return GoToHealingMachineTask.create(
horizontalSearchRange = horizontalSearchRange,
verticalSearchRange = verticalSearchRange,
speedMultiplier = speedMultiplier,
completionRange = completionRange
horizontalSearchRange = horizontalSearchRange.asExpression(),
verticalSearchRange = verticalSearchRange.asExpression(),
speedMultiplier = walkSpeed.asExpression(),
completionRange = completionRange.asExpression()
)
}
@@ -0,0 +1,27 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.GoToSleepTask
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class GoToSleepTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
return WrapperLivingEntityTask(GoToSleepTask.create(), PokemonEntity::class.java)
}
}
@@ -8,29 +8,33 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.GoToHealingMachineTaskConfig.Companion.SELF_HEALING
import com.cobblemon.mod.common.api.ai.config.task.GoToHealingMachineTaskConfig.Companion.USE_HEALING_MACHINES
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.npc.ai.HealUsingHealingMachineTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class HealUsingHealingMachineTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val horizontalUseRange = "3".asExpression()
val verticalUseRange = "2".asExpression()
val condition = booleanVariable(SELF_HEALING, USE_HEALING_MACHINES, true).asExpressible()
val horizontalUseRange: ExpressionOrEntityVariable = Either.left("2".asExpression())
val verticalUseRange: ExpressionOrEntityVariable = Either.left("1".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(condition, horizontalUseRange, verticalUseRange).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
return HealUsingHealingMachineTask(horizontalUseRange, verticalUseRange)
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return HealUsingHealingMachineTask(horizontalUseRange.asExpression(), verticalUseRange.asExpression())
}
}
@@ -8,29 +8,41 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.entity.npc.ai.LookAtBattlingPokemonTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class LookAtBattlingPokemonTaskConfig : SingleTaskConfig {
val minDurationTicks = "40".asExpression()
val maxDurationTicks = "80".asExpression()
companion object {
const val LOOK_AT_BATTLING_POKEMON = "look_at_battling_pokemon"
}
val condition = booleanVariable(SharedEntityVariables.BATTLING_CATEGORY, LOOK_AT_BATTLING_POKEMON, true).asExpressible()
val minDurationTicks: ExpressionOrEntityVariable = Either.left("40".asExpression())
val maxDurationTicks: ExpressionOrEntityVariable = Either.left("80".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(
condition,
minDurationTicks,
maxDurationTicks
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!resolveBooleanVariable(LOOK_AT_BATTLING_POKEMON)) return null
return LookAtBattlingPokemonTask.create(
minDurationTicks = runtime.resolveInt(minDurationTicks),
maxDurationTicks = runtime.resolveInt(maxDurationTicks)
minDurationTicks = minDurationTicks.resolveInt(),
maxDurationTicks = maxDurationTicks.resolveInt()
)
}
}
@@ -8,29 +8,35 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveFloat
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.SEE_DISTANCE
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.SetEntityLookTarget
class LookAtEntitiesTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val maxDistance = "15".asExpression()
companion object {
const val LOOK_AT_ENTITIES = "look_at_entities"
}
val condition = booleanVariable(SharedEntityVariables.LOOKING_CATEGORY, LOOK_AT_ENTITIES, true).asExpressible()
val maxDistance = numberVariable(SharedEntityVariables.LOOKING_CATEGORY, SEE_DISTANCE, 15).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
maxDistance
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
return SetEntityLookTarget.create(runtime.resolveFloat(maxDistance))
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return SetEntityLookTarget.create(maxDistance.resolveFloat())
}
}
@@ -9,10 +9,12 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.npc.ai.LookAtSpeakerTask
import net.minecraft.world.entity.LivingEntity
class LookAtSpeakerTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -8,33 +8,37 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.Mob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.LookAtTargetSink
class LookAtTargetTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val minDurationTicks: Expression = "40".asExpression()
val maxDurationTicks: Expression = "80".asExpression()
val condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
val minDurationTicks: ExpressionOrEntityVariable = Either.left("80".asExpression())
val maxDurationTicks: ExpressionOrEntityVariable = Either.left("160".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(
condition,
minDurationTicks,
maxDurationTicks
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
return WrapperLivingEntityTask(LookAtTargetSink(runtime.resolveInt(minDurationTicks), runtime.resolveInt(maxDurationTicks)), Mob::class.java)
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return WrapperLivingEntityTask(LookAtTargetSink(minDurationTicks.resolveInt(), maxDurationTicks.resolveInt()), Mob::class.java)
}
}
@@ -0,0 +1,27 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.LookAtTargetedBattlePokemonTask
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class LookAtTargetedBattlePokemonTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity> {
return WrapperLivingEntityTask(LookAtTargetedBattlePokemonTask.create(), PokemonEntity::class.java)
}
}
@@ -8,18 +8,29 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.SharedEntityVariables.LOOKING_CATEGORY
import com.cobblemon.mod.common.entity.ai.LookInDirectionTask
import com.cobblemon.mod.common.util.asExpression
import net.minecraft.world.entity.LivingEntity
class LookInDirectionTaskConfig : SingleTaskConfig {
var yaw: Expression = "0".asExpression()
var pitch: Expression = "0".asExpression()
var condition = booleanVariable(LOOKING_CATEGORY, "locked_rotation", true).asExpressible()
var yaw = numberVariable(LOOKING_CATEGORY, "locked_yaw", 0F).asExpressible()
var pitch = numberVariable(LOOKING_CATEGORY, "locked_pitch", 0F).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
yaw,
pitch
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
) = LookInDirectionTask(yaw, pitch)
) = LookInDirectionTask(
shouldLock = condition.asExpression(),
yaw = yaw.asExpression(),
pitch = pitch.asExpression()
)
}
@@ -8,32 +8,36 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.npc.ai.MeleeAttackTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class MeleeAttackTaskConfig : SingleTaskConfig {
val condition = "true".asExpressionLike()
val range = "1.5".asExpression()
val cooldownTicks = "30".asExpression()
val condition = booleanVariable(SharedEntityVariables.ATTACKING_CATEGORY, "attacks_melee", true).asExpressible()
val range = numberVariable(SharedEntityVariables.ATTACKING_CATEGORY, "melee_range", 1.5F).asExpressible()
val cooldownTicks = numberVariable(SharedEntityVariables.ATTACKING_CATEGORY, "melee_cooldown", 30).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
range,
cooldownTicks
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return MeleeAttackTask.create(
range = range,
cooldownTicks = cooldownTicks
range = range.asExpression(),
cooldownTicks = cooldownTicks.asExpression()
)
}
}
@@ -9,19 +9,28 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.ai.MoveToAttackTargetTask
import com.cobblemon.mod.common.util.asExpression
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
class MoveToAttackTargetTaskConfig : SingleTaskConfig {
val speedMultiplier = "0.5".asExpression()
val closeEnoughDistance = "1".asExpression()
val speedMultiplier = numberVariable(SharedEntityVariables.ATTACKING_CATEGORY, "attacking_movement_speed", 0.5).asExpressible()
val closeEnoughDistance: ExpressionOrEntityVariable = Either.left("1".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(
speedMultiplier,
closeEnoughDistance
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
) = MoveToAttackTargetTask.create(
speedMultiplier = speedMultiplier,
closeEnoughDistance = closeEnoughDistance
speedMultiplier = speedMultiplier.asExpression(),
closeEnoughDistance = closeEnoughDistance.asExpression()
)
}
@@ -0,0 +1,29 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.ai.FollowWalkTargetTask
import com.cobblemon.mod.common.entity.ai.MoveToAttackTargetTask
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.MoveToItemAndEatTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class MoveToItemAndEatTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): BehaviorControl<LivingEntity>? {
return WrapperLivingEntityTask(
MoveToItemAndEatTask(),
PokemonEntity::class.java
)
}
}
@@ -0,0 +1,52 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.MoveToOwnerTask
import com.cobblemon.mod.common.util.asExpression
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class MoveToOwnerTaskConfig : SingleTaskConfig {
val condition: ExpressionOrEntityVariable = Either.left("true".asExpression())
var completionRange: ExpressionOrEntityVariable = Either.left("4.0".asExpression())
var speedMultiplier: ExpressionOrEntityVariable = Either.left("0.4".asExpression())
var teleportDistance: ExpressionOrEntityVariable = Either.left("24.0".asExpression())
var maxDistance: ExpressionOrEntityVariable = Either.left("14.0".asExpression())
override fun getVariables(entity: LivingEntity) = listOf(
condition,
completionRange,
speedMultiplier,
teleportDistance,
maxDistance
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
return WrapperLivingEntityTask(
MoveToOwnerTask.create(
condition = condition.asExpression(),
completionRange = completionRange.asExpression(),
speedMultiplier = speedMultiplier.asExpression(),
teleportDistance = teleportDistance.asExpression(),
maxDistance = maxDistance.asExpression()
),
PokemonEntity::class.java
)
}
}
@@ -11,6 +11,8 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
@@ -34,14 +36,16 @@ import net.minecraft.world.entity.ai.behavior.RunOne
class OneOfTaskConfig : SingleTaskConfig {
class OneOfTaskOption {
val weight: Int = 1
val task: TaskConfig = SingleTaskConfig { _, _ -> DoNothing(0, 1) }
val task: TaskConfig = SingleTaskConfig.nothing()
}
val condition: ExpressionLike = "true".asExpressionLike()
val options = mutableListOf<OneOfTaskOption>()
override fun getVariables(entity: LivingEntity) = options.flatMap { it.task.getVariables(entity) }
override fun createTask(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!runtime.resolveBoolean(condition)) return null
return RunOne(options.map { it.task.createTasks(entity, brainConfigurationContext).first() toDF it.weight })
}
@@ -11,6 +11,8 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
@@ -34,17 +36,19 @@ import net.minecraft.world.entity.ai.behavior.DoNothing
class RandomTaskConfig : TaskConfig {
class RandomTaskChoice {
val weight = 1.0
val task: TaskConfig = SingleTaskConfig { _, _ -> DoNothing(0, 1) }
val task: TaskConfig = SingleTaskConfig.nothing()
}
val condition: ExpressionLike = "true".asExpressionLike()
val choices = mutableListOf<RandomTaskChoice>()
override fun getVariables(entity: LivingEntity) = choices.flatMap { it.task.getVariables(entity) }
override fun createTasks(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): List<BehaviorControl<in LivingEntity>> {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!runtime.resolveBoolean(condition)) return emptyList()
val task = choices.weightedSelection { it.weight }?.task ?: throw IllegalStateException("No tasks to choose from in random_task config")
return task.createTasks(entity, brainConfigurationContext)
@@ -10,10 +10,10 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.value.DoubleValue
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.scripting.CobblemonScripts
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
@@ -31,7 +31,13 @@ import net.minecraft.world.entity.ai.memory.MemoryModuleType
* @since December 2nd, 2024
*/
class RunScript : SingleTaskConfig {
val script = cobblemonResource("dummy")
companion object {
const val SCRIPT_CATEGORY = "script"
}
val script = stringVariable(SCRIPT_CATEGORY, "script", "cobblemon:dummy_script").asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(script).asVariables()
override fun createTask(
entity: LivingEntity,
@@ -41,8 +47,8 @@ class RunScript : SingleTaskConfig {
it.registered(MemoryModuleType.LOOK_TARGET) // I think I need to have at least something here?
).apply(it) { _ ->
Trigger { world, entity, _ ->
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: entity.asMostSpecificMoLangValue())
return@Trigger CobblemonScripts.run(script, runtime) == DoubleValue.ONE
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
return@Trigger CobblemonScripts.run(script.resolveString().asIdentifierDefaultingNamespace(), runtime) == DoubleValue.ONE
}
}
}
@@ -0,0 +1,22 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
object SharedEntityVariables {
const val MOVEMENT_CATEGORY = "movement"
const val FEAR_CATEGORY = "fear"
const val ATTACKING_CATEGORY = "attacking"
const val BATTLING_CATEGORY = "battling"
const val LOOKING_CATEGORY = "looking"
const val WALK_SPEED = "walk_speed"
const val FLEE_SPEED_MULTIPLIER = "flee_speed_multiplier"
const val FLEE_DESIRED_DISTANCE = "flee_desired_distance"
const val SEE_DISTANCE = "see_distance"
}
@@ -9,10 +9,24 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.DoNothing
interface SingleTaskConfig : TaskConfig {
companion object {
fun nothing() = object : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
return DoNothing(0, 1)
}
}
}
fun interface SingleTaskConfig : TaskConfig {
override fun createTasks(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -8,31 +8,31 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.ai.StayAfloatTask
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveFloat
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class StayAfloatTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val chance: Expression = "0.01".asExpression()
val condition = booleanVariable(SharedEntityVariables.MOVEMENT_CATEGORY, "can_float", true).asExpressible()
val chance = numberVariable(SharedEntityVariables.MOVEMENT_CATEGORY, "float_chance", 0.8F).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
chance
).asVariables()
override fun createTask(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): BehaviorControl<LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
val chance = runtime.resolveFloat(chance)
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return WrapperLivingEntityTask(
StayAfloatTask(chance),
StayAfloatTask(chance.resolveFloat()),
PathfinderMob::class.java
)
}
@@ -8,26 +8,26 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.StopBeingAngryIfTargetDead
class StopBeingAngryIfAttackerDeadTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val condition = booleanVariable(SharedEntityVariables.ATTACKING_CATEGORY, "stop_being_angry_if_attacker_dead", true).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(condition).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return StopBeingAngryIfTargetDead.create()
}
}
@@ -10,11 +10,13 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
class SwitchFromActionEffectTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -10,11 +10,13 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
class SwitchFromChattingTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -9,12 +9,14 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
class SwitchFromFightTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -10,12 +10,14 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
class SwitchFromNPCBattleTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
class SwitchFromPokemonBattleTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
return BehaviorBuilder.create {
it.group(it.absent(CobblemonMemories.POKEMON_BATTLE)).apply(it) { _ ->
Trigger { level, entity, _ ->
entity.brain.updateActivityFromSchedule(level.dayTime, level.gameTime)
true
}
}
}
}
}
@@ -11,12 +11,14 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.CobblemonActivities
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
class SwitchToActionEffectTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -11,12 +11,14 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.CobblemonActivities
import com.cobblemon.mod.common.CobblemonMemories
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
class SwitchToChattingTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -8,11 +8,9 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.Difficulty
import net.minecraft.world.entity.LivingEntity
@@ -22,9 +20,10 @@ import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.schedule.Activity
class SwitchToFightTaskConfig : SingleTaskConfig {
val condition = "true".asExpressionLike()
val activity = Activity.FIGHT
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -33,8 +32,7 @@ class SwitchToFightTaskConfig : SingleTaskConfig {
it.present(MemoryModuleType.ATTACK_TARGET)
).apply(it) { _ ->
Trigger { world, entity, _ ->
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return@Trigger false
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (entity.commandSenderWorld.getCurrentDifficultyAt(entity.blockPosition()).difficulty == Difficulty.PEACEFUL) return@Trigger false
entity.brain.setActiveActivityIfPossible(activity)
@@ -9,11 +9,13 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.npc.ai.SwitchToBattleTask
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class SwitchToNPCBattleTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
@@ -9,27 +9,39 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.Behavior
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.schedule.Activity
class SwitchToPanicWhenHostilesNearbyTaskConfig : SingleTaskConfig {
var condition = "true".asExpression()
var condition = booleanVariable(SharedEntityVariables.FEAR_CATEGORY, "panic_when_hostiles_nearby", true).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(condition).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
) = BehaviorBuilder.create {
it.group(it.present(MemoryModuleType.NEAREST_HOSTILE))
.apply(it) { nearestHostile ->
Trigger { world, entity, _ ->
(entity as? PathfinderMob)?.navigation?.stop()
entity.brain.setActiveActivityIfPossible(Activity.PANIC)
return@Trigger true
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return BehaviorBuilder.create {
it.group(it.present(MemoryModuleType.NEAREST_HOSTILE))
.apply(it) { nearestHostile ->
Trigger { world, entity, _ ->
(entity as? PathfinderMob)?.navigation?.stop()
entity.brain.setActiveActivityIfPossible(Activity.PANIC)
return@Trigger true
}
}
}
}
}
}
@@ -8,11 +8,10 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
@@ -23,16 +22,21 @@ import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.schedule.Activity
class SwitchToPanicWhenHurtTaskConfig : SingleTaskConfig {
var condition = "true".asExpression()
var includePassiveDamage = false
var condition = booleanVariable(SharedEntityVariables.FEAR_CATEGORY, "panic_when_hurt", true).asExpressible()
var includePassiveDamage = booleanVariable(SharedEntityVariables.FEAR_CATEGORY, "panic_on_passive_damage", false).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
includePassiveDamage
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
return if (includePassiveDamage) {
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return if (includePassiveDamage.resolveBoolean()) {
BehaviorBuilder.create {
it.group(it.present(MemoryModuleType.HURT_BY))
.apply(it) { _ ->
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.npc.ai.SwitchToBattleTask
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class SwitchToPokemonBattleTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity> {
return SwitchToBattleTask.createForPokemon()
}
}
@@ -10,7 +10,18 @@ package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.runtime.MoLangRuntime
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.lang
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveDouble
import com.cobblemon.mod.common.util.resolveFloat
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.util.resolveString
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
@@ -23,11 +34,13 @@ import net.minecraft.world.entity.ai.behavior.BehaviorControl
* @author Hiroku
* @since October 14th, 2024
*/
fun interface TaskConfig {
interface TaskConfig {
companion object {
val types = mutableMapOf<String, Class<out TaskConfig>>(
"one_of" to OneOfTaskConfig::class.java,
"wander" to WanderTaskConfig::class.java,
"water_wander" to WaterWanderTaskConfig::class.java,
"air_wander" to AirWanderTaskConfig::class.java,
"look_at_target" to LookAtTargetTaskConfig::class.java,
"follow_walk_target" to FollowWalkTargetTaskConfig::class.java,
"random" to RandomTaskConfig::class.java,
@@ -39,6 +52,9 @@ fun interface TaskConfig {
"switch_npc_to_battle" to SwitchToNPCBattleTaskConfig::class.java,
"look_at_battling_pokemon" to LookAtBattlingPokemonTaskConfig::class.java,
"switch_npc_from_battle" to SwitchFromNPCBattleTaskConfig::class.java,
"switch_pokemon_to_battle" to SwitchToPokemonBattleTaskConfig::class.java,
"look_at_targeted_battle_pokemon" to LookAtTargetedBattlePokemonTaskConfig::class.java,
"switch_pokemon_from_battle" to SwitchFromPokemonBattleTaskConfig::class.java,
"go_to_healing_machine" to GoToHealingMachineTaskConfig::class.java,
"heal_using_healing_machine" to HealUsingHealingMachineTaskConfig::class.java,
"all_of" to AllOfTaskConfig::class.java,
@@ -60,6 +76,11 @@ fun interface TaskConfig {
"flee_nearest_hostile" to FleeNearestHostileTaskConfig::class.java,
"run_script" to RunScript::class.java,
"look_in_direction" to LookInDirectionTaskConfig::class.java,
"wake_up" to WakeUpTaskConfig::class.java,
"go_to_sleep" to GoToSleepTaskConfig::class.java,
"find_resting_place" to FindRestingPlaceTaskConfig::class.java,
"move_to_owner" to MoveToOwnerTaskConfig::class.java,
"move_to_item_and_eat" to MoveToItemAndEatTaskConfig::class.java,
)
val runtime = MoLangRuntime().setup()
@@ -68,6 +89,38 @@ fun interface TaskConfig {
val runtime: MoLangRuntime
get() = Companion.runtime
fun checkCondition(entity: LivingEntity, expressionOrEntityVariable: ExpressionOrEntityVariable): Boolean {
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
return expressionOrEntityVariable.resolveBoolean()
}
fun ExpressionOrEntityVariable.asExpression() = map({ it }, { "q.entity.config.${it.variableName}".asExpression() })
fun ExpressionOrEntityVariable.resolveString() = runtime.resolveString(asExpression())
fun ExpressionOrEntityVariable.resolveBoolean() = runtime.resolveBoolean(asExpression())
fun ExpressionOrEntityVariable.resolveInt() = runtime.resolveInt(asExpression())
fun ExpressionOrEntityVariable.resolveDouble() = runtime.resolveDouble(asExpression())
fun ExpressionOrEntityVariable.resolveFloat() = runtime.resolveFloat(asExpression())
private fun variable(category: String, name: String, type: MoLangConfigVariable.MoLangVariableType, default: String) = MoLangConfigVariable(
variableName = name,
category = lang("entity.variable.category.$category"),
displayName = lang("entity.variable.$name.name"),
description = lang("entity.variable.$name.desc"),
type = type,
defaultValue = default
)
fun stringVariable(category: String, name: String, default: String) = variable(category = category, name = name, type = MoLangConfigVariable.MoLangVariableType.TEXT, default = default)
fun numberVariable(category: String, name: String, default: Number) = variable(category = category, name = name, type = MoLangConfigVariable.MoLangVariableType.NUMBER, default = default.toString())
fun booleanVariable(category: String, name: String, default: Boolean) = variable(category = category, name = name, type = MoLangConfigVariable.MoLangVariableType.BOOLEAN, default = default.toString())
fun getVariableExpression(name: String) = "q.entity.config.$name".asExpression()
fun resolveStringVariable(name: String) = runtime.resolveString(getVariableExpression(name))
fun resolveBooleanVariable(name: String) = runtime.resolveBoolean(getVariableExpression(name))
fun resolveNumberVariable(name: String) = runtime.resolveDouble(getVariableExpression(name))
/** The variables that this task config uses. These are used to declare variables on the entity cleanly. */
fun getVariables(entity: LivingEntity): List<MoLangConfigVariable>
/** Given the entity in construction, returns a list of tasks. */
fun createTasks(entity: LivingEntity, brainConfigurationContext: BrainConfigurationContext): List<BehaviorControl<in LivingEntity>>
}
@@ -0,0 +1,27 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.WakeUpTask
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.behavior.BehaviorControl
class WakeUpTaskConfig : SingleTaskConfig {
override fun getVariables(entity: LivingEntity) = emptyList<MoLangConfigVariable>()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
return WrapperLivingEntityTask(WakeUpTask.create(), PokemonEntity::class.java)
}
}
@@ -8,23 +8,16 @@
package com.cobblemon.mod.common.api.ai.config.task
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.MoLangRuntime
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.resolveBoolean
import com.cobblemon.mod.common.util.resolveDouble
import com.cobblemon.mod.common.util.resolveFloat
import com.cobblemon.mod.common.util.resolveInt
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.withQueryValue
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.BlockPosTracker
import net.minecraft.world.entity.ai.behavior.RandomStroll
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
@@ -32,20 +25,31 @@ import net.minecraft.world.entity.ai.memory.WalkTarget
import net.minecraft.world.entity.ai.util.LandRandomPos
class WanderTaskConfig : SingleTaskConfig {
val condition: ExpressionLike = "true".asExpressionLike()
val shouldWander: ExpressionLike = "math.random(0, 20 * 8) <= 1".asExpressionLike()
val horizontalRange: Expression = "10".asExpression()
val verticalRange: Expression = "5".asExpression()
val speedMultiplier: Expression = "0.35".asExpression()
val completionRange: Expression = "1".asExpression()
val lookTargetYOffset: Expression = "1.5".asExpression()
companion object {
const val WANDER = "wander" // Category
}
val condition = booleanVariable(WANDER, "wanders", true).asExpressible()
val wanderChance = numberVariable(WANDER, "wander_chance", 1/(20 * 6F)).asExpressible()
val horizontalRange = numberVariable(WANDER, "horizontal_wander_range", 10).asExpressible()
val verticalRange = numberVariable(WANDER, "vertical_wander_range", 5).asExpressible()
val speedMultiplier = numberVariable(SharedEntityVariables.MOVEMENT_CATEGORY, SharedEntityVariables.WALK_SPEED, 0.35).asExpressible()
override fun getVariables(entity: LivingEntity) = listOf(
condition,
wanderChance,
horizontalRange,
verticalRange,
speedMultiplier
).asVariables()
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(condition)) return null
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return BehaviorBuilder.create {
it.group(
@@ -57,12 +61,13 @@ class WanderTaskConfig : SingleTaskConfig {
return@Trigger false
}
runtime.withQueryValue("entity", (entity as? PosableEntity)?.struct ?: QueryStruct(hashMapOf()))
if (!runtime.resolveBoolean(shouldWander)) return@Trigger false
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
val wanderChance = wanderChance.resolveFloat()
if (wanderChance <= 0 || world.random.nextFloat() > wanderChance) return@Trigger false
val targetVec = LandRandomPos.getPos(entity, runtime.resolveInt(horizontalRange), runtime.resolveInt(verticalRange)) ?: return@Trigger false
walkTarget.set(WalkTarget(targetVec, runtime.resolveFloat(speedMultiplier), runtime.resolveInt(completionRange)))
lookTarget.set(BlockPosTracker(targetVec.add(0.0, runtime.resolveDouble(lookTargetYOffset), 0.0)))
val targetVec = LandRandomPos.getPos(entity, horizontalRange.resolveInt(), verticalRange.resolveInt(), { 0.0 }) ?: return@Trigger false
walkTarget.set(WalkTarget(targetVec, speedMultiplier.resolveFloat(), 1))
lookTarget.set(BlockPosTracker(targetVec.add(0.0, entity.eyeHeight.toDouble(), 0.0)))
return@Trigger true
}
}
@@ -0,0 +1,70 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.ai.config.task
import com.cobblemon.mod.common.api.ai.BrainConfigurationContext
import com.cobblemon.mod.common.api.ai.ExpressionOrEntityVariable
import com.cobblemon.mod.common.api.ai.asVariables
import com.cobblemon.mod.common.api.ai.config.task.WanderTaskConfig.Companion.WANDER
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
import com.cobblemon.mod.common.util.asExpression
import com.cobblemon.mod.common.util.withQueryValue
import com.mojang.datafixers.util.Either
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.entity.ai.behavior.BehaviorControl
import net.minecraft.world.entity.ai.behavior.BehaviorUtils
import net.minecraft.world.entity.ai.behavior.BlockPosTracker
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import net.minecraft.world.entity.ai.memory.WalkTarget
class WaterWanderTaskConfig : SingleTaskConfig {
val condition = booleanVariable(WANDER, "water_wanders", true).asExpressible()
val wanderChance = numberVariable(WANDER, "water_wander_chance", 1/(20 * 3F)).asExpressible()
val speedMultiplier = numberVariable(SharedEntityVariables.MOVEMENT_CATEGORY, SharedEntityVariables.WALK_SPEED, 0.35).asExpressible()
val horizontalRange: ExpressionOrEntityVariable = Either.left("10.0".asExpression())
val verticalRange: ExpressionOrEntityVariable = Either.left("3.0".asExpression())
override fun getVariables(entity: LivingEntity): List<MoLangConfigVariable> {
return listOf(condition, wanderChance, speedMultiplier).asVariables()
}
override fun createTask(
entity: LivingEntity,
brainConfigurationContext: BrainConfigurationContext
): BehaviorControl<in LivingEntity>? {
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
if (!condition.resolveBoolean()) return null
return BehaviorBuilder.create {
it.group(
it.absent(MemoryModuleType.WALK_TARGET),
it.registered(MemoryModuleType.LOOK_TARGET)
).apply(it) { walkTarget, lookTarget ->
Trigger { world, entity, time ->
if (entity !is PathfinderMob || !entity.isInWater) {
return@Trigger false
}
runtime.withQueryValue("entity", entity.asMostSpecificMoLangValue())
val wanderChance = wanderChance.resolveFloat()
if (wanderChance <= 0 || world.random.nextFloat() > wanderChance) return@Trigger false
val target = BehaviorUtils.getRandomSwimmablePos(entity, horizontalRange.resolveInt(), verticalRange.resolveInt()) ?: return@Trigger false
walkTarget.set(WalkTarget(target, speedMultiplier.resolveFloat(), 1))
lookTarget.set(BlockPosTracker(target))
return@Trigger true
}
}
}
}
}
@@ -55,6 +55,7 @@ class ActiveDialogue(var playerEntity: ServerPlayer, var dialogueReference: Dial
)
dialogueReference.initializationAction.invoke(this)
setPage(currentPage)
if (!completion.isDone) {
val packet = DialogueOpenedPacket(this, true)
@@ -52,6 +52,6 @@ object DialogueManager {
fun stopDialogue(playerEntity: ServerPlayer) {
val activeDialogue = playerEntity.activeDialogue ?: return
DialogueClosedPacket(activeDialogue.dialogueId).sendToPlayer(playerEntity)
activeDialogues.remove(activeDialogue.dialogueId)
activeDialogues.remove(playerEntity.uuid)
}
}
@@ -8,6 +8,7 @@
package com.cobblemon.mod.common.api.drop
import com.cobblemon.mod.common.pokemon.Pokemon
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.LivingEntity
@@ -40,17 +41,23 @@ interface DropEntry {
* to be dropped.
*/
val percentage: Float
/**
* The drop's quantity when doing selection from the [DropTable]. See the drop table documentation for more on how
* this works.
*/
val quantity: Int
/**
* The maximum number of times the item can be selected drop the [DropTable]. In most cases this will just be 1,
* meaning that the item, once picked, cannot be picked again. A larger value will allow the same [DropEntry] from
* appearing multiple times in a drop action.
*/
val maxSelectableTimes: Int
/** Whether this is considered a possible drop at the moment or not */
fun canDrop(pokemon: Pokemon?): Boolean = true
/** The logic to use to actually drop the thing. */
fun drop(entity: LivingEntity?, world: ServerLevel, pos: Vec3, player: ServerPlayer?)
}
@@ -11,11 +11,13 @@ package com.cobblemon.mod.common.api.drop
import com.cobblemon.mod.common.api.events.CobblemonEvents.LOOT_DROPPED
import com.cobblemon.mod.common.api.events.drops.LootDroppedEvent
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.pokemon.Pokemon
import kotlin.random.Random
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
/**
@@ -45,9 +47,11 @@ class DropTable {
* Gets a drop list from this table as a list of [DropEntry]. You can specify the range of drop quantity totals
* that will be possible, or if you leave it blank it will use [DropTable.amount].
*/
fun getDrops(amount: IntRange = this.amount): List<DropEntry> {
fun getDrops(amount: IntRange = this.amount, pokemon: Pokemon? = null): List<DropEntry> {
val chosenAmount = amount.random()
val possibleDrops = entries.filter { it.quantity <= chosenAmount }.toMutableList()
val possibleDrops = entries.filter {
it.quantity <= chosenAmount && it.canDrop(pokemon)
}.toMutableList()
if (possibleDrops.isEmpty()) {
return emptyList()
@@ -87,11 +91,10 @@ class DropTable {
world: ServerLevel,
pos: Vec3,
player: ServerPlayer?,
amount: IntRange = this.amount
amount: IntRange = this.amount,
pokemon: Pokemon? = null,
) {
val drops = getDrops(amount).toMutableList()
val heldItem = (entity as PokemonEntity).pokemon.heldItemNoCopy()
if (!heldItem.isEmpty) entity.spawnAtLocation(heldItem.item)
val drops = getDrops(amount, pokemon).toMutableList()
LOOT_DROPPED.postThen(
event = LootDroppedEvent(this, player, entity, drops),
ifSucceeded = { it.drops.forEach { it.drop(entity, world, pos, player) } }
@@ -0,0 +1,18 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.drop
import com.cobblemon.mod.common.api.pokemon.evolution.requirement.EvolutionRequirement
import com.cobblemon.mod.common.pokemon.Pokemon
class EvolutionItemDropEntry : ItemDropEntry() {
val requirements: MutableSet<EvolutionRequirement> = mutableSetOf()
override fun canDrop(pokemon: Pokemon?): Boolean = pokemon != null && requirements.all { it.check(pokemon) }
}

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