Compare commits

...
2208 Commits
Author SHA1 Message Date
Licious 6dcee2b8f3 Port PokemonBehaviour to Codecs 2023-10-15 15:09:58 +01:00
Licious 224c3faa4c Port Evolution stuff to codecs, rework RegistryLikeCondition to accept any registry type without implementation need. 2023-10-15 14:06:17 +01:00
Licious c42a2a6933 Merge branch 'main' into custom-type-support
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonImplementation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/PokemonProperties.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/types/ElementalTypes.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/subscreen/BattleMoveSelection.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/resources/assets/cobblemon/showdown.zip
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/CobblemonForge.kt
2023-10-13 15:57:18 +01:00
Paul 072ad5ff12 Fixed Haban hitbox, fixed one weird Pomeg berry placement 2023-10-13 15:27:22 +10:00
Hiroku b3757113ac Merge branch 'pokemon-drops' into 'main'
Pokemon drops

Closes #552

See merge request cable-mc/cobblemon!678
2023-10-12 21:29:06 +00:00
Nick 3bb17ffc6e Merge branch 'pokemon-removing-fix' into 'main'
Fixes owned Pokemon not being removed, when they should.

See merge request cable-mc/cobblemon!682
2023-10-12 18:15:32 +00:00
Deltric f37924fb0c Fixes owned Pokemon not being removed, when they should. 2023-10-12 10:44:16 -05:00
Hiroku 6e2765902e Merge branch '1.4-Spawns' into 'main'
lAsT miNuTE Spawn edits.

See merge request cable-mc/cobblemon!681
2023-10-12 11:02:30 +00:00
tyzillion d7c32e4ad8 A few spawns updated. 2023-10-11 18:12:24 -04:00
tyzillion 8732094c28 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns
# Conflicts:
#	common/src/main/resources/data/cobblemon/spawn_detail_presets/shipwreck.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0025_pikachu.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0026_raichu.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0037_vulpix.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0038_ninetales.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0043_oddish.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0044_gloom.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0052_meowth.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0053_persian.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0058_growlithe.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0059_arcanine.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0063_abra.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0064_kadabra.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0065_alakazam.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0072_tentacool.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0073_tentacruel.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0077_ponyta.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0078_rapidash.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0083_farfetchd.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0088_grimer.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0089_muk.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0090_shellder.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0091_cloyster.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0092_gastly.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0096_drowzee.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0097_hypno.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0100_voltorb.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0101_electrode.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0102_exeggcute.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0103_exeggutor.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0109_koffing.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0110_weezing.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0113_chansey.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0116_horsea.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0117_seadra.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0122_mrmime.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0124_jynx.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0132_ditto.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0133_eevee.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0134_vaporeon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0135_jolteon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0136_flareon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0147_dratini.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0148_dragonair.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0149_dragonite.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0152_chikorita.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0153_bayleef.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0154_meganium.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0167_spinarak.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0168_ariados.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0170_chinchou.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0171_lanturn.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0177_natu.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0178_xatu.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0190_aipom.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0193_yanma.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0196_espeon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0197_umbreon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0209_snubbull.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0210_granbull.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0216_teddiursa.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0217_ursaring.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0230_kingdra.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0238_smoochum.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0241_miltank.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0242_blissey.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0261_poochyena.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0262_mightyena.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0278_wingull.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0279_pelipper.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0280_ralts.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0281_kirlia.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0282_gardevoir.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0283_surskit.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0284_masquerain.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0290_nincada.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0293_whismur.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0294_loudred.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0295_exploud.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0313_volbeat.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0314_illumise.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0343_baltoy.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0344_claydol.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0355_duskull.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0356_dusclops.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0366_clamperl.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0367_huntail.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0368_gorebyss.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0369_relicanth.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0374_beldum.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0375_metang.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0376_metagross.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0396_starly.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0397_staravia.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0398_staraptor.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0415_combee.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0416_vespiquen.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0424_ambipom.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0427_buneary.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0428_lopunny.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0439_mimejr.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0440_happiny.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0442_spiritomb.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0469_yanmega.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0470_leafeon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0471_glaceon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0475_gallade.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0477_dusknoir.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0506_lillipup.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0507_herdier.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0508_stoutland.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0519_pidove.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0520_tranquill.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0521_unfezant.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0532_timburr.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0533_gurdurr.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0534_conkeldurr.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0561_sigilyph.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0562_yamask.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0563_cofagrigus.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0622_golett.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0623_golurk.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0664_scatterbug.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0665_spewpa.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0666_vivillon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0679_honedge.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0681_aegislash.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0700_sylveon.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0742_cutiefly.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0743_ribombee.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0764_comfey.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0767_wimpod.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0768_golisopod.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0778_mimikyu.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0835_yamper.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0836_boltund.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0863_perrserker.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0868_milcery.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0869_alcremie.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0870_falinks.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0901_ursaluna.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0924_tandemaus.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0925_maushold.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0926_fidough.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0927_dachsbun.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0931_squawkabilly.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0935_charcadet.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0936_armarouge.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0937_ceruledge.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0942_maschiff.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0943_mabosstiff.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0944_shroodle.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0945_grafaiai.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0974_cetoddle.json
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0975_cetitan.json
#	common/src/main/resources/data/cobblemon/species/generation6/spewpa.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_beach.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_cold.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_cold_ocean.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_deep.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_desert.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_frozen.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_jungle.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_lush.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_mountain.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_mushroom.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_nether_basalt.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_nether_crimson.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_nether_fungus.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_nether_quartz.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_nether_soul_sand.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_nether_wasteland.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_ocean.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_peak.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_plains.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_plateau.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_spooky.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_spring.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_swamp.json
#	common/src/main/resources/data/cobblemon/tags/worldgen/biome/is_taiga.json
2023-10-11 18:05:10 -04:00
Hiroku 38fecf337e Merge branch 'implement_pokemon' into 'main'
Last minute Pokemon fixes and updates.

See merge request cable-mc/cobblemon!679
2023-10-11 20:44:18 +00:00
tyzillion 3c7c640217 Last minute changes? More like last minute bugs. Amiright? 2023-10-10 23:58:38 -04:00
tyzillion b7e8cad3bd Fixed Pokemon not playing faint animations if fainted while asleep. Also fixed Alolan Raichu T-posing while battling. 2023-10-10 21:34:59 -04:00
tyzillion d553332017 Fixed Icy snow and High plains Vivillon not spawning as Meadow. Also fixed Spewpa evolving into Meadow instead of Icy and High Plains. Updated Alolan Exeggutor model, animations, and texture. Updated Boltund animation, updated Raticate models and animations. Added Stufful and Bewears shiny textures. 2023-10-10 20:46:14 -04:00
Lily 03b0bb9937 a bunch of missed pokemon drops 2023-10-10 18:23:58 +00:00
Lily 51a3d686ff gen 6 drops done 2023-10-10 15:47:42 +00:00
Lily 267c14cdd5 and here's 14 more because my IDE broke again somehow 2023-10-10 15:45:39 +00:00
Lily c9367f63b4 only 6 pokemon drops because my IDE broke and i dont wanna lose these 2023-10-10 15:30:15 +00:00
Lily 48f8561662 fixed typos 2023-10-10 14:44:16 +00:00
Lily 951a36f82e gen 9 drops 2023-10-10 14:22:51 +00:00
Lily e9edd7a1e9 gen 8 drops 2023-10-10 13:52:18 +00:00
Paul cb407bb649 Convenience dataTracker function [skip-ci] 2023-10-09 16:59:00 +10:00
Hiroku 5e28612d99 Actually the dip should probably still max at 1 2023-10-09 06:07:23 +00:00
Hiroku ea007d21db Fixed braised vivichokes and vivichoke dip not stacking, closes #560 2023-10-09 06:05:09 +00:00
Paul dc1a035dae Merge remote-tracking branch 'origin/main' into 1.4-fixes-5 2023-10-09 15:12:49 +10:00
Hiroku 71db46d86b Merge branch '1.4-Spawn-Fixes' into 'main'
1.4 spawn fixes

See merge request cable-mc/cobblemon!677
2023-10-09 05:12:13 +00:00
Paul a61b71205b Struck down by licenses again 2023-10-09 14:36:42 +10:00
Paul 63b14aa4ba Fixed pokemon selection GUIs not showing aspects, closes #547 2023-10-09 11:12:42 +10:00
Hiroku fb23e3961c Merge branch '1.4-fixes-4' into 'main'
Fixed animation stacking with cries and battle animations that made Typhlosion horrifying

See merge request cable-mc/cobblemon!675
2023-10-09 00:55:23 +00:00
Paul bdf9606d61 Fixed pasture click sounds not playing / playing when they shouldn't, fixes #404 2023-10-09 10:55:07 +10:00
Paul bf5b03398c Fix fakemon breaking PCs when the addon is removed 2023-10-09 10:41:16 +10:00
Hiroku 3a824b1971 Merge branch 'mongdb-datastore' into 'main'
Implemented MongoDB support for new PlayerData props.

See merge request cable-mc/cobblemon!674
2023-10-09 00:34:44 +00:00
Paul 0bbecc5951 Fixed Ninjask T-posing in battle, closes #555 2023-10-09 10:10:23 +10:00
Paul c60fb253cd Fixed no-fallback texture situations causing crashing, closes #557 2023-10-09 09:59:18 +10:00
navneetset 34240a101a Fixed paddlin' 2023-10-09 01:58:24 +02:00
Paul c6a4db47f4 Fixed animation stacking with cries and battle animations that made Typhlosion horrifying 2023-10-09 09:33:22 +10:00
Hiroku ac2dbde41e Merge branch '1.4-fixes-3' into 'main'
1.4 fixes 3

See merge request cable-mc/cobblemon!673
2023-10-08 23:20:06 +00:00
navneetset b8d19b3c4c Added support for new additional PlayerData props. 2023-10-09 01:10:17 +02:00
Paul 747aedca27 Fixed battle tile animations having the zoomies in Forge 2023-10-09 08:45:10 +10:00
Paul 9540bc9394 Fixed Forewarn message being silly 2023-10-09 08:44:59 +10:00
miasmus a7fed0d042 gen 5 drops, edits for consistency 2023-10-08 18:38:57 -04:00
Paul aedb0755f9 Added sleeping to Mareep line 2023-10-09 08:19:37 +10:00
Paul 23eb10f5ea Fixed sleeping pokemon in the wild never waking up 2023-10-09 08:19:28 +10:00
Paul 2c134c5e1b More shoulder effect backcompat (slow falling) 2023-10-09 07:05:40 +10:00
Paul f7f70f14bc Spawning JSON syntax fixes 2023-10-09 06:22:02 +10:00
Paul d3834b0bb7 Merge remote-tracking branch 'origin/main' into 1.4-Spawn-Fixes 2023-10-09 06:04:37 +10:00
Veraxiel 2033240b83 Added missing evo moves for gen 9 and some starters. 2023-10-08 15:49:49 -04:00
Veraxiel 1400505757 Made changes to spawn files, presets, tags, and loot tables. 2023-10-08 14:35:56 -04:00
Licious 40af1f0bdf More stuff n things. 2023-10-08 18:36:37 +01:00
miasmus 9da0459793 its not bonemeal its bone_meal silly 2023-10-07 20:20:16 -04:00
miasmus 7ac41e2f68 rearrange some json to be more consistent (gen 4) 2023-10-07 20:14:39 -04:00
miasmus e0cdc08cd3 gen 4 drops 2023-10-07 20:14:20 -04:00
Hiroku 438e502a5a Merge branch 'mongdb-datastore' into 'main'
Added MongoDB datastore piggybacking off JSON store. Fixed package typo.

See merge request cable-mc/cobblemon!601
2023-10-08 00:02:00 +00:00
navneetset d7b344cff8 Added to changelog. 2023-10-08 01:47:43 +02:00
Pebbles 249c305474 Merge branch 'main' into 'mongdb-datastore'
# Conflicts:
#   common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
2023-10-07 23:16:29 +00:00
Lily 5b6ed359a3 gen 1, 2, 3, and 7 drops (i spent 4 hours on this :3) 2023-10-07 18:59:12 -04:00
Hiroku d14e16fe5b Merge branch 'battle-builder-fix' into 'main'
Missing returns for SuccessfulBattleStart

See merge request cable-mc/cobblemon!672
2023-10-07 22:45:42 +00:00
Deltric 65dd132081 Missing returns for SuccessfulBattleStart 2023-10-07 17:24:45 -05:00
Hiroku 7f8b241695 Merge branch 'shoulder-back-arm-leg-compat' into 'main'
Added light backwards compatibility for shoulder mount effects

See merge request cable-mc/cobblemon!671
2023-10-07 12:20:54 +00:00
Paul 0b824fe4c1 Added light backwards compatibility for shoulder mount effects 2023-10-07 21:23:02 +10:00
Hiroku c9fc2ce95d Merge branch 'datapack-fix' into 'main'
Switched to findAllResources instead of findResources

See merge request cable-mc/cobblemon!667
2023-10-07 10:56:21 +00:00
Deltric 91eff015dc Ordered loading alphabetically 2023-10-07 04:03:13 -05:00
Deltric a9c8825b3c Forgot to change method parameters 2023-10-07 03:06:42 -05:00
Hiroku 9d64b0f06a Merge branch 'untradeable-rework' into 'main'
Untradeable rework

See merge request cable-mc/cobblemon!669
2023-10-07 04:10:53 +00:00
Deltric 2b3c2358a5 Merge remote-tracking branch 'origin/datapack-fix' into datapack-fix 2023-10-06 22:11:00 -05:00
Deltric a84a2aac58 Progress on resource fix 2023-10-06 22:10:51 -05:00
Deltric fe86d644ad Switched to findAllResources instead of findResources 2023-10-06 22:10:51 -05:00
Deltric 9eb8d5e832 Progress on resource fix 2023-10-06 22:10:07 -05:00
Hiroku 5d2e877176 Merge branch 'berry-with-flywheel' into 'main'
Make berries render with flywheel, improve perf 100x

Closes #444

See merge request cable-mc/cobblemon!665
2023-10-07 03:08:28 +00:00
apion b2b08ac098 Rollback apricorn plank model change (but fr this time) 2023-10-06 22:08:19 -04:00
Lily ae8e4a4f3a gen 1 drops updated 2023-10-06 22:03:52 -04:00
apion e5f0911b83 Rollback apricorn plank model change 2023-10-06 21:52:29 -04:00
Paul e1ae600419 Properly implemented tradeable property in trade GUI 2023-10-07 11:13:59 +10:00
Paul 34315d9f1d Added a bunch of license files 2023-10-07 09:32:58 +10:00
Paul 773cef8e46 Forgot sprout texture 2023-10-07 09:32:25 +10:00
Paul 282a15b1b2 Updated Touga, Coba, Kelpsy, flower, and sprout assets 2023-10-07 09:30:48 +10:00
Hiroku 3b17ad4f54 Merge branch 'leaf-me-alone' into 'main'
Apricorn Leaf Update

See merge request cable-mc/cobblemon!668
2023-10-06 06:57:17 +00:00
dhi_holo 04c5b698c2 New colour, who this?
All the leaves are different again
2023-10-06 16:55:39 +10:00
Paul 123029199c Fixed UV rotations not being applied to berry models 2023-10-06 16:05:38 +10:00
Deltric 8f70bd5eaf Switched to findAllResources instead of findResources 2023-10-06 00:57:55 -05:00
Hiroku 24310d5144 Merge branch 'mulch-fix' into 'main'
Modified mulch code

Closes #550

See merge request cable-mc/cobblemon!666
2023-10-06 03:04:02 +00:00
Deltric b4b5d62632 Modified mulch code 2023-10-05 21:22:36 -05:00
apion d550d775a6 Fix dependency notation for flywheel 2023-10-05 22:05:01 -04:00
apion e572584dbf Remove render caching stuff from BerryBlockEntities 2023-10-05 22:02:03 -04:00
apion 6ac58cf7c2 Added fallback to vanilla renderer 2023-10-05 21:56:04 -04:00
apion e8a1e66658 Merge branch 'main' into berry-with-flywheel 2023-10-05 21:44:55 -04:00
apion 9c67d0ad6f Fixed forge build 2023-10-05 21:42:00 -04:00
apion 0747d08a90 Forge build not working, pushing to compare 2023-10-05 21:17:11 -04:00
apion 299ab3d5f7 Merge branch 'main' into berry-with-flywheel 2023-10-05 21:05:32 -04:00
Hiroku 7e0f48ea54 Merge branch 'main' into 'main'
Update aspects when applying PokemonProperties to a Pokemon or PokemonEntity

See merge request cable-mc/cobblemon!655
2023-10-05 21:06:06 +00:00
Xander Forrest 49a5090903 Merge branch cobblemon:main into main 2023-10-05 17:55:12 +00:00
Xander Forrest 7e0e55d126 Undo setting FormData changes on PokemonProperties 2023-10-05 17:13:10 +01:00
Hiroku f3fa765890 Merge branch 'fix-double-dipping' into 'main'
Items are double consumed

See merge request cable-mc/cobblemon!658
2023-10-05 09:08:31 +00:00
Hiroku a9a91a813a Merge branch 'nickname-fix' into 'main'
Fix nickname updates not applying when returning to species name.

See merge request cable-mc/cobblemon!662
2023-10-05 09:06:27 +00:00
Hiroku 579e48f93c Merge branch 'implement_pokemon' into 'main'
Some more minor fixes for Pokemon.

See merge request cable-mc/cobblemon!661
2023-10-05 09:01:41 +00:00
Hiroku e8520953f6 Merge branch 'sound' into 'main'
Updated the Healing Machine sound

See merge request cable-mc/cobblemon!663
2023-10-05 08:49:06 +00:00
apion 47deb6504b Get flywheel packaged into the fabric built jar, fix some create conflicts 2023-10-04 19:21:58 -04:00
Sterrezo cd0f95169a Merge branch 'main' into sound 2023-10-04 23:58:56 +02:00
Sterrezo a23b37ee47 Updated the Healing Machine sound 2023-10-04 23:57:10 +02:00
Pebbles 370d65284d Merge branch 'main' into 'mongdb-datastore'
# Conflicts:
#   common/src/main/kotlin/com/cobblemon/mod/common/api/storage/factory/FileBackedPokemonStoreFactory.kt
2023-10-04 14:10:01 +00:00
Deltric e2b2ee9031 Remove ignore case from check 2023-10-03 21:04:48 -05:00
Deltric 141b38b81c Fix nickname updates not applying when returning to species name. 2023-10-03 20:59:41 -05:00
Lily f41c2aa0c1 fixed 5 billion typos 2023-10-03 18:46:59 -04:00
tyzillion 87fffe67f5 Made Frogadiers cry not loop, fixed Patrat and Watchog emissives. Fixed Phantumps shiny emissive AGAIN, and fixed shiny phantump texture. 2023-10-03 17:18:42 -04:00
tyzillion 7a13a5a4d1 Updated Garchomp animation tweaks, updated Nidoking texture, updated Nidorino model and animations, Removed Blazing and Ender variants from Vivillon. 2023-10-03 16:58:02 -04:00
Lily 9efc3f1eef gen 8 drops 2023-10-03 18:47:53 +00:00
Lily 8188cabb4f gen 7 drops 2023-10-03 18:23:14 +00:00
Lily b545e01aef gen 6 drops 2023-10-03 18:01:54 +00:00
Lily c34a09430a gen 5 drops 2023-10-03 17:39:38 +00:00
Lily 403acf5822 gen 4 drops 2023-10-03 16:49:30 +00:00
Lily d53c17bc8e gen 3 drops 2023-10-03 15:00:24 +00:00
Lily 7bc9778ce3 gen 2 drops 2023-10-03 14:20:07 +00:00
Paul 57687ffcdb Fixed wild Pokémon not sleeping in the wild 2023-10-03 20:59:51 +10:00
Paul d40e2706c0 Merge remote-tracking branch 'origin/main' 2023-10-03 20:32:50 +10:00
Paul abecc6c74d Fixed light in spawning not being a very good condition at all 2023-10-03 20:32:38 +10:00
Hiroku 709b933661 Merge branch 'store_bug' into 'main'
Fixes an error in the Pokémon list in the BottomlessStore

See merge request cable-mc/cobblemon!659
2023-10-03 10:13:25 +00:00
Hiroku d426d6e843 Merge branch 'untinted-glasses' into 'main'
Updates the Apricorns

See merge request cable-mc/cobblemon!660
2023-10-03 07:31:06 +00:00
dhi_holo 234acf0787 consistency patch
makes stripped and unstripped logs have the same top
2023-10-03 14:37:33 +10:00
dhi_holo b4b0bed36c correction
wrong files lmao
2023-10-03 14:28:03 +10:00
dhi_holo 65f0bfdcd9 Update CobblemonClient.kt
knew I'd miss some random thing about leaf tinting, damn you line 96
2023-10-03 14:19:50 +10:00
dhi_holo f598af314a Fitting In
All the Apricorn Items (plus the Sprout blocks) now have fitting leaves

I also finally fixed the log textures not being updated 🗡️
2023-10-03 14:12:37 +10:00
dhi_holo cef14e938f Updates the Leaves
Leaves now no longer use tinting (commented out the code incase we need to roll it back eventually)
2023-10-03 13:32:53 +10:00
Pedro Souza f53cd87081 Fixed BottomlessStore 2023-10-03 00:26:36 -03:00
Deltric bfc820808f Items are double consumed 2023-10-02 04:20:57 -05:00
Hiroku 57a34e490d Merge branch 'new-tag-syncing' into 'main'
Unbattleable and Hide label spawn packet

See merge request cable-mc/cobblemon!657
2023-10-02 08:10:15 +00:00
Deltric e817496f7e Unbattleable and Hide label spawn packet 2023-10-02 02:47:03 -05:00
Paul 8aea2d5b74 Tweaks to relative berry growth speeds 2023-10-02 15:59:03 +10:00
Paul 47213c3ae4 Fixed growth mulch oops 2023-10-02 15:50:13 +10:00
Hiroku d70fbe70d2 Merge branch 'pd-extension-safety' into 'main'
PD Extension Load Safety

See merge request cable-mc/cobblemon!656
2023-10-02 03:09:48 +00:00
Deltric 3768d4278e Increase Mint grow chance x5 2023-10-01 20:05:15 -05:00
Xander Forrest 6283a0bee0 Merge remote-tracking branch 'origin/main' 2023-10-01 15:48:15 +01:00
Xander Forrest 43a24a9c98 Instead of just setting FormData field on a Pokemon when applying PokemonProperties, apply each aspect of that new Form Data.
When updating the form, get the current form, and remove those aspects first. If not, you can not switch a regional formed Pokemon "back to normal", because there is no "normal" aspect, "normal" form is just the default if the other Form's aspects aren't present.
2023-10-01 15:48:03 +01:00
Xander Forrest d8b401aee0 Merge branch cobblemon:main into main 2023-10-01 14:46:31 +00:00
Hiroku f64e919bf2 Merge branch 'no-more-advancement-for-you' into 'main'
Do more complicated check for level up trigger

Closes #536

See merge request cable-mc/cobblemon!653
2023-10-01 10:07:18 +00:00
Hiroku a727c099ae Slowed mints back down again, just a bit 2023-10-01 04:40:43 +00:00
Hiroku e4ae8fe6dd Merge branch 'rest-fix' into 'main'
fix rest move not updating client-side hp

Closes #539

See merge request cable-mc/cobblemon!654
2023-09-30 22:33:33 +00:00
Xander Forrest c46ab35af0 Update aspects when applying PokemonProperties to a Pokemon or PokemonEntity 2023-09-30 22:50:51 +01:00
miasmus 25bfdb3aa2 fix rest move not updating client-side hp 2023-09-30 17:14:52 -04:00
MoeBoy76 7d5b0c9648 increased complication of level up trigger to fix #536 2023-10-01 07:52:45 +11:00
Hiroku 2ccf49e65c Made mints ~10% rarer in each band 2023-09-30 20:11:37 +00:00
Licious bc12466e09 Merge branch 'more-1.4-fixes' into 'main'
Various bug fixes

Closes #507, #534, #504, #505, and #503

See merge request cable-mc/cobblemon!650
2023-09-30 19:54:55 +00:00
Hiroku 7d03f5f780 Faster mint growth 2023-09-30 05:45:53 +00:00
Hiroku 2eb23f0707 Merge branch 'pp-to-the-max' into 'main'
Update pp_max.json

See merge request cable-mc/cobblemon!651
2023-09-30 04:07:32 +00:00
dhi_holo cbe7626bdc Update pp_max.json
Changes the required berry to Hopo
2023-09-30 14:03:52 +10:00
Paul f83b10643c Added attack knockback attribute to Pokémon, closes #503 2023-09-30 13:23:53 +10:00
Paul 40be5a2060 Fixed most of the berry mulches not working, closes #505 2023-09-30 13:15:37 +10:00
Paul 2b26576a1c Fixed mutations not working woops, closes #504 2023-09-30 12:52:33 +10:00
Paul 48d6f7f707 Fixed pasture block drops and Pokémon not despawning from pastures under regular block break situations, closes #534 2023-09-30 12:29:03 +10:00
Paul ea6bf1fcd1 Make berries take a sec to break instead of being instant 2023-09-30 12:27:27 +10:00
Paul e0ab5e60d0 Fixed pasture and PC drop behaviour 2023-09-30 12:21:42 +10:00
Paul 3d4e941af2 Fixed errors when partying pastured Pokémon 2023-09-30 12:15:52 +10:00
Paul 6aa359d7cc Merge remote-tracking branch 'origin/main' 2023-09-30 10:58:13 +10:00
Hiroku 646fc606d6 Merge branch 'increase-mint-growth' into 'main'
Increase Mint grow chance x5

See merge request cable-mc/cobblemon!649
2023-09-30 00:42:19 +00:00
Deltric 37e9823fe0 Increase Mint grow chance x5 2023-09-29 19:41:17 -05:00
Paul 9cd24e76d2 Fixed party lock relating to switching in PvP battles, closes #507 2023-09-30 09:45:18 +10:00
Paul fb52c1badd Merge remote-tracking branch 'origin/main' 2023-09-30 08:55:42 +10:00
Paul 24126e582b Many crop rarity tweeks 2023-09-30 08:55:28 +10:00
Veraxiel a08ca9c8eb Update apricorns_normal.json 2023-09-29 22:38:21 +00:00
Hiroku 896198eca2 Merge branch 'implement_pokemon' into 'main'
Minor fixes to oversights on Pokemon

Closes #496

See merge request cable-mc/cobblemon!648
2023-09-29 21:44:36 +00:00
tyzillion 38a20c76a1 Made Gallades battle quirk more frequent. Added Garchomps battle idle. Added Floragato's battle cry. 2023-09-29 17:03:33 -04:00
tyzillion 7ac80cb716 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/animations/0497_serperior/serperior.animation.json
#	common/src/main/resources/assets/cobblemon/sounds/pokemon/cofagrigus/cofagrigus_cry.ogg
#	common/src/main/resources/assets/cobblemon/sounds/pokemon/yamask/yamask_cry.ogg
2023-09-29 16:35:24 -04:00
Sterrezo 2a83af5626 Updated audio assets, fixed Serperior missing a cry, fixed Floragato's sound keyframe, changed Gallade's cry to include the quirk 2023-09-29 10:23:50 +02:00
Hiroku 7cc8fd8201 Merge branch 'pasture-block-fixes' into 'main'
Pastured Pokémon fixes

Closes #522 and #520

See merge request cable-mc/cobblemon!646
2023-09-29 07:05:48 +00:00
Deltric 901de0031c Pastured Pokémon fixes 2023-09-29 00:46:21 -05:00
Paul f762ba7425 Fixed healing moves looking like they fully heal opponent Pokémon, closes #528 2023-09-29 14:36:21 +10:00
Hiroku f5b92c11a0 Merge branch 'mint-altitude-tweaks' into 'main'
Altitude placement for mints

See merge request cable-mc/cobblemon!645
2023-09-29 04:16:57 +00:00
Deltric ecc5143ae6 Altitude placement for mints 2023-09-28 22:57:36 -05:00
Hiroku c6a7dcde33 Merge branch 'pokemon-json-fix' into 'main'
Json safety checks for Pokemon loadFromJson

See merge request cable-mc/cobblemon!643
2023-09-29 01:50:03 +00:00
Hiroku 7821801c83 Merge branch '1.4-fixes' into 'main'
1.4 fixes

Closes #525, #521, #514, #518, and #511

See merge request cable-mc/cobblemon!642
2023-09-29 01:30:59 +00:00
Deltric 85f8f971da Json safety checks for Pokemon loadFromJson 2023-09-28 20:28:28 -05:00
Paul 2808e52873 Merge remote-tracking branch 'origin/1.4-fixes' into 1.4-fixes 2023-09-29 10:53:48 +10:00
Paul 69f8d4a306 Tweaked medicinal leek rarity, relates to #513 2023-09-29 10:52:39 +10:00
Paul e7351af2a8 Tweaked sparse berry rarity, relates to #512 2023-09-29 10:50:07 +10:00
Paul 7ad5ee633d Tweaked big root rarity and depth, relates to #510 2023-09-29 10:49:25 +10:00
Paul 742c4c8087 Fixed berries not having the correct generation weights, closes #511 2023-09-29 10:48:11 +10:00
Paul ae41d4ac58 Fixed Forge pasture block issues wherever pasture blocks are near the world center, closes #518 2023-09-29 10:21:53 +10:00
Paul 3f4086fc90 Fixed only one store saving on disconnect, closes #514 2023-09-29 10:08:38 +10:00
Paul 9e993df788 Moved brewing stand mixin to common to fix it not working on servers, closes #521 2023-09-29 08:10:00 +10:00
Paul a389c21b25 Fixed shoulder-mount icon displaying even for non-shoulder-mountable Pokémon, closes #525 2023-09-29 07:59:57 +10:00
Hiroku b20be79ce6 Merge branch 'json-changes' into 'main'
Recipe changes and some spawn fixes

Closes #524

See merge request cable-mc/cobblemon!641
2023-09-28 08:46:22 +00:00
dhi_holoandHiroku 9b05db6c5f Recipe changes and some spawn fixes 2023-09-28 08:46:22 +00:00
Nick f7de61ce71 Merge branch 'tyzillion-main-patch-53704' into 'main'
Update 0_phantump_base.json

See merge request cable-mc/cobblemon!640
2023-09-27 22:10:00 +00:00
Tyzillion 9811390573 Update 0_phantump_base.json 2023-09-27 21:49:51 +00:00
Nick 11e7d193fb Merge branch 'arclight-incompat-fix' into 'main'
Fix Arclight incompat

See merge request cable-mc/cobblemon!639
2023-09-27 00:12:05 +00:00
Neovitalism 3e2788b789 Fix Arclight incompat 2023-09-26 19:31:20 -04:00
Hiroku bda999e1fd Merge branch 'small-changelog-fix' into 'main'
Update CHANGELOG.md - fixed typos and added two missing pokemon

See merge request cable-mc/cobblemon!638
2023-09-26 20:21:42 +00:00
Lily e249a96749 Update CHANGELOG.md - fixed typos and added two missing pokemon 2023-09-26 14:38:42 +00:00
Paul 2078108ea7 Fixed aspear berry behaving weirdly when harvested from above 2023-09-26 18:23:25 +10:00
Hiroku ddb24e9621 Merge branch '1.4-Spawns' into 'main'
Updated spawn files.

See merge request cable-mc/cobblemon!633
2023-09-26 08:08:03 +00:00
TyzillionandHiroku b07795e547 Updated spawn files. 2023-09-26 08:08:03 +00:00
miasmus 7e63cd9c1d adds drops for sneasels, fixes #496 2023-09-25 19:32:09 -04:00
Nick 8680f2ade0 Merge branch 'implement_pokemon' into 'main'
Final merge on Pokémon Implementation for 1.4!

See merge request cable-mc/cobblemon!637
2023-09-25 17:33:41 +00:00
TyzillionandNick 5679d4dc05 Final merge on Pokémon Implementation for 1.4! 2023-09-25 17:33:41 +00:00
tyzillion 980c0d4c37 Made Gallade's battle quirk not overlay on battle idle. 2023-09-25 09:24:36 -04:00
tyzillion 50f1abd47e Adjusted Sprigatito ui frames and fixed Oinkologne's gender differences not working. 2023-09-24 13:05:38 -04:00
Licious bb8dffdf50 More work towards species. 2023-09-24 11:08:41 +01:00
tyzillion a555ac8e6d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-23 23:57:13 -04:00
Veraxiel 96d2b322a3 Update is_dense.json 2023-09-24 03:04:30 +00:00
Veraxiel 7bae99468b Update is_sparse.json 2023-09-24 03:04:26 +00:00
Veraxiel 8b99cfe98d Update is_dense.json 2023-09-24 01:52:15 +00:00
Veraxiel ac6eb38152 Update is_sparse.json 2023-09-24 01:52:12 +00:00
Paul 1621910428 Merge remote-tracking branch 'origin/main' 2023-09-24 11:45:50 +10:00
Paul b74037afb6 Fixed incompatibility crash with Pixelmon Reforged 2023-09-24 11:45:39 +10:00
Veraxiel 753bfa6936 Update is_sparse.json 2023-09-24 01:32:55 +00:00
Hiroku 53d575b1c4 Merge branch 'some-api-utilities' into 'main'
Add some API utilities

See merge request cable-mc/cobblemon!636
2023-09-23 23:57:48 +00:00
Paul 97e90a87c1 Rework density tags to be sparse and dense 2023-09-24 09:13:14 +10:00
Neovitalism a72525cf65 Add some API utilities 2023-09-23 18:38:06 -04:00
Paul 07e487e0cd Further further rarity tweaking for berries 2023-09-23 21:07:38 +10:00
Hiroku bcf3fe1dc6 Merge branch 'battle-advancer' into 'main'
Battle Victory Advancement fix and tweaks

Closes #470

See merge request cable-mc/cobblemon!635
2023-09-23 08:01:16 +00:00
MoeBoy76andHiroku 8d5d567153 Battle Victory Advancement fix and tweaks 2023-09-23 08:01:15 +00:00
Paul 0643bc8d58 Merge remote-tracking branch 'origin/main' 2023-09-23 13:29:06 +10:00
Paul 1c6633bfdc Further rarity tweaking for berries 2023-09-23 13:28:52 +10:00
Hiroku f876c5f6c8 Merge branch 'persistence-and-extra-flags' into 'main'
Implement persistence on Pokemon and flags for hide label and unbattleable.

See merge request cable-mc/cobblemon!634
2023-09-23 03:19:40 +00:00
Licious 952fdd8541 Add SpeciesForm 2023-09-22 23:22:00 +01:00
Licious c30789cea4 Bye bye species male ratio. 2023-09-22 23:08:37 +01:00
Licious 0ada2265ff Spacing annoyed me 2023-09-22 23:08:02 +01:00
Licious 9aacff4051 Add GenderSelector 2023-09-22 23:04:56 +01:00
Licious 3b72b558f6 StatMap & EvMap 2023-09-22 22:40:48 +01:00
Licious ba0d7299ef Bunch of random stuff, this is no longer just custom types. 2023-09-22 21:18:33 +01:00
Deltric 99744af491 Implement persistence on Pokemon and flags for hide label and unbattleable. 2023-09-21 21:06:51 -05:00
Paul 9f2a4261f0 Fixed jump keyframes using smooth interpolation 2023-09-22 11:07:26 +10:00
Paul 1b6b0524e8 Merge remote-tracking branch 'origin/main' into implement_pokemon 2023-09-22 10:39:49 +10:00
Paul 5f740b1c58 Merge branch 'main' into berry-with-flywheel
# Conflicts:
#	gradle/libs.versions.yml
2023-09-22 10:07:53 +10:00
Paul 0cd79c6c8f Updated fabric-api to 0.89.0 2023-09-22 10:07:27 +10:00
tyzillion f5e492a6ce Fixed Diggersby UI's, Fixed Sprigatito shiny, Make Boltunds cry not loop, and Made Pidgeotto's look animation us neck. 2023-09-21 19:45:13 -04:00
tyzillion c8c1677182 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-21 17:23:57 -04:00
tyzillion 8431e25c31 Fixed error that caused build to fail. 2023-09-21 17:02:37 -04:00
tyzillion 121f7c6a9a Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns 2023-09-21 17:02:19 -04:00
Hiroku 37f508793d Merge branch 'sound' into 'main'
Probably final iteration of Pokeball sounds

See merge request cable-mc/cobblemon!632
2023-09-21 20:01:53 +00:00
SterrezoandHiroku 5807e4526e Probably final iteration of Pokeball sounds 2023-09-21 20:01:53 +00:00
Licious 63a42edb7f Merge branch 'more-crop-gen-fixes' into 'main'
Many crop fixes

Closes #476, #494, and #495

See merge request cable-mc/cobblemon!629
2023-09-21 19:43:23 +00:00
tyzillion c523408fe0 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns 2023-09-21 14:32:30 -04:00
Licious f0ef34f435 Fix loading of type data. 2023-09-21 17:09:55 +01:00
Licious 646ed14146 Implement Forge custom registry creation. 2023-09-21 15:55:10 +01:00
Licious e8d8499462 Update outdated data format on type assets. 2023-09-21 14:03:52 +01:00
Licious 7656d1e0d8 Boy that's a lot of work 2023-09-21 13:59:28 +01:00
Paul 7baf8e079d Improve medicinal leek anti-beach from Miasmus 2023-09-21 18:39:11 +10:00
Hiroku 88105e070b Merge branch 'this-is-just-your-nature' into 'main'
Fixed mints not visually changing stats

See merge request cable-mc/cobblemon!630
2023-09-21 07:54:29 +00:00
tyzillion cef0ad7efa Forgot to update Cetitan animation. 2023-09-21 02:15:33 -04:00
tyzillion 592ead6674 Misc Fixes 2023-09-21 02:13:10 -04:00
Licious f6d298f228 Correct hidden power stat data to use Cobblemon IDs instead of Showdown. 2023-09-20 12:47:55 +01:00
Licious 44a2f9e859 Migrate types to data. 2023-09-20 12:07:09 +01:00
Paul 98556c1b24 Made medicinal leeks substantially rarer 2023-09-20 20:29:26 +10:00
Paul 137f080ba9 Fixed mints not visually changing stats 2023-09-20 20:27:50 +10:00
Paul 4f3601ab3b Added beach exclusion to medicinal leeks 2023-09-20 20:15:26 +10:00
Paul e523c46594 Improve rarity of generating big roots and only generate them with good space (and not water) 2023-09-20 20:10:14 +10:00
Paul 251ebe2a37 Improve berry generation in jungles by being able to replace leaves with them 2023-09-20 20:09:45 +10:00
Paul 12191b5d96 Fixed big roots not generating from stone 2023-09-20 20:09:24 +10:00
Paul 4da74f0bfb Fixed issues with wild berries not generating berries if spawned at mature age, reworked growth point timing 2023-09-20 20:09:11 +10:00
Paul b893681af5 Made berry groves rarer again 2023-09-20 20:08:34 +10:00
tyzillion eb159d0702 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-19 18:55:25 -04:00
Veraxiel d47197ab3b Updated spawn files. Added spawn compat for William Wythers' Overhauled Overworld. 2023-09-19 18:26:41 -04:00
Paul 64a2b9c60f Updated berry data because a bunch of positions were missing 2023-09-19 20:25:11 +10:00
tyzillion b4585cabd4 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-09-18 16:45:16 -04:00
tyzillion dd15de6e94 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-18 16:45:07 -04:00
Paul c5dab7208f License and registration, please 2023-09-18 18:46:29 +10:00
Paul 4a5d53a020 More fixes to Flywheel implementation, it renders all the berries correctly! 2023-09-18 18:45:04 +10:00
Paul cc163b73e1 Many fixes for flywheel 2023-09-18 15:51:25 +10:00
Sterrezo d1682b78c6 I didn't break anything
Accidentally removed a line for Mimikyu's shoulder mount last commit, readding it.
2023-09-17 11:39:11 +02:00
Sterrezo 52827c3be6 Documented all new cries in the changelog 2023-09-17 11:31:48 +02:00
Nick 23e2d56db4 Merge branch 'root-and-herb-fixes' into 'main'
Root and herb fixes

See merge request cable-mc/cobblemon!628
2023-09-17 06:58:52 +00:00
Hiroku 3451a70cfd Micro-optimized at Nick's request 2023-09-17 05:39:27 +00:00
tyzillion 3869fc590d Fixed Meowscarada spawning everywhere. 2023-09-16 20:33:09 -04:00
tyzillion ba4f4c8137 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns 2023-09-16 20:32:15 -04:00
Paul 7f372c1f16 Merge remote-tracking branch 'origin/main' into berry-with-flywheel 2023-09-17 10:09:07 +10:00
tyzillion 4624e7cab2 Gave long boi Exeggutor a proper hit box. 2023-09-16 19:08:19 -04:00
Paul 967053824b Made revival herbs rarer 2023-09-17 09:04:33 +10:00
tyzillion 95bc331dc9 Updated Changelog with Pokemon in previous versions that got a cry. 2023-09-16 19:04:23 -04:00
Paul 3c3ef6a387 Fixed roots being able to spread forever 2023-09-17 09:04:14 +10:00
Paul 309de12a0e Fixed big roots being too rare 2023-09-17 09:03:52 +10:00
tyzillion 90b22316cb Combee flys when walking, adjusted Exegguttor and Exeggcute sizes. Updated Shulker Forretress texture. 2023-09-16 18:56:41 -04:00
tyzillion dc1aec75ba Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-16 18:56:23 -04:00
tyzillion f60b3f1f4f Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-09-16 18:56:00 -04:00
Paul 3e118dcca6 Reworking flywheel impl 2023-09-17 06:47:35 +10:00
Sterrezo 12aac4f52d Implemented 13 new cries , updated 9
Added cries to Hoothoot, Noctowl, Aipom, Shroomish, Breloom, Ambipom, Chingling, Yamask, Cofagrigus, Nickit, Thievul
2023-09-16 14:04:26 +02:00
Hiroku 9b1699b507 Merge branch 'discovered-advanced-typoment' into 'main'
Update catch_all_vivillon.json

See merge request cable-mc/cobblemon!627
2023-09-16 00:29:53 +00:00
dhi_holoandHiroku f0cf94b830 Update catch_all_vivillon.json 2023-09-16 00:29:52 +00:00
Nick ddab45148c Merge branch 'mod-compat' into 'main'
Mod compat

See merge request cable-mc/cobblemon!626
2023-09-15 23:30:13 +00:00
HirokuandNick 2a23c77da7 Mod compat 2023-09-15 23:30:12 +00:00
tyzillion 97625d2750 Fixed Bergmite and Avalugg spawns. 2023-09-15 13:50:18 -04:00
tyzillion ef600fda79 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns 2023-09-15 13:33:52 -04:00
navneetset bd6364deac Removed pretty printing for MongoDB Gson. 2023-09-15 19:00:40 +02:00
navneetset 1fbdf1fce1 Fixed single save not picking up dirtyStore other than first one. 2023-09-15 19:00:24 +02:00
navneetset 6060013110 Merge branch 'mongdb-datastore' of https://gitlab.com/navneetset/cobblemon-peb-fork into mongdb-datastore 2023-09-15 18:56:51 +02:00
navneetset 755cf731f0 Fix dumb rebasing I did to merge main, add back previous implementation. 2023-09-15 18:55:54 +02:00
navneetset 6246af2979 Added MongoDB support for Cobblemon playerdata. 2023-09-15 18:55:54 +02:00
navneetset 6b27f13396 Added MongoDB datastore piggybacking off JSON store. Fixed package typo. 2023-09-15 18:55:54 +02:00
Hiroku 9a4fcb15b2 Merge branch 'mint-generation' into 'main'
Fixed mint generation

See merge request cable-mc/cobblemon!625
2023-09-15 11:49:27 +00:00
Paul 07bb57c009 Buffed mints spawning 2023-09-15 21:30:08 +10:00
Paul 2934e38077 Fixed mints not generating 2023-09-15 20:32:31 +10:00
Hiroku d60592b5e4 Merge branch 'berry-gen-fixes' into 'main'
Fixed berries generating midair or where water was, fixed snowy grass blocks...

Closes #478

See merge request cable-mc/cobblemon!624
2023-09-15 08:36:12 +00:00
apion f563f69afd Fixing rotations 2023-09-15 02:45:21 -04:00
tyzillion 354914105e Merge remote-tracking branch 'origin/1.4-Spawns' into 1.4-Spawns 2023-09-15 00:01:03 -04:00
tyzillion b154b6de64 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns 2023-09-14 23:53:17 -04:00
Paul 66e1f621cf Fixed berries generating midair or where water was, fixed snowy grass blocks with berries on them, made berries rarer. Closes #478 2023-09-15 13:52:46 +10:00
tyzillion 7d55d52608 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-14 23:52:24 -04:00
Hiroku 63d84df283 Merge branch 'implement_pokemon' into 'main'
Last of Pokémon Implemented.

See merge request cable-mc/cobblemon!623
2023-09-15 03:49:07 +00:00
TyzillionandHiroku 94400e61f5 Last of Pokémon Implemented. 2023-09-15 03:49:07 +00:00
tyzillion ce337e8fff Beldum line can fly, Updated Bunnelby and Sprigatito model, updated onix animation. Updated Trevenants and Vivillon textures. 2023-09-14 21:16:44 -04:00
apion 72b6f46c4b Merge branch 'main' into berry-with-flywheel 2023-09-14 21:04:28 -04:00
Veraxiel 547af6dd77 Fixed spawn files. 2023-09-14 21:02:10 -04:00
tyzillion 70119478a5 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-14 20:14:22 -04:00
Hiroku 029e120b2c Merge branch '1-point-4-bug-fixes' into 'main'
Some bug fixes

Closes #456 and #481

See merge request cable-mc/cobblemon!622
2023-09-15 00:05:53 +00:00
MiaandHiroku 7a305792af Some bug fixes 2023-09-15 00:05:53 +00:00
Nick 06ed32e4cb Merge branch 'issue-484' into 'main'
Fixes issue #484 (this is what you get for using regexes Hiroku)

Closes #484

See merge request cable-mc/cobblemon!621
2023-09-13 20:16:10 +00:00
apion ee63bf0eab Fixes issue #484 (this is what you get for using regexes Hiroku) 2023-09-13 15:54:18 -04:00
Hiroku 48a4add7aa Merge branch 'berry' into 'main'
Berry hitboxes, berry reordering

Closes #444 and #428

See merge request cable-mc/cobblemon!617
2023-09-12 11:34:28 +00:00
Paul dc8d7e36e0 Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BerryBlock.kt
2023-09-12 20:52:23 +10:00
Paul 1c1a683f2d Fixed exploding pasture blocks crashing servers on Forge, closes #472 2023-09-12 20:36:35 +10:00
Paul 0ee4f60391 Fixed bad registration of processor types on Forge 2023-09-12 20:26:52 +10:00
Paul 4a7893f647 Fixed species.create not working for some species with weird names, added /clearpc command 2023-09-12 19:51:12 +10:00
Paul 76890135ef Fixed many items not being possible to give to pokemon by shift rc 2023-09-12 18:48:12 +10:00
Hiroku 930f95d3b6 Merge branch 'sound' into 'main'
Sound updates and consistency fixes

See merge request cable-mc/cobblemon!619
2023-09-12 07:49:54 +00:00
SterrezoandHiroku 0c15d14f1a Sound updates and consistency fixes 2023-09-12 07:49:54 +00:00
Hiroku a2bb0fb3cd Merge branch '1-point-4-bug-fixes' into 'main'
1.4 Bug Fixes

Closes #471, #455, #385, #445, #456, and #463

See merge request cable-mc/cobblemon!620
2023-09-12 07:49:14 +00:00
miasmus a97753c339 add block break particles to mulch removal 2023-09-11 22:48:47 -04:00
miasmus 557dda4c1d holy crap im so smrat (fixes harvesting berries with bonemeal in hand not playing interact anim) 2023-09-11 22:03:25 -04:00
miasmus 944fdf7c0c no one told me to test before pushing to main 2023-09-11 17:06:33 -04:00
tyzillion 10b2aecc12 Updated Floragato mode and Meowscarada model. Fixed Volbeat and Illumise taking baths in water. 2023-09-11 17:06:23 -04:00
tyzillion 565d38f085 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation1/pikachu.json
2023-09-11 17:06:01 -04:00
miasmus ada8bc9403 Merge main into 1-point-4-bug-fixes 2023-09-11 16:56:03 -04:00
Paul 2d3d245b03 Fix pikachu evolution properly apparently and fix Nincada -> Shedinja direct evo being a thing 2023-09-11 19:57:03 +10:00
Veraxiel 9adeb60abe Updated spawn files. 2023-09-11 04:35:58 -04:00
Paul 6c91342954 Licenses mf, do you speak it? 2023-09-11 17:45:52 +10:00
Hiroku 98b84d853c Merge branch 'screw-mark-removed' into 'main'
markRemoved bad, PreEmptsExplosion good

See merge request cable-mc/cobblemon!618
2023-09-11 06:55:45 +00:00
NeovitalismandHiroku 83ee5f3c3d markRemoved bad, PreEmptsExplosion good 2023-09-11 06:55:45 +00:00
Paul 137088296e Merge remote-tracking branch 'origin/main' into berry 2023-09-11 16:50:42 +10:00
Paul e748059052 Basic protections against blocks being switched underneath a pasture BE's nose 2023-09-11 15:15:35 +10:00
tyzillion d748241727 Fixed names on spawn files. 2023-09-11 01:06:11 -04:00
Paul f515a2ef72 Merge remote-tracking branch 'origin/main' into berry 2023-09-11 14:45:37 +10:00
Paul 0c9017d5e2 Merge remote-tracking branch 'origin/berry' into berry 2023-09-11 14:44:57 +10:00
Paul fd12789791 Colliders for all the berry trees 2023-09-11 14:44:38 +10:00
Hiroku 638c92ec4c Merge branch 'starter-ball' into 'main'
Chested Balls

Closes #461

See merge request cable-mc/cobblemon!616
2023-09-11 04:26:17 +00:00
dhi_holoandHiroku bee865931a Chested Balls 2023-09-11 04:26:16 +00:00
Veraxiel 77ee8b1743 Merge branch '1.4-Spawns' of https://gitlab.com/cable-mc/pokemon-cobbled into 1.4-Spawns 2023-09-10 21:21:16 -04:00
Veraxiel 5eef45b49a Fixed structure names in presets and spawns. 2023-09-10 21:21:03 -04:00
tyzillion 79f7dd1519 Funny liscense moment. 2023-09-10 19:35:50 -04:00
tyzillion 919dec6809 Fixed json loading error. 2023-09-10 19:02:20 -04:00
tyzillion f00f73491d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-10 18:58:05 -04:00
tyzillion c7cf73812c Added spawns for many new pokemon, added biome based evos to Spewpa, and fixed issues. 2023-09-10 18:56:28 -04:00
tyzillion 80fbab35dc Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into 1.4-Spawns 2023-09-10 15:14:56 -04:00
miasmus ad039cb949 re-order berries, fixes #428 2023-09-10 12:16:26 -04:00
miasmus 0436b36872 partially heal PP when sleeping (fixes #463) 2023-09-10 11:58:42 -04:00
navneetset 9f60ce51c7 Fix dumb rebasing I did to merge main, add back previous implementation. 2023-09-10 14:17:12 +02:00
navneetset 343e13d1ac Added MongoDB support for Cobblemon playerdata. 2023-09-10 14:10:38 +02:00
navneetset ca175ab164 Added MongoDB datastore piggybacking off JSON store. Fixed package typo. 2023-09-10 14:09:03 +02:00
Hiroku 8a62088fb4 Merge branch 'battle_gimmicks' into 'main'
Mega Evolution, Z-Moves, Dynamax, and Terastallization

See merge request cable-mc/cobblemon!572
2023-09-10 09:54:30 +00:00
Segfault GuyandHiroku 7e2bb0ca6a Mega Evolution, Z-Moves, Dynamax, and Terastallization 2023-09-10 09:54:29 +00:00
tyzillion ebad166b12 Tweaked Emissives on Gengar, Fixed Quilava cries, Fixed Braixen emissive pixel. 2023-09-10 04:34:04 -04:00
tyzillion 92f5fd7cd6 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-10 04:33:30 -04:00
Veraxiel 507319fa0f Added new presets and biome tags. Updated presets and biome tags. Updated spawn files. 2023-09-10 04:12:10 -04:00
Paul 228347e46f Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/java/com/cobblemon/mod/common/mixin/StructurePoolGeneratorMixin.java
#	common/src/main/kotlin/com/cobblemon/mod/common/world/CobblemonStructures.kt
2023-09-10 16:20:04 +10:00
Paul 3a2c12c652 Fixed displayName in spawn files not working properly. Closes #320 2023-09-10 15:11:45 +10:00
Paul a6945adf5a Added optional 'enabled' property to model layers so that they can be disabled later in resolver variations. Closes #373 2023-09-10 15:08:17 +10:00
Paul 295e68b0d5 Poison Heal Pokémon will heal if poisoned out of battle. Closes #373 2023-09-10 14:43:29 +10:00
Paul be983f6115 Fixed an apparently unsafe cast to client world for Litematica, closes #375 2023-09-10 14:27:56 +10:00
Paul 6eeda04b78 Fixed reused models from multiple posers causing rotation problems, closes #414 2023-09-10 14:26:58 +10:00
Paul c03097e627 Fixed quirks being idle-preventing from resource packs, closes #429 and closes #419 2023-09-10 14:14:35 +10:00
tyzillion 163e17fb3f Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-09 22:48:45 -04:00
Paul a330f95559 Improve sneaking positioning of shoulder mounts 2023-09-10 11:12:53 +10:00
Paul 25d7c8376e Fixed shoulder mount animations being a blur 2023-09-10 11:05:50 +10:00
Paul bc93bae9ab Check the form during readfromnbt/json 2023-09-10 11:01:32 +10:00
Paul 4f9ca14301 Fixed evolutions being blank for forms that rely on root-species evos 2023-09-10 11:01:12 +10:00
Paul b9515a2a81 Fixed more nicknaming glitches 2023-09-10 11:00:54 +10:00
miasmus 6200e3a693 update changelog 2023-09-09 19:35:12 -04:00
miasmus 290f3e2845 adjusted steelix and dragalge hitboxes 2023-09-09 19:30:56 -04:00
miasmus 516e3c4cd9 fix typhlosion/quilava cry anim playing during battle idle 2023-09-09 19:10:38 -04:00
miasmus e419030339 pokemon that can fly will not fall to their deaths 2023-09-09 18:45:54 -04:00
Paul 7675148d37 Fixed inconsistency with sending out tracing 2023-09-10 08:45:42 +10:00
tyzillion fe739cd644 Meganium and Galarian Meowth crash fixed. Updated hitboxes and frames for the last set of Pokemon implemented. 2023-09-09 18:23:14 -04:00
tyzillion dd5e9c08aa Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-09 18:22:48 -04:00
miasmus 03b29ce468 fix leeks, for real this time (fixes #456) 2023-09-09 18:18:53 -04:00
Paul d2668a15b0 Grouped structure maximums and limited berry farms to 2 total per village 2023-09-10 08:05:21 +10:00
miasmus d9a99ad65b Fix players being able to battle/trade in spectator mode 2023-09-09 17:42:41 -04:00
miasmus 0fc9d29884 fix leeks generating on ice 2023-09-09 17:16:39 -04:00
Hiroku f500ab4a87 Merge branch 'berry' into 'main'
Reworked berry generation in villages using their own structures, rarity & gen fixes

Closes #444

See merge request cable-mc/cobblemon!615
2023-09-09 20:55:30 +00:00
Hiroku 19a85276af Reworked berry generation in villages using their own structures, rarity & gen fixes 2023-09-09 20:55:30 +00:00
tyzillion 70c2404b20 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-09 16:01:43 -04:00
Paul 27a4b3b6f4 Reworked berry generation in villages using their own structures 2023-09-09 20:28:42 +10:00
Paul 5df79f083a Fixed wild berry trees being still too common and surviving on air 2023-09-09 20:26:28 +10:00
Paul 1501c3689a Merge remote-tracking branch 'origin/main' into berry 2023-09-09 19:20:44 +10:00
Hiroku 277ec8ffcd Merge branch 'lootchestplate' into 'main'
chestlootplate

See merge request cable-mc/cobblemon!614
2023-09-09 02:52:19 +00:00
dhi_holoandHiroku c7b82adfb0 chestlootplate 2023-09-09 02:52:19 +00:00
tyzillion fb56430213 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-08 19:05:26 -04:00
tyzillion 083b439049 Fixes, Frames, and Hitboxes. Fixed Gengar texture. 2023-09-08 19:05:02 -04:00
Paul 98e495f7e4 Merge remote-tracking branch 'origin/main' into berry 2023-09-09 08:53:50 +10:00
Paul 508e607440 Merge remote-tracking branch 'origin/main' 2023-09-09 08:48:38 +10:00
Paul ab69588331 Flying AI improvements 2023-09-09 08:48:26 +10:00
apion a8ac109a50 Allowed for the use of existing berry models in flywheel optimizations 2023-09-08 18:34:51 -04:00
tyzillion 1813baaa6f Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-08 16:04:21 -04:00
tyzillion 5b5171b9bc Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-09-08 16:04:09 -04:00
Hiroku b912e8cbca Merge branch 'berry' into 'main'
Berry fixes including mulch visibility

Closes #444

See merge request cable-mc/cobblemon!613
2023-09-08 19:55:32 +00:00
Hiroku cc2eaf6c1a Berry fixes including mulch visibility 2023-09-08 19:55:32 +00:00
apion fbe31f3232 Try rendering berry trees with flywheel 2023-09-08 11:52:18 -04:00
Sterrezo b530af1ff6 Added missing placeholder assets to Exeggutor to prevent an error in the log 2023-09-08 12:47:13 +02:00
Paul a608cbe0fe Merge conflicty stuff 2023-09-08 19:46:18 +10:00
Paul a4ed9393f0 Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BerryBlock.kt
2023-09-08 19:46:05 +10:00
Paul f294d4fcef Fixed berry juice, energy root, heal powder, potions, and status cure items not being consumed when used outside of battle 2023-09-08 19:43:12 +10:00
Paul 6046ca10d0 Merge remote-tracking branch 'origin/berry' into berry 2023-09-08 19:39:09 +10:00
Paul d24371b9e4 Added mulch visibility for berry trees, and fixed surprise mulch on revival herbs 2023-09-08 19:37:18 +10:00
Hiroku 645d84858e Merge branch 'unloaded-pasture-fix' into 'main'
Fix removing pokemon from an unloaded pasture

See merge request cable-mc/cobblemon!612
2023-09-08 08:09:13 +00:00
NeovitalismandHiroku 04ecd3d976 Fix removing pokemon from an unloaded pasture 2023-09-08 08:09:13 +00:00
Paul c02fe8a00c Fixed hand not swinging when applying mulch 2023-09-08 16:33:28 +10:00
Hiroku 008e42a267 Merge branch 'berry' into 'main'
Latest Berry Updates

Closes #444

See merge request cable-mc/cobblemon!606
2023-09-08 06:29:28 +00:00
NickandHiroku 316ab772bf Latest Berry Updates 2023-09-08 06:29:28 +00:00
Hiroku bca4b06750 Should return pass not fail for isSneaking interaction check 2023-09-08 06:29:04 +00:00
Hiroku dea1d74e40 Merge branch 'fix-battle-particle-misrendering' into 'main'
Fix Issues Related to RenderContext Changes

See merge request cable-mc/cobblemon!611
2023-09-08 05:30:17 +00:00
NickandHiroku 12f1259495 Fix Issues Related to RenderContext Changes 2023-09-08 05:30:17 +00:00
Lily cc30f4f207 fix sneaking checks when using items on pokemon 2023-09-08 00:51:27 -04:00
Hiroku 775a2038d0 Merge branch 'shiny_starters_gamerule' into 'main'
add shiny starters gamerule

See merge request cable-mc/cobblemon!557
2023-09-08 04:51:07 +00:00
LilyandHiroku 1dc8ae036f add shiny starters gamerule 2023-09-08 04:51:07 +00:00
Paul 0011993afb Fixed wiki berry pivot 2023-09-08 13:59:49 +10:00
Hiroku 1ef22ad52a Merge branch 'pokemon-item-tint' into 'main'
Added in tint nbt for Pokemon items

See merge request cable-mc/cobblemon!608
2023-09-08 03:16:33 +00:00
Hiroku e8030c0180 Merge branch 'fix_446' into 'main'
Fix Drag Dispatch.

Closes #446

See merge request cable-mc/cobblemon!610
2023-09-08 03:16:24 +00:00
Segfault Guy e929f6f02d Fix Drag Dispatch. 2023-09-07 22:56:22 -04:00
tyzillion 8ec91f7a40 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-07 21:28:01 -04:00
apion 41b9411d06 Merge branch 'berry' into berry-perf-improvements
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/BerryBlockEntity.kt
2023-09-07 21:17:12 -04:00
Deltric 9518422f62 Added in tint nbt for Pokemon items 2023-09-07 20:17:12 -05:00
Lily 4c03891f19 berry grove trees now only spawn at age 3 or higher ( Closes #445 ) 2023-09-07 21:16:13 -04:00
Hiroku 52a3bf50d0 Merge branch 'armor-sprites' into 'main'
updated sprites for auspicious and malicious armor + clarified what a renderable pokemon is

See merge request cable-mc/cobblemon!607
2023-09-08 00:52:28 +00:00
LilyandHiroku c1657b5772 updated sprites for auspicious and malicious armor + clarified what a renderable pokemon is 2023-09-08 00:52:28 +00:00
Lily e57c9487ca prevent berry groves from replacing water blocks 2023-09-07 20:13:36 -04:00
miasmus 7e583d6319 fix itemgroup, add descriptions for 96 pokemon, fixes #455 2023-09-07 19:49:00 -04:00
Paul 11256c0e3a Fixed berry flowers not rendering 2023-09-08 09:41:34 +10:00
Paul ffb53626eb Only allow mulching berry trees that are pre-flowering and are on farmland 2023-09-08 09:27:34 +10:00
Paul a74671f710 Re-delete unused mixin [skip-ci] 2023-09-08 09:09:25 +10:00
Hiroku 04d83251b4 Merge branch 'evolution-changes-&-fixes' into 'main'
Evolution changes & fixes

Closes #287, #386, and #398

See merge request cable-mc/cobblemon!582
2023-09-07 23:04:40 +00:00
LiciousandHiroku bece6dfbb0 Evolution changes & fixes 2023-09-07 23:04:40 +00:00
miasmus 5e5cb4e388 no more pokemon waterboarding (fixes #385) 2023-09-07 18:02:01 -04:00
Hiroku 8f9dc451f1 Merge branch 'a-guide-to-1-point-4' into 'main'
Advancements (from hell)

See merge request cable-mc/cobblemon!543
2023-09-07 21:48:19 +00:00
dhi_holoandHiroku ffb1c94c3f Advancements (from hell) 2023-09-07 21:48:19 +00:00
Lily d9b2f0cef8 Merge remote-tracking branch 'origin/berry' into berry 2023-09-07 17:18:20 -04:00
Lily 458fa1732c make berry groves 3x rarer 2023-09-07 17:17:38 -04:00
tyzillion 3040eee59c Updated Gengar, Readded Shulker Forretress, Updated Doduo shiny texture, Updated Serperior textures. 2023-09-06 21:54:51 -04:00
miasmus 23e532a214 fixed compile errors from merge 2023-09-06 16:53:57 -04:00
Nick 70f1e5e621 Fix conflicts between main and berry branch 2023-09-06 17:12:04 +00:00
apion 10033be4b5 Actually fix flower models 2023-09-06 11:19:54 -04:00
apion 914067038a Fix forge client, fix flower models 2023-09-06 11:13:28 -04:00
miasmusandapion bf9f08826b Fixes #444 (some berries not consumed on use outside of battle) 2023-09-06 10:50:07 -04:00
ApionXDandapion da27b80e82 Fixed bug where tall grass wouldn't be deleted when a berry tree replaced its lower block 2023-09-06 10:50:07 -04:00
miasmusandapion e6c9c7798e Adds other crops to maintains_farmland tag 2023-09-06 10:50:07 -04:00
miasmusandapion d0b7b956e8 Adds a #cobblemon:berry tag with all the berry blocks, adds them to the #maintains_farmland tag 2023-09-06 10:50:07 -04:00
Lilyandapion 0301064ed5 added missing particles for figy, micle, passho, starf, and wacan berries 2023-09-06 10:50:06 -04:00
Lilyandapion b8595f8d59 prevent player from interacting with pokemon when sneaking 2023-09-06 10:50:06 -04:00
tyzillion d120c8e031 Readded Phantump and Trevenants Emissives. License moment 🤙 2023-09-06 00:22:32 -04:00
tyzillion aa91b5b20b Misc Fixes, Many walk speeds modified, Removed Shulker Forretress and Minecraft tree variants of Phantump and Trevenant. 2023-09-05 23:58:16 -04:00
tyzillion 84dfaa0a77 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-05 23:57:23 -04:00
Nick 1e8ae04ad5 Merge branch 'gui-model-hook' into 'main'
Add reference to previously polled species name and aspects.

See merge request cable-mc/cobblemon!594
2023-09-06 03:00:38 +00:00
WaterpickerandNick 0cfa7bf61d Add reference to previously polled species name and aspects. 2023-09-06 03:00:37 +00:00
tyzillion 9987c0c13f Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-09-05 16:45:37 -04:00
miasmus 99a88e66e7 Fixes #444 (some berries not consumed on use outside of battle) 2023-09-05 16:07:59 -04:00
Sterrezo b7a3e276f1 Implemented 82 cries
I'm gonna lie down
2023-09-05 20:14:40 +02:00
ApionXD 0240f925f6 Fixed bug where tall grass wouldn't be deleted when a berry tree replaced its lower block 2023-09-05 10:32:12 -04:00
tyzillion d9774272ce Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-09-05 09:10:58 -04:00
Hiroku aa2532df6f Merge branch 'x-treme-crafting' into 'main'
X-Item Recipes

See merge request cable-mc/cobblemon!604
2023-09-05 11:52:28 +00:00
dhi_holoandHiroku 0c14e5dedc X-Item Recipes 2023-09-05 11:52:28 +00:00
Hiroku 62248ff97c Merge branch 'long_lost_logs' into 'main'
Oops! Forgot to update the changelogs. No one cares about these, right?

See merge request cable-mc/cobblemon!603
2023-09-05 10:54:13 +00:00
Segfault GuyandHiroku 17343abce2 Oops! Forgot to update the changelogs. No one cares about these, right? 2023-09-05 10:54:13 +00:00
Hiroku 0ff73d0c21 Merge branch 'auspicious_armor' into 'main'
adds auspicious and malicious armor, equipping functionality is in the earlier...

Closes #436

See merge request cable-mc/cobblemon!602
2023-09-05 09:56:57 +00:00
LilyandHiroku 77da1f8252 adds auspicious and malicious armor, equipping functionality is in the earlier... 2023-09-05 09:56:57 +00:00
Hiroku 18301300aa Merge branch 'implement_pokemon' into 'main'
So so so many Pokemon implemented and models, animations, and textures updated

See merge request cable-mc/cobblemon!600
2023-09-05 08:59:10 +00:00
TyzillionandHiroku ca044e8390 So so so many Pokemon implemented and models, animations, and textures updated 2023-09-05 08:59:10 +00:00
miasmus a6b68b4076 Adds other crops to maintains_farmland tag 2023-09-04 19:50:26 -04:00
miasmus dbce3252ab Adds a #cobblemon:berry tag with all the berry blocks, adds them to the #maintains_farmland tag 2023-09-04 19:29:33 -04:00
Lily cc3b09f590 added missing particles for figy, micle, passho, starf, and wacan berries 2023-09-04 19:24:23 -04:00
Lily 8ed2b820f2 prevent player from interacting with pokemon when sneaking 2023-09-04 17:25:56 -04:00
apion 3b967933ca Licenses 2023-09-04 16:35:43 -04:00
apion 665aad40a8 Added logic to rerender blocks when necessary 2023-09-04 16:32:23 -04:00
apion 527f429c20 Use guava cache now, evict entries after a minute 2023-09-04 15:13:56 -04:00
Sterrezo 85803b11b4 Implemented cries for remaining starters 2023-09-04 21:01:03 +02:00
apion 6d3f3d1353 Fixed lighting issues (kinda) 2023-09-04 14:17:49 -04:00
apion b70748e1b8 BerryBlockRenderer now caches vertices, improves perf by about 4x (HOORAY) 2023-09-04 05:53:56 -04:00
tyzillion c6406ab0ea Small Fixes. 2023-09-04 05:08:57 -04:00
tyzillion 28c750caf9 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-04 05:08:32 -04:00
Paul ff2db8fa11 You saw nothing 2023-09-04 18:49:38 +10:00
Paul 42d330e1c0 Added berry world gen weights to data 2023-09-04 18:45:27 +10:00
Paul 062cee2b9a Merge remote-tracking branch 'origin/main' 2023-09-04 18:16:36 +10:00
Paul 5730d812a0 Randomize berry positions for most berry trees (except for berry swords) 2023-09-04 18:16:28 +10:00
tyzillion ab22780598 Modified walk speeds for Roggenrola line, Quilava, Typhlosion, and Feraligatr. 😅 2023-09-04 02:00:08 -04:00
tyzillion 1b2e0fb58e Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-04 01:54:36 -04:00
tyzillion 6616234393 🥚 2023-09-04 01:52:57 -04:00
Hiroku cb4ad09a11 Merge branch 'heal-me-up-scotty' into 'main'
Potions are like healing berries

Closes #437

See merge request cable-mc/cobblemon!598
2023-09-04 05:52:07 +00:00
MoeBoy76andHiroku 1d81df91eb Potions are like healing berries 2023-09-04 05:52:06 +00:00
Hiroku d962d30074 Merge branch 'fix-starter-volume' into 'main'
Fixes starter selection sound effect playing twice when clicking the arrow keys to navigate

Closes #427

See merge request cable-mc/cobblemon!599
2023-09-04 05:47:31 +00:00
tyzillion e33420bab7 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-09-04 01:39:08 -04:00
tyzillion 17dcbb25c3 Implemented Teddiursa and Ursaring. Fixed Clodsire pivot, fixed Lickylicky crash. Added animated textures to Ponyta line, updated Tinkaton, Tevenant, Slowking, Boltund, Quaxwell, Delphox, Koffing, Weezing, Chikorita, Bayleef, Meganium, Mareep, Flaaffy, Ampharos, Oshawott, Dewott, Doduo, Dodrio, Abra, Kadabra, Alakazam, Emolga, Slowpoke, Slowbro, and Slowking. Updated animations for Bunnelby, Diggersby, Cetoddle, Cetitan, Sprigatito line, Snivy line, Hitmonchan, Lonoone, Beldum line, Chikorita line, Phantump line, Mareep line, Fennekin line, Yamper line, Doduo line, Slowpoke line, Hoothoot, Froakie, Komala, Galar Meowth, Quaxwell, and Granbull. 2023-09-04 01:38:50 -04:00
tyzillion 1b36c40959 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-04 01:36:08 -04:00
Hiroku 5096d9a15a Merge branch 'pokemonloot-fix' into 'main'
Fixes pokemon dropping XP when doPokemonLoot gamerule is set to false

See merge request cable-mc/cobblemon!597
2023-09-04 04:20:21 +00:00
Hiroku 24737cf606 Merge branch 'selected-pokemon-pvp-fix' into 'main'
Fix player battle always starting with first pokemon

Closes #389

See merge request cable-mc/cobblemon!579
2023-09-04 04:12:14 +00:00
MiaandHiroku 7bd1c24b57 Fix player battle always starting with first pokemon 2023-09-04 04:12:13 +00:00
DoctorWafflePhD db2cd8501e A handful of UI & hitbox fixes. 2023-09-03 22:32:48 -05:00
tyzillion fd6348adbe Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-03 22:41:34 -04:00
miasmus 36b1bec04b Fixes starter selection sound effect playing twice when clicking the arrow keys to navigate 2023-09-03 20:19:52 -04:00
Hiroku 7f14b60efb Merge branch 'neo-1.4-fixes' into 'main'
Various bug fixes

See merge request cable-mc/cobblemon!596
2023-09-03 22:27:52 +00:00
NeovitalismandHiroku 239559cfd3 Various bug fixes 2023-09-03 22:27:52 +00:00
miasmus c4b2a1546a Fixes pokemon dropping XP when doPokemonLoot gamerule is set to false 2023-09-03 13:39:51 -04:00
tyzillion e3c9c16add Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-03 12:26:58 -04:00
apion d17f8f90b8 Made berry atlases actually work (only on Fabric for now, this is prototyped af) 2023-09-03 05:56:08 -04:00
Paul 278b36234e Put the pre-render call back so pokeballs animate (oopsy) 2023-09-03 14:43:49 +10:00
Paul 1598c8209a Fixed ternary and boolean-not operators not working in Molang which broke berry friendship increase amounts 2023-09-03 14:38:44 +10:00
DoctorWafflePhD bc9182e37f Numerous scaling fixes. Hitboxes not fixed (yet). 2023-09-02 13:42:20 -05:00
tyzillion 68923dd95f Updated Sprigatito and Braixen, Made Wooper not just be Paldean, Fixes Ratatta texture. Fixes Grotle crash. 2023-09-02 12:03:35 -04:00
apion 1d353bdc5b Added hitboxes to the early stages of berry tree growth 2023-09-02 03:37:31 -04:00
apion df7109ba45 Added flower model/texture, fixed particles in all the tree models 2023-09-02 03:15:39 -04:00
tyzillion ab3449243f Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-02 02:25:51 -04:00
Hiroku deb7ece946 Merge branch 'berry' into 'main'
Berries

See merge request cable-mc/cobblemon!595
2023-09-02 06:05:40 +00:00
ApionandHiroku d8f9f8926b Berries 2023-09-02 06:05:40 +00:00
apion 457e7b65c9 Merge remote-tracking branch 'origin/berry' into berry 2023-09-02 01:36:35 -04:00
apion 755d4ea612 Added early stage growth models to all block states 2023-09-02 01:36:27 -04:00
Hiroku ad6bcb1572 Licenses fix (apion banned) 2023-09-02 05:28:15 +00:00
apion 42235a35ee Final asset sync (hopefully) 2023-09-02 00:59:01 -04:00
tyzillion a8f6e66ab4 Updated models and textures for Gyarados, Hitmonchan, Hitmonlee, Serperior, Haunter, Chansey, Blissey, Happiny, Sneasel, Weavile, Spiritomb, Dratini, Dragonair, Dragonite, Pidgey, Pidgeotto, and Pidgeot.
Implemented Paldean Wooper and Clodsire.
2023-09-02 00:50:32 -04:00
apion d6e51b9c55 Merge remote-tracking branch 'origin/berry' into berry 2023-09-01 21:27:00 -04:00
apion d2970c10b3 Added texture atlases for berries, fixed issue in Forge where berry models werent being loaded 2023-09-01 21:26:45 -04:00
tyzillion f3cb2aab87 Implemented Crabrawler, Crabominable, Wimpod, Golisopod, Nincada, Ninjask, Shedinja, Ralts, Kirlia, Gardevoir, Gallade, Beldum, Metang, Metagross, Ursaluna, Lechonk, Oinkologne, Pidove, Tranquil, Unfezant, Timburr, Gurdurr, and Conkeldurr. 2023-09-01 20:56:09 -04:00
tyzillion d9c6522685 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-09-01 20:54:59 -04:00
Hiroku ca54a0abf0 Last one was stereo (THANKS STERR) 2023-09-01 09:18:13 +00:00
Hiroku 1ad743a126 Added berry eat sound effect 2023-09-01 09:16:52 +00:00
Paul cde5a5b408 Added berry juice, fixed Touga sprite/blockstates missing 2023-09-01 19:03:43 +10:00
Paul e6a45fd356 Removed dead code in berry interactions, added medicinal brew sprite, changelog updates 2023-09-01 16:57:00 +10:00
apion c3eb05e5c6 More asset sync (again) (YAY!) Also disabled berry tinting 2023-08-31 19:54:26 -04:00
apion a82dee2beb More asset sync (again) (YAY!) Also disabled berry tinting 2023-08-31 19:54:05 -04:00
apion 8099bfe330 Merge branch 'main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MoLangExtensions.kt
2023-08-31 19:11:18 -04:00
Paul 9d8803caf2 Make entity accessible from poseable entity state 2023-09-01 09:01:12 +10:00
Veraxiel 7074a63f95 Updated existing spawn files. Added preset for Flowers and Gemstones. Removed preset for Underground. Updated Natural preset. 2023-08-31 04:35:04 -04:00
apion 95d6a1c183 More asset sync 2023-08-31 00:08:02 -04:00
apion 4fd433b072 Actually fixed berries rendering when off screen (you were right the first time Hiroku) 2023-08-28 21:10:29 -04:00
apion dc6804bba6 Moved mulch logic into the berry block entity 2023-08-28 18:50:55 -04:00
Paul 3e005e5032 Merge branch 'main' into implement_pokemon 2023-08-28 18:27:51 +10:00
Paul 08827a742f Fixes to particle effects in bedrock animations 2023-08-28 18:27:19 +10:00
Paul f93e8e221a Fixes to particle effects in bedrock animations 2023-08-28 18:27:03 +10:00
Paul cc7433025f Slow torterra down so we can watch him do the walk 2023-08-28 18:26:34 +10:00
Paul aa17482a6e Fixed Mamoswine crash 2023-08-28 18:00:58 +10:00
tyzillion 7f0f6e7c4d Implemented Fletchling, Fletchinder, and Talonflame. Shulker Forretress. 2023-08-27 20:38:38 -04:00
Paul 16a0cd1fe7 Updated heaps of berry assets and placements 2023-08-27 21:50:38 +10:00
tyzillion 2fc9d587d9 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-27 07:38:44 -04:00
Paul a6a76052a6 Fixed various items not preventing off-hand interactions from playing 2023-08-27 15:58:57 +10:00
Paul abeb005bbb Improve error logging for bad MoLang expression parsing from String.asExpression 2023-08-27 13:05:03 +10:00
Paul 6835232aa6 Added support for effect looping in non-loop animations 2023-08-27 13:04:47 +10:00
Paul 78ebc9a9eb Added MoLang instructions: s.sound(effect, volume, pitch) and s.random(...) 2023-08-27 13:04:06 +10:00
Paul f5e85971f3 Made Pokémon appear red when hurt 2023-08-27 11:11:53 +10:00
tyzillion 1d950d9640 Update when? When Update? Implemented Johto Starters.
Update when? Update? Update when? Update? When Update? Update?
2023-08-26 02:55:28 -04:00
tyzillion 3b63f88669 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-26 02:52:51 -04:00
Hiroku e85b2aa138 Merge branch 'battle_bugs_1' into 'main'
Fix Shedinja HP and Faint Softlock.

Closes #341 and #400

See merge request cable-mc/cobblemon!593
2023-08-26 02:33:53 +00:00
Segfault Guy 371e1426a3 Fix Shedinja HP and Faint Softlock. 2023-08-25 22:24:54 -04:00
Hiroku 256e09846d Merge branch 'main' into 'main'
Made Master Balls Fireproof (won't disappear when thrown in lava/fire)

See merge request cable-mc/cobblemon!591
2023-08-26 01:49:13 +00:00
RetroandHiroku dd2d441b0c Made Master Balls Fireproof (won't disappear when thrown in lava/fire) 2023-08-26 01:49:13 +00:00
tyzillion 4f35e8348d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-25 12:43:12 -04:00
tyzillion 36c76b96b3 Implemented Komala,Phantump,and Trevenant all with wood variants. 2023-08-25 12:42:39 -04:00
Nick ddc57ecd8d Merge branch 'fixed-tag-file' into 'main'
Fixed tag file

See merge request cable-mc/cobblemon!592
2023-08-24 19:50:57 +00:00
Deltric 202a6a0496 Fixed tag file 2023-08-24 14:26:32 -05:00
Hiroku fbc639cbf3 Merge branch 'power-items' into 'main'
Added in Power Items

See merge request cable-mc/cobblemon!580
2023-08-24 09:38:51 +00:00
DeltricandHiroku 78faf30b32 Added in Power Items 2023-08-24 09:38:51 +00:00
tyzillion 2fe98577b6 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-23 15:34:55 -04:00
Hiroku 39cbb448a6 Merge branch 'poke-select' into 'main'
Update Poke Select Interface

See merge request cable-mc/cobblemon!588
2023-08-22 09:21:51 +00:00
TestandHiroku fd10f8efd8 Update Poke Select Interface 2023-08-22 09:21:51 +00:00
Hiroku 9161f61017 Merge branch 'spawn-issue' into 'main'
Bug fixes

Closes #402 and #403

See merge request cable-mc/cobblemon!577
2023-08-22 09:08:40 +00:00
ApionandHiroku 4244680956 Bug fixes 2023-08-22 09:08:40 +00:00
Hiroku 92ad81f8d1 Merge branch 'sound' into 'main'
Various sound updates and volume tweaks

See merge request cable-mc/cobblemon!587
2023-08-22 09:06:17 +00:00
SterrezoandHiroku c1c7106bff Various sound updates and volume tweaks 2023-08-22 09:06:17 +00:00
Hiroku e36b1b22c4 Merge branch 'main' into 'main'
Persistent Data Fix

See merge request cable-mc/cobblemon!589
2023-08-22 09:05:39 +00:00
ItsJustChris85 e21d445e14 Persistent Data Fix 2023-08-22 00:51:00 -04:00
tyzillion dadeb2670b Made fixes to my last push and implemented Starly, Staravia,
and Staraptor.
2023-08-20 14:22:46 -04:00
tyzillion aedca9e969 Updated Roggenrola line, Misdreavus line, Exeggcute, Golduck, Elekid, Electabuzz, and Chesnaught models, textures, and animations, updated Spinda model, texture, and animation. Added 2 new spots too. Updated Slowking texture, Implemented Alolan Exeggcute. 2023-08-20 12:14:25 -04:00
tyzillion e1ca6bbc94 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-20 12:13:14 -04:00
apion 22d66103b6 Added missing berries, fix desert grove spawning, decrease chance of groves 2023-08-20 06:14:33 -04:00
apion 0e2a0af914 Asset sync 2023-08-20 05:07:49 -04:00
Paul 098ff1f96b Clamp set level within bounds instead of throwing exceptions (means we don't corrupt storages) 2023-08-20 17:21:25 +10:00
Paul f93445f081 JvmOverloads in battle builder, closes #410 2023-08-20 17:06:50 +10:00
Paul 85a962e924 Licenses 2023-08-20 15:13:23 +10:00
Paul f6d0f11c99 Implemented uncatchable, fixed some capture calculation issues, added PokeBallCaptureCalculatedEvent and PokemonCatchRateEvent 2023-08-20 13:51:08 +10:00
Paul e74b838fb2 Fixed lighting of pokemon model items 2023-08-20 10:35:29 +10:00
apion 7591345181 Fixed probability calculations 2023-08-18 06:53:35 -04:00
apion 8d157a5ad5 Added berry spawns to villages, add licenses 2023-08-18 05:50:06 -04:00
tyzillion d41ef023ff Implemented cries for Mudbray, Mudsdale, Fennekin, Braixen, Delphox, Buneary, Lopunny, Snivy, Servine, and Serperior. Updated models and textures for Snivy, Servine, Serperior, Buneary, and Lopunny. Updated animations for Mudbray and Mudsdale. 2023-08-17 20:59:30 -04:00
apion 8b857881a8 Merge branch 'implementing-naturally-generated-structures' into berry 2023-08-17 05:09:26 -04:00
apion 995a8c2dc0 Got structure processor + overrides working 2023-08-17 05:08:00 -04:00
tyzillion 30b769db13 Fixed issues with Galarian Meowth and Perrserker. Added proper cries to Farfectchd and its Galar counterpart. Updated Corviknight, Fenniken, Braixen, and Delphox model and animations. Updated Rookidee and Corvisquire's animations. Merged Braixen's textures and gave it animated textures. 2023-08-17 00:17:36 -04:00
tyzillion ac7bd33f08 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-17 00:13:54 -04:00
apion 4dc7accef9 Testing mixin 2023-08-16 19:07:53 -04:00
apion 90b8923b98 Merge branch 'main' into implementing-naturally-generated-structures
# Conflicts:
#	common/src/main/resources/cobblemon-common.accesswidener
#	common/src/main/resources/mixins.cobblemon-common.json
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/CobblemonForge.kt
2023-08-15 22:17:11 -04:00
apion 9a7e4d05f0 Added JEI integration for berry mutations 2023-08-15 21:35:35 -04:00
Paul 8d981d1b05 Added brewing recipes for all the medicine 2023-08-16 08:45:13 +10:00
apion f5bf60dd37 Added some caching to berry generation 2023-08-14 15:39:53 -04:00
apion 585eb2a946 Add missing license headers 2023-08-14 14:35:52 -04:00
apion ee38a90aad Berry data update 2023-08-14 14:33:10 -04:00
apion d9fc5f5c90 Added system for controlling where berries spawn 2023-08-14 14:32:51 -04:00
apion 5d9be82e8f Added random spawn of berries. (Need system to disable certain berries from spawning) 2023-08-14 04:18:39 -04:00
apion 808a238d2a Swapped to deserializing preferred biomes to actual tags 2023-08-14 03:54:18 -04:00
Hiroku 6dc4b6af24 Merge branch 'Zackghast7-main-patch-07680' into 'main'
Updated evYield for overqwil.json

See merge request cable-mc/cobblemon!586
2023-08-14 05:12:06 +00:00
tyzillion 69908c1ab5 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-08-13 22:24:13 -04:00
tyzillion f8cdcde27c Implemented cry animations for Miltank and Treeko. Updated Pikachu and Raichu and implemented their alolan counterparts. same for Rattata and Raticate but updated theirs, also gave alolans their own poser. Gave Krabby and Kingler a placeholder walk. Added Cherry tree Torterra with petal particles. Gave shiny Gastly blue particles. Made Slugma and Magcargo's particles match their shinies. Updated Corviknight, Fennekin, Braixen, Delphox, Snivy, Servine, Serperior, Steelix, Meowth, and Persian models. Updated Meowth and Persian Models. Update Mudbray and Mudsdale textures. Implemented Alolan and Galarian, Meowth and Persian. Implemented Miltanks Mooshtank forms. 2023-08-13 22:23:14 -04:00
apion 0a505bec75 Got growth mulch working. Also added a block ticker to berry trees for more controlled growth times 2023-08-13 02:19:05 -04:00
tyzillion 948d599390 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-08-12 22:16:21 -04:00
apion f561141315 Got all mulches except growth working for berries 2023-08-12 21:04:50 -04:00
apion 8419b140a7 Berry data update 2023-08-12 20:13:06 -04:00
DoctorWafflePhD 4be1ab3cac Cry implementation for Chimchar line, and Cleffa poser tweaks, 2023-08-12 15:34:39 -05:00
apion 12824f6f4f Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/tags/CobblemonBlockTags.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/group/CobblemonItemGroups.kt
2023-08-12 14:37:47 -04:00
Zack 071278caa2 Updated evYield for overqwil.json 2023-08-12 16:37:57 +00:00
Paul 60df079794 Improve performance of berry tree rendering by only rendering berries when they are on-screen 2023-08-12 18:43:50 +10:00
apion 1924862fcb Fixed renderer again (please let this be the last time) and fixed pecha clipping 2023-08-12 00:45:00 -04:00
apion dba3de83fa Updated script to grab tint index values from asset repo, fixed renderer (Hiroku) and updated colors (again) 2023-08-11 19:48:09 -04:00
Hiroku 12a29d1289 Merge branch 'Zackghast7-main-patch-64696' into 'main'
Update wyrdeer.json with the correct evs

See merge request cable-mc/cobblemon!585
2023-08-11 22:05:15 +00:00
Zack bc85fdb778 Update wyrdeer.json with the correct evs 2023-08-11 22:00:37 +00:00
Hiroku 0d0d659ce5 Merge branch 'added-sounds' into 'main'
New Healing Machine sound, shortened Healing Machine's heal time, updated PC and UI sounds

See merge request cable-mc/cobblemon!584
2023-08-11 21:42:15 +00:00
SterrezoandHiroku 535e0b6f87 New Healing Machine sound, shortened Healing Machine's heal time, updated PC and UI sounds 2023-08-11 21:42:15 +00:00
Licious dd8cb49295 Merge branch 'spawning-improvements' into 'main'
Fixed Pokémon spawning in walls, improve canSeeSky spawn condition, use new...

See merge request cable-mc/cobblemon!583
2023-08-11 19:24:56 +00:00
Paul 2c5968986d Fixed Pokémon spawning in walls, improve canSeeSky spawn condition, use new FlatSelector selection algorithm, remove terrible width spawn condition 2023-08-11 21:12:27 +10:00
apion df30a209a5 Once again, synced the mature tree model, berry textures, and berry geographies for berries 1-24 from the asset repo 2023-08-10 21:30:01 -04:00
apion 0fea0966c0 Added berry geographies 2023-08-10 19:53:25 -04:00
apion 727fc969fa Hopefully fixed rendered? 2023-08-10 19:30:17 -04:00
apion c17ae13578 Fixed typo 2023-08-10 16:17:45 -04:00
apion 8e09051bf7 Synced some textures from the asset repo, BerryBlockRenderer changes. 2023-08-10 15:58:27 -04:00
apion 4f03643840 Synced models for berries 12-24 to asset repo 2023-08-09 19:43:42 -04:00
apion 6cdab8f296 Updated models for berries 1-12 to the ones from the asset repo, add tints for berries 1-12 2023-08-09 16:28:57 -04:00
apion fc1bade1d1 Fixed a few model typos, made berry foliage colors fall back to leaf colors 2023-08-09 14:31:39 -04:00
Licious 7b29d31009 Merge branch 'pokemon_loot_gamerule' into 'main'
Add doPokemonLoot gamerule

See merge request cable-mc/cobblemon!576
2023-08-09 07:53:17 +00:00
MiaandLicious 8820a546db Add doPokemonLoot gamerule 2023-08-09 07:53:17 +00:00
tyzillion fd5132b317 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-08 18:59:01 -04:00
Nick c4eb422722 Merge branch 'new-held-items' into 'main'
Added in five more held items

See merge request cable-mc/cobblemon!581
2023-08-08 22:48:19 +00:00
DeltricandNick d8f4638806 Added in five more held items 2023-08-08 22:48:19 +00:00
apion 544efc80d5 Update all berry data to come from the GDrive spreadsheets 2023-08-08 12:19:30 -04:00
apion 43fe97a6fe Added a growth factor to berries affected by their current biome. Also added script to generate berry data from spreadsheet data 2023-08-08 12:02:25 -04:00
tyzillion f021faf0d3 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-07 18:14:00 -04:00
Hiroku f92aa1777c Merge branch 'fix/pokemon-property-extractor' into 'main'
add createPokemonProperties(List)

See merge request cable-mc/cobblemon!578
2023-08-07 03:35:13 +00:00
FawksXandHiroku 8d864a3ff8 add createPokemonProperties(List) 2023-08-07 03:35:13 +00:00
nlingebretson 965196da2e Added placement data for berry trees 1-14 2023-08-06 13:36:35 -05:00
Paul 17a1409619 Fixed stat hex colour bleeding into text 2023-08-06 16:18:56 +10:00
Paul 51f92e1635 Further improvements to stat hex 2023-08-06 16:14:51 +10:00
Hiroku 9c3f8c9e8f Merge branch 'main' into 'main'
Fixes issue #394. Also fixes an (unlisted?) issue where special ivs/evs are not allocatable via pokegive

Closes #394

See merge request cable-mc/cobblemon!574
2023-08-06 00:44:12 +00:00
ApionandHiroku 923f40ab68 Fixes issue #394. Also fixes an (unlisted?) issue where special ivs/evs are not allocatable via pokegive 2023-08-06 00:44:12 +00:00
Paul cd7c3a0319 Merge remote-tracking branch 'origin/main' 2023-08-06 10:17:02 +10:00
Paul 8311dd8785 Fixed chance of sheared Pokémon dropping no wool 2023-08-06 09:37:53 +10:00
Hiroku f489cd096f Merge branch 'solve_playerdata_cache' into 'main'
Solve playerdata cache

See merge request cable-mc/cobblemon!575
2023-08-05 21:46:43 +00:00
Pedro SouzaandHiroku 0a4dc34895 Solve playerdata cache 2023-08-05 21:46:42 +00:00
Paul b1bc867ef8 Merge remote-tracking branch 'origin/main' 2023-08-05 17:17:29 +10:00
Paul 3f6af25afa Added dire hit and guard spec to creative menu 2023-08-05 17:17:17 +10:00
Paul 72c4cc0992 Undid battle debug stuff because I forgot, again 2023-08-05 17:10:47 +10:00
Paul b0838e88fd Put berries in the agriculture tab instead 2023-08-05 17:09:52 +10:00
Paul 925d7ce2dc Added berry interaction + bag item effects, berry eat sound hook, berry eating lang, berries to creative tab 2023-08-05 17:08:00 +10:00
tyzillion 2b562ace12 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-08-04 19:29:12 -04:00
Hiroku 9946c39de0 Merge branch 'sound_updates' into 'main'
Sound updates

See merge request cable-mc/cobblemon!573
2023-08-04 21:48:21 +00:00
LilyandHiroku 037ba953b7 Sound updates 2023-08-04 21:48:21 +00:00
Hiroku 5b7b9342e5 Merge branch 'plant-issues' into 'main'
Various new crop fixes

Closes #396 and #347

See merge request cable-mc/cobblemon!569
2023-08-04 06:35:03 +00:00
LiciousandHiroku c52b99270b Various new crop fixes 2023-08-04 06:35:03 +00:00
Paul a4000a6c0f Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2023-08-04 11:19:50 +10:00
tyzillion a56d24b9dc Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-08-01 19:33:32 -04:00
Sterrezo 607b59a978 Implemented cries for Spearow, Fearow, Arbok, Ekans, Pichu, Pikachu, Raichu
Removed empty space from Espeon's model.kt file
2023-08-02 00:47:00 +02:00
tyzillion b8eb2c708e Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-31 18:37:19 -04:00
Licious 2e67e804a7 Merge branch 'healing-items' into 'main'
Added healing items / bag items

See merge request cable-mc/cobblemon!333
2023-07-31 12:01:18 +00:00
LandonandLicious de58d11f9e Added healing items / bag items 2023-07-31 12:01:17 +00:00
tyzillion 7bffc44db0 Updated animations for Venusaur, Mankey, Tauros, Cleffa, Quagsire, Piplup, Prinplup, Empoleon, Primeape, Poppolio, Bionne, Prismarina, and Mimikyu. Tweaked some portraits. Fixed Aipom texture and Ambipom's crash. 2023-07-28 20:16:51 -04:00
tyzillion 1099ce055a Updated animations for Ponyta, Galarian Ponyta, Rapidash, Abra, Aipom, Ambipom, Chingling, Snubbull, Breloom, Gible, Gabite, Klank, Klinklang, Rookidee, Corvisquire, Quaxly, Quaquaval, Tinktaton, and Annihilape. Added cry sound to Ponyta, Galarian Ponyta, Rapidash, Quaxy, and Quaquaval cry animation. 2023-07-27 22:57:33 -04:00
tyzillion de5e958bf3 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-07-27 22:56:15 -04:00
Sterrezo ab6494a2f6 Implemented stuff properly this time. Added Fuecoco line cries.
My previous pushes were missing code in model.kt files. Everything's working now. Fuecoco line has final animations, I only added sound. I also corrected a typo in sounds.json
2023-07-26 18:56:16 +02:00
Sterrezo 967fbd2608 Placeholder cry animations for Espeon, Umbreon, Leafeon, Glaceon, Sylveon. Fixed Lucario's placeholder cry animation. 2023-07-26 17:03:54 +02:00
Paul ede62cc049 Fixed some Pokémon having eyelids blending into their eyes in GUIs (gross) 2023-07-25 21:01:05 +10:00
DoctorWafflePhD e6ffd2e16d Implemented cry animations for Turtwig, Grotle, and Torterra. 2023-07-25 04:47:07 -05:00
Hiroku ee92206b43 Merge branch '323-broken-spawn-file-spawns-random-species' into 'main'
Fixed name typos in the spawn_pool_world files result in any pokemon spawning

Closes #323

See merge request cable-mc/cobblemon!570
2023-07-25 09:29:33 +00:00
selfdotandHiroku e47dbd7b71 Fixed name typos in the spawn_pool_world files result in any pokemon spawning 2023-07-25 09:29:33 +00:00
DoctorWafflePhD 8ff0835e4e Fixed Empoleon cry. 2023-07-25 03:29:43 -05:00
DoctorWafflePhD 301df2e1d1 Implemented cry animations for the Piplup line. 2023-07-25 00:39:20 -05:00
DoctorWafflePhD 4c4f79494b Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-07-24 21:59:40 -05:00
DoctorWafflePhD bcd998d690 Implemented cry animations for Cleffa, Wooper, Quagsire, Piplup, and Mimikyu. 2023-07-24 21:52:34 -05:00
Hiroku 3548ee1172 Merge branch '355-switch-menu-retains-species-name' into 'main'
Changed battle switch menu to show pokemon display name

Closes #355

See merge request cable-mc/cobblemon!571
2023-07-24 21:45:06 +00:00
Sterrezo 7ab3c18762 Added placeholder cry animations and 19 new cries
Placeholder cry animations for Riolu, Lucario, Wooloo, Dubwool. Added 19 new cries. Updated Tauros cry. I'll update the changelog once all cries are implemented.
2023-07-24 22:43:58 +02:00
David Sadler e20eb6963f Changed battle switch menu to show pokemon display name 2023-07-24 19:37:58 +01:00
Licious 0d8589daad Merge branch 'ai-improvements' into 'main'
Various AI pathing improvements

See merge request cable-mc/cobblemon!568
2023-07-24 10:55:57 +00:00
HirokuandLicious 69fd7f5b99 Various AI pathing improvements 2023-07-24 10:55:57 +00:00
Hiroku 52a6a51d5e Merge branch 'main' into 'main'
Add player data store factory

See merge request cable-mc/cobblemon!565
2023-07-23 21:37:48 +00:00
Pedro SouzaandHiroku 7583e865ee Add player data store factory 2023-07-23 21:37:47 +00:00
Hiroku 651ed9cbcf Merge branch 'missing_messages' into 'main'
Missing messages

See merge request cable-mc/cobblemon!566
2023-07-23 21:33:26 +00:00
LilyandHiroku d45a654433 Missing messages 2023-07-23 21:33:26 +00:00
tyzillion ddb426674f Added blank crys to all Pokemon that don't have a cry atm, added blank ambients to gen 9 Pokemon. Updated sound.json with new sound references. Edited or added cry animations with sounds for Bulbasaur line, Charmander line, Squirtle line, Caterpie line, Weedle line, Pidgey line, Rattata line, Clefairy line, Tauros, and Eevee gen one line. 2023-07-23 15:26:36 -04:00
tyzillion 6c93a6c1a8 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-23 15:20:42 -04:00
Hiroku a69042d892 Merge branch 'ghost-bug-item-dupe-fix' into 'main'
Ghost bug item dupe fix

See merge request cable-mc/cobblemon!567
2023-07-21 23:28:01 +00:00
MoeBoy76andHiroku 9007a75d69 Ghost bug item dupe fix 2023-07-21 23:28:01 +00:00
tyzillion 28d0ae9b75 Fixed Wishiwashi crash. Resized Turtwig. Added Paldea starters to starter select. Added blank crys to all Pokemon, added blank ambients to gen 9 Pokemon. Updated sound.json with new sound references. 2023-07-20 21:05:39 -04:00
tyzillion 742a6b244f Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-07-20 19:18:44 -04:00
Hiroku bbf9836212 Merge branch 'pc-upgrade-moar-ram' into 'main'
PC Recipe Update

See merge request cable-mc/cobblemon!559
2023-07-20 21:54:43 +00:00
dhi_holoandHiroku 0b08044298 PC Recipe Update 2023-07-20 21:54:42 +00:00
Hiroku e53aa10f79 Merge branch 'added-sounds' into 'main'
Renamed cries for the new system, added cries for Gen 9 starters and evos, made all ambients blank

See merge request cable-mc/cobblemon!564
2023-07-20 21:54:33 +00:00
SterrezoandHiroku 1393904bc0 Renamed cries for the new system, added cries for Gen 9 starters and evos, made all ambients blank 2023-07-20 21:54:33 +00:00
tyzillion 4c5fcf5310 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-07-20 15:34:43 -04:00
Paul 90d51385b3 Nicknaming fixes 2023-07-18 19:09:31 +10:00
Hiroku 960454794d Merge branch 'cry-more' into 'main'
Implemented improved Pokémon cry system for battles and sendout, migrated Treecko and Pidgeot to it

See merge request cable-mc/cobblemon!563
2023-07-18 07:29:11 +00:00
Hiroku 0648185b38 Implemented improved Pokémon cry system for battles and sendout, migrated Treecko and Pidgeot to it 2023-07-18 07:29:11 +00:00
tyzillion aaf5f4d354 Multiple Pokemon resized. Changed walkspeed for Bergmite, Linoone, Wingull, Turtwig line and Piplup line. Added flying ai to Cottonee, Whimsicott, and Kricketune. Made Avalugg properly float. Fixed Tinktatink line not using battle idle. Fixed Numels texture issues. Fixed Braixens texture. Edited hitbox for Granbull, Skeledirge, Maschiff, and Mabosstiff. Added implemented to json for Surskit line and Phanpy line. Fixed Caterpie animation. 2023-07-17 20:19:52 -04:00
Lily f6cbadff61 mulch can now be used on berry trees and removed using a shovel 2023-07-17 20:05:10 -04:00
tyzillion 5414cbcc14 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-07-16 22:10:53 -04:00
tyzillion 3104239a9f Implemented Wishiwashi, Galarian Zigzagoon, Galarian Linoone, and Obstagoon. Updated animations and models for Barboach, Wailord, Illumise, Volbeat, Scorbunny, Mimikyu, Turtwig, Grotle, Torterra, Kricketot, Kricketune, Bergmite, Avalugg , Shroomish, Bonsly, Mudsbray, Mudsdale, Arrokuda, and Barraskewda. Added emissive for Sharpedo. Tweaked walk speeds on Drowzee, Murkrow, Turtwig, Grotle, and Torterra. Added flying behavior to Honchkrow. Actually fixed Cacnea's size. 2023-07-16 22:10:41 -04:00
Lily e10e048e2c Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlockEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
2023-07-16 20:18:05 -04:00
DoctorWafflePhD 32a360ba0c Updated Stufful and Bewear's model and animation files. 2023-07-16 17:32:04 -05:00
DoctorWafflePhD 99d190abff Fixed Vivillon wings issue for Icy Snow and High Plains patterns. 2023-07-16 16:54:46 -05:00
tyzillion 33aa3043c6 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-16 15:55:33 -04:00
Licious efb202070c Merge branch 'main-patch-ce51' into 'main'
add mulch to creative inventory

See merge request cable-mc/cobblemon!560
2023-07-16 18:09:08 +00:00
Lily 23fdda700c add mulch to creative inventory 2023-07-16 16:40:31 +00:00
tyzillion 4577c36afb Implemented Phanpy, Donphan, Buizel, Floatzel, Zigzagoon, Linoone, Cottonee, and Whimsicott. 2023-07-16 00:43:37 -04:00
tyzillion 6d9d5d1533 Implemented Snubbull, Granbull, Maschiff, and Mabosstiff. 2023-07-15 02:03:18 -04:00
tyzillion a6cc7b77bb Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-14 18:19:33 -04:00
Licious 67251d3724 Merge branch 'shedninja-ball-fix' into 'main'
make Shedninja be in the actualy Pokeball consumed when evolving from Nincada

See merge request cable-mc/cobblemon!558
2023-07-14 22:07:23 +00:00
MoeBoy76 9fba594ca5 make Shedninja be in the actualy Pokeball consumed when evolving from Nincada 2023-07-15 07:50:21 +10:00
Licious 967e714c37 Uncomment code used for debug. 2023-07-14 10:10:22 +01:00
Nick 8fac0e0697 Merge branch 'healing-machine-fixes' into 'main'
Healing machine rendering fixes

See merge request cable-mc/cobblemon!555
2023-07-13 21:42:42 +00:00
LiciousandNick cdde54c483 Healing machine rendering fixes 2023-07-13 21:42:42 +00:00
Nick 59ea3bb3f4 Merge branch 'party-swap-click-sound' into 'main'
Add missing sound to the party swap icon.

Closes #350

See merge request cable-mc/cobblemon!554
2023-07-13 21:39:34 +00:00
Licious cc4456e1e3 Add missing sound to the party swap icon. 2023-07-13 16:17:56 +01:00
tyzillion 3ef2eca934 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-12 18:11:01 -04:00
Hiroku 36331c733b Merge branch 'pasture-connect-to-fence' into 'main'
Pasture block fence connection support

See merge request cable-mc/cobblemon!551
2023-07-12 11:44:10 +00:00
LiciousandHiroku be25dc8999 Pasture block fence connection support 2023-07-12 11:44:10 +00:00
Hiroku 1770b44547 Merge branch 'stat-submenu-click-sounds' into 'main'
Stat submenu click sounds

Closes #342

See merge request cable-mc/cobblemon!552
2023-07-12 09:01:33 +00:00
LiciousandHiroku e058a4ac86 Stat submenu click sounds 2023-07-12 09:01:33 +00:00
Hiroku 09f4d17e15 Merge branch 'who-let-dhi-cook' into 'main'
Vivichoke, Roasted Leek, Pasture Particle, and Saturation

See merge request cable-mc/cobblemon!550
2023-07-12 07:49:43 +00:00
dhi_holoandHiroku 5d57465a5f Vivichoke, Roasted Leek, Pasture Particle, and Saturation 2023-07-12 07:49:43 +00:00
Nick e1e0635d5d Merge branch 'pasture-safe-block-detection-improvement' into 'main'
Improve pasture spawn conditions

Closes #327

See merge request cable-mc/cobblemon!549
2023-07-11 22:31:12 +00:00
LiciousandNick 2652cfa6fa Improve pasture spawn conditions 2023-07-11 22:31:12 +00:00
tyzillion e81eaa5b57 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-11 18:25:59 -04:00
Hiroku a33978d5a5 Merge branch 'apricorn-seed-rename' into 'main'
Rename Apricorn seeds to sprouts

Closes #324

See merge request cable-mc/cobblemon!548
2023-07-11 21:29:32 +00:00
LiciousandHiroku 78ff7628a6 Rename Apricorn seeds to sprouts 2023-07-11 21:29:32 +00:00
Hiroku bfa685a434 Merge branch 'pasture-item-drop' into 'main'
Fixes the pasture block not dropping itself on break and having no dedicate...

Closes #339

See merge request cable-mc/cobblemon!547
2023-07-11 20:53:53 +00:00
LiciousandHiroku c9aad028ac Fixes the pasture block not dropping itself on break and having no dedicate... 2023-07-11 20:53:53 +00:00
Nick 551b2f9ea6 Merge branch 'no-more-ghost-cries' into 'main'
Prevent Pokémon cries from playing while a Pokémon is inside a Pokéball being captured.

See merge request cable-mc/cobblemon!546
2023-07-11 18:21:24 +00:00
Licious 3bc44b3ba3 Prevent Pokémon cries from playing while a Pokémon is inside a Pokéball being captured. 2023-07-11 18:47:50 +01:00
tyzillion edc5ce5fb4 Implemented Fuecoco, Crocalor, Skeledirge, Quaxly, Quaxwell, and Quaquaval. Added a way to disable x or y head movement on the look animation. 2023-07-10 23:11:05 -04:00
tyzillion b1b7d3fea2 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-07-10 18:26:03 -04:00
tyzillion 7ee88cefe5 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation1/pidgey.json
#	common/src/main/resources/data/cobblemon/species/generation1/pikachu.json
#	common/src/main/resources/data/cobblemon/species/generation1/zubat.json
#	common/src/main/resources/data/cobblemon/species/generation2/pichu.json
#	common/src/main/resources/data/cobblemon/species/generation2/wooper.json
#	common/src/main/resources/data/cobblemon/species/generation5/joltik.json
2023-07-10 18:23:45 -04:00
Soul Eternum 2cfa9f8985 Added a fallback locator for particle animations 2023-07-10 16:38:51 -05:00
Nick ea89e64e73 Merge branch 'remove-clones-after-battle' into 'main'
Fix battle clones persisting in the world

Closes #328

See merge request cable-mc/cobblemon!545
2023-07-10 17:17:25 +00:00
LiciousandNick dd788d9851 Fix battle clones persisting in the world 2023-07-10 17:17:25 +00:00
Nick 7894e1895b Merge branch 'battle-stat-awards-fix' into 'main'
Fix EV calculation

Closes #231

See merge request cable-mc/cobblemon!544
2023-07-10 17:05:23 +00:00
Licious 70ee9617ed Fix another crash due to usage of param before init 2023-07-10 12:52:07 +01:00
Licious 848cdcfc66 Fix crash due to usage of param before init 2023-07-10 12:27:54 +01:00
Hiroku dd4c289755 Merge branch '247-master-1-19-3-shoulder-pokemon-issues' into 'main'
Shoulder fixes & changes.

See merge request cable-mc/cobblemon!538
2023-07-10 10:52:49 +00:00
LiciousandHiroku 57cb10d5ce Shoulder fixes & changes. 2023-07-10 10:52:49 +00:00
Licious 9282f94a85 Fix EV calculation 2023-07-10 11:31:49 +01:00
Hiroku 8c7eddccbe Merge branch 'loadFromJSON/NBT-companions' into 'main'
add companion object methods for these for better syntax

See merge request cable-mc/cobblemon!542
2023-07-10 02:56:17 +00:00
Oliver Whitehead 06be0cc40b add companion object methods for these for better syntax 2023-07-10 03:21:50 +01:00
Hiroku 67fe5d0822 Merge branch 'fix-pipeline' into 'main'
fix pipeline

See merge request cable-mc/cobblemon!541
2023-07-10 02:16:45 +00:00
Oliver Whitehead eba4162db4 fix pipeline 2023-07-10 03:14:26 +01:00
tyzillion 5bab095036 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-09 21:56:38 -04:00
tyzillion c394f56548 Implemented Tinkatink, Tinkatuff, Tinkaton, Yamper, and
Boltund.
2023-07-09 21:55:54 -04:00
Hiroku 5dcbb271a5 Merge branch 'render-refactor' into 'main'
Render refactor

See merge request cable-mc/cobblemon!537
2023-07-09 23:48:57 +00:00
Hiroku e7a5c23204 Render refactor 2023-07-09 23:48:56 +00:00
Hiroku e9d4827a9b Merge branch 'pasture-not-graveyard' into 'main'
Fix being able to place fainted Pokémon in the pasture.

Closes #334

See merge request cable-mc/cobblemon!540
2023-07-09 22:37:18 +00:00
LiciousandHiroku 02898701b9 Fix being able to place fainted Pokémon in the pasture. 2023-07-09 22:37:17 +00:00
Hiroku 0b8488ab0f Merge branch 'terralith-tag-fixes' into 'main'
Update Terralith biome tags

Closes #331

See merge request cable-mc/cobblemon!539
2023-07-09 21:35:50 +00:00
LiciousandHiroku bd3968c7c5 Update Terralith biome tags 2023-07-09 21:35:49 +00:00
tyzillion dc270bb64e Implemented Volbeat, Illumise, Galarian Ponyta, and Galarian Rapidash. Fixed Wingull's animation typo. Implemented Wingull and Pelippers water surface animations. Made quirks play less frequently on Ponyta and Farfetched. Added "implemented": true, to Shroomish, Breloom, Hoothoot, Noctowl, Numel and Camerupt's species json. Fixed Serperior's crash. Exeggcute model and animations updated. Model updates for Chansey, Blissey. Texture update for Happiny. 2023-07-09 05:22:04 -04:00
tyzillion 8c6c3a6ca0 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-07-08 19:34:10 -04:00
Hiroku a5cb807bfa Merge branch '1.20.x' into 'main'
1.20.1

See merge request cable-mc/cobblemon!535
2023-07-08 23:10:22 +00:00
LiciousandHiroku afafe35d16 1.20.1 2023-07-08 23:10:22 +00:00
Hiroku 99c94a1765 Merge branch 'p4-leaves' into 'main'
New colour

See merge request cable-mc/cobblemon!536
2023-07-08 23:04:03 +00:00
dhi_holoandHiroku f12fd1bb93 New colour 2023-07-08 23:04:02 +00:00
Hiroku 621280df50 Merge branch 'added-sounds' into 'main'
New UI sounds, new evolution sounds, cries for Caterpie, Weedle and Pidgey lines

See merge request cable-mc/cobblemon!534
2023-07-08 12:48:20 +00:00
SterrezoandHiroku 68d13abb1d New UI sounds, new evolution sounds, cries for Caterpie, Weedle and Pidgey lines 2023-07-08 12:48:20 +00:00
Paul 897bf4e132 Import fix 2023-07-08 11:01:54 +10:00
Paul 5944313fe8 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
2023-07-08 11:00:42 +10:00
Hiroku aa078c1269 Merge branch 'ys/fix-waterloggable-pasture' into 'main'
Make pasture block implement waterloggable (dk how I missed this)

See merge request cable-mc/cobblemon!533
2023-07-07 23:03:09 +00:00
YaseenandHiroku 5ce0c2a749 Make pasture block implement waterloggable (dk how I missed this) 2023-07-07 23:03:09 +00:00
Nick 1665032341 Merge branch 'added-sounds' into 'main'
New Pokeball sounds, tweaks to volumes in code

See merge request cable-mc/cobblemon!531
2023-07-07 15:45:25 +00:00
SterrezoandNick 6739b2d1ac New Pokeball sounds, tweaks to volumes in code 2023-07-07 15:45:25 +00:00
tyzillion ac05f24646 Added Glimmora's battle idle. Fixed Riolu and Lucario models. Tweaked Riolu and Lucario's scale and hitbox. Updated Wingull and Pelipper's animations. 2023-07-06 23:27:09 -04:00
tyzillion 2b3045594b Deleted shoulder effects, learn to make potions, losers.
(You can always add them back via datapacks!)
2023-07-06 21:14:53 -04:00
tyzillion 86d8fb01ef Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-06 20:56:09 -04:00
tyzillion fe9a1c7e99 Implemented Annihilape, Squawkabilly, Shroodle, and Grafaiai. Updated Rapidash, Taillow, and Swellow's animation. Updated Mankey, Primeape, Haunter, Voltorb, Electrode, Riolu, Lucario, and Serperior with remodels/revamps. 2023-07-06 20:55:38 -04:00
Hiroku 0bb782f314 Merge branch 'Vivichoke' into 'main'
Added Vivichokes

See merge request cable-mc/cobblemon!527
2023-07-07 00:43:42 +00:00
Hiroku 452ff46815 Added Vivichokes 2023-07-07 00:43:42 +00:00
Paul ee9fafe4fb Merge remote-tracking branch 'origin/main'
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
2023-07-07 09:31:03 +10:00
Hiroku 65a193bb84 Merge branch 'ai-fix' into 'main'
Ai fix

See merge request cable-mc/cobblemon!526
2023-07-06 23:09:20 +00:00
LilyandHiroku 0a922a91b0 Ai fix 2023-07-06 23:09:19 +00:00
Paul 98810914fa Merge remote-tracking branch 'origin/main' into tethers 2023-07-07 09:01:55 +10:00
Paul 75062f5c16 Removed debug stuff 2023-07-07 08:57:02 +10:00
tyzillion a9735c69cb Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-06 15:57:59 -04:00
Paul adaf17ee4f Merge remote-tracking branch 'origin/main' 2023-07-06 21:26:12 +10:00
Hiroku 307196e201 Merge branch 'aspects-are-triggering' into 'main'
Aspects are (not) triggering

See merge request cable-mc/cobblemon!499
2023-07-06 11:15:55 +00:00
MoeBoy76andHiroku 4e225afc6e Aspects are (not) triggering 2023-07-06 11:15:55 +00:00
tyzillion bf401d1ff0 Implemented Arrokuda, Barraskewda, Bunnelby, and Diggersby. Edited Wingull and Pelipper's scale and hitbox. 2023-07-05 23:13:16 -04:00
tyzillion fb6e65d868 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-05 14:17:04 -04:00
Hiroku 9ccff2e547 Merge branch 'added-sounds' into 'main'
Added cries for Gen 1-4 and 8 starters and evolutions

See merge request cable-mc/cobblemon!525
2023-07-05 10:41:21 +00:00
SterrezoandHiroku 673baa178f Added cries for Gen 1-4 and 8 starters and evolutions 2023-07-05 10:41:21 +00:00
Paul 59242d3020 Little cleanup with mints 2023-07-05 20:15:10 +10:00
tyzillion aa04b27500 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-04 22:33:10 -04:00
tyzillion 954d6fa156 Added emissives to Yamask and Cofagrigus eyes. Made Yamask and Cofagrigus fly. Implemented Skrelp, Dragalge, Patrat, Watchog, Mareep, Flaaffy, and Ampharos. Made Wooloo and Dubwool smaller. Fixed Varoom and Revavroom's wheel spinning when changing from walk to idle. Updated model and texture of Mewtwo and Mew. 2023-07-04 22:32:47 -04:00
tyzillion dd2d22b793 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-07-04 13:36:14 -04:00
Hiroku 53156bcfdb Merge branch 'ys/waterlog-fix' into 'main'
make default state of pc water logged false

See merge request cable-mc/cobblemon!524
2023-07-03 21:16:17 +00:00
YaseenandHiroku 7fae9ac61f make default state of pc water logged false 2023-07-03 21:16:17 +00:00
Paul e9924a8920 Fixed R key glitchiness 2023-07-03 13:26:43 +10:00
Paul d2590b05c5 Remove PC -> pasture icon hover if there's no room to add more pokemon 2023-07-03 11:50:35 +10:00
Xylopia 03bfce766d Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/repository/PokemonModelRepository.kt
2023-07-02 20:15:58 -04:00
Xylopia fab9eed4e1 Added Yamask and Cofagrigus 2023-07-02 20:13:42 -04:00
tyzillion 123ed403ae Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-07-02 20:08:19 -04:00
Hiroku 8557096359 Merge branch 'implement_pokemon' into 'main'
Implemented and Updated MANY models.

See merge request cable-mc/cobblemon!522
2023-07-02 23:52:40 +00:00
TyzillionandHiroku 66592af8ef Implemented and Updated MANY models. 2023-07-02 23:52:40 +00:00
tyzillion 0c763e3715 Implemented Roggenrola, Boldore, Gigalith, Numel, Camerupt, Shinx, Luxio, Luxray, Aipom, Ambipom, Hoothoot, Noctowl, Wingull, and Pelipper. Added placeholder wing flying animations to Articuno, Zapdos, Moltres, Scyther, Scizor, Golbat, and Crobat. Updated Model of Mr.Mime, Cacnea, Prinplup, Empoleon, Hypno, Cacnea, and Farfetchd. Updated Animation of Cacnea, Cacturne, Scatterbug, Spewpa, Garganacl, Farfetchd, Ponyta, Drowzee, Piplup, Prinplup, and Empoleon. Mr_Mime texture updated. Tweaked UI frames of Exeggutor. Added particles to Spewpa. Gave Alolan Vulpix and Ninetales its own poser. 2023-07-02 19:23:49 -04:00
Paul 8c5fe15835 Fixed diameter vs radius issue in anticluster pasture code 2023-07-02 19:51:17 +10:00
Paul 30dbaa0585 Changelog for pastures [skip-ci] 2023-07-02 19:03:31 +10:00
Paul 480a3894f8 Added pasture block to blocks creative tab 2023-07-02 19:02:15 +10:00
Paul d3ffbd654b Merge remote-tracking branch 'origin/main' into tethers
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/VaryingRenderableResolver.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/config/CobblemonConfig.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
2023-07-02 18:56:34 +10:00
Paul 43fcdf3f1b Finalized pasture block pass 1 2023-07-02 18:53:14 +10:00
DoctorWafflePhD b52a0a0ebd Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-07-01 20:53:16 -05:00
tyzillion 9c1edea469 Updated Changelog. 2023-07-01 17:23:52 -04:00
tyzillion 87d8c17f4f Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/ArcanineModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/ElectabuzzModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/FearowModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/ScytherModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/ElekidModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen3/LotadModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen4/ElectivireModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen4/LickilickyModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen7/DecidueyeModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen7/RowletModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen9/WalkingwakeModel.kt
2023-07-01 17:22:13 -04:00
Village 75f36825af 🌱 2023-07-01 14:21:06 -04:00
Paul 506aafbdf0 Merged from main and added berries to creative menu 2023-07-01 21:25:20 +10:00
Paul 814bba5273 Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/CobblemonEvents.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/VaryingRenderableResolver.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/resources/cobblemon-common.accesswidener
2023-07-01 21:08:11 +10:00
Paul b5475b0e3e Multi-axis rotations on berries, cleaned rendering logic for pokeballs and berries, cleaned berry block entity logic 2023-07-01 21:05:32 +10:00
Paul 3ab5a4daf3 Use less inflation on torchic male form since it does every direction 2023-07-01 15:21:48 +10:00
Paul f7672e66ab Fixed Torchic gender difference not being visible due to pane with no inflation 2023-07-01 15:09:02 +10:00
Paul 61d926a23d Fixed Varoom and Revavroom crashing asset loading due to animation typos 2023-07-01 15:03:34 +10:00
Paul 5ab364f0ab Fixed Farfetch'd not having a Galarian form 2023-07-01 15:02:49 +10:00
Hiroku 182f5ce1f9 Merge branch 'pokeball-despawn' into 'main'
poke-balls now despawn after 30 seconds to prevent potential lag machines

See merge request cable-mc/cobblemon!521
2023-07-01 02:00:38 +00:00
LilyandHiroku a05bc8887e poke-balls now despawn after 30 seconds to prevent potential lag machines 2023-07-01 02:00:36 +00:00
tyzillion 734d2b2414 Added emissives to Lanturn and Relicanth. Made Corviknight 5 blocks big. Made Gorebyss and Huntail swim faster. 2023-06-30 14:16:26 -04:00
tyzillion 0763a96f34 Updated models for Garganacl and Magikarp Male. Updated animation for Mudbray, Mudsdale, Varoom, and Revavroom. 2023-06-30 13:18:05 -04:00
Veraxiel 76640c40ae Fixed 0601_klinklang.json 2023-06-29 21:50:55 +00:00
DoctorWafflePhD 2ae4ba68e4 Dugtrio also no longer floats in water. 2023-06-29 12:49:14 -05:00
DoctorWafflePhD 750adabba1 Diglett now sinks to the ocean floor instead of floating. Not that we intend to have Diglett in the water anyways, but...
Dodrio's legs move at a more appropriate pace when walking.
Slowpoke's placeholder leg movements are more noticable.
2023-06-29 12:48:42 -05:00
Hiroku 3404065bf0 Merge branch 'background-fixup' into 'main'
it works!!

See merge request cable-mc/cobblemon!519
2023-06-28 10:16:44 +00:00
dhi_holoandHiroku ba6eec0fad it works!! 2023-06-28 10:16:44 +00:00
Hiroku ff81bee266 Merge branch '314-shedinjarecoverissue' into 'main'
Resolve "Shedinja cannot recover naturally."

Closes #314

See merge request cable-mc/cobblemon!520
2023-06-28 10:16:21 +00:00
IslanaandHiroku 6926ae1be1 Resolve "Shedinja cannot recover naturally." 2023-06-28 10:16:21 +00:00
Hiroku 5ce290e792 Merge branch 'animation-refreactor' into 'main'
Animation refractor

See merge request cable-mc/cobblemon!480
2023-06-28 09:54:17 +00:00
WaterpickerandHiroku 5a7391ff69 Animation refractor 2023-06-28 09:54:17 +00:00
DoctorWafflePhD a914a69051 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-28 00:41:47 -05:00
DoctorWafflePhD beacc319b9 Fixed model issues on Scolipede and Espathra. 2023-06-28 00:41:38 -05:00
tyzillion c48b7b980b Updated Elekid line model overhaul. Fixed Whirlpede and Scolipede sleep crash and implemented their battle idles. Fixed Floragato's t-pose issue. Gave Wooper his floating and swimming poses. Dusknoir doesn't move his eye while in battle but will still look at the player outside of it. Ceruledge now has his passive blades outside of battle and his big blades in battle. 2023-06-28 00:34:18 -04:00
nlingebretson c60a3939a4 We sent the berries to flavor town (not clickbait) - added flavor values to berries and pointed each berry tree to use correct models for flowering berries 2023-06-27 20:53:54 -05:00
tyzillion d553483dcb Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-06-27 20:14:11 -04:00
Hiroku 0cd33621b2 Merge branch 'forge-maven-deployment-fix' into 'main'
Fixes forge maven deployments being hit with a missing access widener error

See merge request cable-mc/cobblemon!518
2023-06-27 08:28:10 +00:00
Nick 765421fc5f Fixes forge maven deployments being hit with a missing access widener error 2023-06-26 23:03:49 -07:00
DoctorWafflePhD c9f1a61bf5 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-26 04:20:50 -05:00
DoctorWafflePhD 84d58bf2d9 Changed the sizes of many Pokémon.
Fixed missing texture with Poké Ball Vivillon.
Fixed AI on a handful of Pokémon.
2023-06-26 04:20:37 -05:00
Hiroku 4b6cef26bd Merge branch 'ys/pokeedit-command-2.0' into 'main'
Add support for editing IVs and EVs in pokeedit

Closes #306

See merge request cable-mc/cobblemon!501
2023-06-25 22:59:51 +00:00
YaseenandHiroku ccbae294f4 Add support for editing IVs and EVs in pokeedit 2023-06-25 22:59:51 +00:00
Hiroku 82f1ce8931 Merge branch 'creative-categories' into 'main'
Creative categories

See merge request cable-mc/cobblemon!514
2023-06-25 21:49:10 +00:00
LilyandHiroku 474491ebff Creative categories 2023-06-25 21:49:10 +00:00
Hiroku 60b36a03d4 Merge branch 'text_changes_and_fixes' into 'main'
small text changes:

See merge request cable-mc/cobblemon!515
2023-06-25 21:47:44 +00:00
LilyandHiroku 25bb99b68d small text changes: 2023-06-25 21:47:44 +00:00
nlingebretson c0c49cc951 Updated growth time and refresh rate in berry data files, replacing the previous lifecycle data 2023-06-25 12:39:26 -05:00
nlingebretson fe08a94540 Updated Base Yield and Bonus Yield (bonus is temporary stored in growthFactors - will move to preferred biomes) 2023-06-25 11:19:32 -05:00
Hiroku c644f610da Merge branch 'main-patch-15d5' into 'main'
changed healing machine messages to action bar

See merge request cable-mc/cobblemon!512
2023-06-25 03:36:35 +00:00
Hiroku 88c38f59b0 Merge branch 'mimikyu-shoulder' into 'main'
mimikyu shoulder mount!!!

See merge request cable-mc/cobblemon!513
2023-06-25 03:36:12 +00:00
LilyandHiroku 36f9062f45 mimikyu shoulder mount!!! 2023-06-25 03:36:11 +00:00
Lily 26a49c8327 changed healing machine messages to action bar 2023-06-25 01:19:16 +00:00
Hiroku d8b66e01df Merge branch 'battle-crash-logs' into 'main'
Handle battle crashes and log them

See merge request cable-mc/cobblemon!509
2023-06-25 00:18:51 +00:00
DeltricandHiroku af14c7d505 Handle battle crashes and log them 2023-06-25 00:18:51 +00:00
Hiroku 4148773881 Merge branch 'fixes-and-api' into 'main'
Various fixes and API enhancements

See merge request cable-mc/cobblemon!508
2023-06-24 06:11:40 +00:00
DeltricandHiroku 6ffdd5c3c7 Various fixes and API enhancements 2023-06-24 06:11:40 +00:00
Hiroku 7d253c505a Merge branch 'whatsy-main-patch-45454' into 'main'
Update CHANGELOG.md

See merge request cable-mc/cobblemon!507
2023-06-23 23:56:17 +00:00
Lily 827ea20bd7 Update CHANGELOG.md 2023-06-23 23:41:04 +00:00
Nick 63689e14a0 Merge branch 'fix-battle-messages' into 'main'
Fix battle messages

See merge request cable-mc/cobblemon!506
2023-06-23 21:44:33 +00:00
LilyandNick b82c40feb2 Fix battle messages 2023-06-23 21:44:33 +00:00
Paul ed85324b3a Removed a bunch of angry recipes and advancements that I already deleted once already 2023-06-23 22:15:06 +10:00
Paul 0ab9b19c4b Merge remote-tracking branch 'origin/main' into revival-herbs
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonMechanics.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BigRootBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/EnergyRootBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/RemedyItem.kt
#	common/src/main/resources/data/cobblemon/loot_tables/blocks/medicinal_leek_crop.json
2023-06-23 22:06:33 +10:00
Paul 50a33598e8 Resolved startup errors by removing advancements and recipes that aren't in yet 2023-06-23 22:03:56 +10:00
Hiroku ef81050be9 Merge branch 'fix-pc-command' into 'main'
fix no opening sound when using /pc

See merge request cable-mc/cobblemon!505
2023-06-23 02:06:39 +00:00
LilyandHiroku cb95aa2466 fix no opening sound when using /pc 2023-06-23 02:06:39 +00:00
Nick a4fb1e1e6e Merge branch 'revival-herbs' into 'main'
Many crops

See merge request cable-mc/cobblemon!503
2023-06-23 00:48:00 +00:00
HirokuandNick 1c4b146500 Many crops 2023-06-23 00:47:59 +00:00
Hiroku 6fbe1774f8 Update README.md [skip-ci] 2023-06-22 23:26:26 +00:00
Hiroku 85960ff726 Update README.md 2023-06-22 23:26:01 +00:00
tyzillion df35528a53 Updated Dusknoir animation and Model. Framed and modified sizes and hitboxes of multiple Pokemon. 2023-06-21 19:22:26 -04:00
tyzillion 405f6e91de Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-06-21 19:11:22 -04:00
Nick 254b4bee80 Merge branch 'species-form-visibility-changes' into 'main'
Species/FormData property visibility changes.

See merge request cable-mc/cobblemon!502
2023-06-21 16:40:15 +00:00
LiciousandNick 489357ee91 Species/FormData property visibility changes. 2023-06-21 16:40:14 +00:00
Paul 600669e1c5 Added a bunch of items, improved PokemonInteractiveItem, remedy datapack logic 2023-06-19 07:53:12 +10:00
Hiroku d3ff4984fe Update CHANGELOG.md [skip-ci] 2023-06-18 00:29:47 +00:00
Paul f61a30ab26 Merge remote-tracking branch 'origin/xvitarecipes' into revival-herbs
# Conflicts:
#	common/src/main/resources/data/cobblemon/loot_tables/blocks/revival_herb.json
2023-06-18 09:10:31 +10:00
Paul aa77473288 Make mints more rare for realsies 2023-06-18 08:36:04 +10:00
Paul 2f837b34fc Fixed energy and big roots not dropping anything 2023-06-17 21:27:06 +10:00
Paul d7ca55597e Made mints rarer 2023-06-17 21:25:45 +10:00
Paul 331278d1b3 Finalized brewing mechanism, added incorrectly-textured medicinal brew w/ recipe 2023-06-17 20:13:35 +10:00
DoctorWafflePhD ac072e5a88 Adjusted walk speeds of Charcadet line, Exeggcute line, Popplio line, and Lickitung line. 2023-06-17 02:35:45 -05:00
Paul 669a119bf5 Merge remote-tracking branch 'origin/custom-brewing-basis-1.19.3' into revival-herbs
# Conflicts:
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/CobblemonForge.kt
2023-06-17 12:24:34 +10:00
DoctorWafflePhD ca0b098866 Merge branch 'main' into implement_pokemon 2023-06-16 21:11:40 -05:00
DoctorWafflePhD 3fd13dd47c Chingling now shoulder-mountable (and doesn't sleep on your shoulder). Also fixed advancements background. 2023-06-16 21:10:28 -05:00
Paul 3813cdec4b Big Root / Energy Root polish and API 2023-06-17 12:07:23 +10:00
Paul f6380a72e3 Merge remote-tracking branch 'origin/main' into revival-herbs 2023-06-17 11:58:57 +10:00
Hiroku 6fe48faff8 we are snapshotting (gradle.properties) 2023-06-17 01:37:46 +00:00
Hiroku 68b9f09697 Prevent subsequent stages from running CI if skipped first 2023-06-17 01:21:36 +00:00
Hiroku 2080f2f109 Update CI not to run for forks 2023-06-17 01:18:23 +00:00
DoctorWafflePhD 38bc7e1bde Merge branch 'main' into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-06-16 17:55:00 -05:00
DoctorWafflePhD 6497d770dd Chingling now shoulder-mountable 2023-06-16 17:48:32 -05:00
Paul 933ba72d04 Merge remote-tracking branch 'origin/main' into revival-herbs 2023-06-16 22:53:22 +10:00
Paul 7f19026c71 Update Big Root / Energy Root behaviours 2023-06-16 22:51:14 +10:00
Paul 64e5e9aeb0 Removed gloom textures that should not have been there 2023-06-16 18:07:39 +10:00
Paul f6635b5575 Merge remote-tracking branch 'origin/main' into new-commands 2023-06-16 17:30:13 +10:00
Paul 77fa5f5787 Improved clear party command 2023-06-16 17:29:58 +10:00
dhi_holo 12ad46935c im sorry
some day i may not forget
2023-06-16 17:19:16 +10:00
dhi_holo c3b54fc55b Merge branch 'main' into xvitarecipes 2023-06-16 17:16:51 +10:00
Hiroku 46101206f7 Merge branch 'chromatemp' into 'main'
Small Changelog fix

See merge request cable-mc/cobblemon!500
2023-06-16 07:14:18 +00:00
HexeChromaandHiroku 81150c5ef6 Small Changelog fix 2023-06-16 07:14:18 +00:00
Paul 10e8d702c2 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
2023-06-16 15:54:16 +10:00
Paul f5ba14ae65 Hoes for apricorn tree leaves and fixed those leaves looking bad on fast graphics 2023-06-16 15:54:04 +10:00
DoctorWafflePhD 2410fa6578 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen7/CutieflyModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen7/RibombeeModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen9/GlimmetModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen9/GlimmoraModel.kt
2023-06-16 00:11:17 -05:00
DoctorWafflePhD 32e1623998 Implemented animations for Cutiefly line and Glimmet line. 2023-06-16 00:08:38 -05:00
Hiroku 5ef6c587a8 Merge branch 'HexeChroma-main-patch-93627' into 'main'
Update CobblemonClient.kt

See merge request cable-mc/cobblemon!498
2023-06-16 03:19:52 +00:00
HexeChromaandHiroku 2ba484024c Update CobblemonClient.kt 2023-06-16 03:19:51 +00:00
Paul 687a4aa935 Undo some changes that were not intended for this branch 2023-06-16 12:07:43 +10:00
Paul 5cc297c4af Merge conflict resolution 2023-06-16 11:31:24 +10:00
tyzillion 31799ad144 Updated animations of Venipede, Whirlipede, Scolipede, Cutiefly, Ribombee, Falinks,Exeggcute, Exeggutor, Lickitung, Lickilicky, Breloom, Chimecho, Chingling, Golett, Glimmet, and Glimmora.
Updated Models of Cutiefly, Ribombee, Venipede, Whirlipede, Scolipede, and Breloom.
2023-06-15 21:10:09 -04:00
tyzillion b60f7ba22e Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-06-15 21:09:28 -04:00
Hiroku ccd4a5237d Merge branch 'new-commands' into 'new-commands'
New command to adjust pokemon walk speed.

See merge request cable-mc/cobblemon!487
2023-06-16 01:04:11 +00:00
DaBatandHiroku 6ad02118a9 New command to adjust pokemon walk speed. 2023-06-16 01:04:10 +00:00
Paul 89bb983925 Restore changelog work overwritten by last merge 2023-06-16 11:02:15 +10:00
Hiroku de2dc38778 Merge branch 'added-sounds' into 'main'
Added cries for Gen 5-7 starters

See merge request cable-mc/cobblemon!491
2023-06-16 01:00:56 +00:00
SterrezoandHiroku fbcaa7353f Added cries for Gen 5-7 starters 2023-06-16 01:00:56 +00:00
Hiroku abf4f97f00 Merge branch 'interpreter_refactory' into 'main'
Battle window improvements and interpreter refactory

See merge request cable-mc/cobblemon!492
2023-06-16 00:56:37 +00:00
Hiroku a0736e550d Merge branch 'ys/waterlog-pc' into 'main'
implement waterloggable pc

See merge request cable-mc/cobblemon!496
2023-06-15 22:16:26 +00:00
YaseenandHiroku ea46a2973f implement waterloggable pc 2023-06-15 22:16:26 +00:00
Hiroku 26a9d8d07f Merge branch 'ys/draw-triangles-fix' into 'main'
Fix for stats hexagon

See merge request cable-mc/cobblemon!497
2023-06-15 22:09:08 +00:00
YaseenandHiroku 71bba4296b Fix for stats hexagon 2023-06-15 22:09:08 +00:00
Licious eb26ffa7ca Fixed being locked out of healing machines if it goes boom during use. 2023-06-15 22:45:21 +01:00
Hiroku 0038f7428b Merge branch 'ys/waterlogging-tethers' into 'tethers'
Making the tether/pasture block waterloggable

See merge request cable-mc/cobblemon!495
2023-06-15 21:20:15 +00:00
YaseenandHiroku 1fd1cf32a2 Making the tether/pasture block waterloggable 2023-06-15 21:20:15 +00:00
Hiroku 57a7dccd37 Merge branch 'tooltip-changes' into 'main'
Tooltip changes

See merge request cable-mc/cobblemon!494
2023-06-15 21:19:22 +00:00
LiciousandHiroku 5fa56177fc Tooltip changes 2023-06-15 21:19:22 +00:00
Hiroku d68d630175 Merge branch 'french-toast-is-better' into 'main'
Implement toast API

Closes #288

See merge request cable-mc/cobblemon!489
2023-06-15 10:06:04 +00:00
LiciousandHiroku 662ae77944 Implement toast API 2023-06-15 10:06:04 +00:00
dhi_holo b219999945 Update superb_remedy.json 2023-06-15 13:05:56 +10:00
dhi_holo 467ae236b5 Merge branch 'main' into xvitarecipes 2023-06-15 12:55:29 +10:00
dhi_holo 4d2c298c00 Moistch
all 18 mulch recipes+unlock advancements, still not certain on the IDs but just felt like writing them today
2023-06-15 12:55:24 +10:00
Nick 469fb8dd52 Merge branch 'loot-table-appending' into 'main'
Implemented LootTable injection

Closes #217

See merge request cable-mc/cobblemon!490
2023-06-13 17:21:40 +00:00
LiciousandNick 371f2ac08a Implemented LootTable injection 2023-06-13 17:21:39 +00:00
Segfault Guy 3d20d7635b Add color to important langs. Refactor lang construction for -item, -enditem, and more. Broadcast ability activations. 2023-06-13 12:20:17 -04:00
Segfault Guy f67f8007fb Condense battle lang construction and fix lang inconsistencies 2023-06-13 10:34:00 -04:00
Segfault Guy a1516ecf10 Tweak dispatch timing to improve battle window flow 2023-06-13 10:30:31 -04:00
Segfault Guy 6c2ae912d1 Refactor all interpreter handlers to use BattleMessage system 2023-06-13 10:30:31 -04:00
Paul 9a03c17a0c Berry stuff on 1.19.4 and fixed some missing data 2023-06-11 20:56:54 +10:00
Paul 1bc2295b70 Added pokeball entity to capture event 2023-06-11 19:16:56 +10:00
Paul 37cd4ff11b Merge remote-tracking branch 'origin/main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlockEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/CobblemonEvents.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/interaction/PokemonEntityInteraction.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/item/Berries.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/item/Berry.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/tags/CobblemonBlockTags.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/CobblemonItemGroups.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/CandyItem.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/InteractiveItem.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/LinkCableItem.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/VitaminItem.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/NetExtensions.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
#	common/src/main/resources/assets/cobblemon/textures/block/berry_leaf.png
#	common/src/main/resources/assets/cobblemon/textures/block/coba_tree.png
#	common/src/main/resources/assets/cobblemon/textures/block/leaf.png
#	common/src/main/resources/assets/cobblemon/textures/block/rawst_tree.png
#	common/src/main/resources/assets/cobblemon/textures/block/vines.png
2023-06-11 14:30:03 +10:00
nlingebretson 5f9108400b Rework of berries to include a growth time and refresh rate 2023-06-10 21:04:57 -05:00
Paul 78711ea675 Fixed revival herb blockstate, I promise I'm a good dev 2023-06-11 11:45:46 +10:00
dhi_holo 0867de8257 Update revival_herb.json
fixed minor oversight
2023-06-11 10:55:51 +10:00
Paul 62720b8d15 Revival herb age should probably start at zero rather than one 2023-06-11 10:53:02 +10:00
DoctorWafflePhD c80ef7a8c0 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-10 16:43:06 -05:00
DoctorWafflePhD 7bdc302583 Implemented Venipede, Whirlipede, and Scolipede. 2023-06-10 16:32:22 -05:00
DoctorWafflePhD 8de2a12323 Implemented sleeping bubbles onto the sleeping particle. 2023-06-10 07:07:43 -05:00
Paul 00f7a859f4 Revival herb render and generation 'finished' - needs optimising 2023-06-10 21:56:26 +10:00
dhi_holo 280d144dcf Potentially Functional New Loot table?
I'll be honest, I don't really understand, but I fell down this hill- wait this is a commit and I'm braindying

This loot table should, in theory, work how it's outlined in the document. Hopefully.
I'll probably come back to it in future to investigate fortune mechanics, but we'll come back to that if this file doesn't break everything first
2023-06-10 17:51:56 +10:00
dhi_holo f2daba8ae8 Merge branch 'main' into xvitarecipes 2023-06-10 17:50:01 +10:00
tyzillion 6004c153d3 Broke up with Validate Animations.
- ValidateAnimations.kt removed
Pipeline restored.
2023-06-09 23:58:13 -04:00
Paul 8076287376 Merge remote-tracking branch 'origin/energy-roots' into revival-herbs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/feature/CobblemonPlacedFeatures.kt
2023-06-10 12:44:54 +10:00
Paul d54c4ced74 Added revival herbs mostly and pep up flowers 2023-06-10 12:43:35 +10:00
Paul 4aeedb1751 Merge remote-tracking branch 'origin/main' into revival-herbs 2023-06-09 16:47:45 +10:00
DoctorWafflePhD ac96ad3720 Implemented updated Falinks. 2023-06-09 01:03:38 -05:00
DoctorWafflePhD a06793616d Tweaked the sleeping particle a bit, and tweaked the position of the sleep locator on Vivillon and Bonsly. 2023-06-09 00:44:24 -05:00
DoctorWafflePhD 97f545bd4e Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-09 00:35:29 -05:00
Paul a267b63df2 Fixed Falinks torso name replacement insanity I wanna unalive 2023-06-09 15:35:05 +10:00
Paul ea9d961fd8 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-09 09:00:48 +10:00
Paul 51396f94b1 Merge remote-tracking branch 'origin/main' into implement_pokemon 2023-06-09 08:59:25 +10:00
tyzillion 412dc73d9d "Sir, know why I pulled you over? No? Let me see your license. No? Well then I am gonna have to fail your pipeline. Sit tight."
Cacnea crash fixed and license updated.
2023-06-08 17:57:48 -04:00
DoctorWafflePhD c605e2d030 Tweaked the sleeping particle & made it exist on a special "particles" animation file so that any model may use it without having to edit every sleeping animation to include particle data. 2023-06-08 10:51:37 -05:00
DoctorWafflePhD d5c93b60a9 Implemented a proof-of-concept sleeping particle. Currently it only applies to Vivillon. 2023-06-07 11:44:13 -05:00
Hiroku 54c591b51f Merge branch 'maven-deployment' into 'main'
Add new maven deployment job

See merge request cable-mc/cobblemon!488
2023-06-07 07:57:55 +00:00
Paul 620ef585ce Changelog for trading completed. Closes #92 2023-06-07 17:56:07 +10:00
Paul 9601cf49ce Merge remote-tracking branch 'origin/main' into trading 2023-06-07 17:55:13 +10:00
Paul 56088e3a40 Make Nick happy 2023-06-07 17:52:56 +10:00
Nick 5b8149ce82 Add new maven deployment job 2023-06-06 21:02:46 -07:00
DoctorWafflePhD 7d8c6aef8e Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-06 21:57:02 -05:00
DoctorWafflePhD 3c593ea3ed Implemented (not-yet-officially-approved) Bonsly animations and made it a tad larger. Fixed a small issue with Cetitan's model rendering both mouths at once. Fixed a pivot point issue on Charcadet. Fixed an incorrectly-registered quirk on Alolan Exeggutor. 2023-06-06 21:39:10 -05:00
dhi_holo 2f5b2bc2df Remedying
Remedy/Superb Remedy have the Big and Energy Roots flipped around
Feathers now cost one less mint
Revives redone
Leek and Potato Stew now cooked
2023-06-07 10:47:25 +10:00
dhi_holo 19a3244102 Merge branch 'main' into xvitarecipes 2023-06-07 10:37:06 +10:00
DoctorWafflePhD 5a7732588d Implemented Cetoddle and Cetitan. Touched up Glimmora's size. 2023-06-06 13:03:27 -05:00
DoctorWafflePhD 25488ae972 Implemented Bouffalant, and Cinderace remodel. Added missing "implemented" keys to Bonsly and Sudowoodo's species files. 2023-06-05 20:22:14 -05:00
tyzillion 4bf9733fe6 Implemented Cacnea, Cacturne, Nickit, Theivul, Duskull, Dusclops, and Dusknoir. 2023-06-05 21:19:45 -04:00
tyzillion 0672aebd61 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-05 21:18:52 -04:00
Waffle 5db7d6380f Bonsly, Sudowoodoo, Glimmet, & Glimmora implemented. 2023-06-05 19:38:01 -05:00
Waffle 7f90a6ffec Huntail now uses the same "slithering" behavior as Ekans when on land. Doduo and Dodrio now walk significantly faster. 2023-06-05 19:36:52 -05:00
Waffle d45f0e382b Fixed incorrect hitbox and scaling of Kricketot and Kricketune. Kricketune is now shoulder-mountable. 2023-06-05 14:27:01 -05:00
Paul 49987de803 Lang tooltip for energy root 2023-06-05 12:07:25 +10:00
tyzillion fab6d6e82d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-06-04 20:34:33 -04:00
Hiroku 332981a198 Update CHANGELOG.md [skip-ci] 2023-06-04 22:49:31 +00:00
Hiroku 5c026d7494 Merge branch 'add-persistent-data-to-pokemon' into 'main'
add Pokemon Persistent Data

See merge request cable-mc/cobblemon!484
2023-06-04 22:47:59 +00:00
Hiroku bb7342cd2d Merge branch 'added-sounds' into 'main'
Added cries for Braixen, Chatot, Chespin, Conkeldurr, Darmanitan, Darumaka,...

See merge request cable-mc/cobblemon!486
2023-06-04 22:42:40 +00:00
SterrezoandHiroku 90d1797cb4 Added cries for Braixen, Chatot, Chespin, Conkeldurr, Darmanitan, Darumaka,... 2023-06-04 22:42:40 +00:00
Waffle a79c61c5a4 Touched up UI positioning for Popplio line & Aerodactyl. Fixed incorrect package lines in Popplio line posers. 2023-06-04 10:00:56 -05:00
Waffle 3dfe05dccd Implemented updated Bidoof/Bibarel shiny textures 2023-06-04 06:06:44 -05:00
Paul 5dab0f060e Energy root fixes 2023-06-04 20:44:39 +10:00
Paul 03b17b050a Added energy root w/ world generation sans testing 2023-06-04 11:35:16 +10:00
Paul 2cc44d32fb Added BeneathHeightmapPlacementModifier 2023-06-04 11:35:09 +10:00
tyzillion e485484051 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-03 13:07:35 -04:00
tyzillion 865ddcd59b Fixed Pidgeotto flapping during idle instead of while flying. 2023-06-03 13:07:16 -04:00
Waffle 999070b270 Touched up Tandemaus and Maushold and added/tweaked some of their anims. 2023-06-03 11:40:50 -05:00
Waffle 00d1590790 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-06-03 05:49:02 -05:00
Paul 4be66e4993 Merge remote-tracking branch 'origin/main' into energy-roots 2023-06-03 18:29:02 +10:00
tyzillion 6cc17a08dc Bird Pokemon are actually drones created by the government. Source: KFC
Added flying placeholder animations to Pidgey, Pidgeotto, Pidgeot, Chatot, Rookidee, Corvisquire, Corviknight, Taillow, Swellow, Rowlet, Dartrix, and Decidueye.
2023-06-03 01:23:58 -04:00
Paul 04cb83b13e Tint the trade and battle challenge icons if a request exists 2023-06-03 11:04:43 +10:00
Paul d8a5ffa567 Fixed langs being broken in many cases (anything with 'pokemon' in the key 2023-06-03 11:04:17 +10:00
Village be2cc7e445 license 2023-06-02 15:19:40 -04:00
Paul 07cfd61ebe Removed debug sound 2023-06-02 14:02:25 +10:00
Paul a7fe48ec20 Show EVs on trade GUI, fixed models display glitching on resize 2023-06-02 14:00:26 +10:00
Oliver Whitehead 1c1cb3e91f add Pokemon Persistent Data 2023-06-02 01:27:22 +01:00
Paul bfb14ff828 Allow multiple trades per active trade 2023-06-02 10:02:52 +10:00
tyzillion 60911f3ec7 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-05-31 20:59:20 -04:00
tyzillion 7f1a35fffe funny license go brrrrrr
(Added "implemented": true, to the Pokemon I added so far, cuz oversight.)
2023-05-31 20:57:07 -04:00
tyzillion 10f5fd673e Implemented Alolan Exeggutor, Galarian Farfetchd, Rookidee, Corvisquire, Corviknight, and Sirfetchd. 2023-05-31 20:41:10 -04:00
jmmcp 36fcb12add Added potion recipes to access widener and an example recipe for it 2023-05-31 18:04:37 -04:00
Paul c7ff0c7e39 More fixes and implementations of lang for trading 2023-05-31 23:07:45 +10:00
dhi_holo 4a1bbd1e6a Herbal
Braised Vivichoke, Vivichoke Dip, Remedy, Fine Remedy, Superb Remedy, Revive, Max Revive, Heal Powder, recipes and unlock advancements, and typo fix for Roasted Leek
2023-05-31 22:24:25 +10:00
dhi_holo a859ea205b Merge branch 'main' into xvitarecipes 2023-05-31 21:25:39 +10:00
dhi_holo 6b41168626 Leeks!
Leek and Potato Stew, Roasted Leek, and Medicinal Leek to Magenta Dye recipes and advancements
2023-05-31 21:25:24 +10:00
dhi_holo cb4479a7a1 EV Recipes
Updates PP Up and PP Max to new recipes, adds recipes for the six Effort Feathers, adds recipe for the Pasture block, adds a "berries" tag and Berry Juice recipe. All also have an unlock advancement for the recipe book
2023-05-31 20:28:32 +10:00
Waffle 765921d219 Updated Bidoof's model to the pivot-fixed version. 2023-05-30 08:29:47 -05:00
Paul 3f4d2c7f8c Implement opposite party data in trade GUI 2023-05-30 19:53:48 +10:00
Village aa31776bf3 prevent modification of display name MutableText, nudge gender icon to prevent overlap 2023-05-29 21:22:53 -04:00
tyzillion 2422e60aa1 Updated Popplio, Brionne, and Primarina's models. Updated animations for Popplio and Brionne. Fixed Exeggutor crash. Implemented Barboach, Whiscash, Combee, Vespiquen, Lillipup, Herdier, and Stoutland. 2023-05-29 18:37:16 -04:00
dhi_holo 6dbe92e093 Updates, people, updates
Added finalized recipes for the 8 Vitamins, plus unlock recipes for them.
Removed the X-Item recipes for now, they're not needed, was only in the initial branch for critiquing and repos keep copies of that so we good.

Reorganised the Recipe Advancements folders to match the new creative tab layout, that's the majority of the changes, but it's really not anything noteworthy, just keeping it clean for future additions.

Need to look into the advancement tab background stuff, something funky's going on, but I couldn't figure it out tonight
2023-05-29 19:14:15 +10:00
Paul f75c0aeab4 Merge remote-tracking branch 'origin/main' into trading
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleRegistry.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/keybinds/PartySendBinding.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/item/PokemonItemRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/PokemonItem.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2023-05-29 18:35:11 +10:00
Paul e9265eb0a6 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-29 18:30:03 +10:00
Paul 07ad7db139 Improved test error clarity and removed unsafe operation in ValidateAnimations 2023-05-29 18:29:56 +10:00
Village 952ad6e0d2 trade 2023-05-29 03:36:41 -04:00
Waffle 159ecf5ffa Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-05-29 00:33:16 -05:00
tyzillion 12be2c7b7b Removed Klevin, fixing pipeline fails. 2023-05-29 01:29:23 -04:00
Waffle 95590a2673 Fixed Maushold-Three's model not rendering. Pidgeot moves a little quicker. 2023-05-29 00:23:58 -05:00
Paul 0f0e6b0142 Pasture GUI work 2023-05-29 15:13:37 +10:00
tyzillion 869f6b1120 Added animations that just added sleep to Arcanine, Jigglypuff line and Vulpix Line. Updated animations to Greninja, Eiscue, Luvdisc, Chimchar, Monferno, Infernape, Flittle, Espathra, Sobble, Drizzile, and Inteleon. Updated Model for Chimchar, Espathra, Torchic, Combusken, Blaziken, Exeggcute, Exeggutor, Lickilicky, Pichu, and Drizzile. Fixed Flittle having float being used instead of hover. Updated model and animation for Raichu. updated conditions on multiple faints. 2023-05-29 00:54:33 -04:00
Village 2a41f431bb trade 2023-05-28 23:38:27 -04:00
tyzillion 2cdfac02e6 Updated shiny Dwebble and Crustle texture. Updated Heatmor, Aerodactyl, Greninja, Charcadet, Armarouge, and Ceruledge animations. Added sleep behavior to Magnemite and Magneton. 2023-05-28 18:46:34 -04:00
tyzillion a9127c7021 Fixed Magnezone, Arcanine,and Mudsdale, fixed missing metal sparks particle. 2023-05-28 17:08:59 -04:00
tyzillion 3023de995a Updated Changelog with Pokemon to be added and remodels. Updated Arcanine, Magnemite, Magneton, Magnezone model and textures. 2023-05-28 14:34:23 -04:00
tyzillion 59c3df6a47 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-28 14:32:57 -04:00
Paul 63a779cb1e Fixed custom brewing recipes on Forge I think 2023-05-28 23:15:46 +10:00
Waffle 7391e3bc69 Merge branch 'main' into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-05-28 06:54:59 -05:00
Waffle 4ab72a6334 Implemented Lotad line's new animations. 2023-05-28 06:15:07 -05:00
Waffle af357aca51 fixup! Implemented Ditto, Shuckle, and Pumpkaboo line's new animations. Pumpkaboo and Gourgeist also now have size variance. 2023-05-28 06:00:08 -05:00
Waffle c7d060bb8d Yanma and Yanmega wings now flap much faster (this was making me irrationally angry) 2023-05-28 03:35:53 -05:00
Waffle c3db5c0525 Vivillon now defaults to Meadow pattern (likely temporary) 2023-05-28 03:35:36 -05:00
Waffle 04328d2b8a Implemented Ditto, Shuckle, and Pumpkaboo line's new animations. Pumpkaboo and Gourgeist also now have size variance. 2023-05-28 03:34:59 -05:00
dhi_holo 27bcdadac6 damn file didn't save properly 2023-05-28 15:26:12 +10:00
dhi_holo 18e1caff39 WIP Recipes
Adds recipes for the battle and vitamin items (using some items yet to be implemented), as well as two tags for protein/zinc crafting

PP Up/Max needs going over, and Dire Hit needs approving in general, and all recipes still need advancements, but I wanted to make sure it was in team space, not my laptop exclusively, so it was easier to read over
2023-05-28 14:47:57 +10:00
jmmcp d9af350ab6 Merge remote-tracking branch 'origin/main' into custom-brewing-basis-1.19.3
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/resources/cobblemon-common.accesswidener
2023-05-28 00:29:30 -04:00
jmmcp ca6461499f Placed/Configured Feature tweaks 2023-05-28 00:06:28 -04:00
Paul 71bee3edd2 Fixed metal coat not being in the creative tabs 2023-05-28 11:06:55 +10:00
Paul 2c50d5f523 Merge remote-tracking branch 'origin/main' into tethers 2023-05-28 11:04:54 +10:00
Paul 721823117a Added trader party to trade GUI initializer 2023-05-28 07:00:28 +10:00
jmmcp e87d6eabab Placed/Configured Feature beginnings 2023-05-27 00:07:19 -04:00
tyzillion fb03f426c6 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-26 16:15:52 -04:00
Waffle 00ed7bb0e8 Added missing implemented keys to Scatterbug line's species files 2023-05-25 22:18:02 -05:00
Waffle 38d81ced56 Implemented Garganacl, added missing baseScale and hitbox keys in Nacli and Naclstack species files and fixed their hitboxes, tweaked their walkSpeeds 2023-05-25 22:17:11 -05:00
Waffle 95ecf75a3a Added the fixed Yanma shiny texture. 2023-05-25 20:01:41 -05:00
Waffle 0afde170f4 Tweaked some movement speeds (breloom & naclstack). Also tweaked Naclstack's walk animation slightly. 2023-05-25 19:59:20 -05:00
Waffle 5a312ee6c6 Somehow, Masquerain's wing textures got reverted. Re-reverted them - they should have transparency again. 2023-05-25 08:41:24 -05:00
Waffle 6533da0ed6 Fixed Scatterbug's baseScale and hitbox size. Spewpa now evolves into different Vivillon patterns based on biome. Some patterns are currently awaiting confirmation on obtainment method and are thus unavailable without the use of commands. 2023-05-25 08:37:29 -05:00
Waffle 339ad676ca Implemented Scatterbug, Spewpa, and Vivillon. Vivillon's wing pattern currently defaults to Meadow, and no behavior to determine Vivillon wing pattern based off evolution location is currently implemented. 2023-05-25 05:51:54 -05:00
Waffle 0edc762ff8 Butterfree no longer T-poses while flying, and moves at a speed of 0.4 2023-05-25 05:51:22 -05:00
Waffle 320a3a11b8 Implemented Stufful and Bewear. Both need shiny textures, and use placeholder animations. 2023-05-25 04:20:25 -05:00
Waffle f4d177ce8c Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/animations/0870_falinks/falinks.animation.json
#	common/src/main/resources/data/cobblemon/species/generation8/falinks.json
2023-05-25 01:41:46 -05:00
Waffle f3598e915e Implemented Falinks & updated licenses (haven't run that command in a while teehee). 2023-05-24 23:31:20 -05:00
tyzillion 3314075f6e Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-05-24 19:21:10 -04:00
tyzillion 141296a2d5 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-24 19:19:59 -04:00
Waffle 48147f460b Implemented Falinks & updated licenses (haven't run that command in a while teehee). 2023-05-24 05:46:41 -05:00
Waffle 2d72fbb82a Implemented Carnivine. Needs animations. 2023-05-24 01:06:03 -05:00
Waffle 98b72f07b6 Added missing implemented key to Cutiefly and Ribombee's species files. 2023-05-24 01:05:33 -05:00
Waffle 465fb2bef4 Implemented the Wooper remodel, as well as some animations ++(.‿.)++ 2023-05-24 00:12:07 -05:00
Waffle d1f96af65f Separated Masquerain's texture into a base and wing texture, and made the wings slightly translucent. 2023-05-24 00:11:42 -05:00
Waffle 990dad0c51 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation7/cutiefly.json
#	common/src/main/resources/data/cobblemon/species/generation7/ribombee.json
2023-05-24 00:01:05 -05:00
Hiroku 2387639cea See above 2023-05-23 21:59:12 +00:00
Hiroku 83fdcceaa7 You saw nothing 2023-05-23 21:57:48 +00:00
Hiroku 8db77bcaea Say stats instead of nature with mints 2023-05-23 21:53:15 +00:00
jmmcp 6f9b80c3b0 Merge remote-tracking branch 'origin/main' into medicinal_leeks
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
2023-05-23 17:08:34 -04:00
Waffle 67a8230b91 Made Cutiefly & Ribombee's wings translucent, as well as fixed accidentally swapped names in their resolver files (oops) 2023-05-23 08:21:14 -05:00
Waffle 0d66e7bc1b Made Cutiefly & Ribombee's wings translucent, as well as fixed accidentally swapped names in their resolver files (oops) 2023-05-23 08:09:34 -05:00
tyzillion 56f0e0a1e2 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-22 20:42:23 -04:00
Waffle 1e5c48129c Implemented Cutiefly and Ribombee. 2023-05-22 06:58:28 -05:00
Waffle aed830b1ea Implemented Cutiefly and Ribombee. 2023-05-22 06:47:22 -05:00
tyzillion c30596c89b Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-05-20 12:19:43 -04:00
Paul 85f4345f5c Made apricorn tree placed feature less dumb, improve pasture block collider 2023-05-20 23:17:20 +10:00
Waffle 851e0e56dd Parasect can no longer look around, moves at a speed of 0.45, and is always on the move. Sorry, zombie crab. 2023-05-20 05:13:06 -05:00
Waffle 0e92743da5 Implemented Cutiefly and Ribombee. Probably broken, I just needed to move to a new local copy of the IDE because intelliJ moment idk idk 2023-05-20 02:59:29 -05:00
Paul 71d0e56c20 Merge corrections, pasture block fixes 2023-05-19 22:57:08 +10:00
Paul 5b78ba6329 Merge remote-tracking branch 'origin/main' into tethers
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/pokemon/update/NatureUpdatePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/spawn/SpawnPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
2023-05-19 13:04:52 +10:00
Paul 1dbe2cc993 Added new pasture model 2023-05-19 13:03:53 +10:00
nlingebretson 0245d82250 Updated item sprite to use the up-to-date sprites in the repo and added base json files for berry data (incomplete) 2023-05-17 20:28:06 -05:00
Paul 1c942ce83c Move version number up to 1.4.0 2023-05-17 20:44:06 +10:00
Paul 2d3ff73530 Merge remote-tracking branch 'origin/main' 2023-05-17 20:40:09 +10:00
Paul 4d5bc93702 Fixed Forge runs 2023-05-17 20:39:22 +10:00
Deltric b4dc4f4a05 Setup Pasture Block w/ backend logic + packets 2023-05-17 04:04:17 -05:00
Hiroku cdf41a5b13 Merge branch '1.19.3-particle-camera-modes' into 'main'
1.19.3 particle camera modes

See merge request cable-mc/cobblemon!479
2023-05-15 20:57:09 +00:00
Hiroku 9651025bef 1.19.3 particle camera modes 2023-05-15 20:57:08 +00:00
Paul 54a9412a5c Moved spawn frequency to config option. Closes #260 2023-05-15 18:32:08 +10:00
Paul 4bfeda2031 Substantially reduced default frequency of Pokémon cries (default is now once in 54 seconds). Closes #265 2023-05-15 18:25:18 +10:00
Paul ed136ecabb Fixed invalid action choices from AI causing crashes. Closes #284 2023-05-15 18:05:46 +10:00
Paul 2f0eb7c246 Fixed logging spam when loading shoulder mounted Pokémon on the client. Closes #289 2023-05-15 18:01:46 +10:00
Hiroku ea0c16bf01 Merge branch '#279-heal-wild-pokemon' into 'main'
HealWildOnDefeatOrRun

See merge request cable-mc/cobblemon!476
2023-05-14 00:04:30 +00:00
IslanaandHiroku 18d6917e9f HealWildOnDefeatOrRun 2023-05-14 00:04:30 +00:00
Paul 039c5993f5 Sprite/block texture updates, fix deepslate water stone ore looking like deepslate fire stone ore 2023-05-14 09:09:56 +10:00
Hiroku 8394d9f0f0 Merge branch 'bad-world-squeezewithinbounds' into 'main'
Fixed World.squeezeWithinBounds squeezing z coordinates using border's x coordinates

See merge request cable-mc/cobblemon!478
2023-05-13 11:46:17 +00:00
David Sadler 1b791abbe0 Fixed World.squeezeWithinBounds squeezing z coordinates using border's x coordinates 2023-05-13 12:37:00 +01:00
Hiroku ed07a915dc Merge branch '273-pokemon-spawn-outside-world-border' into 'main'
Fixed pokemon spawning outside world border

Closes #273

See merge request cable-mc/cobblemon!477
2023-05-13 10:28:27 +00:00
selfdotandHiroku 513221a7dd Fixed pokemon spawning outside world border 2023-05-13 10:28:26 +00:00
Paul cd5556f2e3 Added debug components in TestCommand.kt and TradeParticipant.kt for trading GUI testing 2023-05-12 16:13:53 +10:00
Paul db99c7f4b0 Lowered chance of white mints dropping random-colour additional seeds 2023-05-12 15:03:03 +10:00
Waffle 9dc3b910f4 Touched up Surskit and implemented Masquerain. 2023-05-11 10:18:50 -05:00
Paul 581c9b5844 Fixed Pokéball item rendering in inventory (lighting) and player model (everything) 2023-05-11 22:00:17 +10:00
Paul 6403ea5a18 Made mints rarer, fixed calm mint recipe 2023-05-11 21:21:52 +10:00
Paul 36772de3e0 Changelog for mints [skip-ci] 2023-05-11 20:10:37 +10:00
Hiroku 3ccdb48939 Merge branch 'mints' into 'main'
Add mints

See merge request cable-mc/cobblemon!475
2023-05-11 10:07:11 +00:00
LandonandHiroku 058ac88f19 Add mints 2023-05-11 10:07:11 +00:00
Waffle 089d75cf57 Fixed Walking Wake not actually walking on wakes. 2023-05-10 20:10:38 -05:00
Waffle 9ef45d6324 Touched up Surskit and implemented Masquerain. 2023-05-10 16:10:21 -05:00
Waffle 881a957f59 Added Surskit 2023-05-10 12:22:01 -05:00
jmmcp 23a9399284 Updated licenses 2023-05-10 11:31:37 -04:00
jmmcp f67c35541d Added the basis for Medicinal Leeks and its crop block. This push includes implementation of the item and crop block itself as well as the logic behind them. 2023-05-10 00:15:08 -04:00
Waffle 0e0562c1a3 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-09 17:38:23 -05:00
tyzillion 40cc7d30b2 Hopefully pipeline fix. 2023-05-09 18:01:05 -04:00
tyzillion c2b1d336db Updated Models for Aerodactyl, Spearow, Fearow, Drowzee, Hypno, Lickitung, Pidgeotto, Pidgeot, Scyther, Scizor, and Kleavor. All still need frames and scaling adjusted. 2023-05-09 17:41:27 -04:00
Waffle eca69b4d96 Increased Pikachu's movement speed to better fit its animation 2023-05-09 15:12:32 -05:00
Waffle c607198de9 Fixed an incorrect identifier of bidoof_female.geo.json 2023-05-09 13:40:27 -05:00
Waffle 3ce9bd05a8 Positioned Flittle & Espathra's portraits and profiles. Hopefully fixed Espathra's eye jank. 2023-05-09 13:34:17 -05:00
tyzillion d209918dde Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-05-09 14:06:38 -04:00
tyzillion c5de65044d Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-09 14:05:37 -04:00
Waffle 96fbe3a685 Removed some unused imports in Flittle's model
TODO: position Flittle and Espathra's portrait and profile
2023-05-08 20:34:20 -05:00
Waffle d33defea6a Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-08 20:31:11 -05:00
Waffle d16d3eac34 Implemented Flittle & Espathra. Flittle can be shoulder-mounted. 2023-05-08 20:30:57 -05:00
Waffle 99b175f72a Positioned Comfey's portrait, played with its shoulder mount position, & gave it behavior for flight and sleep. 2023-05-08 19:17:37 -05:00
Waffle ae4d16bfcb Positioned Comfey's portrait, played with its shoulder mount position, & gave it behavior for flight and sleep. 2023-05-08 18:14:00 -05:00
Waffle ff039c0d24 Tweaked Tandemaus and Maushold's hitboxes as well as their portraits and profile scales. 2023-05-08 16:57:51 -05:00
SPG f4ef41c130 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/repository/PokemonModelRepository.kt
2023-05-08 14:06:36 -07:00
SPG e572d22819 Implmented Poochyena
Implmented Mightyena
Implmented Sprigatto
Implmented Floragato
Implmented Meowscarada

Floragato is stuck in T-pose, will need to have someone look at it
2023-05-08 14:02:46 -07:00
Waffle 9c448eca97 Adds Ceruledge's textures 2023-05-08 15:37:44 -05:00
Waffle 742caa227d Added transformTicks to Golurk's animations, and made them slower than the default 10 ticks. 2023-05-08 15:37:02 -05:00
Waffle b095e87ec9 Implemented Charcadet, Armarouge, and Ceruledge. All 3 use placeholder animations. 2023-05-08 15:36:38 -05:00
Waffle b2c66efa83 Added TransformTicks to Golurk's model. They're a bit slower than the default of 10. 2023-05-08 14:22:28 -05:00
Waffle 7274713e50 Implemented Breloom's animations by Berri
Synced Breloom's movement speed to its animation speed
Scaled Shroomish back up just a tad (0.6 -> 0.8)
Scaled Breloom back up just a tad (0.8 -> 0.9)
Fixed Shuckle's portrait and profile placement
Made Garchomp even faster to better sync with its run animation
2023-05-08 13:53:20 -05:00
Waffle 094f943ab5 Implemented Shroomish and Breloom
Added missing transformTicks properties in Bidoof's poses (should transition between poses better)
2023-05-07 16:58:57 -05:00
Waffle f55198249f Implemented Drowzee and Hypno remodels (no anims)
Implemented Gligar and Gliscor (no anims)
Igglybuff is now shoulder mountable
Updated licenses
2023-05-07 06:49:13 -05:00
Waffle 2fddfe12e6 Implemented Chatot 2023-05-06 03:23:54 -05:00
Waffle 88619f0512 Implemented Fidough & Dachsbun
Gave Chimecho flight
Updated Chingling & Chimecho scale & hitboxes
2023-05-06 01:56:57 -05:00
Waffle 695368932d Implemented Fidough & Dachsbun
Gave Chimecho flight
Updated Chingling & Chimecho scale & hitboxes
2023-05-06 01:54:30 -05:00
Paul 71224066a8 Added structure identifier / tag spawn conditions 2023-05-06 10:34:28 +10:00
Waffle 84926f12eb Made Golurk move slightly slower to better sync with its walking animation. 2023-05-03 06:52:42 -05:00
Waffle 9048c00021 Added Chingling and Chimecho, and posed them for portrait and profile. Neither have animations implemented currently. Updated licenses as well. 2023-05-03 06:43:00 -05:00
tyzillion ed5cc49b6d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2023-05-02 13:31:07 -04:00
Waffle f348b4e8de Fixed Bidoof's sleep, tweaked its portrait, and added license to Chinchou's model file. 2023-05-02 01:21:28 -05:00
Waffle 6acd8167fb Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2023-05-01 22:15:54 -05:00
Waffle b131c2fe1f Gave Bidoof a sleeping animation & implemented sleeping behavior. 2023-04-29 15:08:10 -05:00
Waffle d848a2e78c Gave Bidoof a sleeping animation & implemented sleeping behavior. 2023-04-29 15:03:19 -05:00
Waffle 2447f61f8c Fixed Bidoof's movement. oops
Also, made its WATER_FLOAT animation a bit quicker.
2023-04-29 14:14:31 -05:00
Paul 950c5b2c82 Fixed labels and lighting issues with Pokémon item frames 2023-04-29 22:34:04 +10:00
Paul 107252b1dd Added scale animation support, and jump keyframes 2023-04-29 22:32:52 +10:00
Waffle 9839e48dee Reduced Bidoof's swim speed, and added water floating animation (also used as a placeholder for swimming ATM) 2023-04-29 00:35:15 -05:00
Waffle 95f4f96cda actually implemented blink whoops 2023-04-27 16:19:16 -05:00
Waffle 9ce697bf00 Bidoof
- Updated some model pivots
- walkSpeed 0.35 -> 0.3
- ground_idle and ground_walk animations made
- Implemented blink
2023-04-27 16:18:18 -05:00
Paul 72da390ad4 Fixed faints not working right in add-ons 2023-04-27 22:52:17 +10:00
Waffle 5424513e7e Changed the species files of several Pokemon, mostly to change their movement speeds, though Wailord did get a size bump.
Venusaur walkSpeed 0.35 -> 0.3
Charmander walkSpeed 0.35 -> 0.3
Charmeleon walkSpeed 0.35 -> 0.3
Squirtle walkSpeed 0.35 -> 0.29
Wartortle walkSpeed 0.35 -> 0.29
Blastoise walkSpeed 0.35 -> 0.3
Caterpie walkSpeed 0.35 -> 0.26
Weedle walkSpeed 0.35 -> 0.26
Beedrill walkSpeed 0.35 -> 0.4
Pidgeot walkSpeed 0.35 -> 0.38
Rattata walkSpeed 0.35 -> 0.41
Raticate walkSpeed 0.35 -> 0.33
Slowpoke walkSpeed 0.35 -> 0.125
Slowbro walkSpeed 0.35 -> 0.18
Slowking walkSpeed 0.35 -> 0.23
Wailord scaled up
  - baseScale 1.3 -> 2
  - width 3.5 -> 3.2
  - height 2.3 -> 2.1
Galvantula walkSpeed 0.35 -> 0.4
Naclstack walkSpeed 0.35 -> 0.23
Gargancl walkSpeed 0.35 -> 0.25
2023-04-27 07:06:07 -05:00
Hiroku 603336f740 Merge branch 'ys/battle-lang-implementations' into 'main'
Battle lang implementations

See merge request cable-mc/cobblemon!471
2023-04-27 10:35:32 +00:00
YaseenandHiroku 83ab81fd37 Battle lang implementations 2023-04-27 10:35:32 +00:00
Hiroku a0ef28effd Merge branch 'ys/recoil-flee-issue-fix' into 'main'
Dont flee while theres some battle messages left to process

Closes #277

See merge request cable-mc/cobblemon!472
2023-04-27 09:11:47 +00:00
YaseenandHiroku ea20dc7c60 Dont flee while theres some battle messages left to process 2023-04-27 09:11:47 +00:00
Waffle 4de268fcd8 Scaled Chinchou, Shuckle, Tandemaus, and Maushold. Additionally made Shuckle move slowly. 2023-04-27 02:12:35 -05:00
Waffle 86c415cc55 Fixed a couple stray palette-nonconforming pixels on Gorebyss's texture. 2023-04-27 02:11:49 -05:00
Waffle e08066a26c Added Chinchou, Clamperl, Huntail, and Gorebyss 2023-04-27 01:21:23 -05:00
Waffle eea985d56d Added canFly behavior 2023-04-27 00:42:16 -05:00
Hiroku da473c9951 Merge branch 'main' into 'main'
Add missing shoulderMountable key to Eiscue & Tatsugiri's species files

See merge request cable-mc/cobblemon!470
2023-04-26 22:07:51 +00:00
Xander ForrestandHiroku ae33cf7b5c Add missing shoulderMountable key to Eiscue & Tatsugiri's species files 2023-04-26 22:07:51 +00:00
Hiroku d2626b9a0e Merge branch 'battle_context' into 'main'
Add BattleContext and ContextManager to track battle state. Add BattleFaintedEvent. Refactor ShowdownInterpreter handlers.

See merge request cable-mc/cobblemon!454
2023-04-26 09:38:03 +00:00
Segfault Guy d2f6987ce5 Context for boosts. Finished Minor/Major action history. ContextManager expansion and fixes. 2023-04-26 00:28:38 -04:00
Segfault Guy af142abd90 Fix bug where contexts can't be created from conditions caused by -activate and -ability instructions 2023-04-26 00:28:38 -04:00
Segfault Guy c072b6525c Add BattleContext, ContextManager, and BattleFaintedEvent. 2023-04-26 00:28:18 -04:00
Segfault Guy 73777a3873 resolved conflict 2023-04-26 00:19:46 -04:00
Hiroku ae2ed8e1e6 Merge branch '236-pokeball-animation-issue' into 'main'
Issue Fix 236

Closes #236

See merge request cable-mc/cobblemon!468
2023-04-25 21:25:07 +00:00
Cameron PierceandHiroku 7718bac2e5 Issue Fix 236 2023-04-25 21:25:06 +00:00
Hiroku 1dc6f06b94 Merge branch 'nosepass-points-at-spawn' into 'main'
Made Nosepass point towards spawn while idle

Closes #238

See merge request cable-mc/cobblemon!465
2023-04-25 10:13:29 +00:00
selfdotandHiroku 8bb16b8d00 Made Nosepass point towards spawn while idle 2023-04-25 10:13:29 +00:00
Hiroku 8f8fa7efb7 Merge branch 'fix_leech_seed_messages' into 'main'
Implement Leech Seed messages

See merge request cable-mc/cobblemon!467
2023-04-25 10:09:48 +00:00
paperandHiroku 6d58b69be6 Implement Leech Seed messages 2023-04-25 10:09:48 +00:00
Hiroku 99e501ae3c Merge branch 'main' into 'main'
Properly set the velocity of spawned entities

Closes #223

See merge request cable-mc/cobblemon!466
2023-04-25 10:06:20 +00:00
Nick 000d210b33 Adjust comment checker for even more fun formats that break the unit test :D 2023-04-24 21:14:55 -07:00
tyzillion 124d68a8fe Updated license 2023-04-24 23:22:25 -04:00
tyzillion 0c019b1c71 Updated Model and Texture of Pikachu. Updated weedle texture. 2023-04-24 22:28:06 -04:00
Justin L. Wells ea41803ccb Properly set the velocity of spawned entities 2023-04-24 20:27:12 -05:00
tyzillion fd5468ff6e Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2023-04-24 12:50:57 -04:00
Paul e1c29b7423 Merged 1.19.3 into main 2023-04-24 22:34:42 +10:00
Paul a1df69c67a Merge remote-tracking branch 'origin/1.19.3'
# Conflicts:
#	common/build.gradle.kts
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonSounds.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/CobblemonEvents.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/ai/goals/WildRestGoal.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2023-04-24 21:43:41 +10:00
Hiroku 2b91acd6ad Merge branch 'ys/fix-test-commands' into '1.19.3'
Fix test commands

See merge request cable-mc/cobblemon!464
2023-04-24 11:15:41 +00:00
Paul 96a6f2adeb Licenses 2023-04-24 18:02:32 +10:00
Hiroku 509e473e4f Merge branch 'battle_music' into 'main'
Battle music system for Pokémon battles

See merge request cable-mc/cobblemon!463
2023-04-24 06:22:07 +00:00
Hiroku ae825f5e29 Merge branch 'main' into 'battle_music'
# Conflicts:
#   common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#   common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#   common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketRegistrar.kt
2023-04-24 06:20:24 +00:00
SPG 1d2c1413da Implmented Lanturn
- Fixed License Violation
2023-04-23 21:21:56 -07:00
SPG 005945447b Implmented Lanturn 2023-04-23 21:20:44 -07:00
Paul 36de85ccb0 Syntactical cleaning 2023-04-24 14:14:11 +10:00
Paul b47892892d Fixed battles not starting properly 2023-04-24 11:09:41 +10:00
SPG d69ddef3e3 Implmented Lanturn 2023-04-23 17:53:29 -07:00
Yaseen 9bde52c73e Fix test commands 2023-04-23 23:12:26 +01:00
Paul 469a350497 Compilation error fix 2023-04-22 23:36:45 +10:00
Hiroku 5abc147442 Merge branch 'storage-fixes' into '1.19.3'
Miscellaneous Storage fixes

See merge request cable-mc/cobblemon!452
2023-04-22 12:54:39 +00:00
DeltricandHiroku 390d3b5518 Miscellaneous Storage fixes 2023-04-22 12:54:39 +00:00
Hiroku ead25288a0 Merge branch 'ys/fix-sleep' into 'main'
Sleep fix

See merge request cable-mc/cobblemon!456
2023-04-22 12:51:19 +00:00
YaseenandHiroku 030ba82109 Sleep fix 2023-04-22 12:51:19 +00:00
Hiroku 396aaecdb6 Merge branch 'ys/fix-ability-traps' into 'main'
Fix abilities that should trap pokemon

See merge request cable-mc/cobblemon!457
2023-04-22 12:49:36 +00:00
YaseenandHiroku b7e752da64 Fix abilities that should trap pokemon 2023-04-22 12:49:36 +00:00
Hiroku c014362025 Merge branch 'ys/new-commands' into '1.19.3'
Added testpcslot and testpartyslot commands

See merge request cable-mc/cobblemon!461
2023-04-22 12:47:58 +00:00
YaseenandHiroku 1f86abd8db Added testpcslot and testpartyslot commands 2023-04-22 12:47:58 +00:00
Paul b9cf702042 Nicknaming fixing 2023-04-22 22:24:54 +10:00
Hiroku b07b20ef3c Merge branch 'nicknames-1.19.3' into '1.19.3'
Implemented nicknames on 1.19.3 branch

See merge request cable-mc/cobblemon!415
2023-04-22 09:26:20 +00:00
selfdotandHiroku 24692f57f6 Implemented nicknames on 1.19.3 branch 2023-04-22 09:26:20 +00:00
Segfault Guy 8e08782cd1 Fire BattleMusicPacket and BattleMusicHandler on battle start and end 2023-04-22 00:42:54 -04:00
Paul dc4ad24004 changelog [skip-ci] 2023-04-22 12:13:17 +10:00
Hiroku 22171add23 Merge branch 'pokespawn-event' into 'main'
Pokespawn event

See merge request cable-mc/cobblemon!439
2023-04-22 02:12:08 +00:00
amoandHiroku 073901ae7a Pokespawn event 2023-04-22 02:12:08 +00:00
Hiroku 5c092661de Merge branch 'ys/mineable-block-tags' into 'main'
Making blocks mineable using tools

Closes #272 and #263

See merge request cable-mc/cobblemon!458
2023-04-22 01:47:35 +00:00
YaseenandHiroku 4eb130e9fd Making blocks mineable using tools 2023-04-22 01:47:35 +00:00
Hiroku 33fb5a3ab9 Merge branch 'moon-phases' into '1.19.3'
Fixes moon phase spawn condition being checked in reverse

See merge request cable-mc/cobblemon!462
2023-04-22 01:46:23 +00:00
selfdotandHiroku 7bbbddc580 Fixes moon phase spawn condition being checked in reverse 2023-04-22 01:46:23 +00:00
Paul 60fb7231c7 Added isBattle, isTouchingWater to pose JSON, added isVisible to transformed part JSON 2023-04-21 19:37:14 +10:00
tyzillion 4ac7060e4d Implemented Spinarak, Ariados, Shuckle, Taillow, Swellow, Relicanth, Mudbray, Mudsdale, Comfey, Tandemaus, Maushold, Varoom, and Revavroom.
Updated model and textures of Farfetchd and Gengar.
Updated model of Sceptile.
Updated animation for Murkrow and Farfetchd.
2023-04-20 22:17:09 -04:00
Paul 5d84ee5ac6 Merge remote-tracking branch 'origin/tethers' into tethers 2023-04-20 22:15:24 +10:00
Paul 048dcf785d More packets and fixes for pasture blocks 2023-04-20 22:14:09 +10:00
Hiroku a244c56c4c Merge branch 'ys/fix-spawning-prospector' into 'main'
Spawning Prospector fix

Closes #270

See merge request cable-mc/cobblemon!460
2023-04-20 10:20:42 +00:00
YaseenandHiroku 5f793be70d Spawning Prospector fix 2023-04-20 10:20:42 +00:00
Hiroku a5e46e900f Merge branch 'ys/pokemon-item-fix' into 'main'
Fix getSpeciesAndAspects

See merge request cable-mc/cobblemon!455
2023-04-20 09:26:04 +00:00
YaseenandHiroku bb9f4b6a9a Fix getSpeciesAndAspects 2023-04-20 09:26:04 +00:00
Village 03f6b79f0b slot overlay 2023-04-16 20:55:44 -04:00
Hiroku 642fa11cb2 Merge branch '1.19.4' into '1.19.3'
What seems backwards is actually forwards

See merge request cable-mc/cobblemon!453
2023-04-16 14:02:05 +00:00
DeltricandHiroku 22ce696423 What seems backwards is actually forwards 2023-04-16 14:02:04 +00:00
nlingebretson 4bd30be29f Added lang data for berries and tooltips (part 1) 2023-04-15 19:20:58 -05:00
nlingebretson 0b52918d8d Pointed textures on trees to updated files. 2023-04-15 14:42:54 -05:00
bcheevers123 9b73565e28 Added Texture, Young Declare, Mature Declare, Blockstate, Item Icon, Item Declare. Some berrry trees missing textures. Lang and Berry Data need added. 2023-04-15 19:36:41 +01:00
bcheevers123 a1e04e8df2 Added Texture, Young Declare, Mature Declare, Blockstate, Item Icon, Item Declare. Some berrry trees missing textures. Langf and Berry Data need added. 2023-04-15 19:35:48 +01:00
nlingebretson 51a542b6a9 Added Aguav and Cheri Berry implementation examples 2023-04-15 10:15:28 -05:00
Paul e88cbc1618 Gen 9 french translations 2023-04-12 21:24:54 +10:00
Paul 2f7084ae15 Networking and PC integration for pasture block 2023-04-12 21:17:02 +10:00
nlingebretson f0e8d80da4 Added texture/item files and added items in the declaration portion 2023-04-10 20:21:58 -05:00
Hiroku a392a087dc Merge branch 'misc-battle-interpretations' into '1.19.3'
Disable, Lock On, and Protosynthesis

See merge request cable-mc/cobblemon!451
2023-04-09 11:28:56 +00:00
DeltricandHiroku 0081e60cd5 Disable, Lock On, and Protosynthesis 2023-04-09 11:28:56 +00:00
dhi_holo 3d94cf2c11 Minor Advancement Visual Update
Improved quality of Cobblemon logos, and switched the Shiny achievement icon from Charizard to Gyarados
2023-04-09 17:16:16 +10:00
Hiroku 50588cf372 Merge branch 'misc_fixes' into 'main'
Misc small Fixes

See merge request cable-mc/cobblemon!450
2023-04-09 04:33:39 +00:00
TyzillionandHiroku dd8e4ee0a3 Misc small Fixes 2023-04-09 04:33:38 +00:00
Paul 594d188de7 Pasture block supports limited wandering, save and load logic 2023-04-08 18:20:23 +10:00
Hiroku dd8ff8ef36 Merge branch 'learnset-query-command' into '1.19.3'
Learnset query command for command block/mcfunction use

See merge request cable-mc/cobblemon!449
2023-04-07 18:30:07 +00:00
LiciousandHiroku 7cf46baa98 Learnset query command for command block/mcfunction use 2023-04-07 18:30:07 +00:00
Licious17 6c5efcd69b Fix shouldered Pokémon not gaining passive friendship as if they were sent out. 2023-04-07 10:13:13 +01:00
Hiroku 9d109a9584 Merge branch 'struggle-messages' into 'main'
Implemented messages for struggling

See merge request cable-mc/cobblemon!440
2023-04-07 02:17:28 +00:00
DeltricandHiroku fdef9d9837 Implemented messages for struggling 2023-04-07 02:17:28 +00:00
Hiroku d9cc185052 Merge branch 'main' into 'main'
Update move,ability and pokedex for zh_cn.json

See merge request cable-mc/cobblemon!444
2023-04-07 01:48:29 +00:00
Yyi yunandHiroku 1fdf2b53ff Update move,ability and pokedex for zh_cn.json 2023-04-07 01:48:28 +00:00
Licious17 5c60f2634d Fix starter options in starter screen facing Narnia, closes #243 2023-04-06 14:47:58 +01:00
Paul b082c3e04d Compile error fix and @JvmField on PokemonPropertyExtractors 2023-04-06 22:07:20 +10:00
dhi_holo 424b4dd401 Advancement Tab GUI Background
Another bitching at Mojang's new Atlas system, Closes issue #245
2023-04-06 22:06:12 +10:00
Paul 1437dbebcf Changelog and licenses 2023-04-06 21:14:38 +10:00
dhi_holo cfb49e7f6c Cobblemon Logos Moved
Mojang made atlas stuff which sucks to deal with in 1.19.3+, so I've moved the textures for the Cobblemon icons from GUI into Items, because Mojang loves ruining stuff that worked for years
2023-04-06 20:50:46 +10:00
Hiroku 107baf4d9a Merge branch 'interpreter_instruction_additions' into 'main'
Add handlers for |-sidestart|, |-sideend|, and |-fieldactivate| instructions to ShowdownInterpreter

See merge request cable-mc/cobblemon!442
2023-04-06 10:23:24 +00:00
Hiroku e739be029a Merge branch 'additional_pokemon_events' into 'main'
Added BattleFled, BattleStarted, PokemonRecalled, and PokemonSent events

See merge request cable-mc/cobblemon!404
2023-04-06 10:10:07 +00:00
Licious bfca02c78f Merge branch 'ut_animation_validation' into 'main'
Validate animations are registered via model AND configuration

See merge request cable-mc/cobblemon!436
2023-04-06 10:01:34 +00:00
NickandLicious 007bc4b212 Validate animations are registered via model AND configuration 2023-04-06 10:01:34 +00:00
Paul bfe1d8bb75 Bunch of work on the pasture block 2023-04-06 19:28:05 +10:00
Hiroku d6fc53d42c Merge branch 'pokemon-store-query-command' into '1.19.3'
Add Pokémon store query command for command block/mcfunction use

See merge request cable-mc/cobblemon!446
2023-04-06 09:23:26 +00:00
LiciousandHiroku 787ce28318 Add Pokémon store query command for command block/mcfunction use 2023-04-06 09:23:26 +00:00
Hiroku b5c10ea372 Merge branch 'species-data-fixes' into '1.19.3'
Species data fixes

See merge request cable-mc/cobblemon!445
2023-04-06 09:21:50 +00:00
LiciousandHiroku 7bc0547c66 Species data fixes 2023-04-06 09:21:50 +00:00
Licious17 9c0babf267 Fix Forge client lifecycle stuff, runs work again 2023-04-06 10:16:06 +01:00
Segfault Guy 0b1915946a Specify status cured on shed skin activation 2023-04-05 01:38:16 -04:00
Segfault Guy fc78d64f62 Add handlers for |-sidestart|, |-sideend|, and |-fieldactivate| instructions 2023-04-05 00:45:19 -04:00
jmmcp 2140384e9f Basis for custom brewing recipes (1.19.3 edition) 2023-04-04 15:55:31 -04:00
Hiroku 3785313dd2 Update PlatformEvents.kt to use @jvmField like it was intended oops 2023-04-03 11:20:04 +00:00
Licious f091c08dd3 Merge branch 'ys/handle-cure-status-fix-and-general-status-fix' into 'main'
Status fixes

See merge request cable-mc/cobblemon!434
2023-04-03 07:41:57 +00:00
Deltric 6e5438040e Updated link cable path 2023-04-03 00:43:19 -05:00
Segfault Guy c35213cb3b Fixed BattleVictoryEvent. Spun BattleFledEvent and InterpretFaint to their own branch. 2023-04-02 23:10:49 -04:00
Segfault Guy 7b2e287b89 Added losers to BattleVictoryEvent 2023-04-02 23:10:49 -04:00
Segfault Guy 5b1f32cc57 Added BattleStartedEvent. Included Pokemon that caused faint in BattleFaintedEvent. Added temporary action history to PokemonBattle. 2023-04-02 23:10:49 -04:00
Segfault Guy faa8f5aae6 Included fleeing player in BattleFledEvent. Fixed misc mistakes. 2023-04-02 23:10:49 -04:00
Segfault Guy 7c3ddf6d03 Fixed BattleFaintedEvent to include killer. Tweaked events. 2023-04-02 23:10:49 -04:00
Segfault Guy 80a6a10293 Added BattleFainted, BattleFled, PokemonRecalled, and PokemonSent events 2023-04-02 23:10:49 -04:00
Paul 65ac3319f3 Updated from main 2023-04-01 18:48:22 +10:00
Paul 045b9fbc9a Merge remote-tracking branch 'origin/main' into 1.19.3
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/party/PartyStore.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/pc/PCGUI.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/effect/SpawnSnowstormParticleHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/MatrixWrapper.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobblemonDataProvider.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokeball/EmptyPokeBallEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/ai/goals/PokemonInBattleMovementGoal.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/storage/party/ReleasePCPokemonHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/storage/pc/ReleasePartyPokemonHandler.kt
#	common/src/main/resources/assets/cobblemon/models/item/link_cable.json
#	common/src/main/resources/cobblemon-common.accesswidener
2023-04-01 17:54:36 +10:00
Yaseen b97f447169 Status fixes 2023-04-01 06:27:33 +01:00
Hiroku 21e505e7ad Merge branch 'whoopsies' into 'main'
Fixes my mistake

See merge request cable-mc/cobblemon!433
2023-04-01 04:39:49 +00:00
dhi_holoandHiroku 6f30fc3ee3 Fixes my mistake 2023-04-01 04:39:48 +00:00
Hiroku c52822ef3d Merge branch 'last_minute_changes' into 'main'
Fixed Klink line crash

See merge request cable-mc/cobblemon!432
2023-04-01 03:50:09 +00:00
TyzillionandHiroku 5c349f54d5 Fixed Klink line crash 2023-04-01 03:50:06 +00:00
Paul 64b869f365 Fixed crash when faint animations aren't found isn't found 2023-04-01 13:14:51 +10:00
Paul fead7cc367 changelog for 1.3.1 [skip-ci] 2023-04-01 11:16:02 +10:00
Paul 622b06b68b 1.3.1 non-snapshot [skip-ci] 2023-04-01 11:04:28 +10:00
Hiroku af7645feb4 Merge branch 'ys/no-target-pokemon-fix' into 'main'
No target pokemon fix (for moves like Aromatherapy)

See merge request cable-mc/cobblemon!431
2023-04-01 00:38:43 +00:00
YaseenandHiroku ccf7218cfc No target pokemon fix (for moves like Aromatherapy) 2023-04-01 00:38:43 +00:00
Hiroku 9b767f5170 Merge branch 'aromatherapy_crash_&_link_cable_inconsistency' into 'main'
Aromatherapy crash & Link Cable fix

See merge request cable-mc/cobblemon!430
2023-03-31 23:07:30 +00:00
LiciousandHiroku fcb4861e94 Aromatherapy crash & Link Cable fix 2023-03-31 23:07:30 +00:00
Hiroku aa8b0d3fbb Merge branch 'server-client-resource-fix' into 'main'
server crash fix for resource reload fix

See merge request cable-mc/cobblemon!429
2023-03-31 23:07:19 +00:00
MoeBoy76 d4fa5255ec server crash fix for resource reload fix 2023-04-01 09:01:31 +11:00
Hiroku 4f3e874e70 Merge branch 'bucket-influence' into 'main'
Influences can now modify bucket weight

See merge request cable-mc/cobblemon!428
2023-03-31 13:16:16 +00:00
DeltricandHiroku 6df0f17798 Influences can now modify bucket weight 2023-03-31 13:16:16 +00:00
Paul a9e3115b46 Merge remote-tracking branch 'origin/main' 2023-03-31 22:48:12 +10:00
Paul bef8e064f1 1.3.1 in the Cobblemon object 2023-03-31 22:47:18 +10:00
Hiroku 79873c44e7 Merge branch 'GDWR/pokebox_command' into 'main'
Add `pokebox` and `pokeboxall` commands

Closes #169

See merge request cable-mc/cobblemon!401
2023-03-31 12:01:15 +00:00
Paul d4abf9f2b5 Merge remote-tracking branch 'home/main' into GDWR/pokebox_command
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonCommands.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2023-03-31 22:00:00 +10:00
Hiroku fd8b6c50a5 Merge branch 'qol-switch-to-last-pokemon' into 'main'
Switch selected party Pokemon to the last Pokemon used after a battle

See merge request cable-mc/cobblemon!394
2023-03-31 11:35:10 +00:00
chandler05andHiroku 2b872d85cf Switch selected party Pokemon to the last Pokemon used after a battle 2023-03-31 11:35:10 +00:00
Hiroku d98908b91d Merge branch '206-instant-flee' into 'main'
Added check for fleeDistance == -1 in checkFlee()

Closes #206

See merge request cable-mc/cobblemon!418
2023-03-31 11:34:08 +00:00
selfdotandHiroku f592e6bc05 Added check for fleeDistance == -1 in checkFlee() 2023-03-31 11:34:07 +00:00
Hiroku dad86f3692 Merge branch 'GDWR/add_spawn_pokemon_from_pool' into 'main'
Add `SpawnPokemonFromPool` command

Closes #170

See merge request cable-mc/cobblemon!407
2023-03-31 11:22:54 +00:00
Hiroku 817b55407c Merge branch 'main' into 'GDWR/add_spawn_pokemon_from_pool'
# Conflicts:
#   CHANGELOG.md
2023-03-31 11:10:11 +00:00
Hiroku b2167a9902 Merge branch 'misc-fixes' into 'main'
Misc Fixes

See merge request cable-mc/cobblemon!425
2023-03-31 11:09:36 +00:00
TyzillionandHiroku d3f5ce42a8 Misc Fixes 2023-03-31 11:09:36 +00:00
Hiroku 0eababd67a Merge branch 'more-recipes-already' into 'main'
A few recipes

See merge request cable-mc/cobblemon!427
2023-03-31 09:22:30 +00:00
dhi_holoandHiroku 103f65800f A few recipes 2023-03-31 09:22:30 +00:00
Veraxiel 55925fc4a4 Update BestSpawnerConfig.kt 2023-03-31 08:19:47 +00:00
Paul 63d4176e86 Merge remote-tracking branch 'origin/main' 2023-03-31 13:56:08 +10:00
Hiroku 4709d0f766 Merge branch 'showdownInterpreter' into 'main'
add interpretation for yawn and fixed a bug in silent message interpretation

See merge request cable-mc/cobblemon!422
2023-03-31 03:55:05 +00:00
BobbyandHiroku e1ef1d9bb0 add interpretation for yawn and fixed a bug in silent message interpretation 2023-03-31 03:55:04 +00:00
Paul 5745b394b5 Updated all the translations 2023-03-31 13:53:51 +10:00
Paul 335f6f7104 Merge remote-tracking branch 'origin/main' 2023-03-31 11:33:41 +10:00
Hiroku 2de001f61c Merge branch 'mjkim__-main-patch-41166' into 'main'
Updated Korean Translations

See merge request cable-mc/cobblemon!424
2023-03-31 01:33:11 +00:00
KY4LUandHiroku 9739ed917a Updated Korean Translations 2023-03-31 01:33:11 +00:00
Paul e9e699c60b Merge remote-tracking branch 'origin/main' 2023-03-31 11:32:06 +10:00
Paul 4dd78d5755 Update Showdown with a merge from showdown/master and misc data order fix 2023-03-31 11:27:16 +10:00
Hiroku 1e67385f15 Merge branch 'GDWR/patch_friendship_based_attacks' into 'main'
Correctly format misc data in Showdown team packet

Closes #201

See merge request cable-mc/cobblemon!417
2023-03-31 01:16:35 +00:00
Hiroku f29a26869b Merge branch '191-investigate-crash-with-showdown-move-action-interpretation' into 'main'
Migrated HandleMoveInstruction to use BattleMessage

Closes #191

See merge request cable-mc/cobblemon!423
2023-03-31 01:08:01 +00:00
Hiroku aefdbfcce3 Merge branch 'ys/recall-shoulder-pokemon-on-heal-and-evolve' into 'main'
Recall shoulder pokemon on healer use

See merge request cable-mc/cobblemon!419
2023-03-31 00:13:33 +00:00
YaseenandHiroku 05bce3c058 Recall shoulder pokemon on healer use 2023-03-31 00:13:33 +00:00
Renaissance 8ba622a635 Migrated HandleMoveInstruction to use BattleMessage 2023-03-30 01:47:18 +00:00
GDWR 3b1e8f1624 Correctly format misc data in Showdown team packet 2023-03-29 20:04:52 +01:00
Village eae49b0f7e Merge branch 'main' of https://gitlab.com/cable-mc/pokemon-cobbled 2023-03-29 01:00:06 -04:00
Village 9af141e9cd fix lava particles 2023-03-29 00:59:04 -04:00
Hiroku 061a418c90 Merge branch 'showdownInterpreter' into 'main'
add interpretation for -activate -end and -damage instructions for the move wrap

See merge request cable-mc/cobblemon!414
2023-03-29 03:32:32 +00:00
Hiroku bb52d55c80 Merge branch 'feature/add_missing_extractors' into 'main'
feat: amend PokemonPropertyExtractors to match what PokemonProperties can parse from string

See merge request cable-mc/cobblemon!411
2023-03-28 23:56:34 +00:00
PolymetaandHiroku 416affb1c3 feat: amend PokemonPropertyExtractors to match what PokemonProperties can parse from string 2023-03-28 23:56:34 +00:00
RobertLudwick 7061d58333 add interpretation for -activate -end and -damage instructions for the move wrap 2023-03-28 18:41:12 -04:00
Nick b59aab557f Merge branch 'fix-benched-moves-sync' into 'main'
Fix benched moves not syncing correctly on the Pokemon DTO

See merge request cable-mc/cobblemon!413
2023-03-28 20:35:04 +00:00
LiciousandNick 1f98355bec Fix benched moves not syncing correctly on the Pokemon DTO 2023-03-28 20:35:03 +00:00
Licious17 ad6b63055c Add en_us description for all gen 9 moves and abilities. 2023-03-28 19:50:44 +01:00
GDWR 96611b04dc Add SpawnPokemonFromPool command 2023-03-28 19:26:30 +01:00
GDWR 49d1015104 Operate on the party pokemon backwards so the "lead" is kept 2023-03-28 19:25:14 +01:00
GDWR 0eeb992724 If pokebox command would move a Player's last poke while preventCompletePartyDeposit is set, stop and error 2023-03-28 19:25:14 +01:00
GDWR 9e9921098a Add Lang entries for error messages 2023-03-28 19:25:14 +01:00
GDWR 0b23e68786 Add pokebox and pokeboxall commands 2023-03-28 19:25:12 +01:00
Yaseen 532bf008d3 shorter desert long path 2023-03-28 18:09:11 +01:00
Yaseen 701c727475 Shorter long_paths for snowy and desert 2023-03-28 18:08:55 +01:00
Yaseen 3df605c50f Fix desert and taiga pokecenter nbts 2023-03-28 17:33:27 +01:00
Licious 0ce309c37c Merge branch 'thorium-mod-compatibility' into 'main'
Fix incompatibility with the Thorium mod.

See merge request cable-mc/cobblemon!408
2023-03-28 14:23:39 +00:00
Licious 75527fdf40 Fix incompatibility with the Thorium mod. 2023-03-28 14:23:39 +00:00
Licious 2389bdf25d Merge branch 'any_evolution-requirement' into 'main'
Add utility evolution requirement for any match of children requirements

See merge request cable-mc/cobblemon!405
2023-03-28 09:56:34 +00:00
Licious 24c9073c4c Add utility evolution requirement for any match of children requirements 2023-03-28 09:56:34 +00:00
Hiroku b33e2118b4 Merge branch 'showdown-unbundle-tweak' into 'main'
Don't run mkdirs on the zip target, but rather its parent. Fixes an IO exception

See merge request cable-mc/cobblemon!410
2023-03-28 09:01:26 +00:00
Nick 993ca68a5a Don't run mkdirs on the zip target, but rather its parent. Fixes an IO exception 2023-03-27 22:24:05 -07:00
jmmcp ad97188902 Updated snowy pokecenter nbt 2023-03-28 00:59:52 -04:00
Nick f0d47055c4 Merge branch 'transitive-access-wideners' into 'main'
Use transitive access wideners in favor of side-mod/plugin development

See merge request cable-mc/cobblemon!409
2023-03-28 04:57:49 +00:00
Nick bf331a7471 Use transitive access wideners in favor of side-mod/plugin development 2023-03-28 04:57:48 +00:00
Hiroku f74ba3dc77 Merge branch 'more-poke' into 'main'
Implement Nosepass & Slugma line

Closes #168

See merge request cable-mc/cobblemon!406
2023-03-27 23:49:40 +00:00
LiciousandHiroku 063b627043 Implement Nosepass & Slugma line 2023-03-27 23:49:39 +00:00
Licious17 85335d14ed The great shoulder nerf. 2023-03-27 23:08:16 +01:00
Licious 358b544583 Merge branch 'misc_texture_fixes' into 'main'
Misc Fixes

See merge request cable-mc/cobblemon!403
2023-03-27 19:06:49 +00:00
TyzillionandLicious ac945b4597 Misc Fixes 2023-03-27 19:06:48 +00:00
Yaseen 237edcc2fa a bunch of code clean up 2023-03-27 17:18:10 +01:00
Yaseen 51ab2c4fd8 Tidy up access wideners 2023-03-27 16:31:28 +01:00
Yaseen c0a482a92a better desert village nbt 2023-03-27 16:29:55 +01:00
Yaseen 829a063fe7 Add support for legacy pool elements (for paths) + use CobblemonStructureIDs 2023-03-27 15:47:37 +01:00
Yaseen f3f2fa11f7 Delete some temp files 2023-03-27 15:45:31 +01:00
Yaseen 298ba53ec2 taiga with stairs 2023-03-27 08:09:14 +01:00
jmmcp 28401e3c95 Updated taiga nbt and changed weights 2023-03-27 00:43:40 -04:00
Paul 8733085232 Fixed all pokemon being lava resistant 2023-03-27 14:33:33 +10:00
Hiroku cbc484a611 Merge branch 'return-before-heal' into 'main'
Return Pokemon to their pokeballs when healing them in a healing machine

See merge request cable-mc/cobblemon!395
2023-03-27 03:35:27 +00:00
chandler05andHiroku e5412a9c3b Return Pokemon to their pokeballs when healing them in a healing machine 2023-03-27 03:35:27 +00:00
Hiroku 3ac325a22e Merge branch '192-disconnecting-from-dedicated-server-causes-pokeballs-to-not-finish-capture-attempt' into 'main'
Fix Pokeballs being able to go through portals & sometimes getting stuck on...

Closes #40 and #192

See merge request cable-mc/cobblemon!400
2023-03-27 03:34:51 +00:00
LiciousandHiroku 6775e30f87 Fix Pokeballs being able to go through portals & sometimes getting stuck on... 2023-03-27 03:34:51 +00:00
Paul 5d30990eb6 Clean duplicate pokemon from data on load 2023-03-27 13:30:38 +10:00
Paul c8917ff02e Fixed best-spawner-config.json being .json.json 2023-03-27 12:00:22 +10:00
Yaseen 3a0ed1a244 half fix for taiga pokecenter jigssaw (still need to make it turn to stairs) 2023-03-27 02:44:25 +01:00
Yaseen b27895a3c2 some refactoring 2023-03-27 02:27:05 +01:00
Yaseen e8647313b7 Streets + processors 2023-03-27 02:23:36 +01:00
Yaseen 7fdff93a25 add mossify processor for taiga pokecenter 2023-03-27 02:18:55 +01:00
Yaseen 06335ca854 better way of adding pokecenters to structure pool 2023-03-27 02:02:50 +01:00
Hiroku de151442cd Merge branch 'GDWR/sound_arrow_keys_in_pc' into 'main'
Make GUI click sound when using arrow keys to navigate PC

Closes #198

See merge request cable-mc/cobblemon!402
2023-03-27 00:22:35 +00:00
Paul b09e553557 Added ru_ru.json, applied selfdot's fix for pokemon navigation (they had merge conflicts) 2023-03-27 10:19:07 +10:00
GDWR 11e150e6aa Make GUI click sound when using arrow keys to navigate PC 2023-03-26 19:14:07 +01:00
Licious17 85afe85150 Minor tweak on TeachCommand 2023-03-26 18:29:38 +01:00
Licious 4f73361565 Merge branch 'GDWR/teach_command_bug' into 'main'
Make /teach correctly use player argument

Closes #181

See merge request cable-mc/cobblemon!388
2023-03-26 17:01:46 +00:00
GDWRandLicious 34d2de0319 Make /teach correctly use player argument 2023-03-26 17:01:46 +00:00
Test e8be1c9ccf Merge branch '196-apricorn-leaves-cannot-be-composted' into 'main'
Resolve "Apricorn Leaves cannot be Composted"

Closes #196

See merge request cable-mc/cobblemon!399
2023-03-26 14:50:12 +00:00
LiciousandTest 9c36b9449c Resolve "Apricorn Leaves cannot be Composted" 2023-03-26 14:50:12 +00:00
Licious17 1a7695f844 Fix data for Pokémon who have a gender requirement behind their evolution. 2023-03-26 13:53:16 +01:00
Hiroku 7c5e9c43f2 Merge branch 'interaction-wheel-ui' into 'trading'
Refactor interaction wheel GUIs

See merge request cable-mc/cobblemon!396
2023-03-26 06:27:56 +00:00
landonjw b10c09b740 Refactor interaction wheel GUIs 2023-03-26 02:07:43 -04:00
Hiroku 134ebe1c2f Merge branch 'exp_yield_fix' into 'main'
Fix for exp yield 0 Pokémon

Closes #184

See merge request cable-mc/cobblemon!393
2023-03-26 05:04:25 +00:00
MoeBoy76andHiroku 923ef08db4 Fix for exp yield 0 Pokémon 2023-03-26 05:04:25 +00:00
Licious17 c962aceed2 Backport fix to clientside Pokémon locating. 2023-03-25 22:44:51 +00:00
Licious ebeebeeee7 Merge branch 'GDWR/capture_poke_sprite_bug' into 'main'
Update state on client side when capture fails

Closes #188

See merge request cable-mc/cobblemon!391
2023-03-25 22:03:37 +00:00
GDWRandLicious 6d6867fb09 Update state on client side when capture fails 2023-03-25 22:03:37 +00:00
Licious17 113e423af1 Merge remote-tracking branch 'origin/1.19.3' into 1.19.3 2023-03-25 21:59:47 +00:00
Licious17 f9cdd9d002 Several fixes & tweaks, Forge currently broken 2023-03-25 21:59:34 +00:00
Licious e98084343d Merge branch 'pc-command-fix' into 'main'
Need to throw exception to stop flow

See merge request cable-mc/cobblemon!390
2023-03-25 11:34:37 +00:00
DeltricandLicious 19dad2daa7 Need to throw exception to stop flow 2023-03-25 11:34:36 +00:00
Hiroku f513475267 Merge branch 'spawns-and-drops' into 'main'
Added and fixed spawns and drops.

See merge request cable-mc/cobblemon!389
2023-03-25 11:24:40 +00:00
VeraxielandHiroku 80fbf4a300 Added and fixed spawns and drops. 2023-03-25 11:24:40 +00:00
Paul 6904e302ff Added fr_ca translation, updated ja_jp and removed dead line 2023-03-25 20:09:46 +10:00
Paul faf3858a5e Added th_th translation 2023-03-25 19:52:08 +10:00
Paul 501dd51e29 Merge remote-tracking branch 'origin/main' 2023-03-25 19:50:43 +10:00
Licious 7b23ce055c Merge branch '177-investigate-reload-preventing-moves-from-being-learnt' into 'main'
Resolve "Investigate /reload preventing moves from being learnt"

Closes #177

See merge request cable-mc/cobblemon!385
2023-03-25 09:13:06 +00:00
Licious ec8b9be4f6 Resolve "Investigate /reload preventing moves from being learnt" 2023-03-25 09:13:06 +00:00
Paul e62e08aafb Added ja_jp translation 2023-03-25 17:50:34 +10:00
Paul db6a60d3cb Fixed Pokémon not looking at each other in battle 2023-03-25 14:21:35 +10:00
Paul 94ca3808ed Maybe fixed particle effect issues where they overlap or occur after death 2023-03-25 14:21:00 +10:00
Hiroku 9eec283036 Merge branch 'feature/release_events' into 'main'
feat(api): implement ReleasePokemon pre and post event

See merge request cable-mc/cobblemon!380
2023-03-24 23:05:38 +00:00
PolymetaandHiroku 3a0c801ffd feat(api): implement ReleasePokemon pre and post event 2023-03-24 23:05:38 +00:00
Test ab795a4c6c Merge branch '178-disable-psysical-collision-on-1st-stage-apricorn-buds' into 'main'
Resolve "Disable psysical collision on 1st stage apricorn buds"

Closes #178

See merge request cable-mc/cobblemon!384
2023-03-24 18:49:54 +00:00
LiciousandTest 0db41c1f9b Resolve "Disable psysical collision on 1st stage apricorn buds" 2023-03-24 18:49:54 +00:00
Hiroku 2d315920f8 Merge branch 'icon-fix' into 'main'
Fixed Advancement Branch Icon

See merge request cable-mc/cobblemon!374
2023-03-24 06:56:39 +00:00
dhi_holoandHiroku 7449bc2377 Fixed Advancement Branch Icon 2023-03-24 06:56:39 +00:00
Paul 15065e621f Protect pokeballs from causing duplicate Pokemon 2023-03-24 16:22:19 +10:00
Hiroku 59fdd41c46 Merge branch 'Added-ShowdownInterpreter-Instructions' into 'main'
Added ShowdownInterpreter Instructions

Closes #179 and #165

See merge request cable-mc/cobblemon!383
2023-03-24 06:08:01 +00:00
RenaissanceandHiroku fa04e168ac Added ShowdownInterpreter Instructions 2023-03-24 06:08:00 +00:00
Test 94b28c025a Merge branch '176-prevent-pokemon-entity-travel-between-dimensions' into 'main'
Resolve "Prevent Pokémon entity travel between dimensions"

Closes #176

See merge request cable-mc/cobblemon!382
2023-03-23 22:13:10 +00:00
LiciousandTest 6ed4938028 Resolve "Prevent Pokémon entity travel between dimensions" 2023-03-23 22:13:10 +00:00
Paul d2284a8b3b Merge remote-tracking branch 'origin/main' into 1.19.3
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/PlayerExtensions.kt
2023-03-23 19:24:45 +10:00
Licious 99d03b16b2 Merge branch 'teach-command-expansion' into 'main'
Expand teach command functionality

See merge request cable-mc/cobblemon!381
2023-03-22 20:31:57 +00:00
Licious f70f7fe354 Expand teach command functionality 2023-03-22 20:31:56 +00:00
Hiroku 878c31fac7 Merge branch 'held-item-full-inv-fix' into 'main'
Held item give/remove fixes

See merge request cable-mc/cobblemon!379
2023-03-22 11:03:57 +00:00
LiciousandHiroku 9945143dd9 Held item give/remove fixes 2023-03-22 11:03:56 +00:00
Licious17 770d248b3a Merge remote-tracking branch 'origin/main' 2023-03-21 23:07:03 +00:00
Licious17 345dd60e11 Fix lack of healing message with the black sludge 2023-03-21 23:06:53 +00:00
Licious 7b48ddf418 Merge branch 'Fixing-various-shinies' into 'main'
Fixed various shinies and a couple misc. bugs

See merge request cable-mc/cobblemon!377
2023-03-21 22:12:50 +00:00
JMMCPandLicious e8ea697caa Fixed various shinies and a couple misc. bugs 2023-03-21 22:12:50 +00:00
Licious 33021e2cb8 Merge branch 'json-bug-fixes' into 'main'
Fixes wrongly-formatted JSON files

See merge request cable-mc/cobblemon!378
2023-03-21 20:48:28 +00:00
MelonSpeedrunsandLicious d577687a87 Fixes wrongly-formatted JSON files 2023-03-21 20:48:28 +00:00
Hiroku e603238339 Merge branch 'misc-fixes' into 'main'
Misc fixes & additions

See merge request cable-mc/cobblemon!376
2023-03-20 21:32:57 +00:00
LiciousandHiroku a62f1fe560 Misc fixes & additions 2023-03-20 21:32:57 +00:00
Yaseen ba22800783 Some experiments 2023-03-19 23:45:14 +00:00
Yaseen 832f260472 Remove unused mixins 2023-03-19 22:51:17 +00:00
Paul 96dd007db9 Merge remote-tracking branch 'origin/main' 2023-03-19 21:18:49 +10:00
Paul c339e36f9a Fixed custom Pokémon not being usable in battle by properly fixing ground type moves hitting flying types etc 2023-03-19 21:17:56 +10:00
Hiroku 2798487106 Merge branch 'modify-global-influences' into 'main'
Updated Global Influences

See merge request cable-mc/cobblemon!375
2023-03-19 11:05:41 +00:00
DeltricandHiroku 252139d07f Updated Global Influences 2023-03-19 11:05:40 +00:00
Licious17 671c96856f Doc ServerPlayerEvent.RightClickEntity 2023-03-18 22:49:57 +00:00
Licious17 ec625ebc60 Fix bad merge imports 2023-03-18 21:39:09 +00:00
Licious17 ece0347973 Merge branch 'main' into 1.19.3
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/widgets/BattleMessagePane.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/pokemon/update/NatureUpdatePacket.kt
#	fabric/src/main/resources/fabric.mod.json
#	forge/src/main/resources/META-INF/mods.toml
#	gradle/libs.versions.yml
2023-03-18 21:18:47 +00:00
Paul e55c54fb24 Fixed log spam when rendering pokemon model items 2023-03-18 17:25:42 +10:00
Paul 74c4e2ae04 Fixed a crash when killing Dodrio 2023-03-18 14:10:59 +10:00
Paul 49671f7867 1.3.0 finalising 2023-03-18 12:35:04 +10:00
Hiroku 70b1431c44 Merge branch 'advancement-quick-fix' into 'main'
Update craft_poke_ball.json

See merge request cable-mc/cobblemon!373
2023-03-18 00:50:39 +00:00
dhi_holoandHiroku 90a0135f94 Update craft_poke_ball.json 2023-03-18 00:50:39 +00:00
Paul 1a3790a071 Fixed held item crash with Fling 2023-03-18 10:48:34 +10:00
Paul f62a875c52 Merge remote-tracking branch 'origin/main' 2023-03-18 10:23:48 +10:00
Paul c11d8f7d84 Fixed Showdown mechanics being botched again, the true problem is Showdown battle instances not having gen: 9 2023-03-18 10:22:56 +10:00
Hiroku f49c4c0b6c Merge branch 'dependency-updates' into 'main'
Update architectury + fabric API dependency requirements

See merge request cable-mc/cobblemon!372
2023-03-17 23:25:32 +00:00
NickandHiroku e633c5f1b0 Update architectury + fabric API dependency requirements 2023-03-17 23:25:32 +00:00
Paul 30d2c4ddfc Merge remote-tracking branch 'origin/main'
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation3/carvanha.json
2023-03-18 08:44:49 +10:00
Paul 14e721c81f Fixed Carvanha + Sharpedo swimming AI and made surface slightly rarer to counteract Gyarados spawns 2023-03-18 08:44:04 +10:00
Hiroku 4675a47bc6 Merge branch 'hide-tooltip-tag' into 'main'
Add Hide Tooltip tag for pokeballs

See merge request cable-mc/cobblemon!370
2023-03-17 22:23:22 +00:00
Hiroku de55ec98a0 Merge branch 'drops' into 'main'
Drops

See merge request cable-mc/cobblemon!369
2023-03-17 22:21:51 +00:00
XylopiaandHiroku 2e6d7509a6 Drops 2023-03-17 22:21:51 +00:00
Hiroku e30ca8bc23 Merge branch 'lang-fix' into 'main'
Lang fixes

See merge request cable-mc/cobblemon!366
2023-03-17 22:20:11 +00:00
LiciousandHiroku 9b485ee8ad Lang fixes 2023-03-17 22:20:11 +00:00
Licious 631d6ab776 Merge branch 'model-fixes-for-1.3' into 'main'
Model fixes for 1.3

See merge request cable-mc/cobblemon!368
2023-03-17 22:06:58 +00:00
XylopiaandLicious ccacd18a23 Model fixes for 1.3 2023-03-17 22:06:58 +00:00
Licious17 bca0812d0c Fix Nature sync packet interpreting identifiers incorrectly. 2023-03-17 22:04:53 +00:00
Deltric 5518b5c66c Add Hide Tooltip tag for pokeballs 2023-03-17 16:57:59 -05:00
Licious17 fef2db118e Fix Miltank milking implementation. 2023-03-17 16:43:42 +00:00
Paul cbcc9c65d9 More changelog [skip-ci] 2023-03-17 20:20:43 +10:00
Paul 3d3ce6fa0f Merge remote-tracking branch 'origin/main' 2023-03-17 20:08:22 +10:00
Paul b5d05c4c55 Loads of changelog updates, fix for beam rendering of PokeBalls, @JvmStatic on PokemonItem functions 2023-03-17 20:07:28 +10:00
Hiroku ec6dcdb21a Merge branch 'quick-fixes' into 'main'
Fixed Advancement and Added Item to Tag

See merge request cable-mc/cobblemon!365
2023-03-17 08:45:16 +00:00
dhi_holoandHiroku b5f2e260ea Fixed Advancement and Added Item to Tag 2023-03-17 08:45:15 +00:00
Hiroku 60c0c97722 Merge branch 'spawn_fixes' into 'main'
Added Spawn files for all newly implemented Pokemon.

See merge request cable-mc/cobblemon!364
2023-03-17 04:06:19 +00:00
TyzillionandHiroku ddb78d1467 Added Spawn files for all newly implemented Pokemon. 2023-03-17 04:06:19 +00:00
Hiroku 0878abc9f4 Merge branch 'Starter_Implementation' into 'main'
Implemented Gen 5,6,7, and 8 starters.

See merge request cable-mc/cobblemon!363
2023-03-17 03:54:54 +00:00
TyzillionandHiroku c466d5e0cb Implemented Gen 5,6,7, and 8 starters. 2023-03-17 03:54:54 +00:00
Hiroku 0778014d80 Merge branch 'leftover-fix' into 'main'
Leftovers now drop on the floor if the players inventory is full.

See merge request cable-mc/cobblemon!357
2023-03-17 03:46:38 +00:00
amoandHiroku 3f9cb4037a Leftovers now drop on the floor if the players inventory is full. 2023-03-17 03:46:37 +00:00
Paul 8794dcf0cd Changelog for langs [skip-ci] 2023-03-17 12:33:08 +10:00
Paul 161d3acf0c Merge remote-tracking branch 'origin/main' 2023-03-17 12:27:05 +10:00
Paul f914d1e38e Updated heaps of langs 2023-03-17 12:26:13 +10:00
Hiroku 47282fcf82 Merge branch 'healer-patch' into 'main'
clamp healing machine config values

See merge request cable-mc/cobblemon!362
2023-03-17 02:15:47 +00:00
TestandHiroku 54a719da91 clamp healing machine config values 2023-03-17 02:15:47 +00:00
Paul 890c6c94d9 Minor English correction to held item lang 2023-03-17 11:59:26 +10:00
Paul d23363e427 Fixed moving a Pokémon to an empty later space in the party causing a crash 2023-03-17 11:38:10 +10:00
Yaseen df594f18d4 Some cleanup + small fix 2023-03-17 00:57:37 +00:00
Hiroku f17fb5da25 Merge branch 'implemented_new_pokemon' into 'main'
Multiple fixes and changes to various Pokemon and implemented 2.

See merge request cable-mc/cobblemon!360
2023-03-17 00:53:42 +00:00
TyzillionandHiroku 8d091d905f Multiple fixes and changes to various Pokemon and implemented 2. 2023-03-17 00:53:42 +00:00
Yaseen 5663d50a1c Better fix 2023-03-16 21:04:57 +00:00
Yaseen 373be37287 delete unused mixin 2023-03-16 15:06:51 +00:00
Paul 4cc78ba4c6 Many corrections from merge but why are pokeballs doing that thing when thrown 2023-03-16 21:54:30 +10:00
Hiroku 6bc413f4d6 Merge branch 'drag-scroll' into 'main'
Fix not being able to drag scrollbar

See merge request cable-mc/cobblemon!361
2023-03-16 11:52:51 +00:00
TestandHiroku 59768de4d6 Fix not being able to drag scrollbar 2023-03-16 11:52:51 +00:00
Yaseen 7071d74196 little bit of cleanup 2023-03-16 03:57:52 +00:00
Yaseen f5f3ad0d58 seems like its working 2023-03-16 03:39:05 +00:00
Hiroku b1b435c464 Merge branch 'scaled-difficulty-calc' into 'main'
Scale difficulty on configurable max pokemon level + limit difficulty to a max of 1 bonus

See merge request cable-mc/cobblemon!358
2023-03-15 21:30:15 +00:00
Nick 5fe7bb0097 Scale difficulty on configurable max pokemon level + limit difficulty to a max of 1 bonus 2023-03-14 19:50:02 -07:00
Yaseen 7e1b9b65f1 fix taiga pokecenter nbt 2023-03-14 21:14:10 +00:00
Yaseen 57839da643 Bunch of clean up 2023-03-14 01:48:30 +00:00
Yaseen 4a4dd66a65 A bunch of mixin stuff 2023-03-13 23:59:12 +00:00
Paul 9b29c800b2 Merge remote-tracking branch 'origin/main' into 1.19.3 2023-03-13 22:00:25 +10:00
Hiroku 2f1f33f802 Fix dragon fang recipe 2023-03-13 11:58:40 +00:00
Paul 2aa85c4254 Compile errors and general patching for 1.3 -> 1.4 2023-03-13 21:48:59 +10:00
Paul d576022219 Merge conflict stuff 2023-03-13 16:19:15 +10:00
Paul 749c12f1ae Licenses 2023-03-13 14:42:09 +10:00
Paul 1e4258811c Remaining backend trade logic 2023-03-13 13:20:19 +10:00
Paul 7cc5bd6dc8 Fixed pokemon item renderer spamming errors in console 2023-03-12 21:31:15 +10:00
Hiroku 51f6cf1ed3 Merge branch 'recipe-sprint' into 'main'
Held Item Recipes

See merge request cable-mc/cobblemon!352
2023-03-12 06:15:09 +00:00
dhi_holoandHiroku e487dd2cde Held Item Recipes 2023-03-12 06:15:09 +00:00
Paul bfef29b11a Added Razor Fang 2023-03-12 12:36:19 +10:00
Paul e22bcd9fb3 Fixed model items not rendering layers 2023-03-12 12:19:34 +10:00
Paul 167b70d237 Added tooltip to healing machine 2023-03-12 11:14:23 +10:00
Paul ac8ffc2ca1 More logic for handling requests for battle challenges and trade offer on server and client 2023-03-12 10:10:08 +10:00
Hiroku e60fd588f8 Merge branch 'socket-showdown-fix' into 'main'
Fix socket showdown for changes in MR 353

See merge request cable-mc/cobblemon!355
2023-03-11 23:23:30 +00:00
LandonandHiroku 90f446455f Fix socket showdown for changes in MR 353 2023-03-11 23:23:30 +00:00
Hiroku 1368f1ed76 Merge branch 'more-player-extensions' into 'main'
Added player extensions for PC and extra data

See merge request cable-mc/cobblemon!354
2023-03-11 22:53:44 +00:00
DeltricandHiroku ef10c62114 Added player extensions for PC and extra data 2023-03-11 22:53:44 +00:00
Hiroku fb01cd0302 Merge branch 'showdown-species-fixes' into 'main'
Showdown species fixes

See merge request cable-mc/cobblemon!353
2023-03-11 13:11:01 +00:00
LiciousandHiroku 2fae30206c Showdown species fixes 2023-03-11 13:11:01 +00:00
Paul ea3a1f16f3 Fixed apple eating mixin on Forge 2023-03-11 18:51:46 +10:00
Paul 20b6f44e63 Updated Showdown version 2023-03-11 17:53:04 +10:00
Paul d61656afe9 Licenses 2023-03-11 14:13:12 +10:00
Paul cc69f04afa Merge remote-tracking branch 'origin/main' 2023-03-11 14:10:19 +10:00
Paul 397e9a2b5f Added leftovers from eating apples 2023-03-11 14:09:25 +10:00
Hiroku dbd7714a26 Merge branch 'Added-Razor-Claw' into 'main'
Added Razor Claw item.

See merge request cable-mc/cobblemon!351
2023-03-11 03:49:48 +00:00
JMMCPandHiroku 33cfe3b981 Added Razor Claw item. 2023-03-11 03:49:48 +00:00
Hiroku 391283a604 Merge branch 'Fixed-incorrect-luxury-ball-recipe' into 'main'
Fixed incorrect Luxury Ball crafting recipe.

See merge request cable-mc/cobblemon!350
2023-03-11 02:26:42 +00:00
JMMCPandHiroku a56f313957 Fixed incorrect Luxury Ball crafting recipe. 2023-03-11 02:26:42 +00:00
Paul 93261ada2b Fixed move names not being translated in battle messages 2023-03-11 12:20:16 +10:00
Hiroku 6f3797a8db Merge branch 'showdown-interpreter-held-item-additions' into 'main'
Added ShowdownInterpreter support for activation of Leftovers and Quick Claw held items.

See merge request cable-mc/cobblemon!349
2023-03-11 02:03:39 +00:00
JMMCPandHiroku 73751c083d Added ShowdownInterpreter support for activation of Leftovers and Quick Claw held items. 2023-03-11 02:03:38 +00:00
Hiroku f9aa09c654 Merge branch 'walking-leaves' into 'main'
Add Walking Wake and Iron Leaves

See merge request cable-mc/cobblemon!334
2023-03-11 01:23:54 +00:00
LiciousandHiroku 1e92ac4603 Add Walking Wake and Iron Leaves 2023-03-11 01:23:54 +00:00
Paul fb1c1170b3 Corrected mistaken spaces in some lang entries 2023-03-10 23:00:30 +10:00
Licious 5ec7c0f16e Merge branch 'kotlin4forge-compat' into 'main'
Kotlin4forge compat

See merge request cable-mc/cobblemon!340
2023-03-10 12:15:32 +00:00
HirokuandLicious 1e33b4fc1d Kotlin4forge compat 2023-03-10 12:15:32 +00:00
Paul 9d4251ac98 Merge remote-tracking branch 'origin/main' into added-held-items 2023-03-10 21:33:33 +10:00
Paul 07b182f044 Fixed capture calculator bugs 2023-03-10 21:30:39 +10:00
Licious 1619cc117f Merge branch 'added-held-items' into 'main'
Added/Updated many held items.

See merge request cable-mc/cobblemon!348
2023-03-10 11:29:40 +00:00
JMMCPandLicious 574f0cfe1c Added/Updated many held items. 2023-03-10 11:29:40 +00:00
Paul d3e51c9211 Added remapping from charcoal stick to charcoal for Showdown 2023-03-10 20:21:15 +10:00
Paul 6dbaba2895 Removed auspicious armour from is_held_item tag since item was removed 2023-03-10 19:40:34 +10:00
jmmcp 036f1af99f Added held items Leftovers, Light Clay, Magnet, Miracle Seed, Mystic Water, Never-Melt Ice, Poison Barb, Quick Claw, Sharp Beak, Silver Powder, Soft Sand, Spell Tag, and Twisted Spoon.
Updated item sprites for Muscle Band, Safety Goggles, and Wise Glasses.
Changed Charcoal to Charcoal Stick.
2023-03-10 00:59:02 -05:00
Hiroku c3592183fb Merge branch '#145-pokemon-damage-changes' into 'main'
Pokemon invulnerability adjustments

See merge request cable-mc/cobblemon!346
2023-03-10 02:16:19 +00:00
DeltricandHiroku bf322930e7 Pokemon invulnerability adjustments 2023-03-10 02:16:19 +00:00
Paul 9a9885adef Merge remote-tracking branch 'origin/main'
# Conflicts:
#	CHANGELOG.md
2023-03-10 11:46:05 +10:00
Paul 0e22e56ca8 Added block tag support for neededBaseBlocks 2023-03-10 11:45:24 +10:00
Hiroku 0d9b639247 Merge branch 'apricorn-event' into 'main'
Apricorn harvest event

See merge request cable-mc/cobblemon!345
2023-03-10 01:44:45 +00:00
DeltricandHiroku c59733b8ae Apricorn harvest event 2023-03-10 01:44:45 +00:00
Paul 2df57c3166 Client packet handlers for trading 2023-03-10 11:26:21 +10:00
Hiroku c3f28b01f9 Merge branch 'summary-screen-cleanup' into 'main'
Summary screen safety and clean up

See merge request cable-mc/cobblemon!344
2023-03-10 01:25:37 +00:00
LiciousandHiroku 7707530b2f Summary screen safety and clean up 2023-03-10 01:25:37 +00:00
Hiroku e7774a2737 Merge branch '#109-config-pokemon-damage' into 'main'
Config option to disable pokemon player damage

See merge request cable-mc/cobblemon!347
2023-03-10 01:24:53 +00:00
DeltricandHiroku fc3c01aac6 Config option to disable pokemon player damage 2023-03-10 01:24:53 +00:00
Licious 0b5fffae3d Merge branch 'even-more-items' into 'main'
Add/change various evolution items

See merge request cable-mc/cobblemon!343
2023-03-07 21:15:17 +00:00
Licious 2f0f9e9f9a Add/change various evolution items 2023-03-07 21:15:17 +00:00
Hiroku c3201effc7 Merge branch 'nametag-disabling' into 'main'
Handle name tags in the context of the mod

See merge request cable-mc/cobblemon!341
2023-03-07 11:44:56 +00:00
LiciousandHiroku c11074b828 Handle name tags in the context of the mod 2023-03-07 11:44:55 +00:00
Hiroku cb62ebb524 Update CHANGELOG.md [skip-ci] 2023-03-07 09:07:37 +00:00
Hiroku 1eda4884b3 Merge branch 'milk' into 'main'
milk

See merge request cable-mc/cobblemon!342
2023-03-07 09:03:44 +00:00
Village 52ead1d48a milk 2023-03-06 20:22:57 -05:00
jmmcp cfcf97bc88 Updated jsons and village plains pokecenter NBT jigsaw location. 2023-03-06 19:11:16 -05:00
Paul 8eabd03a2b Fixed more instances of capture calculator not doing the division correctly 2023-03-06 17:31:10 +10:00
Paul 4ec1e27b09 Changelog [skip-ci] 2023-03-06 17:29:43 +10:00
Paul 5a6671e988 Merge branch 'main' into milky-capture-calculator
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen6/HonedgeModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/repository/PokemonModelRepository.kt
2023-03-06 17:25:54 +10:00
Paul ae6def9d5f A bunch of fixes to capture calculation, use gen9 but with difficulty scaler and halving of catch when outside of battle 2023-03-06 17:25:18 +10:00
jmmcp 1adf625044 Updated pokecenter NBT files to have proper structure void blocks and healers/pcs implemented.
Implemented natural generation of plains, desert, snowy, taiga, and savanna village pokecenters.
2023-03-05 21:55:47 -05:00
Paul cadb313ff8 Wooloo and Dubwool eat animations, fixed some pokemon sleeping on beds when they shouldn't, shadow size tweak 2023-03-06 12:50:17 +10:00
jmmcp a136ca106b Merge remote-tracking branch 'origin/implementing-naturally-generated-structures' into implementing-naturally-generated-structures
# Conflicts:
#	common/src/main/resources/data/cobblemon/structures/village_plains_pokecenter.nbt
#	common/src/main/resources/data/minecraft/worldgen/template_pool/village/plains/houses.json
2023-03-05 18:27:40 -05:00
Yaseen cbe1a79c2a increase the weights 2023-03-05 23:03:44 +00:00
Yaseen 093f953c7f more houses on long path 2023-03-05 18:22:46 +00:00
Yaseen dfd4fd252f Added long path and pokemon center plains 2023-03-05 18:15:39 +00:00
Paul 36f70fffb2 Created S2C packets for trading 2023-03-05 18:26:43 +10:00
Paul 7170537dcf Merge remote-tracking branch 'origin/trading' into trading 2023-03-05 17:49:04 +10:00
Village 49c578d999 interact icons 2023-03-05 02:36:09 -05:00
jmmcp e22befbc33 Working towards generation in villages 2023-03-04 23:40:19 -05:00
Paul ce94877c8b Licenses 2023-03-05 12:59:22 +10:00
Paul 2826bea987 Swapped recall and send out beam colours again 2023-03-05 12:15:36 +10:00
Paul baa81cef03 Some trade logic, storing trade state and requests 2023-03-05 12:10:19 +10:00
jmmcp 7bbb0eac56 Working towards generation in villages 2023-03-04 15:09:32 -05:00
Licious a698725324 Merge branch 'misc-fixes' into 'main'
Misc fixes

See merge request cable-mc/cobblemon!335
2023-03-04 09:07:57 +00:00
HirokuandLicious e6b3b6fae1 Misc fixes 2023-03-04 09:07:57 +00:00
Paul 06c5eae339 Merge remote-tracking branch 'origin/main' 2023-03-04 17:05:28 +10:00
Hiroku d70f0d2b8a Merge branch 'implemented_new_pokemon' into 'main'
Framings fixed, emissives added, and model tweaks.

See merge request cable-mc/cobblemon!339
2023-03-04 07:04:29 +00:00
TyzillionandHiroku b2e56130cf Framings fixed, emissives added, and model tweaks. 2023-03-04 07:04:28 +00:00
Paul 6ce1288506 Improve safe-positioning of spawning Pokémon 2023-03-04 16:41:31 +10:00
Hiroku b32a949c56 Merge branch 'implementing-missing-shinies' into 'main'
Added/Updated shinies and models for many Pokemon.

See merge request cable-mc/cobblemon!337
2023-03-04 04:45:58 +00:00
JMMCPandHiroku 3f994e761a Added/Updated shinies and models for many Pokemon. 2023-03-04 04:45:57 +00:00
Paul 7891c3e9d8 Fixed water counting as air for spawning 2023-03-04 12:28:42 +10:00
Hiroku e2d6933f8a Merge branch 'more-held-items' into 'main'
Update existing assets and add new held items

See merge request cable-mc/cobblemon!336
2023-03-04 00:59:27 +00:00
LiciousandHiroku d78fda0b9d Update existing assets and add new held items 2023-03-04 00:59:27 +00:00
Hiroku 64d910e10b Merge branch 'pokemon-property-additions' into 'main'
Added the Ability property in PokemonProperties as well as suggestions for values of abilities.

See merge request cable-mc/cobblemon!331
2023-03-03 10:05:38 +00:00
RenaissanceandHiroku f1e83aa039 Added the Ability property in PokemonProperties as well as suggestions for values of abilities. 2023-03-03 10:05:38 +00:00
Hiroku f2fc1b234d Merge branch 'showdown-tech-debt' into 'main'
Improve Showdown Debuggability

See merge request cable-mc/cobblemon!329
2023-03-03 07:17:06 +00:00
LandonandHiroku 9bc4648807 Improve Showdown Debuggability 2023-03-03 07:17:05 +00:00
Paul 0a07058511 Compile error fix 2023-03-03 12:25:38 +10:00
Paul 09cbe63a94 Moved CobblemonItemTags to use public static fields in bytecode 2023-03-03 12:23:05 +10:00
Hiroku 52c4f65927 Merge branch 'main-patch-48f2' into 'main'
Added evolution stones & items tags

See merge request cable-mc/cobblemon!332
2023-03-03 02:21:41 +00:00
GioandHiroku f67a1e1784 Added evolution stones & items tags 2023-03-03 02:21:41 +00:00
Hiroku 55cddf8ded Merge branch 'further-ability-changes' into 'main'
More ability data struc changes

See merge request cable-mc/cobblemon!330
2023-03-03 02:15:31 +00:00
LiciousandHiroku 6879b7ce1a More ability data struc changes 2023-03-03 02:15:31 +00:00
Paul fb40bc0d3c Merge remote-tracking branch 'origin/main' 2023-03-03 12:12:58 +10:00
Paul a8429018ea Made CobblemonEvents etc compile to public static fields instead of getter crap 2023-03-03 12:12:39 +10:00
Paul c445b26639 Fix Deerling/Sawsbuck not appearing with the right season during world spawning 2023-03-03 12:11:28 +10:00
Licious17 715d7643b7 Merge remote-tracking branch 'origin/main' 2023-03-02 21:41:48 +00:00
Licious17 a937b842e9 Remove LA moves learnset blocker, these are now implemented in Showdown. 2023-03-02 21:41:33 +00:00
Emmett de Bruin 0f978ade5a Attempted linearly increasing capture calculator 2023-03-02 13:33:35 -08:00
Paul 9bd5866ef7 Potential fix for old PC blocks causing crashes 2023-03-02 22:15:19 +10:00
Paul 1ec94b0ebe Probable fix for pokeball animation issues with high ping 2023-03-02 22:15:06 +10:00
Paul 8974769f87 Don't spawn particles for entities that are invisible 2023-03-02 22:14:54 +10:00
Paul c20d147838 Fixed absurdly large Turtwig shadow 2023-03-02 21:00:20 +10:00
Paul e28d590dc3 Fixed bidoof spawn file loading a non-contexted preset with conditions before the contexted preset 2023-03-02 20:04:55 +10:00
Xylopia c0f998eb82 Added the ClearParty Command, not tested yet due to spawn file messes 2023-03-01 23:23:05 -05:00
Xylopia 69a3ad59cd Merge remote-tracking branch 'origin/spawn-event' into new-commands
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/api/spawning/detail/PokemonSpawnAction.kt
2023-03-01 23:14:16 -05:00
Xylopia ebe9c7243d Merge remote-tracking branch 'origin/spawn_fixes' into new-commands
# Conflicts:
#	common/src/main/resources/data/cobblemon/spawn_pool_world/0399_bidoof.json
2023-03-01 23:13:25 -05:00
jmmcp c42facec8a Added pokecenter nbt files and allowed village_plains_pokecenter to naturally generate. 2023-03-01 21:07:59 -05:00
Veraxiel 3e28bac830 Updated spawn files. Updated Evo-Stone ore files. 2023-02-28 21:36:01 -05:00
Veraxiel df320ab978 Added presets for derelict, treetop, and wilderness. Updated presets foliage and urban. 2023-02-28 14:01:13 -05:00
Veraxiel fe3dbdcdd8 Update 0399_bidoof.json 2023-02-28 18:50:37 +00:00
tyzillion 1d145f78eb Fixed Pokemon Spawns. 2023-02-28 12:45:04 -05:00
Veraxiel 77828008fa Fixed spawn files. 2023-02-28 10:36:23 -05:00
Hiroku fd13d9400c Merge branch 'ability-evolution-fix' into 'main'
Ability structure fix

See merge request cable-mc/cobblemon!326
2023-02-28 11:12:01 +00:00
LiciousandHiroku 9603713fcb Ability structure fix 2023-02-28 11:12:01 +00:00
Hiroku cc6ba92d42 Merge branch 'ball_models' into 'main'
Updated Poké Ball mechanics and visuals

See merge request cable-mc/cobblemon!325
2023-02-28 09:36:55 +00:00
Hiroku 8316537e90 Updated Poké Ball mechanics and visuals 2023-02-28 09:36:55 +00:00
Paul 6b396c4fc8 Fixed the shift click thing but for real 2023-02-27 18:56:03 +10:00
Hiroku e5fe46eb4d Merge branch 'implemented_new_pokemon' into 'main'
Implemented many Pokemon.

See merge request cable-mc/cobblemon!324
2023-02-27 08:54:24 +00:00
TyzillionandHiroku f2cbf78144 Implemented many Pokemon. 2023-02-27 08:54:24 +00:00
Hiroku 8aafbd54f5 Merge branch 'new-ball-recipes' into 'main'
updated three balls and added a cable

See merge request cable-mc/cobblemon!322
2023-02-24 05:17:11 +00:00
dhi_holoandHiroku 169145656a updated three balls and added a cable 2023-02-24 05:17:11 +00:00
Hiroku 97bb85e9f5 Merge branch 'zerobreaker000-main-patch-48926' into 'main'
Adopted a portion of Yyiyun's translations for zh_cn.json

See merge request cable-mc/cobblemon!323
2023-02-24 02:27:21 +00:00
Paul 7f35f46705 Fixed potential issue when making a Showdown backup folder 2023-02-23 23:57:20 +10:00
Paul e8b23fd0be Fixed spawn packets esp on Forge, fixed various other packets, fixed party overlay again 2023-02-23 23:56:19 +10:00
Licious17 a9e261da03 Fix SpawnExtraDataEntityPacket spawning the entity before applying our data. 2023-02-23 00:17:14 +00:00
Paul 348dd14fc5 Added icon_shiny and move_select that were deleted, fixed math util 2023-02-23 10:04:19 +10:00
Paul 426962aa6b Fixed access widener number 2.0 2023-02-22 21:20:37 +10:00
Paul 40f377f78e Fixed access widener 2023-02-22 20:33:31 +10:00
Paul 39dcae9cb1 Licenses update for 2022 -> 2023 2023-02-22 20:21:59 +10:00
Paul fd8bdf51f2 Licenses 2023-02-22 20:04:30 +10:00
Paul 5eba2230ea Many many corrections from merging main into bye-architectury 2023-02-22 19:35:43 +10:00
Hiroku 2164a59a84 Merge branch 'advancements-reboot' into 'main'
Advancement Reboot

See merge request cable-mc/cobblemon!320
2023-02-22 04:22:09 +00:00
dhi_holoandHiroku 6a65035823 Advancement Reboot 2023-02-22 04:22:09 +00:00
Paul 080a7f76bc Merge remote-tracking branch 'origin/main' into bye-architectury
# Conflicts:
#	common/src/main/java/com/cobblemon/mod/common/mixin/ArgumentTypesMixin.java
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonClientImplementation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonConfiguredFeatures.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonFeatures.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonImplementation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonPlacements.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonSounds.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/battles/model/PokemonBattle.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/entity/EntityAttributeEvent.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/net/MessageBuiltEvent.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/tags/CobblemonItemTags.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/PCBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/summary/Summary.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/pokemon/update/EvolutionUpdatePacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/pokemon/update/SingleUpdatePacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/PokemonRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/SpeciesAssetResolver.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokeball/EmptyPokeBallEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/ai/goals/PokemonInBattleMovementGoal.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/CobblemonItemGroups.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/PacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/SidedPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleHealthChangePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleSwitchPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/pokemon/update/StringUpdatePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/pokemon/update/evolution/EvolutionUpdatePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/storage/EvolutionLikeUpdatePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/storage/SetPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/server/pokemon/update/evolution/EvolutionDisplayUpdatePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/ServerPacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/ServerPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/evolution/EvolutionDisplayUpdatePacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/registry/CompletableRegistry.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/EventExtensions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/math/geometry/TransformationMatrix.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/feature/CobblemonOreConfiguredFeatures.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/feature/CobblemonOrePlacedFeatures.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/placement/BiomeTagModifier.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/placement/CobblemonPlacementTypes.kt
#	common/src/main/resources/assets/cobblemon/textures/gui/interact/move_select.png
#	common/src/main/resources/assets/cobblemon/textures/gui/summary/icon_shiny.png
#	common/src/main/resources/cobblemon-common.accesswidener
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/client/CobblemonFabricClient.kt
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/net/CobblemonNetworkFabric.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/CobblemonForge.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/client/CobblemonForgeClient.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/net/CobblemonNetworkForge.kt
#	gradle/libs.versions.yml
2023-02-22 11:37:37 +10:00
Paul f0fb20f701 Made bones optional in animations so one can add temporary animation files 2023-02-21 10:46:04 +10:00
Paul 7ed179edd2 Added license adding script to utilityscripts because woops I didn't add this [skip-ci] 2023-02-20 22:40:16 +10:00
Paul 2d242af211 Fixed rendering of layers on shoulders 2023-02-20 22:38:34 +10:00
Paul c1f5b6e2b9 Fixed Pokémon kicking their legs super fast 2023-02-20 22:29:35 +10:00
Zero Breaker f8521fe238 Adopted a portion of Yyiyun's translations for zh_cn.json 2023-02-20 12:14:04 +00:00
Hiroku ca66e1e0a7 Merge branch 'Fixed-players-using-multiple-healers-at-once' into 'main'
Fixed issues caused by players being able to use multiple healer machines at once.

See merge request cable-mc/cobblemon!315
2023-02-20 06:47:12 +00:00
JMMCPandHiroku fc2a23ebf4 Fixed issues caused by players being able to use multiple healer machines at once. 2023-02-20 06:47:12 +00:00
Hiroku 7df91c2608 Merge branch 'ys/heal-on-sleep' into 'main'
Heal party on sleep

Closes #143

See merge request cable-mc/cobblemon!317
2023-02-20 05:55:59 +00:00
Yaseen SultanandHiroku 5b67155112 Heal party on sleep 2023-02-20 05:55:59 +00:00
Hiroku a241ac5653 Merge branch 'zerobreaker000-main-patch-82306' into 'main'
Reverted changes to colored pokeball names in zh_cn.json

See merge request cable-mc/cobblemon!321
2023-02-20 03:04:29 +00:00
Zero Breaker ac743f9f43 Reverted changes to colored pokeball names in zh_cn.json 2023-02-20 03:01:58 +00:00
Paul 9a2cfe040c Kdoc correction 2023-02-20 13:00:55 +10:00
Hiroku a703687bed Merge branch 'IseFallen-main-patch-07712' into 'main'
Update zh_cn.json

See merge request cable-mc/cobblemon!318
2023-02-20 02:58:44 +00:00
Fallen IseandHiroku 16dd7d6fa2 Update zh_cn.json 2023-02-20 02:58:44 +00:00
Paul 47194659fa Various 1.19.3 fixes and packet errors 2023-02-20 12:57:38 +10:00
Hiroku d1da3aee57 Merge branch 'charmander_line_particles' into 'main'
Added texture animation to Charmander line and added new translucent option for layers.

See merge request cable-mc/cobblemon!319
2023-02-20 02:29:42 +00:00
TyzillionandHiroku e4818da893 Added texture animation to Charmander line and added new translucent option for layers. 2023-02-20 02:29:42 +00:00
Nick 1cdc5aa3c7 Pull in correct fabric loader, fixes fabric 1.19.3 debug launch 2023-02-19 17:59:40 -08:00
Paul 413dafd681 Fix Forge decoding of packets not knowing the actual packet identifier 2023-02-20 10:49:13 +10:00
Hiroku 85c3582d78 Merge branch 'zerobreaker000-main-patch-41538' into 'main'
Changed advancement translations in zh_cn.json to Kinoshita's versions with modification

See merge request cable-mc/cobblemon!312
2023-02-19 11:39:51 +00:00
Zero BreakerandHiroku 95b11cae28 Changed advancement translations in zh_cn.json to Kinoshita's versions with modification 2023-02-19 11:39:51 +00:00
Hiroku 809718a89b Merge branch 'switch-move-battle-lock' into 'main'
Force switch battle lock fix

See merge request cable-mc/cobblemon!313
2023-02-19 11:39:19 +00:00
LiciousandHiroku 0dd87a8ac4 Force switch battle lock fix 2023-02-19 11:39:19 +00:00
Hiroku 82a9ad7756 Merge branch 'further-apricorn-changes' into 'main'
Update Apricorn block to use loot tables instead

See merge request cable-mc/cobblemon!310
2023-02-18 10:40:52 +00:00
LiciousandHiroku 99e326a720 Update Apricorn block to use loot tables instead 2023-02-18 10:40:52 +00:00
Licious 15d034bb60 Merge branch 'spawning-held-items' into 'main'
Added held item support to spawning

See merge request cable-mc/cobblemon!309
2023-02-18 10:39:12 +00:00
Hiroku 100ba9cff3 Merge branch 'zerobreaker000-main-patch-53499' into 'main'
Update zh_cn.json based off draft version by mask868

See merge request cable-mc/cobblemon!311
2023-02-18 08:15:23 +00:00
Zero BreakerandHiroku f86d88a7b9 Update zh_cn.json based off draft version by mask868 2023-02-18 08:15:23 +00:00
Village eac4afb1c4 standardize texture resolutions 2023-02-17 11:06:49 -05:00
Licious17 c94e176b06 Label render position offset fix 2023-02-17 12:19:51 +00:00
Paul 009a5c554b Added held item support to spawning 2023-02-17 14:43:40 +10:00
Hiroku 6829b65f5e Merge branch 'gastly-particles' into 'main'
Added Gastly animations and particle effects, fixed various particle issues

See merge request cable-mc/cobblemon!307
2023-02-17 01:27:49 +00:00
Hiroku 1ea27c6c4c Added Gastly animations and particle effects, fixed various particle issues 2023-02-17 01:27:49 +00:00
Hiroku 36e0fb8ca0 Merge branch 'milky-pokemon-implementation' into 'main'
Implemented honedge

See merge request cable-mc/cobblemon!301
2023-02-17 00:55:47 +00:00
EmmettandHiroku 690615b39b Implemented honedge 2023-02-17 00:55:46 +00:00
Hiroku b31352e229 Merge branch 'Pokemon-Implementation' into 'main'
Implemented Spiritomb

See merge request cable-mc/cobblemon!300
2023-02-17 00:24:13 +00:00
XylopiaandHiroku c08e683e32 Implemented Spiritomb 2023-02-17 00:24:13 +00:00
Hiroku 4a7ef9170d Merge branch 'Implementing-many-sleep-animations' into 'main'
Implementing many sleep animations

See merge request cable-mc/cobblemon!308
2023-02-16 14:00:08 +00:00
JMMCPandHiroku d0d5db4327 Implementing many sleep animations 2023-02-16 14:00:07 +00:00
Hiroku 328c682b08 Merge branch 'evo-notify' into 'main'
Evolution Notification Sounds

Closes #105

See merge request cable-mc/cobblemon!231
2023-02-16 13:48:00 +00:00
Paul 83024e9451 Removed unused can_evolve.ogg 2023-02-16 23:13:13 +10:00
Hiroku 59339775ac Merge branch 'carry-on-disable' into 'main'
Disable Carry On mod interaction

See merge request cable-mc/cobblemon!304
2023-02-16 13:03:32 +00:00
LiciousandHiroku c4b7fad8e8 Disable Carry On mod interaction 2023-02-16 13:03:31 +00:00
Hiroku f289c7945b Merge branch 'apricorn-harvest-changes' into 'main'
Apricorn harvest changes

See merge request cable-mc/cobblemon!305
2023-02-16 13:02:41 +00:00
LiciousandHiroku d7b29c6938 Apricorn harvest changes 2023-02-16 13:02:41 +00:00
Paul 08e94d23ea Fixed turn number declaration not being a lang line 2023-02-16 23:01:19 +10:00
Licious 0f59920a3f Merge branch 'Added-Belly-Drum-Message' into 'main'
Added an instruction for -setboost messages in battle (used for Belly Drum)...

See merge request cable-mc/cobblemon!299
2023-02-16 09:49:47 +00:00
RenaissanceandLicious 2f58fc530f Added an instruction for -setboost messages in battle (used for Belly Drum)... 2023-02-16 09:49:47 +00:00
Hiroku e64294a71a Merge branch 'showdown-update-fix' into 'main'
Fix showdown updating failing due to moved target directory, rewrite some of the loading logic

See merge request cable-mc/cobblemon!306
2023-02-16 02:47:39 +00:00
NickandHiroku 8512c13e6d Fix showdown updating failing due to moved target directory, rewrite some of the loading logic 2023-02-16 02:47:39 +00:00
Licious17 1759249a89 Fix processResources task on forge 2023-02-15 17:10:13 +00:00
Hiroku 4b4534aea1 Merge branch 'zero_breaker000-zh_cn' into 'main'
Update zh_cn.json

See merge request cable-mc/cobblemon!303
2023-02-15 14:16:03 +00:00
Zero BreakerandHiroku 63bd6d8d08 Update zh_cn.json 2023-02-15 14:16:03 +00:00
Licious17 6e83f9f7be Licenses 2023-02-15 13:37:39 +00:00
Licious17 50ac79281a Finished Forge implementation. 2023-02-15 13:37:15 +00:00
Licious17 4b9071d183 Finished all platform abstract stuff, finished Fabric implementation. 2023-02-15 11:54:16 +00:00
Emmett de Bruin 2ea661a6ea Implemented honedge 2023-02-14 21:44:23 -08:00
Hiroku 6d931c6a8a Merge branch 'pokemon-particles' into 'main'
Particle keyframe support for Bedrock animations

See merge request cable-mc/cobblemon!298
2023-02-14 12:44:33 +00:00
Hiroku ad71a445ba Particle keyframe support for Bedrock animations 2023-02-14 12:44:32 +00:00
Hiroku a77d74c352 Merge branch 'Fixed-Crashes-with-empty-party-summaries' into 'main'
Fixed crashes involving opening the Pokémon summary with an empty party.

See merge request cable-mc/cobblemon!297
2023-02-12 23:50:27 +00:00
Hiroku bda35d6bbd Merge branch 'label-render-fix' into 'main'
Fix Pokémon label constantly rendering

See merge request cable-mc/cobblemon!296
2023-02-12 23:50:00 +00:00
LiciousandHiroku 8852752c07 Fix Pokémon label constantly rendering 2023-02-12 23:50:00 +00:00
Licious17 76a04a0df9 Remove ArgumentTypesMixin and implement platform specific registration 2023-02-12 22:32:56 +00:00
Licious17 e2506f95a6 Implement worldgen feature registration 2023-02-12 21:03:53 +00:00
jmmcp 788009e14a Fixed crashes involving opening the Pokémon summary with an empty party. 2023-02-12 14:37:46 -05:00
Licious17 f3ad759c25 Implement worldgen feature registration 2023-02-12 15:43:39 +00:00
Licious17 0785ce1c71 Implement sound event registration, add stripped block functionality to apricorn logs 2023-02-12 15:25:14 +00:00
Licious17 805fe12600 Implement block entity registration 2023-02-12 13:29:37 +00:00
Licious17 26182bdf10 Remove leftover code 2023-02-12 13:07:46 +00:00
Licious17 14d71200ec Implemented Entity types registration. 2023-02-12 13:07:18 +00:00
Paul 296c618377 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	CHANGELOG.md
2023-02-12 18:48:40 +10:00
Hiroku 47fa5bda68 Merge branch 'showdown-priority' into 'main'
Showdown Launch Priority

See merge request cable-mc/cobblemon!295
2023-02-12 08:47:50 +00:00
NickandHiroku a0e18a6037 Showdown Launch Priority 2023-02-12 08:47:50 +00:00
Paul 2522a87a22 Merge remote-tracking branch 'origin/main' 2023-02-12 17:22:05 +10:00
Paul 99db2e8f24 Fixed Showdown insertions happening exactly as many times as you've joined a world in this session 2023-02-12 17:21:05 +10:00
Paul 6a53bb2ecb Fixed soft-dupe from boats and other vehicles 2023-02-12 17:19:50 +10:00
Hiroku e40ff82366 Merge branch 'Truly_Fixed_Pokemon_in_Trees' into 'main'
Fixed Pokemon spawning in trees

See merge request cable-mc/cobblemon!294
2023-02-12 05:29:27 +00:00
jmmcp bec0d11fcb Fixed Pokemon spawning in trees 2023-02-12 00:13:45 -05:00
Hiroku 0d9f49af52 Merge branch 'pikachu_fix' into 'main'
Fixed Pikachu's animation.

See merge request cable-mc/cobblemon!293
2023-02-12 00:52:28 +00:00
TyzillionandHiroku b6c6cd855c Fixed Pikachu's animation. 2023-02-12 00:52:28 +00:00
Licious17 150e6685ef Implemented item and block registration, fixed Forge mods.toml requiring 1.19.2 instead of 1.19.3 2023-02-11 23:31:02 +00:00
MoeBoy76 f15d4ae709 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evo-notify
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/controller/ServerEvolutionController.kt
#	common/src/main/resources/assets/cobblemon/sounds.json
2023-02-12 07:56:24 +11:00
MoeBoy76 76738cfd26 Updated sounds 2023-02-12 07:46:09 +11:00
Hiroku ef60725cfa Merge branch 'locators' into 'main'
Added locators support to Bedrock models

See merge request cable-mc/cobblemon!292
2023-02-11 02:17:42 +00:00
Hiroku 639571f139 Added locators support to Bedrock models 2023-02-11 02:17:42 +00:00
Hiroku 94b14c6c36 Merge branch 'we-were-too-hasty' into 'main'
Bad Blinks Disabled and Invalid Animation Handling

See merge request cable-mc/cobblemon!291
2023-02-10 03:31:23 +00:00
NickandHiroku 3fdd9fcb3c Bad Blinks Disabled and Invalid Animation Handling 2023-02-10 03:31:23 +00:00
Paul 16bc02528e Fixed shiny Gyarados not using the shiny texture 2023-02-10 10:49:57 +10:00
Hiroku e742f8f4ab Merge branch 'snowstorm-particles' into 'main'
Snowstorm particles

See merge request cable-mc/cobblemon!274
2023-02-09 23:57:36 +00:00
Paul 40dfe91f18 Updated licenses 2023-02-10 09:28:42 +10:00
Paul 6a9632731c Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
2023-02-10 09:23:29 +10:00
Hiroku 1a12cd7fb7 Merge branch 'pokemon-label-changes' into 'main'
Pokemon entity display name changes

See merge request cable-mc/cobblemon!287
2023-02-09 23:22:40 +00:00
Hiroku 43d5be4825 Merge branch 'Create-Dripstone-Fix' into 'main'
Fix our dripstone mixin being broken by Create's overwrite

See merge request cable-mc/cobblemon!290
2023-02-09 23:21:13 +00:00
NickandHiroku 2ffe69cae2 Fix our dripstone mixin being broken by Create's overwrite 2023-02-09 23:21:13 +00:00
Hiroku 7b07ffdb7f Merge branch 'no-wheat-allowed' into 'main'
No more breeding

See merge request cable-mc/cobblemon!289
2023-02-09 23:17:59 +00:00
Hiroku 30a658e54d Merge branch 'species-encode-decode-fix' into 'main'
Species encoding/decoding fixes

See merge request cable-mc/cobblemon!288
2023-02-09 23:17:42 +00:00
Licious17 aed8e08a0c No more breeding 2023-02-09 17:35:26 +00:00
Licious17 c0302a69c1 Fix up stuff 2023-02-09 17:27:06 +00:00
Licious17 b69a09c5ab Touch up inconsistencies in the entity display name implementation to better suit our needs and keep expected compatibility with other mods 2023-02-09 17:21:00 +00:00
Hiroku 1f84f38f6c Merge branch 'command-block-support' into 'main'
Pokespawn non player CommandExecutor support

See merge request cable-mc/cobblemon!283
2023-02-09 11:45:37 +00:00
Licious a22f427988 Merge branch 'main' into 'command-block-support'
# Conflicts:
#   CHANGELOG.md
2023-02-09 11:11:56 +00:00
Hiroku 17490019b1 Merge branch 'pokeheal-in-battle-fix' into 'main'
Fix Pokeheal in battle and switching into fainted party members

See merge request cable-mc/cobblemon!285
2023-02-09 11:09:24 +00:00
Hiroku 510ddd5850 Merge branch 'Fixed-Drastic-Stat-Bonuses' into 'main'
Updated the getSeverity method to have a fallback for any boost above 3

See merge request cable-mc/cobblemon!286
2023-02-09 11:00:39 +00:00
Hiroku d061e3fa60 Merge branch 'main' into 'Fixed-Drastic-Stat-Bonuses'
# Conflicts:
#   CHANGELOG.md
2023-02-09 10:29:51 +00:00
nlingebretson ed43a0a414 Updated the getSeverity method to have a fallback for any boost above 3 i.e. having the ability Simple or if custom moves were to be added 2023-02-08 18:53:44 -06:00
nlingebretson 17c917b4eb Updated the getSeverity method to have a fallback for any boost above 3 i.e. having the ability Simple or if custom moves were to be added 2023-02-08 18:47:23 -06:00
Licious bf48b04efe Merge branch 'main' into 'command-block-support'
# Conflicts:
#   CHANGELOG.md
2023-02-08 21:59:42 +00:00
Licious ea48eefc9f Merge branch 'main' into 'pokeheal-in-battle-fix'
# Conflicts:
#   CHANGELOG.md
2023-02-08 21:58:57 +00:00
Hiroku a91cabab11 Merge branch 'fix-experience-load' into 'main'
Fix Pokemon experience loading

See merge request cable-mc/cobblemon!284
2023-02-08 21:35:26 +00:00
Licious17 e98dc35224 Fix & changelog 2023-02-08 16:33:07 +00:00
Licious17 1e9e17d32c Fix & changelog 2023-02-08 16:02:29 +00:00
Licious17 d4958c362f Changelog 2023-02-08 15:34:21 +00:00
Licious17 84a0a504f2 Add compatibility with any command source for the pokemon spawn command, add secondary command for specific spawn coordinates 2023-02-08 15:31:52 +00:00
Hiroku a16e5ea8b7 Merge branch 'move-sourced-healing-display-fix' into 'main'
Fix heal related battle action interpretation

See merge request cable-mc/cobblemon!282
2023-02-08 12:23:36 +00:00
Licious17 8f145b8565 Merge branch 'main' into move-sourced-healing-display-fix
# Conflicts:
#	CHANGELOG.md
2023-02-08 12:09:53 +00:00
Licious17 8fce820e22 Disable battle dev logging 2023-02-08 12:07:25 +00:00
Licious17 b82f9ec790 Wrap exceptions in interpreter to prevent ctd 2023-02-08 12:03:40 +00:00
Licious17 01b424994c Added interpretation for -sethp battle action 2023-02-08 11:55:25 +00:00
Hiroku a11ce41e11 Merge branch 'blink_implementation' into 'main'
Added blink animations to many Pokemon.

See merge request cable-mc/cobblemon!281
2023-02-08 11:16:53 +00:00
Paul 36f8b695c1 Update Showdown for fix of wrong gen of scripts being used (ground hitting flying) 2023-02-08 21:14:51 +10:00
Licious17 c021b76700 Fix crash with fieldstart interpretation, added fieldend interpretation and other interpretations connected to field effects. 2023-02-08 10:48:26 +00:00
tyzillion 8765a8a5e5 Added blink animations to the rest of the Pokemon that Bro had made and gave those Pokemon the blink quirk. 2023-02-07 18:10:14 -05:00
tyzillion 87fa04c6b3 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into blink_implementation
# Conflicts:
#	common/src/main/resources/data/cobblemon/species/generation4/grotle.json
#	common/src/main/resources/data/cobblemon/species/generation4/torterra.json
2023-02-07 12:09:48 -05:00
Paul 4faf75a763 Merge remote-tracking branch 'origin/main' into spawn-event 2023-02-07 23:35:13 +10:00
Hiroku d997e03829 Merge branch 'Impemented-more-pokemon' into 'main'
Implemented Pokemon

See merge request cable-mc/cobblemon!279
2023-02-07 13:33:24 +00:00
Paul 4ef0b4ea85 Merge remote-tracking branch 'origin/main' into Impemented-more-pokemon
# Conflicts:
#	CHANGELOG.md
2023-02-07 22:49:49 +10:00
Paul ada2cb77c3 I really do always forget the license 2023-02-07 22:46:24 +10:00
Paul 50acc65b64 Added spawn event and check spawn condition for Pokemon, allowing Magnum Torch (fabric) to work 2023-02-07 22:05:06 +10:00
Hiroku bf2ecb3080 Merge branch 'Fixed_Pokemon_not_spawning_on_snow_and_others' into 'main'
Fixed issues with Pokémon not spawning on blocks such as snow layers

See merge request cable-mc/cobblemon!280
2023-02-07 12:01:37 +00:00
jmmcp 566dbb0e33 Fixed issues with Pokémon not spawning in blocks such as snow layers, as well as Pokémon spawning inside of trees. 2023-02-07 01:30:43 -05:00
Test 168e40034d Merge branch 'animated-textures' into 'main'
Added animated textures

Closes #6

See merge request cable-mc/cobblemon!278
2023-02-07 04:24:32 +00:00
Xylopia 554914fc30 Added in Galvantula, and updated Joltik's resource files 2023-02-06 22:12:30 -05:00
tyzillion cfd1e234dc Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into blink_implementation 2023-02-06 18:57:59 -05:00
tyzillion 374ab5f40c Fixed aerodactyls frame, framed all new Pokemon added by Xylopia, added saturation shoulder effect, allowed Alcremie and Milcery to shoulder. No effect, for now. 2023-02-06 18:30:05 -05:00
Licious17 ebb92d4771 Finish healing lang 2023-02-06 21:51:00 +00:00
tyzillion a179ca4091 Merge remote-tracking branch 'origin/Impemented-more-pokemon' into Impemented-more-pokemon 2023-02-06 16:25:53 -05:00
Licious17 1d01f3fffe Licenses 2023-02-06 20:38:54 +00:00
Licious17 7644b49a32 Implement lang for some healing sources. 2023-02-06 20:38:08 +00:00
tyzillion 673cbffbbe Merge remote-tracking branch 'origin/Impemented-more-pokemon' into Impemented-more-pokemon
# Conflicts:
#	CHANGELOG.md
2023-02-06 12:44:38 -05:00
Licious17 71e1462897 Implement heal instruction, update hp values networking to prevent cheating 2023-02-06 15:38:22 +00:00
Xylopia e97f7cecd7 Forgot to add Turtwig, Grotle, and Torterra to the Changelog 2023-02-06 07:17:29 -05:00
Xylopia 2ec4fd8aeb Fixed Missing Copyright in Grotle, Torterra, and Turtwig 2023-02-06 07:16:39 -05:00
Xylopia 25ba62eb31 Implemented Joltik
Added New Haste and Water Breathing effects
Changed HitBoxes and Size definitions for Dhelmise
Updated Changelog
2023-02-06 06:54:34 -05:00
Paul d5888935b3 Merge remote-tracking branch 'origin/main' into snowstorm-particles 2023-02-06 17:28:14 +10:00
Paul 553a633451 Cleared some redundant comments 2023-02-06 17:28:06 +10:00
Paul 0b7719946e Added animated textures 2023-02-06 17:02:55 +10:00
Xylopia fa94d60505 Added Shiinotic and Morelull, aswell as adjusted sizes and hitboxes for pokemon, and decluttered the 'PokemonModelReposity.kt' by replacing all the individually imported mons with just importing their gen file and calling all of the files within. 2023-02-05 23:43:49 -05:00
tyzillion dc4a9d9392 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into Impemented-more-pokemon 2023-02-05 23:26:59 -05:00
tyzillion c1e51ffd72 Merge branch 'Impemented-more-pokemon' of https://gitlab.com/cable-mc/cobblemon into Impemented-more-pokemon 2023-02-05 23:26:24 -05:00
tyzillion 711901cda2 Added blink animations to all Pokemon that had blink animations available.
Implemented blink quirks to all gen 1 Pokemon that had blink animations.
2023-02-05 23:24:52 -05:00
Paul c4137d179a Fixed PokemonProperties[random] not using the implemented flag 2023-02-06 14:03:07 +10:00
Hiroku 1441d870b6 Merge branch '#138-pokeballs-midair' into 'main'
Pokeballs Falling Forever

See merge request cable-mc/cobblemon!277
2023-02-06 04:01:59 +00:00
Xylopia f962cde3a9 Changed branch name cause the misstype was finnaly getting to me
Added the Klink line and it's animations
Fixed hitboxes for newly added pokemon aswell as scaling where it was needed.
2023-02-05 22:09:46 -05:00
Xylopia 91fa0fb73e fixed push issue of xerneas missing from 'PokemonModelReposity' 2023-02-05 20:27:39 -05:00
jmmcp 48b5999337 Fixed issues with Pokeballs falling forever 2023-02-05 20:20:20 -05:00
jmmcp 39e03173e0 Fixed issues with Pokeballs falling forever 2023-02-05 20:06:59 -05:00
tyzillion febac0bec6 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into Impemented-more-pokemon 2023-02-05 14:44:05 -05:00
Test 4fcc2c386e Merge branch 'healer-single-charge' into 'main'
Disable healer consuming charge after the first full charge

Closes #139

See merge request cable-mc/cobblemon!276
2023-02-05 15:59:56 +00:00
LiciousandTest d5b71cd4ab Disable healer consuming charge after the first full charge 2023-02-05 15:59:56 +00:00
Test dca38c3ad3 Merge branch 'friendship-reset-fix' into 'main'
Fix friendship being capped to the max level defined in config instead of friendship value between Pokémon loads

Closes #136

See merge request cable-mc/cobblemon!275
2023-02-05 15:46:44 +00:00
LiciousandTest 7c084aeca2 Fix friendship being capped to the max level defined in config instead of friendship value between Pokémon loads 2023-02-05 15:46:43 +00:00
Licious17 867cf0faab Fix client side evolution display. 2023-02-05 13:55:52 +00:00
Licious17 42ab6ce174 Fix Grotle evolutions, add item tag to API class, move up feature related data registries loading, fixed SpeciesFeatureAssignments not firing their observable. 2023-02-05 13:43:09 +00:00
Paul 59efce5e55 License update 2023-02-05 22:23:14 +10:00
tyzillion f924034fab Implemented Turtwig, Grotle, and Torterra. As well as all of Torterra's Minecraft tree forms. 2023-02-05 07:13:04 -05:00
Paul 0ec23d65b3 Fixed blits being all black because of the wrong shader program being used 2023-02-05 22:08:03 +10:00
Paul 849ab32c5d Fixed party overlay not rendering 2023-02-05 21:55:59 +10:00
Paul 9fcb767743 CI fixes 2023-02-05 19:28:53 +10:00
Paul 9a4beb597f Update copyright 2023-02-05 19:23:57 +10:00
Paul 8309c60154 Resolve merge conflict issues 2023-02-05 19:20:49 +10:00
Paul 01a82c5e74 Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
#	common/build.gradle.kts
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
2023-02-05 19:17:04 +10:00
Paul ed55dd21af Final fixes to particles, updated copyright to 2023 2023-02-05 19:02:37 +10:00
tyzillion 96be99880c Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into Impemented-more-pokemon 2023-02-05 01:53:40 -05:00
tyzillion 9099781c86 Added Milcery and Alcremie. Added Alcremie forms. 2023-02-05 00:53:50 -05:00
tyzillion 9065420d61 Added Milcery and Alcremie. Added Alcremie forms. 2023-02-05 00:52:14 -05:00
Xylopia 9c4accaa55 Added Copyright to xerneas 2023-02-04 23:54:01 -05:00
Xylopia 596ddd0391 went ahead and added the copyright to the models, aswell as implemented Naclstack.
Added Xerneas, and updated some models to have blinking animations.
2023-02-04 23:19:26 -05:00
Hiroku 2de7076156 Merge branch 'more-Langed-moves' into 'main'
more-move-lang

See merge request cable-mc/cobblemon!266
2023-02-05 03:07:27 +00:00
Hiroku 93895a5e1a Merge branch 'framed-pokemon' into 'main'
Fixed ui frames for all pokemon currently modeled in game.

See merge request cable-mc/cobblemon!273
2023-02-05 02:55:06 +00:00
tyzillion 09c38b71b5 Fixed Frames for Abra, Beedrill, Bellsprout,and Magikarp. Fixed Frames for current Pokemon from gen 2,3,4,5,6,7,8. 2023-02-04 20:30:54 -05:00
Xylopia 3767d3f770 went ahead and added the copyright to the models, aswell as implemented Naclstack. 2023-02-04 20:27:54 -05:00
Village 97e4fd55f5 update type icons 2023-02-04 19:05:07 -05:00
jmmcp 0368c79a28 Updated type icons 2023-02-04 18:19:48 -05:00
Licious17 29f1319834 Fix compile errors in models 2023-02-04 09:13:41 +00:00
Hiroku 35ed67be98 Merge branch 'modding' into 'main'
Restructure publishing logic, provide forge/fabric modules for debugging

See merge request cable-mc/cobblemon!271
2023-02-04 08:28:05 +00:00
NickandHiroku 3991a52f3e Restructure publishing logic, provide forge/fabric modules for debugging 2023-02-04 08:28:05 +00:00
Hiroku acd04e6451 Merge branch 'framed-pokemon' into 'main'
Framed Gen 1 Pokemon

See merge request cable-mc/cobblemon!272
2023-02-04 08:13:55 +00:00
Tyler Astry f0afeb6647 Framed Gen 1 Pokemon 2023-02-04 08:04:20 +00:00
Paul d2a38ca33c Added quirks to Json posers 2023-02-04 12:01:38 +10:00
Licious17 7d2663b082 Add a few more berry items 2023-02-03 20:41:51 +00:00
Licious17 43c6751039 Fix compile error 2023-02-03 15:24:39 +00:00
Licious17 f0fc94d25a Merge branch 'main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlockEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BerryBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/BerryBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobbledDataProvider.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2023-02-03 15:19:26 +00:00
Hiroku 150e132ad6 Merge branch 'pc-fix' into 'main'
Various things

See merge request cable-mc/cobblemon!268
2023-02-03 11:19:36 +00:00
TestandHiroku b81e262998 Various things 2023-02-03 11:19:36 +00:00
Hiroku 93a5c81aa0 Merge branch 'item-interaction-fix' into 'main'
Fix experience candies interactions

See merge request cable-mc/cobblemon!269
2023-02-03 11:16:28 +00:00
Hiroku 9eec02cd23 Merge branch 'fix-label-display' into 'main'
Fix label rendering

See merge request cable-mc/cobblemon!270
2023-02-03 11:15:29 +00:00
Licious17 e4e209437d Fix label rendering 2023-02-03 10:40:46 +00:00
Licious17 f8bfb5ad4d Fix experience group deserialization 2023-02-03 10:31:10 +00:00
Xylopia eb91dc7eed went ahead and added the copyright to the models, aswell as implemented Naclstack. 2023-02-02 22:03:02 -05:00
Xylopia 76fad53bbf Implemented the start of Sprigatito, Fuecoco, and Quaxly
Fully Implemented Nacli with its animations and emissive textures.
2023-02-02 21:18:08 -05:00
Paul 13e3ba28a0 Fixed held items in survival mode 2023-02-03 11:34:35 +10:00
Paul ee01de09e7 Removed broken AT 2023-02-03 10:39:39 +10:00
Licious17 f710c5ceb5 Fixed cobblemon:apricorn_trees placed feature JSON 2023-02-02 19:55:13 +00:00
Licious17 fe81edca50 Fixed cobblemon:apricorn_trees configured feature JSON 2023-02-02 19:32:07 +00:00
Licious17 650303de58 Port Quaternion#fromEulerXyzDegrees functionality 2023-02-02 19:03:22 +00:00
Licious17 c76c577b91 Update Pokemon label rendering 2023-02-02 16:46:18 +00:00
Licious17 eb95595af0 Fix implementations trying to access changed texture directories 2023-02-02 16:36:31 +00:00
Licious17 137d082e1a Update UI assets to match Minecraft standards 2023-02-02 16:30:03 +00:00
Licious17 ceb9fd0cf6 Fix item and block texture rendering 2023-02-02 16:15:23 +00:00
Licious17 fce087979a Added all features, game boots 2023-02-02 15:57:22 +00:00
Licious17 939ce328b9 Update item creative tabs 2023-02-01 23:41:31 +00:00
Licious17 d86366a04a Add in evolution ore feature JSON, update internal access 2023-02-01 23:22:06 +00:00
Licious17 7234dc0788 Merge branch 'main' into 1.19.3
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonBlocks.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/feature/ApricornTreeFeature.kt
2023-02-01 22:21:40 +00:00
Licious17 851591de3f Fix some evolution requirements in data. 2023-02-01 20:09:34 +00:00
Xylopia f5b10c8cb6 Fully implemented Charcadet, missing some basic animation atm however, it requires a proper idle and walking animation, however it's blinking animation does work.
pidgey animation updated to including it's blinking animation.
Note for others - This is simply so others can see what i've done, i shall not make a merge request untill i update alot more models (cause this is super easy for me todo)
2023-02-01 05:45:57 -05:00
Xylopia edba5a6633 Began the initial process of learning the implementation, needed to sync to a branch to get inteliJ to stop yelling at me 2023-02-01 04:43:59 -05:00
Hiroku 98c4baad5e Merge branch 'main' into 'more-Langed-moves'
# Conflicts:
#   CHANGELOG.md
2023-02-01 09:28:23 +00:00
Xylopia ca66fc3fc2 updated changelog and fixed my acedently push of the edited 'pokemonbattle.kt' which allows the viewage of non langed moves 2023-02-01 03:49:52 -05:00
Xylopia 5efefe9ceb Change the interpretation a little and added an else fallback, can't figure out that 'battlemessage' will need assistance 2023-02-01 03:46:32 -05:00
Paul d2b9949b29 Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
2023-02-01 08:31:08 +10:00
Paul 17c6608203 Pretty much completed Snowstorm particle implementation 2023-02-01 08:30:12 +10:00
Hiroku b8c287e48f Merge branch 'moveset-init' into 'main'
Moveset initialization fix

Closes #135

See merge request cable-mc/cobblemon!267
2023-01-31 21:41:16 +00:00
Licious17 c5c448a5ed Update changelog 2023-01-31 16:10:52 +00:00
Licious17 1cd2254958 Fix lack of moveset initialization on PokemonProperties#create 2023-01-31 16:06:38 +00:00
Hiroku d0feab0830 Merge branch 'catch-rate-fix' into 'main'
Capture Calculator improvements

See merge request cable-mc/cobblemon!262
2023-01-31 13:18:19 +00:00
LiciousandHiroku 922a1420e2 Capture Calculator improvements 2023-01-31 13:18:19 +00:00
Xylopia 321ccacdb3 Added Interpretation for 'FieldStart' and Interpretation of abilities that activate while in battle, also added lang for some field moves and 'speed boost' in for the battle 'ability' 2023-01-31 03:03:01 -05:00
Hiroku 61a84eb039 Merge branch 'custom-pokemon-battle-fix' into 'main'
Custom Pokémon Showdown conversion fix

See merge request cable-mc/cobblemon!265
2023-01-30 21:39:57 +00:00
LiciousandHiroku 224d2b38b7 Custom Pokémon Showdown conversion fix 2023-01-30 21:39:56 +00:00
Hiroku 059dc4ce95 Merge branch 'pokemon-entity-display-fix' into 'main'
PokemonEntity names fix.

See merge request cable-mc/cobblemon!263
2023-01-30 13:12:09 +00:00
Hiroku d846ad6545 Merge branch 'pokedex-entry-fix' into 'main'
Fix pokedex entries

See merge request cable-mc/cobblemon!264
2023-01-30 13:05:06 +00:00
Licious17 bb68cea310 Fix pokedex entries 2023-01-30 12:28:25 +00:00
Licious17 3882b26d93 Fix display name of the Pokémon entity 2023-01-30 11:46:50 +00:00
Hiroku 41906f6b1c Merge branch 'species-data-appending' into 'main'
Species data appending

See merge request cable-mc/cobblemon!254
2023-01-29 11:03:09 +00:00
Licious17 1e862be75a Update standard form automatic assignment to work with new form IDs 2023-01-29 10:37:36 +00:00
Licious17 117048ea37 Merge branch 'main' into species-data-appending
# Conflicts:
#	CHANGELOG.md
2023-01-29 10:35:58 +00:00
Hiroku 30cf97e2fe Merge branch 'bind-lang' into 'main'
bide-lang

See merge request cable-mc/cobblemon!261
2023-01-29 09:40:47 +00:00
Xylopia a4e7b53d71 text fix 2023-01-28 23:59:47 -05:00
Xylopia 071b797e51 text fix 2023-01-28 23:52:01 -05:00
Xylopia b15decd5c5 bide lang interprited 2023-01-28 23:46:58 -05:00
Hiroku a584db1445 Merge branch 'gen9-data-prep' into 'main'
Generation 9 data

See merge request cable-mc/cobblemon!260
2023-01-29 02:08:01 +00:00
Licious17 936c95e188 Updated changelog 2023-01-28 17:36:31 +00:00
Licious17 00ca1dcbab Updated data to accommodate for Species.name and FormData.name changes. 2023-01-28 17:21:15 +00:00
Licious17 fe016f4ffa Implement ShowdownIdentifiable and redo usages of Species.name and FormData.name to use it instead. 2023-01-28 17:09:34 +00:00
Licious17 10ff034801 Remove unnecessary check. 2023-01-28 12:48:00 +00:00
Licious17 50eda62025 Implement WalkedStepsRequirement. 2023-01-28 12:46:54 +00:00
Licious17 fab6aed2d5 Implement DefeatRequirement and DefeatEvolutionProgress. 2023-01-28 12:09:34 +00:00
Licious17 41bb92d4d4 Updated DamageTakenRequirement. 2023-01-28 11:57:18 +00:00
Licious17 d00bdc3d21 Updated UseMoveRequirement. 2023-01-28 11:29:16 +00:00
Licious17 d72801facc Updated BattleCriticalHitsRequirement. 2023-01-28 11:14:13 +00:00
Licious17 65dbb4baca Implement EvolutionProgress system, add RecoilRequirement. 2023-01-28 11:00:56 +00:00
Licious17 5977827b06 Revert MoveTarget changes. 2023-01-28 00:05:25 +00:00
Licious17 466567eec1 Add lang for species names, abilities and moves for all new data and update existing entries. 2023-01-27 22:30:21 +00:00
Licious17 363dcd31c5 Remove invalid japanese with kanji lang. 2023-01-27 21:41:49 +00:00
Licious17 3d3ffe3c10 Fix issue due to inconsistency in showdown data structure. 2023-01-27 15:03:33 +00:00
Licious17 85b17bb8ff Add effect chances to moves. 2023-01-27 14:46:13 +00:00
Licious17 ed14ddb4a3 Updated CobblemonPokemonLabels documentation to better reflect the usage of the generation label. 2023-01-27 14:14:13 +00:00
Licious17 17bd787d9f Remake Moves registry to dynamically take values from Showdown. 2023-01-27 13:46:19 +00:00
Licious17 a19fb83337 Various species data fixes to use showdown IDs correctly. 2023-01-27 12:56:53 +00:00
Licious17 34023187ef Remake Abilities registry to dynamically take values from Showdown. 2023-01-27 12:49:31 +00:00
Licious17 cb4e4ee071 Fix Basculin having typo aspects. 2023-01-27 12:09:07 +00:00
Licious17 859c041a6c Add in penguin lost to the war. 2023-01-27 00:34:16 +00:00
Licious17 e212c113c5 Added generation 9 Pokémon species data, updated generation 1 to 8 Pokémon species data 2023-01-27 00:29:53 +00:00
Licious17 df9852fcc5 Added species features for hisuian Basculin, paldean forms, and paldean Tauros breeds 2023-01-25 12:58:35 +00:00
Licious17 3d383151be Implement MoonPhaseRequirement 2023-01-25 12:08:06 +00:00
Licious17 8304009c47 Implement the necessary stuff for UseMoveCountRequirement. 2023-01-25 11:53:57 +00:00
Licious17 44947814ba Fix GlobalSpeciesFeatures#getCodeFeature and GlobalSpeciesFeatures#getResourceFeature accessing the opposite mapping. 2023-01-25 10:06:14 +00:00
Licious17 8747f46f5e Implement Evolution#consumeHeldItem 2023-01-25 09:36:02 +00:00
Licious17 370c08fa31 Updated HeldItemRequirement to function as intended. 2023-01-25 09:34:43 +00:00
Licious17 e3732ef15f Updated Pokémon labels. 2023-01-25 09:22:28 +00:00
Hiroku 0c651cc4f0 Merge branch 'Pancakes0228-main-patch-60421' into 'main'
Update zh_tw

See merge request cable-mc/cobblemon!259
2023-01-25 09:08:11 +00:00
李 煎餅 e08cfc493f Update zh_tw.json 2023-01-24 19:55:08 +00:00
李 煎餅 21035fa445 Delete zh_tw.json 2023-01-24 19:51:51 +00:00
李 煎餅 2de7f98190 Update zh_tw 2023-01-24 19:48:56 +00:00
Hiroku d497a72088 Merge branch 'exp-gain-fix' into 'main'
Experience gain fix

See merge request cable-mc/cobblemon!258
2023-01-22 11:44:54 +00:00
Licious17 453e31931f Fixed every Pokémon gaining experience at the end of a battle. 2023-01-22 11:17:55 +00:00
Hiroku 46dc76e6a2 Merge branch 'exordium-fix' into 'main'
Fix incompatibilty with Exordium

See merge request cable-mc/cobblemon!257
2023-01-22 00:09:36 +00:00
Licious17 91923f3ba7 Fix incompat with Exordium 2023-01-21 13:36:10 +00:00
Paul 8907f0f091 Fixed forms displaying incorrectly on servers 2023-01-21 10:46:32 +10:00
Paul e58b0e8347 A lot more Snowstorm stuff 2023-01-21 10:41:00 +10:00
Licious17 10ba9c5f87 Added various API events related to the berry farming process. 2023-01-20 09:28:34 +00:00
Hiroku 689da5bd5c Merge branch 'machines' into 'main'
Machines

See merge request cable-mc/cobblemon!256
2023-01-20 01:56:16 +00:00
TestandHiroku 948ffbc404 Machines 2023-01-20 01:56:16 +00:00
Licious17 dcca1ec71f Add remaining interactions required for berry functionality. 2023-01-19 18:50:38 +00:00
Licious17 7847227a57 Remove unused import 2023-01-16 12:21:19 +00:00
Licious17 3f1660295e Implement berry mutation 2023-01-16 12:20:39 +00:00
Paul 196cae58dd Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/math/SimpleMathExtensions.kt
2023-01-16 18:16:17 +10:00
Paul 9a4ed01c7a Started the 1.19.3 port, TODO: itemgroups, placed features 2023-01-16 18:09:16 +10:00
Licious17 87f1063d6f Fix imports and licenses 2023-01-15 17:14:11 +00:00
Licious17 0951a7d73e Merge branch 'main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/tags/CobblemonBlockTags.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/ClientPacketRegistrar.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2023-01-15 17:06:02 +00:00
Hiroku a1bba3cb61 Merge branch 'pokeedit-other-fix' into 'main'
Pokeedit other fix

See merge request cable-mc/cobblemon!255
2023-01-15 13:25:12 +00:00
Licious17 deb9088d94 Changelog update 2023-01-15 13:01:34 +00:00
Licious17 0b7e671527 Update to use PartySlotArgumentType#getPokemonOf 2023-01-15 13:00:27 +00:00
Licious17 3349bc81be Merge branch 'main' into pokeedit-other-fix 2023-01-15 12:59:45 +00:00
Licious17 9b113a4a3e Changelog update 2023-01-15 12:55:19 +00:00
Licious17 de81a0b165 Merge branch 'main' into species-data-appending
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/PokemonSpecies.kt
2023-01-15 12:23:17 +00:00
Hiroku 35a1e57bd9 Merge branch 'gen9-battles' into 'main'
Gen9 battles

See merge request cable-mc/cobblemon!252
2023-01-15 09:24:35 +00:00
Test 22d33a23a5 Merge branch 'party-item' into 'main'
Party item

See merge request cable-mc/cobblemon!253
2023-01-15 09:07:11 +00:00
HirokuandTest 026af46945 Party item 2023-01-15 09:07:11 +00:00
Paul 741b4afe8a Merge remote-tracking branch 'origin/main' into gen9-battles 2023-01-15 13:57:07 +10:00
Paul f006880586 Added gen9 moves and abilities 2023-01-15 13:56:51 +10:00
Hiroku dacb0c920a Merge branch 'pokelabel-&-remap' into 'main'
Viewbobbing fix, Remap extension functions, potential camera rotation query.

See merge request cable-mc/cobblemon!245
2023-01-15 02:24:30 +00:00
Hiroku d5579fb75c Merge branch 'pokeball-tag-fixes' into 'main'
Pokéball tag fixes

See merge request cable-mc/cobblemon!251
2023-01-15 01:55:07 +00:00
Paul 161263846d Merge conflict resolution 2023-01-15 10:08:37 +10:00
Paul b32f13cdbf Merge remote-tracking branch 'origin/main' into pokeball-tag-fixes
# Conflicts:
#	CHANGELOG.md
2023-01-15 10:08:20 +10:00
Hiroku fd200e2400 Merge branch 'pokemon-items' into 'main'
Pokemon Model Items (Server Utility)

See merge request cable-mc/cobblemon!250
2023-01-15 00:07:45 +00:00
NickandHiroku e0da4b8535 Pokemon Model Items (Server Utility) 2023-01-15 00:07:45 +00:00
Hiroku 502fe10713 Merge branch 'held-items' into 'main'
Held Item functionality

See merge request cable-mc/cobblemon!247
2023-01-14 23:20:14 +00:00
Village 47730b9bb1 update changelog 2023-01-14 15:09:14 -05:00
Village 9bdc2c881b Merge remote-tracking branch 'origin/held-items' into held-items 2023-01-14 14:42:28 -05:00
Village fc41f8ecc3 update interact assets 2023-01-14 14:41:33 -05:00
Licious17 a9012d0205 Fixed the not all Pokéballs being associated with the cobblemon:pokeballs item tag 2023-01-14 10:22:27 +00:00
Licious17 7aa712b574 Clarify Pokemon#swapHeldItem, add optional property to prevent stack decrement. 2023-01-14 10:18:05 +00:00
Licious17 6f3b569b04 Correct EVs being given to the original Pokémon instead of effected in battle. 2023-01-14 09:46:49 +00:00
Licious17 b08a60fc4f Remove unnecessary filter every iteration 2023-01-14 09:45:38 +00:00
Licious17 f8548c6f33 Merge remote-tracking branch 'origin/held-items' into held-items 2023-01-14 09:41:27 +00:00
Licious17 9e201122ea Revert PokemonBattle#onFaint experience awarding to PokemonBattle#end 2023-01-14 09:41:16 +00:00
Paul f0de0d1177 Fixed Pokémon battles instantly fleeing, improve held item lang 2023-01-14 15:16:27 +10:00
Paul 58b90c71be Fixed shoulder mounts 2023-01-14 13:58:08 +10:00
Paul 563842f392 Merge remote-tracking branch 'origin/main' into snowstorm-particles 2023-01-14 12:01:38 +10:00
Paul f8cf70a42c Much more work on Snowstorm effects 2023-01-14 12:01:20 +10:00
Licious17 1c3def7ae8 Merge branch 'main' into held-items
# Conflicts:
#	CHANGELOG.md
2023-01-13 11:19:25 +00:00
Hiroku 60b82b436d Merge branch 'redstone-support' into 'main'
Redstone Support

See merge request cable-mc/cobblemon!249
2023-01-12 20:24:05 +00:00
Licious17 ae4cb1c771 Add dispenser support for Apricorn harvesting with shears, allow apricorn seeds to be compostable, add comparator compatibility for the healing machine. 2023-01-12 19:27:18 +00:00
Licious17 0dbe65fcc1 Remove debug log, fix experience being awarded to wrong actor, trigger PokemonBattle#onFaint from ShowdownInterpreter 2023-01-11 11:32:22 +00:00
Licious17 d764f05dc7 Partial fix await held item merge 2023-01-11 11:14:15 +00:00
Licious17 e51b6e432b Exp. Share implementation. 2023-01-10 15:13:21 +00:00
Licious17 e46d54d5ae Fixed missing multiplier on the experience calculator based on Pokémon affection 2023-01-10 13:11:04 +00:00
Licious17 873307cc41 Move tag classes to API, mark no longer existing tags as deprecated, add missing tags, add Lucky Egg. 2023-01-10 13:09:27 +00:00
Licious17 1a47712541 Create CobblemonItemTags, add misc held item related item tags. 2023-01-09 17:25:30 +00:00
Licious17 6ed9cd9111 Added missing experience multiplier based on pending evolution. 2023-01-09 17:17:35 +00:00
Licious17 647a9df2ef Changelog contents added 2023-01-09 15:21:13 +00:00
Licious17 a7178ac0a0 Merge branch 'main' into held-items
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonCommands.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2023-01-09 15:10:37 +00:00
Licious 21b84f487c Kill evil mac file skip-ci 2023-01-09 15:05:02 +00:00
Licious 85ea797064 Kill evil mac file skip-ci 2023-01-09 15:01:36 +00:00
Licious17 b408b208ed Fixed magician, pickpocket, covet and bestow not having manual item removal. 2023-01-09 14:52:06 +00:00
Licious17 2d4da2c44b Implement various default HeldItemManagers. 2023-01-08 14:22:11 +00:00
Licious17 06c212a313 Add Pokemon#removeHeldItem 2023-01-08 14:07:46 +00:00
Licious17 5cd4fe72dd Update pokeball ID fetching on Battle Registry. 2023-01-08 14:03:29 +00:00
Licious17 c188db7ac6 Add check if Pokemon can be mounted on the shoulder in InteractPokemonHandler, improve held item already holding check 2023-01-08 13:24:26 +00:00
Village ef74e16949 add license 2023-01-08 04:34:27 -05:00
Paul dbe6363d96 Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
2023-01-08 14:27:37 +10:00
Paul ea6f46503c Sped up PokéBall capture process 2023-01-08 14:20:32 +10:00
Paul f9a6da8b0c Applied a cap of Pokémon per region to prevent super clustering 2023-01-08 14:04:59 +10:00
Paul f0fdb65557 Added config mechanism for changing our defaults 2023-01-08 14:00:40 +10:00
Village d15816bbb5 update interact menu 2023-01-07 14:23:01 -05:00
Village 76e0e02c02 menu assets 2023-01-07 04:58:05 -05:00
Village 2d6c40deea basic interact menu 2023-01-07 04:48:25 -05:00
Paul 0ab9e52b3d Fixed nether portal soft-dupe, improved world save logic for Pokémon so wild Pokémon save to the world (+config) 2023-01-07 17:51:44 +10:00
Paul 498fc013dc Added /giveallpokemon 2023-01-07 12:01:40 +10:00
Village 9143a52da5 move slot renders up to match profile renders a bit more 2023-01-06 16:41:00 -05:00
Licious17 4b4623ac53 Updated unnecessary usages of Pokemon#heldItem to Pokemon#heldItemNoCopy 2023-01-06 10:47:54 +00:00
Licious17 bac71d9267 Add held item to PokemonDTO 2023-01-06 10:45:47 +00:00
Village 0bf42d14cf show items in PC/Summary slots 2023-01-05 23:59:39 -05:00
Paul 0e955824d7 Fixed GL scissors on some Macs 2023-01-06 10:47:06 +10:00
Paul 2b74b23bf1 Missed a little of the aspect fix stuff 2023-01-06 10:35:31 +10:00
Paul 8f2df565d2 Possible fix for optional aspects not saving and loading properly 2023-01-06 10:24:28 +10:00
Paul 334b03b6dd Used a different GL scissor technique for parties as a test 2023-01-06 09:29:55 +10:00
Village 2620ad51ad item overlay 2023-01-05 18:05:19 -05:00
Village 6c5e7adb03 UI 2023-01-05 17:05:24 -05:00
Licious17 d28ba6d85e Implement held item give/take/swap 2023-01-04 12:03:15 +00:00
Paul e273e4228e Fixed forms not being able to unset the secondary type of a Pokémon in the stat JSON 2023-01-04 21:13:33 +10:00
Paul 7ce03ad732 Fixed Sliggoo and Goodra not having conditions on their Hisuian form 2023-01-04 21:00:14 +10:00
Paul 5f4748d82f Fixed poison damage underflowing HP updates and making them appear on full health on the client 2023-01-04 20:47:18 +10:00
Paul fd209a3892 Probable fix for issues with model texture layers 2023-01-04 20:29:41 +10:00
Paul 6cc03a5d0b More definitions and structure for Snowstorm support 2023-01-04 20:00:42 +10:00
Licious17 01fcc9271c Docs and movement of BattleMessage and Effect to the API package 2023-01-02 13:16:34 +00:00
Paul e81ab88909 Fixed the minimumDistanceBetweenEntities config option effectively being half of what it's set as 2023-01-02 19:48:50 +10:00
Paul 00f2420e09 Migrated to better molang library 2023-01-02 12:37:23 +10:00
Paul cd4e83da8c Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
2023-01-02 12:21:11 +10:00
Licious17 331371128a Added some held items 2023-01-01 21:08:13 +00:00
Licious17 5716e609da Implemented all '-enditem' action interpretations 2023-01-01 20:31:55 +00:00
Test f70322d479 fix header format [skip-ci] 2023-01-01 04:18:39 +00:00
Test d5771a5802 update changelog [skip-ci] 2023-01-01 04:11:00 +00:00
Paul 30137a9308 When referring to a discretely counted thing, 'less' is actually meant to be 'fewer'. [skip-ci] 2023-01-01 14:04:26 +10:00
Paul c853644c16 Changelog for 1.2.0 [skip-ci] 2023-01-01 13:59:52 +10:00
Paul 794d1b391d Non-snapshot 1.2.0 2023-01-01 13:44:51 +10:00
Paul 3ac2687f1e Merge remote-tracking branch 'origin/main' 2023-01-01 11:19:29 +10:00
Paul 511fd00652 Add last saved Cobblemon version to Pokemon data so we can do data migrations 2023-01-01 11:19:18 +10:00
Licious17 b36e93fa9b Implemented all '-item' action interpretations 2022-12-31 19:08:04 +00:00
Test 405d3fd774 fix framing for Beedrill/Butterfree line 2022-12-31 15:20:55 +00:00
Licious17 e6d3bbac3a Start of BattleMessage, lang for '-item' action interpretation 2022-12-31 14:14:41 +00:00
Paul 7a26d613fd Fixed zero PP turning into max-maxPP when entering battle 2022-12-31 20:16:34 +10:00
Paul 0a02edf6f3 Fixed hitboxes not changing when a Pokémon evolves 2022-12-31 19:22:30 +10:00
Paul e8c7b31144 Added explicit dependency on Architectury so we get fewer crash reports 2022-12-31 18:59:35 +10:00
Paul d6f6742658 Fixed Eevee positioning on shoulders 2022-12-31 13:16:35 +10:00
Paul c76dfe9e96 Doubled default charge rate of healers 2022-12-31 13:16:06 +10:00
Paul 3ba88265eb Fixed variations not showing in battle tiles, start battles with choice menu open 2022-12-31 13:04:57 +10:00
Hiroku dcc8975757 Fixed pyu size 2022-12-31 02:22:44 +00:00
Licious17 9d930b9ff1 Misc stuff 2022-12-30 23:39:11 +00:00
Hiroku e824234057 Merge branch 'hit-count-interpret' into 'main'
Add support for '-hitcount' to ShowdownInterpreter

See merge request cable-mc/cobblemon!244
2022-12-30 23:32:41 +00:00
Licious 0cc8bd6e0f Remove unused import 2022-12-30 18:22:52 +00:00
Licious17 1e45ff34f0 Added support for '-hitcount' to ShowdownInterpreter 2022-12-30 17:20:38 +00:00
Licious17 bca83a8cdc Start battle interpret 2022-12-30 17:09:52 +00:00
Licious17 bdb5afde9d Attach HeldItemManager to BattlePokemon when packing the team in the BattleRegistry 2022-12-30 16:27:20 +00:00
Licious17 7e8b448f48 Implemented CobblemonHeldItemManager 2022-12-30 16:09:06 +00:00
amo 697dee2f28 Rewrote PokemonRenderer.renderLabel, potentially added q.camera_rotation to MolangBoneValue.resolve, added remap functions to SimpleMathExtensions.kt 2022-12-30 14:14:36 +00:00
Licious17 00e746adc7 Updated Pokemon#loadFromJSON and Pokemon#saveToJSON to use the ItemStack Codec, added held item manager and provider 2022-12-30 13:16:03 +00:00
Hiroku 2532511d53 Merge branch 'fix-capture-effects' into 'main'
Fix capture effects

See merge request cable-mc/cobblemon!243
2022-12-30 12:39:12 +00:00
Licious17 14f7c5ecc3 Fixed CaptureEffect not triggering after a successful capture 2022-12-30 12:14:09 +00:00
Licious17 3b62b7773b Added HeldItemCommand 2022-12-30 00:22:48 +00:00
Licious17 06d9d06bab Implemented held item stack in Pokemon 2022-12-29 23:40:48 +00:00
Hiroku 1ec6af6d34 Merge branch 'pokemon-cry-fixes' into 'main'
Fix connection to server with cries

See merge request cable-mc/cobblemon!242
2022-12-29 21:04:19 +00:00
Licious17 e472ee5fbd Fixed S2C crash due to missing cry sound events, made the sound event identifier adapt to the namespace of the registered species for better expected datapack functionality, added the ability to create sounds for every form. 2022-12-29 20:50:11 +00:00
Paul 7fc651c947 Outlining snowstorm particle stuff 2022-12-29 17:42:59 +10:00
Test 7b4f43fd12 update labels 2022-12-28 21:45:36 +00:00
Hiroku 8a49b88c7a Merge branch 'spawn-pos-change' into 'main'
Fix ModifiableWorld#spawnEntity and Entity#setPosition inconsistencies

See merge request cable-mc/cobblemon!241
2022-12-28 13:02:15 +00:00
Licious17 2138022f6d Fixed usages of ModifiableWorld#spawnEntity before Entity#setPosition 2022-12-28 12:38:31 +00:00
Paul fd3bc667a9 Changelog for cry change [skip-ci] 2022-12-28 17:46:21 +10:00
Paul 4db5e54d88 Added blank sounds for Pokémon ambient cries so they can be set via RP 2022-12-28 17:41:07 +10:00
Paul 62748437de Corrected evo displays I think 2022-12-28 14:17:27 +10:00
Paul 163b2df7f6 Fixed many bugged forms that didn't have aspect conditions 2022-12-28 14:17:04 +10:00
Paul 386bad2c1c More missed stuff from last commit (illegal abilities) 2022-12-28 14:15:32 +10:00
Paul d304028389 Missed stuff from last commit (illegal abilities) 2022-12-28 14:14:53 +10:00
Paul 964894f376 Fixed abilities being illegal when they shouldn't be illegal 2022-12-28 14:14:33 +10:00
Paul ec8dfd746d Fixed moves that only work in double battles not being selectable at all 2022-12-28 13:47:09 +10:00
Hiroku 732547213a Merge branch 'mod-menu-compat' into 'main'
Added necessary data

See merge request cable-mc/cobblemon!239
2022-12-27 22:03:01 +00:00
Hiroku df888a7f36 Merge branch 'graal-relocation' into 'main'
Relocate IBM package, add pipes for Graal logging

See merge request cable-mc/cobblemon!240
2022-12-27 22:02:29 +00:00
Nick bd01b9d682 Relocate IBM package, add pipes for Graal logging 2022-12-27 13:10:38 -08:00
Licious17 ab390703da Updated mods.toml and fabric.mod.json with our new website. 2022-12-27 17:38:09 +00:00
Licious17 28cd8f0265 Added necessary data 2022-12-27 17:33:46 +00:00
Licious17 9fb91f8f6a Merge branch 'main' into species-data-appending 2022-12-27 13:37:17 +00:00
Paul ca47636ffe Merge remote-tracking branch 'origin/main' into snowstorm-particles 2022-12-27 21:14:31 +10:00
Paul a852b8e535 Fixed multiple variant JSON issues 2022-12-27 21:14:13 +10:00
Test fa6f52d305 update click.ogg 2022-12-26 22:27:20 +00:00
Paul 3e8d8daa9b Merge remote-tracking branch 'origin/main' into snowstorm-particles 2022-12-26 21:32:21 +10:00
Paul 8196a686df Fixed arbok variants, other variants need restoring ): 2022-12-26 21:31:59 +10:00
Veraxiel da157a1b28 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon 2022-12-26 02:17:14 -05:00
Veraxiel 167191a135 Added spawn files for Natu, Murkrow, and Wailord families. Updated spawn files of the Gen 1 fossil Pokémon. 2022-12-26 02:16:31 -05:00
Paul e6f881df6e Merge remote-tracking branch 'origin/main' into snowstorm-particles
# Conflicts:
#	CHANGELOG.md
2022-12-26 14:35:35 +10:00
Paul 53f82b1971 Fixed form and alolan stuff 2022-12-26 14:25:18 +10:00
Hiroku 9f775f2c92 Merge branch 'model-fix-balls-healmach' into 'main'
Fixes In Hand Pokeball and Healing Machine Display Settings

See merge request cable-mc/cobblemon!238
2022-12-25 08:57:15 +00:00
dhi_holo 07f89dc691 Update CHANGELOG.md 2022-12-25 18:33:19 +10:00
dhi_holo 0c70a5cbac Fixes In Hand Pokeball and Healing Machine Display Settings
The rendering of the pokeball and healing machine items, mainly when dropped but in other places, were not matching to how other things in Minecraft work, so were brought slightly more inline. Slight model tweak to the Pokeball In Hand model to make the visuals cleaner, but every change directly links to the display settings.
2022-12-25 18:26:15 +10:00
Paul 3ceda765c9 Updated framing for starters, pichu line, zubat 2022-12-25 17:16:51 +10:00
Paul e3360e2d18 Updated various models and textures, fixed Rattata + Nidoqueen texture, updated Sableye animations 2022-12-25 14:33:19 +10:00
Licious17 6fbd4c16e3 Licenses 2022-12-24 12:11:47 +00:00
Paul b4e2ecc8f1 Added Wailmer, Wailord, Murkrow, Honchkrow, and fixed various framings 2022-12-24 22:04:45 +10:00
Paul bdd6ea48a0 Added scissoring of pokemon renders in PC GUI, update click sound to be a bit quieter 2022-12-24 11:44:26 +10:00
Licious17 64b624c1a7 Merge branch 'main' into species-data-appending 2022-12-23 14:00:01 +00:00
Licious17 ffd3afb8d9 Added addition system 2022-12-23 13:59:15 +00:00
Paul 84244c0376 Added Natu and Xatu 2022-12-23 19:03:38 +10:00
Paul 6fec1417b1 Don't despawn a pokemon that has a vehicle 2022-12-23 16:13:04 +10:00
Paul 142c47de1c Changelog for pokemon look change during battle 2022-12-23 13:13:35 +10:00
Paul e796883660 Merge remote-tracking branch 'origin/main' into pc 2022-12-23 13:13:03 +10:00
Paul c6779385a7 Added emissive texture support to Pokémon render layers 2022-12-23 13:12:44 +10:00
Hiroku 1a0ea5db72 Merge branch 'pc' into 'main'
PC

See merge request cable-mc/cobblemon!237
2022-12-23 03:07:36 +00:00
TestandHiroku 342a1ceb6d PC 2022-12-23 03:07:36 +00:00
Hiroku 0e7d3438a5 Merge branch 'main' into 'main'
Pokémon look at eachother in battle & halt all other goals.

Closes #131

See merge request cable-mc/cobblemon!233
2022-12-23 02:55:25 +00:00
amo cadcdab39b fix bug 2022-12-23 02:52:08 +00:00
Paul 0bc7614809 Merge remote-tracking branch 'origin/pc' into pc 2022-12-23 12:42:56 +10:00
Paul ecbde40aa6 Fixed production issue on Forge caused by Graal 2022-12-23 12:42:46 +10:00
Village 672ed74309 rm unused imports 2022-12-22 21:25:12 -05:00
Village 469e9e9065 set preview on hover, remove debounce for grab 2022-12-22 21:20:50 -05:00
Paul 2dba103c14 Fixed text glitching on ability and nature 2022-12-23 10:37:15 +10:00
Village be7c0220d4 update sounds 2022-12-22 15:01:23 -05:00
MoeBoy76 feaf87f615 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evo-notify 2022-12-22 22:00:30 +11:00
Village 14f9640556 Merge branch 'main' of https://gitlab.com/cable-mc/pokemon-cobbled into pc 2022-12-22 02:59:05 -05:00
Village 3b2940ac59 rm unused imports 2022-12-22 02:58:46 -05:00
Village 036d9c5e6b PC 2022-12-22 02:34:25 -05:00
Paul 76cdecbb94 Fixed Mewtwo always being Mega Mewtwo X actually 2022-12-21 22:15:02 +10:00
Paul 1d6317b5d6 Fixed an instance of using CheckedRandom unsafely 2022-12-21 22:13:07 +10:00
Paul 26f963f9b9 Improved initializing logic so we don't get nasty invis pokemon again 2022-12-21 22:06:20 +10:00
Paul 9ee90508ed Changelog update [skip-ci] 2022-12-21 17:44:03 +10:00
Hiroku 9b6da631ee Merge branch 'stat-calculation-fix' into 'main'
Apply level multiplier in correct location, fixes invalid stats outside of HP calculation

See merge request cable-mc/cobblemon!236
2022-12-21 07:38:00 +00:00
Hiroku c26edc55f5 Merge branch 'spawn-validator' into 'main'
Fix Magmortar spawn definitions and add validator for future default configurations

See merge request cable-mc/cobblemon!235
2022-12-21 07:37:50 +00:00
Nick f1c306051c Apply level multiplier in correct location, fixes invalid stats outside of HP calculation 2022-12-20 19:18:32 -08:00
Nick dacb16044d License 2022-12-20 18:04:51 -08:00
Nick 68478f84d8 Fix Magmortar spawn definitions and add validator for future default configurations 2022-12-20 18:01:59 -08:00
Hiroku 6272bfe2d6 Merge branch 'battle-engine' into 'main'
Replaced Javet with Graal

See merge request cable-mc/cobblemon!234
2022-12-20 19:52:14 +00:00
Licious17 256fcf3a8b Fixed berry flower and fruit not rendering for the first life cycle 2022-12-20 14:15:11 +00:00
Paul e561bfd148 Fixed bad directory reference in PokemonSpecies showdown export 2022-12-20 07:06:59 +10:00
Licious17 7e082f27e0 Remove reference to client only class in Berry API 2022-12-19 19:20:21 +00:00
Licious17 e81b8ca4f2 Removed VoxelShape for berry fruit and flowers, added customizable rotation to berry flower and fruits growth points. 2022-12-19 18:43:33 +00:00
amo 2f9cc2b41c pokemon look at eachother in battle & dont move 2022-12-19 16:08:12 +00:00
Licious17 351910a3ef Merge branch 'main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobbledDataProvider.kt
2022-12-19 12:52:42 +00:00
Paul 8d39e2536b Fixed graal issue in production jars 2022-12-19 22:08:45 +10:00
Paul 17fa80e752 Upped compile-time RAM requisition to 4gb 2022-12-19 21:59:10 +10:00
Paul 4d2641308a licenses 2022-12-19 21:02:34 +10:00
Paul 27e02963eb Implemented Showdown messaging using Graal 2022-12-19 21:01:12 +10:00
Paul d71c03e48a Merge remote-tracking branch 'origin/main' into battle-engine 2022-12-19 18:28:09 +10:00
Paul 43b69ba860 Merge remote-tracking branch 'origin/main' 2022-12-17 10:08:36 +10:00
Paul 64bfb72c53 Documentation correction 2022-12-17 10:08:25 +10:00
Paul 6810232183 Updated licenses 2022-12-17 10:08:03 +10:00
Licious17 6e25c2591e Changed the default Apricorn seed chance config value from 6% to 10% 2022-12-16 12:42:22 +00:00
Paul 0be43ec28c Added waning and waxing moonphase ranges 2022-12-16 21:08:20 +10:00
Paul 78f0f572b2 Added range support to moon phase conditions and allowed single-value interpretation for time range 2022-12-16 21:05:10 +10:00
Paul 6d99c7e643 Fixed showdown shutting down after logging out of singleplayer 2022-12-16 12:56:03 +10:00
Paul c6f4fc8992 Prevent all motion on dying pokemon 2022-12-16 12:37:40 +10:00
Paul 320c471b4e Changelog for chunk load fix 2022-12-16 12:33:10 +10:00
Paul 0ea8d8932e Merge branch '1.1.1-log-world-gen' of gitlab.com:cable-mc/pokemon-cobbled
# Conflicts:
#	gradle.properties
2022-12-16 12:32:27 +10:00
Hiroku 7325f4b6ac Merge branch 'surface-spawning' into 'main'
Added surface spawning context

See merge request cable-mc/cobblemon!232
2022-12-16 02:21:57 +00:00
Paul 4fd035aa16 Merge branch 'main' of gitlab.com:cable-mc/pokemon-cobbled into surface-spawning 2022-12-16 00:21:15 +10:00
Licious 5f1038d7a4 Merge branch 'animations-in-resource-packs' into 'main'
Animations in resource packs

See merge request cable-mc/cobblemon!230
2022-12-15 13:36:17 +00:00
HirokuandLicious 6449cb7295 Animations in resource packs 2022-12-15 13:36:17 +00:00
Paul 1fa0e81b8e Added surface spawning context 2022-12-15 22:34:09 +10:00
Hiroku b243a0a098 Merge branch 'starter-config-maintainability' into 'main'
Starter config maintainability

See merge request cable-mc/cobblemon!229
2022-12-14 21:58:09 +00:00
Paul 139253454c Merge branch 'main' of gitlab.com:cable-mc/pokemon-cobbled into starter-config-maintainability
# Conflicts:
#	CHANGELOG.md
2022-12-15 07:42:26 +10:00
MoeBoy76 f05f586a8e Moved completed sound notification out of AdvancementHandler and into Evolution 2022-12-15 07:43:38 +11:00
MoeBoy76 9da71000d2 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evo-notify 2022-12-15 07:40:00 +11:00
Paul 7224ac123f Better protect save file loading using the .temps 2022-12-14 22:29:28 +10:00
Paul e700dcb142 Model rotation example in berry block renderer 2022-12-13 20:45:41 +10:00
Paul 2527b0e5d1 Corrected comment [skip-ci] 2022-12-13 20:34:32 +10:00
Paul 0fe36a98d7 Cleanup code [skip-ci] 2022-12-13 20:31:10 +10:00
Paul c9ef897a2e Fixed positioning of berry and flower rendering 2022-12-13 20:30:11 +10:00
Paul c53018942b Changelog [skip-ci] 2022-12-13 19:50:34 +10:00
MoeBoy76 56dffd9790 Added placeholder sound files and registered sounds 2022-12-11 18:38:41 +11:00
MoeBoy76 c5c3afc4f0 Added code for Evolution notification on both availability and completion 2022-12-11 17:23:28 +11:00
Licious17 2cc46406de Updated pecha fruit texture, fixed berry rendering culling. 2022-12-10 13:43:04 +00:00
Licious17 6bf09dbd2a Merge remote-tracking branch 'origin/main' 2022-12-10 13:16:00 +00:00
Licious17 010f9b16f9 Fix Rockruff and Lycanroc data for gimmick form 2022-12-10 13:15:51 +00:00
Paul 45eaf6fb3b Likely fix for world chunk gen hanging 2022-12-10 17:00:26 +10:00
Paul 8e4141ccc1 Merge branch 'main' of gitlab.com:cable-mc/pokemon-cobbled into starter-config-maintainability 2022-12-10 15:23:58 +10:00
Paul 41c6accc16 Improved starter config handling so it is opt-in for it to export to a file 2022-12-10 15:23:50 +10:00
Licious17 1ef39bf1a3 Attempts at berry fruit and flower rendering 2022-12-09 10:09:19 +00:00
Hiroku 470f0d37a4 Merge branch 'spawns-as-data' into 'main'
Moved spawn sets and spawn detail presets to data

See merge request cable-mc/cobblemon!228
2022-12-09 08:01:39 +00:00
Paul f7bd3af13b Licensing fix 2022-12-09 17:46:05 +10:00
Paul f4f7c0f19a Moved spawn sets and spawn detail presets to data 2022-12-09 17:30:34 +10:00
Licious17 e0bc16a232 Merge branch 'main' into berry 2022-12-08 16:17:01 +00:00
Paul 7ff0a66aae Removed faulty spawn cap 2022-12-09 00:00:23 +10:00
Hiroku 0487d431e1 Merge branch 'healer-advancements-redux' into 'main'
Updated Healing Machine Advancements

See merge request cable-mc/cobblemon!227
2022-12-08 09:42:37 +00:00
Paul f46109e080 Fixed berry trees not rendering 2022-12-08 19:30:58 +10:00
Hiroku 5429f70a26 Merge branch 'pkm-properties' into 'main'
Added pokeball and nature pokemon property

See merge request cable-mc/cobblemon!226
2022-12-08 09:05:55 +00:00
Licious17 21983061a6 Fix tint index of berry tree model being shared by the break particle 2022-12-06 16:05:45 +00:00
Licious17 87543095f1 Cleanup 2022-12-06 15:08:26 +00:00
Licious17 688b0836a5 Add missing doc 2022-12-06 15:04:53 +00:00
Licious17 42d2a5ce89 Added util extension for Box ByteBuf read/write 2022-12-06 15:03:20 +00:00
Licious17 aa8d0d80f1 Added pokeball and nature pokemon property 2022-12-06 12:49:12 +00:00
Licious17 307f5e2c8d Merge branch 'main' into berry 2022-12-06 12:12:51 +00:00
dhi_holo 9547be150b New Healing Machine Advancement
Removed full_heal and max_heal (dumb names, sorry), and made a (*slightly* jankily written, but fully functional) advancement which checks for you interacting with a healer with atleast one pokeball in it (any type is detected due to the stuff that makes it mildly janky looking).
A more optimized option advancement might be doable eventually, but this is the only thing I could detect to show the healer successfully being used.
Is possible to cheese it by interacting with a healer someone else is using, but shouldn't be an issue in the long run.

Updated en_us lang with new advancement, removing the prior two (the name from full_heal is kept, with a brand new description)
2022-12-06 20:43:00 +10:00
dhi_holo 346e3a3047 Update en_us.json
Fixed Calcuim (Calcium) misspelling
2022-12-06 16:28:11 +10:00
Licious 594bf59496 Merge branch 'aspect-json-rework' into 'main'
Aspect json rework

See merge request cable-mc/cobblemon!225
2022-12-05 15:11:12 +00:00
Licious17 b1a6b43414 Fix pecha berry Y voxelshape y positions 2022-12-05 14:57:30 +00:00
Licious17 8d90e2d190 Merge branch 'main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobbledDataProvider.kt
2022-12-05 14:51:37 +00:00
Licious17 767446c804 Implemented berry data synchronization with client 2022-12-05 14:49:50 +00:00
Licious17 b6d5762ddd Make berry tree animate the breaking after last life cycle, added LiteralHexColorAdapter type adapter 2022-12-05 13:47:10 +00:00
Licious17 dc0ab2e810 Add foliage color as a customizable datapack property of berries. 2022-12-05 13:27:18 +00:00
Paul 7f6fa2f009 Removed asset resolver converter code that is no longer needed 2022-12-05 19:51:11 +10:00
Paul b7720248ad Refactored asset resolver JSONs to be resource pack friendly 2022-12-05 19:49:35 +10:00
Hiroku 60593c7cdf Merge branch 'fix-aw-generation' into 'main'
Fix access widener generations on compile, remove cached AW

See merge request cable-mc/cobblemon!224
2022-12-05 02:50:58 +00:00
Nick 61e545ace3 Fix access widener generations on compile, remove cached AW 2022-12-04 15:28:19 -08:00
Licious17 f50ec2ae5a Fix berry tree not re-rolling growth points between harvests 2022-12-04 13:20:35 +00:00
Licious17 a4d0ddf229 Prevent unnecessary chunk saving on berry tree life cycles value update if the value is the same 2022-12-04 13:15:54 +00:00
Licious17 b1d84fef55 Fix berry tree entity read/write nbt being the other way around 2022-12-04 13:14:36 +00:00
Hiroku 045398d204 Merge branch 'model-loading-fix' into 'main'
Model loading fix

See merge request cable-mc/cobblemon!223
2022-12-04 11:23:25 +00:00
Paul c4e318cb1c Updated aspect JSONs to use new model paths 2022-12-04 11:30:01 +10:00
Licious17 e26f4c33ba Document util functions inside BerryBlock and BerryBlockEntity 2022-12-03 14:21:09 +00:00
Licious17 7b023ab34f License stuff. 2022-12-03 14:15:57 +00:00
Licious17 ded186890d Implemented berry harvesting and life cycles. 2022-12-03 14:14:36 +00:00
Licious17 4c5b16e502 Added util to get the berry item and block implementation from the berry API, added pickstack functionality for the berry block 2022-12-03 12:35:15 +00:00
Licious17 6b95f8b7bf Update berry yield API for better mod compat 2022-12-03 12:24:44 +00:00
Paul 048bae7585 Merge branch 'main' of gitlab.com:cable-mc/pokemon-cobbled into model-loading-fix 2022-12-03 18:48:46 +10:00
Hiroku fee858e5dc Merge branch 'better-aspects' into 'main'
Reworked species features, complete with new data pack stuff

See merge request cable-mc/cobblemon!222
2022-12-03 00:09:54 +00:00
Licious17 4a50293e04 Change usages of VoxelShapes#cuboid to Block#createCuboidShape 2022-12-02 23:51:54 +00:00
Licious17 9fa829b30a Enabled dynamicBounds setting for Berry blocks 2022-12-02 23:07:50 +00:00
Licious17 0dc6b8321e Expanded berry growth factors to have API, allow data driven berry tree voxelshapes 2022-12-02 22:25:27 +00:00
Paul f938e99036 Merge branch 'main' of gitlab.com:cable-mc/pokemon-cobbled into better-aspects
# Conflicts:
#	CHANGELOG.md
2022-12-02 23:15:13 +10:00
Paul 02ecc87608 Fixed max hp display not being correct for allied pokemon 2022-12-02 23:14:34 +10:00
Paul 5a0d46410a Merge branch 'main' of gitlab.com:cable-mc/pokemon-cobbled into better-aspects
# Conflicts:
#	CHANGELOG.md
2022-12-02 23:05:19 +10:00
Paul e516b6dea2 Reworked species features, complete with new data pack stuff 2022-12-02 23:03:50 +10:00
MoeBoy76 3e3a2a7ec0 Fixed model loading for ResourcePacks, updated Abra aspect to match changes 2022-12-02 21:14:19 +11:00
Licious17 4616e61825 Implement berry datapack loading 2022-12-01 22:52:51 +00:00
Licious17 63c0b7da37 More berry data 2022-12-01 15:04:43 +00:00
Licious17 aad041998c Added block rendering stuff for berries 2022-11-30 13:22:52 +00:00
Licious17 b0e58975f2 License stuff, fixed berry tooltip 2022-11-30 12:41:00 +00:00
Licious17 cf41dd6fb4 Implemented Pecha interaction, fixed bad refactor on Flavor package path 2022-11-30 12:33:07 +00:00
Hiroku bd1f7c59c3 Merge branch 'entity-attributes-fix' into 'main'
Entity attribute registration fix

See merge request cable-mc/cobblemon!221
2022-11-29 10:54:14 +00:00
LiciousandHiroku 1fdf928b7b Entity attribute registration fix 2022-11-29 10:54:13 +00:00
Licious17 a66eb04097 Move InteractiveItem to API 2022-11-29 10:45:00 +00:00
Licious17 960d20599e Refactor InteractiveItem to be an interface instead, progress on berry block n item 2022-11-28 18:07:25 +00:00
Licious17 8ea6f13d34 License stuff 2022-11-28 15:21:03 +00:00
Licious17 34d28c798d Progress on data backing berries 2022-11-28 15:10:32 +00:00
Licious17 cb0046f4cc Fix merge bad import 2022-11-28 12:56:09 +00:00
Licious17 b475ead059 Merge branch 'main' into berry
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2022-11-28 12:52:36 +00:00
Licious17 9557c48cab Merge remote-tracking branch 'origin/berry' into berry 2022-11-28 12:50:26 +00:00
Licious17 1062507ffb Added barebones berry block 2022-11-28 12:50:15 +00:00
Paul ee863a4e04 Dated the changelog [skip-ci] 2022-11-28 18:34:35 +10:00
dhi_holo b5aef1cccc Revert "Update first_evolution.json"
This reverts commit f9df1085ec.
2022-11-26 03:27:20 +10:00
dhi_holo 658e6a9da5 Revert "Advancements Fixed Maybe?"
This reverts commit ff6f18d575.
2022-11-26 03:27:12 +10:00
dhi_holo ff6f18d575 Advancements Fixed Maybe?
I went and rewrote parts of the advancements until they worked properly as far as I can tell.
I don't get why it was breaking, but it was, and hopefully it won't from now on
2022-11-26 02:32:38 +10:00
dhi_holo f9df1085ec Update first_evolution.json
Should fix the issue Hiro mentioned earlier
2022-11-26 01:07:02 +10:00
Licious17 997bacefe2 Merge branch 'main' into berry 2022-11-25 12:46:45 +00:00
Licious17 5f94707a9e Added pecha berry assets, added pecha berry item 2022-11-25 12:40:47 +00:00
Paul 5848e7b21c Added more stuff 2022-11-13 13:57:45 +10:00
Paul 2a2c0da200 Starting some global type definitions for engine 2022-11-11 19:50:41 +10:00
13749 changed files with 921248 additions and 233674 deletions
+5 -1
View File
@@ -28,4 +28,8 @@ forge*changelog.txt
/logs/
.vscode/launch.json
.vscode
common/src/main/resources/assets/cobblemon/showdown
common/src/main/resources/assets/cobblemon/showdown
# Generated files
*/generated/resources/*
/fabric/src/generated/resources/cobblemon-common.accesswidener
+32 -11
View File
@@ -7,12 +7,14 @@ stages:
#TODO add client reference test process, search for import com.cobblemon.mod.common.client
build-job:
build:
stage: build
only:
- branches@cable-mc/cobblemon
script:
- export GRADLE_OPTS="-Xmx3G -Xms3G"
- chmod +x ./gradlew
- ./gradlew build
- export GRADLE_OPTS="-Xmx4G -Xms4G"
- chmod +x ./gradlew
- ./gradlew build
cache:
key: "$CI_COMMIT_REF_NAME"
policy: push
@@ -20,9 +22,28 @@ build-job:
- forge/build/libs
- fabric/build/libs
# Separate step to deploy the artifacts, save Norry the headache of keeping even more shit around
deploy-job:
publish:
stage: deploy
dependencies:
- build
cache:
key: "CI_COMMIT_REF_NAME"
policy: pull
paths:
- forge/build/libs/*.jar
- fabric/build/libs/*.jar
rules:
- if: '$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"
@@ -32,12 +53,12 @@ deploy-job:
- fabric/build/libs/*.jar
script:
- echo "Collecting artifacts..."
- mv forge/build/libs/*-remap.jar ./
- mv fabric/build/libs/*-remap.jar ./
- for f in *.jar; do mv "$f" "$(echo "$f" | sed s/+/b$CI_PIPELINE_IID+/ | sed s/-remap//)"; done
- mv forge/build/libs/*+*.jar ./
- mv fabric/build/libs/*+*.jar ./
- for f in *.jar; do mv "$f" "$(echo "$f" | sed s/+/b$CI_PIPELINE_IID+/)"; done
artifacts:
expire_in: 28 days
paths:
- ./*.jar
# - forge/build/libs/*-forge.jar
# - fabric/build/libs/*-remap.jar
# - forge/build/libs/*+*.jar
# - fabric/build/libs/*+*.jar
+742 -7
View File
@@ -1,14 +1,748 @@
# Changelog
## [1.?.?]()
### Developer
- Various breaking changes have been made to ElementalTypes, Moves and other registries, Cobblemon has migrated to make use of proper Minecraft registries.
- DamageCategory is now an Enum.
- Gender has been moved to an API package.
## 1.1.1
### Datapack & Resourcepack Creators
- Pokémon types can now be created via datapacks. Data path is ``your_mod_namespace/cobblemon/elemental_types/path_to_your_file``.
- Custom moves are now possible via datapacks, these require JavaScript/TypeScript programming knowledge. Data path is ``your_mod_namespace/cobblemon/moves/path_to_your_file``.
- Pokémon species data path has been changed to ``your_mod_namespace/cobblemon/species/path_to_your_file``.
## [1.4.0](#1-4-0)
### Additions
- Added nicknaming.
- Added mints, found on mountains.
- Added revival herbs, with pep-up flowers if fully grown, growing in lush caves.
- Added medicinal leeks, growing on the surface of rivers and ponds. It is a potion ingredient!
- Added big roots, generating from cave ceiling dirt and sometimes spreading into energy roots.
- Added trading between players. Press R while looking at another player, you'll figure it out.
- Added pasture blocks, used to let your PC Pokémon roam around your base.
- Added 69 berry trees. Some are found in village farms, some from planting different berries close to each other.
- Added medicine brewing using medicinal leeks and berries in brewing stands.
- Added Pokémon cries when in battles and being sent out.
- Added support for scale in animations.
- Added support for jump keyframes (i.e. pre and post keyframes)
- Added AI for Nosepass to point towards world spawn when idle.
- Added structure spawn conditions
- Added recipes for Berry Juice, Heal Powder, Remedy, Fine Remedy, Superb Remedy, Revive, Max Revive, HP Up, Protein, Iron, Calcium, Zinc, Carbos, PP Up, PP Max, Pasture, Medicinal Leek to Magenta Dye, Roasted Leek, Leek and Potato Stew, Braised Vivichoke, Vivichoke Dip, Mulch Base, Growth Mulch, Surprise Mulch, Coarse Mulch, Humid Mulch, Rich Mulch, Loamy Mulch, Peat Mulch, Sandy Mulch, X Attack, X Defense, X Special Attack, X Special Defense, X Speed, X Accuracy, Dire Hit, Guard Spec, Power Anklet, Power Band, Power Belt, Power Bracelet, Power Lens, Power Weight, Bright Powder, Destiny Knot
- Added a shoulder mount for Mimikyu
- Added Advancement trigger for defeating Pokémon and collecting varieties of Pokémon.
- Added sleep animations to Arcanine, Jigglypuff, Wigglytuff, Vulpix and Ninetales.
- Added flying placeholder animations to Pidgey, Pidgeotto, Pidgeot, Golbat, Crobat, Scyther, Scizor, Zapdos, Moltres, Articuno, Dragonite, Rowlet, Dartrix, and Decidueye.
- Added loot to various vanilla chest loot tables (Link Cable in Ancient Cities, Woodland Mansions, End Cities, and Igloos, Vivichoke Seeds in Jungle Temples, Dungeons, and Plains, Savanna, Snowy, and Taiga Villages, and all 7 Apricorn Sprouts in Desert, Plains, Savanna, Snowy, and Taiga Villages, as well as the Bonus Chest, which can also have 5 of the basic Poké Ball types)
- Added the `/teststore <player> <store> <properties>` command allowing command block/mcfunction users to query a party, PC or both for Pokémon matching specific properties and returning the match count, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.teststore` if a permission mod is present.
- Added the `/querylearnset <player> <slot> <move>` command allowing command block/mcfunction users to query a party slot and check if the Pokémon can learn a specific move returning a 1 if yes otherwise 0, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.querylearnset` if a permission mod is present.
- Added the `/testpcslot <player> <slot> <properties>` command allowing command block/mcfunction users to query a pc slot and check if the Pokémon matches specific properties returning a 1 if yes otherwise 0, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.testpcslot` if a permission mod is present.
- Added the `/testpartyslot <player> <slot> <properties>` command allowing command block/mcfunction users to query a party slot and check if the Pokémon matches a specific properties returning a 1 if yes otherwise 0, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.testpartyslot` if a permission mod is present.
- Added the `/clearparty <player>` command for emptying a player's party.
- Added the `/clearpc <player>` command for emptying a player's PC.
- Added the `/pokemonrestart <reset_starters>` and the `/pokemonrestartother <player> <reset_starters>` command allowing command block/mcfunction users to reset a players Pokémon data.
- Added support for "isBattle" and "isTouchingWater" properties on resource pack Pokémon poses. This allows your custom Pokémon to be posed differently when in battle.
- Added support for "isVisible" on a transformed part on resource pack Pokémon poses. This allows your custom Pokémon to have bones disappear in specific poses, such as hiding Greninja's throwing star when not in a battle pose.
- Added a "doShinyStarters" gamerule
- Added the `doPokemonLoot` gamerule to toggle Pokémon dropping items/exp on death.
- Added support for battle music. Sounds can be added to the ``battle.pvp.default`` and ``battle.pvw.default`` sound events.
- Added ability activation announcement when in battle.
- Added Auspicious Armor and Malicious Armor, which can be used to evolve Charcadet into Armarouge or Ceruledge respectively.
- Added animations for Wailord.
- Added Cherry Torterra variant.
- Added 2 new face spots for Spinda.
- Added Forretress Shulker variant.
- Added 'enabled' optional property on model layers, allowing later variations to disable previously-defined layers. See [this issue](https://gitlab.com/cable-mc/cobblemon/-/issues/335) for how this looks.
### Pokémon Added
#### Gen 2
- Chikorita
- Bayleef
- Meganium
- Totodile
- Croconaw
- Feraligatr
- Cyndaquil
- Quilava
- Typhlosion
- Spinarak
- Ariados
- Shuckle
- Chinchou
- Lanturn
- Aipom
- Gligar
- Hoothoot
- Noctowl
- Mareep
- Flaaffy
- Ampharos
- Sudowoodo
- Snubbull
- Granbull
- Phanpy
- Donphan
- Teddiursa
- Ursaring
#### Gen 3
- Taillow
- Swellow
- Relicanth
- Duskull
- Dusclops
- Shroomish
- Breloom
- Cacnea
- Cacturne
- Poochyena
- Mightyena
- Wingull
- Pelipper
- Numel
- Camerupt
- Clamperl
- Huntail
- Gorebyss
- Surskit
- Masquerain
- Chimecho
- Barboach
- Whiscash
- Volbeat
- Illumise
- Zigzagoon
- Linoone
- Ralts
- Kirlia
- Gardevoir
- Nincada
- Ninjask
- Shedinja
- Beldum
- Metang
- Metagross
#### Gen 4
- Carnivine
- Shinx
- Luxio
- Luxray
- Ambipom
- Gliscor
- Dusknoir
- Chingling
- Bonsly
- Chatot
- Combee
- Vespiquen
- Buizel
- Floatzel
- Starly
- Staravia
- Staraptor
- Gallade
#### Gen 5
- Bouffalant
- Roggenrola
- Boldore
- Gigalith
- Venipede
- Whirlipede
- Scolipede
- Yamask
- Cofagrigus
- Patrat
- Watchog
- Lillipup
- Herdier
- Stoutland
- Cottonee
- Whimsicott
- Pidove
- Tranquill
- Unfezant
- Timburr
- Gurdurr
- Conkeldurr
#### Gen 6
- Scatterbug
- Spewpa
- Vivillon
- Skrelp
- Dragalge
- Bunnelby
- Diggersby
- Phantump
- Trevenant
- Fletchling
- Fletchinder
- Talonflame
#### Gen 7
- Wishiwashi
- Cutiefly
- Ribombee
- Stufful
- Bewear
- Comfey
- Alolan Exeggutor
- Alolan Raichu
- Alolan Meowth
- Alolan Persian
- Komala
- Wimpod
- Golisopod
- Crabrawler
- Crabominable
- Mudbray
- Mudsdale
#### Gen 8
- Arrokuda
- Barraskewda
- Nickit
- Thievul
- Falinks
- Galarian Farfetch'd
- Sirfetch'd
- Rookidee
- Corvisquire
- Corviknight
- Galarian Ponyta
- Galarian Rapidash
- Yamper
- Boltund
- Galarian Zigzagoon
- Galarian Linoone
- Obstagoon
- Galarian Meowth
- Perrserker
- Ursaluna
#### Gen 9
- Sprigatito
- Floragato
- Meowscarada
- Fuecoco
- Crocalor
- Skeledirge
- Quaxly
- Quaxwell
- Quaquaval
- Flittle
- Espathra
- Garganacl
- Fidough
- Dachsbun
- Armarouge
- Ceruledge
- Cetoddle
- Cetitan
- Shroodle
- Grafaiai
- Tandemaus
- Maushold
- Varoom
- Revavroom
- Squawkabilly
- Glimmet
- Glimmora
- Annihilape
- Tinkatink
- Tinkatuff
- Tinkaton
- Maschiff
- Mabosstiff
- Lechonk
- Oinkologne
- Paldean Wooper
- Clodsire
### Changes
- Updated model and textures of Spiritomb, Koffing, Weezing, Kadabra, Alakazam, Emolga, Oshawott, Doduo, Dodrio, Dratini, Dragonair, Dragonite, Sneasel, Weavile, Gyarados, Hitmonlee, Hitmonchan, Chesnaught, Spinda, Mamoswine, Steelix, Midreavus, Mismagius, Buneary, Lopunny, Golduck, Meowth, Persian, Fennekin, Braixen, Delphox, Snivy, Servine, Serperior, Ratatta, Raticate, Nidorina, Nidoqueen, NidoranM, Nidoking, Riolu, Lucario, Haunter, Mankey, Primeape, Mew, Mewtwo, Arcanine, Magnemite, Magneton, Magnezone, Exeggcute, Exeggutor, Elekid, Electabuzz, Electivire, Pichu, Pikachu, Raichu, Gengar, Wooper, Drowzee, Hypno, Aerodactyl, Spearow, Fearow, Lickitung, Pidgey, Pidgeotto, Pidgeot, Scyther, Scizor, Kleavor, Popplio, Brionne, Primarina, Torchic, Combusken, Blaziken, Aerodacyl, Scyther, Scizor, Kleavor, Lickitung, Lickilicky, Happiny, Chansey and Blissey.
- Updated animations for Steelix, Turtwig, Grotle, Torterra, Ponyta, Rapidash, Piplup, Prinplup, Empoleon, Drowzee, Hypno, Farfetch'd, Exeggcute, Exeggutor, Bidoof, Chimecho, Lickytung, Lickilicky, Popplio, Brionne, Luvdisc, Chimchar, Monferno, Infernape, Sobble, Drizzile, Inteleon, Greninja, Heatmor, Aerodactyl, Ditto, Lotad, Lombre, Ludicolo, Pumpkaboo, Gourgeist.
- Updated sprites for EV medicines, the rare candy, and the apricorn door item.
- Updated textures for apricorn doors and all the evolution stone ores.
- Updated Apricorn Leaves color.
- Wild Pokémon now heal if you are defeated by them or flee from them.
- Doubled the default time between ambient Pokémon cries (they have cries if you're using a resource pack to add them)
- Moved spawn attempts per tick to a config option (ticksBetweenSpawnAttempts)
- PCs can now be waterlogged
- Starter selection prompt now appears as a tutorial-esque toast instead of plain text
- Cobblemon items can now all have their own tooltips via resourcepacks, to add a tooltip simply add a lang entry like "item.cobblemon.{item_id}.tooltip", if you want to add multiple tooltip lines you can do so with "item.cobblemon.{item_id}.tooltip_1" and upwards.
- Updated texture of Weedle.
- Updated shiny texture of Dwebble and Crustle.
- Reorganised the advancements recipes folder
- Pokéedit command now supports IVs and EVs.
- Reorganised creative categories
- Pokémon can now wander into non-solid blocks such as foliage
- Pokéballs now despawn after 30 seconds
- Dive Balls will now have the same motion speed underwater as if they were thrown in the air.
- Hardcoded potion shoulder effects have been removed, you can now use any potion vanilla or otherwise with the parameters you'd like, for more information see the [Datapack & Resourcepack Creators](#datapack-&-resourcepack-creators) section.
- Clicking categories of the Stat sub-section or the party reorder button in the Summary screen will now produce a click sound.
- Updated PC Recipe.
- Improved Pokémon AI and movement.
- Friendship will slowly increase when Pokémon are shoulder-mounted.
- Master balls are now unable to be burned when dropped into fire/lava.
- Pokémon will appear red when hurt, like regular entities, except when they're fainting.
- Ponyta and Rapidash now have animated textures.
- Pokémon's air meter no longer depletes while battling underwater.
- Sleeping partially restores PP of Pokémon
- Item interaction evolutions and held item requirements now support NBT by creating an object JSON containing the key ``item`` for what used to be the existing condition support and a ``nbt`` key for the NBT format, this is the string [format](https://minecraft.fandom.com/wiki/NBT_format) expected in commands. Existing data does not need to be updated.
- Shoulder mounts now match the shoulder position a bit more accurately when sneaking.
- Poison Heal will now cause poisoned Pokémon to heal outside of battle.
- Updated Pokéball, PC, UI, evolution and Healing Machine sounds.
### Added cries to the following Pokémon:
- All starters and their evolutions
- Caterpie, Metapod, Butterfree
- Weedle, Kakuna, Beedrill
- Pidgey, Pidgeotto, Pidgeot
- Rattata, Raticate
- Spearow, Fearow
- Ekans, Arbok
- Pichu, Pikachu, Raichu, Alolan Raichu
- Cleffa, Clefairy, Clefable
- Mankey, Primeape, Annihilape
- Ponyta, Rapidash, Galarian Ponyta, Galarian Rapidash
- Farfetch'd, Galarian Farfetch'd, Sirfetch'd
- Onix, Steelix
- Tauros
- Ditto
- Eevee, Vaporeon, Jolteon, Flareon, Espeon, Umbreon, Leafeon, Glaceon, Sylveon
- Hoothoot, Noctowl
- Mareep, Flaaffy, Ampharos
- Aipom, Ambipom
- Wooper, Quagsire, Clodsire
- Snubbull, Granbull
- Miltank
- Poochyena, Mightyena
- Taillow, Swellow
- Ralts, Kirlia, Gardevoir, Gallade
- Shroomish, Breloom
- Nincada, Ninjask, Shedinja
- Buneary, Lopunny
- Chingling
- Chatot
- Riolu, Lucario
- Pidove, Tranquill, Unfezant
- Roggenrola, Boldore, Gigalith
- Venipede, Whirlipede, Scolipede
- Maractus
- Dwebble, Crustle
- Yamask, Cofagrigus
- Bunnelby, Diggersby
- Fletchling, Fletchinder, Talonflame
- Scatterbug, Spewpa, Vivillon
- Honedge, Doublade, Aegislash
- Skrelp, Dragalge
- Phantump, Trevenant
- Pumpkaboo, Gourgeist
- Bergmite, Avalugg
- Mudbray, Mudsdale
- Stufful, Bewear
- Mimikyu
- Rookidee, Corvisquire, Corviknight
- Nickit, Thievul
- Wooloo, Dubwool
- Yamper, Boltund
- Tandemaus
- Fidough, Dachsbun
- Squawkabilly
- Nacli, Naclstack, Garganacl
- Charcadet, Armarouge, Ceruledge
- Maschiff, Mabosstiff
- Shroodle, Grafaiai
- Flittle, Espathra
- Tinkatink, Tinkatuff, Tinkaton
- Varoom, Revavroom
- Glimmet, Glimmora
- Cetoddle, Cetitan
- Tatsugiri
### Fixes
- Fixed spawning moon phase dependent Pokémon only when the moon phase is wrong
- Fixed large Pokémon spawning partially inside walls where they suffocate.
- Fixed messages for entry hazards, screens, weather, damage, healing, Tailwind, Perish Song, Destiny Bond, Shed Skin, Uproar, Forewarn, Disguise, Arena Trap, Yawn, Curse, Clamp, Whirlpool, Liquid Ooze, Miracle Eye, Safeguard, Magic Bounce, Lock On, Focus Energy, Confusion, and more.
- Fixed Porygon not evolving with an Upgrade.
- Fixed super sized Pumpkaboo not having any moves.
- Fixed Infernape look animation.
- Fixed Garchomp t-posing while swimming.
- Fixed a bug that caused sleeping Pokémon to stay asleep.
- Fixed a bug that would freeze a battle when a Pokémon gets trapped due to an ability.
- Fixed the Poké Ball close animation canceling whenever colliding with a block.
- Fixed faint animations not working properly in add-ons.
- Fixed lighting and Pokémon label issues when a Pokémon item frame is nearby.
- Fixed Pokémon being able to spawn outside the world border as a tease.
- Fixed deepslate water stone ore items looking like deepslate fire stone ores.
- Fixed a bunch of client-side logging errors when Pokémon are shoulder mounted.
- Fixed a crash when wild Pokémon have to struggle under specific circumstances.
- Fixed uncolored pixels on Yanma's shiny texture.
- Fixed apricorn tree leaves looking gross on Fast graphics mode.
- Fixed hoes not breaking apricorn tree leaves any faster.
- Fixed Shiftry's PC model position.
- Fixed the /pc command not playing the opening sound.
- Fixed Shedinja not being able to recover naturally.
- Fixed different forms of Pokémon not being able to appear as different sizes.
- Fixed the Healing Machine soft locking you from using others when removed by non-players.
- Fixed animations being sped up when using the Replay Mod.
- Fixed particle animations not running when a Pokémon is off-screen.
- Fixed Pokémon variants and layers not rendering correctly when shouldered and playing on a dedicated server, existing shoulders affected will need to be retrieved and shouldered again.
- Shoulder effects will now stay applied through situations that remove potion effects such as drinking milk.
- Fixed Shedinja evolving to use the consumed PokéBall and removed the held item.
- Fixed non-existent species in spawn pool file causing random species to spawn.
- Fixed shearing Pokémon dropping 0-2 wool instead of 1-3.
- Fixed some alignment issues in the stat hexagon of the summary menu.
- Fixed capture calculations not applying ball bonuses entirely correctly.
- Fixed Shedinja healing above 1 HP.
- Fixed battles soft-locking when consecutive Pokémon faint on switch-in.
- Fixed timing and color of battle window messages.
- Fixed players being able to trade, battle and let out their Pokémon while in spectator mode.
- Fixed Galarian Yamask not being able to evolve and by proxy the ``damage_taken`` evolution requirement.
- Fixed Bisharp not being able to evolve and by proxy the ``defeat`` evolution requirement.
- Fixed White-Striped Basculin not being able to evolve and by proxy the ``recoil`` evolution requirement.
- Fixed Primeape, Qwilfish and Stantler not being able to evolve and by proxy the ``use_move`` evolution requirement.
- Fixed Bramblin, Pawmo, and Rellor not being able to evolve and by proxy the ``blocks_traveled`` evolution requirement.
- Fixed displayName property in spawn files not doing what it's meant to do.
- Fixed Pokémon not sleeping in the wild like we wanted them to.
### Developer
- Added SpawnEvent, ThrownPokeballHitEvent, PokemonSentEvent, PokemonRecalledEvent.
- Added BattleFledEvent, BattleStartedEvent, BattleFaintedEvent.
- Added persistent NBT property inside Pokémon to store quick and simple data.
- Species and FormData have had their evolutions, pre-evolution and labels properties exposed. It is still recommended to work using a Pokémon instance when possible.
- Added capture check to BattleVictoryEvent.
- The various hardcoded potion shoulder effects have been removed, make use of PotionBaseEffect.
- Added ContextManager for tracking causes and contexts of conditions created during a battle. See BattleContext for types of conditions that are tracked.
- Added MongoDB support for storing Pokémon and Player data. Must be enabled in config, requires MongoDB core and sync drivers (4.10.0+).
### Datapack & Resourcepack Creators
- All potion related shoulder effects have had their IDs changed, they now all share the same type being `potion_effect` and use the vanilla Potion data [parameters](https://minecraft.fandom.com/wiki/Potion#Item_data), take for example the default Pidgey asset:
- ```json
{
"type": "potion_effect",
"effect": "minecraft:slow_falling",
"amplifier": 0,
"ambient": true,
"showParticles": false,
"showIcon": false
}
```
- Renamed the ``walked_steps`` evolution requirement to ``blocks_traveled``.
## [1.3.1 (March 31st, 2023)](#1-3-1)
### Additions
- Added Slugma, Magcargo, Nosepass, and Probopass.
- Elgyem family now drops Chorus Fruit, Geodude family now drops Black Augurite.
- Added missing spawn files for Golett and Bergmite family.
- Apricorns can now be smelted into dyes.
- Added animations to Staryu line and Porygon line.
- Added faint animations to Klink line.
- Add lava surface spawn preset.
- Added an ``any`` evolution requirement allowing you to define ``possibilities`` of other evolution requirements, for example, this allows you to create an evolution that requires the Pokémon to be shiny or a female.
- Added the `/spawnpokemonfrompool [amount]` or `/forcespawn [amount]` command to spawn Pokémon(s) in the surrounding area using the natural spawn rates/pool of that area, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.spawnpokemon` if a permission mod is present. On a successful execution of the command, the amount of Pokémon spawned will be the output.
- Added the `/pokebox` and `/pokeboxall` commands to move Pokemon(s) to the PC from a Player's party, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.pokebox` if a permission mod is present. On a successful execution of the command the output will be the number of pokemon moved to the Player's PC.
- Added the `/pc` command which opens up the PC UI the same way interacting with the block would, this will be a cheat command in the Minecraft permission system or use the permission `cobblemon.command.pc` if a permission mod is present.
### Changes
- You can now click the portraits of other Pokémon in the starter selection screen to navigate directly to them.
- You can now click the right and left arrow keys to navigate PC boxes.
- Link Cables will now require Pokémon to hold any held item normally required for their evolution.
- After a battle, the last Pokémon used now becomes the selected one in your party.
- The `/teach` command can now only allow the Pokémon to be given moves in their learnset, this can be controlled with the permission `cobblemon.command.teach.bypass`, to account for that change the base command now requires the permission `cobblemon.command.teach.base`, this change is meant only for people using a mod capable of providing permissions such as [LuckPerms](https://luckperms.net/).
- Apricorns will no longer collide with their block form when picked, this should improve the experience in automatic farms.
- Increased spawn chances for many Pokémon requiring specific blocks to be nearby.
- Put Cryogonal in more snowy biomes.
- Ditto as well as the Eevee, Gible, and Riolu families have been made more common.
- Lowered spawn rate of Gyarados on the surface of water.
- Apricorn leaves can now be used in the [Composter](https://minecraft.fandom.com/wiki/Composter) block, these have the same chance to raise the compost pile the Minecraft leaves do.
- Updated Gengar's model and texture.
- Updated Swinub line model and animations.
- Tweaked portrait frames for the Pidgey line and for Walking Wake.
- Changed all buff shoulder effects to only give a level 1 buff instead of level 2.
- Made Weavile a little bigger.
- Changed the recipes for Mystic Water, Miracle Seed, and Charcoal Stick to utilise the evolution stones, as well as Never-Melt Ice having an alternate recipe using the Ice Stone.
- Replaced the `Failed to handle` battle messages to `Missing interpretation` to make it more clear that mechanics do work just still pending dedicated messages.
- Healing Machine and PC are now mine-able with pickaxes and Apricorn leaves are mine-able using hoes.
### Fixes
- Fixed killing a Dodrio killing your game. Dodrio will never look the same to us.
- Fixed non-Fire-type Pokémon being immune to lava.
- Fixed custom Pokémon not being usable in battle, properly. A last minute fix caused this to break again; what are these devs not paid for?
- Fixed being locked in an endless healing queue if you broke the healing machine during use.
- Fixed an issue with the experience calculation when the Exp. Share is held.
- Fixed Friendship-based attacks not using friendship values from your Pokémon.
- Fixed Link Cables consuming held items they shouldn't due to not validating the held item of a Pokémon.
- Fixed a crash when Aromatherapy cured the status of party members.
- Fixed moves learnt on evolution not being given when said evolution happens. If you were affected by this issue your existing Pokémon will now be able to relearn those moves.
- Fixed console spam when rendering Pokémon model items.
- Fixed battle messages for 50+ moves and abilities and items.
- Fixed the possible duplicate when capturing Pokémon (probably, this one's hard to reproduce to confirm it's fixed).
- Previously duplicated Pokémon are cleaned from PCs and parties on restart.
- Fixed an issue with some particle effects applying after a Pokémon has died or on top of the wrong Pokémon when using specific mods.
- Fixed Pokémon not looking at each other in battle.
- Fixed Experience Candy and Experience Share attempting to bring Pokémon above level cap causing crashes.
- Fixed level 100 Pokémon having experience go over the cap total amount they should have.
- Fixed `/pokemonspawnat` having the argument positions reverted making it impossible for Brigadier to understand when to suggest coordinates. It is now the intended `/spawnpokemonat <pos> <properties>`.
- Fixed performance issues with shouldered Pokémon in certain systems.
- Fixed learnset issues for Pokémon whose only modern debut was LGPE/BDSP/LA.
- Fixed shiny Zubat, Grimer, Omanyte, Elgyem, Delphox and Aegislash displaying their normal texture.
- Fixed sleeping in beds allowing fainted Pokémon to receive experience after a battle ends somehow.
- Fixed an issue where a Pokémon will claim to have learnt a new move they already have in their moveset when learnt at an earlier level in their previous evolution. I realize that's confusing.
- Fixed Dispensers not being able to shear Wooloo. This will also extend to other mods that check if an entity is valid to shear.
- Fixed the currently held item of your Pokémon not dropping to the ground when removing it if your inventory was full.
- Fixed creative mode allowing you to make your Pokémon hold more than 1 of the same item.
- Fixed a Pokémon duplication glitch when teleporting between worlds.
- Fixed dedicated servers being able to reload Cobblemon data with the vanilla `/reload` command causing unintended behavior for clients.
- Fixed underground Pokémon spawning above ground.
- Fixed Pokémon portrait not reverting back to the Pokémon after a failed capture during battle.
- Fixed edge texture artifacts on pane elements for Tentacool and Tentacruel models.
- Fixed crash caused by Pokémon pathing
- Fixed Pokémon not returning to their balls when being healed in a healing machine
- Fixed all Gen IX Pokémon as well as forms added in PLA and Wyrdeer, Kleavor, Ursaluna, Basculegion, Sneasler, Overqwil, and Enamorus having 0 exp yields.
- Fixed Irons Leaves having bluetooth back legs. If you saw it, you know what I mean.
- Fixed Golurk not having shoulder plates on its shoulders.
- Fixed some water Pokémon walking onto land from the water even though they are fish.
- Fixed Porygon2 and PorygonZ being too small.
- Fixed Snivy line head look animation.
- Fixed Staryu line not being able to swim.
- Fixed an incompatibility with [Thorium](https://modrinth.com/mod/thorium) patch for [MC-84873](https://bugs.mojang.com/browse/MC-84873).
- Fixed Pidgeotto wings when walking.
- Fixed Delphox walk animation.
- Fixed Froakie line sleep animations in battle.
- Fixed Pokémon missing the non-level up moves they could relearn when rejoining a world until a new move was added to their relearn list.
- Fixed instantly fleeing from Pokémon set to be unfleeable.
- Fixed Pumpkaboo line forms not working. (Currently sizes aren't visual but check base stats to see which size you have.)
- Fixed a bug that caused already interpreted messages for moves to be mistaken as uninterpreted.
- Fixed a Pokémon spawner bug that caused Pokémon to not spawn due to dropped item entities.
- Fixed a bug that causes Pokémon model items to be invisible.
### Developer
- Add events that are fired just before and after a Pokémon is released (ReleasePokemonEvent.Pre and .Post)
### Localization
- Added complete translations for Japanese, Thai, and Canadian French.
- Added partial translations for Russian, Ukrainian, Mexican Spanish, and Korean.
- Updated every existing language's translation.
- All the translators that contributed are amazing.
## [1.3.0 - The Foundation Update (March 17th, 2023)](#1-3-0)
### Dependencies
- Upgraded Fabric API dependence to 0.75.1+1.19.2
- Upgraded Architectury API dependence to 6.5.69
- Cobblemon Forge now depends on Kotlin for Forge.
### Additions
- Added new models and animations for Poké Balls and reworked their mechanics to feel much smoother instead of being pure frustration.
- Added party scrolling via holding R and using the mouse wheel so you don't need to take your hand off your mouse.
- Added a cap of Pokémon spawns in an area because waiting a while made things insane. This is controlled by a new `pokemonPerChunk` config option.
- Added models and animations for heaps of Pokémon (101): Riolu, Lucario, Chimchar, Monferno, Infernape, Turtwig, Grotle, Torterra, Popplio, Brionne, Primarina, Treeko, Grovyle, Sceptile, Snivy, Servine, Serperior, Tepig, Pignite, Emboar, Oshawott, Dewott, Samurott, Grookey, Thwackey, Rillaboom, Scorbunny, Raboot, Cinderace, Sobble, Drizzile, Inteleon, Fennekin, Braixen, Delphox, Froakie, Frogadier, Greninja, Chespin, Quilladin, Chesnaught, Miltank, Torkoal, Kricketot, Kricketune, Heatmor, Durant, Wooloo, Dubwool, Pumpkaboo, Gourgeist, Sigilyph, Cryogonal, Whismur, Loudred, Exploud, Misdreavus, Mismagius, Tatsugiri, Eiscue, Luvdisc, Stantler, Wyrdeer, Gible, Gabite, Garchomp, Sneasel, Weavile, Elgyem, Beheeyem, Baltoy, Claydol, Nacli, Naclstack, Alcremie, Milcery, Dhelmise, Morelull, Shiinotic, Xerneas, Klink, Klang, Klinklang, Joltik, Galvantula, Honedge, Duoblade, Aegislash, Spiritomb, Mawile, Carvanha, Sharpedo, Seedot, Nuzleaf, Shiftry, Lotad, Lombre, Ludicolo, Pineco, Forretress, and Spinda.
- Added generation 3, 4, 5, 6, 7, and 8 Starter Pokémon to the starter select screen.
- Added particle effect support for model animations
- Added particle effect and animation for Gastly.
- Added sleep and faint animations to many Pokémon.
- Added item holding for Pokémon. Any Minecraft item can be given to a Pokémon by holding shift and right-clicking them. Traditional Pokémon held items will have their expected battle effects.
- Added heaps of held items with crafting recipes: Assault Vest, Big Root, Black Belt, Black Sludge, Charcoal, Choice Band, Choice Scarf, Choice Specs, Dragon Fang, Exp. Share, Focus Band, Hard Stone, Heavy-Duty Boots, Leftovers, Light Clay, Lucky Egg, Magnet, Miracle Seed, Muscle Band, Mystic Water, Never-Melt Ice, Poison Barb, Quick Claw, Rocky Helmet, Safety Goggles, Sharp Beak, Silk Scarf, Silver Powder, Soft Sand, Spell Tag, Twisted Spoon, and Wise Glasses.
- Added heaps of evolution items with crafting recipes: Milcery's sweets items, Chipped Pot, Cracked Pot, Deep Sea Scale, Deep Sea Tooth, Dragon Scale, Galarica Cuff, Galarica Wreath, Peat Block, Prism Scale, Razor Claw, Razor Fang, Reaper Cloth, Sachet, Sweet Apple, Tart Apple, and Whipped Dream.
- Existing evolution items all now either have a crafting recipe or drop from Pokémon.
- Added the Item [tags](https://minecraft.fandom.com/wiki/Tag) `cobblemon:held/experience_share` and `cobblemon:held/lucky_egg` allowing you to mark any items you desire to have the effects implied in the tag name.
- Added an interface that appears when interacting with your Pokémon while sneaking. The interface allows for interactive options such as shouldering and exchanging held items.
- Added blinking animations to many Pokémon.
- Added animated texture support.
- Added translucent option for aspect layers.
- Added glowing textures to many Pokémon and it looks amazing.
- Added the Saturation shoulder effect.
- Added the Haste shoulder effect, initially for Joltik.
- Added the Water Breathing shoulder effect, initially for Wooper.
- Added the Speed shoulder effect, initially for Pichu and Pikachu.
- [Dispensers](https://minecraft.fandom.com/wiki/Dispenser) can now use shears to automatically harvest fully grown Apricorns.
- Added milking to Miltank.
- Added shearing to Wooloo and Dubwool.
- Added data for generation 9 Pokémon species, moves, and ability data. They're all still Substitute models, but their moves and abilities work.
- Added support for custom Pokémon to implement 'quirks' such as blinks.
- Added sound effect for harvesting Apricorns.
- Added icon to summary and PC interfaces to indicated if a Pokémon is shiny.
- Added the ``/spawnpokemonat <pos> <properties>`` command, the ``pos`` argument uses the same syntax as the Minecraft [summon](https://minecraft.fandom.com/wiki/Commands/summon) command.
- Added the `/giveallpokemon` command which is definitely safe and not insane.
- Added compatibility with Carry On by preventing the mod being able to interact with Cobblemon entities, the mod caused too many gameplay detrimental features to stay enabled.
- Added healing to your party when you sleep in a bed.
- Added the 'ability' Pokémon Property so commands can specify the ability.
- Added block tag support to the 'neededBaseBlocks' and 'neededNearbyBlocks' spawn condition.
- Added a config option for disallowing players from damaging Pokémon by hand.
- Apricorn seeds can now be used with the [Composter](https://minecraft.fandom.com/wiki/Composter), these have the layer increase chance of 65% like Apricorns and various Minecraft crops.
- Added support for Pokémon species data appending making it so datapack developers no longer need to overwrite files.
- Added an implementation of every [catch rate](https://bulbapedia.bulbagarden.net/wiki/Catch_rate) from generation 1 to 9, these can be used by changing the ``captureCalculator`` config value:
- ``generation_1`` Sets the calculator to the generation 1 implementation.
- ``generation_2`` Sets the calculator to the generation 2 implementation.
- ``generation_2_fixed`` Sets the calculator to the generation 2 implementation with the status multiplier bug fixed.
- ``generation_3_4`` Sets the calculator to the generation 3 and 4 implementation.
- ``generation_5`` Sets the calculator to the generation 5 implementation.
- ``generation_6`` Sets the calculator to the generation 6 implementation.
- ``generation_7`` Sets the calculator to the generation 7 implementation.
- ``generation_8`` Sets the calculator to the generation 8 implementation.
- ``generation_9`` Sets the calculator to the generation 9 implementation.
- ``cobblemon`` Sets the calculator to the custom Cobblemon implementation. This is the default value.
- ``debug`` Sets the calculator to the debug/cheat implementation, every attempt will be a successful critical capture.
### Changes
- Pokémon now save to the world by default, meaning the same Pokémon will remain in the world and not disappear after you log out and log back in. They still despawn over time though.
- Significantly sped up the Poké Ball shake animation so it takes less time to try to catch Pokémon.
- Update the PC and Healing Machine models and bounding boxes.
- The Healing Machine and PC now emit light when fully charged or when turned on respectively.
- The PC block screen will now turn on when being used.
- The Healing Machine will now visually display its charge level using 6 stages.
- The Healing Machine will now emit a redstone signal with the strength of 1 for every 10% charge it has when attached to a [Redstone Comparator](https://minecraft.fandom.com/wiki/Redstone_Comparator).
- Made it so that particles are not shown whenever you have a shoulder Pokémon that gives potion effects.
- Changed hitbox and size definitions for Decidueye, Blastoise, and Magmortar
- Apricorns can now be harvested with Axes, the speed will scale with enchantments and tool material, only dropping the Apricorn if fully grown, these will still destroy the Apricorn so the manual harvest still is recommended unless you're just keen on destroying trees.
- Apricorns are now a part of the vanilla tag ``minecraft:blocks/mineable/axe``.
- Apricorns are now compatible with any mod that breaks a whole tree at once.
- Apricorns no longer have a config value for the seed drop chance these are now a part of their loot table which can be found in ``cobblemon/loot_tables/blocks/<color>_apricorn.json``.
- Advancements were redone to be slightly more interesting, with improved names, descriptions, and sorting.
- Updated models and textures for Tentacool line, Gengar, Slowpoke line, Tyrogue line, Doduo line, Dratini, Dragonair, Quagsire, and Piplup line. There were probably others, the team lost track.
- Improved sending out Pokémon at the start of battle so that they are positioned in a less annoying way.
- Name Tags will no longer be used on Pokémon and Poke Ball entities, this prevents the item from being wasted.
- Lowered spawn rate of Tauros.
- Sableye now spawns near gem ores as well as amethyst.
- Added evolution stones and items to item tags
### Fixes
- Fixed catch rates being entirely too difficult.
- Fixed various strange battle issues such as Flying types being vulnerable to Ground type moves and status effects hitting despite vulnerabilities.
- Fixed shiny Gyarados not using the red Gyarados texture.
- Improved the framing of all in-game Pokémon in the party and PC GUIs so they aren't halfway out of the screen or something else crazy.
- Fixed incompatibility with Kotlin for Forge (by depending on Kotlin for Forge ourselves)
- Fixed Gengar, Goodra, and many other Pokémon showing the types of an alternate form despite those not being modelled yet.
- Fixed datapack Pokémon not being able to battle.
- Fixed Pokémon always being created with a moveset as if they're level 1 instead of their current level.
- Fixed an issue of Pokémon not rendering in GUIs on some Mac displays.
- Fixed a soft-duplicate that could occur when a party Pokémon is pushed through a Nether Portal or left in a boat.
- Fixed Pokémon that faint from poison appearing to be on full health and suckering you into false hope.
- Fixed incorrect spawns of Tentacool, Tentacruel, Dragonite, Politoed, Tangrowth, Lickilicky, Electivire, and Magmortar.
- Fixed crashes involving opening the Pokémon summary GUI with an empty party.
- Fixed lower brightness settings causing Pokémon to appear much too dark in menus such as the party and PC.
- Fixed Showdown sometimes failing to start, causing crashes.
- Fixed Showdown initialization happening several times when you login, more depending on how many times you have relogged this session.
- Fixed Showdown failing to update on first attempt. We totally weren't accidentally deleting our target directory or anything, nope.
- Fixed HP recovery related battle actions not animating for the client nor updating the in-game Pokémon HP.
- Fixed moves that force a switch such as Teleport and U-Turn soft locking battles.
- Fixed missing battle text for Bide, Speed Boost, Belly Drum, Anger Point, and Haze.
- Fixed battle messages for many field effects starting, ending, and actions caused by them such as blocking certain moves.
- Improved battle messages for effects that prevent a move from being executed such as a Taunt, requiring a recharge, flinched, etc.
- Fixed move names not being translated in battle messages.
- Fixed stat change messages for boosts over 3 stages.
- Fixed experience calculation not being completely accurate.
- Fixed positioning of Poké Balls when rendered in Healing Machines.
- Fixed a desync issue on servers where all Pokémon seemed like they were special forms when they weren't.
- Fixed an incompatibility with [Exordium](https://www.curseforge.com/minecraft/mc-mods/exordium).
- Fixed datapack Pokémon language key generation. A Pokémon under the namespace ``example`` named ``Pogemon`` will now correctly look for the lang key ``example.species.pogemon.name``.
- Fixed client not receiving messages for the different "stages" for the move Bide.
- Fixed the Medium Slow and Medium Fast experience group IDs, they're now ```medium_slow``` and ``medium_fast``. Any custom datapack Pokémon will require an update.
- Fixed Pokémon friendship being capped to the maximum level config value instead of the friendship one when loading Pokémon data.
- Fixed Poké Balls taking forever to capture Pokémon if you are underwater or up in the air where it takes a long time to hit the ground.
- Fixed Pokémon being unable to spawn on blocks such as snow layers.
- Fixed Pokémon spawning inside of trees.
- Fixed Pokémon experience not loading after a restart and instead going back to the minimal amount for the current level.
- Fixed being able to use ``/healpokemon`` in battle.
- Fixed being able to select fainted party members in the switch menu causing the battle to lock.
- Fixed ``/spawnpokemon`` command not supporting any command source other than players.
- Fixed issues with Charizard's sleep pose.
- Fixed players being able to use multiple healer machines at once.
- Fixed Pokémon layers not rendering when a Pokémon is on your shoulder.
- Fixed Caterpie and Weedle not moving or looking at players. That was meant to be Metapod and Kakuna; how embarrassing.
- Fixed Pokémon not carrying over the correct equivalent original ability when evolving from stages that only had one ability.
- Fixed Deerling and Sawsbuck not spawning with the correct season.
- Fixed issue of not being able to drag the scroll bar in summary and battle interfaces.
- Fixed optional aspects not saving and loading properly.
- Fixed layering logic so multiple texture layers can exist on a Pokémon (probably).
- Fixed not all Poké Balls being associated with the `cobblemon:pokeballs` item tag.
- Fixed the `/pokemoneditother` command not working.
- Fixed ambient sound file path for Porygon2.
- Fixed forms not being able to unset the secondary type of a Pokémon in the stat JSON.
- Fixed moves that haven't carried over from generation 8 onwards having the description they did in the generation 8 games instead of their last valid one.
- Fixed shoulder mounted pokemon not returning to party on healer use and on evolution
### Developer
- Reworked CatchRateModifier, as such, existing implementations need to be updated.
- Fixed minimumDistanceBetweenEntities option being half of what it's set as.
- Fixed the contents of CobblemonEvents, CobblemonBlocks etc having getters instead of just being public static properties.
- Added ApricornHarvestEvent.
- Added a new item for representing Pokémon within native UI menus or item frames which display as the Pokémon's model. It's called a PokemonItem, with static functions to build one.
### Localization
- Added complete translations for French, German, Simplified Mandarin, Brazilian Portuguese, and Pirate English.
- Added partial translations for Traditional Mandarin, Italian, and Spanish. We'd love more help with this!
- Thank you to all of the fantastic volunteer translators for taking the time to help with this!
## [1.2.0 - The Customization Update (January 1st, 2023)](#1-2-0)
### Additions
- Added models for Natu and Xatu, Murkrow and Honchkrow, Wailmer and Wailord.
- Added new PC interface and it is beautiful.
- Reworked the battle system so that battles load faster, cause fewer bugs, and can run on shared server hosts. This is a very big change that also reduced the size of the mod by 50mb!
- Added full resource pack / data pack customization of models, textures, animations, spawning, and spawn file presets to make custom Pokémon species and variations very easy to create. You can find the guide for creating custom Pokémon on [our website](https://cobblemon.com/guides/custompokemon.html)!
- Added water surface spawning for Pokémon like Lapras.
- Added emissive texture support to Pokémon render layers.
- Added compatibility for Mod Menu ([CurseForge](https://www.curseforge.com/minecraft/mc-mods/modmenu), [Modrinth](https://modrinth.com/mod/modmenu)).
- Added blank ambient Pokémon cries so cries can be added via resource packs.
- Added new sounds for GUIs and item uses.
- Added `nature` and `pokeball` options to commands such as `/spawnpokemon` and `/givepokemon`.
### Changes
- Reinforced party and PC saving to make data corruption from crashes less bad.
- Added a config option for whether the starter config will be exported, making it more maintainable as we add starter Pokémon.
- Battles now start with the options menu open for convenience.
- Doubled the default charge rate of healers. You'd need to reset your config under `./config/cobblemon/main.json` to see this change!
- Changed the default Apricorn seed chance config value from 6% to 10%.
- The mod now correctly reports our dependency on Architectury API so people don't get super confused when things don't work.
- Pokémon now look at their opponents during battle.
- Updated Sableye's animations to be super freaky.
- Changed the healer advancements to make the healing machine's mechanics more obvious.
### Fixes
- Fixed an incompatibility with [Porting Lib](https://github.com/Fabricators-of-Create/Porting-Lib) used by Fabric ports of mods such as Create or Twilight Forest.
- Fixed HP and max HP values in the battle GUI not being correct.
- Fixed some animations on snake-type Pokémon being super slow.
- Fixed a typo in the English name for Calcium. Calcuim.
- Fixed Pokémon gradually becoming rarer around you if you move long distances.
- Fixed a shoulder mount crash on Fabric.
- Fixed a rare issue where chunks would take a really long time to generate.
- Fixed a singleplayer bug where battles wouldn't work after leaving then rejoining a world.
- Fixed stat calculations for everything except HP. HP was fine though :).
- Fixed a randomized Pokémon spawning in mountains that corrupted the data of whatever party or PC it got into. Yikes.
- Fixed a rare crash involving literally random number generation. A random crash involving random numbers.
- Fixed all regular Mewtwo having the stats and types of Mega Mewtwo X - same deal with many other Pokémon.
- Fixed the framing of many Pokémon in GUIs.
- Fixed texture glitches with Rattata and Nidoqueen (again!).
- Fixed dropped item forms of all Pokéballs and the Healing Machine, and slightly adjusted all other display settings
- Fixed issues with forms not showing the correct evolution in the evolution menu.
- Fixed some alternate forms not having the alternate stats and types.
- Fixed moves that only work in double battles not being selectable at all (such as Helping Hand and Aromatic Mist).
- Fixed abilities not remaining legal in some forms.
- Fixed Poké Ball capture effects not triggering after a successful capture, such as the Heal Ball's healing effect.
- Fixed multiple-hit moves sending gibberish into the battle chat.
- Fixed Pyukumuku not being appropriately scaled.
- Fixed shiny and other variations of Pokémon not showing in the battle GUI.
- Fixed Eevee being poorly positioned and un-animated on shoulders.
- Fixed a Pokémon's hitbox not updating when it evolves while sent out.
- Fixed a Pokémon's PP going from zero to above the maximum when entering another battle.
## [1.1.1 (November 27th, 2022)](#1-1-1)
### Fixes
- Fixed a critical issue with servers where Pokémon data didn't properly synchronize and so you couldn't see any.
## 1.1.0 - The Swim and Sleep Update
## [1.1.0 - The Swim and Sleep Update (November 27th, 2022)](#1-1-0)
#### "Ideally not at the same time."
### Additions
- Added a new GUI for viewing party information, rearranging moves, and evolving Pokémon. It looks too good.
- Starter Pokémon will sleep on top of you if sent out when you get on a bed.
@@ -62,6 +796,7 @@
- Statuses like sleep and frozen no longer last forever if it was carried over from a previous battle.
### Localization
- Added species, ability, and move translations for ko_ko, jp_jp, fr_fr, es_es, it_it, and zh_cn.
## 1.0.0 (2022-11-12)
- Initial release.
- 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.
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright (C) 2022 Cobblemon Contributors
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
+9 -8
View File
@@ -4,14 +4,15 @@ An open-source Pokémon mod for Minecraft Java Edition, written in Kotlin for Fa
## Getting started
To set up the development workspace, first clone the project and open the build.gradle with Intellij. There will be
errors until you go to File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle and change the Gradle JVM
to 17. After changing this, click the icon for reloading the project. This will automatically
put together all the dependencies and project setup.
To set up the development workspace, first clone the project and open the build.gradle with Intellij. Make sure that you clone it to a folder that has no spaces in its path (for example, C:/Development/Cobblemon Stuff/cobblemon/ is bad) since Architectury Plugin seems to dislike it.
Run `./gradlew genEclipseRuns`, and then in Intellij go to your run configurations, and change whichever you plan on
running to use a Java 17 JRE. runClient is as if you booted up in singleplayer, runServer is a server without a client,
and runData is for summoning the Eldritch gods or something, idk.
After it takes ages to load, you should hopefully have runnable configurations of the project in the top right, such as Minecraft Client (:fabric). If not, try running `./gradlew genEclipseRuns`.
Troubleshooting:
- Try running `./gradlew --refresh-dependencies`
- Try File -> Invalidate Caches.
- Try deleting the `.idea` folder in the project root (make sure IntelliJ is closed when you try it).
- Try completely reclone the thing lmao.
## Contributing
@@ -19,4 +20,4 @@ If you're interested in contributing to the project, you can simply fork the rep
[here](https://gitlab.com/cable-mc/cobblemon/-/issues?scope=all&state=opened&label_name[]=accepted&assignee_id=None).
If you want a more involved role in the project, involving branches on the main repository instead of forking and involvement
in design discussions, add and message Hiroku#4373 on our Discord here: https://discord.gg/AsNpJSST7G.
in design discussions, you can either apply in the `application-box` forum of our Discord or add and message Hiroku (`hiroku_dev`) on our Discord here: https://discord.gg/cobblemon.
@@ -1,8 +1,19 @@
/*
*
* * Copyright (C) 2023 Cobblemon Contributors
* *
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val accessWidenerFile = "src/main/resources/cobblemon-common.accesswidener"
plugins {
java
`java-library`
id("org.cadixdev.licenser")
id("dev.architectury.loom")
@@ -12,6 +23,9 @@ plugins {
repositories {
mavenCentral()
//JEI
maven("https://maven.blamejared.com/")
maven("https://maven.tterrag.com/")
}
license {
@@ -38,8 +52,7 @@ loom {
dependencies {
minecraft("net.minecraft:minecraft:${rootProject.property("mc_version")}")
mappings("net.fabricmc:yarn:${rootProject.property("yarn_version")}")
mappings("net.fabricmc:yarn:${rootProject.property("yarn_version")}:v2")
}
tasks {
@@ -55,4 +68,4 @@ tasks {
withType<Jar> {
from(rootProject.file("LICENSE"))
}
}
}
@@ -19,13 +19,14 @@ tasks {
archiveClassifier.set("dev-shadow")
archiveBaseName.set("Cobblemon-${project.name}")
configurations = listOf(bundle)
mergeServiceFiles()
}
remapJar {
dependsOn(shadowJar)
inputFile.set(shadowJar.flatMap { it.archiveFile })
archiveBaseName.set("Cobblemon-${project.name}")
archiveClassifier.set("${rootProject.version}-remap")
archiveVersion.set("${rootProject.version}")
}
}
@@ -0,0 +1,37 @@
plugins {
java
`java-library`
id("maven-publish")
id("dev.architectury.loom")
}
java {
withSourcesJar()
withJavadocJar()
}
publishing {
repositories {
maven("https://maven.impactdev.net/repository/development/") {
name = "ImpactDev-Public"
credentials {
username = System.getenv("COBBLEMON_MAVEN_USER")
password = System.getenv("COBBLEMON_MAVEN_PASSWORD")
}
}
}
publications {
create<MavenPublication>(project.name) {
artifact(tasks.remapJar)
artifact(tasks.remapSourcesJar)
@Suppress("UnstableApiUsage")
loom.disableDeprecatedPomGeneration(this)
groupId = "com.cobblemon"
artifactId = project.findProperty("maven.artifactId")?.toString() ?: project.name
version = rootProject.version.toString()
}
}
}
-1
View File
@@ -1,4 +1,3 @@
plugins {
base
id("cobblemon.root-conventions")
+29 -33
View File
@@ -1,14 +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/.
*
*/
plugins {
id("cobblemon.base-conventions")
id("maven-publish")
id("cobblemon.publish-conventions")
}
architectury {
common()
common("forge", "fabric")
}
repositories {
maven(url = "https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/")
maven(url = "${rootProject.projectDir}/deps")
mavenLocal()
}
dependencies {
@@ -16,47 +27,32 @@ dependencies {
implementation(libs.reflect)
modImplementation(libs.fabricLoader)
modApi(libs.architectury)
//Flywheel has no common dep so just pick one and don't use any platform specific code in common
modCompileOnly(libs.flywheelFabric)
modApi(libs.molang)
modApi(libs.mclib)
compileOnlyApi(libs.jeiApi)
// For Showdown
modCompileOnly(libs.javet) // Linux or Windows
modCompileOnly(libs.javetMac) // Mac OS (x86_64 Only)
modCompileOnly(libs.graal)
//shadowCommon group: 'commons-io', name: 'commons-io', version: '2.6'
// For datastore
modCompileOnly(libs.mongoDriverCore)
modCompileOnly(libs.mongoDriverSync)
testRuntimeOnly(libs.junitEngine)
testImplementation(libs.junitApi)
testImplementation(libs.junitParams)
testImplementation(libs.mockito)
testImplementation(libs.mockk)
compileOnly("net.luckperms:api:${rootProject.property("luckperms_version")}")
// For Showdown
// modCompileOnly 'com.caoccao.javet:javet:1.0.6' // Linux or Windows
// modCompileOnly 'com.caoccao.javet:javet-macos:1.0.6' // Mac OS (x86_64 Only)
// modCompileOnly group: 'commons-io', name: 'commons-io', version: '2.6'
testImplementation(libs.classgraph)
}
publishing {
repositories {
maven("https://maven.impactdev.net/repository/development/") {
name = "ImpactDev-Public"
credentials {
username = System.getenv("NEXUS_USER")
password = System.getenv("NEXUS_PW")
}
}
tasks.withType<Test> {
useJUnitPlatform()
testLogging {
setEvents(listOf("failed"))
setExceptionFormat("full")
}
publications {
create<MavenPublication>("mod") {
from(components["java"])
groupId = "com.cobblemon"
artifactId = "mod"
version = rootProject.version.toString()
}
}
}
}
+1
View File
@@ -0,0 +1 @@
maven.artifactId = mod
View File
@@ -0,0 +1,15 @@
/*
* 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.access;
import net.minecraft.sound.SoundCategory;
public interface SoundManagerDuck {
void toggleCategories(SoundCategory... categories);
}
@@ -0,0 +1,16 @@
/*
* 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.bridges;
import net.minecraft.structure.processor.StructureProcessor;
public interface StructureProcessorListBridge {
void append(StructureProcessor processor);
void clear();
}
@@ -0,0 +1,73 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pose;
import com.cobblemon.mod.common.client.render.models.blockbench.PoseableEntityModel;
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
/**
* A bone represents a particular joint of a model. Bones are capable of containing child bones identifiable
* by a String ideally representing the name of a particular bone.
*
* This interface is meant to allow projects and sidemods to implement their own rendering logic in reference
* to the bones.
*
* @author Waterpicker
* @since 1.4.0
*/
public interface Bone {
/**
* A map of identifiable names to child bones
*
* @since 1.4.0
*/
Map<String, Bone> getChildren();
/**
* Renders a particular bone in relation to a particular entity.
*
* @param context The render context this bone is being drawn for.
* @param stack The current [MatrixStack] for the renderer
* @param buffer The vertex consumer deployed by the renderer
* @param packedLight The light level to be applied to the bone
* @param packedOverlay The overlay value to be applied to the bone
* @param r A value representing the amount of red coloring that should be applied on the RGB scale
* @param g A value representing the amount of green coloring that should be applied on the RGB scale
* @param b A value representing the amount of blue coloring that should be applied on the RGB scale
* @param a The alpha value to apply to the model based on the RGB scale
*
* @since 1.4.0
*/
void render(
RenderContext context,
MatrixStack stack,
VertexConsumer buffer,
int packedLight,
int packedOverlay,
float r,
float g,
float b,
float a
);
/**
* Allows for direct transformation of a bone via a given matrix stack
*
* @since 1.4.0
*/
void transform(MatrixStack matrixStack);
}
@@ -1,40 +0,0 @@
/*
* Copyright (C) 2022 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.command.argument.*;
import com.mojang.brigadier.arguments.ArgumentType;
import net.minecraft.command.argument.ArgumentTypes;
import net.minecraft.command.argument.serialize.ArgumentSerializer;
import net.minecraft.command.argument.serialize.ConstantArgumentSerializer;
import net.minecraft.util.registry.Registry;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ArgumentTypes.class)
public class ArgumentTypesMixin {
@Shadow
private static <A extends ArgumentType<?>, T extends ArgumentSerializer.ArgumentTypeProperties<A>> ArgumentSerializer<A, T> register(Registry<ArgumentSerializer<?, ?>> registry, String string, Class<? extends A> clazz, ArgumentSerializer<A, T> argumentSerializer) {
throw new AssertionError("Should not be executed.");
}
@Inject(method = "register(Lnet/minecraft/util/registry/Registry;)Lnet/minecraft/command/argument/serialize/ArgumentSerializer;", at = @At("RETURN"))
private static void register(Registry<ArgumentSerializer<?, ?>> registry, CallbackInfoReturnable<ArgumentSerializer<?, ?>> ci) {
register(registry, "cobblemon:pokemon", PokemonArgumentType.class, ConstantArgumentSerializer.of(PokemonArgumentType.Companion::pokemon));
register(registry, "cobblemon:pokemonproperties", PokemonPropertiesArgumentType.class, ConstantArgumentSerializer.of(PokemonPropertiesArgumentType.Companion::properties));
register(registry, "cobblemon:spawnbucket", SpawnBucketArgumentType.class, ConstantArgumentSerializer.of(SpawnBucketArgumentType.Companion::spawnBucket));
register(registry, "cobblemon:move", MoveArgumentType.class, ConstantArgumentSerializer.of(MoveArgumentType.Companion::move));
register(registry, "cobblemon:partyslot", PartySlotArgumentType.class, ConstantArgumentSerializer.of(PartySlotArgumentType.Companion::partySlot));
}
}
@@ -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.mixin;
import com.cobblemon.mod.common.client.render.item.CobblemonBuiltinItemRenderer;
import com.cobblemon.mod.common.client.render.item.CobblemonBuiltinItemRendererRegistry;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.BuiltinModelItemRenderer;
import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.render.model.json.ModelTransformationMode;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
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(BuiltinModelItemRenderer.class)
public class BuiltinModelItemRendererMixin {
@Inject(method = "render", at = @At("HEAD"), cancellable = true)
private void cobblemon$useDynamicItemRenderer(ItemStack stack, ModelTransformationMode mode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, CallbackInfo ci) {
CobblemonBuiltinItemRenderer renderer = CobblemonBuiltinItemRendererRegistry.INSTANCE.rendererOf(stack.getItem());
if (renderer != null) {
renderer.render(stack, mode, matrices, vertexConsumers, light, overlay);
ci.cancel();
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -0,0 +1,38 @@
/*
* 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.block.PreEmptsExplosion;
import net.minecraft.block.BlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.explosion.Explosion;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = Explosion.class)
public class ExplosionMixin {
@Redirect(
method = "affectWorld",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;",
ordinal = 0
)
)
public BlockState cobblemon$whenExploded(World world, BlockPos pos) {
BlockState blockState = world.getBlockState(pos);
if(blockState.getBlock() instanceof PreEmptsExplosion preExplosionBlock) {
preExplosionBlock.whenExploded(world, blockState, pos);
}
return blockState;
}
}
@@ -0,0 +1,47 @@
/*
* 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.CobblemonBlocks;
import com.cobblemon.mod.common.block.PastureBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.FenceBlock;
import net.minecraft.block.HorizontalFacingBlock;
import net.minecraft.util.math.Direction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = FenceBlock.class)
public abstract class FenceBlockMixin {
// This could be done with a modify variable but it just doesn't seem to want to work, very crude unfinished explanation I had on Fabric discord was
// "boolean is a primitive, it isnt passed by reference but by value and you have your own object references anyway so assigning a new object to non-primitive references (variables) wont modify it after your mixin returns
//(you cant modify a random argument that mixin passes you that way, target the boolean not the FenceBlock)"
// However the issue is the only way to get all the params which we need is by passing in the entire method reference which enforces the return type.
@Redirect(method = "getStateForNeighborUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/FenceBlock;canConnect(Lnet/minecraft/block/BlockState;ZLnet/minecraft/util/math/Direction;)Z"))
private boolean cobblemon$getStateForNeighborUpdate(FenceBlock instance, BlockState state, boolean neighborIsFullSquare, Direction dir) {
return instance.canConnect(state, neighborIsFullSquare, dir) || this.cobblemon$canConnect(state, dir);
}
@Redirect(method = "getPlacementState", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/FenceBlock;canConnect(Lnet/minecraft/block/BlockState;ZLnet/minecraft/util/math/Direction;)Z"))
private boolean cobblemon$getPlacementState(FenceBlock instance, BlockState state, boolean neighborIsFullSquare, Direction dir) {
return instance.canConnect(state, neighborIsFullSquare, dir) || this.cobblemon$canConnect(state, dir);
}
private boolean cobblemon$canConnect(BlockState state, Direction dir) {
if (state.isOf(CobblemonBlocks.PASTURE) && state.get(PastureBlock.Companion.getPART()) == PastureBlock.PasturePart.BOTTOM) {
final Direction pastureFacing = state.get(HorizontalFacingBlock.FACING);
return dir == pastureFacing.rotateYClockwise() || dir == pastureFacing.rotateYCounterclockwise();
}
return false;
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -0,0 +1,31 @@
/*
* 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.api.pokemon.effect.ShoulderEffectRegistry;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.server.network.ServerPlayerEntity;
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(LivingEntity.class)
public abstract class LivingEntityMixin {
@Inject(method = "onStatusEffectRemoved", at = @At(value = "TAIL"))
private void cobblemon$onStatusEffectRemoved(StatusEffectInstance effect, CallbackInfo ci) {
final LivingEntity entity = (LivingEntity) (Object) this;
if (entity instanceof ServerPlayerEntity) {
ShoulderEffectRegistry.INSTANCE.onEffectEnd((ServerPlayerEntity) entity);
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -0,0 +1,49 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.render.models.blockbench.PoseableEntityModel;
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Bone;
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import org.jetbrains.annotations.NotNull;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import java.util.Map;
@Mixin(ModelPart.class)
public abstract class ModelPartMixin implements Bone {
@Shadow public abstract void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha);
@Shadow public abstract void rotate(MatrixStack matrixStack);
@Shadow @Final
public Map<String, ModelPart> children;
@NotNull
@Override
public Map<String, Bone> getChildren() {
return (Map<String, Bone>) (Object) children;
}
@Override
public void render(RenderContext context, MatrixStack stack, VertexConsumer buffer, int packedLight, int packedOverlay, float r, float g, float b, float a) {
this.render(stack, buffer, packedLight, packedOverlay, r, g, b, a);
}
@Override
public void transform(MatrixStack matrixStack) {
this.rotate(matrixStack);
}
}
@@ -0,0 +1,53 @@
/*
* 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.client.CobblemonClient;
import com.cobblemon.mod.common.client.keybind.keybinds.PartySendBinding;
import net.minecraft.client.Mouse;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Mouse.class)
public class PartyScrollMixin {
@Shadow
private double eventDeltaWheel;
@Inject(
method = "onMouseScroll",
at = @At(
value = "FIELD",
target="Lnet/minecraft/client/Mouse;eventDeltaWheel:D",
opcode = Opcodes.PUTFIELD,
ordinal = 2,
shift = At.Shift.BEFORE
),
cancellable = true
)
public void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) {
if (PartySendBinding.INSTANCE.getWasDown()) {
int i = (int)eventDeltaWheel;
if (i > 0) {
while (i-- > 0) CobblemonClient.INSTANCE.getStorage().shiftSelected(false);
ci.cancel();
eventDeltaWheel = 0;
PartySendBinding.INSTANCE.actioned();
} else if (i < 0) {
while (i++ < 0) CobblemonClient.INSTANCE.getStorage().shiftSelected(true);
ci.cancel();
eventDeltaWheel = 0;
PartySendBinding.INSTANCE.actioned();
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -9,15 +9,25 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.Cobblemon;
import com.cobblemon.mod.common.CobblemonItems;
import com.cobblemon.mod.common.api.events.CobblemonEvents;
import com.cobblemon.mod.common.api.events.item.LeftoversCreatedEvent;
import com.cobblemon.mod.common.api.storage.NoPokemonStoreException;
import com.cobblemon.mod.common.api.storage.party.PartyStore;
import com.cobblemon.mod.common.pokemon.Pokemon;
import com.cobblemon.mod.common.util.CompoundTagExtensionsKt;
import com.cobblemon.mod.common.util.DataKeys;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundEvent;
import net.minecraft.sound.SoundEvents;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
@@ -25,9 +35,13 @@ import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Objects;
import java.util.UUID;
import static com.cobblemon.mod.common.util.LocalizationUtilsKt.lang;
@Mixin(PlayerEntity.class)
public abstract class PlayerMixin extends LivingEntity {
@@ -43,6 +57,11 @@ public abstract class PlayerMixin extends LivingEntity {
@Shadow public abstract boolean isSpectator();
@Shadow public abstract boolean giveItemStack(ItemStack stack);
@Shadow public abstract void sendMessage(Text message, boolean overlay);
protected PlayerMixin(EntityType<? extends LivingEntity> p_20966_, World p_20967_) {
super(p_20966_, p_20967_);
}
@@ -115,4 +134,32 @@ public abstract class PlayerMixin extends LivingEntity {
return CompoundTagExtensionsKt.isPokemonEntity(nbt);
}
@Inject(
method = "eatFood",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/player/PlayerEntity;getHungerManager()Lnet/minecraft/entity/player/HungerManager;",
shift = At.Shift.AFTER
)
)
public void onEatFood(World world, ItemStack stack, CallbackInfoReturnable<ItemStack> cir) {
if (!getWorld().isClient) {
if (stack.getItem() == Items.APPLE && getWorld().random.nextDouble() < Cobblemon.config.getAppleLeftoversChance()) {
ItemStack leftovers = new ItemStack(CobblemonItems.LEFTOVERS);
ServerPlayerEntity player = Objects.requireNonNull(getServer()).getPlayerManager().getPlayer(uuid);
assert player != null;
CobblemonEvents.LEFTOVERS_CREATED.postThen(
new LeftoversCreatedEvent(player, leftovers),
leftoversCreatedEvent -> null,
leftoversCreatedEvent -> {
if(!player.giveItemStack(leftoversCreatedEvent.getLeftovers())) {
var itemPos = player.getRotationVector().multiply(0.5).add(getPos());
getWorld().spawnEntity(new ItemEntity(getWorld(), itemPos.getX(), itemPos.getY(), itemPos.getZ(), leftoversCreatedEvent.getLeftovers()));
}
return null;
}
);
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,20 +8,25 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.tags.CobblemonBlockTags;
import com.cobblemon.mod.common.api.tags.CobblemonBlockTags;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.PointedDripstoneBlock;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Slice;
@Mixin(PointedDripstoneBlock.class)
public abstract class PointedDripstoneBlockMixin {
@Redirect(method = "canGrow(Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isOf(Lnet/minecraft/block/Block;)Z", ordinal = 0))
@Redirect(
method = "canGrow(Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;)Z",
at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isOf(Lnet/minecraft/block/Block;)Z", ordinal = 0),
slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/block/Blocks;DRIPSTONE_BLOCK:Lnet/minecraft/block/Block;"))
)
private static boolean cobblemon$validateMoonStoneDripstone(BlockState instance, Block block) {
return instance.isIn(CobblemonBlockTags.INSTANCE.getDRIPSTONE_GROWABLE());
return instance.isIn(CobblemonBlockTags.DRIPSTONE_GROWABLE);
}
}
@@ -0,0 +1,31 @@
/*
* 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.brewing.BrewingRecipes;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.BrewingStandScreenHandler;
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.CallbackInfoReturnable;
@Mixin(BrewingStandScreenHandler.PotionSlot.class)
public class PotionSlotMixin {
@Inject(
method = "matches",
at = @At(value = "HEAD"),
cancellable = true
)
private static void matchesBrewable(ItemStack stack, CallbackInfoReturnable<Boolean> cir) {
if (BrewingRecipes.brewableItems.contains(stack.getItem())) {
cir.setReturnValue(true);
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -18,7 +18,6 @@ import net.minecraft.world.chunk.ChunkManager;
import net.minecraft.world.chunk.ChunkStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -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.mixin;
import com.cobblemon.mod.common.block.ShearableBlock;
import kotlin.Unit;
import net.minecraft.block.BlockState;
import net.minecraft.block.dispenser.ShearsDispenserBehavior;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
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.CallbackInfoReturnable;
@Mixin(ShearsDispenserBehavior.class)
public abstract class ShearsDispenserBehaviorMixin {
// This exists, so we can execute our custom interaction only if no one redirected shears interactions to overwrite the vanilla ones.
@Inject(method = "tryShearBlock", at = @At("HEAD"), cancellable = true)
private static void cobblemon$tryApricornHarvest(ServerWorld world, BlockPos pos, CallbackInfoReturnable<Boolean> cir) {
final BlockState state = world.getBlockState(pos);
if (state.getBlock() instanceof ShearableBlock shearableBlock) {
cir.setReturnValue(shearableBlock.attemptShear(world, state, pos, () -> Unit.INSTANCE));
}
}
}
@@ -0,0 +1,43 @@
/*
* 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.access.SoundManagerDuck;
import net.minecraft.client.sound.SoundInstance;
import net.minecraft.client.sound.SoundManager;
import net.minecraft.sound.SoundCategory;
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(SoundManager.class)
public class SoundManagerMixin implements SoundManagerDuck {
private boolean[] blockedCategories = new boolean[SoundCategory.values().length];
@Override
public void toggleCategories(SoundCategory... categories) {
for (SoundCategory category : categories) {
int index = category.ordinal();
boolean blocked = blockedCategories[index];
blockedCategories[index] = !blocked;
}
}
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;)V", at = @At("HEAD"), cancellable = true)
public void play(SoundInstance sound, CallbackInfo cb) {
if (blockedCategories[sound.getCategory().ordinal()]) cb.cancel();
}
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;I)V", at = @At("HEAD"), cancellable = true)
public void play(SoundInstance sound, int delay, CallbackInfo cb) {
if (blockedCategories[sound.getCategory().ordinal()]) cb.cancel();
}
}
@@ -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 com.google.common.collect.Multimap;
import net.minecraft.client.sound.SoundInstance;
import net.minecraft.client.sound.SoundSystem;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(SoundSystem.class)
public abstract class SoundSystemMixin {
@Shadow
private Multimap<SoundCategory, SoundInstance> sounds;
@Shadow
protected abstract void stop(SoundInstance sound);
@Inject(method = "stopSounds(Lnet/minecraft/util/Identifier;Lnet/minecraft/sound/SoundCategory;)V", at = @At("HEAD"), cancellable = true)
public void stopSounds(@Nullable Identifier id, @Nullable SoundCategory category, CallbackInfo cb) {
if (id == null && category != null) {
sounds.get(category).forEach(this::stop);
cb.cancel();
}
}
}
@@ -0,0 +1,32 @@
/*
* 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.mojang.datafixers.util.Pair;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import net.minecraft.structure.pool.StructurePool;
import net.minecraft.structure.pool.StructurePoolElement;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.List;
@Mixin(StructurePool.class)
public interface StructurePoolAccessor {
@Accessor("elementCounts")
List<Pair<StructurePoolElement, Integer>> getElementCounts();
@Mutable
@Accessor("elementCounts")
void setElementCounts(List<Pair<StructurePoolElement, Integer>> elementCounts);
@Accessor("elements")
ObjectArrayList<StructurePoolElement> getElements();
}
@@ -0,0 +1,217 @@
/*
* 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.world.CobblemonStructureIDs;
import net.minecraft.registry.Registry;
import net.minecraft.structure.PoolStructurePiece;
import net.minecraft.structure.StructureTemplateManager;
import net.minecraft.structure.pool.*;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.world.HeightLimitView;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.noise.NoiseConfig;
import org.apache.commons.lang3.mutable.MutableObject;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.*;
@Mixin(StructurePoolBasedGenerator.StructurePoolGenerator.class)
public abstract class StructurePoolGeneratorMixin {
@Final
@Mutable
@Shadow Deque<StructurePoolBasedGenerator.ShapedPoolStructurePiece> structurePieces;
Map<String, Integer> generatedStructureGroupCounts;
private static final Map<String, Integer> structureMaxes;
private static final Map<Identifier, Set<String>> structureGroups = new HashMap<>();
static {
String pokecenter = "pokecenter";
String berry = "berry_farm";
structureGroups.put(CobblemonStructureIDs.PLAINS_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.DESERT_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.SAVANNA_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.SNOWY_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.TAIGA_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.SAVANNA_BERRY_SMALL, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.SAVANNA_BERRY_LARGE, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.PLAINS_BERRY_SMALL, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.PLAINS_BERRY_LARGE, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.SNOWY_BERRY_SMALL, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.SNOWY_BERRY_LARGE, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.DESERT_BERRY_SMALL, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.DESERT_BERRY_LARGE, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.TAIGA_BERRY_SMALL, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.TAIGA_BERRY_LARGE, Set.of(berry));
//Mapped using location string as key
Map<String, Integer> aMap = new HashMap<>();
aMap.put(pokecenter, 1);
aMap.put(berry, 2);
// aMap.put(CobblemonStructureIDs.PLAINS_LONG_PATH, 3);
// aMap.put(CobblemonStructureIDs.DESERT_LONG_PATH, 3);
// aMap.put(CobblemonStructureIDs.SAVANNA_LONG_PATH, 3);
// aMap.put(CobblemonStructureIDs.SNOWY_LONG_PATH, 3);
// aMap.put(CobblemonStructureIDs.TAIGA_LONG_PATH, 3);
structureMaxes = Collections.unmodifiableMap(aMap);
}
public Set<String> getGroups(Identifier structureIdentifier) {
return structureGroups.getOrDefault(structureIdentifier, Set.of());
}
public boolean hasReachedMaximum(Identifier structureIdentifier) {
Set<String> groups = getGroups(structureIdentifier);
for (String group : groups) {
int count = generatedStructureGroupCounts.getOrDefault(group, 0);
if (count >= structureMaxes.getOrDefault(group, Integer.MAX_VALUE)) {
return true;
}
}
return false;
}
public void incrementStructureCount(Identifier structureIdentifier) {
Set<String> groups = getGroups(structureIdentifier);
for (String group : groups) {
generatedStructureGroupCounts.put(group, generatedStructureGroupCounts.getOrDefault(group, 0) + 1);
}
}
@Inject(method = "<init>", at = @At("RETURN"))
private void onStructurePoolGeneratorCreation(Registry<StructurePool> registry, int maxSize, ChunkGenerator chunkGenerator, StructureTemplateManager structureTemplateManager, List<? super PoolStructurePiece> children, Random random, CallbackInfo ci) {
generatedStructureGroupCounts = new HashMap<>();
}
@ModifyVariable(method = "generatePiece", at = @At("STORE"), ordinal = 1)
private Iterator<StructurePoolElement> reduceStructurePoolElementIterator(Iterator<StructurePoolElement> iterator) {
List<StructurePoolElement> reducedList = new ArrayList<>();
while (iterator.hasNext()) {
StructurePoolElement structure = iterator.next();
Identifier structurePieceLocationKey = getCobblemonOnlyLocation(structure);
if (structurePieceLocationKey == null) {
reducedList.add(structure);
continue;
}
if (!hasReachedMaximum(structurePieceLocationKey)) {
reducedList.add(structure);
}
}
return reducedList.iterator();
}
@ModifyVariable(method = "generatePiece", at = @At("STORE"), ordinal = 1)
private PoolStructurePiece injected(PoolStructurePiece poolStructurePiece) {
Identifier structureLocationKey = getCobblemonOnlyLocation(poolStructurePiece.getPoolElement());
if (structureLocationKey != null) {
incrementStructureCount(structureLocationKey);
}
return poolStructurePiece;
}
// This doesn't SEEM necessary? It appears to work without.
@Inject(method = "generatePiece", at = @At("HEAD"))
private void beforeGeneratePiece(PoolStructurePiece piece, MutableObject<VoxelShape> pieceShape, int minY, boolean modifyBoundingBox, HeightLimitView world, NoiseConfig noiseConfig, CallbackInfo ci) {
// Identifier structureLocationKey = getCobblemonOnlyLocation(piece.getPoolElement());
//
// if (structureLocationKey != null) {
// Integer currentlyGenerated = generatedStructureCounts.get(structureLocationKey);
// if (currentlyGenerated == null) currentlyGenerated = 0;
// generatedStructureCounts.put(structureLocationKey, currentlyGenerated + 1);
// }
//
// List<StructurePoolBasedGenerator.ShapedPoolStructurePiece> reducedStructurePiecesList = structurePieces.stream().toList();
//
// for (Identifier maxStructureLocationKey : structureMaxes.keySet()) {
// Integer maxAllowed = structureMaxes.get(maxStructureLocationKey);
//
// Integer currentlyGenerated = generatedStructureCounts.get(maxStructureLocationKey);
// if (currentlyGenerated == null) currentlyGenerated = 0;
// if (currentlyGenerated < maxAllowed) {
// continue;
// }
//
// //Already have max so need to remove
// reducedStructurePiecesList = reducedStructurePiecesList.stream()
// .filter(shapedStructurePiece -> {
// Identifier locationKey = getCobblemonOnlyLocation(shapedStructurePiece.piece.getPoolElement());
// if (locationKey == null) {
// return true;
// }
//
// return !locationKey.equals(maxStructureLocationKey);
// })
// .collect(Collectors.toList());
// }
//
// structurePieces = new ArrayDeque<>(reducedStructurePiecesList);
}
private static Identifier getCobblemonOnlyLocation(StructurePoolElement structurePoolElement) {
Identifier location = getLocationIfAvailable(structurePoolElement);
if (location == null) return null;
if (!location.getNamespace().equals("cobblemon")) return null;
return location;
}
private static Identifier getLocationIfAvailable(StructurePoolElement structurePoolElement) {
if (structurePoolElement instanceof LegacySinglePoolElement legacySinglePoolElement) {
if (legacySinglePoolElement.location.left().isEmpty()) return null;
return legacySinglePoolElement.location.left().get();
} else if (structurePoolElement instanceof SinglePoolElement singlePoolElement) {
if (singlePoolElement.location.left().isEmpty()) return null;
return singlePoolElement.location.left().get();
} else {
return null;
}
}
// private List<StructurePoolElement> removeInstanceOfLocationKeyFrom(List<StructurePoolElement> structureList, Integer allowedNumberOfInstances, Identifier locationKey) {
// List<StructurePoolElement> reducedList = new ArrayList<>();
// int instancesFound = 0;
//
// for (StructurePoolElement structurePoolElement: structureList) {
// Identifier structureKey = getCobblemonOnlyLocation(structurePoolElement);
// if (structureKey == null || !structureKey.equals(locationKey)) {
// reducedList.add(structurePoolElement);
// continue;
// }
//
// if (instancesFound >= allowedNumberOfInstances) {
// continue;
// }
//
// reducedList.add(structurePoolElement);
// instancesFound++;
// }
//
// return reducedList;
// }
}
@@ -0,0 +1,43 @@
/*
* 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.bridges.StructureProcessorListBridge;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.structure.processor.StructureProcessor;
import net.minecraft.structure.processor.StructureProcessorList;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(StructureProcessorList.class)
public class StructureProcessorListMixin implements StructureProcessorListBridge {
@Final
@Mutable
@Shadow
private List<StructureProcessor> list;
@Override
public void append(StructureProcessor processor) {
List<StructureProcessor> mutable = new ArrayList<>(this.list);
mutable.add(processor);
this.list = ImmutableList.copyOf(mutable);
}
@Override
public void clear() {
this.list = ImmutableList.of();
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -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.mixin.accessor;
import net.minecraft.client.sound.MusicTracker;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(MusicTracker.class)
public interface MusicTrackerAccessor {
@Accessor("timeUntilNextSong")
int timeUntilNextSong();
@Accessor("timeUntilNextSong")
void setTimeUntilNextSong(int timeUntilNextSong);
}
@@ -0,0 +1,26 @@
/*
* 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.accessor;
import net.minecraft.entity.effect.StatusEffectInstance;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(StatusEffectInstance.class)
public interface StatusEffectInstanceAccessor {
@Accessor
void setAmplifier(int amplifier);
@Accessor
void setShowParticles(boolean showParticles);
@Accessor
void setShowIcon(boolean showIcon);
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -0,0 +1,41 @@
/*
* 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.invoker;
import net.minecraft.block.*;
import net.minecraft.resource.featuretoggle.FeatureFlag;
import net.minecraft.sound.BlockSoundGroup;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@SuppressWarnings("unused")
@Mixin(Blocks.class)
public interface BlocksInvoker {
@Invoker("createLogBlock")
static PillarBlock createLogBlock(MapColor topMapColor, MapColor sideMapColor) {
throw new UnsupportedOperationException();
}
@Invoker("createLeavesBlock")
static LeavesBlock createLeavesBlock(BlockSoundGroup soundGroup) {
throw new UnsupportedOperationException();
}
@Invoker("createWoodenButtonBlock")
static ButtonBlock createWoodenButtonBlock(BlockSetType blockSetType, FeatureFlag... requiredFeatures) {
throw new UnsupportedOperationException();
}
@Invoker("createFlowerPotBlock")
static FlowerPotBlock createFlowerPotBlock(Block flower, FeatureFlag... requiredFeatures) {
throw new UnsupportedOperationException();
}
}
@@ -0,0 +1,21 @@
/*
* 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.invoker;
import net.minecraft.world.GameRules;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(GameRules.BooleanRule.class)
public interface BooleanRuleInvoker {
@Invoker("create")
static GameRules.Type<GameRules.BooleanRule> cobblemon$create(boolean initialValue) {
throw new UnsupportedOperationException();
}
}
@@ -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.mixin.invoker;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(ClientPlayNetworkHandler.class)
public interface ClientPlayNetworkHandlerInvoker {
@Invoker
void callPlaySpawnSound(Entity entity);
}
@@ -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.mixin.invoker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockSetType;
import net.minecraft.block.DoorBlock;
import net.minecraft.sound.SoundEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(DoorBlock.class)
public interface DoorBlockInvoker {
@Invoker("<init>")
static DoorBlock cobblemon$create(AbstractBlock.Settings settings, BlockSetType blockSetType) {
throw new UnsupportedOperationException();
}
}
@@ -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.mixin.invoker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockSetType;
import net.minecraft.block.PressurePlateBlock;
import net.minecraft.sound.SoundEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(PressurePlateBlock.class)
public interface PressurePlateBlockInvoker {
@Invoker("<init>")
static PressurePlateBlock cobblemon$create(PressurePlateBlock.ActivationRule type, AbstractBlock.Settings settings, BlockSetType blockSetType) {
throw new UnsupportedOperationException();
}
}
@@ -0,0 +1,23 @@
/*
* 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.invoker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.StairsBlock;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(StairsBlock.class)
public interface StairsBlockInvoker {
@Invoker("<init>")
static StairsBlock cobblemon$create(BlockState baseBlockState, AbstractBlock.Settings settings) {
throw new UnsupportedOperationException();
}
}
@@ -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.mixin.invoker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockSetType;
import net.minecraft.block.TrapdoorBlock;
import net.minecraft.sound.SoundEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(TrapdoorBlock.class)
public interface TrapdoorBlockInvoker {
@Invoker("<init>")
static TrapdoorBlock cobblemon$create(AbstractBlock.Settings settings, BlockSetType blockSetType) {
throw new UnsupportedOperationException();
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -14,6 +14,7 @@ import net.minecraft.client.render.item.ItemModels;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.render.model.json.ModelTransformationMode;
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
@@ -33,13 +34,12 @@ public abstract class ItemRendererMixin {
@Shadow @Final private ItemModels models;
@Shadow public abstract void renderItem(ItemStack stack, ModelTransformation.Mode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model);
@Shadow public abstract void renderItem(ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model);
@Inject(method = "getModel", at = @At("HEAD"), cancellable = true)
private void cobblemon$bakePokeballModel(ItemStack stack, World world, LivingEntity entity, int seed, CallbackInfoReturnable<BakedModel> cir) {
if (stack.getItem() instanceof PokeBallItem pokeBallItem) {
ModelIdentifier modelIdentifier = new ModelIdentifier(pokeBallItem.getPokeBall().getModel3d());
BakedModel model = this.models.getModelManager().getModel(modelIdentifier);
BakedModel model = this.models.getModelManager().getModel(new ModelIdentifier(pokeBallItem.getPokeBall().getModel3d(), "inventory"));
ClientWorld clientWorld = world instanceof ClientWorld ? (ClientWorld) world : null;
BakedModel overriddenModel = model.getOverrides().apply(model, stack, clientWorld, entity, seed);
cir.setReturnValue(overriddenModel == null ? this.models.getModelManager().getMissingModel() : overriddenModel);
@@ -47,15 +47,14 @@ public abstract class ItemRendererMixin {
}
@Inject(
method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V",
method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V",
at = @At("HEAD"),
cancellable = true
)
private void cobblemon$determinePokeballModel(ItemStack stack, ModelTransformation.Mode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, CallbackInfo ci) {
boolean shouldBe2d = renderMode == ModelTransformation.Mode.GUI || renderMode == ModelTransformation.Mode.FIXED;
private void cobblemon$determinePokeballModel(ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, CallbackInfo ci) {
boolean shouldBe2d = renderMode == ModelTransformationMode.GUI || renderMode == ModelTransformationMode.FIXED;
if (shouldBe2d && stack.getItem() instanceof PokeBallItem pokeBallItem) {
ModelIdentifier modelIdentifier = new ModelIdentifier(pokeBallItem.getPokeBall().getModel2d());
BakedModel replacementModel = this.models.getModelManager().getModel(modelIdentifier);
BakedModel replacementModel = this.models.getModelManager().getModel(new ModelIdentifier(pokeBallItem.getPokeBall().getModel2d(), "inventory"));
if (!model.equals(replacementModel)) {
ci.cancel();
renderItem(stack, renderMode, leftHanded, matrices, vertexConsumers, light, overlay, replacementModel);
@@ -0,0 +1,35 @@
/*
* 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.pokeball;
import com.cobblemon.mod.common.entity.pokeball.WaterDragModifier;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.projectile.thrown.ThrownEntity;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
@Mixin(ThrownEntity.class)
public abstract class ThrownEntityMixin extends Entity {
public ThrownEntityMixin(EntityType<?> type, World world) {
super(type, world);
}
@ModifyVariable(method = "tick", at = @At("STORE"), ordinal = 0)
private float cobblemon$waterDragModifier(float value) {
if (this.isTouchingWater() && this instanceof WaterDragModifier) {
return ((WaterDragModifier) this).waterDrag();
}
return value;
}
}
@@ -1,11 +1,13 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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/.
*/
@file:Suppress("unused")
package com.cobblemon.mod.common
import com.cobblemon.mod.common.advancement.CobblemonCriteria
@@ -18,57 +20,65 @@ import com.cobblemon.mod.common.api.drop.ItemDropEntry
import com.cobblemon.mod.common.api.events.CobblemonEvents.BATTLE_VICTORY
import com.cobblemon.mod.common.api.events.CobblemonEvents.DATA_SYNCHRONIZED
import com.cobblemon.mod.common.api.events.CobblemonEvents.EVOLUTION_COMPLETE
import com.cobblemon.mod.common.api.events.CobblemonEvents.LIVING_DEATH
import com.cobblemon.mod.common.api.events.CobblemonEvents.PLAYER_QUIT
import com.cobblemon.mod.common.api.events.CobblemonEvents.LEVEL_UP_EVENT
import com.cobblemon.mod.common.api.events.CobblemonEvents.POKEMON_CAPTURED
import com.cobblemon.mod.common.api.events.CobblemonEvents.SERVER_STARTED
import com.cobblemon.mod.common.api.events.CobblemonEvents.SERVER_STOPPED
import com.cobblemon.mod.common.api.events.CobblemonEvents.TICK_POST
import com.cobblemon.mod.common.api.events.CobblemonEvents.TRADE_COMPLETED
import com.cobblemon.mod.common.api.net.serializers.PoseTypeDataSerializer
import com.cobblemon.mod.common.api.net.serializers.StringSetDataSerializer
import com.cobblemon.mod.common.api.net.serializers.Vec3DataSerializer
import com.cobblemon.mod.common.api.permission.PermissionValidator
import com.cobblemon.mod.common.api.pokeball.catching.calculators.CaptureCalculator
import com.cobblemon.mod.common.api.pokeball.catching.calculators.CobblemonGen348CaptureCalculator
import com.cobblemon.mod.common.api.pokeball.catching.calculators.CaptureCalculators
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies
import com.cobblemon.mod.common.api.pokemon.effect.ShoulderEffectRegistry
import com.cobblemon.mod.common.api.pokemon.evolution.adapters.EvolutionRegistry
import com.cobblemon.mod.common.api.pokemon.experience.ExperienceCalculator
import com.cobblemon.mod.common.api.pokemon.experience.ExperienceGroups
import com.cobblemon.mod.common.api.pokemon.experience.StandardExperienceCalculator
import com.cobblemon.mod.common.api.pokemon.feature.EnumSpeciesFeature
import com.cobblemon.mod.common.api.pokemon.feature.FlagSpeciesFeature
import com.cobblemon.mod.common.api.pokemon.feature.SpeciesFeature
import com.cobblemon.mod.common.api.pokemon.feature.ChoiceSpeciesFeatureProvider
import com.cobblemon.mod.common.api.pokemon.feature.FlagSpeciesFeatureProvider
import com.cobblemon.mod.common.api.pokemon.feature.SpeciesFeatures
import com.cobblemon.mod.common.api.pokemon.helditem.HeldItemProvider
import com.cobblemon.mod.common.api.pokemon.stats.EvCalculator
import com.cobblemon.mod.common.api.pokemon.stats.Generation8EvCalculator
import com.cobblemon.mod.common.api.pokemon.stats.StatProvider
import com.cobblemon.mod.common.api.properties.CustomPokemonProperty
import com.cobblemon.mod.common.api.reactive.Observable.Companion.filter
import com.cobblemon.mod.common.api.reactive.Observable.Companion.map
import com.cobblemon.mod.common.api.reactive.Observable.Companion.takeFirst
import com.cobblemon.mod.common.api.registry.CobblemonRegistryKeys
import com.cobblemon.mod.common.api.scheduling.ScheduledTaskTracker
import com.cobblemon.mod.common.api.spawning.BestSpawner
import com.cobblemon.mod.common.api.spawning.CobblemonSpawnPools
import com.cobblemon.mod.common.api.spawning.CobblemonSpawningProspector
import com.cobblemon.mod.common.api.spawning.context.AreaContextResolver
import com.cobblemon.mod.common.api.spawning.prospecting.SpawningProspector
import com.cobblemon.mod.common.api.starter.StarterHandler
import com.cobblemon.mod.common.api.storage.PokemonStoreManager
import com.cobblemon.mod.common.api.storage.adapter.conversions.ReforgedConversion
import com.cobblemon.mod.common.api.storage.adapter.flatifle.FileStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatifle.JSONStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatifle.NBTStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.database.MongoDBStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.FileStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.JSONStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.NBTStoreAdapter
import com.cobblemon.mod.common.api.storage.factory.FileBackedPokemonStoreFactory
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.PlayerDataStoreManager
import com.cobblemon.mod.common.api.storage.player.factory.JsonPlayerDataStoreFactory
import com.cobblemon.mod.common.api.storage.player.factory.MongoPlayerDataStoreFactory
import com.cobblemon.mod.common.api.tags.CobblemonEntityTypeTags
import com.cobblemon.mod.common.api.types.ElementalType
import com.cobblemon.mod.common.battles.BagItems
import com.cobblemon.mod.common.battles.BattleFormat
import com.cobblemon.mod.common.battles.BattleRegistry
import com.cobblemon.mod.common.battles.BattleSide
import com.cobblemon.mod.common.battles.ShowdownThread
import com.cobblemon.mod.common.battles.actor.PokemonBattleActor
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.battles.runner.ShowdownConnection
import com.cobblemon.mod.common.command.argument.MoveArgumentType
import com.cobblemon.mod.common.command.argument.PartySlotArgumentType
import com.cobblemon.mod.common.command.argument.PokemonArgumentType
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.config.CobblemonConfig
import com.cobblemon.mod.common.config.LastChangedVersion
import com.cobblemon.mod.common.config.constraint.IntConstraint
import com.cobblemon.mod.common.config.starter.StarterConfig
import com.cobblemon.mod.common.data.CobblemonDataProvider
@@ -76,74 +86,71 @@ import com.cobblemon.mod.common.events.AdvancementHandler
import com.cobblemon.mod.common.events.ServerTickHandler
import com.cobblemon.mod.common.item.PokeBallItem
import com.cobblemon.mod.common.net.messages.client.settings.ServerSettingsPacket
import com.cobblemon.mod.common.net.serverhandling.ServerPacketRegistrar
import com.cobblemon.mod.common.permission.LaxPermissionValidator
import com.cobblemon.mod.common.platform.events.PlatformEvents
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.pokemon.aspects.FishStripesAspect
import com.cobblemon.mod.common.pokemon.aspects.GENDER_ASPECT
import com.cobblemon.mod.common.pokemon.aspects.SHINY_ASPECT
import com.cobblemon.mod.common.pokemon.aspects.SeasonAspect
import com.cobblemon.mod.common.pokemon.aspects.SnakePatternAspect
import com.cobblemon.mod.common.pokemon.evolution.variants.BlockClickEvolution
import com.cobblemon.mod.common.pokemon.feature.BattleCriticalHitsFeature
import com.cobblemon.mod.common.pokemon.feature.TagSeasonResolver
import com.cobblemon.mod.common.pokemon.feature.DamageTakenFeature
import com.cobblemon.mod.common.pokemon.feature.FISH_STRIPES
import com.cobblemon.mod.common.pokemon.feature.FishStripesFeature
import com.cobblemon.mod.common.pokemon.feature.SEASON
import com.cobblemon.mod.common.pokemon.feature.SNAKE_PATTERN
import com.cobblemon.mod.common.pokemon.feature.SeasonFeature
import com.cobblemon.mod.common.pokemon.feature.SnakePatternFeature
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
import com.cobblemon.mod.common.pokemon.properties.HiddenAbilityPropertyType
import com.cobblemon.mod.common.pokemon.properties.UncatchableProperty
import com.cobblemon.mod.common.pokemon.properties.UntradeableProperty
import com.cobblemon.mod.common.pokemon.properties.tags.PokemonFlagProperty
import com.cobblemon.mod.common.pokemon.stat.CobblemonStatProvider
import com.cobblemon.mod.common.registry.CompletableRegistry
import com.cobblemon.mod.common.starter.CobblemonStarterHandler
import com.cobblemon.mod.common.trade.TradeManager
import com.cobblemon.mod.common.util.DataKeys
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.getServer
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.removeAmountIf
import com.cobblemon.mod.common.world.CobblemonGameRules
import com.cobblemon.mod.common.world.feature.CobblemonOrePlacedFeatures
import com.cobblemon.mod.common.world.placement.CobblemonPlacementTypes
import dev.architectury.event.EventResult
import dev.architectury.event.events.common.CommandRegistrationEvent
import dev.architectury.event.events.common.InteractionEvent
import dev.architectury.hooks.item.tool.AxeItemHooks
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
import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.client.MongoClient
import com.mongodb.client.MongoClients
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.PrintWriter
import java.util.UUID
import kotlin.properties.Delegates
import kotlin.reflect.KMutableProperty
import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.isAccessible
import kotlin.reflect.jvm.javaField
import net.minecraft.client.MinecraftClient
import net.minecraft.command.argument.serialize.ConstantArgumentSerializer
import net.minecraft.entity.data.TrackedDataHandlerRegistry
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.item.Items
import net.minecraft.item.NameTagItem
import net.minecraft.registry.RegistryKey
import net.minecraft.util.WorldSavePath
import net.minecraft.util.registry.RegistryKey
import net.minecraft.world.World
import org.apache.logging.log4j.LogManager
object Cobblemon {
const val MODID = "cobblemon"
const val VERSION = "1.1.0"
const val VERSION = "1.4.0"
const val CONFIG_PATH = "config/$MODID/main.json"
val LOGGER = LogManager.getLogger()
lateinit var implementation: CobblemonImplementation
lateinit var showdown: ShowdownConnection
var captureCalculator: CaptureCalculator = CobblemonGen348CaptureCalculator
@Deprecated("This field is now a config value", ReplaceWith("Cobblemon.config.captureCalculator"))
var captureCalculator: CaptureCalculator
get() = this.config.captureCalculator
set(value) {
this.config.captureCalculator = value
}
var experienceCalculator: ExperienceCalculator = StandardExperienceCalculator
var evYieldCalculator: EvCalculator = Generation8EvCalculator
var starterHandler: StarterHandler = CobblemonStarterHandler()
var isDedicatedServer = false
var showdownThread = ShowdownThread()
val showdownThread = ShowdownThread()
lateinit var config: CobblemonConfig
var prospector: SpawningProspector = CobblemonSpawningProspector
var areaContextResolver: AreaContextResolver = object : AreaContextResolver {}
@@ -157,45 +164,64 @@ object Cobblemon {
var statProvider: StatProvider = CobblemonStatProvider
var seasonResolver: SeasonResolver = TagSeasonResolver
fun preinitialize(implementation: CobblemonImplementation) {
fun preInitialize(implementation: CobblemonImplementation) {
this.implementation = implementation
this.queueRegistryCreation()
implementation.registerPermissionValidator()
implementation.registerSoundEvents()
implementation.registerBlocks()
implementation.registerItems()
implementation.registerEntityTypes()
implementation.registerEntityAttributes()
implementation.registerBlockEntityTypes()
implementation.registerWorldGenFeatures()
implementation.registerParticles()
DropEntry.register("command", CommandDropEntry::class.java)
DropEntry.register("item", ItemDropEntry::class.java, isDefault = true)
ExperienceGroups.registerDefaults()
PokemonSpecies.observable.subscribe { CobblemonSpawnPools.load() }
CaptureCalculators.registerDefaults()
this.loadConfig()
this.implementation = implementation
// CobblemonBlockPredicates.touch()
CobblemonOrePlacedFeatures.register()
CobblemonPlacedFeatures.register()
this.registerArgumentTypes()
CobblemonCriteria // Init the fields and register the criteria
CobblemonEntities.register()
CobblemonBlocks.register()
CobblemonBlockEntities.register()
CobblemonItems.register()
ServerPacketRegistrar.registerHandlers()
CobblemonSounds.register()
CobblemonFeatures.register()
CobblemonGameRules.register()
CobblemonGameRules // Init fields and register
ShoulderEffectRegistry.register()
EvolutionRegistry.init()
DATA_SYNCHRONIZED.subscribe {
storage.onPlayerDataSync(it)
playerData.get(it).sendToPlayer(it)
starterHandler.handleJoin(it)
ServerSettingsPacket().sendToPlayer(it)
ServerSettingsPacket(this.config.preventCompletePartyDeposit, this.config.displayEntityLevelLabel).sendToPlayer(it)
}
PLAYER_QUIT.subscribe {
PCLinkManager.removeLink(it.uuid)
BattleRegistry.getBattleByParticipatingPlayer(it)?.stop()
PlatformEvents.SERVER_PLAYER_LOGOUT.subscribe {
PCLinkManager.removeLink(it.player.uuid)
BattleRegistry.getBattleByParticipatingPlayer(it.player)?.stop()
storage.onPlayerDisconnect(it.player)
playerData.onPlayerDisconnect(it.player)
TradeManager.onLogoff(it.player)
}
LIVING_DEATH.pipe(filter { it is ServerPlayerEntity }, map { it as ServerPlayerEntity }).subscribe {
battleRegistry.getBattleByParticipatingPlayer(it)?.stop()
PlatformEvents.PLAYER_DEATH.subscribe {
PCLinkManager.removeLink(it.player.uuid)
battleRegistry.getBattleByParticipatingPlayer(it.player)?.stop()
}
InteractionEvent.RIGHT_CLICK_BLOCK.register(InteractionEvent.RightClickBlock { pl, _, pos, _ ->
val player = pl as? ServerPlayerEntity ?: return@RightClickBlock EventResult.pass()
val block = player.world.getBlockState(pos).block
PlatformEvents.RIGHT_CLICK_ENTITY.subscribe { event ->
if (event.player.getStackInHand(event.hand).item is NameTagItem && event.entity.type.isIn(CobblemonEntityTypeTags.CANNOT_HAVE_NAME_TAG)) {
event.cancel()
}
}
PlatformEvents.RIGHT_CLICK_BLOCK.subscribe { event ->
val player = event.player
val block = player.world.getBlockState(event.pos).block
player.party().forEach { pokemon ->
pokemon.evolutions
.filterIsInstance<BlockClickEvolution>()
@@ -203,90 +229,111 @@ object Cobblemon {
evolution.attemptEvolution(pokemon, BlockClickEvolution.BlockInteractionContext(block, player.world))
}
}
return@RightClickBlock EventResult.pass()
})
}
PlatformEvents.CHANGE_DIMENSION.subscribe {
it.player.party().forEach { pokemon -> pokemon.entity?.recallWithAnimation() }
}
TrackedDataHandlerRegistry.register(Vec3DataSerializer)
TrackedDataHandlerRegistry.register(StringSetDataSerializer)
TrackedDataHandlerRegistry.register(PoseTypeDataSerializer)
HeldItemProvider.register(CobblemonHeldItemManager, Priority.LOWEST)
}
fun initialize() {
showdownThread.start()
CompletableRegistry.allRegistriesCompleted.thenAccept {
LOGGER.info("All registries loaded.")
}
CobblemonPlacementTypes.register()
CobblemonOrePlacedFeatures.register()
showdownThread.launch()
// Start up the data provider.
CobblemonDataProvider.registerDefaults()
SHINY_ASPECT.register()
GENDER_ASPECT.register()
SnakePatternAspect.register()
FishStripesAspect.register()
SeasonAspect.register()
config.flagSpeciesFeatures.forEach(FlagSpeciesFeature::registerWithPropertyAndAspect)
config.globalFlagSpeciesFeatures.forEach(FlagSpeciesFeature::registerWithPropertyAndAspect)
FlagSpeciesFeature.registerWithPropertyAndAspect(DataKeys.ALOLAN)
FlagSpeciesFeature.registerWithPropertyAndAspect(DataKeys.GALARIAN)
FlagSpeciesFeature.registerWithPropertyAndAspect(DataKeys.HISUIAN)
FlagSpeciesFeature.registerWithPropertyAndAspect(DataKeys.VALENCIAN)
SpeciesFeature.registerGlobalFeature(DamageTakenFeature.ID) { DamageTakenFeature() }
SpeciesFeature.registerGlobalFeature(BattleCriticalHitsFeature.ID) { BattleCriticalHitsFeature() }
EnumSpeciesFeature.registerWithProperty(SNAKE_PATTERN, SnakePatternFeature::class.java)
EnumSpeciesFeature.registerWithProperty(SEASON, SeasonFeature::class.java)
EnumSpeciesFeature.registerWithProperty(FISH_STRIPES, FishStripesFeature::class.java)
SpeciesFeatures.types["choice"] = ChoiceSpeciesFeatureProvider::class.java
SpeciesFeatures.types["flag"] = FlagSpeciesFeatureProvider::class.java
SpeciesFeatures.register(
DataKeys.CAN_BE_MILKED,
FlagSpeciesFeatureProvider(keys = listOf(DataKeys.CAN_BE_MILKED), default = true))
SpeciesFeatures.register(
DataKeys.HAS_BEEN_SHEARED,
FlagSpeciesFeatureProvider(keys = listOf(DataKeys.HAS_BEEN_SHEARED), default = false))
CustomPokemonProperty.register(UntradeableProperty)
CustomPokemonProperty.register(UncatchableProperty)
CustomPokemonProperty.register(PokemonFlagProperty)
CustomPokemonProperty.register(HiddenAbilityPropertyType)
CommandRegistrationEvent.EVENT.register(CobblemonCommands::register)
ifDedicatedServer {
isDedicatedServer = true
TICK_POST.subscribe { ScheduledTaskTracker.update() }
CobblemonNetwork.clientHandlersRegistered.complete(Unit)
PlatformEvents.SERVER_TICK_POST.subscribe { ScheduledTaskTracker.update() }
}
CobblemonBlocks.completed.thenAccept {
AxeItemHooks.addStrippable(CobblemonBlocks.APRICORN_LOG.get(), CobblemonBlocks.STRIPPED_APRICORN_LOG.get())
AxeItemHooks.addStrippable(CobblemonBlocks.APRICORN_WOOD.get(), CobblemonBlocks.STRIPPED_APRICORN_WOOD.get())
}
SERVER_STARTED.subscribe { server ->
PlatformEvents.SERVER_STARTING.subscribe { event ->
val server = event.server
playerData = PlayerDataStoreManager().also { it.setup(server) }
val mongoClient: MongoClient?
val pokemonStoreRoot = server.getSavePath(WorldSavePath.ROOT).resolve("pokemon").toFile()
val storeAdapter = when (config.storageFormat) {
"nbt", "json" -> {
val jsonFactory = JsonPlayerDataStoreFactory()
jsonFactory.setup(server)
playerData.setFactory(jsonFactory)
if (config.storageFormat == "nbt") {
NBTStoreAdapter(pokemonStoreRoot.absolutePath, useNestedFolders = true, folderPerClass = true)
} else {
JSONStoreAdapter(
pokemonStoreRoot.absolutePath,
useNestedFolders = true,
folderPerClass = true
)
}
}
"mongodb" -> {
try {
Class.forName("com.mongodb.client.MongoClient")
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(config.mongoDBConnectionString))
.build()
mongoClient = MongoClients.create(mongoClientSettings)
val mongoFactory = MongoPlayerDataStoreFactory(mongoClient, config.mongoDBDatabaseName)
playerData.setFactory(mongoFactory)
MongoDBStoreAdapter(mongoClient, config.mongoDBDatabaseName)
} catch (e: ClassNotFoundException) {
LOGGER.error("MongoDB driver not found.")
throw e
}
}
else -> throw IllegalArgumentException("Unsupported storageFormat: ${config.storageFormat}")
}
.with(ReforgedConversion(server.getSavePath(WorldSavePath.ROOT))) as FileStoreAdapter<*>
storage.registerFactory(
priority = Priority.LOWEST,
factory = FileBackedPokemonStoreFactory(
adapter = if (config.storageFormat == "nbt") {
NBTStoreAdapter(pokemonStoreRoot.absolutePath, useNestedFolders = true, folderPerClass = true)
} else {
JSONStoreAdapter(pokemonStoreRoot.absolutePath, useNestedFolders = true, folderPerClass = true)
}.with(ReforgedConversion(server.getSavePath(WorldSavePath.ROOT))) as FileStoreAdapter<*>,
adapter = storeAdapter,
createIfMissing = true,
pcConstructor = { uuid -> PCStore(uuid).also { it.resize(config.defaultBoxCount) } }
)
)
}
SERVER_STOPPED.subscribe {
PlatformEvents.SERVER_STOPPED.subscribe {
storage.unregisterAll()
playerData.saveAll()
showdown.close()
}
SERVER_STARTED.subscribe {
PlatformEvents.SERVER_STARTED.subscribe {
bestSpawner.onServerStarted()
battleRegistry.onServerStarted()
}
TICK_POST.subscribe { ServerTickHandler.onTick(it) }
PlatformEvents.SERVER_TICK_POST.subscribe { ServerTickHandler.onTick(it.server) }
POKEMON_CAPTURED.subscribe { AdvancementHandler.onCapture(it) }
// EGG_HATCH.subscribe { AdvancementHandler.onHatch(it) }
BATTLE_VICTORY.subscribe { AdvancementHandler.onWinBattle(it) }
@@ -298,31 +345,41 @@ object Cobblemon {
if (this.config.ninjaskCreatesShedinja && pokemon.species.resourceIdentifier == ninjaskIdentifier && PokemonSpecies.getByIdentifier(Pokemon.SHEDINJA) != null) {
val player = pokemon.getOwnerPlayer() ?: return@subscribe
if (player.inventory.containsAny { it.item is PokeBallItem }) {
var pokeball = Items.AIR
player.inventory.combinedInventory.forEach {
it.forEach {
itemStack -> if (itemStack.item is PokeBallItem && pokeball == Items.AIR) {
pokeball = itemStack.item as PokeBallItem
}
}
}
player.inventory.removeAmountIf(1) { it.item is PokeBallItem }
val properties = event.evolution.result.copy()
properties.species = Pokemon.SHEDINJA.toString()
val product = pokemon.clone()
product.removeHeldItem()
properties.apply(product)
product.caughtBall = (pokeball as PokeBallItem).pokeBall
pokemon.storeCoordinates.get()?.store?.add(product)
}
}
}
LEVEL_UP_EVENT.subscribe { AdvancementHandler.onLevelUp(it) }
TRADE_COMPLETED.subscribe { AdvancementHandler.onTradeCompleted(it) }
showdownThread.showdownStarted.thenAccept {
PokemonSpecies.observable.pipe(takeFirst()).subscribe {
LOGGER.info("Starting dummy Showdown battle to force it to pre-load data.")
battleRegistry.startBattle(
BattleFormat.GEN_8_SINGLES,
BattleSide(PokemonBattleActor(UUID.randomUUID(), BattlePokemon(Pokemon().initialize()), -1F)),
BattleSide(PokemonBattleActor(UUID.randomUUID(), BattlePokemon(Pokemon().initialize()), -1F))
).apply { mute = true }
}
BagItems.observable.subscribe {
LOGGER.info("Starting dummy Showdown battle to force it to pre-load data.")
battleRegistry.startBattle(
BattleFormat.GEN_9_SINGLES,
BattleSide(PokemonBattleActor(UUID.randomUUID(), BattlePokemon(Pokemon().initialize()), -1F)),
BattleSide(PokemonBattleActor(UUID.randomUUID(), BattlePokemon(Pokemon().initialize()), -1F))
).apply { mute = true }
}
}
fun getLevel(dimension: RegistryKey<World>): World? {
return if (isDedicatedServer) {
getServer()?.getWorld(dimension)
server()?.getWorld(dimension)
} else {
val mc = MinecraftClient.getInstance()
return mc.server?.getWorld(dimension) ?: mc.world
@@ -345,44 +402,59 @@ object Cobblemon {
exception.printStackTrace()
}
this.config::class.memberProperties.forEach {
// Member must have annotations and must be mutable
if (it.annotations.isEmpty() || it !is KMutableProperty<*>) return@forEach
val defaultConfig = CobblemonConfig()
var value = it.getter.call(config)
for (annotation in it.annotations) {
when (annotation) {
CobblemonConfig::class.memberProperties.forEach {
val field = it.javaField!!
it.isAccessible = true
field.annotations.forEach {
when (it) {
is LastChangedVersion -> {
val defaultChangedVersion = it.version
val lastSavedVersion = config.lastSavedVersion
if (defaultChangedVersion.isLaterVersion(lastSavedVersion)) {
field.set(config, field.get(defaultConfig))
}
}
is IntConstraint -> {
if (value !is Int) break
value = value.coerceIn(annotation.min, annotation.max)
it.setter.call(config, value)
var value = field.get(config)
if (value is Int) {
value = value.coerceIn(it.min, it.max)
field.set(config, value)
}
}
}
}
}
} else {
this.config = CobblemonConfig()
this.saveConfig()
}
config.lastSavedVersion = VERSION
this.saveConfig()
bestSpawner.loadConfig()
PokemonSpecies.observable.subscribe { starterConfig = this.loadStarterConfig() }
}
fun loadStarterConfig(): StarterConfig {
val file = File("config/cobblemon/starters.json")
file.parentFile.mkdirs()
if (!file.exists()) {
val config = StarterConfig()
val pw = PrintWriter(file)
StarterConfig.GSON.toJson(config, pw)
pw.close()
if (config.exportStarterConfig) {
val file = File("config/cobblemon/starters.json")
file.parentFile.mkdirs()
if (!file.exists()) {
val config = StarterConfig()
val pw = PrintWriter(file)
StarterConfig.GSON.toJson(config, pw)
pw.close()
return config
}
val reader = FileReader(file)
val config = StarterConfig.GSON.fromJson(reader, StarterConfig::class.java)
reader.close()
return config
} else {
return StarterConfig()
}
val reader = FileReader(file)
val config = StarterConfig.GSON.fromJson(reader, StarterConfig::class.java)
reader.close()
return config
}
fun saveConfig() {
@@ -398,4 +470,18 @@ object Cobblemon {
exception.printStackTrace()
}
}
private fun registerArgumentTypes() {
this.implementation.registerCommandArgument(cobblemonResource("pokemon"), PokemonArgumentType::class, ConstantArgumentSerializer.of(PokemonArgumentType::pokemon))
this.implementation.registerCommandArgument(cobblemonResource("pokemon_properties"), PokemonPropertiesArgumentType::class, ConstantArgumentSerializer.of(PokemonPropertiesArgumentType::properties))
this.implementation.registerCommandArgument(cobblemonResource("spawn_bucket"), SpawnBucketArgumentType::class, ConstantArgumentSerializer.of(SpawnBucketArgumentType::spawnBucket))
this.implementation.registerCommandArgument(cobblemonResource("move"), MoveArgumentType::class, ConstantArgumentSerializer.of(MoveArgumentType::move))
this.implementation.registerCommandArgument(cobblemonResource("party_slot"), PartySlotArgumentType::class, ConstantArgumentSerializer.of(PartySlotArgumentType::partySlot))
this.implementation.registerCommandArgument(cobblemonResource("pokemon_store"), PokemonStoreArgumentType::class, ConstantArgumentSerializer.of(PokemonStoreArgumentType::pokemonStore))
}
private fun queueRegistryCreation() {
this.implementation.createRegistry(CobblemonRegistryKeys.ELEMENTAL_TYPE, ElementalType.CODEC, ElementalType.NETWORK_CODEC)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,29 +8,28 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.registry.CompletableRegistry
import com.cobblemon.mod.common.world.block.entity.HealingMachineBlockEntity
import com.cobblemon.mod.common.world.block.entity.PCBlockEntity
import dev.architectury.registry.registries.RegistrySupplier
import java.util.function.Supplier
import com.cobblemon.mod.common.block.entity.BerryBlockEntity
import com.cobblemon.mod.common.block.entity.HealingMachineBlockEntity
import com.cobblemon.mod.common.block.entity.PCBlockEntity
import com.cobblemon.mod.common.block.entity.PokemonPastureBlockEntity
import com.cobblemon.mod.common.platform.PlatformRegistry
import net.minecraft.block.entity.BlockEntityType
import net.minecraft.util.registry.Registry
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
object CobblemonBlockEntities : CompletableRegistry<BlockEntityType<*>>(Registry.BLOCK_ENTITY_TYPE_KEY) {
private fun <T : BlockEntityType<*>> register(name: String, blockEntityType: Supplier<T>) : RegistrySupplier<T> {
return queue(name, blockEntityType)
}
object CobblemonBlockEntities : PlatformRegistry<Registry<BlockEntityType<*>>, RegistryKey<Registry<BlockEntityType<*>>>, BlockEntityType<*>>() {
override val registry: Registry<BlockEntityType<*>> = Registries.BLOCK_ENTITY_TYPE
override val registryKey: RegistryKey<Registry<BlockEntityType<*>>> = RegistryKeys.BLOCK_ENTITY_TYPE
@JvmField
val HEALING_MACHINE: BlockEntityType<HealingMachineBlockEntity> = this.create("healing_machine", BlockEntityType.Builder.create(::HealingMachineBlockEntity, CobblemonBlocks.HEALING_MACHINE).build(null))
@JvmField
val PC: BlockEntityType<PCBlockEntity> = this.create("pc", BlockEntityType.Builder.create(::PCBlockEntity, CobblemonBlocks.PC).build(null))
val BERRY = this.create("berry", BlockEntityType.Builder.create(::BerryBlockEntity, *CobblemonBlocks.berries().values.toTypedArray()).build(null))
@JvmField
val PASTURE: BlockEntityType<PokemonPastureBlockEntity> = this.create("pasture", BlockEntityType.Builder.create(::PokemonPastureBlockEntity, CobblemonBlocks.PASTURE).build(null))
val HEALING_MACHINE = com.cobblemon.mod.common.CobblemonBlockEntities.register("healing_machine") {
BlockEntityType.Builder.create(
::HealingMachineBlockEntity,
CobblemonBlocks.HEALING_MACHINE.get()
).build(null)
}
val PC = com.cobblemon.mod.common.CobblemonBlockEntities.register("pc") {
BlockEntityType.Builder.create(
::PCBlockEntity,
CobblemonBlocks.PC.get()
).build(null)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -9,158 +9,327 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.apricorn.Apricorn
import com.cobblemon.mod.common.registry.CompletableRegistry
import com.cobblemon.mod.common.world.block.ApricornBlock
import com.cobblemon.mod.common.world.block.ApricornSaplingBlock
import com.cobblemon.mod.common.world.block.HealingMachineBlock
import com.cobblemon.mod.common.world.block.PCBlock
import dev.architectury.registry.registries.RegistrySupplier
import net.minecraft.block.AbstractBlock
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.block.Blocks
import net.minecraft.block.DoorBlock
import net.minecraft.block.FenceBlock
import net.minecraft.block.FenceGateBlock
import net.minecraft.block.LeavesBlock
import net.minecraft.block.MapColor
import net.minecraft.block.Material
import net.minecraft.block.OreBlock
import net.minecraft.block.PillarBlock
import net.minecraft.block.PressurePlateBlock
import net.minecraft.block.SlabBlock
import net.minecraft.block.StairsBlock
import net.minecraft.block.TrapdoorBlock
import net.minecraft.block.WoodenButtonBlock
import net.minecraft.entity.EntityType
import com.cobblemon.mod.common.block.*
import com.cobblemon.mod.common.block.MintBlock.MintType
import com.cobblemon.mod.common.mixin.invoker.DoorBlockInvoker
import com.cobblemon.mod.common.mixin.invoker.PressurePlateBlockInvoker
import com.cobblemon.mod.common.mixin.invoker.StairsBlockInvoker
import com.cobblemon.mod.common.mixin.invoker.TrapdoorBlockInvoker
import com.cobblemon.mod.common.mixin.invoker.*
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.block.BerryBlock
import net.minecraft.block.*
import net.minecraft.block.piston.PistonBehavior
import net.minecraft.entity.effect.StatusEffects
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.sound.BlockSoundGroup
import net.minecraft.util.math.Direction
import net.minecraft.util.Identifier
import net.minecraft.util.math.intprovider.UniformIntProvider
import net.minecraft.util.registry.Registry
object CobblemonBlocks : CompletableRegistry<Block>(Registry.BLOCK_KEY) {
/**
* Evolution Ores
*/
@Suppress("SameParameterValue", "HasPlatformType", "MemberVisibilityCanBePrivate", "unused")
object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<Block>>, Block>() {
val DAWN_STONE_ORE = this.evolutionStoneOre("dawn_stone_ore")
val DUSK_STONE_ORE = this.evolutionStoneOre("dusk_stone_ore")
val FIRE_STONE_ORE = this.evolutionStoneOre("fire_stone_ore")
val ICE_STONE_ORE = this.evolutionStoneOre("ice_stone_ore")
val LEAF_STONE_ORE = this.evolutionStoneOre("leaf_stone_ore")
val MOON_STONE_ORE = this.evolutionStoneOre("moon_stone_ore")
val DRIPSTONE_MOON_STONE_ORE = this.evolutionStoneOre("dripstone_moon_stone_ore")
val SHINY_STONE_ORE = this.evolutionStoneOre("shiny_stone_ore")
val SUN_STONE_ORE = this.evolutionStoneOre("sun_stone_ore")
val THUNDER_STONE_ORE = this.evolutionStoneOre("thunder_stone_ore")
val WATER_STONE_ORE = this.evolutionStoneOre("water_stone_ore")
override val registry: Registry<Block> = Registries.BLOCK
override val registryKey: RegistryKey<Registry<Block>> = RegistryKeys.BLOCK
/**
* Deepslate separator
*/
val APRICORN_BLOCK_SET_TYPE = BlockSetType("apricorn")
val APRICORN_WOOD_TYPE = WoodType.register(WoodType("apricorn", APRICORN_BLOCK_SET_TYPE))
// Evolution Ores
@JvmField
val DAWN_STONE_ORE = evolutionStoneOre("dawn_stone_ore")
@JvmField
val DUSK_STONE_ORE = evolutionStoneOre("dusk_stone_ore")
@JvmField
val FIRE_STONE_ORE = evolutionStoneOre("fire_stone_ore")
@JvmField
val ICE_STONE_ORE = evolutionStoneOre("ice_stone_ore")
@JvmField
val LEAF_STONE_ORE = evolutionStoneOre("leaf_stone_ore")
@JvmField
val MOON_STONE_ORE = evolutionStoneOre("moon_stone_ore")
@JvmField
val DRIPSTONE_MOON_STONE_ORE = evolutionStoneOre("dripstone_moon_stone_ore")
@JvmField
val SHINY_STONE_ORE = evolutionStoneOre("shiny_stone_ore")
@JvmField
val SUN_STONE_ORE = evolutionStoneOre("sun_stone_ore")
@JvmField
val THUNDER_STONE_ORE = evolutionStoneOre("thunder_stone_ore")
@JvmField
val WATER_STONE_ORE = evolutionStoneOre("water_stone_ore")
@JvmField
val DEEPSLATE_DAWN_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_dawn_stone_ore")
@JvmField
val DEEPSLATE_DUSK_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_dusk_stone_ore")
@JvmField
val DEEPSLATE_FIRE_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_fire_stone_ore")
@JvmField
val DEEPSLATE_ICE_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_ice_stone_ore")
@JvmField
val DEEPSLATE_LEAF_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_leaf_stone_ore")
@JvmField
val DEEPSLATE_MOON_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_moon_stone_ore")
@JvmField
val DEEPSLATE_SHINY_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_shiny_stone_ore")
@JvmField
val DEEPSLATE_SUN_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_sun_stone_ore")
@JvmField
val DEEPSLATE_THUNDER_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_thunder_stone_ore")
@JvmField
val DEEPSLATE_WATER_STONE_ORE = this.deepslateEvolutionStoneOre("deepslate_water_stone_ore")
/**
* Apricorns
*/
val APRICORN_LOG = queue("apricorn_log") {
log(
MapColor.DIRT_BROWN,
MapColor.BROWN
)
}
val STRIPPED_APRICORN_LOG = queue("stripped_apricorn_log") {
log(
MapColor.DIRT_BROWN,
MapColor.DIRT_BROWN
)
}
val APRICORN_WOOD = queue("apricorn_wood") {
log(
MapColor.DIRT_BROWN,
MapColor.DIRT_BROWN
)
}
val STRIPPED_APRICORN_WOOD = queue("stripped_apricorn_wood") {
log(
MapColor.DIRT_BROWN,
MapColor.DIRT_BROWN
)
}
val APRICORN_PLANKS = queue("apricorn_planks") { Block(AbstractBlock.Settings.of(Material.WOOD, MapColor.DIRT_BROWN).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)) }
val APRICORN_LEAVES = queue("apricorn_leaves") { com.cobblemon.mod.common.CobblemonBlocks.leaves(BlockSoundGroup.GRASS) }
val APRICORN_FENCE = queue("apricorn_fence") { FenceBlock(AbstractBlock.Settings.of(Material.WOOD, APRICORN_PLANKS.get().defaultMapColor).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)) }
val APRICORN_FENCE_GATE = queue("apricorn_fence_gate") { FenceGateBlock(AbstractBlock.Settings.of(Material.WOOD, APRICORN_PLANKS.get().defaultMapColor).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)) }
val APRICORN_BUTTON = queue("apricorn_button") { WoodenButtonBlock(AbstractBlock.Settings.of(Material.DECORATION).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD)) }
val APRICORN_PRESSURE_PLATE = queue("apricorn_pressure_plate") { PressurePlateBlock(PressurePlateBlock.ActivationRule.EVERYTHING, AbstractBlock.Settings.of(Material.WOOD, APRICORN_PLANKS.get().defaultMapColor).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD)) }
// Apricorns
@JvmField
val APRICORN_LOG = log("apricorn_log", arg2 = MapColor.BROWN)
@JvmField
val STRIPPED_APRICORN_LOG = log("stripped_apricorn_log")
@JvmField
val APRICORN_WOOD = log("apricorn_wood")
@JvmField
val STRIPPED_APRICORN_WOOD = log("stripped_apricorn_wood")
@JvmField
val APRICORN_PLANKS = this.create("apricorn_planks", Block(AbstractBlock.Settings.create().mapColor(MapColor.DIRT_BROWN).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)))
@JvmField
val APRICORN_LEAVES = leaves("apricorn_leaves")
@JvmField
val APRICORN_FENCE = this.create("apricorn_fence", FenceBlock(AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)))
@JvmField
val APRICORN_FENCE_GATE = this.create("apricorn_fence_gate", FenceGateBlock(AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD), APRICORN_WOOD_TYPE))
@JvmField // Note At the time of 1.20.0 we don't need our own BlockSetType for Apricorn wood
val APRICORN_BUTTON = this.create("apricorn_button", BlocksInvoker.createWoodenButtonBlock(BlockSetType.OAK))
@JvmField
val APRICORN_PRESSURE_PLATE = this.create("apricorn_pressure_plate", PressurePlateBlockInvoker.`cobblemon$create`(PressurePlateBlock.ActivationRule.EVERYTHING, AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD), APRICORN_BLOCK_SET_TYPE))
// Tag was removed be sure to add it back when implemented
//val APRICORN_SIGN = queue("apricorn_sign") { StandingSignBlock(AbstractBlock.Settings.of(Material.WOOD).noCollission().strength(1.0f).sounds(BlockSoundGroup.WOOD), APRICORN_WOOD_TYPE) }
//val APRICORN_WALL_SIGN = queue("apricorn_wall_sign") { WallSignBlock(AbstractBlock.Settings.of(Material.WOOD).noCollission().strength(1.0f).sounds(BlockSoundGroup.WOOD).dropsLike(APRICORN_SIGN), APRICORN_WOOD_TYPE) }
val APRICORN_SLAB = queue("apricorn_slab") { SlabBlock(AbstractBlock.Settings.of(Material.WOOD, MapColor.OAK_TAN).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)) }
val APRICORN_STAIRS = queue("apricorn_stairs") { StairsBlock(
APRICORN_PLANKS.get().defaultState, AbstractBlock.Settings.copy(
APRICORN_PLANKS.get())) }
val APRICORN_DOOR = queue("apricorn_door") { DoorBlock(AbstractBlock.Settings.of(Material.WOOD, APRICORN_PLANKS.get().defaultMapColor).strength(3.0F).sounds(BlockSoundGroup.WOOD).nonOpaque()) }
val APRICORN_TRAPDOOR = queue("apricorn_trapdoor") { TrapdoorBlock(AbstractBlock.Settings.of(Material.WOOD, MapColor.OAK_TAN).strength(3.0F).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning { _, _, _, _ -> false }) }
@JvmField
val APRICORN_SLAB = this.create("apricorn_slab", SlabBlock(AbstractBlock.Settings.create().mapColor(MapColor.OAK_TAN).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)))
@JvmField
val APRICORN_STAIRS = this.create("apricorn_stairs", StairsBlockInvoker.`cobblemon$create`(APRICORN_PLANKS.defaultState, AbstractBlock.Settings.copy(APRICORN_PLANKS)))
@JvmField
val APRICORN_DOOR = this.create("apricorn_door", DoorBlockInvoker.`cobblemon$create`(AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).strength(3.0F).sounds(BlockSoundGroup.WOOD).nonOpaque(), APRICORN_BLOCK_SET_TYPE))
@JvmField
val APRICORN_TRAPDOOR = this.create("apricorn_trapdoor", TrapdoorBlockInvoker.`cobblemon$create`(AbstractBlock.Settings.create().mapColor(MapColor.OAK_TAN).strength(3.0F).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning { _, _, _, _ -> false }, APRICORN_BLOCK_SET_TYPE))
private val PLANT_PROPERTIES = AbstractBlock.Settings.of(Material.PLANT).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.GRASS)
val BLACK_APRICORN_SAPLING = queue("black_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.BLACK) }
val BLUE_APRICORN_SAPLING = queue("blue_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.BLUE) }
val GREEN_APRICORN_SAPLING = queue("green_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.GREEN) }
val PINK_APRICORN_SAPLING = queue("pink_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.PINK) }
val RED_APRICORN_SAPLING = queue("red_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.RED) }
val WHITE_APRICORN_SAPLING = queue("white_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.WHITE) }
val YELLOW_APRICORN_SAPLING = queue("yellow_apricorn_sapling") { ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.YELLOW) }
private val PLANT_PROPERTIES = AbstractBlock.Settings.create().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.GRASS).pistonBehavior(PistonBehavior.DESTROY)
@JvmField
val BLACK_APRICORN_SAPLING = this.create("black_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.BLACK))
@JvmField
val BLUE_APRICORN_SAPLING = this.create("blue_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.BLUE))
@JvmField
val GREEN_APRICORN_SAPLING = this.create("green_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.GREEN))
@JvmField
val PINK_APRICORN_SAPLING = this.create("pink_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.PINK))
@JvmField
val RED_APRICORN_SAPLING = this.create("red_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.RED))
@JvmField
val WHITE_APRICORN_SAPLING = this.create("white_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.WHITE))
@JvmField
val YELLOW_APRICORN_SAPLING = this.create("yellow_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.YELLOW))
val BLACK_APRICORN = registerApricornBlock("black_apricorn", Apricorn.BLACK)
val BLUE_APRICORN = registerApricornBlock("blue_apricorn", Apricorn.BLUE)
val GREEN_APRICORN = registerApricornBlock("green_apricorn", Apricorn.GREEN)
val PINK_APRICORN = registerApricornBlock("pink_apricorn", Apricorn.PINK)
val RED_APRICORN = registerApricornBlock("red_apricorn", Apricorn.RED)
val WHITE_APRICORN = registerApricornBlock("white_apricorn", Apricorn.WHITE)
val YELLOW_APRICORN = registerApricornBlock("yellow_apricorn", Apricorn.YELLOW)
@JvmField
val MEDICINAL_LEEK = this.create("medicinal_leek", MedicinalLeekBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).burnable().mapColor(MapColor.DULL_RED).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val ENERGY_ROOT = this.create("energy_root", EnergyRootBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).burnable().mapColor(MapColor.DIRT_BROWN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.ROOTS)))
@JvmField
val BIG_ROOT = this.create("big_root", BigRootBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).burnable().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.ROOTS)))
@JvmField
val REVIVAL_HERB = this.create("revival_herb", RevivalHerbBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).mapColor(MapColor.DARK_GREEN).burnable().noCollision().breakInstantly().sounds(BlockSoundGroup.CROP)))
val HEALING_MACHINE = queue("healing_machine") { HealingMachineBlock(AbstractBlock.Settings.of(Material.METAL, MapColor.IRON_GRAY).sounds(BlockSoundGroup.METAL).strength(2f).nonOpaque()) }
val PC = queue("pc") { PCBlock(AbstractBlock.Settings.of(Material.METAL, MapColor.IRON_GRAY).sounds(BlockSoundGroup.METAL).strength(2F).nonOpaque()) }
@JvmField
val BLACK_APRICORN = apricornBlock("black_apricorn", Apricorn.BLACK)
@JvmField
val BLUE_APRICORN = apricornBlock("blue_apricorn", Apricorn.BLUE)
@JvmField
val GREEN_APRICORN = apricornBlock("green_apricorn", Apricorn.GREEN)
@JvmField
val PINK_APRICORN = apricornBlock("pink_apricorn", Apricorn.PINK)
@JvmField
val RED_APRICORN = apricornBlock("red_apricorn", Apricorn.RED)
@JvmField
val WHITE_APRICORN = apricornBlock("white_apricorn", Apricorn.WHITE)
@JvmField
val YELLOW_APRICORN = apricornBlock("yellow_apricorn", Apricorn.YELLOW)
private fun registerApricornBlock(id: String, apricorn: Apricorn): RegistrySupplier<ApricornBlock> {
return queue(id) { ApricornBlock(AbstractBlock.Settings.of(Material.PLANT).ticksRandomly().strength(0.2f, 3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque(), apricorn) }
@JvmField
val HEALING_MACHINE = create(
"healing_machine",
HealingMachineBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.IRON_GRAY)
.sounds(BlockSoundGroup.METAL)
.pistonBehavior(PistonBehavior.BLOCK)
.strength(2f)
.nonOpaque()
.luminance { if (it.get(HealingMachineBlock.CHARGE_LEVEL) >= HealingMachineBlock.MAX_CHARGE_LEVEL) 7 else 2 }
)
)
@JvmField
val PC = create(
"pc",
PCBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.IRON_GRAY)
.sounds(BlockSoundGroup.METAL)
.pistonBehavior(PistonBehavior.BLOCK)
.strength(2F)
.nonOpaque()
.luminance { if ((it.get(PCBlock.ON) as Boolean) && (it.get(PCBlock.PART) == PCBlock.PCPart.TOP)) 10 else 0 }
)
)
@JvmField
val RED_MINT = create("red_mint", MintBlock(MintType.RED, AbstractBlock.Settings.create().mapColor(MapColor.RED).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val BLUE_MINT = create("blue_mint", MintBlock(MintType.BLUE, AbstractBlock.Settings.create().mapColor(MapColor.BLUE).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val CYAN_MINT = create("cyan_mint", MintBlock(MintType.CYAN, AbstractBlock.Settings.create().mapColor(MapColor.CYAN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val PINK_MINT = create("pink_mint", MintBlock(MintType.PINK, AbstractBlock.Settings.create().mapColor(MapColor.PINK).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val GREEN_MINT = create("green_mint", MintBlock(MintType.GREEN, AbstractBlock.Settings.create().mapColor(MapColor.GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val WHITE_MINT = create("white_mint", MintBlock(MintType.WHITE, AbstractBlock.Settings.create().mapColor(MapColor.WHITE).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val PASTURE = create(
"pasture",
PastureBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.BROWN)
.sounds(BlockSoundGroup.WOOD)
.strength(2F)
.nonOpaque()
.pistonBehavior(PistonBehavior.BLOCK)
.luminance { if ((it.get(PastureBlock.ON) as Boolean) && (it.get(PastureBlock.PART) == PastureBlock.PasturePart.TOP)) 10 else 0 }
)
)
@JvmField
val VIVICHOKE_SEEDS = this.create("vivichoke_seeds", VivichokeBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).burnable().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)))
@JvmField
val PEP_UP_FLOWER = this.create("pep_up_flower", FlowerBlock(StatusEffects.LEVITATION, 10, AbstractBlock.Settings.create().mapColor(MapColor.DARK_GREEN).noCollision().breakInstantly().sounds(BlockSoundGroup.GRASS).offset(AbstractBlock.OffsetType.XZ).pistonBehavior(PistonBehavior.DESTROY)))
@JvmField
val POTTED_PEP_UP_FLOWER = this.create("potted_pep_up_flower", BlocksInvoker.createFlowerPotBlock(PEP_UP_FLOWER))
/**
* Returns a map of all the blocks that can be stripped with an axe in the format of input - output.
*
* @return A map of all the blocks that can be stripped with an axe in the format of input - output.
*/
fun strippedBlocks(): Map<Block, Block> = mapOf(
APRICORN_WOOD to STRIPPED_APRICORN_WOOD,
APRICORN_LOG to STRIPPED_APRICORN_LOG
)
private fun apricornBlock(name: String, apricorn: Apricorn): ApricornBlock = this.create(name, ApricornBlock(AbstractBlock.Settings.create().mapColor(apricorn.mapColor()).ticksRandomly().strength(Blocks.OAK_LOG.hardness, Blocks.OAK_LOG.blastResistance).sounds(BlockSoundGroup.WOOD).nonOpaque(), apricorn))
private val berries = mutableMapOf<Identifier, BerryBlock>()
val AGUAV_BERRY = this.berryBlock("aguav")
val APICOT_BERRY = this.berryBlock("apicot")
val ASPEAR_BERRY = this.berryBlock("aspear")
val BABIRI_BERRY = this.berryBlock("babiri")
val BELUE_BERRY = this.berryBlock("belue")
val BLUK_BERRY = this.berryBlock("bluk")
val CHARTI_BERRY = this.berryBlock("charti")
val CHERI_BERRY = this.berryBlock("cheri")
val CHESTO_BERRY = this.berryBlock("chesto")
val CHILAN_BERRY = this.berryBlock("chilan")
val CHOPLE_BERRY = this.berryBlock("chople")
val COBA_BERRY = this.berryBlock("coba")
val COLBUR_BERRY = this.berryBlock("colbur")
val CORNN_BERRY = this.berryBlock("cornn")
val CUSTAP_BERRY = this.berryBlock("custap")
val DURIN_BERRY = this.berryBlock("durin")
val ENIGMA_BERRY = this.berryBlock("enigma")
val FIGY_BERRY = this.berryBlock("figy")
val GANLON_BERRY = this.berryBlock("ganlon")
val GREPA_BERRY = this.berryBlock("grepa")
val HABAN_BERRY = this.berryBlock("haban")
val HONDEW_BERRY = this.berryBlock("hondew")
val HOPO_BERRY = this.berryBlock("hopo")
val IAPAPA_BERRY = this.berryBlock("iapapa")
val JABOCA_BERRY = this.berryBlock("jaboca")
val KASIB_BERRY = this.berryBlock("kasib")
val KEBIA_BERRY = this.berryBlock("kebia")
val KEE_BERRY = this.berryBlock("kee")
val KELPSY_BERRY = this.berryBlock("kelpsy")
val LANSAT_BERRY = this.berryBlock("lansat")
val LEPPA_BERRY = this.berryBlock("leppa")
val LIECHI_BERRY = this.berryBlock("liechi")
val LUM_BERRY = this.berryBlock("lum")
val MAGO_BERRY = this.berryBlock("mago")
val MAGOST_BERRY = this.berryBlock("magost")
val MARANGA_BERRY = this.berryBlock("maranga")
val MICLE_BERRY = this.berryBlock("micle")
val NANAB_BERRY = this.berryBlock("nanab")
val NOMEL_BERRY = this.berryBlock("nomel")
val OCCA_BERRY = this.berryBlock("occa")
val ORAN_BERRY = this.berryBlock("oran")
val PAMTRE_BERRY = this.berryBlock("pamtre")
val PASSHO_BERRY = this.berryBlock("passho")
val PAYAPA_BERRY = this.berryBlock("payapa")
val PECHA_BERRY = this.berryBlock("pecha")
val PERSIM_BERRY = this.berryBlock("persim")
val PETAYA_BERRY = this.berryBlock("petaya")
val PINAP_BERRY = this.berryBlock("pinap")
val POMEG_BERRY = this.berryBlock("pomeg")
val QUALOT_BERRY = this.berryBlock("qualot")
val RABUTA_BERRY = this.berryBlock("rabuta")
val RAWST_BERRY = this.berryBlock("rawst")
val RAZZ_BERRY = this.berryBlock("razz")
val RINDO_BERRY = this.berryBlock("rindo")
val ROSELI_BERRY = this.berryBlock("roseli")
val ROWAP_BERRY = this.berryBlock("rowap")
val SALAC_BERRY = this.berryBlock("salac")
val SHUCA_BERRY = this.berryBlock("shuca")
val SITRUS_BERRY = this.berryBlock("sitrus")
val SPELON_BERRY = this.berryBlock("spelon")
val STARF_BERRY = this.berryBlock("starf")
val TAMATO_BERRY = this.berryBlock("tamato")
val TANGA_BERRY = this.berryBlock("tanga")
val TOUGA_BERRY = this.berryBlock("touga")
val WACAN_BERRY = this.berryBlock("wacan")
val WATMEL_BERRY = this.berryBlock("watmel")
val WEPEAR_BERRY = this.berryBlock("wepear")
val WIKI_BERRY = this.berryBlock("wiki")
val YACHE_BERRY = this.berryBlock("yache")
fun berries() = this.berries.toMap()
private fun berryBlock(name: String): BerryBlock {
val identifier = cobblemonResource("${name}_berry")
val block = this.create(identifier.path, BerryBlock(identifier, AbstractBlock.Settings.copy(Blocks.WHEAT).dynamicBounds().sounds(BlockSoundGroup.CROP).strength(0.2F)))
this.berries[identifier] = block
return block
}
/**
* Helper method for creating logs
* copied over from Vanilla
*/
private fun log(arg: MapColor, arg2: MapColor): PillarBlock {
return PillarBlock(AbstractBlock.Settings.of(Material.WOOD) { arg3: BlockState ->
if (arg3.get(PillarBlock.AXIS) === Direction.Axis.Y) arg else arg2
}.strength(2.0f).sounds(BlockSoundGroup.WOOD))
private fun log(name: String, arg: MapColor = MapColor.DIRT_BROWN, arg2: MapColor = MapColor.DIRT_BROWN): PillarBlock {
val block = BlocksInvoker.createLogBlock(arg, arg2)
return this.create(name, block)
}
private fun evolutionStoneOre(name: String) = this.queue(name) { OreBlock(AbstractBlock.Settings.copy(Blocks.IRON_ORE), UniformIntProvider.create(1, 2)) }
private fun evolutionStoneOre(name: String) = this.create(name, ExperienceDroppingBlock(AbstractBlock.Settings.copy(Blocks.IRON_ORE), UniformIntProvider.create(1, 2)))
private fun deepslateEvolutionStoneOre(name: String) = this.queue(name) { OreBlock(AbstractBlock.Settings.copy(Blocks.DEEPSLATE_IRON_ORE), UniformIntProvider.create(1, 2)) }
private fun deepslateEvolutionStoneOre(name: String) = this.create(name, ExperienceDroppingBlock(AbstractBlock.Settings.copy(Blocks.DEEPSLATE_IRON_ORE), UniformIntProvider.create(1, 2)))
/**
* Helper method for creating leaves
* copied over from Vanilla
*/
private fun leaves(sound: BlockSoundGroup): LeavesBlock {
return LeavesBlock(
AbstractBlock.Settings.of(Material.LEAVES).strength(0.2f).ticksRandomly().sounds(sound).nonOpaque()
.allowsSpawning { _, _, _, type -> type === EntityType.OCELOT || type === EntityType.PARROT }
.suffocates { _, _, _ -> false }
.blockVision { _, _, _ -> false })
private fun leaves(name: String): LeavesBlock {
val block = BlocksInvoker.createLeavesBlock(BlockSoundGroup.GRASS)
return this.create(name, block)
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -9,9 +9,34 @@
package com.cobblemon.mod.common
import java.util.function.Supplier
import net.minecraft.block.Block
import net.minecraft.block.entity.BlockEntity
import net.minecraft.block.entity.BlockEntityType
import net.minecraft.client.color.block.BlockColorProvider
import net.minecraft.client.color.item.ItemColorProvider
import net.minecraft.client.model.TexturedModelData
import net.minecraft.client.particle.ParticleFactory
import net.minecraft.client.particle.SpriteProvider
import net.minecraft.client.render.RenderLayer
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory
import net.minecraft.client.render.entity.model.EntityModelLayer
import net.minecraft.item.Item
import net.minecraft.particle.ParticleEffect
import net.minecraft.particle.ParticleType
import net.minecraft.resource.SynchronousResourceReloader
interface CobblemonClientImplementation {
fun registerLayer(modelLayer: EntityModelLayer, supplier: Supplier<TexturedModelData>)
fun <T : ParticleEffect> registerParticleFactory(
type: ParticleType<T>,
factory: (SpriteProvider) -> ParticleFactory<T>
)
fun registerBlockRenderType(layer: RenderLayer, vararg blocks: Block)
fun registerItemColors(provider: ItemColorProvider, vararg items: Item)
fun registerBlockColors(provider: BlockColorProvider, vararg blocks: Block)
fun <T : BlockEntity> registerBlockEntityRenderer(type: BlockEntityType<T>, factory: BlockEntityRendererFactory<T>)
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,22 +8,7 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.command.ChangeScaleAndSize
import com.cobblemon.mod.common.command.CheckSpawnsCommand
import com.cobblemon.mod.common.command.ClickTextCommand
import com.cobblemon.mod.common.command.FriendshipCommand
import com.cobblemon.mod.common.command.GetNBT
import com.cobblemon.mod.common.command.GivePokemon
import com.cobblemon.mod.common.command.HealPokemonCommand
import com.cobblemon.mod.common.command.LevelUp
import com.cobblemon.mod.common.command.OpenStarterScreenCommand
import com.cobblemon.mod.common.command.PokemonEditCommand
import com.cobblemon.mod.common.command.SpawnAllPokemon
import com.cobblemon.mod.common.command.SpawnPokemon
import com.cobblemon.mod.common.command.StopBattleCommand
import com.cobblemon.mod.common.command.TakePokemon
import com.cobblemon.mod.common.command.TeachCommand
import com.cobblemon.mod.common.command.TestCommand
import com.cobblemon.mod.common.command.*
import com.mojang.brigadier.CommandDispatcher
import net.minecraft.command.CommandRegistryAccess
import net.minecraft.server.command.CommandManager
@@ -35,7 +20,9 @@ object CobblemonCommands {
GivePokemon.register(dispatcher)
TakePokemon.register(dispatcher)
ChangeScaleAndSize.register(dispatcher)
ChangeWalkSpeed.register(dispatcher)
TestCommand.register(dispatcher)
ReloadShowdownCommand.register(dispatcher)
ClickTextCommand.register(dispatcher)
PokemonEditCommand.register(dispatcher)
TeachCommand.register(dispatcher)
@@ -47,5 +34,17 @@ object CobblemonCommands {
OpenStarterScreenCommand.register(dispatcher)
SpawnAllPokemon.register(dispatcher)
FriendshipCommand.register(dispatcher)
GiveAllPokemon.register(dispatcher)
HeldItemCommand.register(dispatcher, registry)
PcCommand.register(dispatcher)
SpawnPokemonFromPool.register(dispatcher)
PokeboxCommand.register(dispatcher)
TestStoreCommand.register(dispatcher)
QueryLearnsetCommand.register(dispatcher)
TestPcSlotCommand.register(dispatcher)
TestPartySlotCommand.register(dispatcher)
ClearPartyCommand.register(dispatcher)
ClearPCCommand.register(dispatcher)
PokemonRestartCommand.register(dispatcher)
}
}
@@ -1,41 +0,0 @@
/*
* Copyright (C) 2022 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
import net.minecraft.util.registry.RegistryEntry
import net.minecraft.world.gen.feature.ConfiguredFeature
import net.minecraft.world.gen.feature.ConfiguredFeatures
import net.minecraft.world.gen.feature.SingleStateFeatureConfig
object CobblemonConfiguredFeatures {
lateinit var BLACK_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
lateinit var BLUE_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
lateinit var GREEN_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
lateinit var PINK_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
lateinit var RED_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
lateinit var WHITE_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
lateinit var YELLOW_APRICORN_TREE: RegistryEntry<ConfiguredFeature<SingleStateFeatureConfig, *>>
fun register() {
BLACK_APRICORN_TREE = ConfiguredFeatures.register("black_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.BLACK_APRICORN.get().defaultState))
BLUE_APRICORN_TREE = ConfiguredFeatures.register("blue_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.BLUE_APRICORN.get().defaultState))
GREEN_APRICORN_TREE = ConfiguredFeatures.register("green_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.GREEN_APRICORN.get().defaultState))
PINK_APRICORN_TREE = ConfiguredFeatures.register("pink_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.PINK_APRICORN.get().defaultState))
RED_APRICORN_TREE = ConfiguredFeatures.register("red_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.RED_APRICORN.get().defaultState))
WHITE_APRICORN_TREE = ConfiguredFeatures.register("white_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.WHITE_APRICORN.get().defaultState))
YELLOW_APRICORN_TREE = ConfiguredFeatures.register("yellow_apricorn_tree", CobblemonFeatures.APRICORN_TREE_FEATURE.get(), SingleStateFeatureConfig(
CobblemonBlocks.YELLOW_APRICORN.get().defaultState))
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,70 +8,45 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.entity.EntityAttributeEvent
import com.cobblemon.mod.common.api.pokeball.PokeBalls
import com.cobblemon.mod.common.entity.pokeball.EmptyPokeBallEntity
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.registry.CompletableRegistry
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.util.cobblemonResource
import dev.architectury.registry.level.entity.EntityAttributeRegistry
import dev.architectury.registry.registries.RegistrySupplier
import net.minecraft.entity.Entity
import net.minecraft.entity.EntityType
import net.minecraft.entity.LivingEntity
import net.minecraft.entity.SpawnGroup
import net.minecraft.entity.attribute.DefaultAttributeContainer
import net.minecraft.entity.attribute.EntityAttributes
import net.minecraft.util.registry.Registry
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
object CobblemonEntities : CompletableRegistry<EntityType<*>>(Registry.ENTITY_TYPE_KEY) {
override fun register() {
super.register()
object CobblemonEntities : PlatformRegistry<Registry<EntityType<*>>, RegistryKey<Registry<EntityType<*>>>, EntityType<*>>() {
EntityAttributeRegistry.register(
{ POKEMON.get() },
{
DefaultAttributeContainer
.builder()
.add(EntityAttributes.GENERIC_FOLLOW_RANGE)
.add(EntityAttributes.GENERIC_MAX_HEALTH)
.add(EntityAttributes.GENERIC_MOVEMENT_SPEED)
.add(EntityAttributes.HORSE_JUMP_STRENGTH)
.add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE)
.add(EntityAttributes.GENERIC_ARMOR)
.add(EntityAttributes.GENERIC_ARMOR_TOUGHNESS)
.also { CobblemonEvents.ENTITY_ATTRIBUTE.post(EntityAttributeEvent(POKEMON.get(), it)) }
}
)
}
private fun <T : Entity> entity(
name: String,
entityTypeBuilder: EntityType.Builder<T>
): RegistrySupplier<EntityType<T>> {
return queue(name) { entityTypeBuilder.build(cobblemonResource(name).toString()) }
}
private fun <T : LivingEntity> livingEntity(
name: String,
entityTypeBuilder: EntityType.Builder<T>
): RegistrySupplier<EntityType<T>> {
return queue(name) { entityTypeBuilder.build(cobblemonResource("pokemon").toString()) }
}
val POKEMON = livingEntity(
name = "pokemon",
entityTypeBuilder = EntityType.Builder.create<PokemonEntity>(
{ _, world -> PokemonEntity(world) },
SpawnGroup.CREATURE
)
override val registry: Registry<EntityType<*>> = Registries.ENTITY_TYPE
override val registryKey: RegistryKey<Registry<EntityType<*>>> = RegistryKeys.ENTITY_TYPE
@JvmField
val POKEMON_KEY = cobblemonResource("pokemon")
@JvmField
val POKEMON: EntityType<PokemonEntity> = this.create(
POKEMON_KEY.path,
EntityType.Builder.create({ _, world -> PokemonEntity(world) }, SpawnGroup.CREATURE)
.build(POKEMON_KEY.toString())
)
val EMPTY_POKEBALL = entity(
name = "empty_pokeball",
entityTypeBuilder = EntityType.Builder.create<EmptyPokeBallEntity>(
{ _, world -> EmptyPokeBallEntity(PokeBalls.POKE_BALL, world) },
SpawnGroup.MISC
)
@JvmField
val EMPTY_POKEBALL_KEY = cobblemonResource("empty_pokeball")
@JvmField
val EMPTY_POKEBALL: EntityType<EmptyPokeBallEntity> = this.create(
EMPTY_POKEBALL_KEY.path,
EntityType.Builder.create({ _, world -> EmptyPokeBallEntity(PokeBalls.POKE_BALL, world) }, SpawnGroup.MISC)
.build(EMPTY_POKEBALL_KEY.toString())
)
fun registerAttributes(consumer: (EntityType<out LivingEntity>, DefaultAttributeContainer.Builder) -> Unit) {
consumer(POKEMON, PokemonEntity.createAttributes())
}
}
@@ -1,25 +0,0 @@
/*
* Copyright (C) 2022 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
import com.cobblemon.mod.common.registry.CompletableRegistry
import com.cobblemon.mod.common.world.feature.ApricornTreeFeature
import dev.architectury.registry.registries.RegistrySupplier
import java.util.function.Supplier
import net.minecraft.util.registry.Registry
import net.minecraft.world.gen.feature.Feature
import net.minecraft.world.gen.feature.SingleStateFeatureConfig
object CobblemonFeatures : CompletableRegistry<Feature<*>>(Registry.FEATURE_KEY) {
private fun <T : Feature<*>> register(name: String, feature: Supplier<T>) : RegistrySupplier<T> {
return queue(name, feature)
}
val APRICORN_TREE_FEATURE = register("apricorn_tree_feature") { ApricornTreeFeature(SingleStateFeatureConfig.CODEC) }
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,19 +8,226 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.api.net.ServerNetworkPacketHandler
import com.mojang.brigadier.arguments.ArgumentType
import com.mojang.serialization.Codec
import kotlin.reflect.KClass
import net.minecraft.advancement.criterion.Criterion
import net.minecraft.command.argument.serialize.ArgumentSerializer
import net.minecraft.network.PacketByteBuf
import net.minecraft.network.listener.ClientPlayPacketListener
import net.minecraft.network.packet.Packet
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.tag.TagKey
import net.minecraft.resource.ResourceManager
import net.minecraft.resource.ResourceReloader
import net.minecraft.resource.ResourceType
import net.minecraft.server.MinecraftServer
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
import net.minecraft.world.GameRules
import net.minecraft.world.biome.Biome
import net.minecraft.world.gen.GenerationStep
import net.minecraft.world.gen.feature.PlacedFeature
import org.jetbrains.annotations.ApiStatus
interface CobblemonImplementation {
val modAPI: ModAPI
/**
*
*/
val networkManager: NetworkManager
/**
* TODO
*
* @return
*/
fun environment(): Environment
/**
* TODO
*
* @param id
* @return
*/
fun isModInstalled(id: String): Boolean
/**
* TODO
*
*/
fun registerPermissionValidator()
/**
* TODO
*
*/
fun registerSoundEvents()
/**
* TODO
*
*/
fun registerItems()
/**
* TODO
*
*/
fun registerBlocks()
/**
* TODO
*
*/
fun registerEntityTypes()
/**
* TODO
*
*/
fun registerEntityAttributes()
/**
* TODO
*
*/
fun registerBlockEntityTypes()
/**
* TODO
*
*/
fun registerWorldGenFeatures()
fun registerParticles()
/**
* Add a feature to the current platform implementation.
*
* @param feature The [PlacedFeature] being added.
* @param step The [GenerationStep.Feature] of this feature.
* @param validTag The [TagKey] required by the [Biome] for this feature to generate in, if null all biomes are valid.
*/
fun addFeatureToWorldGen(feature: RegistryKey<PlacedFeature>, step: GenerationStep.Feature, validTag: TagKey<Biome>?)
/**
* TODO
*
* @param A
* @param T
* @param identifier
* @param argumentClass
* @param serializer
*/
fun <A : ArgumentType<*>, T : ArgumentSerializer.ArgumentTypeProperties<A>> registerCommandArgument(identifier: Identifier, argumentClass: KClass<A>, serializer: ArgumentSerializer<A, T>)
/**
* TODO
*
* @param T
* @param name
* @param category
* @param type
* @return
*/
fun <T : GameRules.Rule<T>> registerGameRule(name: String, category: GameRules.Category, type: GameRules.Type<T>): GameRules.Key<T>
/**
* TODO
*
* @param T
* @param criteria
* @return
*/
fun <T : Criterion<*>> registerCriteria(criteria: T): T
/**
* TODO
*
* @param identifier
* @param reloader
* @param type
* @param dependencies
*/
fun registerResourceReloader(identifier: Identifier, reloader: ResourceReloader, type: ResourceType, dependencies: Collection<Identifier>)
/**
* TODO
*
* @return
*/
fun server(): MinecraftServer?
/**
* Handles platform independent reloading of a [JsonDataRegistry].
*
* @param registry The [JsonDataRegistry] to reload.
* @param manager The [ResourceManager] to reload from.
*/
fun <T> reloadJsonRegistry(registry: JsonDataRegistry<T>, manager: ResourceManager): HashMap<Identifier, T>
/**
* Queue the creation of a registry in the implementation.
* This registry will not be immediately available for access.
*
* @param T The type of the registry entries.
* @param registryKey The [RegistryKey] of this registry.
* @param codec The [Codec] used for this registry entries to be parsed on the server.
* @param networkCodec The [Codec] used when the client is synchronizing this registry from the server. If this is null the client will not require the registry aka not load any data.
*
* @see getRegistry
*/
@ApiStatus.Internal
fun <T> createRegistry(registryKey: RegistryKey<Registry<T>>, codec: Codec<T>, networkCodec: Codec<T>? = null)
/**
* Fetches a registry.
* This is intended for Cobblemon registries but can be used for any.
*
* @param T The type of the registry.
* @param registryKey The [RegistryKey] of the registry being fetched.
* @return The registry if present.
*
* @throws Exception If the registry doesn't exist or isn't loaded yet.
* @see createRegistry
*/
@ApiStatus.Internal
fun <T> getRegistry(registryKey: RegistryKey<Registry<T>>): Registry<T>
}
interface NetworkDelegate {
enum class ModAPI {
FABRIC,
FORGE
}
fun sendPacketToPlayer(player: ServerPlayerEntity, packet: NetworkPacket)
fun sendPacketToServer(packet: NetworkPacket)
fun <T : NetworkPacket> buildMessage(
packetClass: Class<T>,
toServer: Boolean
): CobblemonNetwork.PreparedMessage<T>
}
interface NetworkManager {
fun registerClientBound()
fun registerServerBound()
fun <T: NetworkPacket<T>> createClientBound(identifier: Identifier, kClass: KClass<T>, encoder: (T, PacketByteBuf) -> Unit, decoder: (PacketByteBuf) -> T, handler: ClientNetworkPacketHandler<T>)
fun <T: NetworkPacket<T>> createServerBound(identifier: Identifier, kClass: KClass<T>, encoder: (T, PacketByteBuf) -> Unit, decoder: (PacketByteBuf) -> T, handler: ServerNetworkPacketHandler<T>)
fun sendPacketToPlayer(player: ServerPlayerEntity, packet: NetworkPacket<*>)
fun sendPacketToServer(packet: NetworkPacket<*>)
fun <T : NetworkPacket<*>> asVanillaClientBound(packet: T): Packet<ClientPlayPacketListener>
}
enum class Environment {
CLIENT,
SERVER
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,179 +8,705 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.mulch.MulchVariant
import com.cobblemon.mod.common.api.pokeball.PokeBalls
import com.cobblemon.mod.common.api.pokemon.Natures
import com.cobblemon.mod.common.api.pokemon.stats.Stats
import com.cobblemon.mod.common.item.ApricornItem
import com.cobblemon.mod.common.item.CobblemonItem
import com.cobblemon.mod.common.item.CobblemonItemGroups
import com.cobblemon.mod.common.item.PokeBallItem
import com.cobblemon.mod.common.item.interactive.CandyItem
import com.cobblemon.mod.common.item.interactive.LinkCableItem
import com.cobblemon.mod.common.item.interactive.VitaminItem
import com.cobblemon.mod.common.api.pokemon.status.Statuses
import com.cobblemon.mod.common.block.BerryBlock
import com.cobblemon.mod.common.block.MintBlock.MintType
import com.cobblemon.mod.common.item.*
import com.cobblemon.mod.common.item.battle.DireHitItem
import com.cobblemon.mod.common.item.battle.GuardSpecItem
import com.cobblemon.mod.common.item.battle.XStatItem
import com.cobblemon.mod.common.item.berry.FriendshipRaisingBerryItem
import com.cobblemon.mod.common.item.berry.HealingBerryItem
import com.cobblemon.mod.common.item.berry.PPRestoringBerryItem
import com.cobblemon.mod.common.item.berry.PortionHealingBerryItem
import com.cobblemon.mod.common.item.berry.StatusCuringBerryItem
import com.cobblemon.mod.common.item.berry.VolatileCuringBerryItem
import com.cobblemon.mod.common.item.interactive.*
import com.cobblemon.mod.common.item.interactive.PotionItem
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.pokeball.PokeBall
import com.cobblemon.mod.common.registry.CompletableRegistry
import dev.architectury.registry.registries.RegistrySupplier
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.block.Block
import net.minecraft.item.AliasedBlockItem
import net.minecraft.item.BlockItem
import net.minecraft.item.Item
import net.minecraft.item.ItemGroup
import net.minecraft.util.registry.Registry
import net.minecraft.block.ComposterBlock
import net.minecraft.entity.LivingEntity
import net.minecraft.entity.effect.StatusEffectInstance
import net.minecraft.entity.effect.StatusEffects
import net.minecraft.item.*
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.util.Identifier
import net.minecraft.world.World
object CobblemonItems : CompletableRegistry<Item>(Registry.ITEM_KEY) {
@Suppress("unused")
object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<Item>>, Item>() {
override val registry: Registry<Item> = Registries.ITEM
override val registryKey: RegistryKey<Registry<Item>> = RegistryKeys.ITEM
private val pokeballs = mutableListOf<RegistrySupplier<PokeBallItem>>()
@JvmField
val pokeBalls = mutableListOf<PokeBallItem>()
@JvmField
val POKE_BALL = pokeBallItem(PokeBalls.POKE_BALL)
@JvmField
val CITRINE_BALL = pokeBallItem(PokeBalls.CITRINE_BALL)
@JvmField
val VERDANT_BALL = pokeBallItem(PokeBalls.VERDANT_BALL)
@JvmField
val AZURE_BALL = pokeBallItem(PokeBalls.AZURE_BALL)
@JvmField
val ROSEATE_BALL = pokeBallItem(PokeBalls.ROSEATE_BALL)
@JvmField
val SLATE_BALL = pokeBallItem(PokeBalls.SLATE_BALL)
@JvmField
val PREMIER_BALL = pokeBallItem(PokeBalls.PREMIER_BALL)
@JvmField
val GREAT_BALL = pokeBallItem(PokeBalls.GREAT_BALL)
@JvmField
val ULTRA_BALL = pokeBallItem(PokeBalls.ULTRA_BALL)
@JvmField
val SAFARI_BALL = pokeBallItem(PokeBalls.SAFARI_BALL)
@JvmField
val FAST_BALL = pokeBallItem(PokeBalls.FAST_BALL)
@JvmField
val LEVEL_BALL = pokeBallItem(PokeBalls.LEVEL_BALL)
@JvmField
val LURE_BALL = pokeBallItem(PokeBalls.LURE_BALL)
@JvmField
val HEAVY_BALL = pokeBallItem(PokeBalls.HEAVY_BALL)
@JvmField
val LOVE_BALL = pokeBallItem(PokeBalls.LOVE_BALL)
@JvmField
val FRIEND_BALL = pokeBallItem(PokeBalls.FRIEND_BALL)
@JvmField
val MOON_BALL = pokeBallItem(PokeBalls.MOON_BALL)
@JvmField
val SPORT_BALL = pokeBallItem(PokeBalls.SPORT_BALL)
@JvmField
val PARK_BALL = pokeBallItem(PokeBalls.PARK_BALL)
@JvmField
val NET_BALL = pokeBallItem(PokeBalls.NET_BALL)
@JvmField
val DIVE_BALL = pokeBallItem(PokeBalls.DIVE_BALL)
@JvmField
val NEST_BALL = pokeBallItem(PokeBalls.NEST_BALL)
@JvmField
val REPEAT_BALL = pokeBallItem(PokeBalls.REPEAT_BALL)
@JvmField
val TIMER_BALL = pokeBallItem(PokeBalls.TIMER_BALL)
@JvmField
val LUXURY_BALL = pokeBallItem(PokeBalls.LUXURY_BALL)
@JvmField
val DUSK_BALL = pokeBallItem(PokeBalls.DUSK_BALL)
@JvmField
val HEAL_BALL = pokeBallItem(PokeBalls.HEAL_BALL)
@JvmField
val QUICK_BALL = pokeBallItem(PokeBalls.QUICK_BALL)
@JvmField
val DREAM_BALL = pokeBallItem(PokeBalls.DREAM_BALL)
@JvmField
val BEAST_BALL = pokeBallItem(PokeBalls.BEAST_BALL)
@JvmField
val MASTER_BALL = pokeBallItem(PokeBalls.MASTER_BALL)
@JvmField
val CHERISH_BALL = pokeBallItem(PokeBalls.CHERISH_BALL)
val POKE_BALL = pokeballItem(PokeBalls.POKE_BALL)
val CITRINE_BALL = pokeballItem(PokeBalls.CITRINE_BALL)
val VERDANT_BALL = pokeballItem(PokeBalls.VERDANT_BALL)
val AZURE_BALL = pokeballItem(PokeBalls.AZURE_BALL)
val ROSEATE_BALL = pokeballItem(PokeBalls.ROSEATE_BALL)
val SLATE_BALL = pokeballItem(PokeBalls.SLATE_BALL)
val PREMIER_BALL = pokeballItem(PokeBalls.PREMIER_BALL)
val GREAT_BALL = pokeballItem(PokeBalls.GREAT_BALL)
val ULTRA_BALL = pokeballItem(PokeBalls.ULTRA_BALL)
val SAFARI_BALL = pokeballItem(PokeBalls.SAFARI_BALL)
val FAST_BALL = pokeballItem(PokeBalls.FAST_BALL)
val LEVEL_BALL = pokeballItem(PokeBalls.LEVEL_BALL)
val LURE_BALL = pokeballItem(PokeBalls.LURE_BALL)
val HEAVY_BALL = pokeballItem(PokeBalls.HEAVY_BALL)
val LOVE_BALL = pokeballItem(PokeBalls.LOVE_BALL)
val FRIEND_BALL = pokeballItem(PokeBalls.FRIEND_BALL)
val MOON_BALL = pokeballItem(PokeBalls.MOON_BALL)
val SPORT_BALL = pokeballItem(PokeBalls.SPORT_BALL)
val PARK_BALL = pokeballItem(PokeBalls.PARK_BALL)
val NET_BALL = pokeballItem(PokeBalls.NET_BALL)
val DIVE_BALL = pokeballItem(PokeBalls.DIVE_BALL)
val NEST_BALL = pokeballItem(PokeBalls.NEST_BALL)
val REPEAT_BALL = pokeballItem(PokeBalls.REPEAT_BALL)
val TIMER_BALL = pokeballItem(PokeBalls.TIMER_BALL)
val LUXURY_BALL = pokeballItem(PokeBalls.LUXURY_BALL)
val DUSK_BALL = pokeballItem(PokeBalls.DUSK_BALL)
val HEAL_BALL = pokeballItem(PokeBalls.HEAL_BALL)
val QUICK_BALL = pokeballItem(PokeBalls.QUICK_BALL)
val DREAM_BALL = pokeballItem(PokeBalls.DREAM_BALL)
val BEAST_BALL = pokeballItem(PokeBalls.BEAST_BALL)
val MASTER_BALL = pokeballItem(PokeBalls.MASTER_BALL)
val CHERISH_BALL = pokeballItem(PokeBalls.CHERISH_BALL)
@JvmField
val VIVICHOKE = create("vivichoke", Item(Item.Settings()))
val RED_APRICORN = queue("red_apricorn") { ApricornItem(CobblemonBlocks.RED_APRICORN.get()) }
val YELLOW_APRICORN = queue("yellow_apricorn") { ApricornItem(CobblemonBlocks.YELLOW_APRICORN.get()) }
val GREEN_APRICORN = queue("green_apricorn") { ApricornItem(CobblemonBlocks.GREEN_APRICORN.get()) }
val BLUE_APRICORN = queue("blue_apricorn") { ApricornItem(CobblemonBlocks.BLUE_APRICORN.get()) }
val PINK_APRICORN = queue("pink_apricorn") { ApricornItem(CobblemonBlocks.PINK_APRICORN.get()) }
val BLACK_APRICORN = queue("black_apricorn") { ApricornItem(CobblemonBlocks.BLACK_APRICORN.get()) }
val WHITE_APRICORN = queue("white_apricorn") { ApricornItem(CobblemonBlocks.WHITE_APRICORN.get()) }
@JvmField
val VIVICHOKE_SEEDS = create("vivichoke_seeds", VivichokeItem(CobblemonBlocks.VIVICHOKE_SEEDS))
val RED_APRICORN_SEED = queue("red_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.RED_APRICORN_SAPLING.get(), ItemGroup.MISC) }
val YELLOW_APRICORN_SEED = queue("yellow_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.YELLOW_APRICORN_SAPLING.get(), ItemGroup.MISC) }
val GREEN_APRICORN_SEED = queue("green_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.GREEN_APRICORN_SAPLING.get(), ItemGroup.MISC) }
val BLUE_APRICORN_SEED = queue("blue_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.BLUE_APRICORN_SAPLING.get(), ItemGroup.MISC) }
val PINK_APRICORN_SEED = queue("pink_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.PINK_APRICORN_SAPLING.get(), ItemGroup.MISC) }
val BLACK_APRICORN_SEED = queue("black_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.BLACK_APRICORN_SAPLING.get(), ItemGroup.MISC) }
val WHITE_APRICORN_SEED = queue("white_apricorn_seed") { itemNameBlockItem(CobblemonBlocks.WHITE_APRICORN_SAPLING.get(), ItemGroup.MISC) }
@JvmField
val RED_APRICORN = create("red_apricorn", ApricornItem(CobblemonBlocks.RED_APRICORN))
@JvmField
val YELLOW_APRICORN = create("yellow_apricorn", ApricornItem(CobblemonBlocks.YELLOW_APRICORN))
@JvmField
val GREEN_APRICORN = create("green_apricorn", ApricornItem(CobblemonBlocks.GREEN_APRICORN))
@JvmField
val BLUE_APRICORN = create("blue_apricorn", ApricornItem(CobblemonBlocks.BLUE_APRICORN))
@JvmField
val PINK_APRICORN = create("pink_apricorn", ApricornItem(CobblemonBlocks.PINK_APRICORN))
@JvmField
val BLACK_APRICORN = create("black_apricorn", ApricornItem(CobblemonBlocks.BLACK_APRICORN))
@JvmField
val WHITE_APRICORN = create("white_apricorn", ApricornItem(CobblemonBlocks.WHITE_APRICORN))
val APRICORN_LOG = queue("apricorn_log") { blockItem(CobblemonBlocks.APRICORN_LOG.get(), ItemGroup.BUILDING_BLOCKS) }
val STRIPPED_APRICORN_LOG = queue("stripped_apricorn_log") { blockItem(CobblemonBlocks.STRIPPED_APRICORN_LOG.get(), ItemGroup.BUILDING_BLOCKS) }
val APRICORN_WOOD = queue("apricorn_wood") { blockItem(CobblemonBlocks.APRICORN_WOOD.get(), ItemGroup.BUILDING_BLOCKS) }
val STRIPPED_APRICORN_WOOD = queue("stripped_apricorn_wood") { blockItem(CobblemonBlocks.STRIPPED_APRICORN_WOOD.get(), ItemGroup.BUILDING_BLOCKS) }
val APRICORN_PLANKS = queue("apricorn_planks") { blockItem(CobblemonBlocks.APRICORN_PLANKS.get(), ItemGroup.BUILDING_BLOCKS) }
val APRICORN_LEAVES = queue("apricorn_leaves") { blockItem(CobblemonBlocks.APRICORN_LEAVES.get(), ItemGroup.BUILDING_BLOCKS) }
@JvmField
val RED_APRICORN_SEED = create("red_apricorn_seed", ApricornSeedItem(CobblemonBlocks.RED_APRICORN_SAPLING))
@JvmField
val YELLOW_APRICORN_SEED = create("yellow_apricorn_seed", ApricornSeedItem(CobblemonBlocks.YELLOW_APRICORN_SAPLING))
@JvmField
val GREEN_APRICORN_SEED = create("green_apricorn_seed", ApricornSeedItem(CobblemonBlocks.GREEN_APRICORN_SAPLING))
@JvmField
val BLUE_APRICORN_SEED = create("blue_apricorn_seed", ApricornSeedItem(CobblemonBlocks.BLUE_APRICORN_SAPLING))
@JvmField
val PINK_APRICORN_SEED = create("pink_apricorn_seed", ApricornSeedItem(CobblemonBlocks.PINK_APRICORN_SAPLING))
@JvmField
val BLACK_APRICORN_SEED = create("black_apricorn_seed", ApricornSeedItem(CobblemonBlocks.BLACK_APRICORN_SAPLING))
@JvmField
val WHITE_APRICORN_SEED = create("white_apricorn_seed", ApricornSeedItem(CobblemonBlocks.WHITE_APRICORN_SAPLING))
val APRICORN_DOOR = queue("apricorn_door") { blockItem(CobblemonBlocks.APRICORN_DOOR.get(), ItemGroup.REDSTONE) }
val APRICORN_TRAPDOOR = queue("apricorn_trapdoor") { blockItem(CobblemonBlocks.APRICORN_TRAPDOOR.get(), ItemGroup.REDSTONE) }
val APRICORN_FENCE = queue("apricorn_fence") { blockItem(CobblemonBlocks.APRICORN_FENCE.get(), ItemGroup.DECORATIONS) }
val APRICORN_FENCE_GATE = queue("apricorn_fence_gate") { blockItem(CobblemonBlocks.APRICORN_FENCE_GATE.get(), ItemGroup.REDSTONE) }
val APRICORN_BUTTON = queue("apricorn_button") { blockItem(CobblemonBlocks.APRICORN_BUTTON.get(), ItemGroup.REDSTONE) }
val APRICORN_PRESSURE_PLATE = queue("apricorn_pressure_plate") { blockItem(CobblemonBlocks.APRICORN_PRESSURE_PLATE.get(), ItemGroup.REDSTONE) }
//val APRICORN_SIGN = queue("apricorn_sign", SignItem(Item.Properties().stacksTo(16).tab(CreativeModeTab.TAB_DECORATIONS), CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN))
val APRICORN_SLAB = queue("apricorn_slab") { blockItem(CobblemonBlocks.APRICORN_SLAB.get(), ItemGroup.BUILDING_BLOCKS) }
val APRICORN_STAIRS = queue("apricorn_stairs") { blockItem(CobblemonBlocks.APRICORN_STAIRS.get(), ItemGroup.BUILDING_BLOCKS) }
@JvmField
val APRICORN_LOG = blockItem("apricorn_log", CobblemonBlocks.APRICORN_LOG)
@JvmField
val STRIPPED_APRICORN_LOG = blockItem("stripped_apricorn_log", CobblemonBlocks.STRIPPED_APRICORN_LOG)
@JvmField
val APRICORN_WOOD = blockItem("apricorn_wood", CobblemonBlocks.APRICORN_WOOD)
@JvmField
val STRIPPED_APRICORN_WOOD = blockItem("stripped_apricorn_wood", CobblemonBlocks.STRIPPED_APRICORN_WOOD)
@JvmField
val APRICORN_PLANKS = blockItem("apricorn_planks", CobblemonBlocks.APRICORN_PLANKS)
@JvmField
val APRICORN_LEAVES = blockItem("apricorn_leaves", CobblemonBlocks.APRICORN_LEAVES).also {
val compostChance = ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.getFloat(Items.OAK_LEAVES)
// Should always pass unless Mojang reworks leaves to no longer work in the Composter, in that case we already updated w.o doing anything
if (compostChance != ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.defaultReturnValue()) {
ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE[it] = compostChance
}
}
val HEALING_MACHINE = queue("healing_machine") { blockItem(CobblemonBlocks.HEALING_MACHINE.get(), ItemGroup.REDSTONE) }
val PC = queue("pc") { blockItem(CobblemonBlocks.PC.get(), ItemGroup.REDSTONE) }
@JvmField
val APRICORN_DOOR = blockItem("apricorn_door", CobblemonBlocks.APRICORN_DOOR)
@JvmField
val APRICORN_TRAPDOOR = blockItem("apricorn_trapdoor", CobblemonBlocks.APRICORN_TRAPDOOR)
@JvmField
val APRICORN_FENCE = blockItem("apricorn_fence", CobblemonBlocks.APRICORN_FENCE)
@JvmField
val APRICORN_FENCE_GATE = blockItem("apricorn_fence_gate", CobblemonBlocks.APRICORN_FENCE_GATE)
@JvmField
val APRICORN_BUTTON = blockItem("apricorn_button", CobblemonBlocks.APRICORN_BUTTON)
@JvmField
val APRICORN_PRESSURE_PLATE = blockItem("apricorn_pressure_plate", CobblemonBlocks.APRICORN_PRESSURE_PLATE)
//@JvmField
// val APRICORN_SIGN = create("apricorn_sign", SignItem(Item.Properties().stacksTo(16).tab(CreativeModeTab.TAB_DECORATIONS), CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN))
@JvmField
val APRICORN_SLAB = blockItem("apricorn_slab", CobblemonBlocks.APRICORN_SLAB)
@JvmField
val APRICORN_STAIRS = blockItem("apricorn_stairs", CobblemonBlocks.APRICORN_STAIRS)
@JvmField
val HEALING_MACHINE = blockItem("healing_machine", CobblemonBlocks.HEALING_MACHINE)
@JvmField
val PC = blockItem("pc", CobblemonBlocks.PC)
@JvmField
val PASTURE = blockItem("pasture", CobblemonBlocks.PASTURE)
// Evolution items
val LINK_CABLE = queue("link_cable") { LinkCableItem() }
val KINGS_ROCK = queue("kings_rock") { evolutionItem() }
val METAL_COAT = queue("metal_coat") { evolutionItem() }
val BLACK_AUGURITE = queue("black_augurite") { evolutionItem() }
val PROTECTOR = queue("protector") { evolutionItem() }
val OVAL_STONE = queue("oval_stone") { evolutionItem() }
val DRAGON_SCALE = queue("dragon_scale") { evolutionItem() }
val ELECTIRIZER = queue("electirizer") { evolutionItem() }
val MAGMARIZER = queue("magmarizer") { evolutionItem() }
val UPGRADE = queue("upgrade") { evolutionItem() }
val DUBIOUS_DISC = queue("dubious_disc") { evolutionItem() }
@JvmField val LINK_CABLE = create("link_cable", LinkCableItem())
@JvmField val DRAGON_SCALE = noSettingsItem("dragon_scale")
@JvmField val KINGS_ROCK = noSettingsItem("kings_rock")
@JvmField val METAL_COAT = noSettingsItem("metal_coat")
@JvmField val UPGRADE = noSettingsItem("upgrade")
@JvmField val DUBIOUS_DISC = noSettingsItem("dubious_disc")
@JvmField val DEEP_SEA_SCALE = noSettingsItem("deep_sea_scale")
@JvmField val DEEP_SEA_TOOTH = noSettingsItem("deep_sea_tooth")
@JvmField val ELECTIRIZER = noSettingsItem("electirizer")
@JvmField val MAGMARIZER = noSettingsItem("magmarizer")
@JvmField val OVAL_STONE = noSettingsItem("oval_stone")
@JvmField val PROTECTOR = noSettingsItem("protector")
@JvmField val REAPER_CLOTH = noSettingsItem("reaper_cloth")
@JvmField val PRISM_SCALE = noSettingsItem("prism_scale")
@JvmField val SACHET = noSettingsItem("sachet")
@JvmField val WHIPPED_DREAM = noSettingsItem("whipped_dream")
@JvmField val STRAWBERRY_SWEET = noSettingsItem("strawberry_sweet")
@JvmField val LOVE_SWEET = noSettingsItem("love_sweet")
@JvmField val BERRY_SWEET = noSettingsItem("berry_sweet")
@JvmField val CLOVER_SWEET = noSettingsItem("clover_sweet")
@JvmField val FLOWER_SWEET = noSettingsItem("flower_sweet")
@JvmField val STAR_SWEET = noSettingsItem("star_sweet")
@JvmField val RIBBON_SWEET = noSettingsItem("ribbon_sweet")
@JvmField val CHIPPED_POT = noSettingsItem("chipped_pot")
@JvmField val CRACKED_POT = noSettingsItem("cracked_pot")
@JvmField val SWEET_APPLE = noSettingsItem("sweet_apple")
@JvmField val TART_APPLE = noSettingsItem("tart_apple")
@JvmField val GALARICA_CUFF = noSettingsItem("galarica_cuff")
@JvmField val GALARICA_WREATH = noSettingsItem("galarica_wreath")
@JvmField val BLACK_AUGURITE = noSettingsItem("black_augurite")
@JvmField val PEAT_BLOCK = noSettingsItem("peat_block")
@JvmField val RAZOR_CLAW = noSettingsItem("razor_claw")
@JvmField val RAZOR_FANG = noSettingsItem("razor_fang")
@JvmField val AUSPICIOUS_ARMOR = heldItem("auspicious_armor")
@JvmField val MALICIOUS_ARMOR = heldItem("malicious_armor")
private val berries = mutableMapOf<Identifier, BerryItem>()
// Plants
@JvmField val ORAN_BERRY = berryItem("oran", HealingBerryItem(CobblemonBlocks.ORAN_BERRY) { CobblemonMechanics.berries.oranRestoreAmount })
@JvmField val CHERI_BERRY = berryItem("cheri", StatusCuringBerryItem(CobblemonBlocks.CHERI_BERRY, Statuses.PARALYSIS))
@JvmField val CHESTO_BERRY = berryItem("chesto", StatusCuringBerryItem(CobblemonBlocks.CHESTO_BERRY, Statuses.SLEEP))
@JvmField val PECHA_BERRY = berryItem("pecha", StatusCuringBerryItem(CobblemonBlocks.PECHA_BERRY, Statuses.POISON, Statuses.POISON_BADLY))
@JvmField val RAWST_BERRY = berryItem("rawst", StatusCuringBerryItem(CobblemonBlocks.RAWST_BERRY, Statuses.BURN))
@JvmField val ASPEAR_BERRY = berryItem("aspear", StatusCuringBerryItem(CobblemonBlocks.ASPEAR_BERRY, Statuses.FROZEN))
@JvmField val PERSIM_BERRY = berryItem("persim", VolatileCuringBerryItem(CobblemonBlocks.PERSIM_BERRY, "confusion"))
@JvmField val RAZZ_BERRY = berryItem("razz", CobblemonBlocks.RAZZ_BERRY)
@JvmField val BLUK_BERRY = berryItem("bluk", CobblemonBlocks.BLUK_BERRY)
@JvmField val NANAB_BERRY = berryItem("nanab", CobblemonBlocks.NANAB_BERRY)
@JvmField val WEPEAR_BERRY = berryItem("wepear", CobblemonBlocks.WEPEAR_BERRY)
@JvmField val PINAP_BERRY = berryItem("pinap", CobblemonBlocks.PINAP_BERRY)
@JvmField val OCCA_BERRY = berryItem("occa", CobblemonBlocks.OCCA_BERRY)
@JvmField val PASSHO_BERRY = berryItem("passho", CobblemonBlocks.PASSHO_BERRY)
@JvmField val WACAN_BERRY = berryItem("wacan", CobblemonBlocks.WACAN_BERRY)
@JvmField val RINDO_BERRY = berryItem("rindo", CobblemonBlocks.RINDO_BERRY)
@JvmField val YACHE_BERRY = berryItem("yache", CobblemonBlocks.YACHE_BERRY)
@JvmField val CHOPLE_BERRY = berryItem("chople", CobblemonBlocks.CHOPLE_BERRY)
@JvmField val KEBIA_BERRY = berryItem("kebia", CobblemonBlocks.KEBIA_BERRY)
@JvmField val SHUCA_BERRY = berryItem("shuca", CobblemonBlocks.SHUCA_BERRY)
@JvmField val COBA_BERRY = berryItem("coba", CobblemonBlocks.COBA_BERRY)
@JvmField val PAYAPA_BERRY = berryItem("payapa", CobblemonBlocks.PAYAPA_BERRY)
@JvmField val TANGA_BERRY = berryItem("tanga", CobblemonBlocks.TANGA_BERRY)
@JvmField val CHARTI_BERRY = berryItem("charti", CobblemonBlocks.CHARTI_BERRY)
@JvmField val KASIB_BERRY = berryItem("kasib", CobblemonBlocks.KASIB_BERRY)
@JvmField val HABAN_BERRY = berryItem("haban", CobblemonBlocks.HABAN_BERRY)
@JvmField val COLBUR_BERRY = berryItem("colbur", CobblemonBlocks.COLBUR_BERRY)
@JvmField val BABIRI_BERRY = berryItem("babiri", CobblemonBlocks.BABIRI_BERRY)
@JvmField val CHILAN_BERRY = berryItem("chilan", CobblemonBlocks.CHILAN_BERRY)
@JvmField val ROSELI_BERRY = berryItem("roseli", CobblemonBlocks.ROSELI_BERRY)
@JvmField val LEPPA_BERRY = berryItem("leppa", PPRestoringBerryItem(CobblemonBlocks.LEPPA_BERRY) { CobblemonMechanics.berries.ppRestoreAmount })
@JvmField val LUM_BERRY = berryItem("lum", StatusCuringBerryItem(CobblemonBlocks.LUM_BERRY))
@JvmField val FIGY_BERRY = berryItem("figy", PortionHealingBerryItem(CobblemonBlocks.FIGY_BERRY, true) { CobblemonMechanics.berries.portionHealRatio })
@JvmField val WIKI_BERRY = berryItem("wiki", PortionHealingBerryItem(CobblemonBlocks.WIKI_BERRY, true) { CobblemonMechanics.berries.portionHealRatio })
@JvmField val MAGO_BERRY = berryItem("mago", PortionHealingBerryItem(CobblemonBlocks.MAGO_BERRY, true) { CobblemonMechanics.berries.portionHealRatio })
@JvmField val AGUAV_BERRY = berryItem("aguav", PortionHealingBerryItem(CobblemonBlocks.AGUAV_BERRY, true) { CobblemonMechanics.berries.portionHealRatio })
@JvmField val IAPAPA_BERRY = berryItem("iapapa", PortionHealingBerryItem(CobblemonBlocks.IAPAPA_BERRY, true) { CobblemonMechanics.berries.portionHealRatio })
@JvmField val SITRUS_BERRY = berryItem("sitrus", HealingBerryItem(CobblemonBlocks.SITRUS_BERRY) { CobblemonMechanics.berries.sitrusHealAmount })
@JvmField val TOUGA_BERRY = berryItem("touga", CobblemonBlocks.TOUGA_BERRY)
@JvmField val CORNN_BERRY = berryItem("cornn", CobblemonBlocks.CORNN_BERRY)
@JvmField val MAGOST_BERRY = berryItem("magost", CobblemonBlocks.MAGOST_BERRY)
@JvmField val RABUTA_BERRY = berryItem("rabuta", CobblemonBlocks.RABUTA_BERRY)
@JvmField val NOMEL_BERRY = berryItem("nomel", CobblemonBlocks.NOMEL_BERRY)
@JvmField val ENIGMA_BERRY = berryItem("enigma", CobblemonBlocks.ENIGMA_BERRY)
@JvmField val POMEG_BERRY = berryItem("pomeg", FriendshipRaisingBerryItem(CobblemonBlocks.POMEG_BERRY, Stats.HP))
@JvmField val KELPSY_BERRY = berryItem("kelpsy", FriendshipRaisingBerryItem(CobblemonBlocks.KELPSY_BERRY, Stats.ATTACK))
@JvmField val QUALOT_BERRY = berryItem("qualot", FriendshipRaisingBerryItem(CobblemonBlocks.QUALOT_BERRY, Stats.DEFENCE))
@JvmField val HONDEW_BERRY = berryItem("hondew", FriendshipRaisingBerryItem(CobblemonBlocks.HONDEW_BERRY, Stats.SPECIAL_ATTACK))
@JvmField val GREPA_BERRY = berryItem("grepa", FriendshipRaisingBerryItem(CobblemonBlocks.GREPA_BERRY, Stats.SPECIAL_DEFENCE))
@JvmField val TAMATO_BERRY = berryItem("tamato", FriendshipRaisingBerryItem(CobblemonBlocks.TAMATO_BERRY, Stats.SPEED))
@JvmField val SPELON_BERRY = berryItem("spelon", CobblemonBlocks.SPELON_BERRY)
@JvmField val PAMTRE_BERRY = berryItem("pamtre", CobblemonBlocks.PAMTRE_BERRY)
@JvmField val WATMEL_BERRY = berryItem("watmel", CobblemonBlocks.WATMEL_BERRY)
@JvmField val DURIN_BERRY = berryItem("durin", CobblemonBlocks.DURIN_BERRY)
@JvmField val BELUE_BERRY = berryItem("belue", CobblemonBlocks.BELUE_BERRY)
@JvmField val KEE_BERRY = berryItem("kee", CobblemonBlocks.KEE_BERRY)
@JvmField val MARANGA_BERRY = berryItem("maranga", CobblemonBlocks.MARANGA_BERRY)
@JvmField val HOPO_BERRY = berryItem("hopo", PPRestoringBerryItem(CobblemonBlocks.HOPO_BERRY) { CobblemonMechanics.berries.ppRestoreAmount })
@JvmField val LIECHI_BERRY = berryItem("liechi", CobblemonBlocks.LIECHI_BERRY)
@JvmField val GANLON_BERRY = berryItem("ganlon", CobblemonBlocks.GANLON_BERRY)
@JvmField val SALAC_BERRY = berryItem("salac", CobblemonBlocks.SALAC_BERRY)
@JvmField val PETAYA_BERRY = berryItem("petaya", CobblemonBlocks.PETAYA_BERRY)
@JvmField val APICOT_BERRY = berryItem("apicot", CobblemonBlocks.APICOT_BERRY)
@JvmField val LANSAT_BERRY = berryItem("lansat", CobblemonBlocks.LANSAT_BERRY)
@JvmField val STARF_BERRY = berryItem("starf", CobblemonBlocks.STARF_BERRY)
@JvmField val MICLE_BERRY = berryItem("micle", CobblemonBlocks.MICLE_BERRY)
@JvmField val CUSTAP_BERRY = berryItem("custap", CobblemonBlocks.CUSTAP_BERRY)
@JvmField val JABOCA_BERRY = berryItem("jaboca", CobblemonBlocks.JABOCA_BERRY)
@JvmField val ROWAP_BERRY = berryItem("rowap", CobblemonBlocks.ROWAP_BERRY)
@JvmField val BERRY_JUICE = this.create("berry_juice", BerryJuiceItem())
// Medicine
val RARE_CANDY = queue("rare_candy") { CandyItem { _, pokemon -> pokemon.getExperienceToNextLevel() } }
val EXPERIENCE_CANDY_XS = queue("exp_candy_xs") { CandyItem { _, _ -> CandyItem.DEFAULT_XS_CANDY_YIELD } }
val EXPERIENCE_CANDY_S = queue("exp_candy_s") { CandyItem { _, _ -> CandyItem.DEFAULT_S_CANDY_YIELD } }
val EXPERIENCE_CANDY_M = queue("exp_candy_m") { CandyItem { _, _ -> CandyItem.DEFAULT_M_CANDY_YIELD } }
val EXPERIENCE_CANDY_L = queue("exp_candy_l") { CandyItem { _, _ -> CandyItem.DEFAULT_L_CANDY_YIELD } }
val EXPERIENCE_CANDY_XL = queue("exp_candy_xl") { CandyItem { _, _ -> CandyItem.DEFAULT_XL_CANDY_YIELD } }
val CALCIUM = queue("calcium") { VitaminItem(Stats.SPECIAL_ATTACK) }
val CARBOS = queue("carbos") { VitaminItem(Stats.SPEED) }
val HP_UP = queue("hp_up") { VitaminItem(Stats.HP) }
val IRON = queue("iron") { VitaminItem(Stats.DEFENCE) }
val PROTEIN = queue("protein") { VitaminItem(Stats.ATTACK) }
val ZINC = queue("zinc") { VitaminItem(Stats.SPECIAL_DEFENCE) }
@JvmField
val RARE_CANDY = candyItem("rare_candy") { _, pokemon -> pokemon.getExperienceToNextLevel() }
@JvmField
val EXPERIENCE_CANDY_XS = candyItem("exp_candy_xs") { _, _ -> CandyItem.DEFAULT_XS_CANDY_YIELD }
@JvmField
val EXPERIENCE_CANDY_S = candyItem("exp_candy_s") { _, _ -> CandyItem.DEFAULT_S_CANDY_YIELD }
@JvmField
val EXPERIENCE_CANDY_M = candyItem("exp_candy_m") { _, _ -> CandyItem.DEFAULT_M_CANDY_YIELD }
@JvmField
val EXPERIENCE_CANDY_L = candyItem("exp_candy_l") { _, _ -> CandyItem.DEFAULT_L_CANDY_YIELD }
@JvmField
val EXPERIENCE_CANDY_XL = candyItem("exp_candy_xl") { _, _ -> CandyItem.DEFAULT_XL_CANDY_YIELD }
@JvmField
val CALCIUM = create("calcium", VitaminItem(Stats.SPECIAL_ATTACK))
@JvmField
val CARBOS = create("carbos", VitaminItem(Stats.SPEED))
@JvmField
val HP_UP = create("hp_up", VitaminItem(Stats.HP))
@JvmField
val IRON = create("iron", VitaminItem(Stats.DEFENCE))
@JvmField
val PROTEIN = create("protein", VitaminItem(Stats.ATTACK))
@JvmField
val ZINC = create("zinc", VitaminItem(Stats.SPECIAL_DEFENCE))
@JvmField
val MEDICINAL_LEEK = create("medicinal_leek", MedicinalLeekItem(CobblemonBlocks.MEDICINAL_LEEK, Item.Settings().food(FoodComponent.Builder().snack().hunger(1).saturationModifier(0.2f).build())))
@JvmField
val ROASTED_LEEK = create("roasted_leek", Item(Item.Settings().food(FoodComponent.Builder().snack().hunger(3).saturationModifier(0.3f).build())))
@JvmField
val BRAISED_VIVICHOKE = create("braised_vivichoke", Item(Item.Settings().food(FoodComponent.Builder().hunger(6).saturationModifier(0.6f).build())))
@JvmField
val VIVICHOKE_DIP = create("vivichoke_dip", object : StewItem(Settings().maxCount(1)
.food(FoodComponent.Builder()
.hunger(10)
.saturationModifier(1.2F)
.statusEffect(StatusEffectInstance(StatusEffects.ABSORPTION, 900, 0), 1F)
.alwaysEdible()
.build())) {
override fun finishUsing(stack: ItemStack?, world: World?, user: LivingEntity?): ItemStack {
user?.clearStatusEffects()
return super.finishUsing(stack, world, user)
}
})
@JvmField
val ENERGY_ROOT = create("energy_root", EnergyRootItem(CobblemonBlocks.ENERGY_ROOT, Item.Settings().food(FoodComponent.Builder().hunger(1).snack().saturationModifier(0.2f).build())))
@JvmField
val REVIVAL_HERB = create("revival_herb", RevivalHerbItem(CobblemonBlocks.REVIVAL_HERB))
@JvmField
val PEP_UP_FLOWER = blockItem("pep_up_flower", CobblemonBlocks.PEP_UP_FLOWER)
@JvmField
val MEDICINAL_BREW = create("medicinal_brew", Item(Item.Settings()))
@JvmField
val REMEDY = create("remedy", RemedyItem(RemedyItem.NORMAL))
@JvmField
val FINE_REMEDY = create("fine_remedy", RemedyItem(RemedyItem.FINE))
@JvmField
val SUPERB_REMEDY = create("superb_remedy", RemedyItem(RemedyItem.SUPERB))
@JvmField
val POTION = create("potion", PotionItem(PotionType.POTION))
@JvmField
val SUPER_POTION = create("super_potion", PotionItem(PotionType.SUPER_POTION))
@JvmField
val HYPER_POTION = create("hyper_potion", PotionItem(PotionType.HYPER_POTION))
@JvmField
val MAX_POTION = create("max_potion", PotionItem(PotionType.MAX_POTION))
@JvmField
val FULL_RESTORE = create("full_restore", PotionItem(PotionType.FULL_RESTORE))
@JvmField
val HEAL_POWDER = create("heal_powder", HealPowderItem())
@JvmField
val LEEK_AND_POTATO_STEW = create("leek_and_potato_stew", StewItem(Item.Settings().food(FoodComponent.Builder().hunger(8).saturationModifier(0.6f).build()).maxCount(1)))
@JvmField
val REVIVE = create("revive", ReviveItem(max = false))
@JvmField
val MAX_REVIVE = create("max_revive", ReviveItem(max = true))
@JvmField
val PP_UP = create("pp_up", PPUpItem(1))
@JvmField
val PP_MAX = create("pp_max", PPUpItem(3))
@JvmField
val RED_MINT_SEEDS = blockItem("red_mint_seeds", MintType.RED.getCropBlock())
@JvmField
val RED_MINT_LEAF = create("red_mint_leaf", MintLeafItem(MintType.RED))
@JvmField
val BLUE_MINT_SEEDS = blockItem("blue_mint_seeds", MintType.BLUE.getCropBlock())
@JvmField
val BLUE_MINT_LEAF = create("blue_mint_leaf", MintLeafItem(MintType.BLUE))
@JvmField
val CYAN_MINT_SEEDS = blockItem("cyan_mint_seeds", MintType.CYAN.getCropBlock())
@JvmField
val CYAN_MINT_LEAF = create("cyan_mint_leaf", MintLeafItem(MintType.CYAN))
@JvmField
val PINK_MINT_SEEDS = blockItem("pink_mint_seeds", MintType.PINK.getCropBlock())
@JvmField
val PINK_MINT_LEAF = create("pink_mint_leaf", MintLeafItem(MintType.PINK))
@JvmField
val GREEN_MINT_SEEDS = blockItem("green_mint_seeds", MintType.GREEN.getCropBlock())
@JvmField
val GREEN_MINT_LEAF = create("green_mint_leaf", MintLeafItem(MintType.GREEN))
@JvmField
val WHITE_MINT_SEEDS = blockItem("white_mint_seeds", MintType.WHITE.getCropBlock())
@JvmField
val WHITE_MINT_LEAF = create("white_mint_leaf", MintLeafItem(MintType.WHITE))
@JvmField
val LONELY_MINT = create("lonely_mint", MintItem(Natures.LONELY))
@JvmField
val ADAMANT_MINT = create("adamant_mint", MintItem(Natures.ADAMANT))
@JvmField
val NAUGHTY_MINT = create("naughty_mint", MintItem(Natures.NAUGHTY))
@JvmField
val BRAVE_MINT = create("brave_mint", MintItem(Natures.BRAVE))
@JvmField
val BOLD_MINT = create("bold_mint", MintItem(Natures.BOLD))
@JvmField
val IMPISH_MINT = create("impish_mint", MintItem(Natures.IMPISH))
@JvmField
val LAX_MINT = create("lax_mint", MintItem(Natures.LAX))
@JvmField
val RELAXED_MINT = create("relaxed_mint", MintItem(Natures.RELAXED))
@JvmField
val MODEST_MINT = create("modest_mint", MintItem(Natures.MODEST))
@JvmField
val MILD_MINT = create("mild_mint", MintItem(Natures.MILD))
@JvmField
val RASH_MINT = create("rash_mint", MintItem(Natures.RASH))
@JvmField
val QUIET_MINT = create("quiet_mint", MintItem(Natures.QUIET))
@JvmField
val CALM_MINT = create("calm_mint", MintItem(Natures.CALM))
@JvmField
val GENTLE_MINT = create("gentle_mint", MintItem(Natures.GENTLE))
@JvmField
val CAREFUL_MINT = create("careful_mint", MintItem(Natures.CAREFUL))
@JvmField
val SASSY_MINT = create("sassy_mint", MintItem(Natures.SASSY))
@JvmField
val TIMID_MINT = create("timid_mint", MintItem(Natures.TIMID))
@JvmField
val HASTY_MINT = create("hasty_mint", MintItem(Natures.HASTY))
@JvmField
val JOLLY_MINT = create("jolly_mint", MintItem(Natures.JOLLY))
@JvmField
val NAIVE_MINT = create("naive_mint", MintItem(Natures.NAIVE))
@JvmField
val SERIOUS_MINT = create("serious_mint", MintItem(Natures.SERIOUS))
@JvmField val X_ACCURACY = create("x_${Stats.ACCURACY.identifier.path}", XStatItem(Stats.ACCURACY))
@JvmField val X_ATTACK = create("x_${Stats.ATTACK.identifier.path}", XStatItem(Stats.ATTACK))
@JvmField val X_DEFENSE = create("x_${Stats.DEFENCE.identifier.path}", XStatItem(Stats.DEFENCE))
@JvmField val X_SP_ATK = create("x_${Stats.SPECIAL_ATTACK.identifier.path}", XStatItem(Stats.SPECIAL_ATTACK))
@JvmField val X_SP_DEF = create("x_${Stats.SPECIAL_DEFENCE.identifier.path}", XStatItem(Stats.SPECIAL_DEFENCE))
@JvmField val X_SPEED = create("x_${Stats.SPEED.identifier.path}", XStatItem(Stats.SPEED))
@JvmField val DIRE_HIT = create("dire_hit", DireHitItem())
@JvmField val GUARD_SPEC = create("guard_spec", GuardSpecItem())
@JvmField val BURN_HEAL = create("burn_heal", StatusCureItem("item.cobblemon.burn_heal", Statuses.BURN))
@JvmField val PARALYZE_HEAL = create("paralyze_heal", StatusCureItem("item.cobblemon.paralyze_heal", Statuses.PARALYSIS))
@JvmField val ICE_HEAL = create("ice_heal", StatusCureItem("item.cobblemon.ice_heal", Statuses.FROZEN))
@JvmField val ANTIDOTE = create("antidote", StatusCureItem("item.cobblemon.antidote", Statuses.POISON, Statuses.POISON_BADLY))
@JvmField val AWAKENING = create("awakening", StatusCureItem("item.cobblemon.awakening", Statuses.SLEEP))
@JvmField val FULL_HEAL = create("full_heal", StatusCureItem("item.cobblemon.full_heal"))
@JvmField val ETHER = create("ether", EtherItem(max = false))
@JvmField val MAX_ETHER = create("max_ether", EtherItem(max = true))
@JvmField val ELIXIR = create("elixir", ElixirItem(max = false))
@JvmField val MAX_ELIXIR = create("max_elixir", ElixirItem(max = true))
/**
* Evolution Ores and Stones
*/
val DAWN_STONE_ORE = queue("dawn_stone_ore") { blockItem(CobblemonBlocks.DAWN_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DUSK_STONE_ORE = queue("dusk_stone_ore") { blockItem(CobblemonBlocks.DUSK_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val FIRE_STONE_ORE = queue("fire_stone_ore") { blockItem(CobblemonBlocks.FIRE_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val ICE_STONE_ORE = queue("ice_stone_ore") { blockItem(CobblemonBlocks.ICE_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val LEAF_STONE_ORE = queue("leaf_stone_ore") { blockItem(CobblemonBlocks.LEAF_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val MOON_STONE_ORE = queue("moon_stone_ore") { blockItem(CobblemonBlocks.MOON_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val SHINY_STONE_ORE = queue("shiny_stone_ore") { blockItem(CobblemonBlocks.SHINY_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val SUN_STONE_ORE = queue("sun_stone_ore") { blockItem(CobblemonBlocks.SUN_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val THUNDER_STONE_ORE = queue("thunder_stone_ore") { blockItem(CobblemonBlocks.THUNDER_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val WATER_STONE_ORE = queue("water_stone_ore") { blockItem(CobblemonBlocks.WATER_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_DAWN_STONE_ORE = queue("deepslate_dawn_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_DAWN_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_DUSK_STONE_ORE = queue("deepslate_dusk_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_DUSK_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_FIRE_STONE_ORE = queue("deepslate_fire_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_FIRE_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_ICE_STONE_ORE = queue("deepslate_ice_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_ICE_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_LEAF_STONE_ORE = queue("deepslate_leaf_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_LEAF_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_MOON_STONE_ORE = queue("deepslate_moon_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_MOON_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_SHINY_STONE_ORE = queue("deepslate_shiny_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_SHINY_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_SUN_STONE_ORE = queue("deepslate_sun_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_SUN_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_THUNDER_STONE_ORE = queue("deepslate_thunder_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_THUNDER_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DEEPSLATE_WATER_STONE_ORE = queue("deepslate_water_stone_ore") { blockItem(CobblemonBlocks.DEEPSLATE_WATER_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DRIPSTONE_MOON_STONE_ORE = queue("dripstone_moon_stone_ore") { blockItem(CobblemonBlocks.DRIPSTONE_MOON_STONE_ORE.get(), ItemGroup.BUILDING_BLOCKS) }
val DAWN_STONE = queue("dawn_stone") { evolutionItem() }
val DUSK_STONE = queue("dusk_stone") { evolutionItem() }
val FIRE_STONE = queue("fire_stone") { evolutionItem() }
val ICE_STONE = queue("ice_stone") { evolutionItem() }
val LEAF_STONE = queue("leaf_stone") { evolutionItem() }
val MOON_STONE = queue("moon_stone") { evolutionItem() }
val SHINY_STONE = queue("shiny_stone") { evolutionItem() }
val SUN_STONE = queue("sun_stone") { evolutionItem() }
val THUNDER_STONE = queue("thunder_stone") { evolutionItem() }
val WATER_STONE = queue("water_stone") { evolutionItem() }
@JvmField
val DAWN_STONE_ORE = blockItem("dawn_stone_ore", CobblemonBlocks.DAWN_STONE_ORE)
@JvmField
val DUSK_STONE_ORE = blockItem("dusk_stone_ore", CobblemonBlocks.DUSK_STONE_ORE)
@JvmField
val FIRE_STONE_ORE = blockItem("fire_stone_ore", CobblemonBlocks.FIRE_STONE_ORE)
@JvmField
val ICE_STONE_ORE = blockItem("ice_stone_ore", CobblemonBlocks.ICE_STONE_ORE)
@JvmField
val LEAF_STONE_ORE = blockItem("leaf_stone_ore", CobblemonBlocks.LEAF_STONE_ORE)
@JvmField
val MOON_STONE_ORE = blockItem("moon_stone_ore", CobblemonBlocks.MOON_STONE_ORE)
@JvmField
val SHINY_STONE_ORE = blockItem("shiny_stone_ore", CobblemonBlocks.SHINY_STONE_ORE)
@JvmField
val SUN_STONE_ORE = blockItem("sun_stone_ore", CobblemonBlocks.SUN_STONE_ORE)
@JvmField
val THUNDER_STONE_ORE = blockItem("thunder_stone_ore", CobblemonBlocks.THUNDER_STONE_ORE)
@JvmField
val WATER_STONE_ORE = blockItem("water_stone_ore", CobblemonBlocks.WATER_STONE_ORE)
@JvmField
val DEEPSLATE_DAWN_STONE_ORE = blockItem("deepslate_dawn_stone_ore", CobblemonBlocks.DEEPSLATE_DAWN_STONE_ORE)
@JvmField
val DEEPSLATE_DUSK_STONE_ORE = blockItem("deepslate_dusk_stone_ore", CobblemonBlocks.DEEPSLATE_DUSK_STONE_ORE)
@JvmField
val DEEPSLATE_FIRE_STONE_ORE = blockItem("deepslate_fire_stone_ore", CobblemonBlocks.DEEPSLATE_FIRE_STONE_ORE)
@JvmField
val DEEPSLATE_ICE_STONE_ORE = blockItem("deepslate_ice_stone_ore", CobblemonBlocks.DEEPSLATE_ICE_STONE_ORE)
@JvmField
val DEEPSLATE_LEAF_STONE_ORE = blockItem("deepslate_leaf_stone_ore", CobblemonBlocks.DEEPSLATE_LEAF_STONE_ORE)
@JvmField
val DEEPSLATE_MOON_STONE_ORE = blockItem("deepslate_moon_stone_ore", CobblemonBlocks.DEEPSLATE_MOON_STONE_ORE)
@JvmField
val DEEPSLATE_SHINY_STONE_ORE = blockItem("deepslate_shiny_stone_ore", CobblemonBlocks.DEEPSLATE_SHINY_STONE_ORE)
@JvmField
val DEEPSLATE_SUN_STONE_ORE = blockItem("deepslate_sun_stone_ore", CobblemonBlocks.DEEPSLATE_SUN_STONE_ORE)
@JvmField
val DEEPSLATE_THUNDER_STONE_ORE = blockItem("deepslate_thunder_stone_ore", CobblemonBlocks.DEEPSLATE_THUNDER_STONE_ORE)
@JvmField
val DEEPSLATE_WATER_STONE_ORE = blockItem("deepslate_water_stone_ore", CobblemonBlocks.DEEPSLATE_WATER_STONE_ORE)
@JvmField
val DRIPSTONE_MOON_STONE_ORE = blockItem("dripstone_moon_stone_ore", CobblemonBlocks.DRIPSTONE_MOON_STONE_ORE)
@JvmField
val DAWN_STONE = noSettingsItem("dawn_stone")
@JvmField
val DUSK_STONE = noSettingsItem("dusk_stone")
@JvmField
val FIRE_STONE = noSettingsItem("fire_stone")
@JvmField
val ICE_STONE = noSettingsItem("ice_stone")
@JvmField
val LEAF_STONE = noSettingsItem("leaf_stone")
@JvmField
val MOON_STONE = noSettingsItem("moon_stone")
@JvmField
val SHINY_STONE = noSettingsItem("shiny_stone")
@JvmField
val SUN_STONE = noSettingsItem("sun_stone")
@JvmField
val THUNDER_STONE = noSettingsItem("thunder_stone")
@JvmField
val WATER_STONE = noSettingsItem("water_stone")
fun pokeballs(): List<RegistrySupplier<PokeBallItem>> = this.pokeballs
// Held Items
@JvmField
val ASSAULT_VEST = heldItem("assault_vest")
@JvmField
val BIG_ROOT = blockItem("big_root", CobblemonBlocks.BIG_ROOT)
@JvmField
val BLACK_BELT = heldItem("black_belt")
@JvmField
val BLACK_GLASSES = heldItem("black_glasses")
@JvmField
val BLACK_SLUDGE = heldItem("black_sludge")
@JvmField
val CHARCOAL = heldItem("charcoal_stick", remappedName = "charcoal")
@JvmField
val CHOICE_BAND = heldItem("choice_band")
@JvmField
val CHOICE_SCARF = heldItem("choice_scarf")
@JvmField
val CHOICE_SPECS = heldItem("choice_specs")
@JvmField
val DRAGON_FANG = heldItem("dragon_fang")
@JvmField
val EXP_SHARE = heldItem("exp_share")
@JvmField
val FOCUS_BAND = heldItem("focus_band")
@JvmField
val HARD_STONE = heldItem("hard_stone")
@JvmField
val HEAVY_DUTY_BOOTS = heldItem("heavy_duty_boots")
@JvmField
val LEFTOVERS = heldItem("leftovers")
@JvmField
val LIGHT_CLAY = heldItem("light_clay")
@JvmField
val LUCKY_EGG = heldItem("lucky_egg")
@JvmField
val MAGNET = heldItem("magnet")
@JvmField
val MIRACLE_SEED = heldItem("miracle_seed")
@JvmField
val MUSCLE_BAND = heldItem("muscle_band")
@JvmField
val MYSTIC_WATER = heldItem("mystic_water")
@JvmField
val NEVER_MELT_ICE = heldItem("never_melt_ice")
@JvmField
val POISON_BARB = heldItem("poison_barb")
@JvmField
val QUICK_CLAW = heldItem("quick_claw")
@JvmField
val ROCKY_HELMET = heldItem("rocky_helmet")
@JvmField
val SAFETY_GOGGLES = heldItem("safety_goggles")
@JvmField
val SHARP_BEAK = heldItem("sharp_beak")
@JvmField
val SILK_SCARF = heldItem("silk_scarf")
@JvmField
val SILVER_POWDER = heldItem("silver_powder")
@JvmField
val SOFT_SAND = heldItem("soft_sand")
@JvmField
val SPELL_TAG = heldItem("spell_tag")
@JvmField
val TWISTED_SPOON = heldItem("twisted_spoon")
@JvmField
val WISE_GLASSES = heldItem("wise_glasses")
@JvmField
val MENTAL_HERB = heldItem("mental_herb")
@JvmField
val MIRROR_HERB = heldItem("mirror_herb")
@JvmField
val POWER_HERB = heldItem("power_herb")
@JvmField
val WHITE_HERB = heldItem("white_herb")
@JvmField
val BRIGHT_POWDER = heldItem("bright_powder")
@JvmField
val METAL_POWDER = heldItem("metal_powder")
@JvmField
val QUICK_POWDER = heldItem("quick_powder")
@JvmField
val DESTINY_KNOT = heldItem("destiny_knot")
@JvmField
val EVERSTONE = heldItem("everstone")
@JvmField
val POWER_ANKLET = heldItem("power_anklet")
@JvmField
val POWER_BAND = heldItem("power_band")
@JvmField
val POWER_BELT = heldItem("power_belt")
@JvmField
val POWER_BRACER = heldItem("power_bracer")
@JvmField
val POWER_LENS = heldItem("power_lens")
@JvmField
val POWER_WEIGHT = heldItem("power_weight")
private fun blockItem(block: Block, tab: ItemGroup) : BlockItem {
return BlockItem(block, Item.Settings().group(tab))
// Mulch
@JvmField
val MULCH_BASE = noSettingsItem("mulch_base")
@JvmField
val COARSE_MULCH = mulchItem("coarse_mulch", MulchVariant.COARSE)
@JvmField
val GROWTH_MULCH = mulchItem("growth_mulch", MulchVariant.GROWTH)
@JvmField
val HUMID_MULCH = mulchItem("humid_mulch", MulchVariant.HUMID)
@JvmField
val LOAMY_MULCH = mulchItem("loamy_mulch", MulchVariant.LOAMY)
@JvmField
val PEAT_MULCH = mulchItem("peat_mulch", MulchVariant.PEAT)
@JvmField
val RICH_MULCH = mulchItem("rich_mulch", MulchVariant.RICH)
@JvmField
val SANDY_MULCH = mulchItem("sandy_mulch", MulchVariant.SANDY)
@JvmField
val SURPRISE_MULCH = mulchItem("surprise_mulch", MulchVariant.SURPRISE)
// Misc
@JvmField
val POKEMON_MODEL = this.create("pokemon_model", PokemonItem())
private fun blockItem(name: String, block: Block): BlockItem = this.create(name, BlockItem(block, Item.Settings()))
private fun noSettingsItem(name: String): CobblemonItem = this.create(name, CobblemonItem(Item.Settings()))
fun berries() = this.berries.toMap()
private fun mulchItem(name: String, mulchVariant: MulchVariant): MulchItem = this.create(name, MulchItem(mulchVariant))
private fun pokeBallItem(pokeBall: PokeBall): PokeBallItem {
val item = create(pokeBall.name.path, PokeBallItem(pokeBall))
pokeBall.item = item
pokeBalls.add(item)
return item
}
private fun itemNameBlockItem(block: Block, tab: ItemGroup) : BlockItem {
return AliasedBlockItem(block, Item.Settings().group(tab))
private fun candyItem(name: String, calculator: CandyItem.Calculator): CandyItem = this.create(name, CandyItem(calculator))
private fun heldItem(name: String, remappedName: String? = null): CobblemonItem = create(
name,
CobblemonItem(Item.Settings()).also {
if (remappedName != null) {
CobblemonHeldItemManager.registerRemap(it, remappedName)
}
}
)
private fun berryItem(name: String, berryBlock: BerryBlock): BerryItem {
val finalName = "${name}_berry"
val item = this.create(finalName, BerryItem(berryBlock))
this.berries[cobblemonResource(finalName)] = item
return item
}
private fun evolutionItem(): CobblemonItem {
return CobblemonItem(Item.Settings().group(CobblemonItemGroups.EVOLUTION_ITEM_GROUP))
private fun berryItem(name: String, berryItem: BerryItem): BerryItem {
val finalName = "${name}_berry"
val item = this.create(finalName, berryItem)
this.berries[cobblemonResource(finalName)] = item
return item
}
private fun pokeballItem(pokeBall: PokeBall): RegistrySupplier<PokeBallItem> {
val supplier = this.queue(pokeBall.name.path) { PokeBallItem(pokeBall) }
pokeBall.itemSupplier = supplier
this.pokeballs.add(supplier)
return supplier
}
}
}
@@ -0,0 +1,50 @@
/*
* 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
import com.bedrockk.molang.Expression
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.reactive.SimpleObservable
import com.cobblemon.mod.common.mechanics.BerriesMechanic
import com.cobblemon.mod.common.mechanics.PotionsMechanic
import com.cobblemon.mod.common.mechanics.RemediesMechanic
import com.cobblemon.mod.common.util.adapters.ExpressionAdapter
import com.cobblemon.mod.common.util.cobblemonResource
import com.google.gson.GsonBuilder
import net.minecraft.resource.ResourceManager
import net.minecraft.resource.ResourceType
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
object CobblemonMechanics : DataRegistry {
override val id: Identifier = cobblemonResource("mechanics")
override val type = ResourceType.SERVER_DATA
override val observable = SimpleObservable<CobblemonMechanics>()
val gson = GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(Expression::class.java, ExpressionAdapter)
.create()
var remedies = RemediesMechanic()
var berries = BerriesMechanic()
var potions = PotionsMechanic()
override fun sync(player: ServerPlayerEntity) {}
override fun reload(manager: ResourceManager) {
remedies = loadMechanic(manager, "remedies", RemediesMechanic::class.java)
berries = loadMechanic(manager, "berries", BerriesMechanic::class.java)
potions = loadMechanic(manager, "potions", PotionsMechanic::class.java)
}
private fun <T> loadMechanic(manager: ResourceManager, name: String, clazz: Class<T>): T {
manager.getResourceOrThrow(cobblemonResource("mechanics/$name.json")).inputStream.use {
return gson.fromJson(it.reader(), clazz)
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,50 +8,70 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.net.messages.client.battle.BattlePersistentStatusPacket
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.net.MessageBuiltEvent
import com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.net.PacketHandler
import com.cobblemon.mod.common.net.messages.client.battle.BattleApplyCaptureResponsePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleCaptureEndPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleCaptureShakePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleCaptureStartPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleEndPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleFaintPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleHealthChangePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleInitializePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleMakeChoicePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleMessagePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleQueueRequestPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleSetTeamPokemonPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleSwitchPokemonPacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleUpdateTeamPokemonPacket
import com.cobblemon.mod.common.net.messages.client.battle.ChallengeNotificationPacket
import com.cobblemon.mod.common.net.messages.client.data.AbilityRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.MovesRegistrySyncPacket
import com.cobblemon.mod.common.api.net.ServerNetworkPacketHandler
import com.cobblemon.mod.common.client.net.SetClientPlayerDataHandler
import com.cobblemon.mod.common.client.net.battle.*
import com.cobblemon.mod.common.client.net.callback.move.OpenMoveCallbackHandler
import com.cobblemon.mod.common.client.net.callback.party.OpenPartyCallbackHandler
import com.cobblemon.mod.common.client.net.callback.partymove.OpenPartyMoveCallbackHandler
import com.cobblemon.mod.common.client.net.data.DataRegistrySyncPacketHandler
import com.cobblemon.mod.common.client.net.data.UnlockReloadPacketHandler
import com.cobblemon.mod.common.client.net.effect.SpawnSnowstormParticleHandler
import com.cobblemon.mod.common.client.net.gui.InteractPokemonUIPacketHandler
import com.cobblemon.mod.common.client.net.gui.SummaryUIPacketHandler
import com.cobblemon.mod.common.client.net.pasture.ClosePastureHandler
import com.cobblemon.mod.common.client.net.pasture.OpenPastureHandler
import com.cobblemon.mod.common.client.net.pasture.PokemonPasturedHandler
import com.cobblemon.mod.common.client.net.pasture.PokemonUnpasturedHandler
import com.cobblemon.mod.common.client.net.pokemon.update.PokemonUpdatePacketHandler
import com.cobblemon.mod.common.client.net.settings.ServerSettingsPacketHandler
import com.cobblemon.mod.common.client.net.sound.PokemonCryHandler
import com.cobblemon.mod.common.client.net.sound.UnvalidatedPlaySoundS2CPacketHandler
import com.cobblemon.mod.common.client.net.spawn.SpawnExtraDataEntityHandler
import com.cobblemon.mod.common.client.net.starter.StarterUIPacketHandler
import com.cobblemon.mod.common.client.net.storage.RemoveClientPokemonHandler
import com.cobblemon.mod.common.client.net.storage.SwapClientPokemonHandler
import com.cobblemon.mod.common.client.net.storage.party.InitializePartyHandler
import com.cobblemon.mod.common.client.net.storage.party.MoveClientPartyPokemonHandler
import com.cobblemon.mod.common.client.net.storage.party.SetPartyPokemonHandler
import com.cobblemon.mod.common.client.net.storage.party.SetPartyReferenceHandler
import com.cobblemon.mod.common.client.net.storage.pc.ClosePCHandler
import com.cobblemon.mod.common.client.net.storage.pc.InitializePCHandler
import com.cobblemon.mod.common.client.net.storage.pc.MoveClientPCPokemonHandler
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.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.TradeStartedHandler
import com.cobblemon.mod.common.client.net.trade.TradeUpdatedHandler
import com.cobblemon.mod.common.net.messages.client.battle.*
import com.cobblemon.mod.common.net.messages.client.callback.OpenMoveCallbackPacket
import com.cobblemon.mod.common.net.messages.client.callback.OpenPartyCallbackPacket
import com.cobblemon.mod.common.net.messages.client.callback.OpenPartyMoveCallbackPacket
import com.cobblemon.mod.common.net.messages.client.data.*
import com.cobblemon.mod.common.net.messages.client.data.PropertiesCompletionRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.SpeciesRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.AbilityUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.AspectsUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.BenchedMovesUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.CaughtBallUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.EVsUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.ExperienceUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.FriendshipUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.GenderUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.HealthUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.IVsUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.MoveSetUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.NatureUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.PokemonStateUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.ShinyUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.SpeciesUpdatePacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.StatusUpdatePacket
import com.cobblemon.mod.common.net.messages.client.data.UnlockReloadPacket
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormParticlePacket
import com.cobblemon.mod.common.net.messages.client.pasture.ClosePasturePacket
import com.cobblemon.mod.common.net.messages.client.pasture.OpenPasturePacket
import com.cobblemon.mod.common.net.messages.client.pasture.PokemonPasturedPacket
import com.cobblemon.mod.common.net.messages.client.pasture.PokemonUnpasturedPacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.*
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.AddEvolutionPacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.ClearEvolutionsPacket
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.RemoveEvolutionPacket
import com.cobblemon.mod.common.net.messages.client.settings.ServerSettingsPacket
import com.cobblemon.mod.common.net.messages.client.sound.PokemonCryPacket
import com.cobblemon.mod.common.net.messages.client.sound.UnvalidatedPlaySoundS2CPacket
import com.cobblemon.mod.common.net.messages.client.spawn.SpawnPokeballPacket
import com.cobblemon.mod.common.net.messages.client.spawn.SpawnPokemonPacket
import com.cobblemon.mod.common.net.messages.client.starter.OpenStarterUIPacket
import com.cobblemon.mod.common.net.messages.client.starter.SetClientPlayerDataPacket
import com.cobblemon.mod.common.net.messages.client.storage.RemoveClientPokemonPacket
@@ -66,6 +86,15 @@ import com.cobblemon.mod.common.net.messages.client.storage.pc.MoveClientPCPokem
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.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.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.SummaryUIPacket
import com.cobblemon.mod.common.net.messages.server.BattleChallengePacket
import com.cobblemon.mod.common.net.messages.server.BenchMovePacket
@@ -73,6 +102,17 @@ import com.cobblemon.mod.common.net.messages.server.RequestMoveSwapPacket
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.callback.move.MoveSelectCancelledPacket
import com.cobblemon.mod.common.net.messages.server.callback.move.MoveSelectedPacket
import com.cobblemon.mod.common.net.messages.server.callback.party.PartyPokemonSelectedPacket
import com.cobblemon.mod.common.net.messages.server.callback.party.PartySelectCancelledPacket
import com.cobblemon.mod.common.net.messages.server.callback.partymove.PartyMoveSelectCancelledPacket
import com.cobblemon.mod.common.net.messages.server.callback.partymove.PartyPokemonMoveSelectedPacket
import com.cobblemon.mod.common.net.messages.server.pasture.PasturePokemonPacket
import com.cobblemon.mod.common.net.messages.server.pasture.UnpastureAllPokemonPacket
import com.cobblemon.mod.common.net.messages.server.pasture.UnpasturePokemonPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.interact.InteractPokemonPacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetNicknamePacket
import com.cobblemon.mod.common.net.messages.server.pokemon.update.evolution.AcceptEvolutionPacket
import com.cobblemon.mod.common.net.messages.server.starter.RequestStarterScreenPacket
import com.cobblemon.mod.common.net.messages.server.storage.SwapPCPartyPokemonPacket
@@ -84,174 +124,286 @@ import com.cobblemon.mod.common.net.messages.server.storage.pc.MovePCPokemonToPa
import com.cobblemon.mod.common.net.messages.server.storage.pc.MovePartyPokemonToPCPacket
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.util.getServer
import java.util.concurrent.CompletableFuture
import com.cobblemon.mod.common.net.messages.server.storage.pc.UnlinkPlayerFromPCPacket
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.UpdateTradeOfferPacket
import com.cobblemon.mod.common.net.serverhandling.ChallengeHandler
import com.cobblemon.mod.common.net.serverhandling.battle.BattleSelectActionsHandler
import com.cobblemon.mod.common.net.serverhandling.callback.move.MoveSelectCancelledHandler
import com.cobblemon.mod.common.net.serverhandling.callback.move.MoveSelectedHandler
import com.cobblemon.mod.common.net.serverhandling.callback.party.PartyPokemonSelectedHandler
import com.cobblemon.mod.common.net.serverhandling.callback.party.PartySelectCancelledHandler
import com.cobblemon.mod.common.net.serverhandling.callback.partymove.PartyMoveSelectCancelledHandler
import com.cobblemon.mod.common.net.serverhandling.callback.partymove.PartyPokemonMoveSelectedHandler
import com.cobblemon.mod.common.net.serverhandling.evolution.AcceptEvolutionHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.PasturePokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.UnpastureAllPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.UnpasturePokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.interact.InteractPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetNicknameHandler
import com.cobblemon.mod.common.net.serverhandling.starter.RequestStarterScreenHandler
import com.cobblemon.mod.common.net.serverhandling.starter.SelectStarterPacketHandler
import com.cobblemon.mod.common.net.serverhandling.storage.BenchMoveHandler
import com.cobblemon.mod.common.net.serverhandling.storage.RequestMoveSwapHandler
import com.cobblemon.mod.common.net.serverhandling.storage.SendOutPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.SwapPCPartyPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.party.MovePartyPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.party.ReleasePCPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.party.SwapPartyPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.pc.MovePCPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.storage.pc.MovePCPokemonToPartyHandler
import com.cobblemon.mod.common.net.serverhandling.storage.pc.MovePartyPokemonToPCHandler
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.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.UpdateTradeOfferHandler
import com.cobblemon.mod.common.util.server
import kotlin.reflect.KClass
import net.minecraft.network.PacketByteBuf
import net.minecraft.network.listener.ClientPlayPacketListener
import net.minecraft.network.packet.Packet
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
/**
* Registers Cobblemon packets. Packet handlers are set up on handling the [MessageBuiltEvent] dispatched from here.
* Registers Cobblemon network packets.
*
* This class also contains short functions for dispatching our packets to a player, all players, or to the entire server.
*
* @author Hiroku
* @author Hiroku, Licious
* @since November 27th, 2021
*/
object CobblemonNetwork {
const val PROTOCOL_VERSION = "1"
object CobblemonNetwork : NetworkManager {
var clientHandlersRegistered = CompletableFuture<Unit>()
var serverHandlersRegistered = CompletableFuture<Unit>()
init {
clientHandlersRegistered.runAfterBoth(serverHandlersRegistered) { register() }
}
lateinit var networkDelegate: NetworkDelegate
fun ServerPlayerEntity.sendPacket(packet: NetworkPacket) = sendToPlayer(this, packet)
fun sendToPlayer(player: ServerPlayerEntity, packet: NetworkPacket) = networkDelegate.sendPacketToPlayer(player, packet)
fun sendToServer(packet: NetworkPacket) = networkDelegate.sendPacketToServer(packet)
fun sendToAllPlayers(packet: NetworkPacket) = sendToPlayers(getServer()!!.playerManager.playerList, packet)
fun sendToPlayers(players: Iterable<ServerPlayerEntity>, packet: NetworkPacket) = players.forEach { sendToPlayer(it, packet) }
interface PreparedMessage<T : NetworkPacket> {
fun registerMessage()
fun registerHandler(handler: PacketHandler<T>)
}
interface NetworkContext {
val player: ServerPlayerEntity?
}
fun register() {
// Don't forget to register handlers in either ClientPacketRegistrar or ServerPacketRegistrar!
/**
* Client Packets
*/
fun ServerPlayerEntity.sendPacket(packet: NetworkPacket<*>) = sendPacketToPlayer(this, packet)
fun sendToServer(packet: NetworkPacket<*>) = this.sendPacketToServer(packet)
fun sendToAllPlayers(packet: NetworkPacket<*>) = sendPacketToPlayers(server()!!.playerManager.playerList, packet)
fun sendPacketToPlayers(players: Iterable<ServerPlayerEntity>, packet: NetworkPacket<*>) = players.forEach { sendPacketToPlayer(it, packet) }
override fun registerClientBound() {
// Pokemon Update Packets
buildClientMessage<FriendshipUpdatePacket>()
buildClientMessage<MoveSetUpdatePacket>()
buildClientMessage<NatureUpdatePacket>()
buildClientMessage<ShinyUpdatePacket>()
buildClientMessage<SpeciesUpdatePacket>()
buildClientMessage<HealthUpdatePacket>()
buildClientMessage<ExperienceUpdatePacket>()
buildClientMessage<StatusUpdatePacket>()
buildClientMessage<CaughtBallUpdatePacket>()
buildClientMessage<BenchedMovesUpdatePacket>()
buildClientMessage<GenderUpdatePacket>()
buildClientMessage<AspectsUpdatePacket>()
buildClientMessage<AbilityUpdatePacket>()
buildClientMessage<EVsUpdatePacket>()
buildClientMessage<IVsUpdatePacket>()
this.createClientBound(FriendshipUpdatePacket.ID, FriendshipUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(MoveSetUpdatePacket.ID, MoveSetUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(NatureUpdatePacket.ID, NatureUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(ShinyUpdatePacket.ID, ShinyUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(SpeciesUpdatePacket.ID, SpeciesUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(NicknameUpdatePacket.ID, NicknameUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(HealthUpdatePacket.ID, HealthUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(ExperienceUpdatePacket.ID, ExperienceUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(StatusUpdatePacket.ID, StatusUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(CaughtBallUpdatePacket.ID, CaughtBallUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(BenchedMovesUpdatePacket.ID, BenchedMovesUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(GenderUpdatePacket.ID, GenderUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(AspectsUpdatePacket.ID, AspectsUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(AbilityUpdatePacket.ID, AbilityUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(EVsUpdatePacket.ID, EVsUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(IVsUpdatePacket.ID, IVsUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(HeldItemUpdatePacket.ID, HeldItemUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(PokemonStateUpdatePacket.ID, PokemonStateUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(TetheringUpdatePacket.ID, TetheringUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(TradeableUpdatePacket.ID, TradeableUpdatePacket::decode, PokemonUpdatePacketHandler())
// Evolution start
buildClientMessage<AddEvolutionPacket>()
buildClientMessage<ClearEvolutionsPacket>()
buildClientMessage<RemoveEvolutionPacket>()
this.createClientBound(AddEvolutionPacket.ID, AddEvolutionPacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(ClearEvolutionsPacket.ID, ClearEvolutionsPacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(RemoveEvolutionPacket.ID, RemoveEvolutionPacket::decode, PokemonUpdatePacketHandler())
// Evolution End
buildClientMessage<PokemonStateUpdatePacket>()
// Storage Packets
buildClientMessage<InitializePartyPacket>()
buildClientMessage<SetPartyPokemonPacket>()
buildClientMessage<MoveClientPartyPokemonPacket>()
buildClientMessage<SetPartyReferencePacket>()
this.createClientBound(InitializePartyPacket.ID, InitializePartyPacket::decode, InitializePartyHandler)
this.createClientBound(SetPartyPokemonPacket.ID, SetPartyPokemonPacket::decode, SetPartyPokemonHandler)
this.createClientBound(MoveClientPartyPokemonPacket.ID, MoveClientPartyPokemonPacket::decode, MoveClientPartyPokemonHandler)
this.createClientBound(SetPartyReferencePacket.ID, SetPartyReferencePacket::decode, SetPartyReferenceHandler)
buildClientMessage<InitializePCPacket>()
buildClientMessage<MoveClientPCPokemonPacket>()
buildClientMessage<SetPCBoxPokemonPacket>()
buildClientMessage<SetPCPokemonPacket>()
buildClientMessage<OpenPCPacket>()
buildClientMessage<ClosePCPacket>()
this.createClientBound(InitializePCPacket.ID, InitializePCPacket::decode, InitializePCHandler)
this.createClientBound(MoveClientPCPokemonPacket.ID, MoveClientPCPokemonPacket::decode, MoveClientPCPokemonHandler)
this.createClientBound(SetPCBoxPokemonPacket.ID, SetPCBoxPokemonPacket::decode, SetPCBoxPokemonHandler)
this.createClientBound(SetPCPokemonPacket.ID, SetPCPokemonPacket::decode, SetPCPokemonHandler)
this.createClientBound(OpenPCPacket.ID, OpenPCPacket::decode, OpenPCHandler)
this.createClientBound(ClosePCPacket.ID, ClosePCPacket::decode, ClosePCHandler)
buildClientMessage<SwapClientPokemonPacket>()
buildClientMessage<RemoveClientPokemonPacket>()
this.createClientBound(SwapClientPokemonPacket.ID, SwapClientPokemonPacket::decode, SwapClientPokemonHandler)
this.createClientBound(RemoveClientPokemonPacket.ID, RemoveClientPokemonPacket::decode, RemoveClientPokemonHandler)
// UI Packets
buildClientMessage<SummaryUIPacket>()
this.createClientBound(SummaryUIPacket.ID, SummaryUIPacket::decode, SummaryUIPacketHandler)
this.createClientBound(InteractPokemonUIPacket.ID, InteractPokemonUIPacket::decode, InteractPokemonUIPacketHandler)
// Starter packets
buildClientMessage<OpenStarterUIPacket>()
buildClientMessage<SetClientPlayerDataPacket>()
this.createClientBound(OpenStarterUIPacket.ID, OpenStarterUIPacket::decode, StarterUIPacketHandler)
this.createClientBound(SetClientPlayerDataPacket.ID, SetClientPlayerDataPacket::decode, SetClientPlayerDataHandler)
// Battle packets
buildClientMessage<BattleEndPacket>()
buildClientMessage<BattleInitializePacket>()
buildClientMessage<BattleQueueRequestPacket>()
buildClientMessage<BattleFaintPacket>()
buildClientMessage<BattleMakeChoicePacket>()
buildClientMessage<BattleHealthChangePacket>()
buildClientMessage<BattleSetTeamPokemonPacket>()
buildClientMessage<BattleSwitchPokemonPacket>()
buildClientMessage<BattleMessagePacket>()
buildClientMessage<BattleCaptureStartPacket>()
buildClientMessage<BattleCaptureEndPacket>()
buildClientMessage<BattleCaptureShakePacket>()
buildClientMessage<BattleApplyCaptureResponsePacket>()
buildClientMessage<ChallengeNotificationPacket>()
buildClientMessage<BattleUpdateTeamPokemonPacket>()
buildClientMessage<BattlePersistentStatusPacket>()
this.createClientBound(BattleEndPacket.ID, BattleEndPacket::decode, BattleEndHandler)
this.createClientBound(BattleInitializePacket.ID, BattleInitializePacket::decode, BattleInitializeHandler)
this.createClientBound(BattleQueueRequestPacket.ID, BattleQueueRequestPacket::decode, BattleQueueRequestHandler)
this.createClientBound(BattleFaintPacket.ID, BattleFaintPacket::decode, BattleFaintHandler)
this.createClientBound(BattleMakeChoicePacket.ID, BattleMakeChoicePacket::decode, BattleMakeChoiceHandler)
this.createClientBound(BattleHealthChangePacket.ID, BattleHealthChangePacket::decode, BattleHealthChangeHandler)
this.createClientBound(BattleSetTeamPokemonPacket.ID, BattleSetTeamPokemonPacket::decode, BattleSetTeamPokemonHandler)
this.createClientBound(BattleSwitchPokemonPacket.ID, BattleSwitchPokemonPacket::decode, BattleSwitchPokemonHandler)
this.createClientBound(BattleMessagePacket.ID, BattleMessagePacket::decode, BattleMessageHandler)
this.createClientBound(BattleCaptureStartPacket.ID, BattleCaptureStartPacket::decode, BattleCaptureStartHandler)
this.createClientBound(BattleCaptureEndPacket.ID, BattleCaptureEndPacket::decode, BattleCaptureEndHandler)
this.createClientBound(BattleCaptureShakePacket.ID, BattleCaptureShakePacket::decode, BattleCaptureShakeHandler)
this.createClientBound(BattleApplyPassResponsePacket.ID, BattleApplyPassResponsePacket::decode, BattleApplyPassResponseHandler)
this.createClientBound(BattleChallengeNotificationPacket.ID, BattleChallengeNotificationPacket::decode, BattleChallengeNotificationHandler)
this.createClientBound(BattleUpdateTeamPokemonPacket.ID, BattleUpdateTeamPokemonPacket::decode, BattleUpdateTeamPokemonHandler)
this.createClientBound(BattlePersistentStatusPacket.ID, BattlePersistentStatusPacket::decode, BattlePersistentStatusHandler)
this.createClientBound(BattleMadeInvalidChoicePacket.ID, BattleMadeInvalidChoicePacket::decode, BattleMadeInvalidChoiceHandler)
this.createClientBound(BattleMusicPacket.ID, BattleMusicPacket::decode, BattleMusicHandler)
this.createClientBound(BattleChallengeExpiredPacket.ID, BattleChallengeExpiredPacket::decode, BattleChallengeExpiredHandler)
// Settings packets
buildClientMessage<ServerSettingsPacket>()
this.createClientBound(ServerSettingsPacket.ID, ServerSettingsPacket::decode, ServerSettingsPacketHandler)
// Data registries
buildClientMessage<AbilityRegistrySyncPacket>()
buildClientMessage<MovesRegistrySyncPacket>()
buildClientMessage<SpeciesRegistrySyncPacket>()
buildClientMessage<PropertiesCompletionRegistrySyncPacket>()
this.createClientBound(AbilityRegistrySyncPacket.ID, AbilityRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(MovesRegistrySyncPacket.ID, MovesRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(SpeciesRegistrySyncPacket.ID, SpeciesRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(PropertiesCompletionRegistrySyncPacket.ID, PropertiesCompletionRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(UnlockReloadPacket.ID, UnlockReloadPacket::decode, UnlockReloadPacketHandler)
this.createClientBound(BerryRegistrySyncPacket.ID, BerryRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
/**
* Server Packets
*/
// Effects
this.createClientBound(SpawnSnowstormParticlePacket.ID, SpawnSnowstormParticlePacket::decode, SpawnSnowstormParticleHandler)
// Hax
this.createClientBound(UnvalidatedPlaySoundS2CPacket.ID, UnvalidatedPlaySoundS2CPacket::decode, UnvalidatedPlaySoundS2CPacketHandler)
this.createClientBound(SpawnPokemonPacket.ID, SpawnPokemonPacket::decode, SpawnExtraDataEntityHandler())
this.createClientBound(SpawnPokeballPacket.ID, SpawnPokeballPacket::decode, SpawnExtraDataEntityHandler())
this.createClientBound(ToastPacket.ID, ToastPacket::decode, ToastPacketHandler)
// Trade packets
this.createClientBound(TradeAcceptanceChangedPacket.ID, TradeAcceptanceChangedPacket::decode, TradeAcceptanceChangedHandler)
this.createClientBound(TradeCancelledPacket.ID, TradeCancelledPacket::decode, TradeCancelledHandler)
this.createClientBound(TradeCompletedPacket.ID, TradeCompletedPacket::decode, TradeCompletedHandler)
this.createClientBound(TradeUpdatedPacket.ID, TradeUpdatedPacket::decode, TradeUpdatedHandler)
this.createClientBound(TradeOfferNotificationPacket.ID, TradeOfferNotificationPacket::decode, TradeOfferNotificationHandler)
this.createClientBound(TradeOfferExpiredPacket.ID, TradeOfferExpiredPacket::decode, TradeOfferExpiredHandler)
this.createClientBound(TradeStartedPacket.ID, TradeStartedPacket::decode, TradeStartedHandler)
// Pasture
this.createClientBound(OpenPasturePacket.ID, OpenPasturePacket::decode, OpenPastureHandler)
this.createClientBound(ClosePasturePacket.ID, ClosePasturePacket::decode, ClosePastureHandler)
this.createClientBound(PokemonPasturedPacket.ID, PokemonPasturedPacket::decode, PokemonPasturedHandler)
this.createClientBound(PokemonUnpasturedPacket.ID, PokemonUnpasturedPacket::decode, PokemonUnpasturedHandler)
// Behaviours
this.createClientBound(PokemonCryPacket.ID, PokemonCryPacket::decode, PokemonCryHandler)
// Move select packets
this.createClientBound(OpenMoveCallbackPacket.ID, OpenMoveCallbackPacket::decode, OpenMoveCallbackHandler)
// Party select packets
this.createClientBound(OpenPartyCallbackPacket.ID, OpenPartyCallbackPacket::decode, OpenPartyCallbackHandler)
// Party move select packets
this.createClientBound(OpenPartyMoveCallbackPacket.ID, OpenPartyMoveCallbackPacket::decode, OpenPartyMoveCallbackHandler)
}
override fun registerServerBound() {
// Pokemon Update Packets
// Evolution start
buildServerMessage<AcceptEvolutionPacket>()
// Evolution End
this.createServerBound(SetNicknamePacket.ID, SetNicknamePacket::decode, SetNicknameHandler)
// Evolution Packets
this.createServerBound(AcceptEvolutionPacket.ID, AcceptEvolutionPacket::decode, AcceptEvolutionHandler)
// Interaction Packets
this.createServerBound(InteractPokemonPacket.ID, InteractPokemonPacket::decode, InteractPokemonHandler)
// Storage Packets
buildServerMessage<SendOutPokemonPacket>()
buildServerMessage<RequestMoveSwapPacket>()
buildServerMessage<BenchMovePacket>()
buildServerMessage<BattleChallengePacket>()
this.createServerBound(SendOutPokemonPacket.ID, SendOutPokemonPacket::decode, SendOutPokemonHandler)
this.createServerBound(RequestMoveSwapPacket.ID, RequestMoveSwapPacket::decode, RequestMoveSwapHandler)
this.createServerBound(BenchMovePacket.ID, BenchMovePacket::decode, BenchMoveHandler)
this.createServerBound(BattleChallengePacket.ID, BattleChallengePacket::decode, ChallengeHandler)
buildServerMessage<MovePCPokemonToPartyPacket>()
buildServerMessage<MovePartyPokemonToPCPacket>()
buildServerMessage<ReleasePartyPokemonPacket>()
buildServerMessage<ReleasePCPokemonPacket>()
this.createServerBound(MovePCPokemonToPartyPacket.ID, MovePCPokemonToPartyPacket::decode, MovePCPokemonToPartyHandler)
this.createServerBound(MovePartyPokemonToPCPacket.ID, MovePartyPokemonToPCPacket::decode, MovePartyPokemonToPCHandler)
this.createServerBound(ReleasePartyPokemonPacket.ID, ReleasePartyPokemonPacket::decode, ReleasePartyPokemonHandler)
this.createServerBound(ReleasePCPokemonPacket.ID, ReleasePCPokemonPacket::decode, ReleasePCPokemonHandler)
this.createServerBound(UnlinkPlayerFromPCPacket.ID, UnlinkPlayerFromPCPacket::decode, UnlinkPlayerFromPCHandler)
// Starter packets
buildServerMessage<SelectStarterPacket>()
buildServerMessage<RequestStarterScreenPacket>()
this.createServerBound(SelectStarterPacket.ID, SelectStarterPacket::decode, SelectStarterPacketHandler)
this.createServerBound(RequestStarterScreenPacket.ID, RequestStarterScreenPacket::decode, RequestStarterScreenHandler)
buildServerMessage<SwapPCPokemonPacket>()
buildServerMessage<SwapPartyPokemonPacket>()
this.createServerBound(SwapPCPokemonPacket.ID, SwapPCPokemonPacket::decode, SwapPCPokemonHandler)
this.createServerBound(SwapPartyPokemonPacket.ID, SwapPartyPokemonPacket::decode, SwapPartyPokemonHandler)
buildServerMessage<MovePCPokemonPacket>()
buildServerMessage<MovePartyPokemonPacket>()
this.createServerBound(MovePCPokemonPacket.ID, MovePCPokemonPacket::decode, MovePCPokemonHandler)
this.createServerBound(MovePartyPokemonPacket.ID, MovePartyPokemonPacket::decode, MovePartyPokemonHandler)
buildServerMessage<SwapPCPartyPokemonPacket>()
this.createServerBound(SwapPCPartyPokemonPacket.ID, SwapPCPartyPokemonPacket::decode, SwapPCPartyPokemonHandler)
// Battle packets
buildServerMessage<BattleSelectActionsPacket>()
this.createServerBound(BattleSelectActionsPacket.ID, BattleSelectActionsPacket::decode, BattleSelectActionsHandler)
// Trade
this.createServerBound(AcceptTradeRequestPacket.ID, AcceptTradeRequestPacket::decode, AcceptTradeRequestHandler)
this.createServerBound(CancelTradePacket.ID, CancelTradePacket::decode, CancelTradeHandler)
this.createServerBound(ChangeTradeAcceptancePacket.ID, ChangeTradeAcceptancePacket::decode, ChangeTradeAcceptanceHandler)
this.createServerBound(OfferTradePacket.ID, OfferTradePacket::decode, OfferTradeHandler)
this.createServerBound(UpdateTradeOfferPacket.ID, UpdateTradeOfferPacket::decode, UpdateTradeOfferHandler)
// Pasture
this.createServerBound(PasturePokemonPacket.ID, PasturePokemonPacket::decode, PasturePokemonHandler)
this.createServerBound(UnpasturePokemonPacket.ID, UnpasturePokemonPacket::decode, UnpasturePokemonHandler)
this.createServerBound(UnpastureAllPokemonPacket.ID, UnpastureAllPokemonPacket::decode, UnpastureAllPokemonHandler)
// Move select packets
this.createServerBound(MoveSelectedPacket.ID, MoveSelectedPacket::decode, MoveSelectedHandler)
this.createServerBound(MoveSelectCancelledPacket.ID, MoveSelectCancelledPacket::decode, MoveSelectCancelledHandler)
// Party select packets
this.createServerBound(PartyPokemonSelectedPacket.ID, PartyPokemonSelectedPacket::decode, PartyPokemonSelectedHandler)
this.createServerBound(PartySelectCancelledPacket.ID, PartySelectCancelledPacket::decode, PartySelectCancelledHandler)
// Party move select packets
this.createServerBound(PartyPokemonMoveSelectedPacket.ID, PartyPokemonMoveSelectedPacket::decode, PartyPokemonMoveSelectedHandler)
this.createServerBound(PartyMoveSelectCancelledPacket.ID, PartyMoveSelectCancelledPacket::decode, PartyMoveSelectCancelledHandler)
}
private inline fun <reified P : NetworkPacket> buildClientMessage() =
buildMessage<P>(toServer = false)
private inline fun <reified P : NetworkPacket> buildServerMessage() =
buildMessage<P>(toServer = true)
private inline fun <reified P : NetworkPacket> buildMessage(toServer: Boolean) {
val message = networkDelegate.buildMessage(P::class.java, toServer)
// Gives client or server the chance to attach its packet handler
CobblemonEvents.MESSAGE_BUILT.post(MessageBuiltEvent(P::class.java, toServer, message))
message.registerMessage()
private inline fun <reified T : NetworkPacket<T>> createClientBound(identifier: Identifier, noinline decoder: (PacketByteBuf) -> T, handler: ClientNetworkPacketHandler<T>) {
Cobblemon.implementation.networkManager.createClientBound(identifier, T::class, { message, buffer -> message.encode(buffer) }, decoder, handler)
}
private inline fun <reified T : NetworkPacket<T>> createServerBound(identifier: Identifier, noinline decoder: (PacketByteBuf) -> T, handler: ServerNetworkPacketHandler<T>) {
Cobblemon.implementation.networkManager.createServerBound(identifier, T::class, { message, buffer -> message.encode(buffer) }, decoder, handler)
}
override fun <T : NetworkPacket<T>> createClientBound(
identifier: Identifier,
kClass: KClass<T>,
encoder: (T, PacketByteBuf) -> Unit,
decoder: (PacketByteBuf) -> T,
handler: ClientNetworkPacketHandler<T>
) {
Cobblemon.implementation.networkManager.createClientBound(identifier, kClass, encoder, decoder, handler)
}
override fun <T : NetworkPacket<T>> createServerBound(
identifier: Identifier,
kClass: KClass<T>,
encoder: (T, PacketByteBuf) -> Unit,
decoder: (PacketByteBuf) -> T,
handler: ServerNetworkPacketHandler<T>
) {
Cobblemon.implementation.networkManager.createServerBound(identifier, kClass, encoder, decoder, handler)
}
override fun sendPacketToPlayer(player: ServerPlayerEntity, packet: NetworkPacket<*>) = Cobblemon.implementation.networkManager.sendPacketToPlayer(player, packet)
override fun sendPacketToServer(packet: NetworkPacket<*>) = Cobblemon.implementation.networkManager.sendPacketToServer(packet)
override fun <T : NetworkPacket<*>> asVanillaClientBound(packet: T): Packet<ClientPlayPacketListener> = Cobblemon.implementation.networkManager.asVanillaClientBound(packet)
}
@@ -1,73 +0,0 @@
/*
* Copyright (C) 2022 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
import com.cobblemon.mod.common.util.cobblemonResource
import dev.architectury.registry.level.biome.BiomeModifications
import net.minecraft.util.registry.RegistryEntry
import net.minecraft.util.registry.RegistryEntryList
import net.minecraft.world.gen.GenerationStep
import net.minecraft.world.gen.feature.ConfiguredFeatures
import net.minecraft.world.gen.feature.Feature
import net.minecraft.world.gen.feature.PlacedFeature
import net.minecraft.world.gen.feature.PlacedFeatures
import net.minecraft.world.gen.feature.SimpleRandomFeatureConfig
import net.minecraft.world.gen.feature.VegetationPlacedFeatures
import net.minecraft.world.gen.placementmodifier.RarityFilterPlacementModifier
object CobblemonPlacements {
lateinit var BLACK_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var BLUE_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var GREEN_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var PINK_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var RED_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var WHITE_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var YELLOW_APRICORN_TREE: RegistryEntry<PlacedFeature>
lateinit var APRICORN_TREES: RegistryEntry<PlacedFeature>
fun register() {
BLACK_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("black_apricorn_tree").toString(), CobblemonConfiguredFeatures.BLACK_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.BLACK_APRICORN_SAPLING.get()))
BLUE_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("blue_apricorn_tree").toString(), CobblemonConfiguredFeatures.BLUE_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.BLUE_APRICORN_SAPLING.get()))
GREEN_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("green_apricorn_tree").toString(), CobblemonConfiguredFeatures.GREEN_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.GREEN_APRICORN_SAPLING.get()))
PINK_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("pink_apricorn_tree").toString(), CobblemonConfiguredFeatures.PINK_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.PINK_APRICORN_SAPLING.get()))
RED_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("red_apricorn_tree").toString(), CobblemonConfiguredFeatures.RED_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.RED_APRICORN_SAPLING.get()))
WHITE_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("white_apricorn_tree").toString(), CobblemonConfiguredFeatures.WHITE_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.WHITE_APRICORN_SAPLING.get()))
YELLOW_APRICORN_TREE = PlacedFeatures.register(cobblemonResource("yellow_apricorn_tree").toString(), CobblemonConfiguredFeatures.YELLOW_APRICORN_TREE, PlacedFeatures.wouldSurvive(
CobblemonBlocks.YELLOW_APRICORN_SAPLING.get()))
val apricornTreeVariety = ConfiguredFeatures.register(
cobblemonResource("apricorn_trees").toString(), Feature.SIMPLE_RANDOM_SELECTOR, SimpleRandomFeatureConfig(
RegistryEntryList.of(
BLACK_APRICORN_TREE,
BLUE_APRICORN_TREE,
GREEN_APRICORN_TREE,
PINK_APRICORN_TREE,
RED_APRICORN_TREE,
WHITE_APRICORN_TREE,
YELLOW_APRICORN_TREE
)
)
)
APRICORN_TREES = PlacedFeatures.register(cobblemonResource("apricorn_trees").toString(), apricornTreeVariety, VegetationPlacedFeatures.modifiers(RarityFilterPlacementModifier.of(8)))
BiomeModifications.addProperties({ context -> true}, { context, properties ->
properties.generationProperties.addFeature(GenerationStep.Feature.VEGETAL_DECORATION, APRICORN_TREES)
})
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,20 +8,86 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.registry.CompletableRegistry
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.sound.SoundEvent
import net.minecraft.util.registry.Registry
object CobblemonSounds : CompletableRegistry<SoundEvent>(Registry.SOUND_EVENT_KEY) {
private fun queue(name: String) = queue(name) { SoundEvent(cobblemonResource(name)) }
object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Registry<SoundEvent>>, SoundEvent>() {
val POKE_BALL_CAPTURE_STARTED = queue("poke_ball.capture_started")
val POKE_BALL_CAPTURE_SUCCEEDED = queue("poke_ball.capture_succeeded")
val POKE_BALL_SHAKE = queue("poke_ball.shake")
val POKE_BALL_OPEN = queue("poke_ball.open")
val POKE_BALL_HIT = queue("poke_ball.hit")
val POKE_BALL_SEND_OUT = queue("poke_ball.send_out")
val POKE_BALL_RECALL = queue("poke_ball.recall")
val ITEM_USE = queue("item.use")
override val registry: Registry<SoundEvent> = Registries.SOUND_EVENT
override val registryKey: RegistryKey<Registry<SoundEvent>> = RegistryKeys.SOUND_EVENT
@JvmField
val GUI_CLICK = this.create("gui.click")
@JvmField
val PC_ON = this.create("pc.on")
@JvmField
val PC_OFF = this.create("pc.off")
@JvmField
val PC_GRAB = this.create("pc.grab")
@JvmField
val PC_DROP = this.create("pc.drop")
@JvmField
val PC_RELEASE = this.create("pc.release")
@JvmField
val PC_CLICK = this.create("pc.click")
@JvmField
val HEALING_MACHINE_ACTIVE = this.create("healing_machine.active")
@JvmField
val POKE_BALL_CAPTURE_STARTED = this.create("poke_ball.capture_started")
@JvmField
val POKE_BALL_CAPTURE_SUCCEEDED = this.create("poke_ball.capture_succeeded")
@JvmField
val POKE_BALL_SHAKE = this.create("poke_ball.shake")
@JvmField
val POKE_BALL_OPEN = this.create("poke_ball.open")
@JvmField
val POKE_BALL_HIT = this.create("poke_ball.hit")
@JvmField
val POKE_BALL_SEND_OUT = this.create("poke_ball.send_out")
@JvmField
val POKE_BALL_RECALL = this.create("poke_ball.recall")
@JvmField
val ITEM_USE = this.create("item.use")
@JvmField
val CAN_EVOLVE = this.create("pokemon.can_evolve")
@JvmField
val EVOLVING = this.create("pokemon.evolving")
@JvmField
val PVN_BATTLE = this.create("battle.pvn.default")
@JvmField
val PVP_BATTLE = this.create("battle.pvp.default")
@JvmField
val PVW_BATTLE = this.create("battle.pvw.default")
@JvmField
val MEDICINE_HERB_USE = this.create("medicine_herb.use")
@JvmField
val MEDICINE_LIQUID_USE = this.create("medicine_liquid.use")
@JvmField
val MEDICINE_PILLS_USE = this.create("medicine_pills.use")
@JvmField
val MEDICINE_SPRAY_USE = this.create("medicine_spray.use")
@JvmField
val BERRY_HARVEST = this.create("berry.harvest")
@JvmField
val BERRY_EAT = this.create("berry.eat")
@JvmField
val MULCH_PLACE = this.create("mulch.place")
@JvmField
val MULCH_REMOVE = this.create("mulch.remove")
private fun create(name: String): SoundEvent = this.create(name, SoundEvent.of(cobblemonResource(name)))
}
@@ -0,0 +1,92 @@
/*
* 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
import net.minecraft.registry.Registries
import net.minecraft.village.TradeOffers
import net.minecraft.village.VillagerData
import net.minecraft.village.VillagerProfession
/**
* A generator for various trade offers in the mod.
*/
object CobblemonTradeOffers {
/**
* Creates a list of all Cobblemon trade offers for every villager profession.
*
* @return The resulting list.
*/
fun tradeOffersForAll(): List<VillagerTradeOffer> = Registries.VILLAGER_PROFESSION.map(this::tradeOffersFor).flatten()
/**
* Creates a list of all Cobblemon trade offers for the given [VillagerProfession].
*
* @param profession The [VillagerProfession] being queried.
* @return The resulting list.
*/
fun tradeOffersFor(profession: VillagerProfession): List<VillagerTradeOffer> = when (profession) {
VillagerProfession.FARMER -> listOf(VillagerTradeOffer(VillagerProfession.FARMER, 3, listOf(TradeOffers.SellItemFactory(CobblemonItems.VIVICHOKE_SEEDS, 24, 1, 1, 6))))
else -> emptyList()
}
/**
* Creates a list of all Cobblemon trade offers for the Wandering trader.
*
* @return The resulting list.
*/
fun resolveWanderingTradeOffers(): List<WandererTradeOffer> = listOf(
WandererTradeOffer(false, listOf(TradeOffers.SellItemFactory(CobblemonItems.VIVICHOKE_SEEDS, 24, 1, 1, 6)))
)
/**
* Represents a trade offer that can be attached to a villager or a wandering trader.
*/
interface TradeOfferHolder {
/**
* The list of the possible [TradeOffers.Factory].
*/
val tradeOffers: List<TradeOffers.Factory>
}
/**
* Represents a trade offer from a villager.
*
* @property profession The target profession for this trade.
* @property requiredLevel The level required must be a possible level.
* @property tradeOffers The list of the possible [TradeOffers.Factory].
*
* @throws IllegalArgumentException If the [requiredLevel] is not within the bounds of [VillagerData.MIN_LEVEL] & [VillagerData.MAX_LEVEL].
*/
data class VillagerTradeOffer(
val profession: VillagerProfession,
val requiredLevel: Int,
override val tradeOffers: List<TradeOffers.Factory>
) : TradeOfferHolder {
init {
if (this.requiredLevel < VillagerData.MIN_LEVEL || this.requiredLevel > VillagerData.MAX_LEVEL) {
throw IllegalArgumentException("${this.requiredLevel} is not a valid level for a villager trade accepted range is ${VillagerData.MIN_LEVEL}-${VillagerData.MAX_LEVEL}")
}
}
}
/**
* Represents a trade offer from a wandering trader.
*
* @property isRareTrade If this is rare or common trade.
* @property tradeOffers The list of the possible [TradeOffers.Factory].
*/
data class WandererTradeOffer(
val isRareTrade: Boolean,
override val tradeOffers: List<TradeOffers.Factory>
) : TradeOfferHolder
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,12 +8,10 @@
package com.cobblemon.mod.common.advancement
import com.cobblemon.mod.common.advancement.criterion.CaughtPokemonCriterionCondition
import com.cobblemon.mod.common.advancement.criterion.PickStarterCriterionCondition
import com.cobblemon.mod.common.advancement.criterion.SimpleCountableCriterionCondition
import com.cobblemon.mod.common.advancement.criterion.SimpleCriterionTrigger
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.advancement.criterion.*
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.advancement.criterion.Criteria
import net.minecraft.advancement.criterion.Criterion
/**
* Contains all the advancement criteria in Cobblemon.
@@ -22,40 +20,92 @@ import net.minecraft.advancement.criterion.Criteria
* @since October 26th, 2022
*/
object CobblemonCriteria {
val PICK_STARTER = Criteria.register(
val PICK_STARTER = this.create(
SimpleCriterionTrigger(
cobblemonResource("pick_starter"),
PickStarterCriterionCondition::class.java
)
)
val CATCH_POKEMON = Criteria.register(
val CATCH_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("catch_pokemon"),
CaughtPokemonCriterionCondition::class.java
)
)
val CATCH_SHINY_POKEMON = Criteria.register(
val CATCH_SHINY_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("catch_shiny_pokemon"),
SimpleCountableCriterionCondition::class.java
)
)
val EGG_HATCH = Criteria.register(
val EGG_HATCH = this.create(
SimpleCriterionTrigger(
cobblemonResource("eggs_hatched"),
SimpleCountableCriterionCondition::class.java
)
)
val EVOLVE_POKEMON = Criteria.register(
val EVOLVE_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("pokemon_evolved"),
SimpleCountableCriterionCondition::class.java
EvolvePokemonCriterionCondition::class.java
)
)
val WIN_BATTLE = Criteria.register(
SimpleCriterionTrigger(
val WIN_BATTLE = this.create(
BattleCountableCriterionTrigger(
cobblemonResource("battles_won"),
BattleCountableCriterionCondition::class.java
)
)
val DEFEAT_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("pokemon_defeated"),
SimpleCountableCriterionCondition::class.java
)
)
val COLLECT_ASPECT = this.create(
AspectCriterionTrigger(
cobblemonResource("aspects_collected"),
AspectCriterionCondition::class.java
)
)
val POKEMON_INTERACT = this.create(
SimpleCriterionTrigger(
cobblemonResource("pokemon_interact"),
PokemonInteractCriterion::class.java
)
)
val PARTY_CHECK = this.create(
SimpleCriterionTrigger(
cobblemonResource("party"),
PartyCheckCriterion::class.java
)
)
val LEVEL_UP = this.create(
SimpleCriterionTrigger(
cobblemonResource("level_up"),
LevelUpCriterionCondition::class.java
)
)
val PASTURE_USE = this.create(
SimpleCriterionTrigger(
cobblemonResource("pasture_use"),
PickStarterCriterionCondition::class.java
)
)
val TRADE_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("trade_pokemon"),
TradePokemonCriterionCondition::class.java
)
)
private fun <T : Criterion<*>> create(criteria: T): T = Cobblemon.implementation.registerCriteria(criteria)
}
@@ -0,0 +1,45 @@
/*
* 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.google.gson.JsonArray
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
open class AspectCriterionTrigger(identifier: Identifier, criterionClass: Class<AspectCriterionCondition>) : SimpleCriterionTrigger<MutableMap<Identifier, MutableSet<String>>, AspectCriterionCondition>(identifier, criterionClass) {
}
class AspectCriterionCondition(id: Identifier, predicate: LootContextPredicate) : SimpleCriterionCondition<MutableMap<Identifier, MutableSet<String>>>(id, predicate) {
var pokemon = Identifier("cobblemon:pikachu")
var aspects = mutableListOf<String>()
override fun toJson(json: JsonObject) {
json.add("aspects", JsonArray(aspects.size).also {
aspects.forEach { aspect -> it.add(aspect) }
})
json.addProperty("pokemon", pokemon.toString())
}
override fun fromJson(json: JsonObject) {
aspects.clear()
json.getAsJsonArray("aspects").forEach { element ->
aspects.add(element.asString)
}
pokemon = json.get("pokemon").asString.asIdentifierDefaultingNamespace()
}
override fun matches(player: ServerPlayerEntity, context: MutableMap<Identifier, MutableSet<String>>): Boolean {
val caughtAspects = context.getOrDefault(pokemon, mutableSetOf())
return this.aspects.all { it in caughtAspects }
}
}
@@ -0,0 +1,67 @@
/*
* 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.Cobblemon
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.util.toJsonArray
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
open class BattleCountableCriterionTrigger(identifier: Identifier, criterionClass: Class<BattleCountableCriterionCondition>) : SimpleCriterionTrigger<BattleCountableContext, BattleCountableCriterionCondition>(identifier, criterionClass) {
}
class BattleCountableCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<BattleCountableContext>(id, predicate) {
private var battleTypes = mutableListOf("any")
override fun fromJson(json: JsonObject) {
super.fromJson(json)
if(!json.get("battle_types").isJsonNull) {
battleTypes.clear()
json.get("battle_types").asJsonArray.asList().forEach() {
battleTypes.add(it.asString)
}
}
}
override fun toJson(json: JsonObject) {
super.toJson(json)
json.add("battle_types", battleTypes.toJsonArray())
}
override fun matches(player: ServerPlayerEntity, context: BattleCountableContext): Boolean {
var typeCheck = false
val advancementData = Cobblemon.playerData.get(player).advancementData
if (battleTypes.isEmpty() || battleTypes.contains("any")) {
typeCheck = true
}
if (battleTypes.contains("pvp")) {
typeCheck = context.battle.isPvP
context.times = advancementData.totalPvPBattleVictoryCount
}
if (battleTypes.contains("pvw")) {
typeCheck = context.battle.isPvW
context.times = advancementData.totalPvWBattleVictoryCount
}
if (battleTypes.contains("pvn")) {
typeCheck = context.battle.isPvN
context.times = advancementData.totalPvWBattleVictoryCount
}
if (battleTypes.size > 1) {
context.times = advancementData.totalBattleVictoryCount
}
return context.times >= count && typeCheck
}
}
open class BattleCountableContext(times : Int, var battle : PokemonBattle) : CountableContext(times)
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,8 +8,9 @@
package com.cobblemon.mod.common.advancement.criterion
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.EntityPredicate.Extended
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
@@ -21,7 +22,7 @@ import net.minecraft.util.Identifier
*/
open class CountablePokemonTypeContext(times: Int, var type: String) : CountableContext(times)
class CaughtPokemonCriterionCondition(id: Identifier, entity: Extended) : CountableCriterionCondition<CountablePokemonTypeContext>(id, entity) {
class CaughtPokemonCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<CountablePokemonTypeContext>(id, predicate) {
var type = "any"
override fun toJson(json: JsonObject) {
super.toJson(json)
@@ -30,10 +31,14 @@ class CaughtPokemonCriterionCondition(id: Identifier, entity: Extended) : Counta
override fun fromJson(json: JsonObject) {
super.fromJson(json)
type = json.get("type")?.asString ?: "any"
var stored = json.get("type")?.asString
if (stored != null && stored != "any") {
stored = stored.asIdentifierDefaultingNamespace().toString()
}
type = stored ?: "any"
}
override fun matches(player: ServerPlayerEntity, context: CountablePokemonTypeContext): Boolean {
return super.matches(player, context) && context.type == type
return super.matches(player, context) && (context.type == type || type == "any")
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -9,7 +9,7 @@
package com.cobblemon.mod.common.advancement.criterion
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.EntityPredicate.Extended
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
@@ -20,7 +20,7 @@ import net.minecraft.util.Identifier
* @author Hiroku
* @since November 4th, 2022
*/
abstract class CountableCriterionCondition<T : CountableContext>(id: Identifier, entity: Extended) : SimpleCriterionCondition<T>(id, entity) {
abstract class CountableCriterionCondition<T : CountableContext>(id: Identifier, predicate: LootContextPredicate) : SimpleCriterionCondition<T>(id, predicate) {
var count = 0
override fun fromJson(json: JsonObject) {
count = json.get("count")?.asInt ?: 0
@@ -43,7 +43,7 @@ abstract class CountableCriterionCondition<T : CountableContext>(id: Identifier,
* @author Hiroku
* @since November 4th, 2022
*/
class SimpleCountableCriterionCondition(id: Identifier, entity: Extended) : CountableCriterionCondition<CountableContext>(id, entity)
class SimpleCountableCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<CountableContext>(id, predicate)
fun SimpleCriterionTrigger<CountableContext, SimpleCountableCriterionCondition>.trigger(player: ServerPlayerEntity, times: Int) = trigger(player, CountableContext(times))
/**
@@ -0,0 +1,38 @@
/*
* 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.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
class EvolvePokemonCriterionCondition(id: Identifier, entity: LootContextPredicate) : CountableCriterionCondition<EvolvePokemonContext>(id, entity) {
var species = "any"
var evolution = "any"
override fun toJson(json: JsonObject) {
super.toJson(json)
json.addProperty("species", species)
json.addProperty("evolution", evolution)
}
override fun fromJson(json: JsonObject) {
super.fromJson(json)
species = json.get("species")?.asString ?: "any"
evolution = json.get("evolution")?.asString ?: "any"
}
override fun matches(player: ServerPlayerEntity, context: EvolvePokemonContext): Boolean {
return context.times >= count && (context.species == species.asIdentifierDefaultingNamespace() || species == "any") &&
(context.evolution == evolution.asIdentifierDefaultingNamespace() || evolution == "any")
}
}
open class EvolvePokemonContext(val species : Identifier, val evolution : Identifier, times: Int) : CountableContext(times)
@@ -0,0 +1,41 @@
/*
* 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.pokemon.Pokemon
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
class LevelUpCriterionCondition(id: Identifier, entity: LootContextPredicate) : SimpleCriterionCondition<LevelUpContext>(id, entity) {
var level = 0
var evolved = true
override fun toJson(json: JsonObject) {
json.addProperty("level", level)
json.addProperty("has_evolved", evolved)
}
override fun fromJson(json: JsonObject) {
level = json.get("level")?.asInt ?: 0
evolved = json.get("has_evolved")?.asBoolean ?: true
}
override fun matches(player: ServerPlayerEntity, context: LevelUpContext): Boolean {
val preEvo = context.pokemon.preEvolution == null
val hasEvolution = !context.pokemon.evolutions.none()
var evolutionCheck = true
if (preEvo || hasEvolution) {
evolutionCheck = !(preEvo == hasEvolution)
}
return level == context.level && evolutionCheck == evolved
}
}
open class LevelUpContext(var level : Int, var pokemon : Pokemon)
@@ -0,0 +1,54 @@
/*
* 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.api.storage.party.PlayerPartyStore
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.cobblemon.mod.common.util.party
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
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: ServerPlayerEntity, 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)
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -11,7 +11,7 @@ package com.cobblemon.mod.common.advancement.criterion
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
import com.cobblemon.mod.common.pokemon.Pokemon
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.EntityPredicate.Extended
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
@@ -21,7 +21,7 @@ import net.minecraft.util.Identifier
* @author Licious, Hiroku
* @since October 26th, 2022
*/
class PickStarterCriterionCondition(id: Identifier, entity: Extended) : SimpleCriterionCondition<Pokemon>(id, entity) {
class PickStarterCriterionCondition(id: Identifier, predicate: LootContextPredicate) : SimpleCriterionCondition<Pokemon>(id, predicate) {
var properties = PokemonProperties()
override fun toJson(json: JsonObject) {
json.addProperty("properties", properties.originalString)
@@ -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.advancement.criterion
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
open class PokemonInteractContext(var type: Identifier, var item : Identifier)
class PokemonInteractCriterion(id: Identifier, entity: LootContextPredicate) : SimpleCriterionCondition<PokemonInteractContext>(id, entity) {
var type = "any"
var item = "any"
override fun toJson(json: JsonObject) {
json.addProperty("type", type)
json.addProperty("item", item)
}
override fun fromJson(json: JsonObject) {
type = json.get("type")?.asString ?: "any"
item = json.get("item")?.asString ?: "any"
}
override fun matches(player: ServerPlayerEntity, context: PokemonInteractContext): Boolean {
return (context.type == type.asIdentifierDefaultingNamespace() || type == "any") && (context.item == item.asIdentifierDefaultingNamespace() || item == "any")
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -13,7 +13,7 @@ import net.minecraft.advancement.criterion.AbstractCriterion
import net.minecraft.advancement.criterion.AbstractCriterionConditions
import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer
import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer
import net.minecraft.predicate.entity.EntityPredicate.Extended
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
@@ -31,16 +31,17 @@ open class SimpleCriterionTrigger<T, C : SimpleCriterionCondition<T>>(
val criterionClass: Class<C>
) : AbstractCriterion<C>() {
override fun getId() = _id
fun trigger(player: ServerPlayerEntity, context: T) = this.trigger(player) { it.matches(player, context) }
override fun conditionsFromJson(
obj: JsonObject,
playerPredicate: Extended,
playerPredicate: LootContextPredicate,
predicateDeserializer: AdvancementEntityPredicateDeserializer
): C {
val instance = criterionClass.getConstructor(Identifier::class.java, Extended::class.java).newInstance(id, playerPredicate)
val instance = criterionClass.getConstructor(Identifier::class.java, LootContextPredicate::class.java).newInstance(id, playerPredicate)
instance.fromJson(obj)
return instance
}
fun trigger(player: ServerPlayerEntity, context: T) = this.trigger(player) { it.matches(player, context) }
}
/**
@@ -52,8 +53,8 @@ open class SimpleCriterionTrigger<T, C : SimpleCriterionCondition<T>>(
*/
abstract class SimpleCriterionCondition<T>(
id: Identifier,
entity: Extended
): AbstractCriterionConditions(id, entity) {
playerPredicate: LootContextPredicate
): AbstractCriterionConditions(id, playerPredicate) {
override fun toJson(predicateSerializer: AdvancementEntityPredicateSerializer): JsonObject {
val json = super.toJson(predicateSerializer)
toJson(json)
@@ -0,0 +1,47 @@
/*
* 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.pokemon.Pokemon
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
class TradePokemonCriterionCondition(id: Identifier, entity: LootContextPredicate) : SimpleCriterionCondition<TradePokemonContext>(id, entity) {
var traded = "any"
var received = "any"
var tradedHeldItem = "any"
var receivedHeldItem = "any"
override fun toJson(json: JsonObject) {
json.addProperty("traded", traded)
json.addProperty("received", received)
json.addProperty("traded_held_item", tradedHeldItem)
json.addProperty("received_held_item", receivedHeldItem)
}
override fun fromJson(json: JsonObject) {
traded = json.get("traded")?.asString ?: "any"
received = json.get("received")?.asString ?: "any"
tradedHeldItem = json.get("traded_held_item")?.asString ?: "minecraft:air"
receivedHeldItem = json.get("received_held_item")?.asString ?: "minecraft:air"
}
override fun matches(player: ServerPlayerEntity, context: TradePokemonContext): Boolean {
val heldItem1 = context.traded.heldItem().item.registryEntry.registryKey().value
val heldItem2 = context.received.heldItem().item.registryEntry.registryKey().value
return (context.traded.species.resourceIdentifier == traded.asIdentifierDefaultingNamespace() || traded == "any") &&
(context.received.species.resourceIdentifier == received.asIdentifierDefaultingNamespace() || received == "any") &&
(heldItem1 == tradedHeldItem.asIdentifierDefaultingNamespace() || heldItem1 == "minecraft:air".asIdentifierDefaultingNamespace()) &&
(heldItem2 == receivedHeldItem.asIdentifierDefaultingNamespace() || heldItem2 == "minecraft:air".asIdentifierDefaultingNamespace())
}
}
open class TradePokemonContext(val traded: Pokemon, val received: Pokemon)
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -18,7 +18,8 @@ package com.cobblemon.mod.common.api
*/
open class PrioritizedList<T> : Iterable<T> {
protected val priorityMap = mutableMapOf<Priority, MutableList<T>>()
protected val ordered = mutableListOf<T>()
// Please don't change arraylist, we need insertion order
protected val ordered = arrayListOf<T>()
val mapping: Map<Priority, List<T>>
get() = priorityMap.toMap()
@@ -31,7 +32,8 @@ open class PrioritizedList<T> : Iterable<T> {
}
fun add(priority: Priority, value: T) {
priorityMap.putIfAbsent(priority, mutableListOf())
// Please don't change arraylist, we need insertion order
priorityMap.putIfAbsent(priority, arrayListOf())
priorityMap[priority]?.add(value)
reorder()
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -9,64 +9,41 @@
package com.cobblemon.mod.common.api.abilities
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.reactive.SimpleObservable
import com.cobblemon.mod.common.battles.runner.ShowdownService
import com.cobblemon.mod.common.net.messages.client.data.AbilityRegistrySyncPacket
import com.cobblemon.mod.common.pokemon.abilities.HiddenAbilityType
import com.cobblemon.mod.common.util.asTranslated
import com.cobblemon.mod.common.util.cobblemonResource
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.google.gson.reflect.TypeToken
import java.lang.reflect.Type
import kotlin.io.path.Path
import net.minecraft.resource.ResourceManager
import net.minecraft.resource.ResourceType
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.text.MutableText
import net.minecraft.util.Identifier
/**
* Registry for all known Abilities
*/
object Abilities : JsonDataRegistry<AbilityTemplate> {
object Abilities : DataRegistry {
override val id = cobblemonResource("abilities")
override val type = ResourceType.SERVER_DATA
override val observable = SimpleObservable<Abilities>()
override val typeToken: TypeToken<AbilityTemplate> = TypeToken.get(AbilityTemplate::class.java)
override val resourcePath = "abilities"
override val gson: Gson = GsonBuilder()
.disableHtmlEscaping()
.setLenient()
.setPrettyPrinting()
.registerTypeAdapter(MutableText::class.java, MutableTextAdapter)
.create()
val DUMMY = AbilityTemplate(name = "dummy")
private val allAbilities = mutableListOf<AbilityTemplate>()
private val abilityMap = mutableMapOf<String, AbilityTemplate>()
object MutableTextAdapter : JsonDeserializer<MutableText> {
override fun deserialize(json: JsonElement, type: Type, ctx: JsonDeserializationContext) = json.asString.asTranslated()
}
override fun reload(data: Map<Identifier, AbilityTemplate>) {
override fun reload(manager: ResourceManager) {
PotentialAbility.types.clear()
PotentialAbility.types.add(CommonAbilityType)
PotentialAbility.types.add(HiddenAbilityType)
allAbilities.clear()
abilityMap.clear()
data.forEach { (identifier, abilityTemplate) ->
allAbilities.add(abilityTemplate)
abilityMap[identifier.path] = abilityTemplate
this.abilityMap.clear()
val abilitiesJson = ShowdownService.service.getAbilityIds()
for (i in 0 until abilitiesJson.size()) {
val id = abilitiesJson[i].asString
val ability = AbilityTemplate(id)
this.register(ability)
}
Cobblemon.LOGGER.info("Loaded {} abilities", this.allAbilities.size)
Cobblemon.LOGGER.info("Loaded {} abilities", this.abilityMap.size)
this.observable.emit(this)
}
@@ -75,14 +52,19 @@ object Abilities : JsonDataRegistry<AbilityTemplate> {
}
fun register(ability: AbilityTemplate): AbilityTemplate {
abilityMap[ability.name.lowercase()] = ability
allAbilities.add(ability)
this.abilityMap[ability.name.lowercase()] = ability
return ability
}
fun all() = allAbilities.toList()
fun first() = allAbilities.first()
fun all() = this.abilityMap.values.toList()
fun first() = this.abilityMap.values.first()
fun get(name: String) = abilityMap[name.lowercase()]
fun getOrException(name: String) = get(name)!!
fun count() = allAbilities.size
fun getOrException(name: String) = get(name) ?: throw IllegalArgumentException("Unable to find ability of name: $name")
fun count() = this.abilityMap.size
internal fun receiveSyncPacket(abilities: Collection<AbilityTemplate>) {
this.abilityMap.clear()
abilities.forEach { ability -> this.register(ability) }
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,10 +8,10 @@
package com.cobblemon.mod.common.api.abilities
import com.cobblemon.mod.common.api.Priority
import com.cobblemon.mod.common.util.DataKeys
import com.google.gson.JsonObject
import net.minecraft.nbt.NbtCompound
import net.minecraft.text.MutableText
/**
* Representing an Ability with all its attributes
@@ -21,27 +21,60 @@ import net.minecraft.text.MutableText
* @author Qu
* @since January 9th, 2022
*/
open class Ability internal constructor(var template: AbilityTemplate) {
open class Ability internal constructor(var template: AbilityTemplate, var forced: Boolean) {
val name: String
get() = template.name
val displayName: MutableText
val displayName: String
get() = template.displayName
val description: MutableText
val description: String
get() = template.description
/**
* This represents the last known index of this backing ability in the species data.
* If -1 the ability will attempt to find the correct index or reroll itself, this is done in order to be compatible with existing data
* The value can be mutated however this is not recommended by API users.
*/
var index: Int = -1
/**
* The last known priority of this ability in the species data.
* The value can be mutated however this is not recommended by API users.
*/
var priority = Priority.LOWEST
open fun saveToNBT(nbt: NbtCompound): NbtCompound {
nbt.putString(DataKeys.POKEMON_ABILITY_NAME, name)
nbt.putBoolean(DataKeys.POKEMON_ABILITY_FORCED, forced)
nbt.putInt(DataKeys.POKEMON_ABILITY_INDEX, index)
nbt.putString(DataKeys.POKEMON_ABILITY_PRIORITY, priority.name)
return nbt
}
open fun saveToJSON(json: JsonObject): JsonObject {
json.addProperty(DataKeys.POKEMON_ABILITY_NAME, name)
json.addProperty(DataKeys.POKEMON_ABILITY_FORCED, forced)
json.addProperty(DataKeys.POKEMON_ABILITY_INDEX, index)
json.addProperty(DataKeys.POKEMON_ABILITY_PRIORITY, priority.name)
return json
}
open fun loadFromNBT(nbt: NbtCompound) = this
open fun loadFromJSON(json: JsonObject) = this
open fun loadFromNBT(nbt: NbtCompound): Ability {
forced = nbt.getBoolean(DataKeys.POKEMON_ABILITY_FORCED)
if (nbt.contains(DataKeys.POKEMON_ABILITY_INDEX) && nbt.contains(DataKeys.POKEMON_ABILITY_PRIORITY)) {
this.index = nbt.getInt(DataKeys.POKEMON_ABILITY_INDEX)
this.priority = Priority.valueOf(nbt.getString(DataKeys.POKEMON_ABILITY_PRIORITY))
}
return this
}
open fun loadFromJSON(json: JsonObject): Ability {
forced = json.get(DataKeys.POKEMON_ABILITY_FORCED)?.asBoolean ?: false
if (json.has(DataKeys.POKEMON_ABILITY_INDEX) && json.has(DataKeys.POKEMON_ABILITY_PRIORITY)) {
this.index = json.get(DataKeys.POKEMON_ABILITY_INDEX).asInt
this.priority = Priority.valueOf(json.get(DataKeys.POKEMON_ABILITY_PRIORITY).asString)
}
return this
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -12,6 +12,8 @@ import com.cobblemon.mod.common.Cobblemon.LOGGER
import com.cobblemon.mod.common.api.PrioritizedList
import com.cobblemon.mod.common.api.Priority
import com.cobblemon.mod.common.pokemon.Species
import com.mojang.serialization.Codec
import com.mojang.serialization.DataResult
/**
* A pool of potential abilities, as a [PrioritizedList]. The added logic of this subclass
@@ -22,15 +24,35 @@ import com.cobblemon.mod.common.pokemon.Species
* @since July 28th, 2022
*/
open class AbilityPool : PrioritizedList<PotentialAbility>() {
fun select(species: Species, aspects: Set<String>): Ability {
fun select(species: Species, aspects: Set<String>): Pair<Ability, Priority> {
for (priority in Priority.values()) {
val potentialAbilities = priorityMap[priority]?.filter { it.isSatisfiedBy(aspects) } ?: continue
if (potentialAbilities.isNotEmpty()) {
return potentialAbilities.random().template.create()
return potentialAbilities.random().template.create() to priority
}
}
LOGGER.error("Unable to select an ability from the pool for $species and aspects: ${aspects.joinToString()}")
return Abilities.first().create()
LOGGER.error("Usually this happens when a client is doing logic it shouldn't. Please show this to the Cobblemon developers!")
Exception().printStackTrace()
return Abilities.first().create() to Priority.LOWEST
}
companion object {
@JvmField
val CODEC: Codec<AbilityPool> = Codec.list(Codec.STRING)
.comapFlatMap(
{ raw ->
val pool = AbilityPool()
if (raw.isEmpty()) {
return@comapFlatMap DataResult.error { "Cannot create ability pool from an empty list" }
}
raw.forEach { }
DataResult.success(pool)
}
)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,10 +8,8 @@
package com.cobblemon.mod.common.api.abilities
import com.cobblemon.mod.common.util.lang
import com.google.gson.JsonObject
import net.minecraft.nbt.NbtCompound
import net.minecraft.text.MutableText
/**
* This represents the base of an Ability.
@@ -21,14 +19,14 @@ import net.minecraft.text.MutableText
*/
class AbilityTemplate(
val name: String = "",
var builder: (AbilityTemplate) -> Ability = { Ability(it) },
val displayName: MutableText = lang("ability.$name"),
val description: MutableText = lang("ability.$name.desc")
var builder: (AbilityTemplate, forced: Boolean) -> Ability = { template, forced -> Ability(template, forced) },
val displayName: String = "cobblemon.ability.$name",
val description: String = "cobblemon.ability.$name.desc"
) {
/**
* Returns the Ability or if applicable the extension connected to this template
*/
fun create() = builder(this)
fun create(forced: Boolean = false) = builder(this, forced)
/**
@@ -36,12 +34,12 @@ class AbilityTemplate(
*
* Ability extensions need to write and read their needed data from here.
*/
fun create(nbt: NbtCompound) = builder(this).loadFromNBT(nbt)
fun create(nbt: NbtCompound) = create().loadFromNBT(nbt)
/**
* Returns the Ability and loads the given JSON object into it.
*
* Ability extensions need to write and read their needed data from here.
*/
fun create(json: JsonObject) = builder(this).loadFromJSON(json)
fun create(json: JsonObject) = create().loadFromJSON(json)
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -10,9 +10,12 @@ package com.cobblemon.mod.common.api.abilities
import com.cobblemon.mod.common.api.Priority
import com.google.gson.JsonElement
import com.mojang.serialization.Codec
interface PotentialAbilityType<T : PotentialAbility> {
fun parseFromJSON(element: JsonElement): T?
fun codec(): Codec<out PotentialAbilityType<*>>
}
/**
@@ -45,6 +48,10 @@ object CommonAbilityType : PotentialAbilityType<CommonAbility> {
}
}
}
override fun codec(): Codec<out PotentialAbilityType<*>> {
TODO("Not yet implemented")
}
}
open class CommonAbility(override val template: AbilityTemplate) : PotentialAbility {
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -10,6 +10,8 @@ package com.cobblemon.mod.common.api.ai
import com.cobblemon.mod.common.api.serialization.StringIdentifiedObjectAdapter
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.mojang.serialization.Codec
import com.mojang.serialization.DataResult
import net.minecraft.entity.ai.TargetPredicate
import net.minecraft.util.math.Box
@@ -35,7 +37,7 @@ interface SleepDepth {
override fun shouldWake(pokemonEntity: PokemonEntity): Boolean {
val nearbyPlayers = pokemonEntity.world.getPlayers(TargetPredicate.createNonAttackable(), pokemonEntity, Box.of(pokemonEntity.pos, 16.0, 16.0, 16.0))
return nearbyPlayers.none { !it.isSneaking }
return nearbyPlayers.any { !it.isSneaking }
}
}
@@ -44,6 +46,11 @@ interface SleepDepth {
"normal" to normal
)
val adapter = StringIdentifiedObjectAdapter { depths[it] ?: throw IllegalArgumentException("Unknown sleep depth: $it") }
val CODEC: Codec<SleepDepth> = Codec.STRING.flatXmap(
{ string -> depths[string]?.let { DataResult.success(it) } ?: DataResult.error { "Cannot find a SleepDepth with the ID $string" } },
{ depth -> depths.entries.firstOrNull { it.value == depth }?.let { DataResult.success(it.key) } ?: DataResult.error { "Cannot resolve a ID for the SleepDepth $depth" } }
)
}
fun canSleep(pokemonEntity: PokemonEntity): Boolean
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -10,9 +10,10 @@ package com.cobblemon.mod.common.api.apricorn
import com.cobblemon.mod.common.CobblemonBlocks
import com.cobblemon.mod.common.CobblemonItems
import com.cobblemon.mod.common.block.ApricornBlock
import com.cobblemon.mod.common.block.ApricornSaplingBlock
import com.cobblemon.mod.common.item.ApricornItem
import com.cobblemon.mod.common.world.block.ApricornBlock
import com.cobblemon.mod.common.world.block.ApricornSaplingBlock
import net.minecraft.block.MapColor
import net.minecraft.item.BlockItem
/**
@@ -32,43 +33,53 @@ enum class Apricorn {
YELLOW;
fun item(): ApricornItem = when(this) {
BLACK -> CobblemonItems.BLACK_APRICORN.get()
BLUE -> CobblemonItems.BLUE_APRICORN.get()
GREEN -> CobblemonItems.GREEN_APRICORN.get()
PINK -> CobblemonItems.PINK_APRICORN.get()
RED -> CobblemonItems.RED_APRICORN.get()
WHITE -> CobblemonItems.WHITE_APRICORN.get()
YELLOW -> CobblemonItems.YELLOW_APRICORN.get()
BLACK -> CobblemonItems.BLACK_APRICORN
BLUE -> CobblemonItems.BLUE_APRICORN
GREEN -> CobblemonItems.GREEN_APRICORN
PINK -> CobblemonItems.PINK_APRICORN
RED -> CobblemonItems.RED_APRICORN
WHITE -> CobblemonItems.WHITE_APRICORN
YELLOW -> CobblemonItems.YELLOW_APRICORN
}
fun seed(): BlockItem = when(this) {
BLACK -> CobblemonItems.BLACK_APRICORN_SEED.get()
BLUE -> CobblemonItems.BLUE_APRICORN_SEED.get()
GREEN -> CobblemonItems.GREEN_APRICORN_SEED.get()
PINK -> CobblemonItems.PINK_APRICORN_SEED.get()
RED -> CobblemonItems.RED_APRICORN_SEED.get()
WHITE -> CobblemonItems.WHITE_APRICORN_SEED.get()
YELLOW -> CobblemonItems.YELLOW_APRICORN_SEED.get()
BLACK -> CobblemonItems.BLACK_APRICORN_SEED
BLUE -> CobblemonItems.BLUE_APRICORN_SEED
GREEN -> CobblemonItems.GREEN_APRICORN_SEED
PINK -> CobblemonItems.PINK_APRICORN_SEED
RED -> CobblemonItems.RED_APRICORN_SEED
WHITE -> CobblemonItems.WHITE_APRICORN_SEED
YELLOW -> CobblemonItems.YELLOW_APRICORN_SEED
}
fun block(): ApricornBlock = when(this) {
BLACK -> CobblemonBlocks.BLACK_APRICORN.get()
BLUE -> CobblemonBlocks.BLUE_APRICORN.get()
GREEN -> CobblemonBlocks.GREEN_APRICORN.get()
PINK -> CobblemonBlocks.PINK_APRICORN.get()
RED -> CobblemonBlocks.RED_APRICORN.get()
WHITE -> CobblemonBlocks.WHITE_APRICORN.get()
YELLOW -> CobblemonBlocks.YELLOW_APRICORN.get()
BLACK -> CobblemonBlocks.BLACK_APRICORN
BLUE -> CobblemonBlocks.BLUE_APRICORN
GREEN -> CobblemonBlocks.GREEN_APRICORN
PINK -> CobblemonBlocks.PINK_APRICORN
RED -> CobblemonBlocks.RED_APRICORN
WHITE -> CobblemonBlocks.WHITE_APRICORN
YELLOW -> CobblemonBlocks.YELLOW_APRICORN
}
fun sapling(): ApricornSaplingBlock = when(this) {
BLACK -> CobblemonBlocks.BLACK_APRICORN_SAPLING.get()
BLUE -> CobblemonBlocks.BLUE_APRICORN_SAPLING.get()
GREEN -> CobblemonBlocks.GREEN_APRICORN_SAPLING.get()
PINK -> CobblemonBlocks.PINK_APRICORN_SAPLING.get()
RED -> CobblemonBlocks.RED_APRICORN_SAPLING.get()
WHITE -> CobblemonBlocks.WHITE_APRICORN_SAPLING.get()
YELLOW -> CobblemonBlocks.YELLOW_APRICORN_SAPLING.get()
BLACK -> CobblemonBlocks.BLACK_APRICORN_SAPLING
BLUE -> CobblemonBlocks.BLUE_APRICORN_SAPLING
GREEN -> CobblemonBlocks.GREEN_APRICORN_SAPLING
PINK -> CobblemonBlocks.PINK_APRICORN_SAPLING
RED -> CobblemonBlocks.RED_APRICORN_SAPLING
WHITE -> CobblemonBlocks.WHITE_APRICORN_SAPLING
YELLOW -> CobblemonBlocks.YELLOW_APRICORN_SAPLING
}
fun mapColor(): MapColor = when(this) {
BLACK -> MapColor.BLACK
BLUE -> MapColor.BLUE
GREEN -> MapColor.GREEN
PINK -> MapColor.PINK
RED -> MapColor.RED
WHITE -> MapColor.WHITE
YELLOW -> MapColor.YELLOW
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -0,0 +1,73 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.battles.interpreter
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
/**
* The context of how a condition was created or changed during a battle.
*
* @author Segfault Guy
* @since April 10th, 2023
*/
interface BattleContext {
/** The effect or condition this [BattleContext] represents. */
val id: String
/** The turn this [BattleContext] was created. */
val turn: Int
/** The [BattleContext.Type] tied to this [BattleContext]. */
val type: Type
/** The [BattlePokemon] that directly or indirectly caused this [BattleContext]. */
val origin: BattlePokemon?
/**
* The type of [BattleContext].
*
* @property damaging Whether a context of this type is a source of damage.
* @property exclusive Whether only one context of this type can exist.
*
* @author Segfault Guy
* @since April 10th, 2023
*/
enum class Type(val damaging: Boolean, val exclusive: Boolean) {
ITEM(true, true),
STATUS(true, false),
VOLATILE(true, false),
HAZARD(true, false),
WEATHER(true, true),
ROOM(false, true),
SPORT(false, false),
TERRAIN(false, true),
GRAVITY(false, true),
TAILWIND(false, true),
SCREEN(false, false),
FAINT(false, false),
BOOST(false, false),
UNBOOST(false, false),
MISC(false, false);
}
}
data class BasicContext(
override val id: String,
override val turn: Int,
override val type: BattleContext.Type,
override val origin: BattlePokemon?
) : BattleContext
data class MissingContext(
override val id: String = "error",
override val turn: Int = 0,
override val type: BattleContext.Type = BattleContext.Type.MISC,
override val origin: BattlePokemon? = null
) : BattleContext
@@ -0,0 +1,259 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.battles.interpreter
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
import com.cobblemon.mod.common.api.moves.MoveTemplate
import com.cobblemon.mod.common.api.moves.Moves
import com.cobblemon.mod.common.battles.ActiveBattlePokemon
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import java.util.UUID
/**
* A class responsible for parsing a raw simulator protocol message received from Showdown.
* For more information see the [Showdown protocol](https://github.com/smogon/pokemon-showdown/blob/master/sim/SIM-PROTOCOL.md).
*
* @constructor Creates a battle message with the given raw message.
*
* @param rawMessage The raw message received from Showdown.
*
* @author Licious
* @since December 31st, 2022
*/
class BattleMessage(rawMessage: String) {
/**
* The ID of the action received in the message.
*/
var id = ""
private set
/**
* The raw message received.
*/
var rawMessage: String = rawMessage
private set
/**
* A collection of the individual arguments the message had.
*/
private val args = arrayListOf<String>()
/**
* A collection of the optional arguments the message had.
*/
private val optionalArguments = hashMapOf<String, String>()
/**
* Pattern to match the start of an optional argument.
*/
private val optionalArgumentMatcher = Regex("^\\$OPTIONAL_ARG_START([^]]+)$OPTIONAL_ARG_END")
init {
this.parse(rawMessage)
}
/**
* Get an argument at the given [index].
*
* @param index The index of the expected argument.
* @return The argument if existing or null.
*/
fun argumentAt(index: Int): String? = this.args.getOrNull(index)
/**
* Get an optional argument with the given [name].
* This returns the data of the argument only.
*
* @param name The name of the optional argument.
* @return The argument data if existing or null.
*/
fun optionalArgument(name: String): String? = this.optionalArguments[name.lowercase()]
/**
* Checks if an optional argument is present.
* [optionalArgument] is null safe, this method is meant as a way to check 'flags' as some optional arguments contain no data.
*
* @param name The name of the optional argument.
* @return True if the argument is present.
*/
fun hasOptionalArgument(name: String): Boolean = this.optionalArgument(name) != null
/**
* Clears the parsed arguments and parses the message again with the new given [rawMessage].
*
* @param rawMessage The raw message received from Showdown.
* @return This instance of the battle message updated.
*/
fun parse(rawMessage: String): BattleMessage {
var message = rawMessage.trim()
this.id = ""
this.args.clear()
this.optionalArguments.clear()
this.rawMessage = message
if (!message.startsWith(SEPARATOR) || message == SEPARATOR) {
return this
}
message = this.push(message)
this.id = message.substringBefore(SEPARATOR)
message = this.push(message)
while (message.isNotBlank()) {
val currentData = message.substringBefore(SEPARATOR)
val optionalArgumentID = this.optionalArgumentMatcher.find(currentData)
if (optionalArgumentID != null) {
val id = optionalArgumentID.value.removePrefix(OPTIONAL_ARG_START).removeSuffix(OPTIONAL_ARG_END).lowercase()
val value = currentData.substringAfter(optionalArgumentID.value).trim()
this.optionalArguments[id] = value
}
else {
this.args.add(currentData)
}
message = this.push(message)
}
return this
}
fun pokemonByUuid(index: Int, battle: PokemonBattle): BattlePokemon? {
return this.argumentAt(index)?.let { UUID.fromString(it) }?.let { uuid -> battle.actors.flatMap { it.pokemonList }.find { it.uuid == uuid } }
}
/**
* Queries an argument at the given [index] for a 'pnx' that will be parsed into a [BattleActor] and [ActiveBattlePokemon].
*
* @param index The index of the argument containing the [BattleActor] and [ActiveBattlePokemon].
* @param battle The [PokemonBattle] being queried.
* @return A pair of [BattleActor] and [ActiveBattlePokemon] if the argument exists and successfully parses them otherwise null.
*/
fun actorAndActivePokemon(index: Int, battle: PokemonBattle): Pair<BattleActor, ActiveBattlePokemon>? {
val (pnx, _) = this.pnxAndUuid(index) ?: return null
return this.actorAndActivePokemon(pnx, battle)
}
/*
Example:
|-curestatus|p1: a8e5710e-6835-4387-99d3-331b45f848e6|slp|[msg]
|-curestatus|p1: 0686b20d-3019-4167-92e2-786834245743|slp|[msg]
// Function used to grab BattlePokemon (As we need to be able to grab non active pokemon to cure their status)
// by using playerNumber(actorID) and pokemon uuid(pokemonID)
*/
fun getBattlePokemon(index: Int, battle: PokemonBattle): BattlePokemon? {
val actorAndPokemonID = this.argumentAt(index)?.takeIf { it.length >= 2 }?.split(": ") ?: return null
if (actorAndPokemonID.count() < 2) return null
val actorID = actorAndPokemonID[0]
val pokemonID = actorAndPokemonID[1]
return this.getBattlePokemon(actorID, pokemonID, battle)
}
fun getSourceBattlePokemon(battle: PokemonBattle): BattlePokemon? {
val sourcePokemonArgument = this.optionalArguments.get("of") ?: return null
val actorAndPokemonID = sourcePokemonArgument.takeIf { it.length >= 2 }?.split(": ") ?: return null
if (actorAndPokemonID.count() < 2) return null
val actorID = actorAndPokemonID[0]
val pokemonID = actorAndPokemonID[1]
return this.getBattlePokemon(actorID, pokemonID, battle)
}
/**
* Deconstructs the Showdown ID of a Pokemon at the given [index] into its 'pnx' and 'uuid' parts.
*
* @param index The index of the argument containing the Showdown ID of a Pokemon.
* @return A 'pnx' String representing position and a 'uuid' String representing the unique Pokemon if parsed correctly, otherwise null.
*/
fun pnxAndUuid(index: Int): Pair<String, String>? {
val argument = this.argumentAt(index)?.takeIf { it.length >= 2 }?.split(":")?.takeIf { it.size == 2 } ?: return null
val pnx = argument[0].takeIf { it.matches(PNX_MATCHER) } ?: return null
val uuid = argument[1].trim()
return pnx to uuid
}
/**
* Attempts to parse an [Effect] from an argument at the given [index].
*
* @param index The index of the expected argument.
* @return The parsed [Effect] or null.
*/
fun effectAt(index: Int): Effect? {
val data = this.argumentAt(index) ?: return null
return Effect.parse(data)
}
/**
* Attempts to parse an [Effect] from an optional argument.
*
* @param argumentName The name of the optional argument.
* @return The parsed [Effect] or null.
*/
fun effect(argumentName: String = "from"): Effect? {
val data = this.optionalArgument(argumentName) ?: return null
return Effect.parse(data)
}
fun moveAt(index: Int): MoveTemplate? {
val argument = argumentAt(index)?.lowercase()?.replace("[^a-z0-9]".toRegex(), "") ?: return null
return Moves.getByName(argument)
}
/**
* Queries an optional argument with given [argumentName] for a 'pnx' that will be parsed into a [BattleActor] and [ActiveBattlePokemon].
*
* @param battle The [PokemonBattle] being queried.
* @param argumentName The name of the optional argument.
* @return A pair of [BattleActor] and [ActiveBattlePokemon] if the argument exists and successfully parses them otherwise null.
*/
fun actorAndActivePokemonFromOptional(battle: PokemonBattle, argumentName: String = "of"): Pair<BattleActor, ActiveBattlePokemon>? {
val pnx = this.optionalArgument(argumentName)?.takeIf { it.length >= 3 }?.substring(0, 3) ?: return null
return this.actorAndActivePokemon(pnx, battle)
}
/**
* Pushes the given string down into the next argument.
*
* @param message The current state of the message.
* @return A substring of [message] after the first [SEPARATOR] or empty if no [SEPARATOR] remains.
*/
private fun push(message: String): String = message.substringAfter(SEPARATOR, "")
/**
* A utility to wrap [PokemonBattle.getActorAndActiveSlotFromPNX] to make it nullable instead of throwing an exception.
*
* @param pnx The raw pnx.
* @param battle The [PokemonBattle] being queried.
* @returnA pair of [BattleActor] and [ActiveBattlePokemon] if [PokemonBattle.getActorAndActiveSlotFromPNX] executes without any exception being thrown or else null.
*/
private fun actorAndActivePokemon(pnx: String, battle: PokemonBattle): Pair<BattleActor, ActiveBattlePokemon>? = try {
battle.getActorAndActiveSlotFromPNX(pnx)
} catch (_: Exception) {
null
}
private fun getBattlePokemon(pnx: String, pokemonID: String, battle: PokemonBattle): BattlePokemon? = try {
battle.getBattlePokemon(pnx, pokemonID)
} catch (_: Exception) {
null
}
companion object {
private const val SEPARATOR = "|"
private const val OPTIONAL_ARG_START = "["
private const val OPTIONAL_ARG_END = "]"
/**
* Pattern to match a Showdown position e.g. p2a, p1b
*/
val PNX_MATCHER = Regex("p\\d[a-c]")
/**
* Pattern to match a Showdown side position e.g. p2, p1
*/
val PN_MATCHER = Regex("p\\d")
}
}
@@ -0,0 +1,149 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.battles.interpreter
import com.cobblemon.mod.common.api.abilities.Abilities
import com.cobblemon.mod.common.api.data.ShowdownIdentifiable
import com.cobblemon.mod.common.api.moves.Moves
import com.cobblemon.mod.common.battles.interpreter.CobblemonEffect
/**
* A representation of an effect received from Showdown inside a [BattleMessage].
*
* @author Licious
* @since December 31st, 2022
*/
interface Effect {
/**
* The literal ID of this [Effect].
*/
val id: String
/**
* The [Effect.Type] of this [Effect].
*/
val type: Type
/**
* The raw literal data received when parsing this [Effect].
*/
val rawData: String
val typelessData: String
get() = rawData.substringAfter(type.prefix).trim()
/**
* Represents the type of the [Effect].
*
* @property prefix The literal prefix used to identify the type by the Showdown simulator protocol.
*
* @author Licious
* @since December 31st, 2022
*/
enum class Type(val prefix: String) {
ABILITY("ability:"),
ITEM("item:"),
MOVE("move:"),
BAGITEM("bagitem:"),
PURE(""),
}
companion object {
/**
* Creates an [Effect].
*
* @param id The ID of the effect, this may be validated
* @param type The [Effect.Type].
* @param rawData The received string in the battle message.
* @return An [Effect] containing the given data of the given [type].
*/
private fun of(id: String, type: Type, rawData: String): Effect = CobblemonEffect(id, type, rawData)
/**
* Creates an [Effect] with type [Effect.Type.ABILITY].
*
* @param id The ID of the effect, meant to be present in [Abilities].
* @param rawData The received string in the battle message.
* @return An [Effect] containing the given data of [Effect.Type.ABILITY].
*
* @throws IllegalArgumentException If the [id] cannot be found in the [Abilities] registry.
*/
fun ability(id: String, rawData: String): Effect {
if (Abilities.get(id) == null) {
throw IllegalArgumentException("Cannot instance ability effect with ID $id")
}
return of(id, Type.ABILITY, rawData)
}
/**
* Creates an [Effect] with type [Effect.Type.ITEM].
*
* @param id The ID of the effect. This should be trusted as Showdown keeps the held items on their end.
* @param rawData The received string in the battle message.
* @return An [Effect] containing the given data of [Effect.Type.ITEM].
*/
fun item(id: String, rawData: String): Effect = of(id, Type.ITEM, rawData)
/**
* Creates an [Effect] with type [Effect.Type.MOVE].
*
* @param id The ID of the effect, meant to be present in [Moves].
* @param rawData The received string in the battle message.
* @return An [Effect] containing the given data of [Effect.Type.MOVE].
*
* @throws IllegalArgumentException If the [id] cannot be found in the [Moves] registry.
*/
fun move(id: String, rawData: String): Effect {
if (Moves.getByName(id) == null) {
throw IllegalArgumentException("Cannot instance move effect with ID $id")
}
return of(id, Type.MOVE, rawData)
}
/**
* Creates a "pure" [Effect].
* This is the representation of a purely literal effect by Showdown.
*
* @param id The ID of the effect.
* @param rawData The received string in the battle message.
* @return An [Effect] containing the given data of [Effect.Type.PURE].
*/
fun pure(id: String, rawData: String): Effect = of(id, Type.PURE, rawData)
/**
* Parses an [Effect] from the given [rawData].
*
* @param rawData The raw data expecting to create an [Effect].
* @return The parsed [Effect] or null if the raw data is blank or the parsed effect throws an [IllegalArgumentException].
*
* @throws IllegalArgumentException if the parsed type doesn't allow the resulting ID.
*/
fun parse(rawData: String): Effect? {
if (rawData.isBlank()) {
return null
}
return try {
when {
rawData.startsWith(Type.ABILITY.prefix) -> ability(rawData.lowercase().substringAfter(Type.ABILITY.prefix).replace(ShowdownIdentifiable.REGEX, ""), rawData)
rawData.startsWith(Type.ITEM.prefix) -> item(rawData.lowercase().substringAfter(Type.ITEM.prefix).replace(ShowdownIdentifiable.REGEX, ""), rawData)
rawData.startsWith(Type.MOVE.prefix) -> move(rawData.lowercase().substringAfter(Type.MOVE.prefix).replace(ShowdownIdentifiable.REGEX, ""), rawData)
else -> pure(rawData.lowercase().replace(ShowdownIdentifiable.REGEX, ""), rawData)
}
} catch (_: Exception) {
null
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -10,31 +10,43 @@ package com.cobblemon.mod.common.api.battles.model
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.Cobblemon.LOGGER
import com.cobblemon.mod.common.Cobblemon.showdown
import com.cobblemon.mod.common.CobblemonNetwork
import com.cobblemon.mod.common.api.battles.interpreter.BattleMessage
import com.cobblemon.mod.common.api.battles.model.actor.ActorType
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
import com.cobblemon.mod.common.api.battles.model.actor.EntityBackedBattleActor
import com.cobblemon.mod.common.api.battles.model.actor.FleeableBattleActor
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.battles.BattleFledEvent
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
import com.cobblemon.mod.common.api.text.red
import com.cobblemon.mod.common.api.text.yellow
import com.cobblemon.mod.common.battles.ActiveBattlePokemon
import com.cobblemon.mod.common.battles.BattleCaptureAction
import com.cobblemon.mod.common.battles.BattleFormat
import com.cobblemon.mod.common.battles.BattleRegistry
import com.cobblemon.mod.common.battles.BattleSide
import com.cobblemon.mod.common.battles.actor.PlayerBattleActor
import com.cobblemon.mod.common.battles.dispatch.BattleDispatch
import com.cobblemon.mod.common.battles.dispatch.DispatchResult
import com.cobblemon.mod.common.battles.dispatch.GO
import com.cobblemon.mod.common.battles.dispatch.WaitDispatch
import com.cobblemon.mod.common.battles.interpreter.ContextManager
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.battles.runner.ShowdownService
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.net.messages.client.battle.BattleEndPacket
import com.cobblemon.mod.common.pokemon.feature.BattleCriticalHitsFeature
import com.cobblemon.mod.common.util.DataKeys
import com.cobblemon.mod.common.net.messages.client.battle.BattleMessagePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleMusicPacket
import com.cobblemon.mod.common.pokemon.evolution.progress.DefeatEvolutionProgress
import com.cobblemon.mod.common.pokemon.evolution.requirements.DefeatRequirement
import com.cobblemon.mod.common.util.battleLang
import com.cobblemon.mod.common.util.getPlayer
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import java.io.File
import java.util.UUID
import java.util.concurrent.ConcurrentLinkedQueue
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.text.Text
/**
@@ -48,14 +60,15 @@ open class PokemonBattle(
val side1: BattleSide,
val side2: BattleSide
) {
/** Whether or not logging will be silenced for this battle. */
/** Whether logging will be silenced for this battle. */
var mute = true
init {
side1.battle = this
side2.battle = this
this.actors.forEach { actor ->
actor.pokemonList.forEach { battlePokemon ->
battlePokemon.effectedPokemon.getFeature<BattleCriticalHitsFeature>(BattleCriticalHitsFeature.ID)?.reset()
battlePokemon.criticalHits = 0
}
}
}
@@ -74,6 +87,7 @@ open class PokemonBattle(
val battleId = UUID.randomUUID()
val showdownMessages = mutableListOf<String>()
val battleLog = mutableListOf<String>()
var started = false
var ended = false
// TEMP battle showcase stuff
@@ -84,9 +98,14 @@ open class PokemonBattle(
var dispatchResult = GO
val dispatches = ConcurrentLinkedQueue<BattleDispatch>()
val afterDispatches = mutableListOf<() -> Unit>()
val captureActions = mutableListOf<BattleCaptureAction>()
val majorBattleActions = hashMapOf<UUID, BattleMessage>()
val minorBattleActions = hashMapOf<UUID, BattleMessage>()
val contextManager = ContextManager()
/** Whether or not there is one side with at least one player, and the other only has wild Pokémon. */
val isPvW: Boolean
get() {
@@ -129,6 +148,11 @@ open class PokemonBattle(
return actors.find { actor -> actor.uuid == actorId }
}
/**
* Gets the first battle actor whom the given player controls, or null if there is no such actor.
*/
fun getActor(player: ServerPlayerEntity) = actors.firstOrNull { it.isForPlayer(player) }
/**
* Gets a BattleActor and an [ActiveBattlePokemon] from a pnx key, e.g. p2a
*
@@ -143,22 +167,25 @@ open class PokemonBattle(
return actor to pokemon
}
fun getBattlePokemon(pnx: String, pokemonID: String): BattlePokemon {
val actor = actors.find { it.showdownId == pnx.substring(0, 2) }
?: throw IllegalStateException("Invalid pnx: $pnx - unknown actor")
return actor.pokemonList.find { it.uuid.toString() == pokemonID }
?: throw IllegalStateException("Invalid pnx: $pnx - unknown pokemon")
}
fun broadcastChatMessage(component: Text) {
spectators.forEach { spectatorId ->
spectatorId.getPlayer()?.let {
CobblemonNetwork.sendPacketToPlayer(it, BattleMessagePacket(component))
}
}
return actors.forEach { it.sendMessage(component) }
}
fun writeShowdownAction(vararg messages: String) {
val jsonArray = JsonArray()
for (message in messages) {
jsonArray.add(message)
}
val request = JsonObject()
request.addProperty(DataKeys.REQUEST_TYPE, DataKeys.REQUEST_BATTLE_SEND_MESSAGE)
request.addProperty(DataKeys.REQUEST_BATTLE_ID, battleId.toString())
request.add(DataKeys.REQUEST_MESSAGES, jsonArray)
val json = BattleRegistry.gson.toJson(request)
log(json)
showdown.write(json)
log(messages.joinToString("\n"))
ShowdownService.service.send(battleId, messages.toList().toTypedArray())
}
fun turn(newTurnNumber: Int) {
@@ -175,20 +202,55 @@ open class PokemonBattle(
fun end() {
ended = true
for (actor in actors) {
for (pokemon in actor.pokemonList.filter { it.health > 0 }) {
if (pokemon.facedOpponents.isNotEmpty() /* TODO exp share held item check */) {
val experience = Cobblemon.experienceCalculator.calculate(pokemon)
if (experience > 0) {
actor.awardExperience(pokemon, (experience * Cobblemon.config.experienceMultiplier).toInt())
}
Cobblemon.evYieldCalculator.calculate(pokemon).forEach { (stat, amount) ->
pokemon.originalPokemon.evs.add(stat, amount)
this.actors.forEach { actor ->
val faintedPokemons = actor.pokemonList.filter { it.health <= 0 }
actor.getSide().getOppositeSide().actors.forEach { opponent ->
val opponentNonFaintedPokemons = opponent.pokemonList.filter { it.health > 0 }
faintedPokemons.forEach { faintedPokemon ->
for (opponentPokemon in opponentNonFaintedPokemons) {
val facedFainted = opponentPokemon.facedOpponents.contains(faintedPokemon)
val pokemon = opponentPokemon.effectedPokemon
if (facedFainted) {
pokemon.evolutions.forEach { evolution ->
evolution.requirements.filterIsInstance<DefeatRequirement>().forEach { defeatRequirement ->
if (defeatRequirement.target.matches(faintedPokemon.effectedPokemon)) {
val progress = pokemon.evolutionProxy.current().progressFirstOrCreate({ it is DefeatEvolutionProgress && it.currentProgress().target == defeatRequirement.target }) { DefeatEvolutionProgress() }
progress.updateProgress(DefeatEvolutionProgress.Progress(defeatRequirement.target, progress.currentProgress().amount + 1))
}
}
}
}
val multiplier = when {
// ToDo when Exp. All is implement if enabled && !facedFainted return 2.0, probably should be a configurable value too, this will have priority over the Exp. Share
!facedFainted && pokemon.heldItemNoCopy().isIn(CobblemonItemTags.EXPERIENCE_SHARE) -> Cobblemon.config.experienceShareMultiplier
// ToDo when Exp. All is implemented the facedFainted and else can be collapsed into the 1.0 return value
facedFainted -> 1.0
else -> continue
}
val experience = Cobblemon.experienceCalculator.calculate(opponentPokemon, faintedPokemon, multiplier)
if (experience > 0) {
opponent.awardExperience(opponentPokemon, experience)
}
Cobblemon.evYieldCalculator.calculate(opponentPokemon, faintedPokemon).forEach { (stat, amount) ->
pokemon.evs.add(stat, amount)
}
}
}
}
}
// Heal Mon if wild
actors.filter { it.type == ActorType.WILD }
.filterIsInstance<EntityBackedBattleActor<*>>()
.mapNotNull { it.entity }
.filterIsInstance<PokemonEntity>()
.forEach{it.pokemon.heal()}
actors.forEach { actor ->
actor.pokemonList.forEach { battlePokemon ->
battlePokemon.entity?.let { entity -> battlePokemon.postBattleEntityOperation(entity) }
}
}
sendUpdate(BattleEndPacket())
sendUpdate(BattleMusicPacket(null))
BattleRegistry.closeBattle(this)
}
@@ -201,24 +263,56 @@ open class PokemonBattle(
if (!mute) {
LOGGER.info(message)
}
battleLog.add(message)
}
fun sendUpdate(packet: NetworkPacket) {
fun saveBattleLog() {
val battleLogsDir = File("./battle_logs/")
if (!battleLogsDir.exists()) {
battleLogsDir.mkdirs()
}
val logFile = File(battleLogsDir, "$battleId.txt")
logFile.bufferedWriter().use { out ->
battleLog.forEach {
out.write(it)
out.newLine()
}
}
LOGGER.info("Saved battle log as $battleId.txt")
}
fun sendUpdate(packet: NetworkPacket<*>) {
actors.forEach { it.sendUpdate(packet) }
sendSpectatorUpdate(packet)
}
fun sendToActors(packet: NetworkPacket) {
CobblemonNetwork.sendToPlayers(actors.flatMap { it.getPlayerUUIDs().mapNotNull { it.getPlayer() } }, packet)
/**
* Sends a packet depending on the side of an actor.
*
* @param source The actor that triggered the necessity for this update.
* @param allyPacket The packet sent to the [source] and their allies.
* @param opponentPacket The packet sent to the opposing actors.
* @param spectatorsAsAlly If the spectators receive the [allyPacket] or the [opponentPacket], default is false.
*/
fun sendSidedUpdate(source: BattleActor, allyPacket: NetworkPacket<*>, opponentPacket: NetworkPacket<*>, spectatorsAsAlly: Boolean = false) {
source.getSide().actors.forEach { it.sendUpdate(allyPacket) }
source.getSide().getOppositeSide().actors.forEach { it.sendUpdate(opponentPacket) }
sendSpectatorUpdate(if (spectatorsAsAlly) allyPacket else opponentPacket)
}
fun sendSplitUpdate(privateActor: BattleActor, publicPacket: NetworkPacket, privatePacket: NetworkPacket) {
fun sendToActors(packet: NetworkPacket<*>) {
CobblemonNetwork.sendPacketToPlayers(actors.flatMap { it.getPlayerUUIDs().mapNotNull { it.getPlayer() } }, packet)
}
fun sendSplitUpdate(privateActor: BattleActor, publicPacket: NetworkPacket<*>, privatePacket: NetworkPacket<*>) {
actors.forEach { it.sendUpdate(if (it == privateActor) privatePacket else publicPacket) }
sendSpectatorUpdate(publicPacket)
}
fun sendSpectatorUpdate(packet: NetworkPacket) {
CobblemonNetwork.sendToPlayers(spectators.mapNotNull { it.getPlayer() }, packet)
fun sendSpectatorUpdate(packet: NetworkPacket<*>) {
CobblemonNetwork.sendPacketToPlayers(spectators.mapNotNull { it.getPlayer() }, packet)
}
fun dispatch(dispatcher: () -> DispatchResult) {
@@ -232,6 +326,13 @@ open class PokemonBattle(
}
}
fun dispatchWaiting(delaySeconds: Float = 1F, dispatcher: () -> Unit) {
dispatch {
dispatcher()
WaitDispatch(delaySeconds)
}
}
fun dispatchInsert(dispatcher: () -> Iterable<BattleDispatch>) {
dispatch {
val newDispatches = dispatcher()
@@ -247,13 +348,31 @@ open class PokemonBattle(
dispatches.add(dispatcher)
}
fun doWhenClear(action: () -> Unit) {
afterDispatches.add(action)
}
fun tick() {
while (dispatchResult.canProceed()) {
val dispatch = dispatches.poll() ?: break
dispatchResult = dispatch(this)
try {
while (dispatchResult.canProceed()) {
val dispatch = dispatches.poll() ?: break
dispatchResult = dispatch(this)
}
if (dispatches.isEmpty()) {
afterDispatches.toList().forEach { it() }
afterDispatches.clear()
}
} catch (e: Exception) {
LOGGER.error("Exception while ticking a battle. Saving battle log.", e)
val message = battleLang("crash").red()
this.actors.filterIsInstance<PlayerBattleActor>().forEach { it.entity?.sendMessage(message) }
this.saveBattleLog()
this.stop()
return
}
if (started && isPvW && !ended) {
if (started && isPvW && !ended && dispatches.isEmpty()) {
checkFlee()
}
}
@@ -264,18 +383,27 @@ open class PokemonBattle(
.filterIsInstance<FleeableBattleActor>()
.filter { it.getWorldAndPosition() != null }
.none { pokemonActor ->
val (world, pos) = pokemonActor.getWorldAndPosition()!!
val nearestPlayerActorDistance = actors
.filter { it.type == ActorType.PLAYER }
.filterIsInstance<EntityBackedBattleActor<*>>()
.mapNotNull { it.entity }
.filter { it.world == world }
.minOfOrNull { pos.distanceTo(it.pos) }
if (pokemonActor.fleeDistance == -1F) true
else {
val (world, pos) = pokemonActor.getWorldAndPosition()!!
val nearestPlayerActorDistance = actors.asSequence()
.filter { it.type == ActorType.PLAYER }
.filterIsInstance<EntityBackedBattleActor<*>>()
.mapNotNull { it.entity }
.filter { it.world == world }
.minOfOrNull { pos.distanceTo(it.pos) }
nearestPlayerActorDistance != null && nearestPlayerActorDistance < pokemonActor.fleeDistance
nearestPlayerActorDistance != null && nearestPlayerActorDistance < pokemonActor.fleeDistance
}
}
if (wildPokemonOutOfRange) {
// Heal Wild Pokemon
actors.filter { it.type == ActorType.WILD }
.filterIsInstance<EntityBackedBattleActor<*>>()
.mapNotNull { it.entity }
.filterIsInstance<PokemonEntity>()
.forEach{it.pokemon.heal()}
CobblemonEvents.BATTLE_FLED.post(BattleFledEvent(this, actors.asSequence().filterIsInstance<PlayerBattleActor>().iterator().next()))
actors.filterIsInstance<EntityBackedBattleActor<*>>().mapNotNull { it.entity }.forEach { it.sendMessage(battleLang("flee").yellow()) }
stop()
}
@@ -293,4 +421,35 @@ open class PokemonBattle(
actors.forEach { it.responses.clear() ; it.request = null }
}
}
}
/**
* Creates a [Text] representation of an error to interpret a battle message.
* This also logs the error, the goal of this function is to make sure users see missing interpretations and report them to us.
* Logging is independent of [mute].
*
* @param message The [BattleMessage] that wasn't able to find a lang interpretation.
* @return The generated [Text] meant to notify the client.
*/
internal fun createUnimplemented(message: BattleMessage): Text {
LOGGER.error("Missing interpretation on '{}' action {}", message.id, message.rawMessage)
return Text.literal("Missing interpretation on '${message.id}' action ${message.rawMessage}").red()
}
/**
* A variant of [createUnimplemented].
* This will log both the public and private message however the clients will no longer receive the full raw message in order to prevent extra information they shouldn't see.
*
* @param publicMessage The public variant of [BattleMessage] that wasn't able to find a lang interpretation.
* @param privateMessage The private variant of [BattleMessage] that wasn't able to find a lang interpretation.
* @return The generated [Text] meant to notify the client.
*
* @throws IllegalArgumentException if the [publicMessage] and [privateMessage] don't have a matching [BattleMessage.id].
*/
internal fun createUnimplementedSplit(publicMessage: BattleMessage, privateMessage: BattleMessage): Text {
if (publicMessage.id != privateMessage.id) {
throw IllegalArgumentException("Messages do not match")
}
LOGGER.error("Missing interpretation on '{}' action: \nPublic » {}\nPrivate » {}", publicMessage.id, publicMessage.rawMessage, privateMessage.rawMessage)
return Text.literal("Missing interpretation on '${publicMessage.id}' action please report to the developers").red()
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -8,9 +8,12 @@
package com.cobblemon.mod.common.api.battles.model.actor
import com.cobblemon.mod.common.Cobblemon.LOGGER
import com.cobblemon.mod.common.api.battles.model.ai.BattleAI
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.battles.PassActionResponse
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.exception.IllegalActionChoiceException
import com.cobblemon.mod.common.net.messages.client.battle.BattleMakeChoicePacket
import java.util.UUID
@@ -19,11 +22,17 @@ abstract class AIBattleActor(
pokemonList: List<BattlePokemon>,
val battleAI: BattleAI
) : BattleActor(gameId, pokemonList.toMutableList()) {
override fun sendUpdate(packet: NetworkPacket) {
override fun sendUpdate(packet: NetworkPacket<*>) {
super.sendUpdate(packet)
if (packet is BattleMakeChoicePacket) {
setActionResponses(request!!.iterate(this.activePokemon, battleAI::choose) )
try {
setActionResponses(request!!.iterate(this.activePokemon, battleAI::choose))
} catch (exception: IllegalActionChoiceException) {
LOGGER.error("AI was unable to choose a move, we're going to need to pass!")
exception.printStackTrace()
setActionResponses(request!!.iterate(this.activePokemon) { _, _, _ -> PassActionResponse })
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -11,12 +11,13 @@ package com.cobblemon.mod.common.api.battles.model.actor
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.api.net.NetworkPacket
import com.cobblemon.mod.common.battles.ActiveBattlePokemon
import com.cobblemon.mod.common.battles.BallActionResponse
import com.cobblemon.mod.common.battles.ForcePassActionResponse
import com.cobblemon.mod.common.battles.ShowdownActionRequest
import com.cobblemon.mod.common.battles.ShowdownActionResponse
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.exception.IllegalActionChoiceException
import com.cobblemon.mod.common.net.messages.client.battle.BattleApplyPassResponsePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleMakeChoicePacket
import com.cobblemon.mod.common.net.messages.client.battle.BattleMessagePacket
import java.util.UUID
@@ -40,11 +41,24 @@ abstract class BattleActor(
var request: ShowdownActionRequest? = null
var responses = mutableListOf<ShowdownActionResponse>()
var expectingCaptureActions = 0
val expectingPassActions = mutableListOf<ShowdownActionResponse>()
var mustChoose = false
/** For when battles start, it's the number of Pokémon that are still in the process of being sent out (animation wise) */
var stillSendingOutCount = 0
abstract val type: ActorType
fun canFitForcedAction() = mustChoose && request?.let { request ->
val countMovable = (request.active?.count() ?: 0) - request.forceSwitch.count { it }
return@let countMovable > expectingPassActions.size && !battle.ended
} ?: false
fun forceChoose(response: ShowdownActionResponse) {
expectingPassActions.add(response)
sendUpdate(BattleApplyPassResponsePacket())
}
fun getSide() = if (this in battle.side1.actors) battle.side1 else battle.side2
open fun getPlayerUUIDs(): Iterable<UUID> = emptyList()
@@ -60,7 +74,7 @@ abstract class BattleActor(
val requestActive = request.active
if (requestActive == null || requestActive.isEmpty() || request.wait) {
this.request = null
expectingCaptureActions = 0
expectingPassActions.clear()
return
}
}
@@ -78,23 +92,24 @@ abstract class BattleActor(
fun setActionResponses(responses: List<ShowdownActionResponse>) {
val request = request ?: return
val originalCaptureActions = expectingCaptureActions
val originalPassActions = expectingPassActions.toList()
responses.forEachIndexed { index, response ->
val activeBattlePokemon = activePokemon.let { if (it.size > index) it[index] else return }
val showdownMoveSet = request.active?.let { if (it.size > index) it[index] else null }
val forceSwitch = request.forceSwitch.let { if (it.size > index) it[index] else false }
if (!response.isValid(activeBattlePokemon, showdownMoveSet, forceSwitch)) {
expectingCaptureActions = originalCaptureActions
expectingPassActions.clear()
expectingPassActions.addAll(originalPassActions)
throw IllegalActionChoiceException(this, "Invalid action choice for ${activeBattlePokemon.battlePokemon!!.getName().string}: $response")
} else if (response is BallActionResponse) {
expectingCaptureActions--
} else if (response is ForcePassActionResponse) {
this.responses.add(expectingPassActions.removeAt(0))
} else {
this.responses.add(response)
}
this.responses.add(response)
}
if (expectingCaptureActions > 0) {
if (expectingPassActions.size > 0) {
throw IllegalActionChoiceException(this, "Invalid action choice: a capture was expected. Are you hacking me?")
}
expectingCaptureActions = originalCaptureActions
mustChoose = false
battle.checkForInputDispatch()
}
@@ -110,14 +125,24 @@ abstract class BattleActor(
}
responses.clear()
request = null
expectingCaptureActions = 0
expectingPassActions.clear()
battle.writeShowdownAction(">$showdownId ${showdownMessages.joinToString()}")
}
abstract fun getName(): MutableText
/**
* Appends the given name to this owner as the prefix.
* NPC and player actors expect to append their [getName] while wild Pokémon append nothing.
*
* @param name The name of an object being appended, typically a Pokémon nickname received from showdown.
* @return A [MutableText] of the [name] append with owner prefix.
*/
abstract fun nameOwned(name: String): MutableText
open fun sendMessage(component: Text) {
sendUpdate(BattleMessagePacket(component))
}
open fun awardExperience(battlePokemon: BattlePokemon, experience: Int) {}
open fun sendUpdate(packet: NetworkPacket) {}
open fun sendUpdate(packet: NetworkPacket<*>) {}
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022 Cobblemon Contributors
* 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
@@ -0,0 +1,106 @@
/*
* 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.berry
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.berry.spawncondition.BerrySpawnCondition
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.mulch.MulchVariant
import com.cobblemon.mod.common.api.pokemon.stats.Stat
import com.cobblemon.mod.common.api.pokemon.status.Status
import com.cobblemon.mod.common.api.reactive.SimpleObservable
import com.cobblemon.mod.common.net.messages.client.data.BerryRegistrySyncPacket
import com.cobblemon.mod.common.pokemon.adapters.CobblemonStatTypeAdapter
import com.cobblemon.mod.common.util.adapters.*
import com.cobblemon.mod.common.util.cobblemonResource
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import java.awt.Color
import net.minecraft.predicate.NumberRange
import net.minecraft.registry.RegistryKeys
import net.minecraft.registry.tag.TagKey
import net.minecraft.resource.ResourceType
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
import net.minecraft.util.math.Box
import net.minecraft.util.math.Vec3d
import net.minecraft.world.biome.Biome
/**
* The data registry for [Berry].
*
* @author Licious
* @since November 28th, 2022
*/
object Berries : JsonDataRegistry<Berry> {
override val id: Identifier = cobblemonResource("berries")
override val type: ResourceType = ResourceType.SERVER_DATA
override val observable = SimpleObservable<Berries>()
override val gson = GsonBuilder()
.disableHtmlEscaping()
.setPrettyPrinting()
.registerTypeAdapter(MulchVariant::class.java, MulchVariantAdapter)
.registerTypeAdapter(NumberRange.FloatRange::class.java, FloatNumberRangeAdapter)
.registerTypeAdapter(Status::class.java, StatusAdapter)
.registerTypeAdapter(TypeToken.getParameterized(Collection::class.java, Box::class.java).type, BoxCollectionAdapter)
.registerTypeAdapter(Box::class.java, BoxAdapter)
.registerTypeAdapter(Vec3d::class.java, VerboseVec3dAdapter)
.registerTypeAdapter(Identifier::class.java, IdentifierAdapter)
.registerTypeAdapter(GrowthFactor::class.java, CobblemonGrowthFactorAdapter)
.registerTypeAdapter(IntRange::class.java, VerboseIntRangeAdapter)
.registerTypeAdapter(Color::class.java, LiteralHexColorAdapter)
.registerTypeAdapter(Stat::class.java, CobblemonStatTypeAdapter)
.registerTypeAdapter(TypeToken.getParameterized(TagKey::class.java, Biome::class.java).type, TagKeyAdapter(RegistryKeys.BIOME))
.registerTypeAdapter(BerrySpawnCondition::class.java, CobblemonBerrySpawnConditionAdapter)
.create()
override val typeToken: TypeToken<Berry> = TypeToken.get(Berry::class.java)
override val resourcePath = "berries"
private val berries = hashMapOf<Identifier, Berry>()
override fun reload(data: Map<Identifier, Berry>) {
this.berries.clear()
data.forEach { (identifier, berry) ->
try {
berry.identifier = identifier
berry.validate()
this.berries[identifier] = berry
} catch (e: Exception) {
Cobblemon.LOGGER.error("Skipped loading the {} berry", identifier, e)
}
}
Cobblemon.LOGGER.info("Loaded {} berries", this.berries.size)
this.observable.emit(this)
}
override fun sync(player: ServerPlayerEntity) {
BerryRegistrySyncPacket(this.all()).sendToPlayer(player)
}
fun all() = this.berries.values.toList()
/**
* Gets a berry if loaded.
*
* @param identifier The identifier of the berry.
* @return The [Berry] if loaded otherwise null.
*/
fun getByIdentifier(identifier: Identifier): Berry? = this.berries[identifier]
/**
* Gets a berry if loaded.
*
* @param name The path of the identifier of the berry under the [Cobblemon.MODID] namespace.
* @return The [Berry] if loaded otherwise null.
*/
fun getByName(name: String): Berry? = this.getByIdentifier(cobblemonResource(name))
}

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