Compare commits

...
Author SHA1 Message Date
Paul bf50570ade Toying with data reload for species data, current issue is render thread needs species data (shouldn't it be concmodding sometimes) 2024-10-13 07:26:06 +10:00
Paul 8951816ddd Delay deserialization of Pokemon S2C codec until it's in the handler for SetPCPokemonPacket, SetPCBoxPokemonPacket, SetPartyPokemonPacket 2024-10-12 18:18:32 +10:00
Paul bc668d84c9 Fixed advancement display of pokemon renders, closes #976 2024-10-12 16:59:48 +10:00
MiaandWeblate b1290cbc38 Translated using Weblate (German)
Currently translated at 87.5% (5579 of 6375 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-10-12 02:00:08 +00:00
Paul 2261cf1077 Conflicto fixo 2024-10-12 11:55:50 +10:00
Paul 0ae427fd14 Fixed NPC pokemon still dropping items on faint 2024-10-12 10:18:47 +10:00
Paul 37a25c6b5a Fixed applyplayertexture not working on NPCs that delegate to standard but are not standard 2024-10-12 09:12:24 +10:00
MiaandWeblate 597080aac2 Translated using Weblate (German)
Currently translated at 87.4% (5578 of 6375 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2024-10-11 21:41:28 +00:00
Paul 2ae2d9f53b Initialize NPCs at level 1 by default from /spawnnpc 2024-10-11 20:23:46 +10:00
Paul 38df6f4833 Fixed deserialization of custom_script NPC interactions 2024-10-11 19:51:11 +10:00
Paul bed2e3035b Added /spawnnpc and /spawnnpcat commands 2024-10-11 16:33:39 +10:00
Paul a784aa38cb Lang update 2024-10-11 16:09:46 +10:00
Hiroku c18d853a55 Merge branch 'fuck-assets' into 'main'
move best spawner config & showdown data to resources/data

See merge request cable-mc/cobblemon!1191
2024-10-10 20:45:29 +00:00
Xander Forrest d6581e9931 try with resources block when copying from stream 2024-10-11 00:14:47 +07:00
Nick d7962e7d48 Merge branch 'feature/more-bugs-fixed' into 'main'
more smaller bugs fixed (neoforge users rejoice)

Closes #1068, #1072, and #1073

See merge request cable-mc/cobblemon!1192
2024-10-10 16:57:59 +00:00
PolymetaandNick f3f6a9744b more smaller bugs fixed (neoforge users rejoice) 2024-10-10 16:57:59 +00:00
Nick 715112f8d9 Merge branch 'feature/shinies' into 'main'
Shiny Pokémon Particles and Sound Effects! ✨✨✨💖

See merge request cable-mc/cobblemon!1183
2024-10-10 16:52:39 +00:00
TyzillionandNick 278d0d6f96 Shiny Pokémon Particles and Sound Effects! ✨✨✨💖 2024-10-10 16:52:39 +00:00
Xander Forrest 95c26448bc move best-spawner-config & showdown zip/metadata to resources/data instead of assets, where they should not be
add FileUtils.copyInternalToExternal to move things from internal to, you guessed it, external paths.
2024-10-10 17:20:12 +07:00
Hiroku 8d99ebbcde Merge branch 'feature/bug-galore' into 'main'
various bug fixes

Closes #994, #1037, #1057, #1060, #1070, and #420

See merge request cable-mc/cobblemon!1188
2024-10-10 10:09:19 +00:00
PolymetaandHiroku 4c024ac947 various bug fixes 2024-10-10 10:09:19 +00:00
Hiroku b4946e13f2 Merge branch 'misc' into 'main'
add Upper Hand name/description

See merge request cable-mc/cobblemon!1190
2024-10-10 09:25:16 +00:00
Xander Forrest bc4af40a34 remove gb specific move name 2024-10-10 16:24:21 +07:00
Xander Forrest 64ecec1a9a add Upper Hand name/description 2024-10-10 16:10:05 +07:00
Hiroku 7f8ef38b64 Merge branch 'clone' into 'main'
regen tethering ID as well as UUID in Pokemon.clone()

See merge request cable-mc/cobblemon!1189
2024-10-10 08:52:19 +00:00
Hiroku e4360ca9b5 Play animation sound keyframes through the entity where possible, the way Arceus intended 2024-10-10 08:47:09 +00:00
Xander Forrest bc27ec7288 remove tethering id not randomly generate 2024-10-10 15:44:41 +07:00
Xander Forrest 875f2d99ab regen tethering ID as well as UUID in Pokemon.clone() 2024-10-10 14:24:05 +07:00
Hiroku a4d18eba89 Merge branch 'sound' into 'main'
Sound bugfix and small volume tweaks

Closes #1069

See merge request cable-mc/cobblemon!1187
2024-10-07 06:36:58 +00:00
Sterrezo edffc248f4 Small volume tweaks to Pokedex sounds 2024-10-07 08:29:51 +02:00
Sterrezo 600bbfc5f3 Prevented the zoom sound from playing when unable to increase or decrease zoom further 2024-10-07 08:28:40 +02:00
Hiroku 692f1de510 Merge branch 'Updating-Structures-to-1.21' into 'main'
1.21.1 structure fixes

See merge request cable-mc/cobblemon!1184
2024-10-06 20:55:42 +00:00
Polymeta e230dd740d Merge branch 'refs/heads/main' into Updating-Structures-to-1.21
# Conflicts:
#	common/src/main/resources/data/minecraft/worldgen/template_pool/village/desert/houses.json
#	common/src/main/resources/data/minecraft/worldgen/template_pool/village/plains/houses.json
#	common/src/main/resources/data/minecraft/worldgen/template_pool/village/savanna/houses.json
#	common/src/main/resources/data/minecraft/worldgen/template_pool/village/snowy/houses.json
#	common/src/main/resources/data/minecraft/worldgen/template_pool/village/taiga/houses.json
2024-10-06 20:46:40 +01:00
Hiroku e24008c89e Merge branch 'keybind-shmebind' into 'main'
Remove PokedexBinding.kt and references.

See merge request cable-mc/cobblemon!1185
2024-10-06 02:48:08 +00:00
Hiroku ed29801820 Merge branch 'feature/pokedex-sync-fixes' into 'main'
fix pokedex sync and other issues

Closes #1000, #1041, and #1051

See merge request cable-mc/cobblemon!1186
2024-10-06 02:47:53 +00:00
Polymeta a5fe51b8fa various pokedex fixes
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-10-06 03:37:46 +01:00
Hiroku 600cc48073 Merge branch 'slated' into 'main'
Added Missing Recipe

Closes #1033

See merge request cable-mc/cobblemon!1180
2024-10-06 00:08:09 +00:00
JPAKx4 a4aa8f3778 Remove PokedexBinding.kt and references. 2024-10-05 14:38:21 -05:00
Slippy 2f16490aa8 Hopefully this fixed village centers from not having loot and generating very uncommonly 2024-10-04 23:06:11 -05:00
Hiroku ed82a72919 Merge branch 'unblank_descriptions' into 'main'
Fix scrolling issue in InfoTextScrollWidget.kt

Closes #1023

See merge request cable-mc/cobblemon!1182
2024-10-05 03:29:48 +00:00
JPAKx4 953163b12e Fix scrolling issue in InfoTextScrollWidget.kt 2024-10-04 22:20:26 -05:00
Test aa57cd7e3e prevent cry animation stacking on button click 2024-10-04 22:32:48 -04:00
dhi_holo 863baa5ae6 Added Missing Recipe
Resolves #1033
2024-09-30 18:34:32 +10:00
Hiroku 913ca3d467 Merge branch 'sound' into 'main'
Tweaked evolution sound logic

See merge request cable-mc/cobblemon!1179
2024-09-29 08:44:30 +00:00
Sterrezo 22b541af10 Tweaked evolution sound logic
Added a click sound to the evolve widget. Evolution ui sound now plays only when evolving from the ui, not with the Pokemon sent out.
2024-09-29 10:43:28 +02:00
Hiroku c1a706ca69 Merge branch 'scan-fixes' into 'main'
scan and dex fixes

See merge request cable-mc/cobblemon!1178
2024-09-29 02:42:23 +00:00
TestandHiroku 47f8647d48 scan and dex fixes 2024-09-29 02:42:22 +00:00
Hiroku a0e01b9652 Merge branch '#1013-immortal-pokemon' into 'main'
Fixes Pokemon being immortal after breaking free from capture

Closes #1013

See merge request cable-mc/cobblemon!1177
2024-09-28 04:23:40 +00:00
Deltric 9d88fb7ca2 Resets beam mode to 0 after a Pokemon is finished breaking free from capture. Prevents them from staying immortal. 2024-09-27 22:49:32 -05:00
Paul ca0170f1ed Several camera mode fixes, fixing several move effects. Closes #1010 2024-09-28 11:36:45 +10:00
Paul 050f7e6161 Added property on PokemonEntity to toggle pose type recalculation 2024-09-27 12:20:57 +10:00
Paul 658ec95e6b Fixed pressing E for a nickname closing the GUI, closes #1006 2024-09-27 11:28:57 +10:00
Hiroku 883f8149da Merge branch 'BattleBugStomping' into 'main'
BattleBugStomping Bugaloo

See merge request cable-mc/cobblemon!1167
2024-09-27 00:06:53 +00:00
Hiroku e5e4871c96 Merge branch 'feature/bugfixes' into 'main'
small fixes

Closes #1001 and #999

See merge request cable-mc/cobblemon!1176
2024-09-27 00:05:34 +00:00
JazzMcNade e074411596 Cleaned up Revival Blessing logic 2024-09-26 01:53:51 -05:00
JazzMcNade adf0ba7c9f Merge branch 'main' into BattleBugStomping 2024-09-26 01:22:11 -05:00
JazzMcNade 3d8c22fd68 Fixed client sync issues with triple battle's auto shift to center. 2024-09-26 00:18:03 -05:00
Polymeta a966f0f9a6 dont reset state with empty state causing the loss of aspects
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-25 23:32:01 +01:00
Polymeta da74990909 only rotate collection when leading pokemon is passed in to preserve original party order
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-25 22:43:00 +01:00
JazzMcNade 0e3102f5e4 Fixed a bug in which not having enough pokemon to fill all fainted slots would cause a soft lock. Fixed Revival Blessing. 2024-09-25 00:45:41 -05:00
Nick 36e3816bf3 Merge branch 'feature/pokemon-debug-utils' into 'main'
debug galore for pokemon

See merge request cable-mc/cobblemon!1175
2024-09-24 23:05:41 +00:00
PolymetaandNick 99e47e4cb7 debug galore for pokemon 2024-09-24 23:05:41 +00:00
Nick aa875b06ab Merge branch 'feature/form-dfu' into 'main'
introduce feature DFU to prevent loss of forms and other features when migrating from 1.20

Closes #993 and #541

See merge request cable-mc/cobblemon!1174
2024-09-24 17:24:29 +00:00
PolymetaandNick dfb08c8db0 introduce feature DFU to prevent loss of forms and other features when migrating from 1.20 2024-09-24 17:24:29 +00:00
Nick eefff036b7 Merge branch 'more-npcs' into 'main'
Many NPC improvements for foundation

See merge request cable-mc/cobblemon!1171
2024-09-23 23:02:00 +00:00
HirokuandNick 43050b4276 Many NPC improvements for foundation 2024-09-23 23:02:00 +00:00
Nick b1b8c6e9db Merge branch 'bugfix/fix-for-slippy' into 'main'
Fixed Jigsaw structure maximums

See merge request cable-mc/cobblemon!1173
2024-09-23 22:06:16 +00:00
Paul 583a973e53 Fixed Jigsaw structure maximums 2024-09-23 15:51:58 +10:00
Hiroku c0b945e3da Merge branch 'parchment' into 'main'
Added parchment mappings for param names

See merge request cable-mc/cobblemon!1172
2024-09-23 02:10:44 +00:00
apion fa73fb8e46 Added parchment mappings for param names 2024-09-22 22:00:49 -04:00
Hiroku 1fd9128b33 Merge branch 'DoubledPokeballSendOutParticlesFix' into 'main'
DoubledPokeballSendOutParticlesFix

See merge request cable-mc/cobblemon!1169
2024-09-23 00:34:43 +00:00
Hiroku f9799ef55e Merge branch 'feature/small-tweaks' into 'main'
remove redundant tracker and hardcode battle ui navigation to leftclick

Closes #992

See merge request cable-mc/cobblemon!1170
2024-09-22 21:25:15 +00:00
PolymetaandHiroku ab69c4f095 remove redundant tracker and hardcode battle ui navigation to leftclick 2024-09-22 21:25:15 +00:00
JazzMcNade a9a0fff643 PokemonClientDelagate now checks if beammode 1 in currently in progress before applying its effects. 2024-09-22 12:27:11 -05:00
Apion 9bdb8102c1 Merge branch 'bugfix/1-6-fixes' into 'main'
Dex variation definitions for many pokes, show all pose types in dex

See merge request cable-mc/cobblemon!1168
2024-09-21 23:01:33 +00:00
HirokuandApion febcb7092a Dex variation definitions for many pokes, show all pose types in dex 2024-09-21 23:01:33 +00:00
Apion 4ec8b01efb Merge branch 'feature/jarring-changes' into 'main'
JarInJar fabric kotlin instead of shadowing kotlin libs to avoid compatibility issues

Closes #933

See merge request cable-mc/cobblemon!1161
2024-09-21 22:44:42 +00:00
PolymetaandApion 95b15d50c3 JarInJar fabric kotlin instead of shadowing kotlin libs to avoid compatibility issues 2024-09-21 22:44:42 +00:00
JazzMcNade 88d7b38a90 Cleaned up math 2024-09-21 17:44:21 -05:00
Apion 471eef6c31 Merge branch 'SinglesSendoutAdjustments' into 'main'
SinglesSendoutAdjustments

See merge request cable-mc/cobblemon!1166
2024-09-21 22:40:15 +00:00
JazzMcNadeandApion 513910e448 SinglesSendoutAdjustments 2024-09-21 22:40:15 +00:00
JazzMcNade 528f1d68b9 Fixed bug in which a fainted pokemon could be sent out in multibattles. Fixed actor display test when the first slot is fainted. Fixed timings of gui items now that the BattleOverlay tick speed has been fixed. 2024-09-21 17:32:36 -05:00
apion 1613250f5d Add method for in PlatformRegistry for sidemod usage 2024-09-21 18:27:14 -04:00
Hiroku f8a2802a8e Merge branch 'feature/sneaky-label' into 'main'
Tweak pokemon label display and additional config setting

See merge request cable-mc/cobblemon!1164
2024-09-21 22:16:44 +00:00
PolymetaandHiroku fdcbca4410 Tweak pokemon label display and additional config setting 2024-09-21 22:16:44 +00:00
Hiroku 85b96268be Merge branch 'Uh-Oh-Slippy-is-Messing-with-Code-Again' into 'main'
Uh oh slippy is messing with code again

See merge request cable-mc/cobblemon!1162
2024-09-21 00:17:15 +00:00
Hiroku 0a94c00859 Merge branch 'bugfix/1-6-fixes' into 'main'
Fixes

Closes #973 and #989

See merge request cable-mc/cobblemon!1165
2024-09-21 00:16:55 +00:00
Paul b7a2091c3e Fixed battle overlay animations absolutely zooooming 2024-09-21 10:01:45 +10:00
Polymeta 2dcd9467ec fix compile errors
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-20 13:08:50 +01:00
Polymeta 4fc6d35aab Merge branch 'Myslippy-main-patch-44800' into 'Uh-Oh-Slippy-is-Messing-with-Code-Again'
Update CHANGELOG.md (I apologize for my sins hiro please forgive me)

See merge request cable-mc/cobblemon!1163
2024-09-20 11:41:48 +00:00
Paul 89d62606d3 Merge remote-tracking branch 'origin/main' into bugfix/1-6-fixes 2024-09-20 19:54:21 +10:00
Myslippy c424e3a8c5 Update CHANGELOG.md (I apologize for my sins hiro please forgive me) 2024-09-20 09:36:35 +00:00
Slippy 792a8795ed more adjustments 2024-09-20 04:20:48 -05:00
Slippy 05d3c6d928 updated village pokecenter structure nbt files 2024-09-20 04:01:33 -05:00
Slippy 3f56af4b86 updated village pokecenter structure nbt files 2024-09-20 03:50:25 -05:00
Apion fe0e32de76 Merge branch 'Whaet' into 'main'
Update treasure.json

See merge request cable-mc/cobblemon!1160
2024-09-20 06:43:35 +00:00
apion 7456afac58 Fix crash 2024-09-20 02:28:13 -04:00
dhi_holo ee07204bae Merge branch 'main' into Whaet 2024-09-20 15:18:50 +10:00
dhi_holo 252296bf71 Update treasure.json
Made it so you can't fish obscene numbers of Poké Rod Smithing Templates anymore, but you can still get more from higher enchanted rods
2024-09-20 15:18:09 +10:00
Apion 3c4da18040 Merge branch 'bugfix/1-6-fixes' into 'main'
1.6 fixes

Closes #991, #973, and #989

See merge request cable-mc/cobblemon!1159
2024-09-20 05:16:46 +00:00
HirokuandApion 88ff54b97b 1.6 fixes 2024-09-20 05:16:45 +00:00
Hiroku 1f1590a49f Merge branch 'sidemoddable-storage-types' into 'main'
Moved PlayerInstancedDataStoreType to not be an enum (so sidemods can add new ones)

See merge request cable-mc/cobblemon!1158
2024-09-20 05:14:36 +00:00
apion c9476efe6f Licenses (please have mercy) 2024-09-20 00:12:00 -04:00
apion ac77262c88 Moved PlayerInstancedDataStoreType to not be an enum (so sidemods can add new ones) 2024-09-20 00:05:21 -04:00
Paul ba649652da Fixed shiny property not syncing properly #991 2024-09-20 13:25:32 +10:00
Paul c63dff32a0 Fixed capture pokeballs in battle UI spinning forever, fixes #973 2024-09-20 12:51:56 +10:00
Paul c253683506 Made relic coin pouches waterloggable, fixes #989 2024-09-20 12:24:46 +10:00
Hiroku d7788e277f Merge branch 'dialogue' into 'main'
cleanup dialog

See merge request cable-mc/cobblemon!1152
2024-09-19 23:54:48 +00:00
TestandHiroku 44cd81eb24 cleanup dialog 2024-09-19 23:54:47 +00:00
Hiroku 0987afe645 Merge branch 'feature/post-port-trauma' into 'main'
1.21.1 port fixes and other things

Closes #941, #214, #959, #986, #978, #975, and #952

See merge request cable-mc/cobblemon!1155
2024-09-19 23:47:01 +00:00
Polymeta d407561978 add datafixer for pokemon model components
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-19 17:04:06 +01:00
Polymeta dfe6c19e01 also apply regenerator on force switches
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-19 16:43:55 +01:00
Polymeta 978e625ba2 fix regenrator ability HP desync
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-19 15:35:20 +01:00
Polymeta d401009dbb restore some "lost" default pokemon nbt so it can be targeted by selectors
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 23:53:55 +01:00
Polymeta 0d16619eb8 create BeastBallModel.kt and assign it so the beast ball gets correct throwing animation and small cleanup
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 23:10:16 +01:00
Polymeta fd8feca60b merge 2 item renderer mixin classes into one and refactor out equality method to use for both dex and pokeball
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 21:45:54 +01:00
Polymeta d13908a8e7 fix pasture pokemon dropping loot when owner is not "present"
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 21:45:14 +01:00
Polymeta 1aae6fcc57 PR feedback
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 21:45:14 +01:00
Polymeta 6331742f93 fix mixin doing instance based comparison into something a little more concrete (resource location) also fixed boat crash
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 21:45:13 +01:00
Polymeta a21d99c871 make the interaction wheel slightly bigger to prevent overlapping buttons
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 21:45:13 +01:00
Polymeta c8f230ee8f update multiblock to contain all 3 parts as valid blocks for block entity also fix shoulder mount showing pre-evo and make pokemon smarter on leash
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-18 21:45:08 +01:00
Nick 8cf6645cdd Merge branch 'dfu-fun' into 'main'
DataFixers for a bunch of stuff

See merge request cable-mc/cobblemon!1156
2024-09-18 17:36:37 +00:00
ApionandNick 2b4b8fe13a DataFixers for a bunch of stuff 2024-09-18 17:36:37 +00:00
Slippy 3fcfac1cf6 Bug Fixes for ruins and fossil structures 2024-09-16 23:01:40 -05:00
Hiroku c73bfe67bf Merge branch 'no_ai-and-freeze_frame' into 'main'
Added no_ai and freeze_frame props, respect noai=true, added /freezepokemon

See merge request cable-mc/cobblemon!1154
2024-09-16 00:08:10 +00:00
Paul 25bdef0510 Cleanup isNoAi references since it's not needed 2024-09-16 08:16:18 +10:00
Paul d0c9093f41 Added no_ai and freeze_frame props, respect noai=true, added /freezepokemon 2024-09-15 20:12:45 +10:00
Hiroku 98e38836c5 Merge branch 'implement_pokemon' into 'main'
Petilil animation fix

See merge request cable-mc/cobblemon!1140
2024-09-15 09:51:19 +00:00
Frank The FarmerandHiroku b3a3064e1b Petilil animation fix 2024-09-15 09:51:19 +00:00
Paul a8caaf4654 Added changelog for breaking changes, use 'maxHealth' instead of 'hp' with temporary backcompat 2024-09-15 16:31:28 +10:00
Apion 232e0f478a Merge branch 'fix/storage-registry-support' into 'main'
Fixed NBT on pokemon held items not serializing, updated to 1.21.1

See merge request cable-mc/cobblemon!1153
2024-09-15 06:17:18 +00:00
Hiroku c039bf7f20 Merge branch 'another-minor-tag-push' into 'main'
Tag updates

See merge request cable-mc/cobblemon!1151
2024-09-15 03:36:59 +00:00
Paul 88d6c17c90 Fixed NBT on pokemon held items not serializing, updated to 1.21.1 2024-09-15 13:26:33 +10:00
dhi_holo 4e76871046 Tag updates
Forgot to add some blocks to some tags, so now that's fixed :)
2024-09-15 12:30:29 +10:00
Hiroku 598d016172 Merge branch 'feature/turn-off-dex-with-hotbar' into 'main'
ensure that when using hotbar, the scanning gui disappears

Closes #981

See merge request cable-mc/cobblemon!1150
2024-09-15 02:09:41 +00:00
PolymetaandHiroku 0c5baec179 ensure that when using hotbar, the scanning gui disappears 2024-09-15 02:09:41 +00:00
Hiroku 4729d4204c Merge branch 'more-json-fixes' into 'main'
Flash Fire Lang Addition

See merge request cable-mc/cobblemon!1149
2024-09-14 23:44:38 +00:00
dhi_holo 1a07b21b8d Merge branch 'main' into more-json-fixes 2024-09-15 09:17:32 +10:00
Hiroku b10bee6a3e Merge branch 'feature/fix-pipeline' into 'main'
make sure to deploy maven artefacts from main

See merge request cable-mc/cobblemon!1148
2024-09-14 23:01:00 +00:00
PolymetaandHiroku 44889a6c7d make sure to deploy maven artefacts from main 2024-09-14 23:01:00 +00:00
Hiroku 705eeae700 Merge branch 'BattleTargetSelectionRevision' into 'main'
Battle target selection revision / player interaction options consistency

See merge request cable-mc/cobblemon!1144
2024-09-14 22:11:00 +00:00
Hiroku a2122c7b24 Merge branch 'feature/advanced-advancements!' into 'main'
fix interaction advancement json files and ensure resurrection advancement is triggered by machine

Closes #985 and #957

See merge request cable-mc/cobblemon!1147
2024-09-14 22:10:19 +00:00
PolymetaandHiroku 940ed1450d fix interaction advancement json files and ensure resurrection advancement is triggered by machine 2024-09-14 22:10:18 +00:00
Hiroku 265ecd3749 Merge branch 'sound_tracker' into 'main'
Client sound tracking for entities & casting sound preemption

See merge request cable-mc/cobblemon!1119
2024-09-14 22:09:08 +00:00
Polymeta 561ded8747 merge artefacts...
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-14 22:27:31 +01:00
Hiroku 4e695cf020 Merge branch 'Corrected-natural-tag' into 'main'
Paul is fired for breaking the spawns!

See merge request cable-mc/cobblemon!1146
2024-09-14 21:06:07 +00:00
Segfault GuyandPolymeta f9288efb31 i forgot to add licenses because i dont care 2024-09-14 22:00:52 +01:00
Segfault GuyandPolymeta f69ffe9d99 Preemptively discarding bobber entity stops cast sound. 2024-09-14 22:00:52 +01:00
Segfault GuyandPolymeta 6ec81e6af2 Implement SoundTracker for active client sounds + fix rod casting sounds. 2024-09-14 22:00:43 +01:00
FrankTheFarmer c6baf6eafb Paul is fired for breaking the spawns! 2024-09-14 21:23:23 +10:00
dhi_holo 31fc59236f Lang addition and failed advancement fix
Issue #985 is relevant to some of the changes
2024-09-14 20:41:28 +10:00
JazzMcNade c4fa18ef41 Merge branch 'main' into BattleTargetSelectionRevision 2024-09-14 01:35:02 -05:00
Hiroku 2d34b7446e Merge branch 'feature/poke-rod-crash' into 'main'
fix pokerods crashing servers when being cast

See merge request cable-mc/cobblemon!1145
2024-09-14 05:52:07 +00:00
Paul eee994831c Merge remote-tracking branch 'origin/main' 2024-09-14 15:09:21 +10:00
Paul 72768ed1ac Changelog cleanup 2024-09-14 15:09:10 +10:00
Hiroku 635279c076 Merge branch 'sculk_sensor' into 'main'
Made PC and Pasture click the Sculk sensor

See merge request cable-mc/cobblemon!1137
2024-09-14 05:08:52 +00:00
Hiroku ad9f758b2f Merge branch 'feature/pokemon-label-name-config' into 'main'
Pokemon label is working again and new config setting

See merge request cable-mc/cobblemon!1142
2024-09-14 05:03:41 +00:00
PolymetaandHiroku 6a804792e3 Pokemon label is working again and new config setting 2024-09-14 05:03:41 +00:00
Hiroku 2104bf28b1 Merge branch 'UI_close_like_minecraft' into 'main'
Ui close like minecraft

See merge request cable-mc/cobblemon!1127
2024-09-14 05:00:34 +00:00
JazzMcNade 2300581493 Merge branch 'main' into BattleTargetSelectionRevision 2024-09-13 20:14:42 -05:00
Paul 7ce6fb065a Merge remote-tracking branch 'origin/main' 2024-09-14 10:27:21 +10:00
Paul dcea385b66 Created a #cobblemon:natural tag so spawns are faster 2024-09-14 10:24:41 +10:00
Polymeta d680e998ce rip out soundinstance from bobber as it was clientOnly and therefore not working properly anyways - also tidy up
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2024-09-13 17:16:40 +01:00
Hiroku 23ea4c6474 Merge branch 'feature/primary-click-batte-ui' into 'main'
use primary click only when navigating battle UI

Closes #954

See merge request cable-mc/cobblemon!1141
2024-09-13 05:56:04 +00:00
PolymetaandHiroku abf106ce94 use primary click only when navigating battle UI 2024-09-13 05:56:04 +00:00
JazzMcNade 1b3343589f Updated Triples Shift Button 2024-09-13 00:55:23 -05:00
Hiroku 96c6af8d59 Merge branch 'where-are-they' into 'main'
Recipes and Loot Tables

See merge request cable-mc/cobblemon!1143
2024-09-13 05:10:05 +00:00
Hiroku 82bbcfad26 Merge branch 'career-development' into 'main'
Decrease unemployment rate among villagers

See merge request cable-mc/cobblemon!1138
2024-09-13 05:09:18 +00:00
TestandHiroku 70e55626a0 Decrease unemployment rate among villagers 2024-09-13 05:09:17 +00:00
dhi_holo 107665c415 Merge branch 'main' into where-are-they 2024-09-13 12:04:36 +10:00
dhi_holo c8dd002e4a Some Tag Additions
Just a few new standard namespace tag additions for our items, and fixed an error with the poke rods tag
2024-09-13 12:04:20 +10:00
Paul fd2d06458b Merge remote-tracking branch 'origin/main' 2024-09-13 11:26:58 +10:00
Paul 29cb1276eb Clear calculated values on the client when data changes in pokedex 2024-09-13 11:26:40 +10:00
dhi_holo 0e0f6cee27 Merge branch 'main' into where-are-they 2024-09-13 10:21:12 +10:00
Apion 9c3a0704b9 Merge branch 'feature/bug-squashing' into 'main'
various smaller bugfixes

Closes #969, #970, #971, #972, and #967

See merge request cable-mc/cobblemon!1135
2024-09-12 23:28:49 +00:00
PolymetaandApion e9db3fc70c various smaller bugfixes 2024-09-12 23:28:49 +00:00
Slippy a41c3cb805 Updated village loot table 2024-09-12 13:46:51 -05:00
Slippy dd9fc85100 Updated structure files of village pokecenters 2024-09-12 03:42:24 -05:00
Slippy 00483ef54c Adjusted Decorated Pot Loot Table 2024-09-12 01:59:21 -05:00
dhi_holo 03210f0465 More Loot Table Fixes
Apricorn Leaves cleaned up, Medicinal Leek cleaned up, Tumblestone Clusters, Buddling Tumblestones, and basic Tumblestone Block fixed to behave properly.
2024-09-12 16:39:33 +10:00
JazzMcNade 26dc76a4f3 Fixed inconsistent ordering of options in PlayerInteractOptionsPacket 2024-09-12 01:35:26 -05:00
dhi_holo ae5e63aac9 Gilded Chest Update
Updated Gilded Chest's loot tables to use updated component data formatting, however this didn't fix them not dropping. Will need further investigation.
2024-09-12 15:53:12 +10:00
dhi_holo 08c8dd0f99 Added Missing Recipes
with tags and advancements related to the missing recipes too.
2024-09-12 14:18:51 +10:00
JazzMcNade 2044862edd Implemented tile based target selection, removed battle portrait target selection 2024-09-11 20:18:51 -05:00
apion 148b3c4271 Fixes #977 (Sherds not rendering) 2024-09-11 20:37:38 -04:00
Slippy 870cd0ec52 Updated structure files in taiga village and snowy village 2024-09-11 12:41:59 -05:00
Hiroku ef58d38c12 Merge branch 'loot-oh' into 'main'
Loot Table Fixes

See merge request cable-mc/cobblemon!1139
2024-09-11 10:10:14 +00:00
dhi_holo 7250b1a83c Loot Table Fixes
Ores now drop stuff correctly again, and Relic Coin Sacks (due to having an unused Natural blockstate) now can drop 20-64 relic coins when broken with the Natural blockstate set to true
2024-09-11 17:22:09 +10:00
Erusel 710b3f0303 Even better, centralised function 2024-09-11 02:32:01 +02:00
Erusel 57cf6f09fd Thanks to Hiroku's advice, it's more graceful. 2024-09-11 02:06:12 +02:00
Hiroku ec6820fa9d Merge branch 'holographic-cleanups' into 'main'
Holographic Cleanups

Closes #964

See merge request cable-mc/cobblemon!1136
2024-09-10 20:38:37 +00:00
Slippy bf4b211c4f removed "adapt noise" field. removed forest gate template pool. removed "start_height" field from structure sets. removed birch tree structures from oak tree template pool. 2024-09-10 06:25:07 -05:00
Slippy 3a2accb239 Ruin structures have been given loot tables for decorated pots 2024-09-10 02:46:00 -05:00
dhi_holo 6508d39e22 Merge branch 'main' into holographic-cleanups 2024-09-10 11:35:29 +10:00
Hiroku d0c7862103 Merge branch 'party-control-tweaks' into 'main'
Tweaks and fixes of sendout and other R key functions

See merge request cable-mc/cobblemon!1113
2024-09-09 02:47:52 +00:00
Paul f12962fd24 Changelog cleanup 2024-09-09 12:38:23 +10:00
Paul 9c7db81e22 Merge remote-tracking branch 'origin/main' into party-control-tweaks 2024-09-09 12:18:28 +10:00
Hiroku 6be1caf41a Merge branch 'sound' into 'main'
Fixed sound stuff lost in merges

See merge request cable-mc/cobblemon!1133
2024-09-09 02:17:55 +00:00
Hiroku d582507a6e Merge branch 'implement_pokemon' into 'main'
Some rather important animation fixes

See merge request cable-mc/cobblemon!1134
2024-09-09 02:17:13 +00:00
Frank The FarmerandHiroku 302c0e6fe7 Some rather important animation fixes 2024-09-09 02:17:13 +00:00
Erusel 97761ba1e3 Made PC and Pasture click the Sculk sensor 2024-09-09 00:10:04 +02:00
Slippy a75b578954 Updated Ruin Structure template_pool files to contain the new "override_liquid_settings" field. 2024-09-07 23:43:24 -05:00
dhi_holo 44ade828fa Update en_us.json
Updated Smithing Templates to the 1.21.2 style (because it's so much more usable, and means less updating work later)
Improved names of Gone Fishin' and A True Antiquarian advancements
2024-09-08 11:05:45 +10:00
dhi_holo 4c1a5f12b7 Merge branch 'main' into holographic-cleanups 2024-09-08 10:51:06 +10:00
Hiroku bbe7f96332 Merge branch 'BallBuffs' into 'main'
Ball buffs

See merge request cable-mc/cobblemon!1131
2024-09-08 00:37:11 +00:00
Hiroku a29a7ebbca Merge branch 'feature/resolve-some-todos' into 'main'
now that pokedex is present, resolve some todos that required on it, also use OTs for exp calc

Closes #966

See merge request cable-mc/cobblemon!1132
2024-09-08 00:18:10 +00:00
PolymetaandHiroku f4a7cc92ee now that pokedex is present, resolve some todos that required on it, also use OTs for exp calc 2024-09-08 00:18:10 +00:00
Sterrezo 9768711c5e Evolution sound is working now! 2024-09-08 01:56:54 +02:00
Sterrezo 4b3a864b28 Nothing is working
I fixed some missing sounds that were lost in merges. Added a placeholder animation to Hisui bias Petilil. Removed an empty sound event.
2024-09-08 01:19:06 +02:00
Slippy 60f057d28e Fossil Template Pools updated to contain "apply_waterlogging" field 2024-09-07 18:11:54 -05:00
Slippy 3c4219b069 update village template_pools to include 1.21 "override_liquid_settings" field 2024-09-07 17:12:11 -05:00
JazzMcNade 0db6da951e Updated tooltip strings for dusk ball. 2024-09-07 16:44:54 -05:00
JazzMcNade 3963537e40 Buffed Dusk Ball and Repeat Ball catch rate 2024-09-07 16:38:57 -05:00
Licious dd5e578d3a Merge branch 'ImplementRepeatBall' into 'main'
Implemented Repeat Ball's catch modifier

See merge request cable-mc/cobblemon!1130
2024-09-07 20:13:37 +00:00
JazzMcNade 4dab4b7ef6 Implemented Repeat Ball's catch modifier 2024-09-07 14:44:20 -05:00
Hiroku c19444816a Merge branch 'log-async' into 'main'
More safely check thread for spawners and influencers access and fix internal illegal access

See merge request cable-mc/cobblemon!1123
2024-09-07 10:11:27 +00:00
Paul 0610a997e2 Merge remote-tracking branch 'origin/main' into log-async
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/factory/JsonPlayerDataStoreFactory.kt
2024-09-07 19:37:38 +10:00
Hiroku 10faab68f9 Merge branch 'DoublesAreTheFuture' into 'main'
Added Doubles/Triples/Multibattles

See merge request cable-mc/cobblemon!1091
2024-09-07 09:36:59 +00:00
Paul 42c91c667b Licenses AGAIN RAAAAA 2024-09-07 19:25:09 +10:00
Paul bde9ddd017 TODO clearing 2024-09-07 19:14:49 +10:00
Paul c19a92406e Resolving merge issues 2024-09-07 19:05:50 +10:00
dhi_holo 93389ae98b Merge branch 'main' into holographic-cleanups 2024-09-07 18:14:41 +10:00
dhi_holo cb1dba64c0 missed a bit
one day I'll do this properly from stage 0

This is funnier though
2024-09-07 18:14:05 +10:00
Slippy 2d01e7a482 Village Pokecenters 2024-09-07 02:12:20 -05:00
dhi_holo 88f285199c added a thing for the rod recipe advancements
just makes it less spammy
2024-09-07 17:10:40 +10:00
dhi_holo e17bd10660 Automaton Fixes
Fixed Automaton Armour Trim being called that (instead of Armor because it's en_us), and missing the item name entirely
2024-09-07 17:00:06 +10:00
Hiroku c2ac903180 Merge branch 'mod-compat' into 'main'
Re add JEI compat

See merge request cable-mc/cobblemon!1129
2024-09-07 06:47:59 +00:00
dhi_holo 84feb449d9 Rodvancements
+Added Recipe Advancements for all of the Poké Rod Smithing Template stuff
+Unhid the Candy advancement, as there's now enough ways to get them that it doesn't need to be hidden
-Removed the Poké Rod Smithing Template from the Archaeology tab, as it's unfitting and is located in another tab where it does fit as well.
2024-09-07 16:44:06 +10:00
apion c475e51a1c Re add JEI compat 2024-09-07 02:16:02 -04:00
dhi_holo 682abbdd43 Green Dye Switch
For the sake of sanity
2024-09-07 16:11:23 +10:00
dhi_holo f8e68d2217 Updated Protector Recipe
Now cleaner and cooler
2024-09-07 14:51:31 +10:00
dhi_holo e8ddabe3ac Merge branch 'main' into holographic-cleanups 2024-09-07 14:33:35 +10:00
dhi_holo 32dd49b669 Update display_case.json
Fixes z-fighting, resolving #964
2024-09-07 14:30:54 +10:00
Paul b9d3966cfe Merge remote-tracking branch 'origin/main' into DoublesAreTheFuture
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/CobblemonEvents.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/gui/GuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/interpreter/instructions/SwitchInstruction.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/battle/ClientBattle.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/PokemonGuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/BattleOverlay.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/subscreen/BattleSwitchPokemonSelection.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/RenderHelper.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
#	common/src/main/resources/assets/cobblemon/sounds.json
#	common/src/main/resources/assets/cobblemon/sounds/item/pokedex/pokedex_show.ogg
2024-09-07 14:26:07 +10:00
Paul 682325af59 Merge remote-tracking branch 'origin/main' into evolution-effect 2024-09-07 14:03:45 +10:00
Paul d145969631 Removed unneeded glowTime code 2024-09-07 14:03:23 +10:00
Hiroku 432ccf17c0 Merge branch 'evolution-effect' into 'main'
Evolution effect

See merge request cable-mc/cobblemon!970
2024-09-07 04:03:14 +00:00
Paul c6452d1905 I will teach the license file the true meaning of pain (bread) 2024-09-07 13:54:16 +10:00
Paul f72f422ef0 Conflict fixes and fixes to recent animation function changes 2024-09-07 13:43:56 +10:00
dhi_holo d10ba586c8 To Undo Later
Just making it so the game doesn't have errors from the bug with the species not loading before the advancements, will undo this change once we can
(also corrected an error I put in the lang)
2024-09-07 13:09:25 +10:00
Paul 39fc384b67 Merge remote-tracking branch 'origin/main' into evolution-effect
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/snowstorm/ParticleEvent.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/animation/PoseTransitionAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/animation/PrimaryAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/animation/StatefulAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockActiveAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/PokemonRenderer.kt
2024-09-07 13:09:21 +10:00
Paul 477318b124 Imports 2024-09-07 12:53:10 +10:00
Paul 367d79a976 Merge remote-tracking branch 'origin/main' into poker-decks 2024-09-07 12:52:01 +10:00
Hiroku eb36320396 Merge branch 'sega_bass_pro_fishing_2' into 'main'
Make it possible to add new animation molang functions.

See merge request cable-mc/cobblemon!1115
2024-09-07 02:45:21 +00:00
dhi_holo 6409b75aef Merge branch 'main' into holographic-cleanups 2024-09-07 12:34:15 +10:00
Hiroku 98e4f6facc Merge branch 'stone-blocks' into 'main'
Blocks! More Blocks! Stones, even!

Closes #930

See merge request cable-mc/cobblemon!1120
2024-09-07 02:16:31 +00:00
Hiroku 5ea8bbd08e Merge branch 'TheSketchySmeargle' into 'main'
Sketch and Forget

See merge request cable-mc/cobblemon!1093
2024-09-07 01:55:18 +00:00
Paul e7efb94ee9 Merge remote-tracking branch 'origin/main' into poker-decks 2024-09-07 10:51:04 +10:00
Hiroku c3230f0722 Update CHANGELOG.md 2024-09-07 00:49:52 +00:00
Paul 0fd6328ae4 Fixed compile error from mappings switch 2024-09-07 10:43:43 +10:00
Hiroku 43a05e5037 Merge branch 'feature/neoforge-bump-fixes' into 'main'
bump neoforge to stable version and fix breaking changes (and add missing license headers)

Closes #961 and #960

See merge request cable-mc/cobblemon!1128
2024-09-07 00:38:35 +00:00
PolymetaandHiroku c2b5eca4c7 bump neoforge to stable version and fix breaking changes (and add missing license headers) 2024-09-07 00:38:35 +00:00
Hiroku e9c88ae899 Merge branch 'feature/poker-chips' into 'poker-decks'
variation tooltip to display when buttons are hovered

See merge request cable-mc/cobblemon!1125
2024-09-07 00:38:01 +00:00
PolymetaandHiroku fece798b92 variation tooltip to display when buttons are hovered 2024-09-07 00:38:01 +00:00
Myslippy 564b5ae413 Update StructurePoolGeneratorMixin.java 2024-09-06 20:51:40 +00:00
Myslippy a8c93146da Update StructurePoolGeneratorMixin 2024-09-06 20:08:37 +00:00
Licious a0c3e40cc4 Merge branch 'fix_moves_description' into 'main'
Fix moves descriptions cutting off

See merge request cable-mc/cobblemon!1126
2024-09-06 13:10:23 +00:00
EruselandLicious 1da011026e Fix moves descriptions cutting off 2024-09-06 13:10:23 +00:00
Erusel 4ab4f27690 fixed trade gui not closing 2024-09-06 14:39:50 +02:00
Erusel 5aaf3aaa8a fixed doomed key pressed method not being called and screens not closing 2024-09-06 14:38:18 +02:00
BuildTools 73ba27a148 fixed imports 2024-09-06 13:55:44 +02:00
BuildTools 7493ac80c4 changing thing for making it closing at the inventory key and not "e" 2024-09-06 13:55:05 +02:00
BuildTools 5d4c4a2d9d added minecraft like closing on PC 2024-09-06 13:24:03 +02:00
BuildTools dad87454cf added minecraft like closing on Pokenav 2024-09-06 13:23:18 +02:00
BuildTools fbcbdd0d1f added minecraft like closing on Starter Selection 2024-09-06 13:21:16 +02:00
BuildTools 37ac4837b2 added minecraft like closing on Trade GUI 2024-09-06 13:20:21 +02:00
BuildTools 8cae97b297 added minecraft like closing on Summary 2024-09-06 13:17:49 +02:00
JazzMcNade 3981ccc332 Player Interactions: Server now informs the client on why an option is unavailable. 2024-09-06 01:31:48 -05:00
Lily e5c2daac2e added cosmetic variants for several pokemon in the pokedex 2024-09-04 21:28:57 -04:00
Lily cccd3aa310 fixed searching 2024-09-04 17:56:44 -04:00
Lily b8dc811a4f fixed missing drop button 2024-09-04 12:51:48 -04:00
Lily 2e8529cc62 oops 2024-09-04 12:34:43 -04:00
Lily 5f8a49e008 re-ordered paldean dex; fixed johto dex missing from the national category 2024-09-04 12:28:59 -04:00
JazzMcNade a945c839f0 Greyed out trade request option if it's unavailable 2024-09-03 23:51:22 -05:00
Test 607413db61 Merge branch 'fix_pc_arrow_hover' into 'main'
Fix NavigationButton hover

See merge request cable-mc/cobblemon!1124
2024-09-04 04:07:32 +00:00
EruselandTest d478eecf47 Fix NavigationButton hover 2024-09-04 04:07:31 +00:00
SPGesus dd624d06f3 Update galar.json 2024-09-04 01:26:13 +00:00
SPGesus bc596a48ed Update alola.json 2024-09-03 22:59:34 +00:00
dhi_holo 25ad6e96f4 Not Yet Fixed Because Grr
The component data for these is pretty much solved, except for one major issue:
It totally stops the advancements loading in game for some reason. Doesn't like the species ID effectively. If anyone wants to take a crack at it between now and whenever it's solved, plz
2024-09-03 16:26:37 +10:00
dhi_holo 8efd658a93 Fix Batch 1
Added translation strings for the two new gamerules and 6 new tags (even if one of them isn't actually in this branch)
Fixed two advancements having incorrect icons (due to switch from nbt to item components)
2024-09-02 18:22:07 +10:00
dhi_holo c565a79697 Change Instrument
Evolution Blocks now use the Bit instrument (from Emerald Blocks) instead of Basedrum (from stone)
2024-09-02 16:30:13 +10:00
dhi_holo 81f82faa2d Updated to 1.21
Updated to Main/1.21
2024-09-02 16:20:28 +10:00
dhi_holo 978e886b6e Merge branch 'main' into stone-blocks 2024-09-02 15:35:58 +10:00
Paul 6d7784cb3a Added dex additions and dex entry additions 2024-09-02 15:11:03 +10:00
JazzMcNade 63de39b970 Merged Main into DoublesAreTheFuture 2024-09-01 19:18:50 -05:00
JazzMcNade 05a8154d2e Merge Conflicts 2024-09-01 18:32:30 -05:00
JazzMcNade 134b071a1d Merge branch 'main' into TheSketchySmeargle 2024-09-01 18:32:08 -05:00
Paul 5f4366735f Merge remote-tracking branch 'origin/poker-decks' into poker-decks 2024-09-01 22:00:00 +10:00
apion 7fd0f2710e Fixed pokedex grant all command 2024-09-01 07:09:55 -04:00
Paul 7a4760e1bc Merge remote-tracking branch 'origin/main' into poker-decks
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/events/CobblemonEvents.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/gui/GuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/PokemonGuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/AerodactylModel.kt
#	common/src/main/resources/assets/cobblemon/sounds.json
2024-09-01 20:24:24 +10:00
apion 6574976f2d Pokedex scrolls to correct mon when opened via scanner 2024-09-01 06:18:34 -04:00
apion 6126653a2c Fix neoforge scanner rendering 2024-09-01 05:38:32 -04:00
Paul f45bc68ee6 Changelog! Again! Check again tomorrow for more (also mojmaps) 2024-09-01 19:33:07 +10:00
Paul 1c71e68323 Merge remote-tracking branch 'origin/main' into log-async 2024-09-01 19:29:56 +10:00
Paul 2d9523b9a1 Deleted unused posers 2024-09-01 19:27:00 +10:00
Paul 5ed9fba170 Changelog squashing for 1.6 2024-09-01 19:25:40 +10:00
Hiroku 22583bd207 Merge branch 'sega_bass_pro_fishing_2' into 'main'
1.6 Merge

Closes #916

See merge request cable-mc/cobblemon!1107
2024-09-01 07:53:43 +00:00
Paul 32d68ce554 Conflicto begonus 2024-09-01 17:10:26 +10:00
Paul 72a897063c Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/java/com/cobblemon/mod/common/mixin/PlayerMixin.java
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonSounds.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/item/PokemonSelectingItem.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/interpreter/instructions/SwitchInstruction.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/HealingMachineBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/PCBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/battle/BattleMusicHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/battle/BattleSwitchPokemonHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/sound/battle/BattleMusicInstance.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/battle/BagItemConvertible.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/ReviveItem.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/controller/ServerEvolutionController.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/world/gamerules/CobblemonGameRules.kt
#	common/src/main/resources/data/cobblemon/loot_table/ruins/common/luna_henge_ruins.json
#	common/src/main/resources/data/cobblemon/loot_table/ruins/common/sol_henge_ruins.json
#	common/src/main/resources/data/cobblemon/loot_table/ruins/common/stonjourner_henge_ruins.json
#	common/src/main/resources/data/cobblemon/loot_table/ruins/uncommon/luna_henge_ruins.json
#	common/src/main/resources/data/cobblemon/loot_table/ruins/uncommon/sol_henge_ruins.json
#	common/src/main/resources/data/cobblemon/loot_table/ruins/uncommon/stonjourner_henge_ruins.json
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_center1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_center1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_center1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side2a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side2b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side2c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side3a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side3b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side3c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side4a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side4b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/lunatone_side4c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_center1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_center1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_center1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side2a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side2b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side2c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side3a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side3b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side3c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side4a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side4b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/solrock_side4c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_center1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_center1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_center1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner10a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner10b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner10c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner11a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner11b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner11c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner12a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner12b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner12c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner2a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner2b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner2c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner3a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner3b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner3c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner4a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner4b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner4c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner5a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner5b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner5c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner6a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner6b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner6c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner7a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner7b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner7c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner8a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner8b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner8c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner9a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner9b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_corner9c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side1a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side1b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side1c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side2a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side2b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side2c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side3a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side3b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side3c.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side4a.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side4b.nbt
#	common/src/main/resources/data/cobblemon/structure/ruins/stonjourner_side4c.nbt
2024-09-01 16:32:14 +10:00
Paul a471a0183f Fixed form unlocking not working properly and gender ratios misbehaving in dex 2024-09-01 16:25:37 +10:00
Hiroku 11cfb7184d Merge branch 'sound' into 'main'
Sound updates

See merge request cable-mc/cobblemon!1121
2024-09-01 06:15:36 +00:00
Hiroku e2645e02d1 Merge branch 'poker-table' into 'poker-decks'
Table for poker decks

See merge request cable-mc/cobblemon!1122
2024-09-01 04:50:21 +00:00
TestandHiroku 33ff9e90b6 Table for poker decks 2024-09-01 04:50:21 +00:00
Test e75e2801ce fix slot spacing 2024-08-31 23:53:53 -04:00
Tyzillion 7f77abd9a2 License update and changelog update. 2024-08-31 23:13:46 -04:00
Paul 592e6ce5a8 Properly setup dex data with ordering 2024-09-01 11:47:52 +10:00
JazzMcNade f653d325bb Battle wheel option is now greyed out if the target is unable to battle. 2024-08-31 19:11:40 -05:00
Paul 859ca62dc8 Fixed flashing dex screen and seen pokemon not showing properly 2024-08-31 12:25:05 +10:00
Paul 148f4be444 Dex sort order 2024-08-31 11:07:45 +10:00
Paul 4bf6ec80b4 re-enabled dex scanning but it blows up the game 2024-08-30 22:12:50 +10:00
Paul d9a0998213 Added variation controls to dex, fixed various bugs with dex 2024-08-30 22:00:14 +10:00
JazzMcNade eeec0e853b Fixed request button text. Updated team leave icon. 2024-08-30 00:34:42 -05:00
Tyzillion 925b18d809 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-08-28 20:37:39 -04:00
Paul 9c817f77dc Dex initialization fixes, display correct first-known-forms in national dex, fixed species features not saving 2024-08-26 21:36:12 +10:00
Paul b044fe01bb Form dex squashing, Alola dex with separated Rattata as example, various fixes for UI knowledge 2024-08-26 17:03:09 +10:00
Paul d46c88dcf3 Significant restructuring of pokedex entry data 2024-08-26 12:26:20 +10:00
JazzMcNade 03231beab7 Sketch's new move is now immediately applied to effectedpokemon, rather than during postbattle. 2024-08-25 19:44:43 -05:00
amo b4919d18d1 🌠 Fix: Fix friendship only ever being updated clientside & chance inverted check 2024-08-25 14:05:26 +01:00
amo d9e8283743 🌠 Chore: Remove strict inequality from bobber rendering check 2024-08-25 12:59:15 +01:00
apion 3d84063f9a Fix licenses, delete unnecessary files 2024-08-25 02:17:18 -04:00
apion 73237073c2 Lang fixes 2024-08-25 02:09:47 -04:00
apion 05b04cfa67 Added swapping between dexes 2024-08-25 02:09:00 -04:00
apion 4187c04374 Added Johto pokemon, and allowed for aggregation of separately defined dexes 2024-08-25 01:48:05 -04:00
apion d5fca78ba0 Merge remote-tracking branch 'origin/poker-decks-key-value' into poker-decks-key-value
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/pokedex/PokedexGUI.kt
2024-08-24 23:25:28 -04:00
apion 8411cd44f9 Added a codec backed GSON adapter, added a codec for ExpressionLikes, setup infrastructure for different types of dexes 2024-08-24 23:24:54 -04:00
Paul e1dc9b1b1b Merge relics 2024-08-25 11:40:41 +10:00
Paul 595a079625 Merge remote-tracking branch 'origin/poker-decks' into poker-decks-key-value
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokedex/PokedexJSONRegistry.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokedex/PokedexRecord.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokedex/SpeciesPokedexEntry.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/pokedex/PokedexGUI.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokedex/DexData.kt
#	common/src/main/resources/data/cobblemon/pokedexes/national.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_alola.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_galar.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_hisui.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_hoenn.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_johto.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_kalos.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_kanto.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_paldea.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_sinnoh.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_unknown.json
#	common/src/main/resources/data/cobblemon/pokedexes/national_unova.json
2024-08-25 11:11:14 +10:00
apion cf5bd4dca6 Fix conditions (again) 2024-08-24 16:59:42 -04:00
apion a0d9322e55 Fix conditions 2024-08-24 16:52:23 -04:00
apion 304f6c83ee Fix compile errors and encode/decode issues 2024-08-24 16:20:22 -04:00
Paul 8d4a7de267 Calculated pokedex data, some clean up of unused stuff, need to fix up dex client 2024-08-24 22:36:57 +10:00
apion 3b302d6777 Add referential integrity 2024-08-23 23:14:40 -04:00
Paul 59a92391cd Merge remote-tracking branch 'origin/poker-decks-key-value' into poker-decks-key-value 2024-08-23 22:27:55 +10:00
Paul d18a3e43e4 Reworking dex data to be declarative 2024-08-23 22:27:36 +10:00
apion c9baf9332b Add forms 2024-08-22 18:27:44 -04:00
apion ccf3d8eefe Add the 151 OG pokemon as dex entries 2024-08-22 17:24:24 -04:00
Sterrezo 9ac8ca3a7b Final tweaks to the new evolution sound 2024-08-22 14:08:58 +02:00
apion 0698f8265b Fixed numbering 2024-08-21 22:39:41 -04:00
apion a10622151c Renamed stuff to be pokedex specific 2024-08-21 21:15:21 -04:00
apion f69ed78582 Cleaned up event subscriptions a bit, hooked into player party store instead of trying to track pokedex events everywhere. 2024-08-21 19:43:12 -04:00
apion c52ad67435 Fix pokemon rendering when not supposed to 2024-08-21 19:06:01 -04:00
dhi_holo a79428cfb6 Update CobblemonBlocks.kt
Made Ice Block use the Ice colour on maps (why are the map colour names so annoying)
2024-08-21 17:17:17 +10:00
dhi_holo a0672f6354 Data and Textures
all the data files for the smooth tumblestone block suites, and the textures updated since past commit
2024-08-21 16:40:49 +10:00
dhi_holo 72000a1340 More Tumblestone Blocks WIP
Needing to take a break, so untested WIP push just so it's saved. Adds all 9 smooth blocks, and updates older textures. Should be fully functional on the asset side as of this commit, data side will be done later.
2024-08-21 14:57:16 +10:00
Sterrezo 9d25da31dc Fixed block sounds playing at an incorrect pitch
Increased the pitch in CobblemonSounds.kt, workaround for #929
Tweaked volumes again.
2024-08-20 13:10:58 +02:00
Sterrezo 96778d2de0 Implemented sounds for evolution stone blocks 2024-08-20 11:58:19 +02:00
dhi_holo c646f7555e Blocks In
All 10 blocks implemented in near full.
Block data, models, loot tables, recipes, advancements, item groups, lang. Only missing the textures for 6 of the blocks, the sounds (needs changing in Blocks as well as implementation), and confirmation for one texture.

Ice Stone texture also updated
2024-08-20 12:30:07 +10:00
Test c5600ff881 rolling scan lines 2024-08-18 23:17:08 -04:00
apion a39b3092be Actually added a pokemon with an alternate form (rattata) 2024-08-18 17:21:04 -04:00
apion 8c5a24c431 More progress 2024-08-18 16:38:53 -04:00
Sterrezo fb84c48d4d Merge branch 'main' into sound 2024-08-18 21:20:54 +02:00
Sterrezo efc59ab2be More updates to the UI evolution sound 2024-08-18 21:19:09 +02:00
apion 44560195fc Things are kinda working 2024-08-18 14:17:15 -04:00
apion 9b2f0c9375 More work trying to convert to new data format 2024-08-18 13:34:38 -04:00
Hiroku 5cbcef5a88 Merge branch 'remove-unused-event' into 'main'
Remove unused held item update event

See merge request cable-mc/cobblemon!1118
2024-08-18 02:46:56 +00:00
Hiroku 7aa76587df Merge branch 'whatsy/poker-decks' into 'poker-decks'
poker decks

See merge request cable-mc/cobblemon!1089
2024-08-18 02:46:37 +00:00
JazzMcNade ebbbec9d6c Fixed merge conflicts 2024-08-17 21:30:46 -05:00
JazzMcNade 8bb2d1321d Merge branch 'main' into TheSketchySmeargle 2024-08-17 21:30:20 -05:00
Tyzillion e5ffb6db96 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-08-17 22:23:57 -04:00
apion 7700a606d0 IDK if this stuff is staying 2024-08-17 20:52:49 -04:00
Paul 57dbb9fc02 Conflicto confundo 2024-08-18 10:01:47 +10:00
Paul 938cd995d7 Merge remote-tracking branch 'origin/poker-decks' into whatsy/poker-decks
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/pokedex/MapUpdatePacketHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokedex/scanner/PokedexUsageContext.kt
2024-08-18 09:58:41 +10:00
Paul 112649081f Properly handle the ordering of dexes 2024-08-18 09:54:36 +10:00
apion d27ee304cb This ones for you Village 2024-08-17 13:53:44 -04:00
apion 1b5ad6e860 Fix server crashes 2024-08-17 10:58:44 -04:00
apion d283eb061a Fix issue where only assets for the red pokedex are used 2024-08-17 09:46:08 -04:00
Paul 92111b1046 Ported some dex stuff to mojmaps, scanning owned pokemon adds to Caught status in dex 2024-08-17 21:35:23 +10:00
Paul fbc976bfa0 Merge branch 'poker-decks' into whatsy/poker-decks
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokedex/PokedexJSONRegistry.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/pokedex/PokedexGUI.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/keybinds/PokedexBinding.kt
2024-08-17 19:37:52 +10:00
Landon Wills 5c6ecb1807 Remove unused held item update event 2024-08-16 23:13:39 -04:00
Paul cb266499a3 Use a snapshot of the storm matrix for event particle type EMITTER 2024-08-16 17:28:29 +10:00
Paul 094f860b80 Fixed evo burst particle being emitter bound 2024-08-16 15:53:04 +10:00
Paul 79c1259cae Restored original particle event source matrix for EMITTER and EMITTER_BOUND types 2024-08-16 15:43:53 +10:00
Sterrezo 01f922b653 Clarified a change in the changelog and re-added a sound for evolution in sounds.json 2024-08-16 01:11:52 +02:00
Sterrezo 71d1730697 Merge branch 'main' into sound 2024-08-16 00:58:52 +02:00
Apion 84dfd56c12 Merge branch 'Slippy-is-a-Coder-Now' into 'main'
Slippy is a coder now

See merge request cable-mc/cobblemon!1108
2024-08-15 21:25:57 +00:00
Nick 770abc2b9b Merge branch 'feature/fix-license' into 'main'
fix missing license headers

See merge request cable-mc/cobblemon!1116
2024-08-15 17:35:28 +00:00
Polymeta 353069803f fix missing license headers 2024-08-15 18:17:55 +01:00
Waterpicker 03227d07f2 Make it possible to add new animation molang functions. 2024-08-15 02:06:51 -05:00
Paul b8d913bd2b Fixed weird waterlogging issues in pasture and PC 2024-08-12 15:34:57 +10:00
Paul 9339d91cbb Missing licenses 2024-08-12 13:47:15 +10:00
Paul 3a759eccf7 Improved "!" above challenger heads, it's not smooth yet 2024-08-12 13:45:26 +10:00
Paul 8b255c784a Fixed monitor block rotations from structures maybe 2024-08-11 18:17:27 +10:00
apion d515091b30 Add all unimplemented mons to dex 2024-08-11 01:30:14 -04:00
apion 1f3e408396 Made pokemon types into an enum, changed how server side scan validation works 2024-08-10 22:38:03 -04:00
apion f800070f91 Made scanning actually add pokedex records 2024-08-10 20:27:21 -04:00
apion 5f4c2d1d7e God have mercy on my soul 2024-08-10 19:15:33 -04:00
JazzMcNade d8bae04239 BattleChallengeParticleWIP 2024-08-10 18:06:59 -05:00
Tyzillion 4efd8a7fef Tweaked evolution particles. 2024-08-10 15:52:27 -04:00
Tyzillion e7911644d8 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
2024-08-10 14:57:33 -04:00
apion 590c3cfcd2 Added zooming back 2024-08-10 10:05:40 -04:00
apion 2b1b393c92 Added back the display of the species name 2024-08-10 07:27:56 -04:00
apion 0b3d78e509 More cleanup 2024-08-10 06:30:47 -04:00
Sylvonir b42b561e49 Oops random extra variable 2024-08-09 21:38:44 -07:00
Sylvonir 68639390f5 Merge remote-tracking branch 'origin/party-control-tweaks' into party-control-tweaks 2024-08-09 21:38:17 -07:00
Sylvonir 226fefc08a Hopefully match party scroll behaviour with vanilla logic 2024-08-09 21:38:07 -07:00
Sylvonir c8fb04e0ea Hopefully match party scroll behaviour with vanilla logic 2024-08-09 21:35:38 -07:00
Sylvonir f4aa67390a Merge remote-tracking branch 'origin/party-control-tweaks' into party-control-tweaks 2024-08-09 21:30:38 -07:00
Hiroku 4cdea8d1fc Merge branch 'sprites' into 'sega_bass_pro_fishing_2'
Gui Sprites

See merge request cable-mc/cobblemon!1102
2024-08-10 00:43:54 +00:00
WaterpickerandHiroku 1b6139b386 Gui Sprites 2024-08-10 00:43:54 +00:00
Hiroku de3342226b Merge branch 'battle_bug_fixes' into 'main'
Battle bugs pentakill

Closes #865, #912, #880, #466, and #819

See merge request cable-mc/cobblemon!1105
2024-08-10 00:37:40 +00:00
Hiroku ca890133ba Merge branch 'Myslippy-main-patch-47052' into 'main'
Update CHANGELOG.md

See merge request cable-mc/cobblemon!1111
2024-08-10 00:36:24 +00:00
Hiroku c452aa77a9 Merge branch 'fix-missing-stellar-message' into 'main'
Fix terastallize message missing when using stellar

See merge request cable-mc/cobblemon!1112
2024-08-10 00:36:12 +00:00
Sylvonir 1530f4d09a Update CHANGELOG.md 2024-08-09 15:22:26 -07:00
Sylvonir 2a64c405f9 Update CHANGELOG.md 2024-08-09 15:12:51 -07:00
Sylvonir d5a22165c6 Fix battle log GUI flashing when BattleGUI is opened 2024-08-09 15:00:40 -07:00
Sylvonir a16ae6665a Fix party scroll not overriding vanilla scroll with high scroll speeds 2024-08-09 13:55:01 -07:00
Sylvonir 12595dde53 Let Pokémon be invulnerable during sendout and intangible during recall 2024-08-09 13:33:15 -07:00
Sylvonir 68299d2b57 Tweak recall timing and allow it to cancel sendout 2024-08-09 13:02:13 -07:00
JazzMcNade 3d8935136e Updated Lang key references 2024-08-09 01:17:24 -05:00
Landon Wills fba2217e6f Fix terastallize message missing when using stellar 2024-08-09 02:00:10 -04:00
JazzMcNade 462a8502bf Removed delay in damage being applied for some targets in multitarget attacks 2024-08-09 00:54:50 -05:00
Apion 2bd1382b85 Merge branch 'feature/simplify-modelloader-mixin' into 'sega_bass_pro_fishing_2'
Stop throwing errors in the model loader that generate misleading crash-reports

See merge request cable-mc/cobblemon!1110
2024-08-08 16:11:08 +00:00
PolymetaandApion 7791e72f72 Stop throwing errors in the model loader that generate misleading crash-reports 2024-08-08 16:11:07 +00:00
JazzMcNade d8645530de Fixed up challenge notification messages 2024-08-08 00:28:42 -05:00
Myslippy 8026a7c0b7 Update CHANGELOG.md 2024-08-08 03:16:19 +00:00
JazzMcNade 1e27298f36 Sendouts for double/triples now better reflect the party team ordering 2024-08-07 21:36:05 -05:00
Segfault Guy 640c7b1086 Switch clarity and cleanup to address log flooding. 2024-08-05 23:51:07 -04:00
JazzMcNade 35cc7cc956 Adjusted sendout timings so that the first sendout always happens immediately. Challengers always sendout first. 2024-08-05 20:27:41 -05:00
JazzMcNade a34bc3ef49 Battle start sendout timings are now staggered and randomized. 2024-08-05 00:24:16 -05:00
JazzMcNade e7f1092264 Added Actor display names to battle overlay 2024-08-04 23:21:13 -05:00
JazzMcNade 077669d34f Fixed back button from from playing a click sound when it is not visible 2024-08-04 17:54:02 -05:00
JazzMcNade d3784e918e Merge branch 'sega_bass_pro_fishing_2' into DoublesAreTheFuture 2024-08-04 17:36:57 -05:00
JazzMcNade d0f2d816fe Back button position is now consistent between screens. refactored class name for better clarity 2024-08-04 17:09:23 -05:00
JazzMcNade d54d91e60f Implemented Compact battle portraits, Added portrait target selection, fixed some styling 2024-08-04 16:16:24 -05:00
apion 301b210d5a Started some big boy cleanup for the dex 2024-08-04 16:31:04 -04:00
apion b942c3a45e Fix dimension serialization 2024-08-04 13:17:04 -04:00
apion 8b053f491b Another pass 2024-08-04 09:05:42 -04:00
apion a65c82c2b4 Third pass at resolving mapping problems 2024-08-04 08:27:13 -04:00
apion 813258064c Second pass at resolving mapping problems 2024-08-04 08:16:58 -04:00
apion c5124cf19d First pass at resolving mapping problems 2024-08-04 03:46:24 -04:00
apion 6ffa7b1be3 Merge branch 'refs/heads/sega_bass_pro_fishing_2' into poker-decks
# Conflicts:
#	common/src/main/java/com/cobblemon/mod/common/mixin/PartyScrollMixin.java
#	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/api/gui/GuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/GeneralPlayerData.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/PlayerDataStoreManager.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/adapter/JsonPlayerData.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/adapter/MongoPlayerData.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/factory/JsonPlayerDataStoreFactory.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/factory/PlayerDataStoreFactory.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonBakingOverrides.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/PokemonGuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/BattleOverlay.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/CobblemonKeyBinds.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/SetClientPlayerDataHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/RenderHelper.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PosableModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/ChangeScaleAndSize.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/ChangeWalkSpeed.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/OpenStarterScreenCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleInitializePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/starter/SetClientPlayerDataPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/starter/RequestStarterScreenHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/starter/CobbledStarterHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MiscUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/PlayerExtensions.kt
#	common/src/main/resources/cobblemon-common.accesswidener
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/client/CobblemonFabricClient.kt
2024-08-04 02:53:12 -04:00
Hiroku cd68665cf4 Merge branch 'main' into 'main'
Enhance Test Coverage for IVs.createRandomIVs

See merge request cable-mc/cobblemon!1101
2024-08-03 01:34:39 +00:00
Hiroku de9d9ec645 Merge branch 'battle_theme_tweaks' into 'main'
Battle theme Sound Physics Remastered compat + fade out override

See merge request cable-mc/cobblemon!1106
2024-08-03 01:33:58 +00:00
Hiroku e8039da30d Merge branch 'sega_bass_pro_fishing_2' into 'sega_bass_pro_fishing_2'
Enhance Carbink spawn condition, fix Basculin catch rate, give Obstruct to Obstagoon

See merge request cable-mc/cobblemon!1092
2024-08-03 01:24:44 +00:00
apion dadd0a3c43 Fix mapping issues 2024-08-02 21:16:30 -04:00
Hiroku 598748220f Less code = better 2024-08-03 01:05:05 +00:00
apion c71a1dac8f Merge branch 'refs/heads/main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveTemplate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/IntSpeciesFeature.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/summary/widgets/screens/moves/MoveSlotWidget.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/misc/GimmighoulStashHandler.kt
2024-08-02 20:57:20 -04:00
Hiroku 7c23417335 Merge branch 'tmetcalfe89/abstracted-stashes' into 'main'
abstracted hoard logic

See merge request cable-mc/cobblemon!1028
2024-08-03 00:46:14 +00:00
JazzMcNade 0fd4f68f69 Corrected Lang 2024-08-02 19:30:25 -05:00
Hiroku 018bd99fa3 Merge branch 'ShowMeYourTrue(Hidden)Power' into 'main'
Show me your true(hidden)power

Closes #808

See merge request cable-mc/cobblemon!1060
2024-08-03 00:24:36 +00:00
Paul 2acddf5985 Merge remote-tracking branch 'origin/main' 2024-08-03 10:20:08 +10:00
Paul c924e17941 Added cry_subtitles.py 2024-08-03 10:11:16 +10:00
Paul 313250347c More safely check thread for spawners and influencers access 2024-08-03 10:09:56 +10:00
Hiroku 52f1d23ea5 Merge branch 'feature/handle-player-data-with-care' into 'main'
Handle JsonPlayerData with care

See merge request cable-mc/cobblemon!1100
2024-08-02 23:40:02 +00:00
apion ca0f453e0a Merge branch 'refs/heads/main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/build.gradle.kts
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/PokemonPastureBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/AbraModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/AerodactylModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/CaterpieModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/MewModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/WeedleModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/BellossomModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/ChikoritaModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/LarvitarModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/MurkrowModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/SmoochumModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen3/BeldumModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen3/MinunModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen3/PlusleModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen3/ShroomishModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen4/BunearyModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen4/CombeeModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen4/PachirisuModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen5/ElgyemModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen5/PetililHisuiBiasModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen5/PetililModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen6/FletchlingModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen6/KlefkiModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen6/SkrelpModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen7/MorelullModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen9/GimmighoulRoamingModel.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/ShroodleModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen9/TatsugiriModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/events/AdvancementHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/group/CobblemonItemGroups.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/helditem/BaseCobblemonHeldItemManager.kt
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/metronome.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/protective_pads.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/punching_glove.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/room_service.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/scope_lens.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/terrain_extender.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/utility_umbrella.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/wide_lens.json
#	common/src/main/resources/data/cobblemon/advancement/recipes/held/zoom_lens.json
#	common/src/main/resources/data/cobblemon/recipe/metronome.json
#	common/src/main/resources/data/cobblemon/recipe/protective_pads.json
#	common/src/main/resources/data/cobblemon/recipe/punching_glove.json
#	common/src/main/resources/data/cobblemon/recipe/room_service.json
#	common/src/main/resources/data/cobblemon/recipe/scope_lens.json
#	common/src/main/resources/data/cobblemon/recipe/terrain_extender.json
#	common/src/main/resources/data/cobblemon/recipe/utility_umbrella.json
#	common/src/main/resources/data/cobblemon/recipe/wide_lens.json
#	common/src/main/resources/data/cobblemon/recipe/zoom_lens.json
2024-08-02 18:58:34 -04:00
Sterrezo cbdb63b102 I never forget to ctrl + s the changelog 2024-08-02 15:10:05 +02:00
Sterrezo d211fb2310 Updated sounds for clicks, evolution and evolution notification. Renamed and relocated evolution sound assets.
Evolution sounds were scattered in the folder with Pokemon. I moved them all to their own folder and renamed them to be more descriptive as to where they play both in files and in code.
2024-08-02 15:07:17 +02:00
Sterrezo 2f730be207 Merge branch 'main' into sound 2024-08-02 13:53:20 +02:00
Slippy 761eb07300 Merge branch 'Slippy-is-a-Coder-Now' of https://gitlab.com/cable-mc/cobblemon into Slippy-is-a-Coder-Now 2024-08-02 00:11:15 -05:00
Slippy fec9ace152 PC loot table 2024-08-02 00:10:55 -05:00
tmetcalfe89 63e5274fc9 healer pools and entries 2024-08-01 21:32:10 -07:00
Slippy ae28d186a0 When PC and Healer blow up and is set to natural = false, they won't drop anything. 2024-08-01 22:16:46 -05:00
Slippy e901d3d1e7 PC and Healing Machine now drop iron ingots when natural = true 2024-08-01 22:11:00 -05:00
Plastered_Crab 1e0c2005da - fixed closing animation 2024-08-01 14:00:56 -07:00
Slippy 33aa6d4591 I coded something. hope it doesnt break :) 2024-08-01 11:30:42 -05:00
apion dbc108602a Bump kotlin versions (fr) 2024-07-31 21:43:08 -04:00
apion 7c15504828 Bump kotlin versions 2024-07-31 20:39:56 -04:00
Segfault Guy 14c3e4e9a0 Merge remote-tracking branch 'origin/main' into battle_theme_tweaks 2024-07-30 23:25:32 -04:00
Segfault Guy b89cd88639 Merge remote-tracking branch 'origin/main' into battle_bug_fixes 2024-07-30 23:00:49 -04:00
Segfault Guy 87a106bd1e Changelogs 2024-07-30 23:00:11 -04:00
Segfault Guy 1aacad2733 Battle start + invulnerability cleanup. 2024-07-30 21:50:39 -04:00
Plastered_Crab 89dca86a21 - added test compass to top of scanner 2024-07-30 16:19:12 -07:00
Plastered_Crab cdcd7bdec6 - More adjustments to the smaller hitboxes during scanning so scanning tiny pokemon (like joltik) is easier 2024-07-30 13:22:07 -07:00
Plastered_Crab 35c3e8f245 - scanner range adjustment when zooming and fixed my goofs with the grace period 2024-07-30 09:56:13 -07:00
plastered_crab 678b0cc7fd - making smaller hitboxes bigger when scanning (needs fine tuning) 2024-07-30 00:32:49 -07:00
plastered_crab f2dd1a5c62 - overlay is kill (for real this time) 2024-07-29 22:23:05 -07:00
Segfault Guy 7c26008ad4 Turn 0, battle init fix, switch tile changes, eject pack implementation. 2024-07-29 23:52:56 -04:00
plastered_crab b54d284fdb - kill overlay upon scan finishing 2024-07-29 20:35:19 -07:00
plastered_crab 79d8425749 - added grace period for scanning 2024-07-29 20:13:40 -07:00
Test 36c4e4e553 overlay screen tests 2024-07-29 22:56:21 -04:00
Paul c28c17b514 Smoothed dex zoom in and zoom out transitioning 2024-07-28 11:06:50 +10:00
Test 75faa7b798 overlay screen tests 2024-07-27 20:42:35 -04:00
JazzMcNade f76d0511b9 Fixed Battle tiles for Single battles 2024-07-27 19:09:47 -05:00
JazzMcNade ebe47700b2 BattleRequestUI: Improved performance, expanded navigation button height, some refactoring 2024-07-27 13:56:02 -05:00
apion c7eec20769 Fix mint dupe 2024-07-26 21:06:04 -04:00
Paul 3d64e79f82 Fixed rod fishing items not working on NeoForge 2024-07-27 10:40:09 +10:00
Hiroku 0d822ad413 Zygarde 10% form is aspected as 10percent 2024-07-26 21:30:45 +00:00
JazzMcNade f1de8adc68 Made Multibattle requests and responses more flexible 2024-07-25 23:32:31 -05:00
Sylvonir 43beadd6b7 Fix bait not consuming, finally 2024-07-25 18:01:52 -07:00
JazzMcNade ee0e76a172 Multibattles: Simple Geometry to make Showdown positions match Minecraft player positions 2024-07-25 00:59:31 -05:00
plastered_crab 4ae64716fb - bait consumption tweaks 2024-07-24 20:59:12 -07:00
Sylvonir 001d653e91 Fix bait sounds 2024-07-24 19:50:30 -07:00
Sylvonir 5265e35b9d Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-07-24 16:51:01 -07:00
Sylvonir 4eefab6361 Add durability enchantments to pokerod 2024-07-24 16:50:46 -07:00
Plastered_Crab 8d1730de36 - added new bait attaching/detaching sounds 2024-07-24 16:47:58 -07:00
Plastered_Crab 2e89abd07e - adjust bite reduction effect logic 2024-07-24 15:03:43 -07:00
VasconcelosJoao 0b7c183eeb New test cases 2024-07-24 18:40:39 -03:00
VasconcelosJoao e790f03066 New test cases 2024-07-24 18:38:52 -03:00
Plastered_Crab 72c0f517eb - Poke_Rods are now enchantable properly (yippie!) 2024-07-24 11:25:07 -07:00
tmetcalfe89 e7271590e0 check to see if dice rolled was within success bounds 2024-07-24 10:20:17 -07:00
tmetcalfe89 76e3b7420e get nature effect stat, and warn on missing 2024-07-24 10:19:14 -07:00
JazzMcNade 12da3a428f Improved sendout positions for multi-battles 2024-07-24 01:08:15 -05:00
JazzMcNade 0ddd8a499a Fixed an issue with switch menu selection when there are no reserve pokemon 2024-07-23 21:51:09 -05:00
tmetcalfe89 698ba9a03f fixed not decrementing the stack if > 1 2024-07-23 18:47:26 -07:00
Plastered_Crab 1a398f50a5 - WIP on fixing the decremention of bait upon reeling in a pokemon 2024-07-23 15:53:10 -07:00
Polymeta a0df8e6db2 refactor player data loading to be more defensive and avoid crashing where feasible 2024-07-23 23:52:07 +01:00
Segfault Guy faa9e73d22 Merge remote-tracking branch 'origin/main' into battle_bug_fixes 2024-07-23 00:24:37 -04:00
Segfault Guy b2fe1c2fb4 Switch and withdraw logs. 2024-07-23 00:24:07 -04:00
Plastered_Crab 50d127f9ad - Fixes for all fishing bait effects (besides Friendship boost) 2024-07-22 14:22:06 -07:00
Paul eede77db51 Fixed bait not working, fixed aspect-changing fishing lures having a single frame of its un-changed form, fixed level modifying baits 2024-07-22 17:28:59 +10:00
JazzMcNade 3a3fe49c7c Merge branch 'sega_bass_pro_fishing_2' into DoublesAreTheFuture 2024-07-22 00:35:37 -05:00
JazzMcNade cf06bed1f3 Rough Draft of new Battle Request UI 2024-07-22 00:35:22 -05:00
Paul e1141e51d4 Fixed migration of 1.5 fossil machines to 1.6 data 2024-07-22 14:16:53 +10:00
Paul 99f2d1acc6 Fixed summary party order swapping 2024-07-22 12:22:34 +10:00
Paul b7e54c67ed Fixed all the inventory checking advancements completing for any item 2024-07-22 12:00:33 +10:00
Paul 84baf9ae5d Fixed rendering of gilded chests 2024-07-22 11:54:09 +10:00
Segfault Guy 0011cab21e Fix nullptr exceptions when using revive or healing bench pokemon in battle. 2024-07-21 12:22:38 -04:00
Paul 8f6392d912 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-07-21 21:25:40 +10:00
Paul 42b432baec Fixed fossil analyzer fossil rendering 2024-07-21 21:25:26 +10:00
Dani Voort 7a4abfc4f6 Fix SpeciesFeatureSyncPacket attempting to sync non-synchronized feature 2024-07-21 12:22:31 +02:00
Hiroku 75531a812f Merge branch 'feature/fix-pipeline' into 'main'
bump versioning gradle plugin

See merge request cable-mc/cobblemon!1099
2024-07-21 07:57:49 +00:00
Polymeta d6872df831 bump versioning gradle plugin 2024-07-21 07:47:52 +00:00
Paul d282631662 Added logging for unsafe access to various APIs and moved JOIN and DISCONNECT platform events to always be sync 2024-07-21 13:16:13 +10:00
Hiroku 1450800207 Merge branch 'implement_pokemon' into 'main'
So many shoulder mounts and other fixes

See merge request cable-mc/cobblemon!1076
2024-07-21 03:04:07 +00:00
Frank The FarmerandHiroku 54bde927f1 So many shoulder mounts and other fixes 2024-07-21 03:04:07 +00:00
Hiroku b3726e247e Merge branch 'feature/catch-null-values-spawn-sets' into 'main'
prevent invalid spawn configurations from crashing the server

See merge request cable-mc/cobblemon!1090
2024-07-21 03:02:09 +00:00
Hiroku 979aba1edf Typo fix 2024-07-21 03:00:55 +00:00
Hiroku fb61a77002 Merge branch 'tumblestone-advancement-fix' into 'main'
Fix Tumbling Down advancement

See merge request cable-mc/cobblemon!1098
2024-07-21 02:31:28 +00:00
Segfault Guy 260767bed4 Add gamerule for invulnerability during battle. 2024-07-20 19:58:56 -04:00
ApionXD 4b116fcd26 Removed tab chars in zh_tw.json 2024-07-20 10:09:37 -04:00
Paul 134388e1ba Fixed battle tile pokemon rendering 2024-07-20 13:34:35 +10:00
Sylvonir 6fd77b619d Fix Tumbling Down advancement not being granted by tumblestone variants 2024-07-19 19:53:26 -07:00
Sylvonir bf039b5cb9 Pokerod is now a bundle 2024-07-19 16:13:17 -07:00
Sylvonir 8ed6a5c48d Basic inventory bait moving 2024-07-19 00:04:28 -07:00
Slippy 2895c0a2ef I hate the crumbling arch 2024-07-18 08:57:11 -05:00
Test e7cbd74b05 fix scale 2024-07-18 01:51:35 -04:00
Test bd9ebce842 Merge remote-tracking branch 'origin/DoublesAreTheFuture' into DoublesAreTheFuture 2024-07-18 01:08:36 -04:00
Test 94a1943398 assets 2024-07-18 01:08:13 -04:00
Plastered_Crab 064cd133a2 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-07-17 13:02:33 -07:00
Plastered_Crab b947974304 - Moved Pokemon altering effects of Baits to FishingSpawnCause instead of on the BobberEntity 2024-07-17 13:02:11 -07:00
Slippy acc87f9eae Solhenge, Lunahenge, and Stonjournerhenge structures completed. 2024-07-17 12:31:55 -05:00
JazzMcNade 41cf571958 Timeout Expiration Callback for Multibattle team requests. 2024-07-16 23:42:24 -05:00
Nick 2f2fae020c Merge branch 'dubwool-fix' into 'main'
Fixed shiny Dubwool’s colored wool texture was not being used

See merge request cable-mc/cobblemon!1095
2024-07-16 23:24:22 +00:00
Nick ee0d420560 Merge branch 'pasture-fixes' into 'main'
Pasture fixes

Closes #879 and #935

See merge request cable-mc/cobblemon!1097
2024-07-16 23:23:15 +00:00
SylvonirandNick 275c504df8 Pasture fixes + pokemon shearing corrections 2024-07-16 23:23:15 +00:00
tmetcalfe89 7c4251b0ec category tooltip, brought things closer together 2024-07-16 11:40:15 -07:00
tmetcalfe89 f21ef468a3 uninstalled double dash 2024-07-16 09:28:00 -07:00
tmetcalfe89 d6ba066f03 lang and colors 2024-07-15 23:08:07 -07:00
JazzMcNade c09f534746 Peer Review: Refactored interaction range constants as configuration variables. 2024-07-16 00:59:25 -05:00
tmetcalfe89 2870fc3c17 Merge branch 'sega_bass_pro_fishing_2' of https://gitlab.com/cable-mc/cobblemon into sega_bass_pro_fishing_2 2024-07-15 22:13:28 -07:00
JazzMcNade 3f389bd351 Some peer review Corrections 2024-07-15 23:46:27 -05:00
apion a95a0f2314 Temp CI change 2024-07-16 00:13:01 -04:00
plastered_crab 9e96169f97 - Because Apion told me to 2024-07-15 20:16:23 -07:00
tmetcalfe89 bc0b62e58f licenses, category tooltip, fix shift mask, cleaner lang keys 2024-07-15 19:21:22 -07:00
tmetcalfe89 8c1a468e4d what if tooltip manager 2024-07-15 18:18:38 -07:00
Plastered_Crab b5d2c9833d - fixed Shiny Chance bait effect + Pokemon Chance bait effect 2024-07-15 16:38:12 -07:00
Plastered_Crab 43e6ba6ee6 - fixed bait effects 2024-07-15 15:56:26 -07:00
Plastered_Crab 605a8a2b2c - anyone order extra tooltip fixes? 2024-07-15 14:08:19 -07:00
Plastered_Crab e3395e9a12 - more fixes for the tooltips of bait items 2024-07-15 13:56:49 -07:00
Timothy Metcalfe e1422b27c1 Merge branch 'tim/bait-description' into 'sega_bass_pro_fishing_2'
feesh bait

See merge request cable-mc/cobblemon!1096
2024-07-15 20:42:51 +00:00
tmetcalfe89 ea01a25935 show tooltips 2024-07-15 13:34:17 -07:00
Plastered_Crab f32e71aa69 - removed old code 2024-07-15 12:29:50 -07:00
Emery319 bc07b16e00 Fixed shiny Dubwool’s colored wool texture was not being used 2024-07-15 09:14:31 +00:00
Licious cb0674adeb Fix CobblemonEvolutionProxy.isClient. 2024-07-15 07:40:07 +01:00
plastered_crab 9d9300b12c - Fixed Paul's attack on the bait rendering system 2024-07-14 22:47:02 -07:00
plastered_crab a7a93f195d - Pokerod bait effects formatting tweaked and began adding tooltips to every berry for bait effects 2024-07-14 22:00:17 -07:00
plastered_crab 2107ea525e - Pokerod now has tooltips to show bait effects 2024-07-14 19:35:57 -07:00
Licious dba858a649 Licenses. 2024-07-14 21:20:39 +01:00
Licious 82851b3951 Fix CobblemonEvolutionProxy.overrideController. 2024-07-14 21:16:55 +01:00
Licious f3a587805a Fix remaining class cast issues. 2024-07-14 21:11:36 +01:00
Licious 4d42145abc Fix Codec EvolutionController. 2024-07-14 09:59:01 +01:00
Paul ce07e9b5c6 Restored berry rendering by benching the VBO optimization stuff 2024-07-14 14:52:03 +10:00
plastered_crab 26d431cd5e - wip function for rending scan progress 2024-07-13 16:34:44 -07:00
JazzMcNade 2f32886576 Changed BenchMovePacket to not map the empty string to null. Updated Changelog 2024-07-13 01:23:12 -05:00
Hiroku 42e38c5b0a Merge branch 'block_file_gen' into 'main'
Added a script to automate the creation of certain block-related files

See merge request cable-mc/cobblemon!1080
2024-07-13 04:45:44 +00:00
VineST 08c2a22359 Enhance Carbink spawn condition, fix Basculin catch rate, give Obstruct to Obstagoon 2024-07-12 22:36:28 -04:00
JazzMcNade 074b32ef9c Merge branch 'main' into TheSketchySmeargle 2024-07-12 20:53:27 -05:00
JazzMcNade bd6e68e6ad Merge branch 'main' into ShowMeYourTrue(Hidden)Power 2024-07-12 20:34:32 -05:00
JazzMcNade e169009c6c Updated Changelog 2024-07-12 14:25:40 -05:00
JazzMcNade 3102189a66 Merge branch 'sega_bass_pro_fishing_2' into DoublesAreTheFuture 2024-07-12 14:10:41 -05:00
JazzMcNade 1be9325a65 Resolved more remappings, fixed a triples related sendout position bug 2024-07-12 14:09:39 -05:00
plastered_crab db048b68bb - tweaked scanning distance to feel a bit better based on zoom level 2024-07-12 00:41:45 -07:00
plastered_crab 76c3cba300 - tweaks to Dex Scanner mode so Scanner overlay doesn't get stuck on randomly 2024-07-11 23:31:09 -07:00
Segfault Guy 653e048d2e Fix new battle music instance not playing when old instance is still fading out 2024-07-11 22:22:26 -04:00
Segfault Guy 36f87425c9 Sound Physics Remastered compat 2024-07-11 21:37:44 -04:00
plastered_crab 57603e60e6 - distance of scanning and detection of pokemon is determined by Zoom Level now 2024-07-11 01:05:40 -07:00
plastered_crab 487361208e - pokemon are detected if scanner is aimed at them when initiating scan overlay 2024-07-11 00:41:14 -07:00
plastered_crab 20b2711703 - attempt to fix HUD UI of Scanner getting stuck 2024-07-11 00:11:23 -07:00
Licious 51aebdaa7f Merge branch 'coin_pouch_fixes' into 'sega_bass_pro_fishing_2'
Coin pouch fixes

See merge request cable-mc/cobblemon!1088
2024-07-10 20:59:34 +00:00
Licious 03304a5d00 Coin pouch fixes 2024-07-10 20:59:33 +00:00
Licious 7240f76fb2 Merge branch 'properties_tera_and_elemental_type' into 'sega_bass_pro_fishing_2'
PokemonProperties Tera Type fixes and support for Elemental type.

See merge request cable-mc/cobblemon!1085
2024-07-10 20:52:14 +00:00
Licious 0f1efd2ef8 PokemonProperties Tera Type fixes and support for Elemental type. 2024-07-10 20:52:14 +00:00
Polymeta 46697cdda5 introduce is valid for conditions and ensure those are being checked when the spawn details are loaded, to prevent invalid configurations from crashing the server 2024-07-09 16:27:21 +01:00
Lily 43d4eacefc Merge branch 'poker-decks' into whatsy/poker-decks 2024-07-09 10:49:15 -04:00
Lily caa9ff5eba text now shows up when there's no drops available for a mon 2024-07-09 10:47:20 -04:00
Licious d9d2c660ce Add support for FishingBobberPredicate and CobblemonEntitySubPredicates, update pokerod loot table for the intended predicate usage. 2024-07-09 14:04:37 +01:00
Sterrezo 3f5286c0a9 Increased snap sound's asset volume 2024-07-09 00:10:29 +02:00
Sterrezo fedf2eb950 Decreased the scan's volume 2024-07-08 23:44:40 +02:00
Sterrezo 56b2951d88 Sound updates and fixes 2024-07-08 23:29:37 +02:00
Sterrezo 35d96d2eb7 A lot of sound updates to herbs and blocks 2024-07-08 13:35:36 +02:00
Licious 22ad2d9126 Move PokemonBattle.onEndHandlers invoke to fire from BattleRegistry.closeBattle. 2024-07-08 12:28:03 +01:00
Licious 3afefe3a59 Fix to recipe loading after cherry-pick, fix to pokerod loot table, fix PokeRodFishingBobberEntity invoking the vanilla fishing loot table instead of ours. 2024-07-08 12:19:24 +01:00
Sterrezo b6e6d9a151 Merge branch 'main' into sound 2024-07-08 11:35:44 +02:00
Licious 88ed6a055f Disable 'FISHING_JUNK' LootInjector entry as we don't have the table. 2024-07-08 09:27:21 +01:00
dhi_holoandLicious 380c88ee4c Recipes and Items
(cherry picked from commit 38d90da48c)
2024-07-08 09:23:11 +01:00
Licious 3242806275 Merge branch 'item-tweaks' into 'main'
Recipes and Items

See merge request cable-mc/cobblemon!1087
2024-07-08 07:39:28 +00:00
dhi_holoandLicious 38d90da48c Recipes and Items 2024-07-08 07:39:28 +00:00
JazzMcNade d01989343c Merge branch 'sega_bass_pro_fishing_2' into DoublesAreTheFuture 2024-07-07 14:08:17 -05:00
JazzMcNade fd40ec47ab 99% conflicts resolved 2024-07-07 14:07:22 -05:00
JazzMcNade eed218b994 Merge branch 'sega_bass_pro_fishing_2' into DoublesAreTheFuture 2024-07-07 04:22:06 -05:00
Licious 4ad419fe11 Removed logging of all s2c/c2s comm. 2024-07-07 09:55:53 +01:00
dhi_holoandLicious bcb0e18d42 Link Cable Recipe Change
Closes #916
Also fixed one issue with the changelog because I haven't touched the file since we shifted how we handled it slightly and my previous change was lumped in the wrong category during it.

(cherry picked from commit 99b7a119e0)
2024-07-07 09:54:12 +01:00
Licious b72726fd38 Merge branch 'crystal-cables' into 'main'
Link Cable Recipe Change

Closes #916

See merge request cable-mc/cobblemon!1086
2024-07-07 08:04:16 +00:00
dhi_holo 99b7a119e0 Link Cable Recipe Change
Closes #916
Also fixed one issue with the changelog because I haven't touched the file since we shifted how we handled it slightly and my previous change was lumped in the wrong category during it.
2024-07-07 17:54:59 +10:00
Paul 2bbfc1a7a7 Merge branch 'refs/heads/sega_bass_pro_fishing_2_mojmap_kinda' into sega_bass_pro_fishing_2 2024-07-07 13:15:55 +10:00
Paul 83f1d844f1 Expanded on NPC interact configurations 2024-07-07 13:15:25 +10:00
Apion 237e4901d1 Change forge paths to neo in CI 2024-07-07 00:27:54 +00:00
apion 915967facf Delete unused file 2024-07-06 20:14:56 -04:00
apion 3c3ef29965 Fixed mixin, removed unnecessary maven repo 2024-07-06 20:06:36 -04:00
apion 9a95992156 Merge branch 'refs/heads/sega_bass_pro_fishing_2_mojmap_kinda' into sega_bass_pro_fishing_2 2024-07-06 19:38:37 -04:00
apion da1dea9380 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2_mojmap_kinda' into sega_bass_pro_fishing_2_mojmap_kinda
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
2024-07-06 19:37:06 -04:00
apion a601199910 Merge conflicts 2024-07-06 19:35:31 -04:00
plastered_crab 2013f890a5 - no more transparent issues 2024-07-06 16:24:18 -07:00
apion 9e00551b33 Merge branch 'refs/heads/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2_mojmap_kinda
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/abilities/Ability.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/abilities/AbilityTemplate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/moves/BenchedMove.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/moves/Move.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveSet.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveTemplate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/EvolutionController.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/EvolutionProxy.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/progress/EvolutionProgress.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/stats/Stat.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/status/Status.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/BottomlessStore.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/party/PartyStore.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/pc/PCBox.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/types/ElementalType.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/types/tera/TeraType.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/battle/BattleSetTeamPokemonHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/storage/party/SetPartyPokemonHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/net/storage/pc/SetPCPokemonHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/layer/PokemonOnShoulderRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/group/CobblemonItemGroups.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/loot/LootInjector.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/PokemonDTO.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleSetTeamPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleUpdateTeamPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/data/DataRegistrySyncPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/storage/party/SetPartyPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/storage/pc/SetPCPokemonPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/trade/TradeUpdatedPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/ui/SummaryUIPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokeball/PokeBall.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Nature.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Species.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/activestate/PokemonState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/CobbledEvolutionProxy.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/controller/ClientEvolutionController.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/controller/ServerEvolutionController.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/progress/DamageTakenEvolutionProgress.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/progress/DefeatEvolutionProgress.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/progress/LastBattleCriticalHitsEvolutionProgress.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/progress/RecoilEvolutionProgress.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/progress/UseMoveEvolutionProgress.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/status/PersistentStatusContainer.kt
#	common/src/main/resources/cobblemon-common.accesswidener
2024-07-06 18:45:42 -04:00
Licious 48801e3b80 Fix cobblemon:healing_machine advancement and cobblemon:is_held_item tag. 2024-07-06 23:33:02 +01:00
Licious 7fe107296a Rename multiple data paths to modern standards, fixes a bunch of errors or lack of data powered vanilla features Cobblemon integration. 2024-07-06 23:17:08 +01:00
Apion ff553e1610 Merge branch 'pokemon-to-codec' into 'sega_bass_pro_fishing_2'
Pokemon Codec for both sides & s2c comm

See merge request cable-mc/cobblemon!1077
2024-07-06 19:34:42 +00:00
LiciousandApion a162efba11 Pokemon Codec for both sides & s2c comm 2024-07-06 19:34:42 +00:00
plastered_crab 42efbe5a07 - new sounds (again) 2024-07-05 17:10:04 -07:00
plastered_crab cf17f2f4ac - new sounds 2024-07-05 17:04:48 -07:00
Lily 301d1c377a fix drop percentage display showing decimals 2024-07-05 12:05:37 -04:00
Paul b855f3689b Fixed pose conditions not resolving properly, fixed generic bedrock entity spawn packet, NPC posable function corrections 2024-07-05 12:22:48 +10:00
plastered_crab df3d2f99d4 - test feature trimming of borders 2024-07-04 17:45:07 -07:00
Dani Voort 83c679cc4b Fix DataComponents for pokemon and bait on NeoForge 2024-07-05 01:26:36 +02:00
Dani Voort 6253471a6c Allow 'action' to be set on DialogueTextInput 2024-07-05 01:22:48 +02:00
Dani Voort 4b36631029 Fix entity dimensions transmitting in FormData 2024-07-05 01:22:39 +02:00
Lily 2c6229417f drop table fixes 2024-07-04 17:25:39 -04:00
Lily 94d18593a0 region selection and drops info tab 2024-07-04 16:48:47 -04:00
Lily b4b6606f39 work on region selection and viewing pokemon drops 2024-07-04 10:48:22 -04:00
plastered_crab a70c08f484 - hopefully this won't end badly 2024-07-04 00:11:01 -07:00
plastered_crab b19a5f637a - I broke everything.... put it back 2024-07-03 23:51:27 -07:00
plastered_crab 331551a614 - tweak to test feature 2024-07-03 23:33:56 -07:00
Licious f60f92f16f Merge branch 'remove_unused_loot_injection' into 'sega_bass_pro_fishing_2'
Remove the fishing junk loot injection.

See merge request cable-mc/cobblemon!1084
2024-07-04 00:07:21 +00:00
Licious 6cc90ccac8 Remove the fishing junk loot injection. 2024-07-03 21:03:17 +01:00
Licious c5a913d0f2 Missing lang entry for Terrain Seed tag. 2024-07-03 20:56:59 +01:00
Plastered_Crab 0897d3afb5 - the maps Todd Howards better now 2024-07-03 12:51:28 -07:00
Licious 0231010e0c Merge branch 'new_items_and_tag_fixes' into 'sega_bass_pro_fishing_2'
Add new items, update tag folder names for 1.21 convention

See merge request cable-mc/cobblemon!1082
2024-07-03 19:43:23 +00:00
Plastered_Crab a2be8c9fdd - maps interacting with decks starting to Todd Howard 2024-07-03 09:26:57 -07:00
plastered_crab 9f71d45eeb - new classes for a test feature 2024-07-03 08:03:35 -07:00
plastered_crab 910d42af16 - even MORE prep for the handoff for the Village people 2024-07-02 21:09:19 -07:00
plastered_crab 8af83a2cb9 - extra prep for big flashy features 2024-07-02 20:57:53 -07:00
Plastered_Crab 04c3a1cd0d - more important stuff 2024-07-02 20:39:44 -07:00
Plastered_Crab 6f5efa3d62 - more stuff for the new features 2024-07-02 16:02:10 -07:00
Plastered_Crab 32c7f178b5 Merge remote-tracking branch 'origin/poker-decks' into poker-decks 2024-07-02 13:08:52 -07:00
Plastered_Crab 4129f29da0 - lots of changes for a top-secret mysterious feature 2024-07-02 13:08:31 -07:00
Dani Voort 23c055751f Fix Pokéball rendering 2024-07-01 23:55:33 +02:00
Licious 11b7505fac Merge branch 'trade_friendship_fix' into 'sega_bass_pro_fishing_2'
Fix trading Pokemon setting friendship to 0 instead of base value

See merge request cable-mc/cobblemon!1083
2024-07-01 20:46:27 +00:00
Dani Voort f9d243dac7 Fix Neoforge runClient and runServer tasks not working 2024-07-01 22:28:34 +02:00
Licious d3b4a9b00b Fix trading Pokemon friendship values. 2024-07-01 21:22:21 +01:00
Dani Voort 92c42c2772 Port Fabric mixins to mojmaps 2024-07-01 20:31:03 +02:00
JazzMcNade e0b1fba99b Merge branch 'main' into 'ShowMeYourTrue(Hidden)Power'
# Conflicts:
#   CHANGELOG.md
2024-07-01 00:23:08 +00:00
Dani Voort 0436d7549d Update PokemonDTO to remove usage of Netty buffers to store data. 2024-06-30 19:50:03 +02:00
Dani Voort da5c3b7615 Various other (experimental) fixes 2024-06-30 19:05:40 +02:00
Dani Voort 857192e0e1 Execute registry sync packets on Neoforged on the network thread to block other packets & prevent data races 2024-06-30 19:04:15 +02:00
Dani Voort 8e0887c14f Fix a few things I broke during mapping 2024-06-30 19:02:53 +02:00
Dani Voort c409b143e9 Throw a more descriptive error if a species was not found in SpawnPokemonPacket 2024-06-30 19:01:26 +02:00
Dani Voort 19a94e565f Fix reading EntityDimensions 2024-06-30 19:00:46 +02:00
Dani Voort ed6534a561 Use proper TagKey codec in BiomePredicate 2024-06-30 19:00:36 +02:00
Dani Voort 6c6261f055 part 16: insanity. 2024-06-30 04:27:24 +02:00
JazzMcNade a2145b6bf7 Merge branch 'sega_bass_pro_fishing_2' into DoublesAreTheFuture 2024-06-29 21:12:35 -05:00
JazzMcNade e14c8b5264 Refactored los checking for interactions 2024-06-29 18:41:22 -05:00
Dani Voort bb97dbc1da part 15: the end is near 2024-06-30 01:38:23 +02:00
Dani Voort 27bcd18444 part 14: everything but client rendering & fabric 2024-06-30 00:37:34 +02:00
Dani Voort c0731e3b93 part 13: neoforce module seems OK - client to go. 2024-06-29 23:06:12 +02:00
Dani Voort 00f8184a60 part 12: util package code 2024-06-29 22:55:49 +02:00
Dani Voort aff9ffa67f part 11: "root" package code 2024-06-29 22:35:45 +02:00
Dani Voort 72291bdba5 part 10: world code 2024-06-29 22:17:01 +02:00
Dani Voort 4b90c4fd3a part 9: pokemon code 2024-06-29 21:53:25 +02:00
Dani Voort 33993cea1b part 8: networking code 2024-06-29 21:24:02 +02:00
Dani Voort f8f619494a part 7: items and commands done 2024-06-29 20:51:19 +02:00
Dani Voort d28ed0f2cc part 6: entities done (besides one issue in PokemonEntity) 2024-06-29 20:10:59 +02:00
Dani Voort 4f7b7182f9 part 5: blocks should be done 2024-06-29 17:09:52 +02:00
Paul aa7cf64ed2 More more more more more mappings swapping for Mojmaps 2024-06-29 21:28:05 +10:00
Paul 647f492fbc More more more more mappings swapping for Mojmaps 2024-06-29 20:53:42 +10:00
Paul c121028c22 More more more mappings swapping for Mojmaps 2024-06-29 11:15:37 +10:00
Paul 475a330071 More more mappings swapping for Mojmaps 2024-06-29 10:44:52 +10:00
Paul e9063cda2f More mappings swapping for Mojmaps 2024-06-29 10:28:46 +10:00
Dani Voort 171def5278 part 4: fix a braindead-refactor-moment 2024-06-29 02:03:11 +02:00
Dani Voort a8229cfb0c part 3: partially done blocks 2024-06-29 02:01:37 +02:00
Hiroku 155ff3dfed Merge branch 'feature/fix-property-extraction-nickname' into 'main'
fix PokemonProperties#asString prefixing nicknames with a '$'

See merge request cable-mc/cobblemon!1079
2024-06-28 23:59:23 +00:00
Dani Voort 2d13da63fb part 2: battles packages 2024-06-29 00:43:21 +02:00
Dani Voort 514feb60f9 part 1: advancement & api packages 2024-06-29 00:34:12 +02:00
Licious 5b3eeeabf8 Add new items, update tag folder names for 1.21 convention 2024-06-28 09:02:15 +01:00
JazzMcNade 22385421ef Lang fix for range messaging 2024-06-28 01:25:53 -05:00
Paul af678af2df Packet fixes, lan joins now work 2024-06-28 14:05:13 +10:00
Paulandapion 0db5292e44 Disable multi project optimization 2024-06-27 20:03:46 -04:00
Apion 257352c75d Merge branch 'held-item-manager-item-checker' into 'main'
Held item manager item checker

See merge request cable-mc/cobblemon!883
2024-06-27 23:14:34 +00:00
Polymeta 01a5ef46a5 fix PokemonProperties#asString prefixing nicknames with a '$' 2024-06-28 00:14:08 +01:00
JazzMcNade dc103d286b Interaction wheel no longer lies about where it is actually clickable 2024-06-26 20:58:31 -05:00
Lily 766a7e5595 filled in a ton of missing langs 2024-06-26 19:43:46 -04:00
Paul 9f75d842d8 Lil generic cleanup 2024-06-26 19:47:58 +10:00
Paul 636e938789 Broader applyEffects functionality, implemented cry function in dex 2024-06-26 19:28:25 +10:00
broccoli 5f380b824b begin moving to mojmap 2024-06-25 15:12:07 +01:00
Paul 5150a96944 Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2
# Conflicts:
#	.gitlab-ci.yml
2024-06-25 07:49:40 +10:00
Paul 26a4e9a7d8 Fixed misplaced \r in PokedexEntryProgress tripping up the license checker 2024-06-24 18:59:11 +10:00
Paul 6fd1e31c87 Fixed size display for dex 2024-06-24 18:41:00 +10:00
Paul 85a855be97 Licenses 2024-06-24 14:39:05 +10:00
Paul 4d108e424e Dex ported to 1.21 2024-06-24 14:37:34 +10:00
Paul b1333e490f Merge branch 'refs/heads/sega_bass_pro_fishing_2' into poker-decks
# 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/advancement/criterion/BattleCountableCriterion.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/gui/GuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonBakingOverrides.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/PokemonGuiUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/BattleOverlay.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/subscreen/BattleSwitchPokemonSelection.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/events/AdvancementHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleInitializePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/starter/SetClientPlayerDataPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/PlayerExtensions.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2024-06-24 11:20:24 +10:00
Village 9a57fc5d40 🃏 2024-06-23 20:08:32 -04:00
Paul ab987fba58 Merge branch 'refs/heads/main' into sega_bass_pro_fishing_2 2024-06-23 17:50:18 +10:00
Hiroku 3c2c706878 Update .gitlab-ci.yml file 2024-06-23 07:40:58 +00:00
Paul 78bce64df2 Fixed hisui pokedex data not migrated to new format stuff 2024-06-23 16:53:31 +10:00
Paul 8625c754cd Fixed crashing on server environments caused by SOMEONE who was messing with berry mulch 2024-06-23 15:36:47 +10:00
Paul 9ddd11205e Merge branch 'refs/heads/1.21' into sega_bass_pro_fishing_2 2024-06-22 17:17:18 +10:00
Paul 9ebd655909 Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/MagmarModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen2/MagbyModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen4/MagmortarModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen8/DreepyModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2024-06-22 17:07:03 +10:00
Paul 51e10bbb3f Licenses 2024-06-22 17:03:36 +10:00
Paul 7cd4c9856f Fixed Pokémon sendout effects not playing until you look at the Pokémon 2024-06-22 16:16:58 +10:00
Paul 8b2a20f542 Fixed particle effects not being visible (vertex order has changed) 2024-06-22 15:49:07 +10:00
Paul 8093bc510c Speculated changes for particle issues 2024-06-22 11:01:08 +10:00
Hiroku d06a371129 Merge branch 'shouldermon-sneaking-fix' into 'main'
Shouldermon Sneaking Edits

Closes #786

See merge request cable-mc/cobblemon!950
2024-06-21 23:59:43 +00:00
Hiroku eb55003d14 Merge branch 'crumbling-arch' into 'main'
i hate the crumbling arch

See merge request cable-mc/cobblemon!1057
2024-06-21 23:49:17 +00:00
Hiroku facb6b9910 Merge branch 'implement_pokemon' into 'main'
Some stuff

See merge request cable-mc/cobblemon!1063
2024-06-21 23:48:58 +00:00
Frank The FarmerandHiroku cf685ac098 Some stuff 2024-06-21 23:48:58 +00:00
Hiroku 0b2c5c0418 Merge branch 'tmetcalfe89/fix-testpartyslot-species-check' into 'main'
fixed comparison not using namespace in `b` of `a != b`

See merge request cable-mc/cobblemon!1071
2024-06-21 23:03:02 +00:00
Hiroku 3bfccdc0a5 Merge branch 'main' into 'main'
Relocate groups exported by GraalJS - Fix Crash on GraalVM

See merge request cable-mc/cobblemon!1074
2024-06-21 23:02:17 +00:00
Hiroku 6fd5904b12 Merge branch 'main' into 'main'
Add Lang for Apricorn Blocks

See merge request cable-mc/cobblemon!1075
2024-06-21 23:01:38 +00:00
Hiroku 8d942dc6e2 Merge branch 'tags/update' into 'main'
Updated all tags documentation

See merge request cable-mc/cobblemon!979
2024-06-21 22:40:44 +00:00
WaldleuferandHiroku a9a98b3810 Updated all tags documentation 2024-06-21 22:40:43 +00:00
Joseph T. McQuigg ee9baa8131 Add Lang for Apricorn Blocks 2024-06-21 13:20:40 -04:00
Paul 7bb8eb29cf Probable correction to some of the particle materials we probably don't even use 2024-06-21 22:19:42 +10:00
Paul 33c0897534 Fixed dialogue regressions from port, corrected potion effect TODOs 2024-06-21 21:52:13 +10:00
CanadianBacon 970aaee6c6 Relocate groups exported by GraalJS
org.graalvm -> com.cobblemon.mod.relocations.graalvm
com.oracle -> com.cobblemon.mod.relocations.oracle
2024-06-17 08:22:20 +02:00
Paul c83cfb2439 1.21 now boots on Fabric 2024-06-17 12:30:10 +10:00
Paul 995ffc165e Mostly ported to 1.21 2024-06-17 11:19:09 +10:00
Paul f548cd8570 Merge remote-tracking branch 'origin/1.20.5' into sega_bass_pro_fishing_2 2024-06-17 09:22:44 +10:00
Hiroku f6124d7474 Merge branch 'initiate_battle_while_recalling_bugfix' into 'main'
Fixes issue #872

Closes #872

See merge request cable-mc/cobblemon!1072
2024-06-16 08:07:16 +00:00
Notepadccino a0300ccd18 Update CHANGELOG.md 2024-06-16 08:05:22 +00:00
Nick 00543bdf91 I prefer rocks anyways 2024-06-15 19:55:36 -07:00
notepadccino 486056d7f0 Fixes issue #872 2024-06-14 16:52:12 +02:00
Paul 0f7dc57429 Mergo conflicto dispellus 2024-06-14 14:35:26 +10:00
Paul 2f0dd36214 Merge branch 'refs/heads/1.20.5' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
2024-06-14 14:25:17 +10:00
Hiroku 03ca6a4396 Merge branch 'tmetcalfe89/fix-energy-root-reviving' into 'main'
fixed energy root reviving

See merge request cable-mc/cobblemon!1065
2024-06-14 04:13:20 +00:00
Deltric bad5f0aad7 pokemon item 2024-06-13 23:01:16 -05:00
Paul 7223c6db5e More evo and move scroll corrections, started fixing up starter selection 2024-06-14 13:27:10 +10:00
Paul 1e5744ad87 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5 2024-06-14 13:09:21 +10:00
Paul b6ed67308a Fixed evo and move swap scrolls 2024-06-14 12:51:07 +10:00
apion 88808e8548 Changed gradle run configs to use a username matched to UUID 2024-06-13 22:26:53 -04:00
tmetcalfe89 691c52eed0 changelog 2024-06-13 19:05:02 -07:00
tmetcalfe89 a6765c0328 fixed comparison not using namespace in b of a != b 2024-06-13 19:01:08 -07:00
JazzMcNade 0e7b9bdd0c Refactoring getSendoutPosition 2024-06-13 20:02:30 -05:00
Hiroku b2d26abc4b Merge branch 'Fixes901' into 'main'
Fix For 901

Closes #901

See merge request cable-mc/cobblemon!1069
2024-06-14 00:32:08 +00:00
JazzMcNade 9c8ff24bf2 Enforcement of minimum spacing for pokemon entities during battle. 2024-06-12 01:20:22 -05:00
JazzMcNade 3738b035d1 Changed allowed ranges and range checking for most interactions 2024-06-11 20:15:45 -05:00
Hiroku 3f838a9d8a Merge branch 'nickname-render-fix' into '1.20.5'
Fix nickname styling affecting the rendering of the level label.

See merge request cable-mc/cobblemon!1070
2024-06-11 09:29:40 +00:00
Licious 8152f518f0 Fix nickname styling affecting the rendering of the level label. 2024-06-11 10:20:12 +01:00
JazzMcNade ebb677cc9c Don't read the current hp until you've fully calculated the max hp 2024-06-09 14:53:28 -05:00
Licious f181aabb3c Merge branch 'fix-898' into 'main'
Fix lack of side check when instancing Pokemon on PokemonEntity

Closes #898

See merge request cable-mc/cobblemon!1068
2024-06-09 17:43:34 +00:00
Licious 4df5e987c7 Fix lack of side check when instancing Pokemon on PokemonEntity 2024-06-09 17:43:33 +00:00
tmetcalfe89 3026e5c66f changelog 2024-06-09 10:39:43 -07:00
tmetcalfe89 f2310d8979 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into tmetcalfe89/fix-energy-root-reviving 2024-06-09 10:39:22 -07:00
Paul ceb5c0c7f5 Fixed many pasture block issues from the port 2024-06-09 21:39:37 +10:00
Paul 9fa0ddaeb7 Fixed battle overlay issue with pokemon tiles 2024-06-09 13:27:11 +10:00
Paul 4aa55c4174 Merge remote-tracking branch 'origin/1.20.5' into sega_bass_pro_fishing_2 2024-06-09 13:06:04 +10:00
apion 4ca8f2ef4d Fixed conditional loading of botany pots compat 2024-06-08 22:58:36 -04:00
Paul f821604018 Merge remote-tracking branch 'origin/1.20.5' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItemComponents.kt
#	common/src/main/resources/cobblemon-common.accesswidener
2024-06-09 12:44:52 +10:00
apion 47b5864975 Fixed Pokemon hitboxes not being set. 2024-06-08 22:43:20 -04:00
Paul 9996c06f69 Many more fixes for 1.20.6 2024-06-09 12:42:38 +10:00
Nick ede880344f Templating of new Item Components 2024-06-08 19:25:02 -07:00
Paul 5083c4e472 Merge remote-tracking branch 'origin/1.20.5' into sega_bass_pro_fishing_2 2024-06-09 12:11:04 +10:00
Paul a993cd9e81 License 2024-06-09 12:10:33 +10:00
Paul 045501fb50 Corrected many things for 1.20.6 2024-06-09 12:02:39 +10:00
apion e3b1b4ee34 Fixed pokemon nicknames not serializing 2024-06-08 21:42:01 -04:00
apion 363be6f2cb Fixed issue from merge 2024-06-08 21:19:29 -04:00
apion e60fd608bf Fix broken id and fixed AspectCriterion 2024-06-08 21:15:35 -04:00
apion 939e4eae6a Fixed all campfire and smoking recipes 2024-06-08 21:04:02 -04:00
apion efd633fbdf Fixed all blasting recipes 2024-06-08 20:58:34 -04:00
apion 20dd3e2a7f Fixed all smelting recipes 2024-06-08 20:56:15 -04:00
apion 33f0a619c1 Fix a BUNCH of stone cutter recipes 2024-06-08 20:52:05 -04:00
apion 4afdbbb13e Fix a BUNCH of recipes 2024-06-08 20:36:48 -04:00
apion 5597495f4e Fix some JSONs that were erroring 2024-06-08 20:25:19 -04:00
apion c63ea840ec Fix a bunch of advancements 2024-06-08 19:44:01 -04:00
Paul e3ca678cd8 Merge remote-tracking branch 'origin/1.20.5' into sega_bass_pro_fishing_2
# 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/api/molang/MoLangFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/net/serializers/StringSetDataSerializer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/dialogue/RenderableFace.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/particle/ParticleStorm.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/block/DisplayCaseRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen5/ConkeldurrModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen5/GolettModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen5/GolurkModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/generic/GenericBedrockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokeball/EmptyPokeBallEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/animation/PlayPosableAnimationPacket.kt
#	common/src/main/resources/cobblemon-common.accesswidener
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/client/CobblemonFabricClient.kt
#	gradle.properties
2024-06-09 09:43:40 +10:00
apion 3ba761df2b Fixed criteria registration 2024-06-08 19:32:54 -04:00
Nick 03fb363420 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5 2024-06-08 16:09:14 -07:00
Nick 24315154fc Fix a merge conflict for fossil multiblock structure 2024-06-08 16:09:00 -07:00
apion 731b904a42 Fixed LootInjector 2024-06-08 18:58:14 -04:00
Nick bb4c3d8a48 Fix libs.versions.toml 2024-06-08 15:56:17 -07:00
Nick 9dc851d052 Add an image to our buildscript 2024-06-08 15:54:57 -07:00
Nick fc06b04e47 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/spawning/condition/SpawningCondition.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BerryBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BindingSoilBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/RestorationTankBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/chest/GildedChestBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/GildedChestBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/RestorationTankBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/multiblock/FossilMultiblockStructure.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/SpawnPokemonFromPool.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/adorn/AdornCompatibility.kt
#	fabric/src/main/java/com/cobblemon/mod/fabric/mixin/GuiMixin.java
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	gradle/build-logic/src/main/kotlin/cobblemon.base-conventions.gradle.kts
#	gradle/wrapper/gradle-wrapper.properties
#	neoforge/build.gradle.kts
#	neoforge/src/main/kotlin/com/cobblemon/mod/neoforge/CobblemonNeoForge.kt
2024-06-08 15:52:31 -07:00
Nick ac5f9ac3c5 Sync with main, to the best of our abilities. Fixes some primary blurring on common menus 2024-06-08 15:50:32 -07:00
apion 31323eb53e Fix some issues from the main merge and a StackOverflow in PasturePokemonScrollList 2024-06-08 18:28:46 -04:00
JazzMcNade 7a97b7e92a Added the ability to empty a move slot (forget a move) on the move swap screen 2024-06-08 17:28:09 -05:00
apion ef01482a3d Fixed some serialization issues 2024-06-08 17:59:58 -04:00
Hiroku 65971386f2 Merge branch 'Myslippy-main-patch-82434' into 'main'
Update CHANGELOG.md

See merge request cable-mc/cobblemon!1062
2024-06-08 21:27:17 +00:00
Hiroku 19b5dc7024 Merge branch '1.20.5-with-main-stuff' into '1.20.5'
But what if we brought main into 1.20.5

See merge request cable-mc/cobblemon!1066
2024-06-08 21:26:30 +00:00
apion 8fa4f7b5c2 Fixed build 2024-06-08 17:16:42 -04:00
Paul 81498888bd Some corrections 2024-06-08 20:00:16 +10:00
Paul c1c9f8e235 Fix some project config stuff 2024-06-08 18:38:09 +10:00
Paul 4dac02d68c Merge remote-tracking branch 'origin/1.20.5' into 1.20.5
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	gradle/libs.versions.yml
#	neoforge/build.gradle.kts
2024-06-08 16:42:47 +10:00
Paul d631e89645 Merge remote-tracking branch 'origin/main' into 1.20.5
# Conflicts:
#	common/build.gradle.kts
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/multiblock/MultiblockBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BerryBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/RestorationTankBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/chest/GildedChestBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/GildedChestBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/RestorationTankBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/multiblock/FossilMultiblockStructure.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/particle/ParticleStorm.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/SpawnPokemonFromPool.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/adorn/AdornCompatibility.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/jei/berry/BerryMutationProvider.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/jei/berry/BerryMutationRecipe.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/variants/ItemInteractionEvolution.kt
#	fabric/build.gradle.kts
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	gradle.properties
#	gradle/build-logic/src/main/kotlin/cobblemon.base-conventions.gradle.kts
#	gradle/libs.versions.yml
#	gradle/wrapper/gradle-wrapper.properties
#	neoforge/build.gradle.kts
#	neoforge/src/main/kotlin/com/cobblemon/mod/neoforge/CobblemonNeoForge.kt
#	settings.gradle.kts
2024-06-08 16:41:34 +10:00
Nick 384724a906 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	gradle/libs.versions.yml
#	neoforge/build.gradle.kts
2024-06-07 23:24:06 -07:00
apion 245683832b Added the idea of UnsplittablePackets 2024-06-08 02:02:27 -04:00
Nick 639417d6c8 Merge remote-tracking branch 'refs/remotes/origin/main' into 1.20.5
# Conflicts:
#	common/build.gradle.kts
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/multiblock/MultiblockBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/BerryBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/RestorationTankBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/chest/GildedChestBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/GildedChestBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/RestorationTankBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/multiblock/FossilMultiblockStructure.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/particle/ParticleStorm.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/SpawnPokemonFromPool.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/adorn/AdornCompatibility.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/jei/berry/BerryMutationProvider.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/integration/jei/berry/BerryMutationRecipe.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/evolution/variants/ItemInteractionEvolution.kt
#	fabric/build.gradle.kts
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/CobblemonFabric.kt
#	gradle.properties
#	gradle/build-logic/src/main/kotlin/cobblemon.base-conventions.gradle.kts
#	gradle/libs.versions.yml
#	gradle/wrapper/gradle-wrapper.properties
#	neoforge/build.gradle.kts
#	neoforge/src/main/kotlin/com/cobblemon/mod/neoforge/CobblemonNeoForge.kt
#	settings.gradle.kts
2024-06-07 22:44:45 -07:00
apion 6f7e3cf594 Neoforge now boots to menu 2024-06-08 00:35:05 -04:00
apion 9570ce45ef Fix a bunch of NeoForge issues, also moved ItemComponents and Advancement Critera to PlatformRegistries 2024-06-08 00:18:20 -04:00
apion 2cda836703 Move all deps to 1.20.6 2024-06-07 22:25:25 -04:00
apion 5fd36954e0 Use codecs where we should be using codecs 2024-06-07 22:01:29 -04:00
apion 53c3808203 Removed more pokecenter files and fixed BrewingRecipeRegistryMixin 2024-06-07 21:42:40 -04:00
Paul a5be2a1761 Fix missing datatracker init 2024-06-08 11:40:23 +10:00
apion 6768a9f528 Remove broken structures, and block state prop on TumblestoneBlock 2024-06-07 21:27:42 -04:00
Paul c97ceef6f8 Migrated heaps of packets over to RegistryByteBuf, 1.20.5 vers now compiles 2024-06-08 11:00:07 +10:00
Paul f59e3b53a1 Reworked packet rego for fabric and neo 2024-06-08 10:15:23 +10:00
tmetcalfe89 5b52fe5479 fixed energy root reviving 2024-06-07 08:08:19 -07:00
apion 2acac11997 Split up network managing tasks into payload registry and handler registry. Needs cleanup, and need to figure out where some of these methods actually need to be called. Also I only really worked on Fabric ATM 2024-06-07 00:52:44 -04:00
Paul 56223cbd36 Fabric client packet stuff 2 2024-06-07 14:07:53 +10:00
Deltric 985c68e266 read enum set 2024-06-06 22:38:56 -05:00
Paul 4e69d70331 Fabric client packet stuff 2024-06-07 13:25:12 +10:00
Paul b7892c3510 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5 2024-06-07 12:36:14 +10:00
Paul ed246384d7 Various packet fixes 10 2024-06-07 12:36:04 +10:00
Deltric 106eee622c widen access 2024-06-06 21:33:27 -05:00
Paul 2bfe51d82b Various packet fixes 9 2024-06-07 12:24:56 +10:00
Deltric 8036dcb0c3 couple more packets 2024-06-06 21:23:47 -05:00
apion c6642ec707 More 1.20.5 2024-06-06 22:23:39 -04:00
Paul 5e60446f3c Various packet fixes 8 2024-06-07 12:20:49 +10:00
Deltric fe6be77a30 couple more packets 2024-06-06 21:19:49 -05:00
apion f73b3b22b6 More 1.20.5 2024-06-06 22:15:54 -04:00
Deltric 6e801caa19 couple more packets 2024-06-06 21:14:44 -05:00
Paul bca3903fc7 Various packet fixes 7 2024-06-07 12:14:22 +10:00
Paul e70234e5a9 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5 2024-06-07 12:12:25 +10:00
Paul 88f9094bbe Various packet fixes 6 2024-06-07 12:12:10 +10:00
apion e5dd56d9fa More 1.20.5 2024-06-06 22:09:54 -04:00
Paul 793862e834 Various packet fixes 5 2024-06-07 12:08:26 +10:00
apion 75dd1cc9f9 More 1.20.5 2024-06-06 22:07:48 -04:00
Deltric c90f80c16e couple changes 2024-06-06 21:05:20 -05:00
apion 02fda8ab7c More 1.20.5 2024-06-06 22:03:25 -04:00
Paul df1924f751 Various packet fixes 4 2024-06-07 12:00:44 +10:00
apion 059b8bb251 Merge remote-tracking branch 'origin/1.20.5' into 1.20.5 2024-06-06 21:55:35 -04:00
apion b72be56330 More 1.20.5 2024-06-06 21:55:28 -04:00
Deltric 74db2cddaf updated species imports 2024-06-06 20:55:06 -05:00
Paul 7551c40c2b Various packet fixes 3 2024-06-07 11:53:22 +10:00
Deltric 383f254652 possible component implementation for pokemon item 2024-06-06 20:50:18 -05:00
apion 41f2ec0585 More 1.20.5 2024-06-06 21:48:48 -04:00
Paul addf2332bc Various packet fixes 2 2024-06-07 11:48:14 +10:00
Paul 8ff891749a Various packet fixes 2024-06-07 11:42:34 +10:00
apion 8d3bdf7e4c More 1.20.5 2024-06-06 21:42:04 -04:00
Paul 8018e4079c writeUuid readUuid writePartyPosition readPartyPosition writePCPosition readPartyPosition 2024-06-07 11:35:48 +10:00
apion d9bcd2139a More 1.20.5 2024-06-06 21:31:02 -04:00
Paul 38394794db readText writeText readEntityDimensions 2024-06-07 11:27:43 +10:00
apion bfba3b248f More 1.20.5 2024-06-06 21:24:07 -04:00
Paul c41485c265 writeMap readMap 2024-06-07 11:23:19 +10:00
apion a4273f61e6 More 1.20.5 2024-06-06 21:16:22 -04:00
apion 1c5f2a4533 More 1.20.5 2024-06-06 20:41:23 -04:00
Apion 1e7fa34c44 Merge branch 'no-entity-rendering' into 'sega_bass_pro_fishing_2'
Major refactor of animation system

See merge request cable-mc/cobblemon!1055
2024-06-06 11:22:07 +00:00
HirokuandApion 58e82f1bf6 Major refactor of animation system 2024-06-06 11:22:06 +00:00
Hiroku 13ca5871cb Merge branch 'corals_restoration_tank_bugfix' into 'main'
Fix issue #892

Closes #892

See merge request cable-mc/cobblemon!1064
2024-06-05 21:48:10 +00:00
notepadccino 54ba99a002 Fix issue #892
The #minecraft:corals tag seems to apply to blocks, not to items. For items you'd either need to trace back the tags of whichever block is placed by the item, or just specify the items one by one. I went with the simpler option, but if needed the former solution can always be implemented.
2024-06-05 19:11:08 +02:00
JPAKx4 2ac91b0731 Added data for pokedex and classes that process that data. Utility Scripts also contains two scripts used for generating data. Data not final. 2024-06-04 20:36:24 -05:00
JazzMcNade c689f7c48e Merge branch 'main' into TheSketchySmeargle 2024-06-04 00:24:20 -05:00
JazzMcNade 12592f437e Fixed bug with clients not receiving power point updates post battle for Sketch acquired moves on Smeargle 2024-06-04 00:23:01 -05:00
apion bd0618840a More 1.20.5 2024-06-04 00:14:11 -04:00
Myslippy b40f47b00d Update CHANGELOG.md 2024-06-03 03:00:34 +00:00
Hiroku 800d348611 Merge branch 'mushroom_restoration_fabric_fix' into 'main'
Fix #890

Closes #890

See merge request cable-mc/cobblemon!1059
2024-06-03 00:04:49 +00:00
Hiroku d4dd48b3ff Merge branch 'implement_pokemon' into 'main'
5 new cries + bugfix

See merge request cable-mc/cobblemon!1061
2024-06-02 23:31:48 +00:00
Sterrezo 89d6bb2356 Merge branch 'main' into implement_pokemon 2024-06-02 21:48:03 +02:00
JazzMcNade f315240e4a Updated Changelog, grammar correction 2024-06-02 13:54:06 -05:00
JazzMcNade 212b6a34b4 More DRY refactor of calculating Hidden Power. Added comments. 2024-06-02 13:42:54 -05:00
notepadccino 3a65425015 Fix mushroom tag issue
the #minecraft:mushrooms tag is a forge thing, it doesn't exist in fabric.
However I've tested out corals as well and they don't work either which is odd, since they should have a #minecraft:corals tag
2024-06-02 18:21:47 +02:00
JazzMcNade 22565a0ed5 Fixed a bug with recognizing that a pair of players already have an existing challenge 2024-06-01 21:11:26 -05:00
JazzMcNade e9085a3339 Added lang key for multibattles in the interact gui 2024-06-01 20:11:52 -05:00
mia 2454edcaa4 cleanup 2024-06-01 19:30:22 -04:00
mia 9357686f7a fixes #786, adjust offsets 2024-06-01 19:08:35 -04:00
JazzMcNade 5d32d043a1 Refactored getSendoutPosition(), adjusted singles sendout positions 2024-06-01 16:10:30 -05:00
JazzMcNade df7a1a3f98 Merge branch 'main' into ShowMeYourTrue(Hidden)Power 2024-06-01 15:35:36 -05:00
JazzMcNade 3136da53f8 Added hiddenpower actioneffect placeholder that stops it from appearing like a water attack 2024-06-01 14:37:32 -05:00
JazzMcNade 1028ba07af Pokemon in single battles are sent out a bit to the side for better viewing 2024-06-01 13:19:54 -05:00
Apion fad10da89f Merge branch 'forcespawn_cmd_fix' into 'main'
Fixes #877

Closes #877

See merge request cable-mc/cobblemon!1056
2024-06-01 15:19:06 +00:00
Slippy 928dfcdadf i hate the crumbling arch 2024-06-01 08:47:58 -05:00
notepadccino 055ce8168c Fixes #877 2024-06-01 15:42:21 +02:00
JazzMcNade f6008cc434 Refactoring, Added type logic for "pixilate" like abilities and normalize 2024-06-01 03:09:14 -05:00
Plastered_Crab 5e74af8a9e - changes to try to stop instance of casting sound depending on scenario 2024-05-31 20:52:13 -07:00
Hiroku e4da05fd50 we are snapshotting thx 2024-06-01 00:24:30 +00:00
Paul c1d97444ac Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/spawning/BestSpawner.kt
2024-06-01 09:42:00 +10:00
Paul 3a17a88ea2 Changelog stuff [skip-ci] 2024-06-01 09:38:50 +10:00
Hiroku 09abf30421 Merge branch 'no-middle-stage-ha-fix' into 'main'
Hidden Ability slot for cocoons.

See merge request cable-mc/cobblemon!1020
2024-05-31 23:38:18 +00:00
Hiroku 06ea4b4cec Merge branch 'berry-changes' into 'main'
Berry changes

See merge request cable-mc/cobblemon!1030
2024-05-31 23:35:59 +00:00
Hiroku 8799308800 Merge branch 'Frank's-Coding-Farm' into 'main'
Enabled Seafloor spawns & Disabled spawning in slabs

See merge request cable-mc/cobblemon!1040
2024-05-31 23:35:24 +00:00
Frank The FarmerandHiroku d727fde5b3 Enabled Seafloor spawns & Disabled spawning in slabs 2024-05-31 23:35:24 +00:00
Hiroku ce5e93b552 Merge branch 'main' into 'main'
Fixes #878

Closes #878

See merge request cable-mc/cobblemon!1052
2024-05-31 23:34:39 +00:00
Hiroku 77c0138c09 Merge branch 'get-sticked' into 'main'
Leeks are Sticks (visually)

See merge request cable-mc/cobblemon!1054
2024-05-31 23:34:25 +00:00
Sterrezo 0ded29dcad Added cries to Timburr and Golett lines. Updated the changelog with a recent Cubone sound fix. 2024-05-31 14:06:02 +02:00
Sterrezo 62fae979eb Merge branch 'main' into implement_pokemon 2024-05-31 13:40:42 +02:00
JazzMcNade 09e5dc19cf Hidden Power's move tile now shows its effective typing 2024-05-31 00:55:06 -05:00
dhi_holo dc727fe56d Leeks are Sticks (visually)
Medicinal and Roasted Leeks now reference a new display setting, making them held like sticks/rods.

That's it, that's the entire change, it's a small parity thing, this is what I like doing, okay.
2024-05-31 10:19:06 +10:00
Plastered_Crab ca8243c13b - added new field to SoundManager mixin to allow for sounds to be stopped and casting sounds get stopped when bobber hits surface or casting is cancelled 2024-05-30 15:38:31 -07:00
Plastered_Crab 0386650acb - adjusted pokerod sounds 2024-05-30 13:17:26 -07:00
Plastered_Crab 44f719ee16 - added in new rod sounds and water sounds 2024-05-29 21:29:56 -07:00
Apion 4db36ef6fa Merge branch 'tmetcalfe89/abstract-shedding' into 'main'
abstracted shedinja logic for datapackability

See merge request cable-mc/cobblemon!1014
2024-05-30 04:02:21 +00:00
Timothy MetcalfeandApion e350d920b5 abstracted shedinja logic for datapackability 2024-05-30 04:02:21 +00:00
tmetcalfe89 4b89699e3e refactored to add points to feature instead of species 2024-05-29 20:30:42 -07:00
Apion 2a0ae1a466 Merge branch 'tumbled-bricks' into 'main'
Tumbled Blocks and Bricks

See merge request cable-mc/cobblemon!1051
2024-05-30 02:58:57 +00:00
dhi_holoandApion 3b8f7f23a3 Tumbled Blocks and Bricks 2024-05-30 02:58:57 +00:00
apion 72cf161f0d Merge branch 'refs/heads/main' into berry-changes
# Conflicts:
#	CHANGELOG.md
2024-05-29 22:24:12 -04:00
tmetcalfe89 cbace71fb1 merged main in 2024-05-29 19:07:29 -07:00
apion fe3d8d3185 Changed CHANGELOG.md merge strategy 2024-05-29 22:06:53 -04:00
apion d04ed7a519 Add empty headers to CHANGELOG.md 2024-05-29 21:51:57 -04:00
Apion e6e9137cb5 Merge branch 'AmauraFetusClippingFix' into 'main'
Amaura fetus clipping fix

Closes #873

See merge request cable-mc/cobblemon!1053
2024-05-30 00:49:20 +00:00
JazzMcNade 86bd2240c3 Compacted Battle portraits 2024-05-29 19:14:05 -05:00
Plastered_Crab 1414face03 Merge branch 'main' into sega_bass_pro_fishing_2
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/api/moves/animations/ActionEffectTimeline.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/stats/Stats.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/particle/ParticleStorm.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/JsonPokemonPoseableModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	gradle.properties
2024-05-28 20:45:48 -07:00
Plastered_Crab b5f131d525 - updated fishing baits, fixed shiny bait effect to use config, and fixed Bobber renderer to not have naughty variables 2024-05-28 15:38:26 -07:00
JazzMcNade 78f25b3f8b Corrected typo in changelog 2024-05-28 17:25:08 -05:00
JazzMcNade 631293e0cd UpdatedChangelog 2024-05-28 17:10:20 -05:00
JazzMcNade 2865b8140a Scaled down Amaura's fetus model to avoid clipping through the tank while animating 2024-05-28 17:07:46 -05:00
JazzMcNade 27b276fc36 Moves learned via Sketch now persist post battle 2024-05-28 16:17:12 -05:00
notepadccino be34bc4c74 Fixes #878 2024-05-28 19:12:21 +02:00
Sterrezo bae26162dd Update cubone.animation.json 2024-05-28 12:09:35 +02:00
JazzMcNade 8fdb551fe8 Merge branch 'main' into DoublesAreTheFuture 2024-05-27 01:45:17 -05:00
Paul df8f078d13 Fixed Wooloo Dubwool issues and fixed sync issues with Gimmighoul 2024-05-27 15:39:21 +10:00
Paul 309b223da9 Changelog update 4 [skip-ci] 2024-05-27 11:53:03 +10:00
Paul 75f688fa30 Changelog update 3 [skip-ci] 2024-05-27 11:48:22 +10:00
Paul d7fadd58ed Changelog update 2 [skip-ci] 2024-05-27 11:42:56 +10:00
Paul 996c7189b6 Changelog update [skip-ci] 2024-05-27 11:31:38 +10:00
Paul e1d5f07aed Fixed root part animations on JSON posers, clean up changelog, no snapshot, remove bubblebeam effect for now 2024-05-27 11:14:05 +10:00
Paul 6afe77ef0c Fixed confusion particle timing 2024-05-27 10:23:00 +10:00
Hiroku bf54f28b58 Merge branch 'move-effects' into 'main'
A bunch of particles, now with sound!

See merge request cable-mc/cobblemon!1049
2024-05-27 00:08:36 +00:00
Paul aac10e967f Reverted protect change to camera mode 2024-05-27 10:06:39 +10:00
Sterrezo 0cd9da80d7 Update sounds.json 2024-05-27 02:06:27 +02:00
Sterrezo d33f1150d2 Adjusted assets for powder moves, protect, swords dance and thunder wave. Rebalanced volumes of all moves. 2024-05-27 01:39:41 +02:00
Hiroku 216ed85da1 Merge branch 'IllusionThrownPokeballRevealFix' into 'main'
IllusionThrownPokeballRevealFix

See merge request cable-mc/cobblemon!1046
2024-05-26 23:35:07 +00:00
Sterrezo 0f3104f9d4 Merge branch 'main' into sound 2024-05-27 01:33:14 +02:00
Paul 4b70b20ab7 Fixed using confusion breaking battles lol 2024-05-27 09:26:40 +10:00
Segfault Guy 125e193b81 Broadcast messages with CLIENT species on pokeball hit. 2024-05-26 19:17:16 -04:00
Paul 1ebd249351 Fixed sleeppowder effect, added redundancy to action effects in case they run into an exception 2024-05-27 09:08:22 +10:00
Segfault Guy 74727cda48 Merge branch 'main' into IllusionThrownPokeballRevealFix 2024-05-26 18:47:53 -04:00
Paul 6a8a2489d1 Fixed structure reference to cave_support not working 2024-05-27 08:27:59 +10:00
Paul 3524931596 Fixed dyeable Pokemon not being dyeable away from white unless spawned via command, fixed creative mode players still losing the dye 2024-05-27 07:06:57 +10:00
Paul 43d9347c9c Updated zh and es_es translations 2024-05-27 06:47:56 +10:00
Tyzillion 60303504cd Changelog update. 2024-05-26 11:52:30 -04:00
Tyzillion 63db0066d3 more sounds! 2024-05-26 11:49:50 -04:00
apion 6e0270ac80 Fully moved mulch into block entity 2024-05-26 11:31:21 -04:00
apion 30070d35f6 Fully moved mulch into block entity 2024-05-26 11:23:47 -04:00
apion 8e3435479a Start trying to move mulch into block entity 2024-05-26 09:39:57 -04:00
Tyzillion 333e1fe9ae Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects 2024-05-26 09:35:42 -04:00
Tyzillion c0c8c103f4 Updated changelog 2024-05-26 09:11:47 -04:00
Tyzillion a414784cca Added sounds to sand attack and the spore mushrooms, implemented confusion cuz I forgot to last night. 2024-05-26 09:10:41 -04:00
Apion b4b01ef0b6 Merge branch 'sound' into 'main'
Updated all generic impact assets

See merge request cable-mc/cobblemon!1048
2024-05-26 12:45:16 +00:00
SterrezoandApion 04f725d72e Updated all generic impact assets 2024-05-26 12:45:16 +00:00
Sterrezo 21a32bd459 Updated all generic impact assets
Increased the volume of all generic impact sounds. Audio assets have been updated to have a 0.2ms delay to account for ogg file compression cutting the initial start of the sound, making the attack have less impact.
2024-05-26 14:25:34 +02:00
Hiroku 0257f591de Merge branch 'implement_pokemon' into 'main'
Shedinja T Pose & Little guys sliding

See merge request cable-mc/cobblemon!1047
2024-05-26 11:40:35 +00:00
Frank The FarmerandHiroku dfeeed8796 Shedinja T Pose & Little guys sliding 2024-05-26 11:40:35 +00:00
Paul 0e304a81e8 Changelog, deleted unneeded caves template pool, licenses 2024-05-26 21:33:57 +10:00
Hiroku 03acc21af1 Merge branch 'move-effects' into 'main'
Implemented Action Effects

Closes #814, #773, #840, and #841

See merge request cable-mc/cobblemon!1045
2024-05-26 11:31:20 +00:00
Hiroku 2233e6903b Merge branch '1.5-structure-fixes' into 'main'
added loot to the trapped chest in unstable caves so you can't tell which one...

See merge request cable-mc/cobblemon!1042
2024-05-26 11:25:36 +00:00
Hiroku ac281faa3b Merge branch 'main' into 'move-effects'
# Conflicts:
#   CHANGELOG.md
2024-05-26 11:07:24 +00:00
FrankTheFarmer ad7a881fdc Changelog 2024-05-26 20:20:36 +10:00
FrankTheFarmer f9a2b5cc9c Fixed Budew and Lechonk sliding if they walked for too long 2024-05-26 20:17:47 +10:00
FrankTheFarmer e2cc006c7c Fixed Shedinja T posing in battle 2024-05-26 20:17:20 +10:00
FrankTheFarmer 13240d28ea Merge branch 'main' into implement_pokemon 2024-05-26 20:00:04 +10:00
JazzMcNade 6891272516 Throwing a ball at a player owned pokemon no longer reveals Illusion 2024-05-26 03:02:49 -05:00
tmetcalfe89 9fc492d985 merged main 2024-05-25 22:08:24 -07:00
Tyzillion f9a37791b7 Evolution can now be canceled when withdrawn during evolution animation. 2024-05-26 00:17:22 -04:00
Hiroku eba784071a Merge branch 'Primary-Quirks-for-JSON' into 'main'
Primary quirks for json

See merge request cable-mc/cobblemon!1044
2024-05-26 04:10:33 +00:00
Hiroku a4435af9c0 Merge branch 'GildedChestLockAnimFix' into 'main'
GildedChestLockAnimFix

Closes #811

See merge request cable-mc/cobblemon!1043
2024-05-26 04:08:22 +00:00
Tyzillion fb6e9f3493 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/PokemonClientDelegate.kt
2024-05-26 00:04:59 -04:00
JazzMcNade 4b0b0f813e Merge branch 'main' into GildedChestLockAnimFix 2024-05-25 22:59:01 -05:00
JazzMcNade c32da0825c Updated Changelog 2024-05-25 22:47:39 -05:00
Tyzillion 803703b6a6 Updated changelog 2024-05-25 23:43:50 -04:00
Tyzillion 668914275e Added sounds to all the powder attacks. Tweaks and fixes. 2024-05-25 23:42:02 -04:00
FrankTheFarmer af90ff6733 Added excludedLabels 2024-05-26 13:07:16 +10:00
FrankTheFarmer c657c2ea68 CHANGELOG with example. 2024-05-26 11:27:58 +10:00
FrankTheFarmer 2f567830d4 Temporary function for bedrock quirks intended for 1.5.1 2024-05-26 11:07:14 +10:00
Tyzillion 569f3c624e Implemented Cotton guard. 2024-05-25 20:38:31 -04:00
Tyzillion f30be418f9 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects
# Conflicts:
#	CHANGELOG.md
2024-05-25 20:38:13 -04:00
JazzMcNade b851fa0d5f Merge branch 'main' into DoublesAreTheFuture 2024-05-25 19:35:26 -05:00
Tyzillion 2c50dc2d0c Implemented Ember, Powder moves, and updated other particles. Implemented Infatuation 2024-05-25 20:34:07 -04:00
Hiroku dde2e9f52a Merge branch 'fix/form-sync' into 'main'
Form Sync on Form Change Fix

See merge request cable-mc/cobblemon!1041
2024-05-26 00:02:40 +00:00
NickandHiroku 50a21d91e8 Form Sync on Form Change Fix 2024-05-26 00:02:40 +00:00
Tyzillion 58f3de13fa Implemented Ember, Powder moves, and updated other particles. 2024-05-25 13:55:44 -04:00
Tyzillion 8d67a3a909 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects
# Conflicts:
#	CHANGELOG.md
2024-05-25 10:54:51 -04:00
JazzMcNade ad4cb8a290 Gilded Chest no longer animates to the open state on the client when the client fails to open a locked chest 2024-05-24 21:30:54 -05:00
Hiroku d9e5de5f97 Fixed pluralize usage for pose conditions 2024-05-24 22:35:48 +00:00
Hiroku e4a47af06d Merge branch 'sendout-bug' into 'main'
Fixed tiny bug, fixes #867

Closes #867

See merge request cable-mc/cobblemon!1037
2024-05-24 22:03:50 +00:00
Apion cc741c0478 Merge branch 'remulched' into 'main'
Cheap Mulch!

See merge request cable-mc/cobblemon!1039
2024-05-24 12:28:03 +00:00
dhi_holo 6887887d6b Cheap Mulch!
Made Mulch cheaper, as outlined by #866
2024-05-24 20:28:45 +10:00
Hiroku cf1100a20e Merge branch 'implement_pokemon' into 'main'
Wailord, Seedot line, and apostrophes in the changelog

See merge request cable-mc/cobblemon!1038
2024-05-24 09:46:27 +00:00
Frank The FarmerandHiroku ebc7b97e4f Wailord, Seedot line, and apostrophes in the changelog 2024-05-24 09:46:26 +00:00
FrankTheFarmer 5324b7b19e Merge branch 'main' into implement_pokemon
# Conflicts:
#	CHANGELOG.md
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen3/WailordModel.kt
2024-05-24 19:37:33 +10:00
FrankTheFarmer 5bddc31cbf Seedot line hitbox fixes 2024-05-24 19:30:11 +10:00
apion d65ce9222a Fixed tiny bug, fixes #867 2024-05-24 05:04:36 -04:00
FrankTheFarmer 72bc2221af Actually stopped Wailord in the chatbox for real this time 2024-05-24 18:56:27 +10:00
Apion 706221aead Merge branch 'LangFixes' into 'main'
A Couple of Lang Fixes

See merge request cable-mc/cobblemon!1035
2024-05-24 08:15:24 +00:00
Apion 26bfca893b Merge branch 'main' into 'LangFixes'
# Conflicts:
#   CHANGELOG.md
2024-05-24 07:01:46 +00:00
JazzMcNade 5f65f3c20c Updated Changelog 2024-05-24 01:47:23 -05:00
JazzMcNade 1e5239da10 Added English language keys for Rough Skin and Iron Barbs 2024-05-24 01:26:30 -05:00
JazzMcNade 7d8ec3470b Fix for Hyper Cutter / Big Pecks incorrectly stating they prevented accuracy from being lowered 2024-05-24 01:25:58 -05:00
Apion 389d2a0adc Merge branch '1.5-fixes-112313' into 'main'
1.5 fixes 112313

See merge request cable-mc/cobblemon!1034
2024-05-24 04:45:10 +00:00
apion 37433aa0c5 CHANGELOG.md 2024-05-24 00:34:04 -04:00
Paul 7fa0022095 Fixed species sync failing when madmen give pokemon more than 255 level up moves on the same level 2024-05-24 14:21:03 +10:00
Paul 9fde7a7618 Merge remote-tracking branch 'origin/main' into 1.5-fixes-112313 2024-05-24 14:18:04 +10:00
Paul 6c1f7ddd70 Putted the AttackDefenceRatioRequirement back for backcompat 2024-05-24 14:15:45 +10:00
apion 1a1cedb3aa Regenned berry data, added bone meal chance 2024-05-23 23:53:42 -04:00
Hiroku 241b83cec9 Merge branch 'implement_pokemon' into 'main'
Implementation Stuff

See merge request cable-mc/cobblemon!1027
2024-05-23 21:57:39 +00:00
Frank The FarmerandHiroku f0feb81a16 Implementation Stuff 2024-05-23 21:57:38 +00:00
apion b82287f258 Vera berry changes 2024-05-23 09:02:24 -04:00
FrankTheFarmer 9099cb4b5d Merge branch 'main' into implement_pokemon 2024-05-23 22:37:47 +10:00
FrankTheFarmer 99e0b7d995 Smeargle Mentioned 2024-05-23 22:34:58 +10:00
Hiroku 00f4052b75 Merge branch 'MoreFossilMachineFixes' into 'main'
Many Fossil Machine Fixes

See merge request cable-mc/cobblemon!1033
2024-05-23 11:02:07 +00:00
Hiroku 407c24b7c5 Merge branch 'asset-updates' into 'main'
Updated wooloo/dubwool textures and passho berry stuff

Closes #854

See merge request cable-mc/cobblemon!1031
2024-05-23 10:56:56 +00:00
FrankTheFarmer 372f44538b Smeagol 2024-05-23 15:47:13 +10:00
JazzMcNade c8904c3e38 Removed commented code, updated changelog 2024-05-23 00:24:22 -05:00
JazzMcNade 6bfc711129 Update FossilMultiblockStructure.kt 2024-05-22 23:25:46 -05:00
JazzMcNade 3d914f47ee Merge branch 'main' into MoreFossilMachineFixes 2024-05-22 23:25:26 -05:00
JazzMcNade 61891d8fe4 Refactored blockState check to for the blockstate property (credit to Charzard4261) , fixed typo 2024-05-22 21:26:49 -05:00
FrankTheFarmer 0bec3ac851 Merge branch 'main' into implement_pokemon 2024-05-23 07:21:49 +10:00
apion 1b66ee8ce3 Updated wooloo/dubwool textures and passho berry stuff 2024-05-22 03:57:34 -04:00
apion c884c556cb Remove binding soil 2024-05-22 03:37:04 -04:00
apion 9a8b481fa2 Changed berry grow timers per Vera request 2024-05-22 03:26:09 -04:00
apion e2fb31fad3 Merge branch 'refs/heads/main' into berry-changes 2024-05-22 02:39:51 -04:00
Tyzillion fc03682140 Implemented quick attack 2024-05-21 22:30:41 -04:00
JazzMcNade 07fbffaa71 Fixed refactor mistake in previous commit. 2024-05-21 20:45:54 -05:00
FrankTheFarmer 17b8dd3532 Wailord will now stop forcing its head into the chatbox 2024-05-22 09:53:31 +10:00
Tyzillion 5e2f5dadb4 Fixed some errors I ran into. 2024-05-21 19:36:11 -04:00
FrankTheFarmer 4cf8a19d43 Tyrantrum will now stop forcing its head into the chatbox 2024-05-22 09:34:12 +10:00
Tyzillion fc682d1cd1 Implemented action effects for Sand Attack, Protect, Minimize, and Swords Dance. 2024-05-21 19:13:06 -04:00
Tyzillion 7759c91f3b Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/evolution/Evolution.kt
2024-05-21 19:11:04 -04:00
JazzMcNade c13654f60c FossilMultiblockStructure no longer stores a created pokemon, instead the pokemon is created when the pokemon is retrieved from the machine 2024-05-21 02:36:39 -05:00
tmetcalfe89 66f1af329d abstracted hoard logic 2024-05-20 22:39:06 -07:00
Plastered_Crab edf6acb5dd - changed things for raft spawning for water surface battles for testing 2024-05-20 21:54:59 -07:00
JazzMcNade 289e9df52b Fixed Restoration Tank over consuming items when interacting with Create blocks 2024-05-20 21:23:13 -05:00
Plastered_Crab a73673b55a - Test for sending mons out on rafts 2024-05-20 18:05:34 -07:00
FrankTheFarmer f205e7f29e CHANGELOG 2024-05-21 10:18:44 +10:00
FrankTheFarmer cec031595f Merge branch 'main' into implement_pokemon 2024-05-21 10:14:21 +10:00
FrankTheFarmer af007dad17 Added missing Chingling and Chimecho spawns near bells 2024-05-21 09:54:39 +10:00
Tyzillion 5dca5a1579 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-20 15:57:38 -04:00
Plastered_Crab 92a2b52b46 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-05-20 08:52:12 -07:00
Plastered_Crab e6ca128498 - isSlimeChunnk is a SpawningCondition now 2024-05-20 08:51:54 -07:00
JPAKx4 ee73058f5b Added a count for amount of species with a specific knowledge level and getting the knowledge level of a specific species in ClientPokedex.kt . 2024-05-20 06:35:31 -05:00
JazzMcNade 3ebad9dc9d Fixed a Create crash when a chute attempts to access the inventory of the top half of the Restoration Tank when the bottom half has been destoryed 2024-05-19 21:27:03 -05:00
apion c93fa02616 Fixed dispatch timeline 2024-05-19 21:13:58 -04:00
JPAKx4 1d20051888 ScrollingWidget has a function for rendering the scrollbar, which is able to be overriden. 2024-05-19 18:15:42 -05:00
FrankTheFarmer 8490f3a923 Fixed Cyndaquil's flame clipping when it wasn't ignited 2024-05-20 08:17:02 +10:00
FrankTheFarmer 9bf6200163 Merge branch 'main' into implement_pokemon 2024-05-20 08:11:19 +10:00
apion 5897fff954 Added boost/unboost general particles, removed the particle from growl 2024-05-19 18:05:11 -04:00
apion 2fd2137d78 Added poison (this particle is BROKEN) 2024-05-19 17:22:09 -04:00
apion 42c4d6625e Added poison (this particle is BROKEN) 2024-05-19 17:21:52 -04:00
apion b0381d1685 We do a little refactoring 2024-05-19 16:23:41 -04:00
apionandPaul 21ccfb8202 Added q.entity support to particle effects that are attached to entities 2024-05-19 17:19:34 +10:00
apion 3b00043b13 Got confusion kinda working, needs tweaks 2024-05-19 02:44:05 -04:00
JazzMcNade 2b403df6ef Removed client side mutations in FossilMultiblockStructure's onUse and enabled the client to enter the function 2024-05-19 01:37:04 -05:00
apion f0d5622bab Added volatile status stuff 2024-05-19 02:20:12 -04:00
apion ec28ca0c45 Added action effect for paralysis + action effect triggers for the cant command 2024-05-19 01:11:41 -04:00
Tyzillion 0d68eedc74 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-18 22:24:56 -04:00
Hiroku f81e8ba766 Merge branch 'npcs' into 'sega_bass_pro_fishing_2'
NPC foundationwork that's not implemented but I need the tech for reasons

See merge request cable-mc/cobblemon!1024
2024-05-19 00:31:46 +00:00
Paul c969e1731b Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-19 09:13:29 +10:00
Paul bb77c6d4a9 Fixed particle velocity not respecting drag as much as it should oops sorry 2024-05-19 09:13:17 +10:00
Tyzillion 5dfc90c0bd Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-18 18:52:14 -04:00
apion 26a72fe6a9 I hope this works (pt. 2) 2024-05-18 18:46:58 -04:00
apion 4bb9547822 I hope this works 2024-05-18 17:08:09 -04:00
Tyzillion ffe88d75b5 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-18 16:08:32 -04:00
apion d8980fabbe Fix entity_scale var 2024-05-18 14:56:47 -04:00
apion 7598413e93 Merge branch 'refs/heads/particle-rave' into move-effects 2024-05-18 13:55:24 -04:00
apion b0cc4714fc Merge branch 'refs/heads/main' into move-effects
# Conflicts:
#	CHANGELOG.md
2024-05-18 13:53:45 -04:00
JazzMcNade 5aa3f34880 Added block type checks before attempting to update the blockstate from the fossilmultiblockstructure 2024-05-18 12:15:50 -05:00
Slippy 21363405fc console log spam fix for real this time 2024-05-18 12:00:11 -05:00
JazzMcNade 340be0b2a1 Fixed an issue where the lights on the restoration tank would not animate if it was facing east 2024-05-18 11:57:16 -05:00
JazzMcNade 933e29b134 Fix for TankEntityRenderer desync 2024-05-18 11:52:54 -05:00
Tyzillion 41b27e5d75 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects
# Conflicts:
#	CHANGELOG.md
2024-05-18 10:55:29 -04:00
Tyzillion e80bf0e331 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-18 10:54:32 -04:00
Paul 683aa354ed Fixed particle event triggers spawning particles on the emitter, fixes #814 2024-05-18 11:10:48 +10:00
apion aa19ff2c95 Added entity scale as a particle param 2024-05-17 20:57:10 -04:00
Paul 7d5e790f75 Fixed particle rotations being inverted 2024-05-18 10:55:28 +10:00
Tyzillion 76f17c9760 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-17 18:33:17 -04:00
Paul 3b0d2cd980 Added parametric particle support (motion and rotation), closes #773 2024-05-17 16:43:35 +10:00
Ludichat 7e43a7424e Updated CHANGELOG.md. 2024-05-17 08:26:51 +02:00
Tyzillion f5a3c93039 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-16 21:35:16 -04:00
Paul 00dc501df7 Fixed timed particle ages being a tick too long, fixes #840 2024-05-17 11:28:49 +10:00
Paul 39fee0bcea Fixed particle effects generated from molang not having access to entity_radius and stuff. Fixes #841 2024-05-17 10:26:18 +10:00
Tyzillion 1162689172 Merge remote-tracking branch 'origin/move-effects' into move-effects 2024-05-16 20:08:03 -04:00
Paul b295644070 Cleaned imports 2024-05-17 09:37:29 +10:00
Paul 21df0085e2 Merge remote-tracking branch 'origin/main' into move-effects 2024-05-17 09:08:19 +10:00
Plastered_Crab 2f3ae9bc5e - correct particles now play at certain events when fishing 2024-05-16 15:37:11 -07:00
apion ccbe33bfe5 Fixed missing texture on fishing particle 2024-05-16 17:55:23 -04:00
apion 0989c90eb3 Fixed server sync issue on rod registry 2024-05-16 17:11:32 -04:00
apion ddcd0ffd37 Merge branch 'refs/heads/main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonSounds.kt
2024-05-16 16:57:47 -04:00
Plastered_Crab 1f5d15e59d - rods now use NBT to store baits on them 2024-05-16 13:21:32 -07:00
Ludichat b718daf0f1 Gives a Hidden Ability slot to middle stage evolution and Ferroseed with a single ability. 2024-05-16 21:49:34 +02:00
Slippy 08c4f4a0ff added loot to the trapped chest in unstable caves so you can't tell which one is trapped if you're using lootr muwahahahaha 2024-05-16 01:57:41 -05:00
Plastered_Crab a3ff4b6b81 - more particle work and dynamic tooltip parsing 2024-05-15 22:22:46 -07:00
Slippy c4a1704a8b unstable cave loot table fixes 2024-05-15 20:35:24 -05:00
Tyzillion 51af37b37a Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects 2024-05-15 18:09:53 -04:00
Plastered_Crab d2c084e4af - more setup for the dynamic tooltips 2024-05-15 12:37:52 -07:00
Plastered_Crab 98eda52866 - adjustments to fishing particles 2024-05-15 12:13:07 -07:00
Plastered_Crab c9d3cbd848 - initial steps for dynamic tooltips for pokerods + test particles 2024-05-15 10:34:22 -07:00
apion a3122812e4 Added color to all sprouts 2024-05-15 07:47:43 -04:00
JPAKx4 5ec1ef72be Added searching to the Pokedex, and the "Invisible" property for pokemon. 2024-05-14 22:25:12 -05:00
Plastered_Crab e9a2bed304 - fixed bobber splash sounds (again) 2024-05-14 17:42:40 -07:00
Plastered_Crab 6476f61d09 - fixed bobber splash sounds 2024-05-14 17:37:43 -07:00
Sterrezo 74ae10b342 Sound updates and fixes 2024-05-15 01:02:24 +02:00
Plastered_Crab 9e2b15e9ec - implementation of new Bobber landing sounds 2024-05-14 15:27:19 -07:00
Slippy 837aa5acf5 missing loot table in deserted tower 2024-05-14 16:58:55 -05:00
Plastered_Crab d401b987ce - Changed FishingSpawnContext to allow for min and max Lure Levels of rod enchants
- first implementation of new Bobber landing sounds
2024-05-14 14:53:09 -07:00
apion 19698fc0ff Merge branch 'refs/heads/main' into berry-changes 2024-05-14 16:36:34 -04:00
Plastered_Crab b7ba3f62f7 - Made all berries work as bait as well as their effects
- Reworked IV bait logic to allow for stacking effects
- Fixed Glow Berries and Sweet Berries to work as bait
2024-05-14 12:35:43 -07:00
Paul 78d34e0ae6 Mergo conflicto 2024-05-13 21:16:25 +10:00
Paul 4f7630eee0 Merge branch 'refs/heads/sega_bass_pro_fishing_2' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/ClientMoLangFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/resources/cobblemon-common.accesswidener
#	gradle/libs.versions.yml
2024-05-13 20:55:16 +10:00
Paul c1b5e58f8a Added Lure Ball functionality, improved spawning API's use of causes, added forcedAspects to Pokemon, added aspect/unaspect in PokemonProperties 2024-05-13 17:42:36 +10:00
Paul b1904ab3fd Sega Bas Pro Fishing 2™ is the 1.6.0 branch 2024-05-13 15:19:23 +10:00
Paul 949925ca9f Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2 2024-05-13 15:17:19 +10:00
Slippy 969d6ac7fc console spam fix 2024-05-12 09:23:39 -05:00
Slippy 46bb9e1aec console fix 2024-05-11 21:58:50 -05:00
Slippy 9792ff3392 console spam fix 2024-05-11 21:36:29 -05:00
JPAKx4 76560198b8 Updated Pokedex to Cobblemon 1.5 2024-05-11 19:57:43 -05:00
JPAKx4 b546327af9 Merge branch 'main' into its-dexter-time
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/CobblemonKeyBinds.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/events/AdvancementHandler.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/battle/BattleInitializePacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/net/messages/client/starter/SetClientPlayerDataPacket.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/PlayerExtensions.kt
2024-05-11 19:45:55 -05:00
JazzMcNade 04d1f8c37e Added command to allow users to leave a multiteam without needing to find their teammate 2024-05-11 18:38:17 -05:00
JazzMcNade 2363d76f85 Added command portrait highlighting for multi-battles 2024-05-11 04:39:28 -05:00
Paul 7ebe0551e1 Fixed build issue caused by unnecessary AW 2024-05-11 18:54:29 +10:00
Paul 6e1d4e0c4d Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2 2024-05-11 18:32:10 +10:00
JPAKx4 eead2724e7 Pokedex is Datapackable probably 2024-05-10 22:22:16 -05:00
JazzMcNade 419cb48327 Re-enabled targeting fainted slots. Removed target check that was generating false positive errors for target selection 2024-05-09 23:52:55 -05:00
JazzMcNade 8a91a58caa Items that did not have an opportunity to have their effect applied b/c of the battle ending are now refunded post battle. Refactored BagItem to specify the returnItem 2024-05-09 01:23:33 -05:00
FrankTheFarmer 4482a4f072 Forgot to add Mismagius to model updates 2024-05-09 10:00:05 +10:00
FrankTheFarmer a92f37c740 Added Krabby's missing temporary-cry animation 2024-05-09 09:57:26 +10:00
FrankTheFarmer 4677dda922 Limited Mismagius' yaw range to prevent some clipping 2024-05-09 09:56:29 +10:00
FrankTheFarmer 81f7320e4a Mismagius asset updates 2024-05-09 09:56:01 +10:00
FrankTheFarmer 3c9cf42da4 Fixed Flabebe's broken species name. Apparently its Flabébé and not Flabébé??? 2024-05-06 08:39:34 +10:00
FrankTheFarmer 620ed73fe9 Fixed Klefki t pose when sleeping 2024-05-06 08:38:23 +10:00
Tyzillion 978d9e76a1 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects 2024-05-04 17:48:57 -04:00
FrankTheFarmer 7d09b7e2fe Fixed a broken texture on Elgyem 2024-05-04 18:48:08 +10:00
FrankTheFarmer 656cff2ab3 Made Galarian Zigzagoon use Hoenn Zigzagoon's shoulder animation 2024-05-04 18:16:59 +10:00
Tyzillion 1d8462fd63 Implemented better Krabby bubble blowing quirk animation. 2024-05-03 18:34:23 -04:00
Tyzillion e417db6a8d Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2024-05-03 16:39:08 -04:00
JPAKx4 2b68ccd0f9 Forms in the Pokedex are read from the Pokedex Files now. 2024-05-02 14:49:28 -05:00
MoeBoy76 16d0d3b7e1 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon
# Conflicts:
#	CHANGELOG.md
#	common/src/main/resources/data/cobblemon/species/generation1/exeggcute.json
#	common/src/main/resources/data/cobblemon/species/generation1/pikachu.json
#	common/src/main/resources/data/cobblemon/species/generation2/cyndaquil.json
#	common/src/main/resources/data/cobblemon/species/generation2/quilava.json
#	common/src/main/resources/data/cobblemon/species/generation5/dewott.json
#	common/src/main/resources/data/cobblemon/species/generation5/oshawott.json
#	common/src/main/resources/data/cobblemon/species/generation7/dartrix.json
#	common/src/main/resources/data/cobblemon/species/generation7/rowlet.json
2024-05-02 15:49:13 +10:00
MoeBoy76 dbedc58dd9 changelog conflict fix [skip-ci] 2024-05-02 15:43:54 +10:00
FrankTheFarmer c0ea565967 Updated Changelog with recent changes 2024-05-02 14:26:10 +10:00
FrankTheFarmer 7e92f5f314 Updated Spewpa evolution and Vivillon spawn biome tags 2024-05-02 14:25:21 +10:00
FrankTheFarmer df3ed93032 Added anticondition structure requirements to evolutions 2024-05-02 14:24:45 +10:00
FrankTheFarmer 2335fd388e Updated and added time ranges 2024-05-02 14:22:26 +10:00
JPAKx4 5adefaac5e Pokedex is now based on files in the resources, and such is also datapackable. Forms still need to be fixed and the spreadsheet needs expanded as well. 2024-05-01 16:36:02 -05:00
FrankTheFarmer e152cc9fd0 Updated Changelog with recent work 2024-05-01 21:31:00 +10:00
FrankTheFarmer 3f7e2bef40 Updated Spewpa evolutions and made sure they work. I hate evolution™ 2024-05-01 21:30:16 +10:00
FrankTheFarmer 25927c6ebe Updated Vivillon biome tags to new format and added 2 more 2024-05-01 21:28:40 +10:00
FrankTheFarmer 2f18d6b05f Created new folder for all regional evolution biome tags and moved region bias ones there 2024-05-01 20:34:48 +10:00
FrankTheFarmer 2600e23233 Removed sliggoos cross region evolutions 2024-05-01 20:33:26 +10:00
FrankTheFarmer 5c5c72d800 Updated Goomy to use new evolution biome tags for evolution 2024-05-01 20:32:15 +10:00
FrankTheFarmer 2c812344f9 Updated Petilil evo biomes and added priority evos to save a sun stone hopefully 2024-05-01 20:24:33 +10:00
FrankTheFarmer 37b4577230 Updated Hisui Starter evos to use the updated evolution biome tags 2024-05-01 19:50:51 +10:00
FrankTheFarmer fcf64b00bf Updated Pikachu and Exeggcute evolutions to prioritize cross region evos if applicable 2024-05-01 19:40:48 +10:00
FrankTheFarmer 02b8cd81a0 Updated Conkeldurr with the correct animation files 2024-04-30 21:38:54 +10:00
FrankTheFarmer def1b44f08 Fixed Conkeldurr holding too much concrete during sleep animation 2024-04-30 17:02:01 +10:00
FrankTheFarmer b28f915af9 Selected Hisui starters will now come in ancient poke balls 2024-04-30 15:07:59 +10:00
FrankTheFarmer 29ce8b584a Stopped the zoroarks cry animations from looping 2024-04-29 19:22:18 +10:00
JazzMcNade eee563f07a Fixed cancelling selection around fainted slots. Disabled cancelling item selections. 2024-04-29 01:02:54 -05:00
FrankTheFarmer 84f3a44109 Found Sudowoodo and Bonsly. Hiding since July 2023 2024-04-29 15:35:20 +10:00
FrankTheFarmer 08a58eee8a Prevented and preserved Cubone's evolution to Alolan Marowak 2024-04-29 08:55:05 +10:00
Tyzillion 1e067cb7e4 Implemented simple elemental punches. Implemented sweetscent effects, and stat increase and decrease particles. 2024-04-27 22:00:56 -04:00
FrankTheFarmer c10f48090c Added dried kelp blocks, melon, vines, and sea pickles to list of organic materials for the fossil machine 2024-04-28 11:07:16 +10:00
Paul 7aef56c610 license 2024-04-27 14:28:30 +10:00
Paul 27e1a34097 Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/resources/assets/cobblemon/textures/item/poke_balls/beast_ball.png
2024-04-27 12:43:42 +10:00
Tyzillion 2f464f82b1 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects 2024-04-26 21:01:38 -04:00
apion f1463f92e6 More conflict resolution (SOB) 2024-04-26 13:46:06 -04:00
FrankTheFarmer 9c0e5e487a Reverted Snorlax's resize 2024-04-26 20:57:20 +10:00
FrankTheFarmer 95f2bbbf15 If for some reason you are above an Aurorus, it will no longer break its neck trying to look at you. 2024-04-26 20:37:53 +10:00
FrankTheFarmer 864d184cd9 Scaled drifloon down a bit 2024-04-26 17:53:56 +10:00
FrankTheFarmer a2256f6208 Lurantis animation file update 2024-04-26 16:44:14 +10:00
FrankTheFarmer 945d556b43 Fixed Cubone holding its bone humerusly 2024-04-26 16:18:14 +10:00
FrankTheFarmer f0def2e883 Fixed zubat's shoulder animations 2024-04-26 13:42:21 +10:00
FrankTheFarmer 79c644dad0 So the 10 and 11 bug can be fixed with underscores 👀 2024-04-26 13:37:39 +10:00
Tyzillion 28c0e17a48 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into move-effects 2024-04-25 18:21:18 -04:00
apion 0303db5fff A bunch more 1.20.5 2024-04-25 17:30:09 -04:00
apion 105840a334 A bunch more 1.20.5 (mostly codec stuff) 2024-04-25 17:10:07 -04:00
apion 335fbfd3e0 Fixed a lot of the codecs for advancements 2024-04-25 15:31:55 -04:00
apion dfe30a91b6 Mitigated all errors in the neoforge module (god forgive me for some of the things I've done) and renamed most stuff from forge to neoforge 2024-04-25 15:00:50 -04:00
apion e0f62b5eb9 Updated a bunch of dependencies. Swapped from Forge to NeoForge (Forge is not yet on 1.20.5, might get added back later) Got to a point where we can reload the project in IntelliJ 2024-04-25 12:32:49 -04:00
apion 63edd09f3f Update to Gradle 8.6 and Loom 1.6 2024-04-25 11:01:50 -04:00
apion 1fde1e4428 Merged main into 1.20.4 2024-04-25 10:18:17 -04:00
apion a2d574300c Merge branch 'main' into 1.20.4
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/block/TumblestoneBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/chest/GildedChestBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/block/entity/GildedChestBlockEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/summary/Summary.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	forge/src/main/java/com/cobblemon/mod/forge/mixin/LootManagerMixin.java
#	gradle/libs.versions.yml
2024-04-25 08:31:40 -04:00
FrankTheFarmer 87e41bdb89 Fixed Kabuto animation but on implementation branch 2024-04-25 22:22:18 +10:00
FrankTheFarmer 8a8505d816 3/4 of the Galar fossils can now look at the player. 2024-04-25 21:04:04 +10:00
FrankTheFarmer 1a19c51748 Fixed Slowpoke spawning everywhere 2024-04-25 17:16:37 +10:00
JazzMcNade a231250372 Triples: no longer mentions a fainted pokemon's name if a move targets a pokemon after it has already fainted. 2024-04-25 02:01:01 -05:00
FrankTheFarmer 8a66ab9235 Removed unimplemented cries from sounds json 2024-04-25 16:41:11 +10:00
JazzMcNade 14f486d086 Added language keys to differentiate between ally switch and triples shift 2024-04-25 01:33:42 -05:00
Paul ee50361555 Merge remote-tracking branch 'origin/main' into implement_pokemon
# Conflicts:
#	CHANGELOG.md
2024-04-25 11:47:23 +10:00
Paul d3631f1436 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-25 10:28:21 +10:00
Paul 31136435fe Fixed autogeneration of target and special_attack locators 2024-04-25 10:20:19 +10:00
Paul bdeb83c62c Fixed entity_particles parsing of the effect ID when it's a simple string 2024-04-25 10:20:01 +10:00
FrankTheFarmer 79e1f9143c Fixed Wooloo's blink and leg but in game 2024-04-25 10:07:09 +10:00
Paul 15bf726421 Merge remote-tracking branch 'origin/main' into move-effects 2024-04-24 15:13:23 +10:00
JazzMcNade c2f7f3d506 Merge branch 'main' into DoublesAreTheFuture 2024-04-23 23:53:12 -05:00
DoctorWafflePhD 7f1889db7b bubblebeam VFX uploaded for review by hiroku (thanks oomfie) 2024-04-23 21:42:16 -05:00
DoctorWafflePhD 548c18bea4 hit particle fix(?) 2024-04-23 21:41:46 -05:00
JazzMcNade 593f9cee03 Disabled single target selection against fainted slots 2024-04-23 21:36:14 -05:00
Paul ba6513942d Fixed evo_glow_time call not using query struct 2024-04-24 12:12:00 +10:00
DoctorWafflePhD d9203bef2a hit particle fix(?) 2024-04-23 21:06:57 -05:00
Paul 84c7d36840 Merge remote-tracking branch 'origin/main' into evolution-effect 2024-04-24 12:00:20 +10:00
JazzMcNade f0821bc1d2 More precise revive switch selection checking 2024-04-23 19:56:53 -05:00
amo 084e5f744a early flash layer impl 2024-04-23 14:53:36 +01:00
FrankTheFarmer bef0b2fb87 Updated regional bias evolution data to hopefully work as intended. I hate evolution. 2024-04-23 20:49:22 +10:00
FrankTheFarmer d7bbc05af8 Created biome tags for the regional bias evolutions. They're specific to each form's spawn data 2024-04-23 20:47:27 +10:00
FrankTheFarmer 7ca3ab5e30 Updated portrait data for the Samurotts 2024-04-23 20:43:44 +10:00
FrankTheFarmer 1bbb1201c8 Chansey animation fixes. Cry implemented but no sound file yet 2024-04-23 18:20:26 +10:00
FrankTheFarmer 8ed4fee8af Added more visual distinction for Hisui Bias Quilava in the evolution menu. Plus Cyndaquil textures 2024-04-23 17:18:07 +10:00
FrankTheFarmer a3dacc2c3d Forgot about the changelog lol 2024-04-22 20:50:03 +10:00
FrankTheFarmer c265f73308 Fixed eyes on the faints of Hitmonlee and Phantump 2024-04-22 20:40:12 +10:00
Paul 90a1acb56e Fixed evolution animation being cancelled when the entity is pushed, minor fix to action effects 2024-04-22 15:03:44 +10:00
FrankTheFarmer 670dedc0e2 Grovyle shiny texture fixes 2024-04-22 14:01:59 +10:00
Tyzillion 5e24799295 move effects are in the works now. :) 2024-04-21 23:05:41 -04:00
Paul b25dc6610e Fixed bobber spawning not working 2024-04-22 11:20:54 +10:00
Paul fa67bba631 Merge remote-tracking branch 'origin/main' into sega_bass_pro_fishing_2
# 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/CobblemonSounds.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/advancement/CobblemonCriteria.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/block/DisplayCaseRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/MagikarpModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/item/group/CobblemonItemGroups.kt
#	common/src/main/resources/assets/cobblemon/bedrock/pokemon/animations/0129_magikarp/magikarp.animation.json
2024-04-22 11:07:52 +10:00
Tyzillion a7243102d5 Evolution particle tweaks and Pokemon now stop moving if evolution is started. 2024-04-21 21:06:47 -04:00
JazzMcNade ef7ad797d1 PvP doubles/triples now require a sufficient number of unfainted pokemon to start, Fainted pokemon can no longer be send as part of the initial sendout 2024-04-21 19:49:05 -05:00
Tyzillion de6a84a75b Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-04-21 19:37:16 -04:00
FrankTheFarmer 6e19ee6059 Tricko remodel 2024-04-22 09:05:52 +10:00
JazzMcNade 56f86e15ae Selecting forfeit in a double/triple battle now short circuits any other pending action requests 2024-04-21 13:59:50 -05:00
Tyzillion be3c35eb43 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-04-21 11:21:57 -04:00
JazzMcNade a285dbbe43 Fixed a number of issues with Revival Blessing and (Max) Revive bag item, removed a dupe of super effective message 2024-04-21 04:08:34 -05:00
FrankTheFarmer a865d59b99 changelog update 2024-04-21 17:27:38 +10:00
FrankTheFarmer 8896440451 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-21 17:09:04 +10:00
FrankTheFarmer 39b27a8c17 Quick and dirty fixes for Pikachu and Exeggcute evolution data. Added new biome tag for their evolution requirements. 2024-04-21 16:41:50 +10:00
JazzMcNade cc2783a553 Fixed softlock when 2 pokemon are ko'd but the player only has 1 pokemon in reserve 2024-04-18 21:37:06 -05:00
JazzMcNade 2ca67c805f Fixed double shift positioning in triples.
Fixed fainted pokemon portraits reappearing after shifting into a fainted slot
2024-04-17 21:58:45 -05:00
JazzMcNade 4b0f1e3d7d Merge Conflict: Fixed swap instruction string key 2024-04-17 01:25:02 -05:00
JazzMcNade 06a8c9e713 Fixed more merge conflicts 2024-04-17 01:02:31 -05:00
JazzMcNade a447228de1 More Merge Conflicts 2024-04-16 21:43:11 -05:00
JazzMcNade c6032fdaab Merge branch 'main' into DoublesAreTheFuture
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownActionRequest.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/interpreter/instructions/CritInstruction.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/interpreter/instructions/SuperEffectiveInstruction.kt
2024-04-16 21:16:11 -05:00
JazzMcNade 103af083a3 Fixed a Multibattle softlock when a player's last pokemon has fainted but their teammate has unfainted pokemon 2024-04-16 01:47:54 -05:00
JazzMcNade e67c0ebbb8 Added the ability for players to "team up" for Multibattles. Added Multibattle Support. 2024-04-15 21:54:45 -05:00
Sterrezo a0eb614f2a Kabuto now does the funny noise. Fixed Lucario's cry missing
I didn't know what to do with Kabuto's animation, ended up using a placeholder. Lucario had an incorrectly named keyframe.
2024-04-15 23:26:44 +02:00
FrankTheFarmer a6e4aeb321 The Doduo line will now bite less 2024-04-15 15:57:48 +10:00
FrankTheFarmer bb796921b5 Changelog updates. Removed duplicates and added list of new shoulder mounts 2024-04-15 10:30:11 +10:00
FrankTheFarmer 9f6f764aa1 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-15 07:59:57 +10:00
FrankTheFarmer f115a87b66 Roaming Gimmighoul can now evolve 2024-04-15 07:59:31 +10:00
Waldleufer 77c880ff2d fix: cry script - relaxing handling of all Forms, skipping non-regional forms [skip-ci] 2024-04-14 09:29:01 +02:00
FrankTheFarmer 16c64b9d8e Updated behaviour for Armaldo, Carracosta, Tirtouga, and Wimpod 2024-04-14 12:26:45 +10:00
FrankTheFarmer caeb45e9e1 Tyrantrum line kotlin poser placed in the proper generation. 2024-04-14 12:23:03 +10:00
FrankTheFarmer 6e341438e9 Goomy line updates and Steenee scale update 2024-04-14 11:38:17 +10:00
Tyzillion 7407483498 Updated Branch with latest main. Added Lucario aura in battle. 2024-04-13 16:34:44 -04:00
Tyzillion 020c728004 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-13 14:55:15 -04:00
Sterrezo 7125987c98 Fixed Hisuian Lilligant's cry missing
Asset was incorrectly named
2024-04-13 20:33:25 +02:00
Waldleufer 6448c4472e fix: cry script - handling all Forms, skipping non-regional forms [skip-ci] 2024-04-13 20:11:26 +02:00
Waldleufer eedac70d13 fix: cry script - sprinkling in some magic [skip-ci] 2024-04-13 19:07:48 +02:00
Sterrezo 025e09cd12 Couple cry fixes
Updated KrabbyModel.kt. Fixed missing or incorrect sound effect keyframes in animation.json files.
2024-04-13 18:54:55 +02:00
Waldleufer 4d2cfb63ea fix: cry script - warn about files not in the right locations [skip-ci] 2024-04-13 18:52:27 +02:00
Waldleufer 40794acdd5 fix: cry script - properly check elaborate cries [skip-ci] 2024-04-13 18:25:25 +02:00
Sterrezo 82f8855725 Fixed missing Grovyle and Sceptile cries missing 2024-04-13 17:57:21 +02:00
Waldleufer 5abcdbb837 fix: cry script - new way to implement cries does not require an import [skip-ci] 2024-04-13 17:48:01 +02:00
Waldleufer 2f817a7f9a fix: cry script - ignore commented out lines [skip-ci] 2024-04-13 17:33:35 +02:00
Waldleufer 67767fc53a fix: cry script - only log warnings for pokemon marked as "In-Game" [skip-ci] 2024-04-13 17:16:34 +02:00
Tyzillion 43cd4b8403 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2024-04-13 02:50:14 -04:00
Tyzillion 2660d73bb6 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-13 02:49:33 -04:00
FrankTheFarmerReal faa7ca5d19 Revoking Hisuian Visas 2024-04-13 11:48:17 +10:00
Tyzillion 0fcbe51d97 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2024-04-12 11:16:59 -04:00
Tyzillion b23ad62f99 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-12 11:16:44 -04:00
Sterrezo 3ca4ce8f80 Implemented 13 new cries, more changelog updates with previously undocumented cries 2024-04-12 16:47:25 +02:00
Sterrezo 446a994195 Fixed a typo in komala.animation.json 2024-04-12 16:14:12 +02:00
Sterrezo 60e7ac828d Implemented more cries, updated changelog
Added cries for Goomy, Sliggoo, Goodra, Hisui Bias Goomy, Hisuian Sliggoo, Hisuian Goodra, Klefki. Fixed Arcanine's cry misisng. Updated changelog with previously undocumented cries.
2024-04-12 13:10:18 +02:00
Sterrezo a870effd3b Added a keyframe with a cry for Lapras 2024-04-12 10:27:53 +02:00
FrankTheFarmerReal 236237a170 The simple blink of a Bouffalant shall no longer crash your game 2024-04-12 17:00:37 +10:00
FrankTheFarmerReal 0fc67ba042 Updated Goomy's hisui bias assets and added missing oinkologne cry files. 2024-04-12 13:32:48 +10:00
FrankTheFarmerReal 997ab29d91 Added a couple cries 2024-04-12 11:29:01 +10:00
FrankTheFarmerReal e74f54f1d0 Implemented Kotlin posers for Hisuian starters unique cries
Deleted Datrix
2024-04-12 00:05:12 +10:00
Sterrezo 081e368551 Merge branch 'implement_pokemon' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2024-04-11 14:04:44 +02:00
Sterrezo 1538f58a4a Added audio assets for previously added cries 2024-04-11 14:04:16 +02:00
FrankTheFarmerReal e5103e5d03 Separated Oinkologne models to allow for separate cries 2024-04-11 21:54:01 +10:00
FrankTheFarmerReal 1cea15c9e5 Fixed Milcery being unable to evolve properly 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal 3395fe0140 Hisuian Samurott texture fixed 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal 2eff8d14eb Fixed Happiny being unable to evolve 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal ed3cdf9b75 Limited the Typhlosions and Cyndaquils ability to look up to prevent bone dislocation in certain scenarios 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal 6e1ba0599f Corrected egg groups for Toedscool line 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal 497d5ce39b Basculegion behaviour updated. Should stop drowning. 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal 660de3ea03 Dusknoir animations updated 2024-04-11 21:49:58 +10:00
FrankTheFarmerReal 5ab3d7b493 Updated Ekans texture 2024-04-11 21:49:57 +10:00
FrankTheFarmerReal 2ce0069484 Closed Scyther's mouth after it cries 2024-04-11 21:49:57 +10:00
Sterrezo d87fa57c95 Implemented a bunch of cries
Woobat, Swoobat, Lilligant, Hisuian Lilligant, Basculin, Klink (Deleted a redundant animation file as well), Klang, Klinklang, Litwick, Lampent, Chandelure, Cubchoo, Bouffalant, Larvesta, Volcarona, Fomanting, Lurantis, Gossifleur, Eldegoss, Stonjourner, Basculegion, Sneasler, Overqwil, Oinkologne
2024-04-11 13:40:36 +02:00
Paul 9d49ce086a merge conflict bug resolution 2024-04-11 15:10:17 +10:00
Paul 5f8c1d5b6d Merge remote-tracking branch 'origin/main' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonCommands.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/battles/model/PokemonBattle.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/interpreter/instructions/FaintInstruction.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/PokemonClientDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/JsonPokemonPoseableModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/PokemonPoseableModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/PokemonRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonServerDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/particle/SnowstormParticleReader.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MiscUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/WorldExtensions.kt
2024-04-11 14:36:52 +10:00
FrankTheFarmerReal 69947b0b32 Fixed Flabebe line T pose when sleeping 2024-04-11 09:01:02 +10:00
Tyzillion f4c3f9ae04 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into implement_pokemon 2024-04-10 09:34:02 -04:00
FrankTheFarmerReal 04e1a6b41c Removed duplicate entry from changelog 2024-04-10 18:13:26 +10:00
FrankTheFarmerReal 6ae2adb2d0 Stopped Pumpkaboo's cry from looping 2024-04-10 17:12:44 +10:00
FrankTheFarmerReal 0bf6932fe5 Dusknoir's animations are now about 20 degrees cooler™ 2024-04-10 09:59:27 +10:00
FrankTheFarmerReal 71382a3bd1 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2024-04-09 10:27:14 +10:00
FrankTheFarmerReal 0f4f29518b Placeholder Volcarona animations 2024-04-09 10:26:37 +10:00
Sterrezo 8aeeece0a3 Fixed missing cries, updated the changelog.
Fixed missing audio files, sound effect keyframes and model.kt files. Partially updated the changelog.
2024-04-08 18:55:58 +02:00
Paul 850b418c80 Improve surface-swimmers behaviour when submerged 2024-04-08 22:51:04 +10:00
FrankTheFarmerReal 42af2898b2 Hitbox fixes and Lapras placeholder swim animation 2024-04-08 18:23:01 +10:00
Lily 336901312b Added a script to automate the creation of certain block-related files 2024-04-02 17:44:13 +00:00
JazzMcNade a51d282007 Added Battle Portrait highlighting for the mon currently receiving commands in Doubles/Triples 2024-03-20 00:33:38 -05:00
Lily e6590bef08 moved most baits to the new system 2024-03-19 15:00:59 +00:00
Lily 60b0e70651 updated some baits to use the new system 2024-03-19 14:40:17 +00:00
JPAKx4 afb93ba15c Cleaned up the ScrollingWidget.kt and the children now that the Mixin is implemented. 2024-03-19 06:16:17 -05:00
Lily 0d9f8bbb36 refactored the fishing bait system to allow for multiple effects per item 2024-03-18 22:24:24 -04:00
Nick fef655065b Merge branch 'its-dexter-time' of gitlab.com:cable-mc/pokemon-cobbled into its-dexter-time 2024-03-18 19:18:58 -07:00
Nick 1d2ce79fba Fix scroll widget being slightly off on both x and y axis 2024-03-18 19:18:50 -07:00
JPAKx4 0b13ad2fbc Fixed the ScrollingWidget.kt to properly select entries based on mouse position. 2024-03-18 15:13:47 -05:00
JazzMcNade 3004c2a44c Added additional checks for doubles/triples exp gain 2024-03-17 20:06:36 -05:00
JazzMcNade a2a2d8860e Fixed another instance of giving orders to fainted mons. 2024-03-17 13:45:34 -05:00
Deltric 00eca1c019 fix: battle gui rendering bugs and removed old method 2024-03-17 01:02:43 -05:00
Deltric babfb43750 Merge remote-tracking branch 'origin/1.20.4' into 1.20.4
# Conflicts:
#	common/build.gradle.kts
#	common/src/main/kotlin/com/cobblemon/mod/common/block/chest/GildedChestBlock.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/startselection/StarterSelectionScreen.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2024-03-17 00:25:21 -05:00
Deltric 3aa94fcd2a fixed two leftover errors from merging in main 2024-03-17 00:19:25 -05:00
Deltric 20a866a0e3 draft: rough port with some bugs to fix and code to clean up. 2024-03-16 23:39:29 -05:00
Deltric 67f2146c3c remove baked in adorn for compatibility mod 2024-03-16 23:27:16 -05:00
Deltric ad49106132 initial gradle changes 2024-03-16 23:27:09 -05:00
Deltric 064df9c26e draft: rough port with some bugs to fix and code to clean up. 2024-03-16 23:15:12 -05:00
JazzMcNade af81763577 Refactoring out function 2024-03-15 22:09:32 -05:00
Paul bd8d9fa9e3 Added a bunch of AI tasks to NPCs for combat (I dunno it's neat) 2024-03-16 11:16:58 +10:00
JazzMcNade c3dafcc615 Added target declaration for super effective, resist, and crit on multitarget attack hits. 2024-03-15 01:30:34 -05:00
JazzMcNade 0340f54e2c Position shifting can now swap pokemon into fainted position slots. 2024-03-13 02:08:09 -05:00
JazzMcNade e2917b044a Added lang strings for different battle formats 2024-03-13 00:29:54 -05:00
JazzMcNade 34f00dbb05 Split BattleChallengePacket into BattleChallengePacket and BattleChallengeResponsePacket 2024-03-12 01:11:40 -05:00
JazzMcNade 93801ae6d5 Added Shifting to Triple Battles 2024-03-10 15:07:08 -05:00
Tyzillion b4508bf87e More tweaks to evolution particles. 2024-03-10 06:29:27 -04:00
JazzMcNade b50bf547f8 Battle effects now strike all targets in a multitarget attack. Fixed another softlock issue 2024-03-10 00:18:16 -06:00
Tyzillion dcb4f52cdb Added sounds to evolution. 2024-03-10 00:32:08 -05:00
Tyzillion 1e9b390f38 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-03-09 23:34:36 -05:00
JazzMcNade 01ac831c24 Fixed soft locking after a switch event 2024-03-09 18:01:49 -06:00
Tyzillion 7edd47f995 Evolution tweaks. 2024-03-08 19:12:46 -05:00
JazzMcNade adcccfee02 Fixed a bug in which during a forced switch event, the player would be requested to input actions on non-switching slots. 2024-03-07 23:56:47 -06:00
JPAKx4 365dd2c45c Began doing the "deltaDex" config file 2024-03-07 22:48:15 -06:00
Tyzillion dd220c5c85 Merge remote-tracking branch 'origin/evolution-effect' into evolution-effect 2024-03-07 22:02:04 -05:00
Paul bea84a37d4 Fixed a bunch of evolution animation locator issues 2024-03-08 13:01:42 +10:00
Tyzillion ac30da3c15 Merge remote-tracking branch 'origin/evolution-effect' into evolution-effect 2024-03-07 20:58:08 -05:00
JazzMcNade a97e8c819d Switch menu tiles are now vertically offset from the lowest active pokemon tiles 2024-03-07 00:42:49 -06:00
Paul 3861835d47 Test command spawns bedrock entity for evo 2024-03-06 21:06:38 +10:00
JazzMcNade 4eeaf5102f Added support for Ally Switch 2024-03-06 01:19:23 -06:00
Sterrezo e75dcd63d1 Merge branch 'sega_bass_pro_fishing_2' of https://gitlab.com/cable-mc/cobblemon into sega_bass_pro_fishing_2 2024-03-04 17:46:49 +01:00
Sterrezo a4fc1442bf Updated fishing sounds 2024-03-04 17:46:06 +01:00
Tyzillion d62fb5c4c7 Merge remote-tracking branch 'origin/evolution-effect' into evolution-effect 2024-03-03 20:58:44 -05:00
Paul ca9dde92cd Merge remote-tracking branch 'origin/main' into evolution-effect 2024-03-04 11:32:33 +10:00
Tyzillion 6ba264ddcb Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-03-03 20:26:59 -05:00
Tyzillion ab6c088ddf Evolution particle edits. 2024-03-03 17:56:50 -05:00
Tyzillion 18105a8b3f Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into evolution-effect 2024-03-03 17:56:44 -05:00
Tyzillion acb5984a9e Evolution particles electric boogaloo. 2024-03-03 03:50:33 -05:00
Paul 0a3ba8d4fa Fixed generic bedrock animations not being loaded 2024-03-03 17:37:43 +10:00
Paul 15259f0a95 Merge remote-tracking branch 'origin/main' into evolution-effect 2024-03-03 17:32:04 +10:00
Tyzillion 9f66c053e1 Evolution Particles BB. 2024-03-03 02:25:10 -05:00
Deltric ea2936f204 remove baked in adorn for compatibility mod 2024-03-02 17:44:25 -06:00
Deltric 9d7eef9bcd initial gradle changes 2024-03-02 17:18:50 -06:00
Timothy Metcalfe c8dedce977 Merge branch 'main' into 'held-item-manager-item-checker'
# Conflicts:
#   common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
2024-03-02 09:09:59 +00:00
Plastered_Crab fb85ceacb0 - More adjustments to the reel-in trajectory 2024-03-01 12:40:14 -08:00
Paul 9da2e125ac More NPC AI, some molang context implementation 2024-03-01 10:07:25 +10:00
jeffw773 7d9644ba51 - tweak Gyarados spawn for testing 2024-02-29 08:58:05 -08:00
Plastered_Crab 39c856b69a - Added in all Ancient Rod predicates so they look right when casting 2024-02-28 15:49:56 -08:00
Plastered_Crab 4a4c375f66 - Added in new test sounds for fishing 2024-02-28 14:56:28 -08:00
JPAKx4 e9d4524a4f Worked on forms and added Weight/Height stuff. 2024-02-27 20:24:12 -06:00
Plastered_Crab d22df3e554 - tweaked reel in logic and trajectory 2024-02-27 16:36:09 -08:00
JPAKx4 78c32e5396 Created a generic ScrollingWidget.kt and added a DescriptionWidget.kt for the PokedexGUI.kt 2024-02-27 13:35:09 -06:00
apion 743da2817b Added rooted soil 2024-02-27 06:07:24 -05:00
apion ebdf69f496 Rebuilt blockstate jsons 2024-02-27 05:57:41 -05:00
Plastered_Crab ed4dadc3f6 - cleaned up code 2024-02-26 16:21:44 -08:00
JPAKx4 58cb6295fa Merge remote-tracking branch 'origin/its-dexter-time' into its-dexter-time 2024-02-26 18:17:35 -06:00
JPAKx4 4bc94f8deb Made the info section render an animated pokemon. 2024-02-26 18:15:27 -06:00
Plastered_Crab c2e5e39019 - Tweaked IV bait logic 2024-02-26 16:11:35 -08:00
Plastered_Crab f383e5a52f - Fixed some bait logic 2024-02-26 15:33:28 -08:00
apion 25d3d9f7da Made tint values travel down to emissive layers 2024-02-26 18:04:30 -05:00
JPAKx4 e5235cb121 Added Scroll bar to the PokedexGUI.kt 2024-02-26 16:42:22 -06:00
Plastered_Crab 914b7c63c9 - Hooking entities no longer crashes the game :D 2024-02-26 14:37:57 -08:00
apion 3534dc0722 Added revoke command 2024-02-26 17:07:02 -05:00
apion ce5b94745e Fixed add only for pokemon with no alternate forms 2024-02-26 16:49:07 -05:00
Plastered_Crab 5a17a5ed68 - Glow/Sweet Berries can be used as bait + fixes for particles for fishing trails 2024-02-26 12:04:54 -08:00
jeffw773 bb1a46950f - added comment to bobber entity 2024-02-26 06:27:39 -08:00
jeffw773 679d3eae58 - edit to vanilla bait list 2024-02-26 06:08:04 -08:00
jeffw773 a9cd80e496 - remove junk test fishing loot table. Finalize % chance to get Smithing Template odds 2024-02-26 05:38:50 -08:00
apion 0868d71c59 Added command to fill pokedex, licenses 2024-02-26 05:42:28 -05:00
tmetcalfe89 8f64e4fef8 removed testcommand addition 2024-02-25 22:28:46 -08:00
apion a96cc307bb Fixed loot table injector 2024-02-25 23:39:06 -05:00
JPAKx4 801de096fd Work on Scrollbar and added the starter event to the PokedexHandler.kt 2024-02-25 22:04:25 -06:00
jeffw773 f2b2a282e5 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-02-25 19:56:20 -08:00
jeffw773 5bd7695ce8 - players can define their own bait now 2024-02-25 19:56:05 -08:00
JPAKx4 347c56c484 Added Portraits and Text 2024-02-25 19:59:51 -06:00
JPAKx4 a184c8b960 Merge remote-tracking branch 'origin/its-dexter-time' into its-dexter-time 2024-02-25 17:46:47 -06:00
JazzMcNade d15307a809 The target menu now displays if a target is valid or not. Multitargeting is supported as well. 2024-02-25 17:13:42 -06:00
Lily b42387a23f Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-02-25 17:40:43 -05:00
Lily 6aa1e6f9ad advancement + tag changes 2024-02-25 17:39:55 -05:00
apion 950994d95c Added tracked data serialization 2024-02-25 06:29:41 -05:00
apion 19535fc81e Cleanup 2024-02-25 02:26:34 -05:00
apion a80938badf Moved pokedex storage to use nbt 2024-02-25 00:45:43 -05:00
jeffw773 414fcf8278 - Removed additional crafting recipe 2024-02-24 21:27:26 -08:00
jeffw773 a3c26484a4 - Inejected Pokerod Smithing Template into Treasure Fishing table 2024-02-24 21:25:06 -08:00
apion a484ba6c68 Cool codec stuff 2024-02-24 22:55:51 -05:00
JPAKx4 8afe6d5b22 Added Slots for pokedex and sorting for the species. 2024-02-24 21:48:09 -06:00
apion 30ba386294 Started trying to do incremental updates 2024-02-24 20:20:22 -05:00
apion f2ae51df7d Small fixes 2024-02-24 17:57:32 -05:00
apion b5d354164c Added back previously tracked events 2024-02-24 16:18:37 -05:00
JazzMcNade 935fd53b70 Fixed pokemon positioning in doubles/triples. Fixed positioning in portraits/targeting. Added triples as a selectable battleType. 2024-02-24 14:00:52 -06:00
apion fe69659191 Merge remote-tracking branch 'origin/its-dexter-time' into its-dexter-time 2024-02-24 03:22:18 -05:00
apion 536fac3904 Restructured the pokedex so that we can configure exactly what data gets tracked. It is super cool 2024-02-24 03:22:08 -05:00
Paul 53acf7a628 Various improvements to NPC AI 2024-02-24 15:17:48 +10:00
Lily fbc8883c96 advancement fixes, removed crafting table recipes, fixed fishing bait not registering 2024-02-23 23:57:50 -05:00
Paul 235b5d062d Merge remote-tracking branch 'origin/main' into npcs 2024-02-24 13:56:55 +10:00
JPAKx4 77a416b699 Merge remote-tracking branch 'origin/its-dexter-time' into its-dexter-time 2024-02-23 21:10:23 -06:00
apionandJPAKx4 1e05d35e06 Added Justify Text Right and new text for the pokedex. 2024-02-23 21:10:07 -06:00
jeffw773 baba3f669d Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-02-23 17:45:38 -08:00
jeffw773 2fe098adac - added in recipes for ancient rods 2024-02-23 17:45:23 -08:00
apion a84c72d703 Merge branch 'main' into its-dexter-time
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/GeneralPlayerData.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/PlayerDataStoreManager.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/factory/JsonPlayerDataStoreFactory.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/PlayerExtensions.kt
2024-02-23 20:39:27 -05:00
apion 0b29bbf82c Merge branch 'main' into its-dexter-time
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/GeneralPlayerData.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/PlayerDataStoreManager.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/storage/player/factory/JsonPlayerDataStoreFactory.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/PlayerExtensions.kt
2024-02-23 20:39:07 -05:00
Lily 1c770049b4 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/item/interactive/PokerodItem.kt
2024-02-23 20:21:53 -05:00
Lily 71b854f36a ancient rods + advancements 2024-02-23 20:21:26 -05:00
apion 995364c960 Texture updates 2024-02-23 19:53:27 -05:00
jeffw773 61b944a293 - reworked fishing baits to be datapackable (now you can fish with steak if you wanted) 2024-02-23 16:16:48 -08:00
apion 289b2ddc7b Berries now stick out of the ground when initially planted 2024-02-23 19:08:03 -05:00
JPAKx4 35085c462e Created layout for Pokedex. Placeholder images added for the background. 2024-02-23 11:56:58 -06:00
jeffw773 46ed6d0492 - more bait swapping logic 2024-02-23 08:53:46 -08:00
JazzMcNade db33633406 Added sendout locations for doubles and triples first pass. 2024-02-23 02:12:19 -06:00
jeffw773 72058bb56f - Fixed some bait swapping logic 2024-02-22 23:57:05 -08:00
jeffw773 a7b28ed936 - Added some wip fishing sounds 2024-02-22 23:19:25 -08:00
jeffw773 96fce55688 - added some additional fishing spawn pool pokemon 2024-02-22 22:15:27 -08:00
apion 809f1aeca3 Got incremental pokedex updates working 2024-02-23 01:06:56 -05:00
apion dfa76da95e Move onBattle logic to PokedexHandler 2024-02-23 00:07:36 -05:00
apion 776883c96d Small cleanup 2024-02-22 23:44:19 -05:00
Lily 85daf496d8 changes to pokerod item lang 2024-02-22 23:16:09 -05:00
JPAKx4 c5c58c0c60 Added events in PokedexHandler that update the server and client side pokedexes and added an optimization to track when a PokedexEntry was actually changed to reduce how much is sent on updates 2024-02-22 21:50:29 -06:00
Paul 7655ddb25b More AI work for NPCs, im lernings 2024-02-23 12:16:10 +10:00
JPAKx4 9861877f45 Merge remote-tracking branch 'origin/its-dexter-time' into its-dexter-time 2024-02-22 19:41:27 -06:00
apion 338a312485 Darken icon for encountered only mons 2024-02-22 20:14:32 -05:00
JPAKx4 a3b2bed484 Merge remote-tracking branch 'origin/its-dexter-time' into its-dexter-time
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/pokedex/Progress.kt
2024-02-22 19:00:34 -06:00
JPAKx4 fa2ac5d984 Refactored packages for pokedex networking 2024-02-22 19:00:02 -06:00
apion 951676e6bf Added icon to pokemon who have been encountered before 2024-02-22 19:56:33 -05:00
Plastered_Crab 7b4b498877 - All but 6 berries are implemented for bait (save me) 2024-02-22 15:52:17 -08:00
Plastered_Crab 0ee32c7fd3 - Most of the baits work now (I am so tired) 2024-02-22 14:44:47 -08:00
Plastered_Crab 2c2c1b0cf4 - More groundwork for bait 2024-02-22 09:30:46 -08:00
JazzMcNade 49095f73d5 Fainted Pokemon no longer display on the target selection. Added the ability to cancel the previous action in a double battle. 2024-02-22 00:17:20 -06:00
apion 15940ff0a6 Added Pokedex store, plus added tracking of wild pokemon encounters 2024-02-22 01:00:42 -05:00
jeffw773 218edf680b - Ground work for baits having effects on fishing 2024-02-21 21:35:21 -08:00
apion bec608be96 Refactored storage system to make adding more types of stores easier. 2024-02-21 22:55:09 -05:00
Plastered_Crab 7598a0dacc - Updated assets for rods 2024-02-21 18:33:25 -08:00
Plastered_Crab 7327a4ddb5 - Bait can be removed and swapped out on the bobber 2024-02-21 11:44:21 -08:00
Plastered_Crab f1d3e7b12b - Bait can now be applied to the fishing bobbers 2024-02-21 11:09:53 -08:00
tmetcalfe89 8dfbe8c60e last println gone 2024-02-21 09:12:32 -08:00
jeffw773 410ea6be87 - Tweaked line colors and started on bait testing 2024-02-20 23:08:48 -08:00
Plastered_Crab 399dfc33c5 - Added Beast Rod (blue string variant) 2024-02-20 17:05:20 -08:00
tmetcalfe89 8d81432519 leftover printlns *closes door quietly behind him* 2024-02-20 16:22:37 -08:00
tmetcalfe89 6a9662a514 cleaning up after myself 2024-02-20 16:16:29 -08:00
tmetcalfe89 15f65ad714 scaled back the scope and accommodated the same stores as looking by pokemon 2024-02-20 16:08:38 -08:00
Plastered_Crab 26e39bb37d - Altered the trajectory of reeled in pokemon 2024-02-20 15:17:11 -08:00
Plastered_Crab 4ff7df63c0 - Fixed colored fishing lines for cosmetic rods and fixed line not breaking when swapping to another rod 2024-02-20 14:45:39 -08:00
tmetcalfe89 1d209bab40 I should test before push 2024-02-20 10:46:44 -08:00
tmetcalfe89 9198dbb51e back to an interface with ye 2024-02-20 10:43:54 -08:00
tmetcalfe89 9ce6e51f55 prototype for splitting one question into two 2024-02-20 10:34:19 -08:00
jeffw773 1d1f749d6d - Added cast predicates and JSON features to each remaining cosmetic rod 2024-02-20 01:36:14 -08:00
Plastered_Crab d6e4b9c1a6 - Added other rods to the CobblemonItems list 2024-02-19 17:19:56 -08:00
apion 15d3ee0d49 Data-packable fishing rods kind of 2024-02-19 19:56:22 -05:00
Plastered_Crab de0ed1ab41 - Added crafting table recipes for cosmetic rods 2024-02-19 15:12:47 -08:00
Lily 81d930afae poke rod sync stuff (not fully working atm) 2024-02-19 15:37:30 -05:00
Plastered_Crab b83d75f30f - More Attempts at setting ball used for bobber and line color for rod during registry 2024-02-19 11:42:04 -08:00
Plastered_Crab 5814c1a5d6 - Attempts to get each ball rendered correctly for each rod (still needs work) 2024-02-19 10:10:57 -08:00
jeffw773 a45fec50a4 - Added fancy cosmetic Rods for each pokeball type 2024-02-18 22:51:05 -08:00
JazzMcNade 2ffe107789 Added primitive targeting. Fixed an issue in which the client would attempt to give orders to a fainted slot. 2024-02-18 23:47:01 -06:00
jeffw773 576b6ea767 - implemented test Magikarp animations + added test hook to Bobber 2024-02-18 18:05:16 -08:00
Paul dd6271ceed Merge remote-tracking branch 'origin/main' into npcs 2024-02-19 11:35:40 +10:00
jeffw773 792287cb5a - added new Magikarp models/textures/animations 2024-02-18 14:44:11 -08:00
Lily 42ad084dbe pokerod assets 2024-02-18 16:24:20 -05:00
jeffw773 b9bd61f3dc - fishing line connects to bobber much better now 2024-02-18 01:04:41 -08:00
jeffw773 c6d6f98d03 - fishing line connects to bobber much better now 2024-02-18 01:03:28 -08:00
jeffw773 abbd17faf7 - Pokeball Bobber now casts with more controlled random pitch/yaw amounts and also rotates upright when it hits water 2024-02-18 00:29:21 -08:00
jeffw773 c159137a70 Merge remote-tracking branch 'origin/display_case' into sega_bass_pro_fishing_2 2024-02-17 22:54:08 -08:00
jeffw773 03628631f7 - Pokeball bobber now rotates upwards when bobbing in water 2024-02-17 11:50:37 -08:00
jeffw773 e5e61df4b2 Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/entity/PokeBobberEntityRenderer.kt
2024-02-17 10:31:26 -08:00
Lily f07c4bf5b1 refactored fishing bobber variable names to be more readable instead of the single-letter names that mc gives us 2024-02-17 11:31:38 -05:00
Lily 0e3fd520f0 fixed naming to be more consistent with vanilla textures 2024-02-17 11:23:08 -05:00
jeffw773 935f3100d2 - Pokeball Bobber now slows down fast in water (due to water friction) and has a random spin applied when casting 2024-02-16 22:12:07 -08:00
Lily 8b32764ce3 pokerod smithing template assets 2024-02-17 00:14:26 -05:00
Lily 3e5a57ea20 pokerod now slowly stops spinning 2024-02-16 23:35:34 -05:00
Plastered_Crab 6ee94aa55b - Pokeball Bobber now spins when cast and stops spinning on land, needs fixed for water surface 2024-02-16 17:01:07 -08:00
Paul 05e7e1448b Removed redundant function 2024-02-17 10:51:10 +10:00
Lily bd5185e69e Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-02-16 19:31:40 -05:00
Lily 5e8df4609b started bobber rendering 2024-02-16 19:31:21 -05:00
Plastered_Crab 289d1474a6 - Beeeeg Whiscash has been added to fishing spawn chances 2024-02-16 14:54:52 -08:00
Plastered_Crab e4604c0d13 - Wooper (Heart variant) is now fully implemented for fishing 2024-02-16 14:24:31 -08:00
Tyzillion d4f91fa945 Wooper Heart Fix. <3 2024-02-16 16:53:53 -05:00
Plastered_Crab 5c52a9a31a - Started Implemented Wooper (heart form) to be added to the fishing chance pool 2024-02-16 13:19:57 -08:00
Plastered_Crab db2efcb48e - added new spawn conditional for lureLevel. Variants of Karp can now only have a chance to appear at certain Lure levels 2024-02-16 10:32:55 -08:00
Plastered_Crab 3bcbe2fb45 - Incorporated Pokerod Treasure loot table and player will physically reel in pokemon under 200 lbs 2024-02-16 09:32:01 -08:00
Paul c7202cc869 Fixed magikarp jump pattern spawn file 2024-02-16 11:34:40 +10:00
Lily 269e18786b Merge remote-tracking branch 'origin/sega_bass_pro_fishing_2' into sega_bass_pro_fishing_2 2024-02-15 19:40:14 -05:00
Lily bd79a4ecfb pokerod smithing template (needs some more assets but should be functional) 2024-02-15 19:39:49 -05:00
Plastered_Crab 3c3a8b1af9 - Pokerod now cannot stack and has same durability as vanilla fishing rod 2024-02-15 16:07:54 -08:00
Lily 11e2ed34e5 Merge branch 'main' into sega_bass_pro_fishing_2
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonItems.kt
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/client/CobblemonFabricClient.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/client/CobblemonForgeClient.kt
2024-02-15 18:54:42 -05:00
Plastered_Crab 1500d6cdf1 - All Magikarp Jump variants implemented and new item loot tables started 2024-02-15 14:59:18 -08:00
Plastered_Crab acbbe2a1ba - Start to JUMP variants spawning properly when fishing 2024-02-14 16:42:58 -08:00
Plastered_Crab 0fe6bc918c - Adding Magikarp JUMP addon variants into Base mod 2024-02-14 14:57:27 -08:00
Plastered_Crab d399b3e29a - Magikarps now get reeled in at good distances in front of player 2024-02-14 14:20:32 -08:00
JazzMcNade f2f6c3d0ef Added UI endpoint to initiate a double battle. Added primitive battleFormat selection for BattleChallengePacket 2024-02-14 00:35:24 -06:00
Plastered_Crab acc6f119e1 - Magikarps getting reeled in now land in front of the player instead of behind the player (for battle reasons) 2024-02-13 16:45:22 -08:00
Plastered_Crab 932a2c375c - Begin different reel-in trajectories for fishing up Magikarps 2024-02-13 14:46:42 -08:00
Paul 1d3de659a8 Conflicty resolvo 2024-02-11 12:14:51 +10:00
Paul 9e5879edd3 Put molang back 2024-02-11 12:01:39 +10:00
Paul 4f71340ef8 Conflict stuff 2024-02-11 11:59:40 +10:00
Paul b5c4863e20 Setup saving for NPC edit UI 2024-02-11 11:38:28 +10:00
Paul a3eff4b195 Merge branch 'move-animations' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/PokemonClientDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/PokemonRenderer.kt
2024-02-10 16:12:26 +10:00
Nick 142eebe9e6 Apply model predicates, starting with Pokerod 2024-02-09 22:07:43 -08:00
jeffw773 36f19c9180 - Xp is rewarded to player for fishing up Pokemon 2024-02-09 21:15:10 -08:00
Paul 168e034daf Removed some more dead code 2024-02-10 13:28:56 +10:00
Paul 827e651b22 Removed some dead code 2024-02-10 12:15:37 +10:00
Paul fc34312bbb Crucial all-important fix (may change the world as we know it) 2024-02-10 12:15:14 +10:00
Paul 53261b3274 Removed dead code 2024-02-10 11:40:35 +10:00
Paul 9c3a38657c Merge remote-tracking branch 'origin/main' into move-animations 2024-02-10 11:37:57 +10:00
Paul 656487c868 Oops don't remove that 2024-02-10 11:36:36 +10:00
Paul d491f16aff Merge remote-tracking branch 'origin/main' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/fossil/FossilModel.kt
2024-02-10 11:31:10 +10:00
Paul 29a5b4931d Changelog 2024-02-10 11:30:47 +10:00
Paul 42fdcc740e The default target locator would probably work as a default special_attack locator 2024-02-10 11:27:20 +10:00
Paul 3bfc3ca425 Approximate the target locator for pokemon without that locator in the model 2024-02-10 11:19:28 +10:00
Paul 82682c3710 Merge remote-tracking branch 'origin/main' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
2024-02-10 10:37:12 +10:00
jeffw773 beb8fed6bd - Pokeball Bobber now renders correctly when cast out with Pokerod
- Luck of the Sea and Lure get read correctly from the rod and factor into the spawn bucket chosen
2024-02-09 14:17:13 -08:00
jeffw773 142284a17c - Pokemon rarity is altered by Luck of the Sea 2024-02-08 21:18:41 -08:00
Paul 261850cc9f Early work on NPC editor 2024-02-09 13:47:40 +10:00
jeffw773 f1ea86362a - Fixed fishing spawns being able to check if sky is actually visible.
- added isOcean to biomes to Magikarp
2024-02-07 18:28:42 -08:00
Paul d1772b0241 Merge branch 'amo/sendout-upgrade' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
2024-02-04 14:46:04 +10:00
Paul ec3361ad91 Added basic fishing spawn detail for Magikarp and use the world pool for fishing because ehhh 2024-02-03 12:16:53 +10:00
Paul ca7c36ce15 Added trigger spawning with a fishing implementation 2024-02-03 12:13:38 +10:00
jeffw773 f7c73728d7 - Added some newer spawning stuff and added battle initiation after fished up mon 2024-02-02 16:38:15 -08:00
jeffw773 1992a23edc Merge branch 'main' into sega_bass_pro_fishing_2 2024-02-02 13:39:02 -08:00
Paul 4bb2564b80 Merge branch 'amo/sendout-upgrade' into move-animations 2024-02-02 14:26:44 +10:00
Paul 4ab72dd0d9 Added MoLang scrip framework 2024-02-02 11:31:42 +10:00
Paul 7f6eb452be Moved NPCs over to JSON posers and improved declaration of label exclusions in primary animations 2024-01-27 11:08:01 +10:00
Paul 0afe50c883 Some fixes to have NPCs use the send out animations 2024-01-26 12:59:08 +10:00
Paul a74499a14b Conflict issues 2024-01-26 11:07:23 +10:00
Paul e6ff24072f Merge branch 'move-animations' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/net/serializers/IdentifierDataSerializer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/scheduling/SchedulingFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockStatefulAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/PokemonRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobblemonDataProvider.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/DataKeys.kt
2024-01-26 10:51:47 +10:00
Paul 7693d22e58 Why is there a .ignored folder 2024-01-25 19:31:25 +10:00
Paul f3544f9cdf Updated inbuilt posers for new animation system stuff 2024-01-25 19:30:44 +10:00
Paul 9f7800b995 Mountains of remaining work on move animations system 2024-01-25 19:10:41 +10:00
Paul 022c8ed499 Merge branch 'amo/sendout-upgrade' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/PokemonClientDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokeball/PokeBallModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/JsonPokemonPoseableModel.kt
2024-01-19 13:50:41 +10:00
jeffw773 dad28135cc - Brief changes to particle count based on rarity reeled in 2024-01-18 14:32:43 -08:00
jeffw773 e41d13dd53 - Pokerod now uses config values for rarity buckets and access biome spawn pools 2024-01-14 23:02:33 -08:00
jeffw773 64cae53d82 - Pokerod foundation laid out for having chance to spawn Pokemon instead of getting item as well as rarity chance started 2024-01-14 00:11:12 -08:00
dhi_holo c9bf0bd8d7 Merge branch 'sega_bass_pro_fishing_2' of https://gitlab.com/cable-mc/cobblemon into sega_bass_pro_fishing_2 2024-01-14 13:36:53 +10:00
dhi_holo 97d2047aee It's a Tool, It's a Rod
makes pokerod be held correctly, and adds second model file for the cast variation, when that is implemented.
2024-01-14 13:36:04 +10:00
jeffw773 811f8abed7 - Added override for model of pokerod when cast 2024-01-13 19:27:22 -08:00
jeffw773 ab02a54f28 - Finally the Pokerod is starting to work! (it is backwards tho) 2024-01-13 19:08:36 -08:00
jeffw773 6e0c1aefcc - More testing fishing code for pokerod 2024-01-13 13:55:02 -08:00
jeffw773 e887b6c43c - Some code for fishing testing again 2024-01-13 12:16:38 -08:00
jeffw773 25172c2bc9 - Some code for fishing testing 2024-01-13 11:23:38 -08:00
jeffw773 929b90173a - Some code for fishing testing 2024-01-12 11:58:02 -08:00
jeffw773 70a65f6ffe - Testing code 2024-01-12 07:39:21 -08:00
jeffw773 db7d3f01d8 - Starting implementation on fishing 2024-01-12 07:39:20 -08:00
Paul 08565a9823 Brought fossils into the new molang/animation changes 2024-01-12 10:01:02 +10:00
Paul e11245f609 Merge remote-tracking branch 'origin/main' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/molang/ExpressionLike.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/molang/MoLangFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/molang/SingleExpression.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/ClientMoLangFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokeball/PokeBallPoseableState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/config/CobblemonConfig.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/Poseable.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MiscUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MoLangExtensions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/adapters/ExpressionLikeAdapter.kt
2024-01-08 16:17:56 +10:00
Paul b3a6d8eb27 Tried fixing a wander path issue 2024-01-08 12:30:35 +10:00
Paul 093c3683c5 Merge remote-tracking branch 'origin/main' into npcs 2024-01-07 14:04:45 +10:00
Paul 2b4b9ca5dd Setup and foundation work on NPC entity AI 2024-01-07 12:32:25 +10:00
Paul ea70d27f87 Merge remote-tracking branch 'origin/main' into npcs 2024-01-06 10:37:21 +10:00
Paul 5487b81f10 Improved rendering of reference faces and NPCs in dialogue GUI 2024-01-06 10:36:37 +10:00
Paul 96b8aeb5b8 Added NPC face and dialogue scripty stuff woo 2024-01-05 16:00:03 +10:00
Paul bf1520b1b4 Fixed NPC recalling logic 2024-01-05 11:03:09 +10:00
Paul 0f22da7ff2 Merge remote-tracking branch 'origin/main' into npcs
# 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/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobblemonDataProvider.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/DataKeys.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MiscUtils.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/adapters/MoValueAdapter.kt
2024-01-05 10:20:35 +10:00
Paul 90e39874e0 Imports mainly 2023-12-27 11:12:58 +10:00
Paul 2d5796de71 Merge remote-tracking branch 'origin/improved-transformed-parts' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2023-12-26 13:32:48 +10:00
Paul 3b152eafac Conflict resolution artifact 2023-12-26 12:12:53 +10:00
Paul 06ed354ebe Merge branch 'improved-transformed-parts' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/molang/MoLangFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/EmptyPokeBallClientDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/PokemonClientDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonServerDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/util/MoLangExtensions.kt
2023-12-26 12:09:23 +10:00
Paul caad276cbf Moved NPC's to use modern MC AI 2023-12-25 20:16:41 +10:00
Paul 093ad6329d Merge remote-tracking branch 'origin/main' into npcs 2023-12-25 11:38:58 +10:00
Paul 94d216fd7a Corrections from merging in scheduling changes 2023-12-24 21:34:52 +10:00
Paul 04c63145e1 Merge branch 'improved-transformed-parts' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonEntities.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/battles/model/PokemonBattle.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/scheduling/SchedulingFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/battles/ShowdownInterpreter.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockStatefulAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockStatelessAnimation.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/pokemon/PokemonRenderer.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/command/TestCommand.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonServerDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
#	fabric/src/main/kotlin/com/cobblemon/mod/fabric/client/CobblemonFabricClient.kt
#	forge/src/main/kotlin/com/cobblemon/mod/forge/client/CobblemonForgeClient.kt
2023-12-24 15:15:52 +10:00
JPAKx4 3704865ddb Created several classes related to creating the pokedex. DTO has been handled, but may need to change depending on functionality. Added keybind for "k", which all it currently does is display test text and print the pokedex entry class memories into a log. 2023-11-25 22:31:29 -06:00
JPAKx4 8815e8f03e Created several classes related to creating the pokedex. DTO has been handled, but may need to change depending on functionality. Added keybind for "k", which all it currently does is display test text and print the pokedex entry class memories into a log. 2023-11-25 22:00:26 -06:00
JPAKx4 a2414f9ffc Created several classes related to creating the pokedex. DTO has been handled, but may need to change depending on functionality. Added keybind for "k", which all it currently does is display test text and print the pokedex entry class memories into a log. 2023-11-25 22:00:26 -06:00
Paul 80b8cebb19 Fully integrated smooth animation transitioning into move animations 2023-11-25 17:19:19 +10:00
Paul b339081128 Merge remote-tracking branch 'origin/improved-transformed-parts' into move-animations
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/CobblemonNetwork.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/api/scheduling/SchedulingFunctions.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/entity/PokemonClientDelegate.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityModel.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/PoseableEntityState.kt
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/pokemon/gen1/CharizardModel.kt
2023-11-24 10:09:32 +10:00
JPAKx4 db8ee43fd3 Merge remote-tracking branch 'origin/main' into its-dexter-time
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/data/CobblemonDataProvider.kt
2023-11-19 16:19:21 -06:00
JPAKx4 7e755721a8 Added pokedex UI and net (very early progress) 2023-11-19 16:18:22 -06:00
Paul 506e685117 Added q.animation to poseable models molang runtime 2023-11-03 19:07:32 +10:00
Paul eceac5fa81 Substantially implemented system for action effects 2023-10-30 17:01:42 +10:00
Paul a6b5c0bfab Added support for arbitrary animation starting for poseable entities 2023-10-27 15:12:41 +10:00
Paul b1a0d4d5a7 Groundwork for effect animations 2023-10-26 18:47:32 +10:00
Paul 627d31d0cc Merge branch 'spawn-rules' into move-animations 2023-10-21 13:15:32 +10:00
Paul d9f1e3c15f Merge remote-tracking branch 'origin/main' into move-animations 2023-10-21 11:47:14 +10:00
Paul eca52623e8 Merge remote-tracking branch 'origin/main' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/pokemon/Pokemon.kt
2023-10-21 10:54:21 +10:00
Paul 10740ac1c8 Merge remote-tracking branch 'origin/main' into move-animations 2023-10-14 17:11:23 +10:00
Paul b9766486db Merge remote-tracking branch 'origin/main' into npcs 2023-10-13 18:07:42 +10:00
Paul bf6a923e2c Tracked data improvements for NPCs 2023-10-13 08:41:38 +10:00
Paul a073886bc5 Merge remote-tracking branch 'origin/main' into npcs 2023-10-09 17:04:40 +10:00
Paul 7c4749ecd1 Added variables listing to NPC class 2023-10-08 17:54:47 +10:00
Paul 76566669c6 Merge remote-tracking branch 'origin/spawn-rules' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/PokemonProperties.kt
2023-10-08 11:10:16 +10:00
Paul 5b8e673e53 Merge remote-tracking branch 'origin/main' into npcs 2023-10-07 21:29:53 +10:00
Paul f0a62d56a9 Merge remote-tracking branch 'origin/main' into move-animations 2023-10-07 14:56:49 +10:00
Paul 565a28de87 Merge remote-tracking branch 'origin/main' into move-animations 2023-10-02 20:16:34 +10:00
Paul de35a54f84 Fixes from merge from main 2023-09-26 18:02:32 +10:00
Paul 2c164685f4 Merge broken 2023-09-25 13:35:48 +10:00
Paul c3789cd620 Testcommand should spawn trainers not in the ground please thank you (also update trainer animations) 2023-08-27 11:02:03 +10:00
Paul 0905b16a48 Fixed instances of NPC Pokémon not being recalled or disappeared when the NPC dies 2023-08-27 11:01:14 +10:00
Paul 7881b14c4d Fixed NPC Pokémon persisting across restarts as if they were wild 2023-08-27 10:50:17 +10:00
Paul 49c8df2cef Polished timing of NPC sendout/recall animations, added win/loss NPC animations 2023-08-26 19:21:49 +10:00
Paul 165b51fde6 Many NPC battle improvements, including sendout/recall animations and scheduling, animation fixes 2023-08-25 22:07:09 +10:00
Paul b020f642f3 Merge branch 'main' into npcs 2023-08-22 19:56:15 +10:00
Paul 88e0bf57c8 Outlined NPC battle logic 2023-08-21 15:57:41 +10:00
Paul 2adb96c6bc Merge remote-tracking branch 'origin/main' into npcs 2023-08-20 19:30:24 +10:00
Paul 4094dfa6de Much more foundation for NPCs configuration 2023-08-19 12:53:25 +10:00
Paul 135ec86291 Basic AI for NPCs, implemented limb swing properties in molang to improve idle/walk for NPCs, fixes 2023-08-16 07:19:45 +10:00
Paul 910a8361ec Licenses 2023-08-13 21:51:15 +10:00
Paul 125f7d679f Much more NPC framework, rendering works, NPC class data registry configured 2023-08-13 21:50:45 +10:00
Paul 04abd73f35 Merge remote-tracking branch 'origin/main' into npcs
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/CobblemonClient.kt
2023-08-13 20:40:34 +10:00
Paul f3ba33f7ba More outlining for action effects 2023-05-02 19:54:18 +10:00
Paul ed4dff66b6 Tentative move particle work 2023-04-27 22:45:58 +10:00
Paul 0f16290c34 Merge remote-tracking branch 'origin/1.19.3' into npcs 2023-04-24 21:16:23 +10:00
Paul 9725c46b30 Initial work on NPCs 2023-04-03 21:14:29 +10:00
MoeBoy76 231b3d2eac Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into its-dexter-time 2023-03-03 11:44:23 +11:00
MoeBoy76 ac4d36100a updated some parts per design and added some fail-safe checking 2023-03-03 11:43:37 +11:00
MoeBoy76 2bf1c39839 Initial dex code and testing for datapacks 2023-02-24 08:38:06 +11:00
MoeBoy76 ad2c307b60 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into its-dexter-time
# Conflicts:
#	common/src/main/resources/assets/cobblemon/sounds.json
2023-02-17 11:39:00 +11:00
MoeBoy76 74ba080937 Merge branch 'main' of https://gitlab.com/cable-mc/cobblemon into its-dexter-time
# Conflicts:
#	common/src/main/resources/assets/cobblemon/sounds.json
2022-12-23 16:19:56 +11:00
8028 changed files with 193459 additions and 63953 deletions
+1
View File
@@ -3,3 +3,4 @@
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf
CHANGELOG.md merge=union
+2 -1
View File
@@ -39,4 +39,5 @@ common/src/main/resources/assets/cobblemon/showdown
common/.fabric
# MacOS
.DS_Store
.DS_Store
.kotlin/sessions/kotlin-compiler-16609242564043830292.salive
+7 -5
View File
@@ -1,3 +1,5 @@
image: amazoncorretto:21
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
@@ -19,7 +21,7 @@ build:
key: "$CI_COMMIT_REF_NAME"
policy: push
paths:
- forge/build/libs
- neoforge/build/libs
- fabric/build/libs
publish:
@@ -30,7 +32,7 @@ publish:
key: "CI_COMMIT_REF_NAME"
policy: pull
paths:
- forge/build/libs/*.jar
- neoforge/build/libs/*.jar
- fabric/build/libs/*.jar
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
@@ -49,16 +51,16 @@ deploy:
key: "$CI_COMMIT_REF_NAME"
policy: pull
paths:
- forge/build/libs/*.jar
- neoforge/build/libs/*.jar
- fabric/build/libs/*.jar
script:
- echo "Collecting artifacts..."
- mv forge/build/libs/*+*.jar ./
- mv neoforge/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/*+*.jar
# - neoforge/build/libs/*+*.jar
# - fabric/build/libs/*+*.jar
+1
View File
@@ -0,0 +1 @@
LambDynamicLights compat needs to be restored
+3
View File
@@ -0,0 +1,3 @@
### Additions
- Added the Poké Dex as a craftable item.
- Poké Dexes can be placed on lecterns.
+6
View File
@@ -0,0 +1,6 @@
### Additions
- Added `moves` option to PokemonProperties, allowing you to set the moves of a Pokémon in commands and spawn files.
- Added /spawnnpc and /spawnnpcat commands.
### Fixes
- Fixed sync issues with recently learned moves where their PP would not go down until you logout and in.
+24
View File
@@ -0,0 +1,24 @@
### Additions
- Pokémon are now animated when seen in any GUI that isn't the party GUI.
- Quirk animations can now occur for Pokémon that are shoulder mounted.
### Changes
- Improved the performance of display cases that contain Pokémon photos.
### Fixes
- Fixed some Pokémon photos in display cases flashing if the Pokémon has gender differences.
- Fixed Bidoof and Jigglypuff sleep animations stopping after some time, causing them to be 'asleep' while T-posing menacingly.
- Fixed entities not changing poses unless you're looking at them.
- Fixed cries not playing on send-out if the Pokémon is off-screen.
### Developer
- Rebuilt large swaths of the model animation code to simplify it.
- Renamed a bunch of things from %Poseable% to %Posable% because spelling.
- Renamed StatelessAnimation to PoseAnimation.
- Renamed StatefulAnimation to ActiveAnimation.
- Documented the animation system.
### Data Pack & Resource Pack Creators
- Added MoLang compatibility in the isVisible property for transformed parts.
- Added q.has_aspect('some_aspect') function to animations, posers, and entity particle effects.
- Added support for conditional pose animations.
+318 -72
View File
@@ -1,44 +1,290 @@
# Changelog
## [1.6.0 - The Bass Pro Fishing Update (Month Xth, 2024)](#1-6-0)
#### "Now that there's a fishing mechanic, the mod is actually good!"
## [1.5.1](#1-5-1)
### Additions
- Added Pokémon (and item) fishing using modified fishing rods - Poké Rods! You'll need a Poké Rod smithing template, a fishing rod, and some type of Poké Ball. Each Poké Ball makes a differently themed rod. Why not?
- Added Lure Ball functionality, increasing the catch rate of Pokémon that were caught on a fishing rod.
- Added Repeat Ball functionality, increasing the catch rate of Pokémon that are already registered as caught in a player's Pokédex.
- Added property chaining support for duplicate CustomPokemonPropertyType elements.
- Added `aspect` and `unaspect` PokemonProperty arguments (which also includes commands such as `/pokemonedit`, `/spawnpokemon`, and `/givepokemon`) to allow forcing or un-forcing an aspect on a Pokémon.
- Added `type` alternatively `elemental_type` PokemonProperty argument, this is only used for filtering and is not applied to Pokémon. Example `type=fire` would be true for Charmander but false for Squirtle.
- Added support for Double Battles, Triple Battles, and Multi-battles.
- CriticalCaptures and Pokédex progress capture multiplier now work with the Pokédex.
- Added extra visuals to early berry growth stages.
- Hidden Power now displays its effective typing.
- Moves impacted by the abilities Pixelate, Refrigerate, Aerilate, Galvanize, and Normalize now display as their altered typing.
- Added Polished Tumblestone and Tumblestone Brick block sets from Tumblestone, Black Tumblestone, and Sky Tumblestone.
- Added Fire, Water, Thunder, Leaf, Ice, Sun, Moon, Shiny, Dawn, and Dusk Stone storage blocks.
- Added Eject Pack, Metronome, Protective Pads, Punching Glove, Room Service, Scope Lens, Shed Shell, Terrain Extender, Throat Spray, Utility Umbrella, Wide Lens, and Zoom Lens held items
- Moves can now be benched without specifying a replacement move, allowing for empty move slots.
- Moves learned via Sketch now persist after battle.
- Added `stonjourner_henge_ruins`, `luna_henge_ruins`, and `sol_henge_ruins` structures.
- Added a `battleInvulnerability` gamerule to make players invulnerable to any damage during a battle.
- Added a `mobTargetInBattle` gamerule to exclude players from being targeted by mobs during a battle.
- Added battle log messages for switching out Pokémon.
- Added Evolution particles and sounds for Pokémon that are sent out when evolution is started.
- Added a Nurse profession that can be unlocked by having villagers claim a healing machine block.
- Added pokecenters to all 5 village types.
- Added a `natural` block state property for the healing machine block; when property is set to true, the block will have a different texture and drop an iron ingot instead of itself.
- New config setting `displayEntityNameLabel` and `displayEntityLabelsWhenCrouchingOnly` to control what and when is displayed for the pokemon label
- `/freezepokemon` command to pause a Pokémon's animation at a specific point in time.
- Added `no_ai` and `freeze_frame` options to the `/spawnpokemon` command.
- Added shiny Pokémon particles with sound effects.
### Pokémon Added
#### Gen 2
- Ledyba
- Ledian
- Sunkern
- Sunflora
- Wobbuffet
- Girafarig
#### Gen 3
- Wynaut
#### Gen 8
- Cramorant
#### Gen 9
- Farigiraf
### Added cries to the following Pokémon
- Timburr, Gurdurr, Conkeldurr
- Golett, Golurk
### Changes
- Buffed Dusk Ball catch multipliers: Increased multiplier to 3.5 (from 3.0) in light level 0. Increased multiplier to 3.0 (from 1.5) in light levels 1-7.
- Altered the item model for Medicinal Leeks and Roasted Leeks to be held like sticks and other rod items.
- Adjusted some berry balance values like yield and growth times.
- Adjusted volumes of sounds made by Display Cases, Berry Bushes, Energy Root, Medicinal Leek, Vivichoke, Mints, Revival Herbs and Gilded Chests.
- Changes to mulch buffs/durations.
- Dreepy is now shoulder mountable.
- Updated potion sprites.
- Weedle, Caterpie, Spearow, Smoochum, Mew, Murkrow, Larvitar, Taillow, Plusle, Minun, Beldum, Starly, Buneary, Combee, Pachirisu, Pidove, Petilil, Hisui Bias Petilil, Zorua, Hisuian Zorua, Elgyem, Fletchling, Skrelp, Klefki, Fomantis, Morelull, Dreepy, Shroodle, Tatsugiri, Glimmet, and Roaming Gimmighoul are now shoulder mountable.
- Link Cable recipe has been redesigned.
- Updated sounds for Medicinal Leeks, Big Roots, Energy Roots and Revival Herbs.
- Updated UI sounds for clicking and evolving Pokémon.
- Removed the interchangeable evolution results for the first stage Hisuian starters to prevent confusion. The method still exists for stage 2 to 3, but stage 1 to 2 was not distinguishable enough for many users.
- Kakuna, Beedrill, Snorlax, Munchlax, Krabby, Kingler, and Lurantis received model updates.
- Vivillon wings will stop being clear when you remove any Vivillon related resourcepacks. The default pattern will be the meadow wings.
- Adjusted Pokémon sendout positions for single battles.
- Wild Pokémon interaction range increased to 12 blocks (from 10 blocks).
- Player trade range increased to 12 blocks (from 10 blocks).
- PvP battle range increased to 32 blocks (from 10 blocks).
- Spectate range increased to 64 blocks (from 10 blocks).
- The inventory key now closes our GUIs if they are open, mirroring how Minecraft screens usually work.
- The noise from the pasture and PC blocks being interacted with now activates Sculk sensors.
- Updated dialogue GUI assets with proper assets.
- Updated party switching interface when in battle.
- Relic coin pouches can now be waterlogged.
- Pokemon Name (and level) labels are now only visible when crouching by default, set the `displayEntityLabelsWhenCrouchingOnly` to `false` to always them even when not crouching
- The "Press R to start battle prompt" will now disappear after a player's first battle has been won
- The default number of digits for the Pokédex number in the summary has been increased, from 3 to 4.
### Fixes
- Scaled down Amaura's fetus model to avoid clipping through the tank while animating.
- Fixed Cubone's cry not having a sound.
- Fixed the Seafloor spawning context not being a usable context.
- Fixed Pokemon spawning in non-full blocks like slabs.
- Fixed Gilded Chests not dropping the chest itself when broken, only the contents.
- Fixed Pokémon losing their Hidden Ability through evolution if the middle stage did not have a Hidden Ability.
- Hidden Power no longer plays the water type action effect (It now plays the normal type action effect).
- Fixed Chimchar and Monferno T-posing whenever they sleep.
- Fixed the Magby line not having any placeholder walk animations.
- Fixed Duskull and Dusclops using skylight levels for their nether spawn data. There is no sun in the Nether!
- Fixed Hisuian Zoroark using base Zoroark stats.
- Fixed Bellossom clipping into the player head when shoulder mounted.
- Fixed Shroomish's look range to prevent it from looking higher than it should.
- Fixed Crumbling Arch not blending in with the world.
- Fixed Energy Root applying being usable on a fainted Pokémon.
- Fixed Pokémon entity not spawning when starting a battle while recalling said Pokémon.
- Fixed species comparison not using namespace for both sides in `PokemonProperties.isSubsetOf`.
- Fixed `PokemonProperties#asString` prefixing nicknames with a '$'.
- Fixed PC not saving when Pokémon was changed outside.
- Fixed shearable Pokémon not dropping correct wool colors.
- Fixed pasture spawning Pokémon inside solid blocks when closest spawning position is blocked off.
- Fixed Tumbling Down advancement not being granted by tumblestone variants.
- Improve error handling when loading spawn sets to ensure invalid configurations don't crash the server.
- Fixed empty `JsonPlayerData` files resulting in players being unable to join server/world.
- Evolution notification and UI sound is now correctly playing (again).
- Fix Starter prompt not showing up.
- Fix evolution now granting Pokédex entries.
- Fix Pokédex crash when a form is looked up without ever seeing the "normal" form.
- Fixed owned poké balls floating upwards if pausing mid-transition.
- Fixed all mouse buttons working for Battle UI navigation (now it's only primary/left click).
- Fixed trading Pokémon setting their friendship to 0 instead of the base value.
- Fixed a scenario where a Pokémon that rolled to spawn with a special Tera type sometimes has a Tera type that is already a part of their natural typing.
- Fixed PokemonProperty argument suggestions for `tera` and `tera_type` not suggesting `stellar`.
- Fixed being able to stack Relic Coin Pouches on top of each other.
- Fixed Model loader generating misleading crash-reports when client is crashing.
- Big Roots and Energy Roots now share the same sounds as intended.
- Fixed sounds made by blocks playing at a lower pitch than intended.
- Fixed Chimchar and Monferno T posing whenever they sleep.
- Fixed the Magby line not having any placeholder walk animations.
- Fixed Duskull and Dusclops using skylight levels for their nether spawn data. There is no sun in the Nether!
- Fixed Hisuian Zoroark using base Zoroark stats.
- Fixed Bellossom clipping into the player head when shoulder mounted.
- Fixed Shroomish's look range to prevent it from looking higher than it should.
- Fixed Maushold's faint animations not playing. It's sadder than Tandemaus!
- Fixed Slowking's battle idle.
- Fixed Grafaiai's walk speed to prevent model sliding.
- Fixed reviving items throwing an exception when used in battle.
- Fixed messages for Focus Sash, Confusion, Mummy, Ice Face, Own Tempo, and Revive.
- Improve error handling when loading spawn-sets to ensure invalid configurations don't crash the server.
- Fixed `crumbling_arch_ruins` from generating a giant cube of air and removed the chest.
- Fixed possible crash on large population servers due to concurrent access of data.
- Quickly sending out and recalling Pokémon now looks smoother and can no longer be spammed to cause desync issues.
- Pokémon are now invulnerable during sendout animation and intangible during recall animation.
- Pokémon are now invincible during sendout animation and intangible during recall animation.
- Scrolling with party keybinding now behaves properly when using high scroll speed or scroll sensitivity.
- Fixed battle log GUI flashing when Battle GUI is opened.
- Bag Items used during a turn will now be refunded if the battle ends before the next turn begins.
- Pokémon whose current owner is not its Original Trainer now gains extra experience.
- Fixed Fossil Resurrection advancement not being granted.
- Fixed village generation caps not applying for berry farms. You were not meant to see more than two berry farms per village!
- Fixed the Ice Face ability activation being displayed incorrectly in a battle
### Developer
- `SpawnCause` is now an implementation of `SpawningInfluence`.
- Many types related to `Pokemon` including itself now have dedicated `Codec`, please migrate to them from the NBT/JSON/PacketBuffer write/read methods.
- `TeraTypes` now implements `Iterable`.
- `PokemonBattle` now starts on turn 0.
- SpawnCause is now an implementation of SpawningInfluence.
- Renamed Pokemon.hp to Pokemon.maxHealth to make it clearer. Backwards compatibility is provided but it is an active deprecation, please migrate away from it.
- Many types related to ``Pokemon`` including itself now have dedicated ``Codec``, please migrate to them from the NBT/JSON/PacketBuffer write/read methods.
- Serialization of PokemonStores and Pokemon themselves now require registry access, which will break some sidemods. This sucked for us more than it will suck for you! If you have a world or player instance, you can get it from there.
- ``TeraTypes`` now implements ``Iterable``.
- PokemonBattle now starts on turn 0.
- All sounds related to evolving Pokémon have been moved to the "sounds/evolution" folder.
- Added `forcedAspects` to Pokémon to make it easier to easily add basic aspects to a Pokémon in a way that persists. We already know that everyone is going to overuse this.
- Made the `Pokemon.aspects` setter private. This could technically break side-mods but if you are affected by this then you were using it wrong! Use `Pokemon.forcedAspects` to fix it.
- Cobblemon's main logger is properly static now.
- PokemonEntity.enablePoseTypeRecalculation can be used to disable automatic pose type recalculation.
### Data Pack & Resource Pack Creators
- Added support for "shedders" similar to Shedinja's evolution logic.
- Fixed the placeholder `WingFlapIdle` animation so the wings are not rotating opposite to each other.
- 'player' type dialogue faces can now be explicitly stated so that NPC mods that use fake players can show in dialogue portraits.
- Added `isLeftSide` field for dialogue faces. This determines what side of dialogue box the portrait is on.
### Localization
- Updated translations for:
- Czech, German, Greek, Spanish, Mexican Spanish, French, Canadian French, Hungarian, Italian, Japanese, Korean, Dutch, Polish, Portuguese, Brazilian Portuguese, Russian, Ukrainian, Simplified Chinese, and Traditional Chinese
- Migrated translation project to Weblate at https://lang.cobblemon.com/projects/cobblemon/mod/
## [1.5.2 (May 27th, 2024)](#1-5-2)
### Fixes
- Fixed Wooloo and Dubwool dyeing making your game start dying. Only if you do it on a server.
- Fixed Gimmighoul causing PCs and parties to look glitched out, also only in a server.
- Fixed players being able to dye other people's sheep Pokémon.
## [1.5.1 (May 27th, 2024)](#1-5-1)
### Additions
- Added unique send out particles for Cherish, Dream, Beast, and Ancient Origin balls.
- Made Wooloo and Dubwool dye-able like sheep
- Made Wooloo and Dubwool dye-able like sheep. So cute!
- Added stat up and down particles.
- Most status effects now have particles! These include: Paralysis, Poison, Sleep, Confusion, Infatuation.
#### Move Particle Effects
- Confusion
- Cotton Guard
- Growl
- Ice Punch
- Fire Punch
- Thunder Punch
- Minimize
- Quick Attack
- Protect
- Swords Dance
- Sand Attack
- Poison Powder
- Sleep Powder
- Stun Spore
- Powder
- Rage Powder
- Spore
- Thunder Wave
### Changes
- Sounds for Relic Coin Sacks have been correctly renamed. Relic Coin Pouches received new sounds for breaking and placing.
- Readjusted Petilil portraits
- Changed "dimensions" spawn condition to check with dimension IDs instead of effects, so custom dimension IDs can be used.
- Readjusted Petilil portraits so they fit a bit better.
- Improved handling of Pokémon taken from the Restoration Tank block to be a bit more stable.
- Made Mulch cheaper to craft.
### Fixes
- Fixed a bug in which adding organic material to the fossil tank via right click was adding the full count of the stack currently in hand
- Fixed a bug in which adding organic material to the restoration tank via right click was adding the full count of the stack currently in hand - but only taking 1 of the item.
- Fixed a niche issue where some properties of entities were not initialized correctly, causing Pokémon that appeared to be level 1 until you battle them.
- Fixed Fossilized Drake being missing from the Fossils item tag.
- Fixed Gilded Chest block entity not being cleared on block break
- Fixed sherd brokenness on Forge/Supplementaries incompat
- Fixed Fossil Compartment crash with Jade / WAILA forks
- Fixed PCStore#resize not allowing PC boxes size reduction.
- Fixed Gilded Chest block entity not being cleared on block break, creating spooky ghost blocks. Old ones can be fixed by placing something like a furnace where it was, then breaking the furnace.
- Fixed sherd brokenness on Forge.
- Fixed Supplementaries incompatibility.
- Fixed Fossil Compartment crash with Jade / WAILA forks.
- Fixed pasture block PC lookups when the player is offline.
- Fixed an untranslated battle message that occurs when using a move that just ran out of PP (e.g. Fire Blast that just got spited mid-turn).
- Fixed held items being eaten even when the held item evolutions are already unlocked.
- Fixed Hisuian Decidueye not being Grass/Fighting
- Fixed both Decidueye forms learning both Triple Arrows and Spirit Shackle
- Fixed Pineco being unable to evolve into Shulker Forretress
- Fixed Kabutops T-posing when underwater. It still does not have proper swimming animations yet though.
- Fixed Hisuian Decidueye not being Grass/Fighting.
- Fixed both Decidueye forms learning both Triple Arrows and Spirit Shackle.
- Fixed Pineco being unable to evolve into Shulker Forretress.
- Fixed Kabutops T-posing when underwater. It doesn't have proper swimming animations yet, though.
- Fixed Pidgey's missing walk animation.
- Fixed recoil evo condition.
- Fixed issue where poser debug tools didnt work on JSON posers
- Fixed issue where gilded chests dont close when going far away
- Fixed Cyndaquil's hidden flames clipping if it was swimming.
- Fixed Chimecho and Chingling being unable to spawn near bells. They are meant to!
- Fixed Tyrantrum and Wailord Party Overlay models peeking through the chat box. It was kinda funny though.
- Fixed hitbox sizes for Seedot, Nuzleaf, and Shiftry.
- Fixed Budew and Lechonk sliding if they walked for too long.
- Fixed Shedinja T-posing in battle.
- Fixed recoil evolution condition not working, making things like Basculegion unobtainable.
- Fixed issue where poser debug tools didn't work on JSON posers.
- Fixed issue where gilded chests don't close when going far away.
- Fixed issue where the restoration tank's renderer was reading old data, making it appear wrong.
- Fixed issue where the lights on the restoration tank would not animate if it was facing east. Very specific.
- Fixed client crash with the fossil machine when updating block state on a chunk that is unloaded in the client. I don't understand this but the devs are sure that all of those are real words.
- Fixed Restoration Tank crash with Create upon the tank block's destruction.
- Fixed Restoration Tank over consuming items when interacting with Create blocks.
- Fixed addons that add very many moves to a learn-set causing disappearing Pokémon (visually) issues on servers.
- Fixed Hyper Cutter and Big Pecks incorrectly stating that it prevented accuracy from being lowered in battle.
- Fixed missing messages for Rough Skin and Iron Barbs in battle.
- Fixed a bug where sometimes Pokémon sendouts wouldn't create an entity, or the entity would spawn at 0 0 0 which is not a good place for a Pokémon to be. Or any of us, really.
- Fixed issue in which a locked gilded chest would animate to the open state when the client fails to open it, such as when it is locked.
- Fixed a bug where aspects of a form would not be properly reflected on form changes (eg. Normal -> Hisui).
- Fixed generic battle effect sounds not sounding the way they were intended to.
- Fixed particle effects often not having access to some specific entity functions from MoLang.
- Fixed particles sometimes lasting a single tick too long, causing (very quick) visual glitches.
- Fixed particle rotations being inverted.
- Fixed particle events not spawning at the instigating particle's location.
- Fixed a bunch of spam during world generation.
- Fixed a bug in which throwing a Poké Ball at a player owned Pokémon with the ability Illusion would reveal its true species. Hilarious meta strategy.
- Fixed root-part animations not working for JSON posed Pokémon. You didn't notice this but if we didn't fix this in this update then if you use Quick Attack a lot you'd have seen a whole lot of [this](https://cdn.discordapp.com/attachments/1076993968803434627/1242660506783715369/Minecraft__1.20.1_-_Singleplayer_2024-05-21_22-08-17.mp4?ex=66549408&is=66534288&hm=ff95ee293eb15634fd63e6546534ea279540a1c892605e8d561593ca2c5600c5&) which is damn funny but very unintended.
### Developer
- Changed SpawnAction#complete to return a nullable generic R (the spawn action result) instead of a boolean. More information this way.
- Added an event when a fossil is revived, with or without a player.
- Changed SpawnAction#complete to return a nullable generic R (the spawn action result) instead of a boolean. Provides more information this way.
- Added an event that fires when a fossil is revived, with or without a player.
- Added IVS and EVS property extractors.
- Fixed PCStore#resize not allowing PC boxes size reduction.
### Data Pack & Resource Pack Creators
- Added support for MoLang conditions for quirks and poses.
- Changed the AttackDefenceRatio requirement to StatCompare and StatEqual.
- Changed the AttackDefenceRatio requirement to StatCompare and StatEqual. There is some backwards compatibility for AttackDefenceRatio, though.
- Changed "dimensions" spawn condition to check with dimension IDs instead of effects, so custom dimension IDs can be used.
- Added parametric motion and rotation support to particle effects.
- Added entity_scale as a molang var for particles (likely only applicable to Pokemon)
- Added support for primary quirk animations using the following format:
`JSON
{
"quirks": [
"q.bedrock_primary_quirk('<pokemon>', '<animation>', <minSeconds>, <maxSeconds>, <loopTimes>, '<excludedLabels>', q.curve('<waveFunction>'))"
]
}
`
- Added support for custom stashes, similar to Gimmighoul's coin and scrap stashes.
### Localization
- Updated translations for:
- Simplified and Traditional Chinese.
- Spanish.
## [1.5.0 - The Ruins and Revival Update (May 12th, 2024)](#1-5-0)
#### "You're telling me that Mojang has added archaeology to the game? Hmm... that gives me an idea."
@@ -338,7 +584,7 @@ These are our compromise for having both regular and Hisuian forms of these Pok
- Fixed mod incompatibility with [Just Enough Resources](https://modrinth.com/mod/just-enough-resources-jer).
- Fixed mod incompatibility with [Visual Overhaul](https://modrinth.com/mod/visual-overhaul).
- Fixed an issue that allowed Pokémon to spawn on rails.
- Fixed the data set on Pokémon when abilities are given via properties such as in ``/spawnpokemon``.
- Fixed the data set on Pokémon when abilities are given via properties such as in `/spawnpokemon`.
- Fixed Pokémon sometimes losing hidden abilities when evolving. This fix will only take effect for newly created Pokémon because of technical reasons that were explained to me but which I then forgot.
- Fixed capture messages not displaying in battle.
- Fixed the Illusion ability causing the wrong Pokémon to be targeted in battle.
@@ -351,17 +597,17 @@ These are our compromise for having both regular and Hisuian forms of these Pok
### Developer
- Significantly changed the way the properties in PokemonEntity work. This could break some plugins (not in a big way, but changes will be needed for some things).
- Rebuilt the scheduling API to more clearly force side choices and temporal frames of reference for tasks. The developers say that how it works is cool but I stopped listening.
- Added dialogue API and data registry. This is powerful, and there is a full example in the Cobblemon mod you can trigger using /opendialogue \<username\> cobblemon:example. The example JSON is inside the data folder of the mod.
- Added dialogue API and data registry. This is powerful, and there is a full example in the Cobblemon mod you can trigger using `/opendialogue <username> cobblemon:example`. The example JSON is inside the data folder of the mod.
- Opened up the ItemDropEntry class to allow for it to be extended.
- Added a new "advancement" evolution variant that takes an advancement identifier and succeeds if the player has the advancement.
- Made the spawning API capable of non-entity spawning. You can make it 'spawn' commands if you want. Go nuts.
- Made PokemonProperties.parse more interoperable with Java. Save yourself and stop using Java.
- Added the ``HeldItemEvent``, this comes with 2 implementation ``HeldItemEvent.Pre`` and ``HeldItemEvent.Post``.
- Corrections to the ability implementation have been made that make ``Ability.forced`` function as intended and never reroll an ability for a Pokémon, please check your implementations to ensure the corrected behavior is intended for your use case.
- ``Pokemon.ability`` no longer has a public setter. Please migrate to using ``Pokemon#updateAbility``, this handles the ability coordinate storage for you when necessary.
- ``Ability.forced``, ``Ability.index`` and ``Ability.priority`` have all had their setters internalized, there is no longer any need to manually adjust these migrate to the method mentioned above to handle that process for you.
- ``AbilityChanger`` has been added to API alongside some implementations, this is subject to change as the ability capsule and patch currently only expect the traditional behaviour in the Pokémon games of 1 or 2 regular abilities and 1 hidden ability.
- ``Pokemon#rollAbility`` has been added which rerolls for a legal ability for the Pokémon.
- Made `PokemonProperties.parse` more interoperable with Java. Save yourself and stop using Java.
- Added the `HeldItemEvent`, this comes with 2 implementation `HeldItemEvent.Pre` and `HeldItemEvent.Post`.
- Corrections to the ability implementation have been made that make `Ability.forced` function as intended and never reroll an ability for a Pokémon, please check your implementations to ensure the corrected behavior is intended for your use case.
- `Pokemon.ability` no longer has a public setter. Please migrate to using `Pokemon#updateAbility`, this handles the ability coordinate storage for you when necessary.
- `Ability.forced`, `Ability.index` and `Ability.priority` have all had their setters internalized, there is no longer any need to manually adjust these migrate to the method mentioned above to handle that process for you.
- `AbilityChanger` has been added to API alongside some implementations, this is subject to change as the ability capsule and patch currently only expect the traditional behaviour in the Pokémon games of 1 or 2 regular abilities and 1 hidden ability.
- `Pokemon#rollAbility` has been added which re9rolls for a legal ability for the Pokémon.
- `docs/cobblemon-tags` tags and spawn-presets can now be auto-generated from the current tags in the Cobblemon mod with the `generateSpawnPresetList.py` and `generateTagList.py` scripts.
- `public_spawns_to_json.py` script has been added to give the powerful spawn.json generator a simplistic UI.
- Updated Showdown with Gen 9 DLC.
@@ -370,14 +616,14 @@ These are our compromise for having both regular and Hisuian forms of these Pok
### Datapack & Resourcepack Creators
- The maximum amount of fossils that can fit in the Fossil Analyzer can be adjusted in the config.
- Custom fossils can be defined using a list of items and the resulting Pokémon. An example of `aerodactyl.json`:
```JSON
`JSON
{
"result": "aerodactyl",
"fossils": [
"cobblemon:old_amber_fossil"
]
}
```
`
- Fetus models can be defined in `bedrock/fossils`.
- Fetus textures can be defined in `textures/fossils`.
- Fuel for the Restoration Machine is registered inside the `natural_materials` folder. To register more fuels, create a JSON file containing an array of objects. Each object supports the following fields:
@@ -386,10 +632,10 @@ These are our compromise for having both regular and Hisuian forms of these Pok
- `returnItem`: Identifier of an item to return to the player after consumption.
- Added 3 new item tags: `ancient_poke_balls`, `fossils`, and `tumblestones`.
- Added a spawn rules system to modify general spawning behaviour, see the [wiki](https://wiki.cobblemon.com/index.php/Spawn_Rules) for more information.
- Added dialogue datapack folder and /opendialogue command.
- Added the item tag ``cobblemon:held/leaves_leftovers`` this can be used to flag apple-like items that can create leftovers when eaten.
- Added dialogue datapack folder and `/opendialogue` command.
- Added the item tag `cobblemon:held/leaves_leftovers` this can be used to flag apple-like items that can create leftovers when eaten.
- You can now add support for dynamic lighting implementations, Cobblemon ships with a default implementation for [LambDynamicLights](https://modrinth.com/mod/lambdynamiclights) and the [Dynamic Lights Reforged](https://www.curseforge.com/minecraft/mc-mods/dynamiclights-reforged), add the following to any species or form:
```JSON
`JSON
{
"lightingData": {
"lightLevel": 14,
@@ -398,10 +644,10 @@ These are our compromise for having both regular and Hisuian forms of these Pok
"_liquidGlowModeCommentRemoveMe": "Above supports LAND, UNDERWATER or BOTH"
}
}
```
- Following up on this change ``light_source`` was removed as a possible shoulder effect due to becoming unnecessary and never having had a default implementation.
- Added the item tag ``cobblemon:ability_changers``, contains the ``cobblemon:ability_capsule`` & ``cobblemon:ability_patch`` by default.
- Added the item tag ``cobblemon:held/is_friendship_booster``, allows items to give the Soothe Bell effect of a boost of 1.5x Friendship gained, contains ``cobblemon:soothe_bell`` by default.
`
- Following up on this change `light_source` was removed as a possible shoulder effect due to becoming unnecessary and never having had a default implementation.
- Added the item tag `cobblemon:ability_changers`, contains the `cobblemon:ability_capsule` & `cobblemon:ability_patch` by default.
- Added the item tag `cobblemon:held/is_friendship_booster`, allows items to give the Soothe Bell effect of a boost of 1.5x Friendship gained, contains `cobblemon:soothe_bell` by default.
## [1.4.1 (December 23rd, 2023)](#1-4-1)
@@ -417,7 +663,7 @@ These are our compromise for having both regular and Hisuian forms of these Pok
- Mooshtank can now be milked with a bowl for Mushroom Stew.
- Updated Showdown version to use generation 9 battle data.
- Added cries to Beldum, Metang and Metagross.
- Added a /bedrockparticle command to run Snowstorm-format particle effects.
- Added a `/bedrockparticle` command to run Snowstorm-format particle effects.
- Added data for Dipplin, Fezandipiti, Munkidori, Ogerpon, Okidogi, Poltchageist and Sinistcha.
- Added additional nickname trigger "Grumm" for Inkay's evolution.
@@ -910,7 +1156,7 @@ Thank you so much to all of our community translators that bring the mod to the
- Fixed apricorn tree leaves looking gross on the 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 the `/pc` command not playing the opening sound.
- 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.
@@ -927,11 +1173,11 @@ Thank you so much to all of our community translators that bring the mod to the
- 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 because of a broken ``recoil`` evolution requirement.
- Fixed Primeape, Qwilfish and Stantler not being able to evolve because of a broken ``use_move`` evolution requirement.
- Fixed Bramblin, Pawmo, and Rellor not being able to evolve because of a broken ``blocks_traveled`` evolution requirement.
- 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 because of a broken `recoil` evolution requirement.
- Fixed Primeape, Qwilfish and Stantler not being able to evolve because of a broken `use_move` evolution requirement.
- Fixed Bramblin, Pawmo, and Rellor not being able to evolve because of a broken `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.
@@ -946,11 +1192,11 @@ Thank you so much to all of our community translators that bring the mod to the
- Added MongoDB support for storing Pokémon and Player data. Must be enabled in config, requires MongoDB core and sync drivers (4.10.0+).
- CobblemonShowdown updated to version 10.
- Generation of a battle can be set in BattleFormat.
- Pokémon now have ``teraType``, ``dmaxLevel``, and ``gmaxFactor`` properties. Gimmicks can be used during battle by adding the respective identifiers to ``keyItems`` in PlayerData: ``key_stone``, ``z_ring``, ``dynamax_band``, and ``tera_orb``. Dynamax is only supported in Gen 8 battles. Mega Evolution and Z-Power require custom held items to be added (e.g. an item with the path ``gengarite`` will allow Gengar to Mega Evolve). Currently custom Z-Crystals and Mega Stones are not supported.
- Pokémon now have `teraType`, `dmaxLevel`, and `gmaxFactor` properties. Gimmicks can be used during battle by adding the respective identifiers to `keyItems` in PlayerData: `key_stone`, `z_ring`, `dynamax_band`, and `tera_orb`. Dynamax is only supported in Gen 8 battles. Mega Evolution and Z-Power require custom held items to be added (e.g. an item with the path `gengarite` will allow Gengar to Mega Evolve). Currently custom Z-Crystals and Mega Stones are not supported.
### 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). For example, here is the converted Pidgey asset:
- ```json
- `json
{
"type": "potion_effect",
"effect": "minecraft:slow_falling",
@@ -959,18 +1205,18 @@ Thank you so much to all of our community translators that bring the mod to the
"showParticles": false,
"showIcon": false
}
```
- Renamed the ``walked_steps`` evolution requirement to ``blocks_traveled``.
`
- Renamed the `walked_steps` evolution requirement to `blocks_traveled`.
- Added support for scale in animations.
- Added support for jump keyframes (i.e. pre and post keyframes)
- Added structure spawning conditions
- Added Advancement trigger for defeating Pokémon and collecting varieties of Pokémon.
- 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 support for battle music. Sounds can be added to the ``battle.pvp.default`` and ``battle.pvw.default`` sound events.
- Added support for battle music. Sounds can be added to the `battle.pvp.default` and `battle.pvw.default` sound events.
- 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.
- Cobblemon items can now all have their own tooltips via resourcepacks. To add a tooltip, 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.
- 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.
- 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.
- Fixed faint animations not working properly in add-ons.
- Fixed non-existent species in spawn pool files causing random species to spawn.
@@ -988,7 +1234,7 @@ Thank you so much to all of our community translators that bring the mod to the
- 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 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 Pokémon(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.
@@ -1113,7 +1359,7 @@ Thank you so much to all of our community translators that bring the mod to the
- 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 `/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.
@@ -1122,18 +1368,18 @@ Thank you so much to all of our community translators that bring the mod to the
- 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.
- 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.
@@ -1146,9 +1392,9 @@ Thank you so much to all of our community translators that bring the mod to the
- 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 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``.
- 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.
@@ -1186,17 +1432,17 @@ Thank you so much to all of our community translators that bring the mod to the
- 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 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 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 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 `/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.
@@ -1231,7 +1477,7 @@ Thank you so much to all of our community translators that bring the mod to the
- 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 full resource pack and 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)).
+1 -1
View File
@@ -1,6 +1,6 @@
plugins {
id("cobblemon.root-conventions")
id ("net.nemerosa.versioning") version "2.8.2"
id ("net.nemerosa.versioning") version "3.1.0"
}
version = "${project.property("mod_version")}+${project.property("mc_version")}"
+7 -5
View File
@@ -1,8 +1,8 @@
import utilities.isSnapshot
import utilities.version
import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import utilities.isSnapshot
import utilities.version
/*
*
@@ -20,16 +20,17 @@ plugins {
id("net.kyori.blossom")
id("org.jetbrains.gradle.plugin.idea-ext")
id("net.nemerosa.versioning") version "2.8.2"
id("net.nemerosa.versioning") version "3.1.0"
}
architectury {
common("forge", "fabric")
common("neoforge", "fabric")
}
repositories {
maven(url = "${rootProject.projectDir}/deps")
maven(url = "https://api.modrinth.com/maven")
maven(url = "https://maven.neoforged.net/releases")
mavenLocal()
}
@@ -89,7 +90,8 @@ sourceSets {
property("gitCommit", versioning.info.commit)
property("branch", versioning.info.branch)
System.getProperty("buildNumber")?.let { property("buildNumber", it) }
property("timestamp", OffsetDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss")) + " UTC")
}
}
}
}
}
@@ -8,7 +8,7 @@
package com.cobblemon.mod.common.bridges;
import net.minecraft.structure.processor.StructureProcessor;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor;
public interface StructureProcessorListBridge {
void append(StructureProcessor processor);
@@ -9,9 +9,8 @@
package com.cobblemon.mod.common.client.render.models.blockbench.pose;
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 com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import java.util.Map;
/**
@@ -42,23 +41,17 @@ public interface Bone {
* @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
* @param color RGBA packed integer color value
*
* @since 1.4.0
*/
void render(
RenderContext context,
MatrixStack stack,
PoseStack stack,
VertexConsumer buffer,
int packedLight,
int packedOverlay,
float r,
float g,
float b,
float a
int color
);
/**
@@ -66,5 +59,5 @@ public interface Bone {
*
* @since 1.4.0
*/
void transform(MatrixStack matrixStack);
void transform(PoseStack matrixStack);
}
@@ -13,15 +13,12 @@ import com.cobblemon.mod.common.client.render.layer.PokemonOnShoulderRenderer;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import com.cobblemon.mod.common.pokemon.FormData;
import com.cobblemon.mod.common.pokemon.lighthing.LightingData;
import dev.lambdaurora.lambdynlights.api.DynamicLightHandler;
import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Optional;
import net.minecraft.util.Tuple;
import net.minecraft.world.entity.player.Player;
// Java class due to relying on entrypoint on Fabric side
public class LambDynamicLightsCompat {
@@ -32,46 +29,46 @@ public class LambDynamicLightsCompat {
// Make sure not to call anything Fabric specific :)
public static void hookCompat() {
// Pokémon entities
DynamicLightHandlers.registerDynamicLightHandler(
CobblemonEntities.POKEMON,
DynamicLightHandler.makeHandler(
pokemon -> resolvedPokemonLightLevel(pokemon, false),
pokemon -> true
)
);
DynamicLightHandlers.registerDynamicLightHandler(
CobblemonEntities.POKEMON,
DynamicLightHandler.makeHandler(
pokemon -> resolvedPokemonLightLevel(pokemon, true),
pokemon -> false
)
);
// DynamicLightHandlers.registerDynamicLightHandler(
// CobblemonEntities.POKEMON,
// DynamicLightHandler.makeHandler(
// pokemon -> resolvedPokemonLightLevel(pokemon, false),
// pokemon -> true
// )
// );
// DynamicLightHandlers.registerDynamicLightHandler(
// CobblemonEntities.POKEMON,
// DynamicLightHandler.makeHandler(
// pokemon -> resolvedPokemonLightLevel(pokemon, true),
// pokemon -> false
// )
// );
// Shouldered Pokémon
DynamicLightHandlers.registerDynamicLightHandler(
EntityType.PLAYER,
DynamicLightHandler.makeHandler(
player -> resolvedShoulderLightLevel(player, false),
player -> true
)
);
DynamicLightHandlers.registerDynamicLightHandler(
EntityType.PLAYER,
DynamicLightHandler.makeHandler(
player -> resolvedShoulderLightLevel(player, true),
player -> false
)
);
// DynamicLightHandlers.registerDynamicLightHandler(
// EntityType.PLAYER,
// DynamicLightHandler.makeHandler(
// player -> resolvedShoulderLightLevel(player, false),
// player -> true
// )
// );
// DynamicLightHandlers.registerDynamicLightHandler(
// EntityType.PLAYER,
// DynamicLightHandler.makeHandler(
// player -> resolvedShoulderLightLevel(player, true),
// player -> false
// )
// );
}
private static int resolvedPokemonLightLevel(PokemonEntity pokemon, boolean underwater) {
return extractFormLightLevel(pokemon.getForm(), underwater).orElse(0);
}
private static int resolvedShoulderLightLevel(PlayerEntity player, boolean underwater) {
final Pair<PokemonOnShoulderRenderer.ShoulderData, PokemonOnShoulderRenderer.ShoulderData> shoulderDataPair = PokemonOnShoulderRenderer.shoulderDataOf(player);
final Optional<Integer> leftLightLevel = extractShoulderLightLevel(shoulderDataPair.getLeft(), underwater);
final Optional<Integer> rightLightLevel = extractShoulderLightLevel(shoulderDataPair.getRight(), underwater);
private static int resolvedShoulderLightLevel(Player player, boolean underwater) {
final var shoulderDataPair = PokemonOnShoulderRenderer.shoulderDataOf(player);
final Optional<Integer> leftLightLevel = extractShoulderLightLevel(shoulderDataPair.getFirst(), underwater);
final Optional<Integer> rightLightLevel = extractShoulderLightLevel(shoulderDataPair.getSecond(), underwater);
return Math.max(leftLightLevel.orElse(0), rightLightLevel.orElse(0));
}
@@ -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.duck;
import org.jetbrains.annotations.Nullable;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundSource;
public interface SoundEngineDuck {
void pauseSounds(@Nullable ResourceLocation id, @Nullable SoundSource category);
void resumeSounds(@Nullable ResourceLocation id, @Nullable SoundSource category);
}
@@ -8,13 +8,13 @@
package com.cobblemon.mod.common.duck;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Identifier;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundSource;
import org.jetbrains.annotations.Nullable;
public interface SoundManagerDuck {
void pauseSounds(@Nullable Identifier id, @Nullable SoundCategory category);
void pauseSounds(@Nullable ResourceLocation id, @Nullable SoundSource category);
void resumeSounds(@Nullable Identifier id, @Nullable SoundCategory category);
void resumeSounds(@Nullable ResourceLocation id, @Nullable SoundSource category);
}
@@ -1,25 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.duck;
import net.minecraft.client.sound.SoundInstance;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
public interface SoundSystemDuck {
void pauseSounds(@Nullable Identifier id, @Nullable SoundCategory category);
void resumeSounds(@Nullable Identifier id, @Nullable SoundCategory category);
Collection<SoundInstance> getSounds(@Nullable SoundCategory category);
}
@@ -10,22 +10,21 @@ 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 com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.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)
@Mixin(BlockEntityWithoutLevelRenderer.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) {
@Inject(method = "renderByItem", at = @At("HEAD"), cancellable = true)
private void cobblemon$useDynamicItemRenderer(ItemStack stack, ItemDisplayContext mode, PoseStack matrices, MultiBufferSource 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);
@@ -0,0 +1,65 @@
/*
* 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 static com.cobblemon.mod.common.datafixer.CobblemonSchemas.VERSION_KEY;
import com.cobblemon.mod.common.datafixer.CobblemonSchemas;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.mojang.serialization.MapCodec;
import java.util.Optional;
import java.util.function.Supplier;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.IntTag;
import net.minecraft.resources.ResourceKey;
import net.minecraft.util.datafix.DataFixTypes;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.storage.ChunkStorage;
import net.minecraft.world.level.storage.DimensionDataStorage;
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.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ChunkStorage.class)
public class ChunkStorageMixin {
//Modifies the NBT returned by the vanilla upgradeChunkTag to also incorporate cobblemon fixup stuff
@ModifyExpressionValue(
method = "upgradeChunkTag(Lnet/minecraft/resources/ResourceKey;Ljava/util/function/Supplier;Lnet/minecraft/nbt/CompoundTag;Ljava/util/Optional;)Lnet/minecraft/nbt/CompoundTag;",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/util/datafix/DataFixTypes;updateToCurrentVersion(Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/nbt/CompoundTag;I)Lnet/minecraft/nbt/CompoundTag;"
)
)
public CompoundTag cobblemon$doChunkFix(
CompoundTag vanillaFixed
) {
int curVersion = vanillaFixed.contains(VERSION_KEY) ? vanillaFixed.getInt(VERSION_KEY) : 0;
return DataFixTypes.CHUNK.update(CobblemonSchemas.getDATA_FIXER(), vanillaFixed, curVersion, CobblemonSchemas.DATA_VERSION);
}
@Inject(
method = "upgradeChunkTag(Lnet/minecraft/resources/ResourceKey;Ljava/util/function/Supplier;Lnet/minecraft/nbt/CompoundTag;Ljava/util/Optional;)Lnet/minecraft/nbt/CompoundTag;",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/nbt/NbtUtils;addCurrentDataVersion(Lnet/minecraft/nbt/CompoundTag;)Lnet/minecraft/nbt/CompoundTag;"
)
)
public void cobblemon$addChunkVersion(
ResourceKey<Level> resourceKey,
Supplier<DimensionDataStorage> supplier,
CompoundTag compoundTag,
Optional<ResourceKey<MapCodec<? extends ChunkGenerator>>> optional,
CallbackInfoReturnable<CompoundTag> cir
) {
compoundTag.put(VERSION_KEY, IntTag.valueOf(CobblemonSchemas.DATA_VERSION));
}
}
@@ -9,8 +9,8 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.CobblemonBuildDetails;
import net.minecraft.util.crash.CrashReport;
import net.minecraft.util.crash.CrashReportSection;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -19,15 +19,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(CrashReport.class)
public final class CrashReportMixin {
@Inject(method = "addStackTrace", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/SystemDetails;writeTo(Ljava/lang/StringBuilder;)V"))
@Inject(method = "getDetails(Ljava/lang/StringBuilder;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/SystemReport;appendToCrashReportString(Ljava/lang/StringBuilder;)V"))
public void cobblemon$printCobblemonDetails(StringBuilder builder, CallbackInfo callback) {
CrashReportSection cobblemon = new CrashReportSection("Cobblemon");
cobblemon.add("Version", CobblemonBuildDetails.VERSION);
cobblemon.add("Is Snapshot", CobblemonBuildDetails.SNAPSHOT);
cobblemon.add("Git Commit", CobblemonBuildDetails.INSTANCE.smallCommitHash() + " (" + "https://gitlab.com/cable-mc/cobblemon/-/commit/" + CobblemonBuildDetails.GIT_COMMIT + ")");
cobblemon.add("Branch", CobblemonBuildDetails.BRANCH);
CrashReportCategory cobblemon = new CrashReportCategory("Cobblemon");
cobblemon.setDetail("Version", CobblemonBuildDetails.VERSION);
cobblemon.setDetail("Is Snapshot", CobblemonBuildDetails.SNAPSHOT);
cobblemon.setDetail("Git Commit", CobblemonBuildDetails.INSTANCE.smallCommitHash() + " (" + "https://gitlab.com/cable-mc/cobblemon/-/commit/" + CobblemonBuildDetails.GIT_COMMIT + ")");
cobblemon.setDetail("Branch", CobblemonBuildDetails.BRANCH);
cobblemon.addStackTrace(builder);
cobblemon.getDetails(builder);
builder.append("\n\n");
}
@@ -9,9 +9,10 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.sherds.CobblemonSherds;
import net.minecraft.block.DecoratedPotPatterns;
import net.minecraft.item.Item;
import net.minecraft.registry.RegistryKey;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.entity.DecoratedPotPattern;
import net.minecraft.world.level.block.entity.DecoratedPotPatterns;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -19,12 +20,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(DecoratedPotPatterns.class)
public abstract class DecoratedPotPatternsMixin {
@Inject(method = "fromSherd", at=@At("HEAD"), cancellable = true)
private static void cobblemon$getCobblemonSherdTexture(Item sherd,
CallbackInfoReturnable<RegistryKey<String>> cir) {
@Inject(method = "getPatternFromItem", at=@At("HEAD"), cancellable = true)
private static void cobblemon$getCobblemonSherdTexture(
Item sherd,
CallbackInfoReturnable<ResourceKey<DecoratedPotPattern>> cir
) {
if (CobblemonSherds.INSTANCE.getSherdToPattern().containsKey(sherd)) {
cir.setReturnValue(CobblemonSherds.INSTANCE.getSherdToPattern().get(sherd));
return;
cir.cancel();
}
}
}
@@ -9,10 +9,6 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.CobblemonClient;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.resource.ResourceManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
@@ -20,17 +16,22 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Map;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.resources.PlayerSkin;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.entity.player.Player;
@Mixin(EntityRenderDispatcher.class)
public class EntityRenderDispatcherMixin {
@Shadow private Map<String, EntityRenderer<? extends PlayerEntity>> modelRenderers;
@Shadow private Map<PlayerSkin.Model, EntityRenderer<? extends Player>> playerRenderers;
@Inject(
method = "reload",
method = "onResourceManagerReload",
at = @At(value = "TAIL")
)
public void resourceManagerReloadHook(ResourceManager resourceManager, CallbackInfo ci) {
CobblemonClient.INSTANCE.onAddLayer(this.modelRenderers);
CobblemonClient.INSTANCE.onAddLayer(this.playerRenderers);
}
}
}
@@ -0,0 +1,40 @@
/*
* 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 static com.cobblemon.mod.common.datafixer.CobblemonSchemas.VERSION_KEY;
import com.cobblemon.mod.common.datafixer.CobblemonSchemas;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.IntTag;
import net.minecraft.util.datafix.DataFixTypes;
import net.minecraft.world.level.chunk.storage.EntityStorage;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(EntityStorage.class)
public class EntityStorageMixin {
//Modifies the NBT returned by the vanilla upgradeChunkTag to also incorporate cobblemon fixup stuff
@ModifyExpressionValue(
method = "method_31731(Lnet/minecraft/world/level/ChunkPos;Ljava/util/Optional;)Lnet/minecraft/world/level/entity/ChunkEntities;",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/level/chunk/storage/SimpleRegionStorage;upgradeChunkTag(Lnet/minecraft/nbt/CompoundTag;I)Lnet/minecraft/nbt/CompoundTag;"
)
)
public CompoundTag cobblemon$doEntityFix(
CompoundTag vanillaFixed
) {
int curVersion = vanillaFixed.contains(VERSION_KEY) ? vanillaFixed.getInt(VERSION_KEY) : 0;
CompoundTag newTag = DataFixTypes.ENTITY_CHUNK.update(CobblemonSchemas.getDATA_FIXER(), vanillaFixed, curVersion, CobblemonSchemas.DATA_VERSION);
newTag.put(VERSION_KEY, IntTag.valueOf(CobblemonSchemas.DATA_VERSION));
return newTag;
}
}
@@ -8,24 +8,24 @@
package com.cobblemon.mod.common.mixin;
import net.minecraft.entity.passive.VillagerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.village.VillagerProfession;
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;
import com.cobblemon.mod.common.villager.VillagerGatherableItems;
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;
import com.cobblemon.mod.common.villager.VillagerGatherableItems;
import java.util.Objects;
import java.util.Objects;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.npc.VillagerProfession;
import net.minecraft.world.item.ItemStack;
@Mixin(VillagerEntity.class)
@Mixin(Villager.class)
public abstract class EntityVillagerMixin {
@Inject(method = "canGather", at = @At(value = "RETURN"), cancellable = true)
@Inject(method = "wantsToPickUp", at = @At(value = "RETURN"), cancellable = true)
private void cobblemon$canGather(ItemStack stack, CallbackInfoReturnable<Boolean> ci) {
final VillagerEntity villager = (VillagerEntity) (Object) this;
if(ci.getReturnValue() == false && Objects.equals(villager.getVillagerData().getProfession(), VillagerProfession.FARMER) && villager.getInventory().canInsert(stack)) {
final Villager villager = (Villager) (Object) this;
if(ci.getReturnValue() == false && Objects.equals(villager.getVillagerData().getProfession(), VillagerProfession.FARMER) && villager.getInventory().canAddItem(stack)) {
if(VillagerGatherableItems.INSTANCE.getVillagerGatherableItems().contains(stack.getItem()))
ci.setReturnValue(true);
}
@@ -9,10 +9,10 @@
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 net.minecraft.core.BlockPos;
import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@@ -21,14 +21,14 @@ import org.spongepowered.asm.mixin.injection.Redirect;
public class ExplosionMixin {
@Redirect(
method = "affectWorld",
method = "finalizeExplosion",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;",
target = "Lnet/minecraft/world/level/Level;getBlockState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;",
ordinal = 0
)
)
public BlockState cobblemon$whenExploded(World world, BlockPos pos) {
public BlockState cobblemon$whenExploded(Level world, BlockPos pos) {
BlockState blockState = world.getBlockState(pos);
if(blockState.getBlock() instanceof PreEmptsExplosion preExplosionBlock) {
preExplosionBlock.whenExploded(world, blockState, pos);
@@ -9,8 +9,9 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.api.scheduling.ClientTaskTracker;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
@@ -26,8 +27,8 @@ public class GameRendererMixin {
method = "render",
at = @At(value = "TAIL")
)
public void render(float tickDelta, long startTime, boolean tick, CallbackInfo ci) {
MinecraftClient client = MinecraftClient.getInstance();
public void render(DeltaTracker counter, boolean tick, CallbackInfo ci) {
Minecraft client = Minecraft.getInstance();
long newTime = System.currentTimeMillis();
// Don't play scheduled animations when the game is paused
if (client.isPaused()) {
@@ -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.item.PokedexItem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.renderer.ItemInHandRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.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(ItemInHandRenderer.class)
public class ItemInHandRendererMixin {
@Inject(method = "renderArmWithItem", at = @At(value = "HEAD"), cancellable = true)
private void cobblemon$renderArmWithItem(AbstractClientPlayer abstractClientPlayer, float f, float g, InteractionHand interactionHand, float h, ItemStack itemStack, float i, PoseStack poseStack, MultiBufferSource multiBufferSource, int j, CallbackInfo ci) {
if (abstractClientPlayer.isUsingItem() && abstractClientPlayer.getUseItem().getItem() instanceof PokedexItem) {
ci.cancel();
}
}
}
@@ -0,0 +1,90 @@
/*
* 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.Cobblemon;
import com.cobblemon.mod.common.ModAPI;
import com.cobblemon.mod.common.client.CobblemonBakingOverrides;
import com.cobblemon.mod.common.item.PokeBallItem;
import com.cobblemon.mod.common.item.PokedexItem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.ItemModelShaper;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
/*
I think it would be nice to maybe use the existing mixin we have for custom item rendering [BuiltinModelItemRendererMixin]
Obviously that would require changes. Potentially each item renderer defines what modes it overrides for?
*/
@Mixin(ItemRenderer.class)
public abstract class ItemRendererMixin {
@Unique private final String MODEL_PATH = Cobblemon.implementation.getModAPI() == ModAPI.FABRIC ? "fabric_resource" : "standalone";
@Shadow @Final private ItemModelShaper itemModelShaper;
@Shadow public abstract void render(ItemStack stack, ItemDisplayContext renderMode, boolean leftHanded, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay, BakedModel model);
@Inject(
method = "render(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;ZLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;IILnet/minecraft/client/resources/model/BakedModel;)V",
at = @At("HEAD"),
cancellable = true
)
private void cobblemon$overrideItemModel(ItemStack stack, ItemDisplayContext renderMode, boolean leftHanded, PoseStack matrices, MultiBufferSource multiBufferSource, int light, int overlay, BakedModel model, CallbackInfo ci) {
boolean shouldBe2d = renderMode == ItemDisplayContext.GUI || renderMode == ItemDisplayContext.FIXED;
if (!shouldBe2d && stack.getItem() instanceof PokedexItem) {
BakedModel replacementModel = CobblemonBakingOverrides.INSTANCE.getPokedexOverride(((PokedexItem) stack.getItem()).getType()).getModel();
if (!cobblemon$isSameModel(model, replacementModel)) {
ci.cancel();
render(stack, renderMode, leftHanded, matrices, multiBufferSource, light, overlay, replacementModel);
}
} else if (shouldBe2d && stack.getItem() instanceof PokeBallItem pokeBallItem) {
BakedModel replacementModel = this.itemModelShaper.getModelManager().getModel(new ModelResourceLocation(pokeBallItem.getPokeBall().getModel2d(), "inventory"));
if (!cobblemon$isSameModel(model, replacementModel)) {
ci.cancel();
render(stack, renderMode, leftHanded, matrices, multiBufferSource, light, overlay, replacementModel);
}
}
}
@Inject(method = "getModel", at = @At("HEAD"), cancellable = true)
private void cobblemon$bakePokeballModel(ItemStack stack, Level world, LivingEntity entity, int seed, CallbackInfoReturnable<BakedModel> cir) {
if (stack.getItem() instanceof PokeBallItem pokeBallItem) {
BakedModel model = this.itemModelShaper.getModelManager().getModel(new ModelResourceLocation(pokeBallItem.getPokeBall().getModel3d(), MODEL_PATH));
ClientLevel clientWorld = world instanceof ClientLevel ? (ClientLevel) world : null;
BakedModel overriddenModel = model.getOverrides().resolve(model, stack, clientWorld, entity, seed);
cir.setReturnValue(overriddenModel == null ? this.itemModelShaper.getModelManager().getMissingModel() : overriddenModel);
}
}
// this method aims to cover an issue with modernfixes and it's "dynamic resource" causing the usual .equals check to always fail, resulting in a StackOverflow
// this falls back to comparing the model contents (e.g. location of the texture, width and height)
@Unique
private static boolean cobblemon$isSameModel(BakedModel original, BakedModel replacement) {
return original.equals(replacement) ||
(original.getParticleIcon().contents().name().equals(replacement.getParticleIcon().contents().name()) &&
original.getParticleIcon().contents().width() == replacement.getParticleIcon().contents().width() &&
original.getParticleIcon().contents().height() == replacement.getParticleIcon().contents().height());
}
}
@@ -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.mixin;
import com.cobblemon.mod.common.util.DataKeys;
import com.mojang.serialization.Dynamic;
import net.minecraft.util.datafix.fixes.ItemStackComponentizationFix;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.stream.Stream;
@Mixin(ItemStackComponentizationFix.class)
public class ItemStackComponentizationFixMixin
{
@Inject(method = "fixItemStack", at = @At("TAIL"))
private static void fixItemStack(ItemStackComponentizationFix.ItemStackData itemStackData, Dynamic<?> dynamic, CallbackInfo ci) {
cobblemon$attemptPokemonModelDataFix(itemStackData, dynamic);
}
@Unique
private static void cobblemon$attemptPokemonModelDataFix(ItemStackComponentizationFix.ItemStackData itemStackData, Dynamic<?> dynamic)
{
var species = itemStackData.removeTag(DataKeys.POKEMON_ITEM_SPECIES).asString();
var aspects = itemStackData.removeTag(DataKeys.POKEMON_ITEM_ASPECTS).asList(dynamic1 -> dynamic1);
var redTint = itemStackData.removeTag(DataKeys.POKEMON_ITEM_TINT_RED).asNumber();
var greenTint = itemStackData.removeTag(DataKeys.POKEMON_ITEM_TINT_GREEN).asNumber();
var blueTint = itemStackData.removeTag(DataKeys.POKEMON_ITEM_TINT_BLUE).asNumber();
var alphaTint = itemStackData.removeTag(DataKeys.POKEMON_ITEM_TINT_ALPHA).asNumber();
if(species.hasResultOrPartial() && aspects != null) {
var pokeComponent = dynamic.emptyMap().set("species", dynamic.createString(species.getOrThrow()));
pokeComponent = pokeComponent.set("aspects", dynamic.createList(aspects.stream()));
if(redTint.hasResultOrPartial() || blueTint.hasResultOrPartial() || greenTint.hasResultOrPartial() || alphaTint.hasResultOrPartial()) {
pokeComponent = pokeComponent.set("tint", dynamic.createList(Stream.of(redTint, greenTint, blueTint, alphaTint)
.map(x -> x.mapOrElse(Number::floatValue, error -> 0F))
.map(dynamic::createFloat)));
}
itemStackData.setComponent("cobblemon:pokemon_item", pokeComponent);
}
}
}
@@ -0,0 +1,62 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.block.entity.LecternBlockEntity;
import com.cobblemon.mod.common.CobblemonBlocks;
import com.cobblemon.mod.common.CobblemonSounds;
import com.cobblemon.mod.common.item.PokedexItem;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.ItemInteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.LecternBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
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;
import static net.minecraft.world.level.block.LecternBlock.HAS_BOOK;
@Mixin(LecternBlock.class)
public abstract class LecternBlockMixin {
@Inject(method = "useItemOn", at = @At(value = "HEAD"), cancellable = true)
private void cobblemon$useItemOn(ItemStack itemStack, BlockState blockState, Level world, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult, CallbackInfoReturnable<ItemInteractionResult> cir) {
if (!world.isClientSide && itemStack.getItem() instanceof PokedexItem) {
BlockEntity blockEntity = world.getBlockEntity(blockPos);
if (!blockState.getValue(HAS_BOOK)
&& blockEntity instanceof net.minecraft.world.level.block.entity.LecternBlockEntity
&& blockState.getBlock() instanceof LecternBlock
) {
ItemStack pokedexItemStack = itemStack.copy();
Direction facing = blockState.getValue(HorizontalDirectionalBlock.FACING);
itemStack.consumeAndReturn(1, player);
blockEntity.setRemoved();
BlockState newBlockState = CobblemonBlocks.LECTERN.defaultBlockState().setValue(HorizontalDirectionalBlock.FACING, facing);
world.setBlockAndUpdate(blockPos, newBlockState);
BlockEntity lecternEntity = world.getBlockEntity(blockPos);
if (lecternEntity instanceof LecternBlockEntity) {
((LecternBlockEntity) lecternEntity).setItemStack((pokedexItemStack));
}
world.playSound(null, blockPos, CobblemonSounds.POKEDEX_CLOSE, SoundSource.BLOCKS, 0.5F, 1.25F);
cir.setReturnValue(itemStack.isEmpty() && interactionHand == InteractionHand.MAIN_HAND ? ItemInteractionResult.SKIP_DEFAULT_BLOCK_INTERACTION : ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION);
}
}
}
}
@@ -9,9 +9,9 @@
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 net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -20,11 +20,11 @@ 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) {
@Inject(method = "onEffectRemoved", at = @At(value = "TAIL"))
private void cobblemon$onEffectRemoved(MobEffectInstance effect, CallbackInfo ci) {
final LivingEntity entity = (LivingEntity) (Object) this;
if (entity instanceof ServerPlayerEntity) {
ShoulderEffectRegistry.INSTANCE.onEffectEnd((ServerPlayerEntity) entity);
if (entity instanceof ServerPlayer) {
ShoulderEffectRegistry.INSTANCE.onEffectEnd((ServerPlayer) entity);
}
}
@@ -9,18 +9,18 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import net.minecraft.entity.Entity;
import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.server.ServerInterface;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
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(ServerWorld.class)
public abstract class MinecraftDedicatedServerMixin implements DedicatedServer {
@Mixin(ServerLevel.class)
public abstract class MinecraftDedicatedServerMixin implements ServerInterface {
@Inject(method = "shouldCancelSpawn", at = @At(value = "HEAD"), cancellable = true)
@Inject(method = "shouldDiscardEntity", at = @At(value = "HEAD"), cancellable = true)
public void cobblemon$allowPokemonSpawns(Entity entity, CallbackInfoReturnable<Boolean> callback) {
if(entity instanceof PokemonEntity) {
callback.setReturnValue(false);
@@ -9,61 +9,41 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.CobblemonBakingOverrides;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import net.minecraft.client.color.block.BlockColors;
import net.minecraft.client.render.model.ModelLoader;
import net.minecraft.client.render.model.UnbakedModel;
import net.minecraft.client.render.model.json.JsonUnbakedModel;
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.util.Identifier;
import net.minecraft.util.profiler.Profiler;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Final;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.resources.model.BlockStateModelLoader;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.profiling.ProfilerFiller;
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.InjectionPoint;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.points.BeforeStringInvoke;
@Mixin(ModelLoader.class)
@Mixin(ModelBakery.class)
public abstract class ModelLoaderMixin {
@Shadow protected abstract void addModel(ModelIdentifier modelId);
@Shadow abstract UnbakedModel getModel(ResourceLocation resourceLocation);
@Final
@Shadow
private Map<Identifier, UnbakedModel> unbakedModels;
@Final
@Shadow
private static Logger LOGGER;
@Shadow protected abstract void registerModel(ModelResourceLocation modelId, UnbakedModel unbakedModel);
@Inject(
method = "<init>",
at = @At("TAIL")
)
public void init(BlockColors blockColors,
Profiler profiler,
Map jsonUnbakedModels,
Map blockStates,
ProfilerFiller profiler,
Map<ResourceLocation, BlockModel> jsonUnbakedModels,
Map<ResourceLocation, List<BlockStateModelLoader.LoadedJson>> blockStates,
CallbackInfo ci) {
CobblemonBakingOverrides.INSTANCE.getModels().forEach(bakingOverride -> {
try {
this.unbakedModels.put(bakingOverride.getModelIdentifier(), this.loadModelFromJson(bakingOverride.getModelLocation()));
this.addModel(bakingOverride.getModelIdentifier());
} catch (IOException e) {
LOGGER.error("Error loading a Cobblemon BakedModel:", e);
throw new RuntimeException(e);
}
var unbakedModel = this.getModel(bakingOverride.getModelLocation());
this.registerModel(bakingOverride.getModelIdentifier(), unbakedModel);
});
}
@Shadow
private JsonUnbakedModel loadModelFromJson(Identifier id) throws IOException {
return null;
}
}
@@ -8,25 +8,23 @@
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 com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
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;
import net.minecraft.client.model.geom.ModelPart;
@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 render(PoseStack matrices, VertexConsumer vertices, int light, int overlay, int color);
@Shadow public abstract void rotate(MatrixStack matrixStack);
@Shadow public abstract void translateAndRotate(PoseStack matrixStack);
@Shadow @Final
public Map<String, ModelPart> children;
@@ -38,12 +36,12 @@ public abstract class ModelPartMixin implements Bone {
}
@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);
public void render(RenderContext context, PoseStack stack, VertexConsumer buffer, int packedLight, int packedOverlay, int color) {
this.render(stack, buffer, packedLight, packedOverlay, color);
}
@Override
public void transform(MatrixStack matrixStack) {
this.rotate(matrixStack);
public void transform(PoseStack matrixStack) {
this.translateAndRotate(matrixStack);
}
}
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.sound.BattleMusicController;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.client.sounds.MusicManager;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
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(MusicManager.class)
public class MusicManagerMixin {
@Shadow @Final
private Minecraft minecraft;
@Shadow @Nullable
private SoundInstance currentMusic;
/** Freezes the tracker while a BattleMusicInstance is in progress. Current SoundInstance being tracked will be paused by BattleMusicHandler. */
@Inject(method = "tick()V", at = @At("HEAD"), cancellable = true)
public void tick(CallbackInfo cb) {
if (this.minecraft.getSoundManager().isActive(BattleMusicController.INSTANCE.getMusic())) cb.cancel();
}
}
@@ -1,37 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.sound.battle.BattleMusicController;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.sound.MusicTracker;
import net.minecraft.client.sound.SoundInstance;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
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(MusicTracker.class)
public class MusicTrackerMixin {
@Shadow @Final
private MinecraftClient client;
@Shadow @Nullable
private SoundInstance current;
/** Freezes the tracker while a BattleMusicInstance is in progress. Current SoundInstance being tracked will be paused by BattleMusicHandler. */
@Inject(method = "tick()V", at = @At("HEAD"), cancellable = true)
public void tick(CallbackInfo cb) {
if (this.client.getSoundManager().isPlaying(BattleMusicController.INSTANCE.getMusic())) cb.cancel();
}
}
@@ -10,8 +10,6 @@ package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.api.snowstorm.ParticleMaterials;
import com.google.common.collect.ImmutableList;
import net.minecraft.client.particle.ParticleManager;
import net.minecraft.client.particle.ParticleTextureSheet;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
@@ -21,17 +19,19 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
import net.minecraft.client.particle.ParticleEngine;
import net.minecraft.client.particle.ParticleRenderType;
@Mixin(ParticleManager.class)
@Mixin(ParticleEngine.class)
final class ParticleManagerMixin {
@Mutable
@Final
@Shadow
private static List<ParticleTextureSheet> PARTICLE_TEXTURE_SHEETS;
private static List<ParticleRenderType> RENDER_ORDER;
@Inject(at = @At("RETURN"), method = "<clinit>")
private static void lodestone$addTypes(CallbackInfo ci) {
PARTICLE_TEXTURE_SHEETS = ImmutableList.<ParticleTextureSheet>builder().addAll(PARTICLE_TEXTURE_SHEETS)
RENDER_ORDER = ImmutableList.<ParticleRenderType>builder().addAll(RENDER_ORDER)
.add(ParticleMaterials.INSTANCE.getADD(), ParticleMaterials.INSTANCE.getALPHA(), ParticleMaterials.INSTANCE.getBLEND(), ParticleMaterials.INSTANCE.getOPAQUE()).build();
}
}
@@ -10,44 +10,68 @@ 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 com.cobblemon.mod.common.item.PokedexItem;
import com.cobblemon.mod.common.pokedex.scanner.PokedexUsageContext;
import net.minecraft.client.Minecraft;
import net.minecraft.client.MouseHandler;
import net.minecraft.util.Mth;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
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)
@Mixin(MouseHandler.class)
public class PartyScrollMixin {
@Shadow
private double eventDeltaWheel;
private double accumulatedScrollY;
@Shadow @Final private Minecraft minecraft;
@Inject(
method = "onMouseScroll",
method = "onScroll",
at = @At(
value = "FIELD",
target="Lnet/minecraft/client/Mouse;eventDeltaWheel:D",
target="Lnet/minecraft/client/MouseHandler;accumulatedScrollY:D",
opcode = Opcodes.PUTFIELD,
ordinal = 2,
shift = At.Shift.BEFORE
),
cancellable = true
)
public void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) {
public void cobblemon$scrollParty(long window, double horizontal, double vertical, CallbackInfo ci) {
if (PartySendBinding.INSTANCE.getWasDown()) {
int i = (int)eventDeltaWheel;
int i = (int) accumulatedScrollY;
if (i > 0) {
while (i-- > 0) CobblemonClient.INSTANCE.getStorage().shiftSelected(false);
accumulatedScrollY -= i;
CobblemonClient.INSTANCE.getStorage().shiftSelected(false);
ci.cancel();
eventDeltaWheel = 0;
PartySendBinding.INSTANCE.actioned();
} else if (i < 0) {
while (i++ < 0) CobblemonClient.INSTANCE.getStorage().shiftSelected(true);
accumulatedScrollY -= i;
CobblemonClient.INSTANCE.getStorage().shiftSelected(true);
ci.cancel();
eventDeltaWheel = 0;
PartySendBinding.INSTANCE.actioned();
}
}
}
}
@Inject(
method = "onScroll",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/entity/player/Inventory;swapPaint(D)V"
),
cancellable = true
)
public void cobblemon$doPokedexZoom(long window, double horizontal, double vertical, CallbackInfo ci) {
PokedexUsageContext usageContext = CobblemonClient.INSTANCE.getPokedexUsageContext();
if (usageContext.getScanningGuiOpen()) {
usageContext.adjustZoom(vertical);
ci.cancel();
}
}
}
@@ -9,22 +9,22 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.CobblemonItems;
import net.minecraft.entity.mob.PiglinBrain;
import net.minecraft.item.ItemStack;
import net.minecraft.world.entity.monster.piglin.PiglinAi;
import net.minecraft.world.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.CallbackInfoReturnable;
@Mixin(PiglinBrain.class)
@Mixin(PiglinAi.class)
public class PiglinBarterMixin {
@Inject(method = "acceptsForBarter", at = @At(value = "RETURN"), cancellable = true)
@Inject(method = "isBarterCurrency", at = @At(value = "RETURN"), cancellable = true)
private static void cobblemon$acceptsForBarter(ItemStack stack, CallbackInfoReturnable<Boolean> ci) {
if(!ci.getReturnValue()) {
//TODO: Make a tag?
if(stack.isOf(CobblemonItems.RELIC_COIN_POUCH))
if(stack.is(CobblemonItems.RELIC_COIN_POUCH))
ci.setReturnValue(true);
}
}
@@ -9,22 +9,22 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.CobblemonItems;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.mob.PiglinEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.monster.piglin.Piglin;
import net.minecraft.world.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(PiglinEntity.class)
@Mixin(Piglin.class)
public abstract class PiglinEntityMixin {
@Inject(method = "equipToOffHand", at = @At(value = "HEAD"), cancellable = true)
@Inject(method = "holdInOffHand", at = @At(value = "HEAD"), cancellable = true)
public void cobblemon$isValidBarteringItem(ItemStack stack, CallbackInfo ci) {
PiglinEntity entity = (PiglinEntity)(Object) this;
if (stack.isOf(CobblemonItems.RELIC_COIN_POUCH)) {
entity.equipStack(EquipmentSlot.OFFHAND, stack);
entity.updateDropChances(EquipmentSlot.OFFHAND);
Piglin entity = (Piglin)(Object) this;
if (stack.is(CobblemonItems.RELIC_COIN_POUCH)) {
entity.setItemSlot(EquipmentSlot.OFFHAND, stack);
entity.setGuaranteedDrop(EquipmentSlot.OFFHAND);
ci.cancel();
}
}
@@ -18,15 +18,18 @@ import com.cobblemon.mod.common.api.tags.CobblemonItemTags;
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.nbt.NbtCompound;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -38,46 +41,46 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Objects;
import java.util.UUID;
@Mixin(PlayerEntity.class)
@Mixin(Player.class)
public abstract class PlayerMixin extends LivingEntity {
@Shadow public abstract NbtCompound getShoulderEntityLeft();
@Shadow public abstract CompoundTag getShoulderEntityLeft();
@Shadow public abstract NbtCompound getShoulderEntityRight();
@Shadow public abstract CompoundTag getShoulderEntityRight();
@Shadow public abstract void dropShoulderEntity(NbtCompound entityNbt);
@Shadow public abstract void respawnEntityOnShoulder(CompoundTag entityNbt);
@Shadow public abstract void setShoulderEntityRight(NbtCompound entityNbt);
@Shadow public abstract void setShoulderEntityRight(CompoundTag entityNbt);
@Shadow public abstract void setShoulderEntityLeft(NbtCompound entityNbt);
@Shadow public abstract void setShoulderEntityLeft(CompoundTag entityNbt);
@Shadow public abstract boolean isSpectator();
@Shadow public abstract boolean giveItemStack(ItemStack stack);
@Shadow public abstract boolean addItem(ItemStack stack);
@Shadow public abstract void sendMessage(Text message, boolean overlay);
@Shadow public abstract void displayClientMessage(Component message, boolean overlay);
protected PlayerMixin(EntityType<? extends LivingEntity> p_20966_, World p_20967_) {
protected PlayerMixin(EntityType<? extends LivingEntity> p_20966_, Level p_20967_) {
super(p_20966_, p_20967_);
}
@Inject(method = "dropShoulderEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/EntityType;getEntityFromNbt(Lnet/minecraft/nbt/NbtCompound;Lnet/minecraft/world/World;)Ljava/util/Optional;"), cancellable = true)
private void cobblemon$removePokemon(NbtCompound nbt, CallbackInfo ci) {
@Inject(method = "respawnEntityOnShoulder", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/EntityType;create(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/Level;)Ljava/util/Optional;"), cancellable = true)
private void cobblemon$removePokemon(CompoundTag nbt, CallbackInfo ci) {
if (CompoundTagExtensionsKt.isPokemonEntity(nbt)) {
final UUID uuid = this.getPokemonID(nbt);
if (this.isShoulderPokemon(this.getShoulderEntityRight())) {
final UUID uuidRight = this.getPokemonID(this.getShoulderEntityRight());
if (uuid.equals(uuidRight)) {
this.recallPokemon(uuidRight);
this.setShoulderEntityRight(new NbtCompound());
this.setShoulderEntityRight(new CompoundTag());
}
}
if (this.isShoulderPokemon(this.getShoulderEntityLeft())) {
final UUID uuidLeft = this.getPokemonID(this.getShoulderEntityLeft());
if (uuid.equals(uuidLeft)) {
this.recallPokemon(uuidLeft);
this.setShoulderEntityLeft(new NbtCompound());
this.setShoulderEntityLeft(new CompoundTag());
}
}
ci.cancel();
@@ -85,7 +88,7 @@ public abstract class PlayerMixin extends LivingEntity {
}
@Inject(
method = "dropShoulderEntities",
method = "removeEntitiesOnShoulder",
at = @At(
value = "JUMP",
opcode = Opcodes.IFGE,
@@ -96,61 +99,59 @@ public abstract class PlayerMixin extends LivingEntity {
)
private void cobblemon$preventPokemonDropping(CallbackInfo ci) {
// We want to allow both of these to forcefully remove the entities
if (this.isSpectator() || this.isDead())
if (this.isSpectator() || this.isDeadOrDying())
return;
if (!this.isShoulderPokemon(this.getShoulderEntityLeft())) {
this.dropShoulderEntity(this.getShoulderEntityLeft());
this.setShoulderEntityLeft(new NbtCompound());
this.respawnEntityOnShoulder(this.getShoulderEntityLeft());
this.setShoulderEntityLeft(new CompoundTag());
}
if (!this.isShoulderPokemon(this.getShoulderEntityRight())) {
this.dropShoulderEntity(this.getShoulderEntityRight());
this.setShoulderEntityRight(new NbtCompound());
this.respawnEntityOnShoulder(this.getShoulderEntityRight());
this.setShoulderEntityRight(new CompoundTag());
}
ci.cancel();
}
private UUID getPokemonID(NbtCompound nbt) {
private UUID getPokemonID(CompoundTag nbt) {
return nbt.getCompound(DataKeys.POKEMON)
.getUuid(DataKeys.POKEMON_UUID);
.getUUID(DataKeys.POKEMON_UUID);
}
private void recallPokemon(UUID uuid) {
// We need to do this cause the Entity doesn't store a reference to its storage
try {
final PartyStore party = Cobblemon.INSTANCE.getStorage().getParty(this.uuid);
for (Pokemon pokemon : party) {
if (pokemon.getUuid().equals(uuid)) {
pokemon.recall();
}
final PartyStore party = Cobblemon.INSTANCE.getStorage().getParty(this.getUUID(), this.registryAccess());
for (Pokemon pokemon : party) {
if (pokemon.getUuid().equals(uuid)) {
pokemon.recall();
}
} catch (NoPokemonStoreException ignored) {}
}
}
private boolean isShoulderPokemon(NbtCompound nbt) {
private boolean isShoulderPokemon(CompoundTag nbt) {
return CompoundTagExtensionsKt.isPokemonEntity(nbt);
}
@Inject(
method = "eatFood",
method = "eat",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/player/PlayerEntity;getHungerManager()Lnet/minecraft/entity/player/HungerManager;",
target = "Lnet/minecraft/world/entity/player/Player;getFoodData()Lnet/minecraft/world/food/FoodData;",
shift = At.Shift.AFTER
)
)
public void onEatFood(World world, ItemStack stack, CallbackInfoReturnable<ItemStack> cir) {
if (!getWorld().isClient) {
if (stack.isIn(CobblemonItemTags.LEAVES_LEFTOVERS) && getWorld().random.nextDouble() < Cobblemon.config.getAppleLeftoversChance()) {
public void onEatFood(Level world, ItemStack stack, FoodProperties foodComponent, CallbackInfoReturnable<ItemStack> cir) {
if (!level().isClientSide) {
if (stack.is(CobblemonItemTags.LEAVES_LEFTOVERS) && level().random.nextDouble() < Cobblemon.config.getAppleLeftoversChance()) {
ItemStack leftovers = new ItemStack(CobblemonItems.LEFTOVERS);
ServerPlayerEntity player = Objects.requireNonNull(getServer()).getPlayerManager().getPlayer(uuid);
ServerPlayer player = Objects.requireNonNull(getServer()).getPlayerList().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()));
if(!player.addItem(leftoversCreatedEvent.getLeftovers())) {
var itemPos = player.getLookAngle().scale(0.5f).add(position());
level().addFreshEntity(new ItemEntity(level(), itemPos.x(), itemPos.y(), itemPos.z(), leftoversCreatedEvent.getLeftovers()));
}
return null;
}
@@ -158,4 +159,16 @@ public abstract class PlayerMixin extends LivingEntity {
}
}
}
@Inject(method = "isInvulnerableTo", at = @At("HEAD"), cancellable = true)
public void isInvulnerableTo(DamageSource source, CallbackInfoReturnable<Boolean> ci) {
if (!level().isClientSide) {
ServerPlayer player = (ServerPlayer)(Object)this;
boolean invulnerableInBattle = this.level().getGameRules().getBoolean(CobblemonGameRules.BATTLE_INVULNERABILITY);
boolean inBattle = Cobblemon.INSTANCE.getBattleRegistry().getBattleByParticipatingPlayer(player) != null;
if (invulnerableInBattle && inBattle) {
ci.setReturnValue(true);
}
}
}
}
@@ -0,0 +1,30 @@
/*
* 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.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
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(PlayerRenderer.class)
public class PlayerRendererMixin {
@Inject(
method = "render(Lnet/minecraft/client/player/AbstractClientPlayer;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V",
at = @At(value = "TAIL")
)
public void renderPlayer(AbstractClientPlayer player, float f, float g, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) {
CobblemonClient.INSTANCE.getRequests().onRenderPlayer(player, g);
}
}
@@ -9,9 +9,9 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.api.tags.CobblemonBlockTags;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.PointedDripstoneBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.PointedDripstoneBlock;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@@ -21,12 +21,12 @@ import org.spongepowered.asm.mixin.injection.Slice;
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),
slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/block/Blocks;DRIPSTONE_BLOCK:Lnet/minecraft/block/Block;"))
method = "canTipGrow(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;)Z",
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/Block;)Z", ordinal = 0),
slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/Blocks;DRIPSTONE_BLOCK:Lnet/minecraft/world/level/Block;"))
)
private static boolean cobblemon$validateMoonStoneDripstone(BlockState instance, Block block) {
return instance.isIn(CobblemonBlockTags.DRIPSTONE_GROWABLE);
return instance.is(CobblemonBlockTags.DRIPSTONE_GROWABLE);
}
}
@@ -10,21 +10,21 @@ 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 net.minecraft.core.BlockPos;
import net.minecraft.core.dispenser.ShearsDispenseItemBehavior;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.block.state.BlockState;
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)
@Mixin(ShearsDispenseItemBehavior.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) {
@Inject(method = "tryShearBeehive", at = @At("HEAD"), cancellable = true)
private static void cobblemon$tryApricornHarvest(ServerLevel 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,113 @@
/*
* 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.sound.BattleMusicController;
import com.cobblemon.mod.common.duck.SoundEngineDuck;
import com.google.common.collect.Multimap;
import com.mojang.blaze3d.audio.Channel;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.client.sounds.ChannelAccess;
import net.minecraft.client.sounds.SoundEngine;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundSource;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
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;
import java.util.Map;
@Mixin(SoundEngine.class)
public abstract class SoundEngineMixin implements SoundEngineDuck {
@Shadow
private boolean loaded;
@Shadow
private Multimap<SoundSource, SoundInstance> instanceBySource;
@Shadow @Final
private Map<SoundInstance, ChannelAccess.ChannelHandle> instanceToChannel;
@Shadow
protected abstract void stop(SoundInstance sound);
@Shadow
public abstract boolean isActive(SoundInstance sound);
/** Resumes the Source belonging to the queried SoundInstance. */
private void resume(SoundInstance sound) {
ChannelAccess.ChannelHandle sourceManager = this.instanceToChannel.get(sound);
if (this.loaded && sourceManager != null) sourceManager.execute(Channel::unpause);
}
/** Pauses the Source belonging to the queried SoundInstance. */
private void pause(SoundInstance sound) {
ChannelAccess.ChannelHandle sourceManager = this.instanceToChannel.get(sound);
if (this.loaded && sourceManager != null) sourceManager.execute(Channel::pause);
}
/** Resumes the SoundInstance(s) queried by id and/or category. */
@Override
public void resumeSounds(@Nullable ResourceLocation id, @Nullable SoundSource category) {
if (category != null) {
this.instanceBySource.get(category).forEach((sound) -> {
if (id == null || sound.getLocation().equals(id)) resume(sound);
});
} else if (id == null) {
this.instanceToChannel.keySet().forEach(this::resume);
} else {
this.instanceToChannel.keySet().forEach(sound -> {
if (sound.getLocation().equals(id)) resume(sound);
});
}
}
/** Pauses the SoundInstances queried by id and/or category. */
@Override
public void pauseSounds(@Nullable ResourceLocation id, @Nullable SoundSource category) {
if (category != null) {
this.instanceBySource.get(category).forEach((sound) -> {
if (id == null || sound.getLocation().equals(id)) pause(sound);
});
} else if (id == null) {
this.instanceToChannel.keySet().forEach(this::pause);
} else {
this.instanceToChannel.keySet().forEach(sound -> {
if (sound.getLocation().equals(id)) pause(sound);
});
}
}
/** Allows stopping all SoundInstances that belong to a queried category. */
@Inject(method = "stop(Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/sounds/SoundSource;)V", at = @At("HEAD"), cancellable = true)
public void stopSounds(@Nullable ResourceLocation id, @Nullable SoundSource category, CallbackInfo cb) {
if (id == null && category != null) {
this.instanceBySource.get(category).forEach(this::stop);
cb.cancel();
}
}
/** Different behavior for resuming SoundInstances while a BattleMusicInstance is being played. We do not want to resume filtered sounds. */
@Inject(method = "resume()V", at = @At("HEAD"), cancellable = true)
public void resume(CallbackInfo cb) {
if (this.isActive(BattleMusicController.INSTANCE.getMusic())) {
this.instanceBySource.values().forEach(sound -> {
if (sound == BattleMusicController.INSTANCE.getMusic() || !BattleMusicController.INSTANCE.getFilteredCategories().contains(sound.getSource())) {
resume(sound);
}
});
cb.cancel();
}
}
}
@@ -8,12 +8,19 @@
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.sound.battle.BattleMusicController;
import com.cobblemon.mod.common.client.sound.BlockEntitySoundTracker;
import com.cobblemon.mod.common.client.sound.EntitySoundTracker;
import com.cobblemon.mod.common.client.sound.BattleMusicController;
import com.cobblemon.mod.common.client.sound.SoundTracker;
import com.cobblemon.mod.common.duck.SoundManagerDuck;
import com.cobblemon.mod.common.duck.SoundSystemDuck;
import net.minecraft.client.sound.*;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Identifier;
import com.cobblemon.mod.common.duck.SoundEngineDuck;
import net.minecraft.client.resources.sounds.BiomeAmbientSoundsHandler;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.client.resources.sounds.UnderwaterAmbientSoundInstances;
import net.minecraft.client.sounds.SoundEngine;
import net.minecraft.client.sounds.SoundManager;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundSource;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@@ -26,59 +33,65 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public abstract class SoundManagerMixin implements SoundManagerDuck {
@Shadow
public abstract boolean isPlaying(SoundInstance sound);
public abstract boolean isActive(SoundInstance sound);
@Shadow @Final
private SoundSystem soundSystem;
private SoundEngine soundEngine;
// Never-ending ambient loops are a special exception (they are only initiated once) and should always be paused if filtered.
private boolean isAmbientLoop(SoundInstance sound) {
return sound instanceof BiomeEffectSoundPlayer.MusicLoop || sound instanceof AmbientSoundLoops.Underwater;
return sound instanceof BiomeAmbientSoundsHandler.LoopSoundInstance || sound instanceof UnderwaterAmbientSoundInstances.UnderwaterAmbientSoundInstance;
}
private boolean filterCondition(SoundInstance sound) {
return !isAmbientLoop(sound) &&
this.isPlaying(BattleMusicController.INSTANCE.getMusic()) &&
BattleMusicController.INSTANCE.getFilteredCategories().contains(sound.getCategory());
this.isActive(BattleMusicController.INSTANCE.getMusic()) &&
BattleMusicController.INSTANCE.getFilteredCategories().contains(sound.getSource());
}
private boolean ambientLoopCondition(SoundInstance sound) {
return isAmbientLoop(sound) &&
this.isPlaying(BattleMusicController.INSTANCE.getMusic()) &&
BattleMusicController.INSTANCE.getFilteredCategories().contains(sound.getCategory());
this.isActive(BattleMusicController.INSTANCE.getMusic()) &&
BattleMusicController.INSTANCE.getFilteredCategories().contains(sound.getSource());
}
/** Pauses the queried SoundInstance(s). If id is null, will pause all sounds belonging to the SoundCategory. */
@Override
public void pauseSounds(@Nullable Identifier id, @Nullable SoundCategory category) {
((SoundSystemDuck)soundSystem).pauseSounds(id, category);
public void pauseSounds(@Nullable ResourceLocation id, @Nullable SoundSource category) {
((SoundEngineDuck)soundEngine).pauseSounds(id, category);
}
/** Resumes the queried SoundInstance(s). If id is null, will resume all sounds belonging to the SoundCategory. */
@Override
public void resumeSounds(@Nullable Identifier id, @Nullable SoundCategory category) {
((SoundSystemDuck)soundSystem).resumeSounds(id, category);
public void resumeSounds(@Nullable ResourceLocation id, @Nullable SoundSource category) {
((SoundEngineDuck)soundEngine).resumeSounds(id, category);
}
/** Blocks filtered sounds from being played while a BattleMusicInstance is in progress. */
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;)V", at = @At("HEAD"), cancellable = true)
@Inject(method = "play(Lnet/minecraft/client/resources/sounds/SoundInstance;)V", at = @At("HEAD"), cancellable = true)
public void playStart(SoundInstance sound, CallbackInfo cb) {
if (filterCondition(sound)) cb.cancel();
}
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;I)V", at = @At("HEAD"), cancellable = true)
@Inject(method = "playDelayed(Lnet/minecraft/client/resources/sounds/SoundInstance;I)V", at = @At("HEAD"), cancellable = true)
public void playStart(SoundInstance sound, int delay, CallbackInfo cb) {
if (filterCondition(sound)) cb.cancel();
}
/** Pauses ambient loops while a BattleMusicInstance is in progress. */
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;)V", at = @At("TAIL"))
@Inject(method = "play(Lnet/minecraft/client/resources/sounds/SoundInstance;)V", at = @At("TAIL"))
public void playEnd(SoundInstance sound, CallbackInfo cb) {
if (ambientLoopCondition(sound)) this.pauseSounds(sound.getId(), SoundCategory.AMBIENT);
if (ambientLoopCondition(sound)) this.pauseSounds(sound.getLocation(), SoundSource.AMBIENT);
}
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;I)V", at = @At("TAIL"))
@Inject(method = "playDelayed(Lnet/minecraft/client/resources/sounds/SoundInstance;I)V", at = @At("TAIL"))
public void playEnd(SoundInstance sound, int delay, CallbackInfo cb) {
if (ambientLoopCondition(sound)) this.pauseSounds(sound.getId(), SoundCategory.AMBIENT);
if (ambientLoopCondition(sound)) this.pauseSounds(sound.getLocation(), SoundSource.AMBIENT);
}
/** Clears tracked sounds on the client when disconnected. */
@Inject(method = "stop()V", at = @At("TAIL"))
public void stop(CallbackInfo cb) {
SoundTracker.Companion.clear();
}
}
@@ -1,110 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.client.sound.battle.BattleMusicController;
import com.cobblemon.mod.common.duck.SoundSystemDuck;
import com.google.common.collect.Multimap;
import net.minecraft.client.sound.*;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
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;
import java.util.Map;
@Mixin(SoundSystem.class)
public abstract class SoundSystemMixin implements SoundSystemDuck {
@Shadow
private boolean started;
@Shadow
private Multimap<SoundCategory, SoundInstance> sounds;
@Shadow @Final
private Map<SoundInstance, Channel.SourceManager> sources;
@Shadow
protected abstract void stop(SoundInstance sound);
@Shadow
public abstract boolean isPlaying(SoundInstance sound);
/** Resumes the Source belonging to the queried SoundInstance. */
private void resume(SoundInstance sound) {
Channel.SourceManager sourceManager = this.sources.get(sound);
if (this.started && sourceManager != null) sourceManager.run(Source::resume);
}
/** Pauses the Source belonging to the queried SoundInstance. */
private void pause(SoundInstance sound) {
Channel.SourceManager sourceManager = this.sources.get(sound);
if (this.started && sourceManager != null) sourceManager.run(Source::pause);
}
/** Resumes the SoundInstance(s) queried by id and/or category. */
@Override
public void resumeSounds(@Nullable Identifier id, @Nullable SoundCategory category) {
if (category != null) {
this.sounds.get(category).forEach((sound) -> {
if (id == null || sound.getId().equals(id)) resume(sound);
});
} else if (id == null) {
this.sources.keySet().forEach(this::resume);
} else {
this.sources.keySet().forEach(sound -> {
if (sound.getId().equals(id)) resume(sound);
});
}
}
/** Pauses the SoundInstances queried by id and/or category. */
@Override
public void pauseSounds(@Nullable Identifier id, @Nullable SoundCategory category) {
if (category != null) {
this.sounds.get(category).forEach((sound) -> {
if (id == null || sound.getId().equals(id)) pause(sound);
});
} else if (id == null) {
this.sources.keySet().forEach(this::pause);
} else {
this.sources.keySet().forEach(sound -> {
if (sound.getId().equals(id)) pause(sound);
});
}
}
/** Allows stopping all SoundInstances that belong to a queried category. */
@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) {
this.sounds.get(category).forEach(this::stop);
cb.cancel();
}
}
/** Different behavior for resuming SoundInstances while a BattleMusicInstance is being played. We do not want to resume filtered sounds. */
@Inject(method = "resumeAll()V", at = @At("HEAD"), cancellable = true)
public void resumeAll(CallbackInfo cb) {
if (this.isPlaying(BattleMusicController.INSTANCE.getMusic())) {
this.sounds.values().forEach(sound -> {
if (sound == BattleMusicController.INSTANCE.getMusic() || !BattleMusicController.INSTANCE.getFilteredCategories().contains(sound.getCategory())) {
resume(sound);
}
});
cb.cancel();
}
}
}
@@ -10,23 +10,23 @@ 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;
import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement;
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
@Mixin(StructurePool.class)
@Mixin(StructureTemplatePool.class)
public interface StructurePoolAccessor {
@Accessor("elementCounts")
@Accessor("rawTemplates")
List<Pair<StructurePoolElement, Integer>> getElementCounts();
@Mutable
@Accessor("elementCounts")
@Accessor("rawTemplates")
void setElementCounts(List<Pair<StructurePoolElement, Integer>> elementCounts);
@Accessor("elements")
@Accessor("templates")
ObjectArrayList<StructurePoolElement> getElements();
}
@@ -9,47 +9,45 @@
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 com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.RandomState;
import net.minecraft.world.level.levelgen.structure.PoolElementStructurePiece;
import net.minecraft.world.level.levelgen.structure.pools.*;
import net.minecraft.world.level.levelgen.structure.pools.alias.PoolAliasLookup;
import net.minecraft.world.level.levelgen.structure.templatesystem.LiquidSettings;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
import net.minecraft.world.phys.shapes.VoxelShape;
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 org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.util.*;
@Mixin(StructurePoolBasedGenerator.StructurePoolGenerator.class)
@Mixin(JigsawPlacement.Placer.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<>();
private static final Map<ResourceLocation, 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.VILLAGE_PLAINS_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.VILLAGE_DESERT_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.VILLAGE_SAVANNA_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.VILLAGE_SNOWY_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.VILLAGE_TAIGA_POKECENTER, Set.of(pokecenter));
structureGroups.put(CobblemonStructureIDs.SAVANNA_BERRY_SMALL, Set.of(berry));
structureGroups.put(CobblemonStructureIDs.SAVANNA_BERRY_LARGE, Set.of(berry));
@@ -75,11 +73,11 @@ public abstract class StructurePoolGeneratorMixin {
structureMaxes = Collections.unmodifiableMap(aMap);
}
public Set<String> getGroups(Identifier structureIdentifier) {
public Set<String> getGroups(ResourceLocation structureIdentifier) {
return structureGroups.getOrDefault(structureIdentifier, Set.of());
}
public boolean hasReachedMaximum(Identifier structureIdentifier) {
public boolean hasReachedMaximum(ResourceLocation structureIdentifier) {
Set<String> groups = getGroups(structureIdentifier);
for (String group : groups) {
int count = generatedStructureGroupCounts.getOrDefault(group, 0);
@@ -91,7 +89,7 @@ public abstract class StructurePoolGeneratorMixin {
return false;
}
public void incrementStructureCount(Identifier structureIdentifier) {
public void incrementStructureCount(ResourceLocation structureIdentifier) {
Set<String> groups = getGroups(structureIdentifier);
for (String group : groups) {
generatedStructureGroupCounts.put(group, generatedStructureGroupCounts.getOrDefault(group, 0) + 1);
@@ -99,17 +97,17 @@ public abstract class StructurePoolGeneratorMixin {
}
@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) {
private void onStructurePoolGeneratorCreation(Registry<StructureTemplatePool> registry, int maxSize, ChunkGenerator chunkGenerator, StructureTemplateManager structureTemplateManager, List<? super PoolElementStructurePiece> children, RandomSource random, CallbackInfo ci) {
generatedStructureGroupCounts = new HashMap<>();
}
@ModifyVariable(method = "generatePiece", at = @At("STORE"), ordinal = 1)
@ModifyVariable(method = "tryPlacingChildren", 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);
ResourceLocation structurePieceLocationKey = getCobblemonOnlyLocation(structure);
if (structurePieceLocationKey == null) {
reducedList.add(structure);
continue;
@@ -123,55 +121,27 @@ public abstract class StructurePoolGeneratorMixin {
return reducedList.iterator();
}
@ModifyVariable(method = "generatePiece", at = @At("STORE"), ordinal = 1)
private PoolStructurePiece injected(PoolStructurePiece poolStructurePiece) {
Identifier structureLocationKey = getCobblemonOnlyLocation(poolStructurePiece.getPoolElement());
@Inject(method = "tryPlacingChildren", at = @At(value = "NEW", target = "net/minecraft/world/level/levelgen/structure/PoolElementStructurePiece", ordinal = 0), locals = LocalCapture.CAPTURE_FAILHARD)
private void afterTryPlacingChildren(
PoolElementStructurePiece poolElementStructurePiece,
MutableObject<VoxelShape> mutableObject,
int i,
boolean bl,
LevelHeightAccessor levelHeightAccessor,
RandomState randomState,
PoolAliasLookup poolAliasLookup,
LiquidSettings liquidSettings,
CallbackInfo ci,
@Local(ordinal = 1) StructurePoolElement structurePoolElement
) {
ResourceLocation structureLocationKey = getCobblemonOnlyLocation(structurePoolElement);
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);
private static ResourceLocation getCobblemonOnlyLocation(StructurePoolElement structurePoolElement) {
ResourceLocation location = getLocationIfAvailable(structurePoolElement);
if (location == null) return null;
if (!location.getNamespace().equals("cobblemon")) return null;
@@ -179,39 +149,17 @@ public abstract class StructurePoolGeneratorMixin {
return location;
}
private static Identifier getLocationIfAvailable(StructurePoolElement structurePoolElement) {
private static ResourceLocation getLocationIfAvailable(StructurePoolElement structurePoolElement) {
if (structurePoolElement instanceof LegacySinglePoolElement legacySinglePoolElement) {
if (legacySinglePoolElement.location.left().isEmpty()) return null;
if (legacySinglePoolElement.template.left().isEmpty()) return null;
return legacySinglePoolElement.location.left().get();
return legacySinglePoolElement.template.left().get();
} else if (structurePoolElement instanceof SinglePoolElement singlePoolElement) {
if (singlePoolElement.location.left().isEmpty()) return null;
if (singlePoolElement.template.left().isEmpty()) return null;
return singlePoolElement.location.left().get();
return singlePoolElement.template.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;
// }
}
}
@@ -12,8 +12,8 @@ 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 net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
@@ -0,0 +1,33 @@
/*
* 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.Cobblemon;
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.targeting.TargetingConditions;
import org.jetbrains.annotations.Nullable;
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(TargetingConditions.class)
public class TargetingConditionsMixin {
@Inject(method = "test", at = @At("HEAD"), cancellable = true)
public void test(@Nullable LivingEntity baseEntity, LivingEntity targetEntity, CallbackInfoReturnable<Boolean> ci) {
if (targetEntity instanceof ServerPlayer player) {
boolean canTargetInBattle = player.level().getGameRules().getBoolean(CobblemonGameRules.MOB_TARGET_IN_BATTLE);
boolean targetInBattle = Cobblemon.INSTANCE.getBattleRegistry().getBattleByParticipatingPlayer(player) != null;
if (!canTargetInBattle && targetInBattle) ci.setReturnValue(false);
}
}
}
@@ -0,0 +1,68 @@
/*
* 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.Cobblemon;
import com.cobblemon.mod.common.CobblemonVillagerProfessions;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import kotlin.Pair;
import net.minecraft.ChatFormatting;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.renderer.entity.layers.RenderLayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.monster.ZombieVillager;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.npc.VillagerProfession;
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(RenderLayer.class)
public abstract class VillagerProfessionLayerMixin {
@Inject(method = "renderColoredCutoutModel", at = @At(value = "HEAD"), cancellable = true)
private static <T extends LivingEntity> void cobblemon$renderVillagerProfessionLayer(EntityModel<T> entityModel, ResourceLocation resourceLocation, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, int j, CallbackInfo ci) {
if (resourceLocation.getNamespace().equals(Cobblemon.MODID)) {
VillagerProfession profession = null;
boolean isZombie = false;
if (livingEntity instanceof Villager) profession = ((Villager) livingEntity).getVillagerData().getProfession();
if (livingEntity instanceof ZombieVillager) {
profession = ((ZombieVillager) livingEntity).getVillagerData().getProfession();
isZombie = true;
}
Pair<String, String[]> override = CobblemonVillagerProfessions.INSTANCE.getNameTagOverride(profession);
if (profession != null && override != null) {
String entityName = ChatFormatting.stripFormatting(livingEntity.getName().getString());
boolean nameMatches = false;
for (String name: override.getSecond())
if (entityName.endsWith(name)) {
nameMatches = true;
break;
}
if (nameMatches && resourceLocation.equals(getProfessionResourceLocation(resourceLocation.getNamespace(), ResourceLocation.parse(profession.name()).getPath(), isZombie))) {
ResourceLocation textureLocation = getProfessionResourceLocation(resourceLocation.getNamespace(), override.getFirst(), isZombie);
VertexConsumer vertexConsumer = multiBufferSource.getBuffer(RenderType.entityCutoutNoCull(textureLocation));
entityModel.renderToBuffer(poseStack, vertexConsumer, i, LivingEntityRenderer.getOverlayCoords(livingEntity, 0.0F), j);
ci.cancel();
}
}
}
}
private static ResourceLocation getProfessionResourceLocation(String namespace, String profession, Boolean isZombie) {
return ResourceLocation.fromNamespaceAndPath(namespace, "textures/entity/" + (isZombie ? "zombie_villager" : "villager") + "/profession/" + profession + ".png");
}
}
@@ -8,14 +8,14 @@
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.entity.Entity;
import net.minecraft.world.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Entity.class)
public interface AccessorEntity {
@Accessor("standingEyeHeight")
@Accessor("eyeHeight")
void standingEyeHeight(float standingEyeHeight);
}
@@ -0,0 +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/.
*/
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.world.level.biome.Biome;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Biome.class)
public interface BiomeAccessor {
@Accessor("climateSettings")
Biome.ClimateSettings getClimateSettings();
}
@@ -8,16 +8,16 @@
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.world.entity.vehicle.Boat;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(BoatEntity.class)
@Mixin(Boat.class)
public interface BoatEntityAccessor {
@Accessor
@Accessor("lastYd")
void setFallVelocity(double fallVelocity);
@Accessor
BoatEntity.Location getLocation();
@Accessor("status")
Boat.Status getLocation();
}
@@ -0,0 +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/.
*/
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.client.gui.components.AbstractSelectionList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(AbstractSelectionList.class)
public interface EntryListWidgetAccessor {
@Accessor("renderHeader")
boolean getRenderHeader();
}
@@ -8,15 +8,15 @@
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(KeyBinding.class)
@Mixin(KeyMapping.class)
public interface KeyBindingAccessor {
@Accessor("boundKey")
InputUtil.Key boundKey();
@Accessor("key")
InputConstants.Key boundKey();
}
@@ -8,17 +8,17 @@
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.world.effect.MobEffectInstance;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(StatusEffectInstance.class)
@Mixin(MobEffectInstance.class)
public interface StatusEffectInstanceAccessor {
@Accessor
void setAmplifier(int amplifier);
@Accessor
@Accessor("visible")
void setShowParticles(boolean showParticles);
@Accessor
@@ -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.client;
import com.cobblemon.mod.common.client.CobblemonClient;
import com.cobblemon.mod.common.pokedex.scanner.PokedexUsageContext;
import net.minecraft.client.player.AbstractClientPlayer;
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(AbstractClientPlayer.class)
public class AbstractClientPlayerMixin {
@Inject(
method = "getFieldOfViewModifier()F",
at = @At(
value = "HEAD"
),
cancellable = true
)
public void cobblemon$getPokedexFovMultiplier(CallbackInfoReturnable<Float> cir) {
PokedexUsageContext usageContext = CobblemonClient.INSTANCE.getPokedexUsageContext();
if (usageContext.getScanningGuiOpen()) {
cir.setReturnValue(usageContext.getFovMultiplier());
}
}
}
@@ -0,0 +1,30 @@
/*
* 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.client;
import com.cobblemon.mod.common.client.gui.ScrollingWidget;
import net.minecraft.client.gui.components.AbstractSelectionList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@Mixin(AbstractSelectionList.class)
public abstract class EntryListWidgetMixin {
@SuppressWarnings("ConstantValue")
@ModifyConstant(method = "getEntryAtPosition", constant = @Constant(intValue = 4))
public int cobblemon$adjustOnlyIfNecessary(int input) {
if(ScrollingWidget.class.isInstance(this)) {
return 0;
}
return input;
}
}
@@ -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.client;
import com.cobblemon.mod.common.client.CobblemonClient;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiGraphics;
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.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
/**
* Mixin to give us a hook to render the PartyOverlay below the Chat
*
* @author Qu
* @since 2022-02-22
*/
@Mixin(Gui.class)
public class GuiMixin {
//This injects into the actual BooleanSupplier lambda for the "this.layers.add(layeredDraw, () -> !minecraft.options.hideGui)" call
// sus af. You have to get the method name by looking at the bytecode of the class. Can do in intellij By clicking View -> Show Bytecode (top left)
@Inject(method = "method_55797", at = @At("HEAD"), cancellable = true)
private static void cobblemon$dontRenderUiInPokedex(Minecraft minecraft, CallbackInfoReturnable<Boolean> cir) {
if (CobblemonClient.INSTANCE.getPokedexUsageContext().getScanningGuiOpen() && minecraft.options.getCameraType().isFirstPerson()) {
cir.setReturnValue(false);
}
}
}
@@ -9,18 +9,18 @@
package com.cobblemon.mod.common.mixin.entity;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.world.World;
import net.minecraft.world.entity.TamableAnimal;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(TameableEntity.class)
@Mixin(TamableAnimal.class)
public class TameableEntityMixin {
@Redirect(method = "onDeath", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;isClient:Z"))
public boolean cobblemon$checkIfPokemonBeforeSendingMessage(World world) {
return world.isClient || (this.getClass().isAssignableFrom(PokemonEntity.class));
@Redirect(method = "die", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/Level;isClientSide:Z"))
public boolean cobblemon$checkIfPokemonBeforeSendingMessage(Level world) {
return world.isClientSide || (this.getClass().isAssignableFrom(PokemonEntity.class));
}
}
@@ -8,7 +8,6 @@
package com.cobblemon.mod.common.mixin.invoker;
import com.cobblemon.mod.common.integration.adorn.AdornCompatibility;
import java.util.List;
import juuxel.adorn.block.variant.BlockVariantSet;
import juuxel.adorn.block.variant.BlockVariantSets;
@@ -28,6 +27,6 @@ public abstract class AdornRegisterInvoker {
@Inject(method = "register()V", at = @At("HEAD"), remap = false)
void register(CallbackInfo ci) {
variantSets.add(AdornCompatibility.INSTANCE);
// variantSets.add(AdornCompatibility.INSTANCE);
}
}
@@ -8,9 +8,11 @@
package com.cobblemon.mod.common.mixin.invoker;
import net.minecraft.block.*;
import net.minecraft.resource.featuretoggle.FeatureFlag;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.properties.BlockSetType;
import net.minecraft.world.level.material.MapColor;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@@ -18,24 +20,24 @@ import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(Blocks.class)
public interface BlocksInvoker {
@Invoker("createLogBlock")
static PillarBlock createLogBlock(MapColor topMapColor, MapColor sideMapColor) {
@Invoker("log")
static Block createLogBlock(MapColor topMapColor, MapColor sideMapColor) {
throw new UnsupportedOperationException();
}
@Invoker("createLeavesBlock")
static LeavesBlock createLeavesBlock(BlockSoundGroup soundGroup) {
@Invoker("leaves")
static Block createLeavesBlock(SoundType soundGroup) {
throw new UnsupportedOperationException();
}
@Invoker("createWoodenButtonBlock")
static ButtonBlock createWoodenButtonBlock(BlockSetType blockSetType, FeatureFlag... requiredFeatures) {
@Invoker("woodenButton")
static Block createWoodenButtonBlock(BlockSetType blockSetType) {
throw new UnsupportedOperationException();
}
@Invoker("createFlowerPotBlock")
static FlowerPotBlock createFlowerPotBlock(Block flower, FeatureFlag... requiredFeatures) {
@Invoker("flowerPot")
static Block createFlowerPotBlock(Block flower) {
throw new UnsupportedOperationException();
}
}
}
@@ -8,14 +8,14 @@
package com.cobblemon.mod.common.mixin.invoker;
import net.minecraft.world.GameRules;
import net.minecraft.world.level.GameRules;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(GameRules.BooleanRule.class)
@Mixin(GameRules.BooleanValue.class)
public interface BooleanRuleInvoker {
@Invoker("create")
static GameRules.Type<GameRules.BooleanRule> cobblemon$create(boolean initialValue) {
static GameRules.Type<GameRules.BooleanValue> cobblemon$create(boolean initialValue) {
throw new UnsupportedOperationException();
}
}
@@ -8,13 +8,13 @@
package com.cobblemon.mod.common.mixin.invoker;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.entity.Entity;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.world.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(ClientPlayNetworkHandler.class)
@Mixin(ClientPacketListener.class)
public interface ClientPlayNetworkHandlerInvoker {
@Invoker
@Invoker("postAddEntitySoundInstance")
void callPlaySpawnSound(Entity entity);
}
@@ -8,17 +8,16 @@
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 net.minecraft.world.level.block.DoorBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.BlockSetType;
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) {
static DoorBlock cobblemon$create(BlockSetType blockSetType, BlockBehaviour.Properties settings) {
throw new UnsupportedOperationException();
}
}
}
@@ -8,13 +8,12 @@
package com.cobblemon.mod.common.mixin.invoker;
import net.minecraft.block.Block;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FireBlock;
import org.spongepowered.asm.mixin.Mixin;
import net.minecraft.block.FireBlock;
import net.minecraft.block.Blocks;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(FireBlock.class)
public interface FireBlockInvoker {
@Invoker("registerFlammableBlock") void registerNewFlammableBlock(Block block, int burnChance, int spreadChance);
@Invoker("setFlammable") void registerNewFlammableBlock(Block block, int burnChance, int spreadChance);
}
@@ -8,17 +8,16 @@
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 net.minecraft.world.level.block.PressurePlateBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.BlockSetType;
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) {
static PressurePlateBlock cobblemon$create(BlockSetType type, BlockBehaviour.Properties settings) {
throw new UnsupportedOperationException();
}
}
}
@@ -8,16 +8,16 @@
package com.cobblemon.mod.common.mixin.invoker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.StairsBlock;
import net.minecraft.world.level.block.StairBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(StairsBlock.class)
@Mixin(StairBlock.class)
public interface StairsBlockInvoker {
@Invoker("<init>")
static StairsBlock cobblemon$create(BlockState baseBlockState, AbstractBlock.Settings settings) {
static StairBlock cobblemon$create(BlockState baseBlockState, BlockBehaviour.Properties settings) {
throw new UnsupportedOperationException();
}
}
@@ -8,17 +8,16 @@
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 net.minecraft.world.level.block.TrapDoorBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.BlockSetType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(TrapdoorBlock.class)
@Mixin(TrapDoorBlock.class)
public interface TrapdoorBlockInvoker {
@Invoker("<init>")
static TrapdoorBlock cobblemon$create(AbstractBlock.Settings settings, BlockSetType blockSetType) {
static TrapDoorBlock cobblemon$create(BlockSetType blockSetType, BlockBehaviour.Properties settings) {
throw new UnsupportedOperationException();
}
}
}
@@ -1,65 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin.pokeball;
import com.cobblemon.mod.common.item.PokeBallItem;
import net.minecraft.client.render.VertexConsumerProvider;
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;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Final;
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;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ItemRenderer.class)
public abstract class ItemRendererMixin {
@Shadow @Final private ItemModels models;
@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) {
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);
}
}
@Inject(
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, 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) {
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);
}
}
}
}
@@ -9,24 +9,24 @@
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 net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.projectile.ThrowableProjectile;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
@Mixin(ThrownEntity.class)
@Mixin(ThrowableProjectile.class)
public abstract class ThrownEntityMixin extends Entity {
public ThrownEntityMixin(EntityType<?> type, World world) {
public ThrownEntityMixin(EntityType<?> type, Level world) {
super(type, world);
}
@ModifyVariable(method = "tick", at = @At("STORE"), ordinal = 0)
private float cobblemon$waterDragModifier(float value) {
if (this.isTouchingWater() && this instanceof WaterDragModifier) {
if (this.isInWater() && this instanceof WaterDragModifier) {
return ((WaterDragModifier) this).waterDrag();
}
return value;
@@ -8,10 +8,10 @@
package com.cobblemon.mod.common
import net.minecraft.client.MinecraftClient
import net.minecraft.client.render.model.BakedModel
import net.minecraft.client.util.ModelIdentifier
import net.minecraft.util.Identifier
import net.minecraft.client.Minecraft
import net.minecraft.client.resources.model.BakedModel
import net.minecraft.client.resources.model.ModelResourceLocation
import net.minecraft.resources.ResourceLocation
/**
* Contains information for forcing a model to be baked
@@ -20,10 +20,10 @@ import net.minecraft.util.Identifier
* @param modelIdentifier The identifier that the BakedModel will be registered to
*/
data class BakingOverride(
val modelLocation: Identifier,
val modelIdentifier: ModelIdentifier
val modelLocation: ResourceLocation,
val modelIdentifier: ModelResourceLocation
) {
fun getModel(): BakedModel {
return MinecraftClient.getInstance().bakedModelManager.getModel(modelIdentifier)
return Minecraft.getInstance().modelManager.getModel(modelIdentifier)
}
}
@@ -9,8 +9,6 @@
package com.cobblemon.mod.common
import com.cobblemon.mod.common.CobblemonBuildDetails.smallCommitHash
import com.cobblemon.mod.common.advancement.CobblemonCriteria
import com.cobblemon.mod.common.advancement.criterion.EvolvePokemonContext
import com.cobblemon.mod.common.api.Priority
import com.cobblemon.mod.common.api.SeasonResolver
import com.cobblemon.mod.common.api.data.DataProvider
@@ -18,16 +16,7 @@ import com.cobblemon.mod.common.api.drop.CommandDropEntry
import com.cobblemon.mod.common.api.drop.DropEntry
import com.cobblemon.mod.common.api.drop.ItemDropEntry
import com.cobblemon.mod.common.api.events.CobblemonEvents
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.LEVEL_UP_EVENT
import com.cobblemon.mod.common.api.events.CobblemonEvents.POKEMON_CAPTURED
import com.cobblemon.mod.common.api.events.CobblemonEvents.TRADE_COMPLETED
import com.cobblemon.mod.common.api.net.serializers.IdentifierDataSerializer
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.CaptureCalculators
@@ -54,7 +43,6 @@ import com.cobblemon.mod.common.api.spawning.prospecting.SpawningProspector
import com.cobblemon.mod.common.api.starter.StarterHandler
import com.cobblemon.mod.common.api.storage.PokemonStoreManager
import com.cobblemon.mod.common.api.storage.adapter.conversions.ReforgedConversion
import com.cobblemon.mod.common.api.storage.adapter.database.MongoDBStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.FileStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.JSONStoreAdapter
import com.cobblemon.mod.common.api.storage.adapter.flatfile.NBTStoreAdapter
@@ -62,9 +50,11 @@ import com.cobblemon.mod.common.api.storage.factory.FileBackedPokemonStoreFactor
import com.cobblemon.mod.common.api.storage.molang.NbtMoLangDataStoreFactory
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.storage.player.PlayerInstancedDataStoreManager
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreTypes
import com.cobblemon.mod.common.api.storage.player.adapter.DexDataNbtBackend
import com.cobblemon.mod.common.api.storage.player.adapter.PlayerDataJsonBackend
import com.cobblemon.mod.common.api.storage.player.factory.CachedPlayerDataStoreFactory
import com.cobblemon.mod.common.api.tags.CobblemonEntityTypeTags
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
import com.cobblemon.mod.common.battles.BagItems
@@ -74,21 +64,24 @@ import com.cobblemon.mod.common.battles.BattleSide
import com.cobblemon.mod.common.battles.ShowdownThread
import com.cobblemon.mod.common.battles.actor.PokemonBattleActor
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.command.argument.DexArgumentType
import com.cobblemon.mod.common.command.argument.DialogueArgumentType
import com.cobblemon.mod.common.command.argument.FormArgumentType
import com.cobblemon.mod.common.command.argument.MoveArgumentType
import com.cobblemon.mod.common.command.argument.NPCClassArgumentType
import com.cobblemon.mod.common.command.argument.PartySlotArgumentType
import com.cobblemon.mod.common.command.argument.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.command.argument.SpeciesArgumentType
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
import com.cobblemon.mod.common.events.AdvancementHandler
import com.cobblemon.mod.common.events.PokedexHandler
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.permission.LaxPermissionValidator
import com.cobblemon.mod.common.platform.events.PlatformEvents
@@ -98,51 +91,45 @@ import com.cobblemon.mod.common.pokemon.aspects.SHINY_ASPECT
import com.cobblemon.mod.common.pokemon.evolution.variants.BlockClickEvolution
import com.cobblemon.mod.common.pokemon.feature.TagSeasonResolver
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
import com.cobblemon.mod.common.pokemon.properties.AspectPropertyType
import com.cobblemon.mod.common.pokemon.properties.FreezeFrameProperty
import com.cobblemon.mod.common.pokemon.properties.HiddenAbilityPropertyType
import com.cobblemon.mod.common.pokemon.properties.NoAIProperty
import com.cobblemon.mod.common.pokemon.properties.UnaspectPropertyType
import com.cobblemon.mod.common.pokemon.properties.UncatchableProperty
import com.cobblemon.mod.common.pokemon.properties.tags.PokemonFlagProperty
import com.cobblemon.mod.common.pokemon.stat.CobblemonStatProvider
import com.cobblemon.mod.common.starter.CobblemonStarterHandler
import com.cobblemon.mod.common.trade.TradeManager
import com.cobblemon.mod.common.util.DataKeys
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.ifDedicatedServer
import com.cobblemon.mod.common.util.isLaterVersion
import com.cobblemon.mod.common.util.party
import com.cobblemon.mod.common.util.removeAmountIf
import com.cobblemon.mod.common.util.server
import com.cobblemon.mod.common.util.*
import com.cobblemon.mod.common.world.feature.CobblemonPlacedFeatures
import com.cobblemon.mod.common.world.feature.ore.CobblemonOrePlacedFeatures
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.client.MongoClient
import com.mongodb.client.MongoClients
import net.minecraft.client.MinecraftClient
import net.minecraft.command.argument.serialize.ConstantArgumentSerializer
import net.minecraft.entity.data.TrackedDataHandlerRegistry
import net.minecraft.item.Items
import net.minecraft.item.NameTagItem
import net.minecraft.registry.RegistryKey
import net.minecraft.util.WorldSavePath
import net.minecraft.world.World
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.PrintWriter
import java.util.*
import kotlin.math.roundToInt
import kotlin.properties.Delegates
import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.isAccessible
import kotlin.reflect.jvm.javaField
import kotlin.math.roundToInt
import net.minecraft.client.Minecraft
import net.minecraft.commands.synchronization.SingletonArgumentInfo
import net.minecraft.resources.ResourceKey
import net.minecraft.world.item.NameTagItem
import net.minecraft.world.level.Level
import net.minecraft.world.level.storage.LevelResource
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
object Cobblemon {
const val MODID = CobblemonBuildDetails.MOD_ID
const val VERSION = CobblemonBuildDetails.VERSION
const val CONFIG_PATH = "config/$MODID/main.json"
@JvmField
val LOGGER: Logger = LogManager.getLogger()
lateinit var implementation: CobblemonImplementation
@@ -164,7 +151,7 @@ object Cobblemon {
val battleRegistry = BattleRegistry
var storage = PokemonStoreManager()
var molangData = NbtMoLangDataStoreFactory
lateinit var playerData: PlayerDataStoreManager
lateinit var playerDataManager: PlayerInstancedDataStoreManager
lateinit var starterConfig: StarterConfig
val dataProvider: DataProvider = CobblemonDataProvider
var permissionValidator: PermissionValidator by Delegates.observable(LaxPermissionValidator().also { it.initialize() }) { _, _, newValue -> newValue.initialize() }
@@ -175,20 +162,25 @@ object Cobblemon {
this.implementation = implementation
this.LOGGER.info("Launching Cobblemon ${CobblemonBuildDetails.VERSION}${if(CobblemonBuildDetails.SNAPSHOT) "-SNAPSHOT" else ""} ")
if(CobblemonBuildDetails.SNAPSHOT) {
if (CobblemonBuildDetails.SNAPSHOT) {
this.LOGGER.info(" - Git Commit: ${smallCommitHash()} (https://gitlab.com/cable-mc/cobblemon/-/commit/${CobblemonBuildDetails.GIT_COMMIT})")
this.LOGGER.info(" - Branch: ${CobblemonBuildDetails.BRANCH}")
}
implementation.registerPermissionValidator()
implementation.registerSoundEvents()
implementation.registerDataComponents()
implementation.registerBlocks()
implementation.registerItems()
implementation.registerEntityTypes()
implementation.registerEntityAttributes()
implementation.registerBlockEntityTypes()
implementation.registerVillagers()
implementation.registerWorldGenFeatures()
implementation.registerParticles()
implementation.registerEntityDataSerializers()
implementation.registerCriteria()
implementation.registerEntitySubPredicates()
DropEntry.register("command", CommandDropEntry::class.java)
DropEntry.register("item", ItemDropEntry::class.java, isDefault = true)
@@ -202,22 +194,21 @@ object Cobblemon {
CobblemonPlacedFeatures.register()
this.registerArgumentTypes()
CobblemonCriteria // Init the fields and register the criteria
CobblemonGameRules // Init fields and register
ShoulderEffectRegistry.register()
DATA_SYNCHRONIZED.subscribe {
storage.onPlayerDataSync(it)
playerData.get(it).sendToPlayer(it)
playerDataManager.syncAllToPlayer(it)
starterHandler.handleJoin(it)
ServerSettingsPacket(this.config.preventCompletePartyDeposit, this.config.displayEntityLevelLabel).sendToPlayer(it)
ServerSettingsPacket(this.config.preventCompletePartyDeposit, this.config.displayEntityLevelLabel, this.config.displayEntityNameLabel).sendToPlayer(it)
}
PlatformEvents.SERVER_PLAYER_LOGOUT.subscribe {
PCLinkManager.removeLink(it.player.uuid)
BattleRegistry.getBattleByParticipatingPlayer(it.player)?.stop()
BattleRegistry.onPlayerDisconnect(it.player)
storage.onPlayerDisconnect(it.player)
playerData.onPlayerDisconnect(it.player)
playerDataManager.onPlayerDisconnect(it.player)
TradeManager.onLogoff(it.player)
}
PlatformEvents.PLAYER_DEATH.subscribe {
@@ -226,45 +217,39 @@ object Cobblemon {
}
PlatformEvents.RIGHT_CLICK_ENTITY.subscribe { event ->
if (event.player.getStackInHand(event.hand).item is NameTagItem && event.entity.type.isIn(CobblemonEntityTypeTags.CANNOT_HAVE_NAME_TAG)) {
if (event.player.getItemInHand(event.hand).item is NameTagItem && event.entity.type.`is`(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
val block = player.level().getBlockState(event.pos).block
player.party().forEach { pokemon ->
pokemon.lockedEvolutions
.filterIsInstance<BlockClickEvolution>()
.forEach { evolution ->
evolution.attemptEvolution(pokemon, BlockClickEvolution.BlockInteractionContext(block, player.world))
evolution.attemptEvolution(pokemon, BlockClickEvolution.BlockInteractionContext(block, player.level()))
}
}
}
// Register the grow_tumblestone advancement
PlatformEvents.RIGHT_CLICK_BLOCK.subscribe { AdvancementHandler.onTumbleStonePlaced(it) }
PlatformEvents.CHANGE_DIMENSION.subscribe {
it.player.party().forEach { pokemon -> pokemon.entity?.recallWithAnimation() }
}
TrackedDataHandlerRegistry.register(Vec3DataSerializer)
TrackedDataHandlerRegistry.register(StringSetDataSerializer)
TrackedDataHandlerRegistry.register(PoseTypeDataSerializer)
TrackedDataHandlerRegistry.register(IdentifierDataSerializer)
// Lowest priority because this applies after luxury ball bonus as of gen 4
CobblemonEvents.FRIENDSHIP_UPDATED.subscribe(Priority.LOWEST) { event ->
var increment = (event.newFriendship - event.pokemon.friendship).toFloat()
// Our Luxury ball spec is diff from official, but we will still assume these stack
if (event.pokemon.heldItemNoCopy().isIn(CobblemonItemTags.IS_FRIENDSHIP_BOOSTER)) {
if (event.pokemon.heldItemNoCopy().`is`(CobblemonItemTags.IS_FRIENDSHIP_BOOSTER)) {
increment += increment * 0.5F
}
event.newFriendship = event.pokemon.friendship + increment.roundToInt()
}
HeldItemProvider.register(CobblemonHeldItemManager, Priority.LOWEST)
}
fun initialize() {
@@ -290,6 +275,10 @@ object Cobblemon {
CustomPokemonProperty.register(UncatchableProperty)
CustomPokemonProperty.register(PokemonFlagProperty)
CustomPokemonProperty.register(HiddenAbilityPropertyType)
CustomPokemonProperty.register(AspectPropertyType)
CustomPokemonProperty.register(UnaspectPropertyType)
CustomPokemonProperty.register(FreezeFrameProperty)
CustomPokemonProperty.register(NoAIProperty)
ifDedicatedServer {
isDedicatedServer = true
@@ -304,16 +293,21 @@ object Cobblemon {
}
PlatformEvents.SERVER_STARTING.subscribe { event ->
val server = event.server
playerData = PlayerDataStoreManager().also { it.setup(server) }
playerDataManager = PlayerInstancedDataStoreManager().also { it.setup(server) }
val mongoClient: MongoClient?
val pokemonStoreRoot = server.getSavePath(WorldSavePath.ROOT).resolve("pokemon").toFile()
val pokemonStoreRoot = server.getWorldPath(LevelResource.ROOT).resolve("pokemon").toFile()
val storeAdapter = when (config.storageFormat) {
"nbt", "json" -> {
val jsonFactory = JsonPlayerDataStoreFactory()
jsonFactory.setup(server)
playerData.setFactory(jsonFactory)
val generalJsonFactory = CachedPlayerDataStoreFactory(PlayerDataJsonBackend())
generalJsonFactory.setup(server)
val pokedexNbtFactory = CachedPlayerDataStoreFactory(DexDataNbtBackend())
pokedexNbtFactory.setup(server)
playerDataManager.setFactory(generalJsonFactory, PlayerInstancedDataStoreTypes.GENERAL)
playerDataManager.setFactory(pokedexNbtFactory, PlayerInstancedDataStoreTypes.POKEDEX)
if (config.storageFormat == "nbt") {
NBTStoreAdapter(pokemonStoreRoot.absolutePath, useNestedFolders = true, folderPerClass = true)
@@ -326,7 +320,9 @@ object Cobblemon {
}
}
/*
"mongodb" -> {
/*
try {
Class.forName("com.mongodb.client.MongoClient")
@@ -335,17 +331,21 @@ object Cobblemon {
.build()
mongoClient = MongoClients.create(mongoClientSettings)
val mongoFactory = MongoPlayerDataStoreFactory(mongoClient, config.mongoDBDatabaseName)
playerData.setFactory(mongoFactory)
playerData.setFactory(mongoFactory, PlayerInstancedDataStoreType.GENERAL)
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<*>
.with(ReforgedConversion(server.getWorldPath(LevelResource.ROOT))) as FileStoreAdapter<*>
storage.registerFactory(
priority = Priority.LOWEST,
@@ -358,52 +358,14 @@ object Cobblemon {
}
PlatformEvents.SERVER_STOPPED.subscribe {
storage.unregisterAll()
playerData.saveAll()
storage.unregisterAll(it.server.registryAccess())
playerDataManager.saveAllStores()
}
PlatformEvents.SERVER_STARTED.subscribe {
bestSpawner.onServerStarted()
battleRegistry.onServerStarted()
}
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) }
EVOLUTION_COMPLETE.subscribe(Priority.LOWEST) { event ->
AdvancementHandler.onEvolve(event)
val pokemon = event.pokemon
val ninjaskIdentifier = cobblemonResource("ninjask")
// Ensure the config option is enabled and that the result was a ninjask and that shedinja exists
if (this.config.ninjaskCreatesShedinja && pokemon.species.resourceIdentifier == ninjaskIdentifier && PokemonSpecies.getByIdentifier(Pokemon.SHEDINJA) != null) {
val player = pokemon.getOwnerPlayer() ?: return@subscribe
if (player.isCreative || 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
}
}
}
if (!player.isCreative) {
player.inventory.removeAmountIf(1) { it.item is PokeBallItem }
}
if (pokeball == Items.AIR) {
pokeball = CobblemonItems.POKE_BALL
}
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)
CobblemonCriteria.EVOLVE_POKEMON.trigger(player, EvolvePokemonContext(event.pokemon.preEvolution!!.species.resourceIdentifier, product.species.resourceIdentifier, playerData.get(player).advancementData.totalEvolvedCount))
}
}
}
LEVEL_UP_EVENT.subscribe { AdvancementHandler.onLevelUp(it) }
TRADE_COMPLETED.subscribe { AdvancementHandler.onTradeCompleted(it) }
BagItems.observable.subscribe {
LOGGER.info("Starting dummy Showdown battle to force it to pre-load data.")
@@ -415,14 +377,20 @@ object Cobblemon {
).ifSuccessful { it.mute = true }
}
registerEventHandlers()
}
fun getLevel(dimension: RegistryKey<World>): World? {
fun registerEventHandlers() {
AdvancementHandler.registerListeners()
PokedexHandler.registerListeners()
}
fun getLevel(dimension: ResourceKey<Level>): Level? {
return if (isDedicatedServer) {
server()?.getWorld(dimension)
server()?.getLevel(dimension)
} else {
val mc = MinecraftClient.getInstance()
return mc.server?.getWorld(dimension) ?: mc.world
val mc = Minecraft.getInstance()
return mc.singleplayerServer?.getLevel(dimension) ?: mc.level
}
}
@@ -512,13 +480,16 @@ object Cobblemon {
}
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))
this.implementation.registerCommandArgument(cobblemonResource("dialogue"), DialogueArgumentType::class, ConstantArgumentSerializer.of(DialogueArgumentType::dialogue))
this.implementation.registerCommandArgument(cobblemonResource("pokemon"), SpeciesArgumentType::class, SingletonArgumentInfo.contextFree(SpeciesArgumentType::species))
this.implementation.registerCommandArgument(cobblemonResource("pokemon_properties"), PokemonPropertiesArgumentType::class, SingletonArgumentInfo.contextFree(PokemonPropertiesArgumentType::properties))
this.implementation.registerCommandArgument(cobblemonResource("spawn_bucket"), SpawnBucketArgumentType::class, SingletonArgumentInfo.contextFree(SpawnBucketArgumentType::spawnBucket))
this.implementation.registerCommandArgument(cobblemonResource("move"), MoveArgumentType::class, SingletonArgumentInfo.contextFree(MoveArgumentType::move))
this.implementation.registerCommandArgument(cobblemonResource("party_slot"), PartySlotArgumentType::class, SingletonArgumentInfo.contextFree(PartySlotArgumentType::partySlot))
this.implementation.registerCommandArgument(cobblemonResource("pokemon_store"), PokemonStoreArgumentType::class, SingletonArgumentInfo.contextFree(PokemonStoreArgumentType::pokemonStore))
this.implementation.registerCommandArgument(cobblemonResource("dialogue"), DialogueArgumentType::class, SingletonArgumentInfo.contextFree(DialogueArgumentType::dialogue))
this.implementation.registerCommandArgument(cobblemonResource("form"), FormArgumentType::class, SingletonArgumentInfo.contextFree(FormArgumentType::form))
this.implementation.registerCommandArgument(cobblemonResource("dex"), DexArgumentType::class, SingletonArgumentInfo.contextFree (DexArgumentType::dex))
this.implementation.registerCommandArgument(cobblemonResource("npc_class"), NPCClassArgumentType::class, SingletonArgumentInfo.contextFree(NPCClassArgumentType::npcClass))
}
}
}
@@ -8,11 +8,14 @@
package com.cobblemon.mod.common
import net.minecraft.entity.ai.brain.Activity
import net.minecraft.world.entity.schedule.Activity
object CobblemonActivities {
val activities = mutableListOf<Activity>()
val BATTLING_ACTIVITY = Activity("pokemon_battling")
val NPC_BATTLING = Activity("npc_battling")
val NPC_ACTION_EFFECT = Activity("npc_action_effect")
val NPC_CHATTING = Activity("npc_chatting")
fun register(activity: Activity): Activity {
activities.add(activity)
@@ -19,35 +19,38 @@ import com.cobblemon.mod.common.block.multiblock.FossilMultiblockBuilder
import com.cobblemon.mod.common.block.entity.*
import com.cobblemon.mod.common.block.entity.DisplayCaseBlockEntity
import com.cobblemon.mod.common.platform.PlatformRegistry
import net.minecraft.block.entity.BlockEntityType
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.world.level.block.entity.BlockEntityType
import net.minecraft.resources.ResourceKey
object CobblemonBlockEntities : PlatformRegistry<Registry<BlockEntityType<*>>, RegistryKey<Registry<BlockEntityType<*>>>, BlockEntityType<*>>() {
object CobblemonBlockEntities : PlatformRegistry<Registry<BlockEntityType<*>>, ResourceKey<Registry<BlockEntityType<*>>>, BlockEntityType<*>>() {
override val registry: Registry<BlockEntityType<*>> = Registries.BLOCK_ENTITY_TYPE
override val registryKey: RegistryKey<Registry<BlockEntityType<*>>> = RegistryKeys.BLOCK_ENTITY_TYPE
override val registry: Registry<BlockEntityType<*>> = BuiltInRegistries.BLOCK_ENTITY_TYPE
override val resourceKey: ResourceKey<Registry<BlockEntityType<*>>> = Registries.BLOCK_ENTITY_TYPE
@JvmField
val HEALING_MACHINE: BlockEntityType<HealingMachineBlockEntity> = this.create("healing_machine", BlockEntityType.Builder.create(::HealingMachineBlockEntity, CobblemonBlocks.HEALING_MACHINE).build(null))
val HEALING_MACHINE: BlockEntityType<HealingMachineBlockEntity> = this.create("healing_machine", BlockEntityType.Builder.of(::HealingMachineBlockEntity, CobblemonBlocks.HEALING_MACHINE).build(null))
@JvmField
val PC: BlockEntityType<PCBlockEntity> = this.create("pc", BlockEntityType.Builder.create(::PCBlockEntity, CobblemonBlocks.PC).build(null))
val PC: BlockEntityType<PCBlockEntity> = this.create("pc", BlockEntityType.Builder.of(::PCBlockEntity, CobblemonBlocks.PC).build(null))
@JvmField
val BERRY = this.create("berry", BlockEntityType.Builder.create(::BerryBlockEntity, *CobblemonBlocks.berries().values.toTypedArray()).build(null))
val LECTERN: BlockEntityType<LecternBlockEntity> = this.create("lectern", BlockEntityType.Builder.of(::LecternBlockEntity, CobblemonBlocks.LECTERN).build(null))
@JvmField
val PASTURE: BlockEntityType<PokemonPastureBlockEntity> = this.create("pasture", BlockEntityType.Builder.create(::PokemonPastureBlockEntity, CobblemonBlocks.PASTURE).build(null))
@JvmField
val SIGN: BlockEntityType<CobblemonSignBlockEntity> = this.create("sign", BlockEntityType.Builder.create(::CobblemonSignBlockEntity, CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN).build(null))
@JvmField
val HANGING_SIGN: BlockEntityType<CobblemonHangingSignBlockEntity> = this.create("hanging_sign", BlockEntityType.Builder.create(::CobblemonHangingSignBlockEntity, CobblemonBlocks.APRICORN_HANGING_SIGN, CobblemonBlocks.APRICORN_WALL_HANGING_SIGN).build(null))
val BERRY = this.create("berry", BlockEntityType.Builder.of(::BerryBlockEntity, *CobblemonBlocks.berries().values.toTypedArray()).build(null))
@JvmField
val GILDED_CHEST: BlockEntityType<GildedChestBlockEntity> = this.create("chest", BlockEntityType.Builder.create(::GildedChestBlockEntity,
val PASTURE: BlockEntityType<PokemonPastureBlockEntity> = this.create("pasture", BlockEntityType.Builder.of(::PokemonPastureBlockEntity, CobblemonBlocks.PASTURE).build(null))
@JvmField
val SIGN: BlockEntityType<CobblemonSignBlockEntity> = this.create("sign", BlockEntityType.Builder.of(::CobblemonSignBlockEntity, CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN).build(null))
@JvmField
val HANGING_SIGN: BlockEntityType<CobblemonHangingSignBlockEntity> = this.create("hanging_sign", BlockEntityType.Builder.of(::CobblemonHangingSignBlockEntity, CobblemonBlocks.APRICORN_HANGING_SIGN, CobblemonBlocks.APRICORN_WALL_HANGING_SIGN).build(null))
@JvmField
val GILDED_CHEST: BlockEntityType<GildedChestBlockEntity> = this.create("chest", BlockEntityType.Builder.of(::GildedChestBlockEntity,
CobblemonBlocks.GILDED_CHEST,
CobblemonBlocks.BLUE_GILDED_CHEST,
CobblemonBlocks.YELLOW_GILDED_CHEST,
@@ -60,27 +63,27 @@ object CobblemonBlockEntities : PlatformRegistry<Registry<BlockEntityType<*>>, R
@JvmField
val FOSSIL_MULTIBLOCK: BlockEntityType<FossilMultiblockEntity> = this.create("fossil_multiblock",
BlockEntityType.Builder.create({ pos, state -> FossilMultiblockEntity(pos, state, FossilMultiblockBuilder(pos)) },
BlockEntityType.Builder.of({ pos, state -> FossilMultiblockEntity(pos, state, FossilMultiblockBuilder(pos)) },
CobblemonBlocks.MONITOR
).build(null)
)
@JvmField
val RESTORATION_TANK: BlockEntityType<RestorationTankBlockEntity> = this.create("restoration_tank",
BlockEntityType.Builder.create({ pos, state -> RestorationTankBlockEntity(pos, state, FossilMultiblockBuilder(pos)) },
BlockEntityType.Builder.of({ pos, state -> RestorationTankBlockEntity(pos, state, FossilMultiblockBuilder(pos)) },
CobblemonBlocks.RESTORATION_TANK
).build(null)
)
@JvmField
val FOSSIL_ANALYZER: BlockEntityType<FossilAnalyzerBlockEntity> = this.create("fossil_analyzer",
BlockEntityType.Builder.create({ pos, state -> FossilAnalyzerBlockEntity(pos, state, FossilMultiblockBuilder(pos)) },
BlockEntityType.Builder.of({ pos, state -> FossilAnalyzerBlockEntity(pos, state, FossilMultiblockBuilder(pos)) },
CobblemonBlocks.FOSSIL_ANALYZER
).build(null)
)
@JvmField
val DISPLAY_CASE: BlockEntityType<DisplayCaseBlockEntity> = this.create("display_case",
BlockEntityType.Builder.create(::DisplayCaseBlockEntity, CobblemonBlocks.DISPLAY_CASE).build(null)
BlockEntityType.Builder.of(::DisplayCaseBlockEntity, CobblemonBlocks.DISPLAY_CASE).build(null)
)
}
@@ -10,42 +10,38 @@ package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.apricorn.Apricorn
import com.cobblemon.mod.common.block.*
import com.cobblemon.mod.common.block.LecternBlock
import com.cobblemon.mod.common.block.MintBlock.MintType
import com.cobblemon.mod.common.block.FossilAnalyzerBlock
import com.cobblemon.mod.common.block.MonitorBlock
import com.cobblemon.mod.common.block.RestorationTankBlock
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 com.cobblemon.mod.common.block.chest.GildedChestBlock
import com.cobblemon.mod.common.block.sign.CobblemonHangingSignBlock
import com.cobblemon.mod.common.block.sign.CobblemonSignBlock
import com.cobblemon.mod.common.block.sign.CobblemonWallHangingSignBlock
import com.cobblemon.mod.common.block.sign.CobblemonWallSignBlock
import net.minecraft.block.*
import net.minecraft.block.enums.Instrument
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.Identifier
import net.minecraft.util.math.intprovider.UniformIntProvider
import com.cobblemon.mod.common.mixin.invoker.*
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.effect.MobEffects
import net.minecraft.world.level.block.*
import net.minecraft.world.level.block.state.BlockBehaviour
import net.minecraft.world.level.block.state.properties.BlockSetType
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument
import net.minecraft.world.level.block.state.properties.WoodType
import net.minecraft.world.level.material.MapColor
import net.minecraft.world.level.material.PushReaction
@Suppress("SameParameterValue", "HasPlatformType", "MemberVisibilityCanBePrivate", "unused")
object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<Block>>, Block>() {
object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<Block>>, Block>() {
override val registry: Registry<Block> = Registries.BLOCK
override val registryKey: RegistryKey<Registry<Block>> = RegistryKeys.BLOCK
override val registry: Registry<Block> = BuiltInRegistries.BLOCK
override val resourceKey: ResourceKey<Registry<Block>> = Registries.BLOCK
val APRICORN_BLOCK_SET_TYPE = BlockSetType("apricorn")
val APRICORN_WOOD_TYPE = WoodType.register(WoodType("apricorn", APRICORN_BLOCK_SET_TYPE))
@@ -101,7 +97,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
// Apricorns
@JvmField
val APRICORN_LOG = log("apricorn_log", arg2 = MapColor.BROWN)
val APRICORN_LOG = log("apricorn_log", arg2 = MapColor.COLOR_BROWN)
@JvmField
val STRIPPED_APRICORN_LOG = log("stripped_apricorn_log")
@JvmField
@@ -109,35 +105,40 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
@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).instrument(Instrument.BASS).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)))
val APRICORN_PLANKS = this.create("apricorn_planks",
Block(
BlockBehaviour.Properties.of().mapColor(MapColor.DIRT).instrument(NoteBlockInstrument.BASS)
.strength(2.0f, 3.0f).sound(SoundType.WOOD)
)
)
@JvmField
val APRICORN_LEAVES = leaves("apricorn_leaves")
@JvmField
val APRICORN_FENCE = this.create("apricorn_fence", FenceBlock(AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).instrument(Instrument.BASS).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)))
val APRICORN_FENCE = this.create("apricorn_fence", FenceBlock(BlockBehaviour.Properties.of().mapColor(APRICORN_PLANKS.defaultMapColor()).instrument(NoteBlockInstrument.BASS).strength(2.0f, 3.0f).sound(SoundType.WOOD)))
@JvmField
val APRICORN_FENCE_GATE = this.create("apricorn_fence_gate", FenceGateBlock(AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).instrument(Instrument.BASS).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD), APRICORN_WOOD_TYPE))
val APRICORN_FENCE_GATE = this.create("apricorn_fence_gate", FenceGateBlock(APRICORN_WOOD_TYPE, BlockBehaviour.Properties.of().mapColor(APRICORN_PLANKS.defaultMapColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)))
@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).instrument(Instrument.BASS).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD), APRICORN_BLOCK_SET_TYPE))
val APRICORN_PRESSURE_PLATE = this.create("apricorn_pressure_plate", PressurePlateBlockInvoker.`cobblemon$create`(APRICORN_BLOCK_SET_TYPE, BlockBehaviour.Properties.of().mapColor(APRICORN_PLANKS.defaultMapColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)))
@JvmField
val APRICORN_SIGN = this.create("apricorn_sign", CobblemonSignBlock(AbstractBlock.Settings.copy(Blocks.OAK_SIGN), APRICORN_WOOD_TYPE))
val APRICORN_SIGN = this.create("apricorn_sign", CobblemonSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SIGN), APRICORN_WOOD_TYPE))
@JvmField
val APRICORN_WALL_SIGN = this.create("apricorn_wall_sign", CobblemonWallSignBlock(AbstractBlock.Settings.copy(Blocks.OAK_WALL_SIGN), APRICORN_WOOD_TYPE))
val APRICORN_WALL_SIGN = this.create("apricorn_wall_sign", CobblemonWallSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_WALL_SIGN), APRICORN_WOOD_TYPE))
@JvmField
val APRICORN_HANGING_SIGN = this.create("apricorn_hanging_sign", CobblemonHangingSignBlock(AbstractBlock.Settings.copy(Blocks.OAK_WALL_HANGING_SIGN), APRICORN_WOOD_TYPE))
val APRICORN_HANGING_SIGN = this.create("apricorn_hanging_sign", CobblemonHangingSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_WALL_HANGING_SIGN), APRICORN_WOOD_TYPE))
@JvmField
val APRICORN_WALL_HANGING_SIGN = this.create("apricorn_wall_hanging_sign", CobblemonWallHangingSignBlock(AbstractBlock.Settings.copy(Blocks.OAK_HANGING_SIGN), APRICORN_WOOD_TYPE))
val APRICORN_WALL_HANGING_SIGN = this.create("apricorn_wall_hanging_sign", CobblemonWallHangingSignBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_HANGING_SIGN), APRICORN_WOOD_TYPE))
@JvmField
val APRICORN_SLAB = this.create("apricorn_slab", SlabBlock(AbstractBlock.Settings.create().mapColor(MapColor.OAK_TAN).instrument(Instrument.BASS).strength(2.0f, 3.0f).sounds(BlockSoundGroup.WOOD)))
val APRICORN_SLAB = this.create("apricorn_slab", SlabBlock(BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).instrument(NoteBlockInstrument.BASS).strength(2.0f, 3.0f).sound(SoundType.WOOD)))
@JvmField
val APRICORN_STAIRS = this.create("apricorn_stairs", StairsBlockInvoker.`cobblemon$create`(APRICORN_PLANKS.defaultState, AbstractBlock.Settings.copy(APRICORN_PLANKS)))
val APRICORN_STAIRS = this.create("apricorn_stairs", StairsBlockInvoker.`cobblemon$create`(APRICORN_PLANKS.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(APRICORN_PLANKS)))
@JvmField
val APRICORN_DOOR = this.create("apricorn_door", DoorBlockInvoker.`cobblemon$create`(AbstractBlock.Settings.create().mapColor(APRICORN_PLANKS.defaultMapColor).instrument(Instrument.BASS).strength(3.0F).sounds(BlockSoundGroup.WOOD).nonOpaque(), APRICORN_BLOCK_SET_TYPE))
val APRICORN_DOOR = this.create("apricorn_door", DoorBlockInvoker.`cobblemon$create`(APRICORN_BLOCK_SET_TYPE, BlockBehaviour.Properties.of().mapColor(APRICORN_PLANKS.defaultMapColor()).instrument(NoteBlockInstrument.BASS).strength(3.0F).sound(SoundType.WOOD).noOcclusion()))
@JvmField
val APRICORN_TRAPDOOR = this.create("apricorn_trapdoor", TrapdoorBlockInvoker.`cobblemon$create`(AbstractBlock.Settings.create().mapColor(MapColor.OAK_TAN).instrument(Instrument.BASS).strength(3.0F).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning { _, _, _, _ -> false }, APRICORN_BLOCK_SET_TYPE))
val APRICORN_TRAPDOOR = this.create("apricorn_trapdoor", TrapdoorBlockInvoker.`cobblemon$create`(APRICORN_BLOCK_SET_TYPE, BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).instrument(NoteBlockInstrument.BASS).strength(3.0F).sound(SoundType.WOOD).noOcclusion().isValidSpawn { _, _, _, _ -> false }))
private val PLANT_PROPERTIES = AbstractBlock.Settings.create().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.GRASS).pistonBehavior(PistonBehavior.DESTROY)
private val PLANT_PROPERTIES = BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS).pushReaction(PushReaction.DESTROY)
@JvmField
val BLACK_APRICORN_SAPLING = this.create("black_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, Apricorn.BLACK))
@JvmField
@@ -154,13 +155,13 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val YELLOW_APRICORN_SAPLING = this.create("yellow_apricorn_sapling", ApricornSaplingBlock(PLANT_PROPERTIES, 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(CobblemonSounds.MEDICINAL_LEEK_SOUNDS)))
val MEDICINAL_LEEK = this.create("medicinal_leek", MedicinalLeekBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).ignitedByLava().mapColor(MapColor.CRIMSON_NYLIUM).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MEDICINAL_LEEK_SOUNDS)))
@JvmField
val ENERGY_ROOT = this.create("energy_root", EnergyRootBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).burnable().mapColor(MapColor.DIRT_BROWN).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.ENERGY_ROOT_SOUNDS)))
val ENERGY_ROOT = this.create("energy_root", EnergyRootBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).ignitedByLava().mapColor(MapColor.DIRT).noCollission().randomTicks().instabreak().sound(CobblemonSounds.ENERGY_ROOT_SOUNDS)))
@JvmField
val BIG_ROOT = this.create("big_root", BigRootBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).burnable().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.BIG_ROOT_SOUNDS)))
val BIG_ROOT = this.create("big_root", BigRootBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).ignitedByLava().mapColor(MapColor.PLANT).noCollission().randomTicks().instabreak().sound(CobblemonSounds.BIG_ROOT_SOUNDS)))
@JvmField
val REVIVAL_HERB = this.create("revival_herb", RevivalHerbBlock(AbstractBlock.Settings.create().pistonBehavior(PistonBehavior.DESTROY).mapColor(MapColor.DARK_GREEN).burnable().noCollision().breakInstantly().sounds(CobblemonSounds.REVIVAL_HERB_SOUNDS)))
val REVIVAL_HERB = this.create("revival_herb", RevivalHerbBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).mapColor(MapColor.PLANT).ignitedByLava().noCollission().instabreak().sound(CobblemonSounds.REVIVAL_HERB_SOUNDS)))
@JvmField
val TUMBLESTONE_CLUSTER = tumblestoneBlock("tumblestone_cluster", GrowableStoneBlock.STAGE_3, 7, 3, null)
@@ -190,29 +191,453 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val SMALL_BUDDING_BLACK_TUMBLESTONE = tumblestoneBlock("small_budding_black_tumblestone", GrowableStoneBlock.STAGE_0, 3, 4, MEDIUM_BUDDING_BLACK_TUMBLESTONE)
@JvmField
val TUMBLESTONE_BLOCK = this.create("tumblestone_block", Block(AbstractBlock.Settings.create()
val TUMBLESTONE_BLOCK = this.create("tumblestone_block", Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SKY_TUMBLESTONE_BLOCK = this.create("sky_tumblestone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val BLACK_TUMBLESTONE_BLOCK = this.create("black_tumblestone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val POLISHED_TUMBLESTONE = this.create("polished_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val POLISHED_TUMBLESTONE_STAIRS = this.create("polished_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(POLISHED_TUMBLESTONE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_TUMBLESTONE)))
@JvmField
val POLISHED_TUMBLESTONE_SLAB = this.create("polished_tumblestone_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val SKY_TUMBLESTONE_BLOCK = this.create("sky_tumblestone_block", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
val POLISHED_TUMBLESTONE_WALL = this.create("polished_tumblestone_wall", WallBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val BLACK_TUMBLESTONE_BLOCK = this.create("black_tumblestone_block", Block(AbstractBlock.Settings.create()
val CHISELED_POLISHED_TUMBLESTONE = this.create("chiseled_polished_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SMOOTH_TUMBLESTONE = this.create("smooth_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SMOOTH_TUMBLESTONE_STAIRS = this.create("smooth_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(SMOOTH_TUMBLESTONE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SMOOTH_TUMBLESTONE)))
@JvmField
val SMOOTH_TUMBLESTONE_SLAB = this.create("smooth_tumblestone_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val TUMBLESTONE_BRICKS = this.create("tumblestone_bricks", Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val TUMBLESTONE_BRICK_STAIRS = this.create("tumblestone_brick_stairs", StairsBlockInvoker.`cobblemon$create`(TUMBLESTONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(TUMBLESTONE_BRICKS)))
@JvmField
val TUMBLESTONE_BRICK_SLAB = this.create("tumblestone_brick_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val TUMBLESTONE_BRICK_WALL = this.create("tumblestone_brick_wall", WallBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val CHISELED_TUMBLESTONE_BRICKS = this.create("chiseled_tumblestone_bricks",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val POLISHED_SKY_TUMBLESTONE = this.create("polished_sky_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val POLISHED_SKY_TUMBLESTONE_STAIRS = this.create("polished_sky_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(POLISHED_SKY_TUMBLESTONE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_SKY_TUMBLESTONE)))
@JvmField
val POLISHED_SKY_TUMBLESTONE_SLAB = this.create("polished_sky_tumblestone_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val POLISHED_SKY_TUMBLESTONE_WALL = this.create("polished_sky_tumblestone_wall", WallBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val CHISELED_POLISHED_SKY_TUMBLESTONE = this.create("chiseled_polished_sky_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SMOOTH_SKY_TUMBLESTONE = this.create("smooth_sky_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SMOOTH_SKY_TUMBLESTONE_STAIRS = this.create("smooth_sky_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(SMOOTH_SKY_TUMBLESTONE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SMOOTH_SKY_TUMBLESTONE)))
@JvmField
val SMOOTH_SKY_TUMBLESTONE_SLAB = this.create("smooth_sky_tumblestone_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val SKY_TUMBLESTONE_BRICKS = this.create("sky_tumblestone_bricks",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SKY_TUMBLESTONE_BRICK_STAIRS = this.create("sky_tumblestone_brick_stairs", StairsBlockInvoker.`cobblemon$create`(
SKY_TUMBLESTONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SKY_TUMBLESTONE_BRICKS)))
@JvmField
val SKY_TUMBLESTONE_BRICK_SLAB = this.create("sky_tumblestone_brick_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val SKY_TUMBLESTONE_BRICK_WALL = this.create("sky_tumblestone_brick_wall", WallBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val CHISELED_SKY_TUMBLESTONE_BRICKS = this.create("chiseled_sky_tumblestone_bricks",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_LIGHT_BLUE)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val POLISHED_BLACK_TUMBLESTONE = this.create("polished_black_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_STAIRS = this.create("polished_black_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(POLISHED_BLACK_TUMBLESTONE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACK_TUMBLESTONE)))
@JvmField
val POLISHED_BLACK_TUMBLESTONE_SLAB = this.create("polished_black_tumblestone_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val POLISHED_BLACK_TUMBLESTONE_WALL = this.create("polished_black_tumblestone_wall", WallBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val CHISELED_POLISHED_BLACK_TUMBLESTONE = this.create("chiseled_polished_black_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SMOOTH_BLACK_TUMBLESTONE = this.create("smooth_black_tumblestone",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val SMOOTH_BLACK_TUMBLESTONE_STAIRS = this.create("smooth_black_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(SMOOTH_BLACK_TUMBLESTONE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SMOOTH_BLACK_TUMBLESTONE)))
@JvmField
val SMOOTH_BLACK_TUMBLESTONE_SLAB = this.create("smooth_black_tumblestone_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val BLACK_TUMBLESTONE_BRICKS = this.create("black_tumblestone_bricks",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val BLACK_TUMBLESTONE_BRICK_STAIRS = this.create("black_tumblestone_brick_stairs", StairsBlockInvoker.`cobblemon$create`(
BLACK_TUMBLESTONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BLACK_TUMBLESTONE_BRICKS)))
@JvmField
val BLACK_TUMBLESTONE_BRICK_SLAB = this.create("black_tumblestone_brick_slab", SlabBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val BLACK_TUMBLESTONE_BRICK_WALL = this.create("black_tumblestone_brick_wall", WallBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
))
@JvmField
val CHISELED_BLACK_TUMBLESTONE_BRICKS = this.create("chiseled_black_tumblestone_bricks",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BASEDRUM)
)
)
@JvmField
val FIRE_STONE_BLOCK = this.create("fire_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.FIRE)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val WATER_STONE_BLOCK = this.create("water_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.WATER)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val THUNDER_STONE_BLOCK = this.create("thunder_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.GLOW_LICHEN)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val LEAF_STONE_BLOCK = this.create("leaf_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_GREEN)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val ICE_STONE_BLOCK = this.create("ice_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.ICE)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val SUN_STONE_BLOCK = this.create("sun_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val MOON_STONE_BLOCK = this.create("moon_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.DEEPSLATE)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val SHINY_STONE_BLOCK = this.create("shiny_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.QUARTZ)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val DAWN_STONE_BLOCK = this.create("dawn_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.DIAMOND)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val DUSK_STONE_BLOCK = this.create("dusk_stone_block",
Block(
BlockBehaviour.Properties.of()
.mapColor(MapColor.WARPED_HYPHAE)
.strength(1.0F)
.sound(CobblemonSounds.EVOLUTION_STONE_BLOCK_SOUNDS)
.requiresCorrectToolForDrops()
.instrument(NoteBlockInstrument.BIT)
)
)
@JvmField
val BLACK_APRICORN = apricornBlock("black_apricorn", Apricorn.BLACK)
@@ -233,20 +658,19 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val RELIC_COIN_POUCH = create(
"relic_coin_pouch",
CoinPouchBlock(
AbstractBlock.Settings.create()
.sounds(CobblemonSounds.RELIC_COIN_POUCH_SOUNDS)
.pistonBehavior(PistonBehavior.DESTROY)
.strength(0.4f)
.nonOpaque(), true
BlockBehaviour.Properties.of()
.sound(CobblemonSounds.RELIC_COIN_POUCH_SOUNDS)
.pushReaction(PushReaction.DESTROY)
.noOcclusion(), true
)
)
@JvmField
val RELIC_COIN_SACK = create(
"relic_coin_sack",
CoinPouchBlock(
AbstractBlock.Settings.create()
.sounds(CobblemonSounds.RELIC_COIN_SACK_SOUNDS)
.pistonBehavior(PistonBehavior.DESTROY)
BlockBehaviour.Properties.of()
.sound(CobblemonSounds.RELIC_COIN_SACK_SOUNDS)
.pushReaction(PushReaction.DESTROY)
.strength(0.4f), false
))
@@ -254,7 +678,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val GILDED_CHEST = create(
"gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.RED
)
)
@@ -263,7 +687,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val BLUE_GILDED_CHEST = create(
"blue_gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.BLUE
)
)
@@ -272,7 +696,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val BLACK_GILDED_CHEST = create(
"black_gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.BLACK
)
)
@@ -281,7 +705,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val YELLOW_GILDED_CHEST = create(
"yellow_gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.YELLOW
)
)
@@ -290,7 +714,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val WHITE_GILDED_CHEST = create(
"white_gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.WHITE
)
)
@@ -299,7 +723,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val GREEN_GILDED_CHEST = create(
"green_gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.GREEN
)
)
@@ -308,7 +732,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val PINK_GILDED_CHEST = create(
"pink_gilded_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.PINK
)
)
@@ -317,7 +741,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val GIMMIGHOUL_CHEST = create(
"gimmighoul_chest",
GildedChestBlock(
AbstractBlock.Settings.copy(Blocks.CHEST).nonOpaque().sounds(CobblemonSounds.GILDED_CHEST_SOUNDS),
BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS),
GildedChestBlock.Type.FAKE
)
)
@@ -326,65 +750,78 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val MONITOR = create(
"monitor",
MonitorBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.IRON_GRAY)
.sounds(BlockSoundGroup.METAL)
.pistonBehavior(PistonBehavior.BLOCK)
.requiresTool()
BlockBehaviour.Properties.of()
.mapColor(MapColor.METAL)
.sound(SoundType.METAL)
.pushReaction(PushReaction.BLOCK)
.requiresCorrectToolForDrops()
.strength(5.0F, 6.0F)
.luminance { if (it.get(MonitorBlock.SCREEN) != MonitorBlock.MonitorScreen.OFF) 15 else 0 }
.lightLevel { if (it.getValue(MonitorBlock.SCREEN) != MonitorBlock.MonitorScreen.OFF) 15 else 0 }
)
)
@JvmField
val FOSSIL_ANALYZER = create(
"fossil_analyzer",
FossilAnalyzerBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.IRON_GRAY)
.sounds(BlockSoundGroup.METAL)
.pistonBehavior(PistonBehavior.BLOCK)
.requiresTool()
BlockBehaviour.Properties.of()
.mapColor(MapColor.METAL)
.sound(SoundType.METAL)
.pushReaction(PushReaction.BLOCK)
.requiresCorrectToolForDrops()
.strength(5.0F, 6.0F)
.nonOpaque()
.noOcclusion()
)
)
@JvmField
val RESTORATION_TANK = create(
"restoration_tank",
RestorationTankBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.IRON_GRAY)
.sounds(BlockSoundGroup.GLASS)
.pistonBehavior(PistonBehavior.BLOCK)
.requiresTool()
BlockBehaviour.Properties.of()
.mapColor(MapColor.METAL)
.sound(SoundType.GLASS)
.pushReaction(PushReaction.BLOCK)
.requiresCorrectToolForDrops()
.strength(5.0F, 6.0F)
.nonOpaque()
.noOcclusion()
)
)
@JvmField
val HEALING_MACHINE = create(
"healing_machine",
HealingMachineBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.IRON_GRAY)
.sounds(BlockSoundGroup.METAL)
.pistonBehavior(PistonBehavior.BLOCK)
BlockBehaviour.Properties.of()
.mapColor(MapColor.METAL)
.sound(SoundType.METAL)
.pushReaction(PushReaction.BLOCK)
.strength(2f)
.nonOpaque()
.luminance { if (it.get(HealingMachineBlock.CHARGE_LEVEL) >= HealingMachineBlock.MAX_CHARGE_LEVEL) 7 else 2 }
.noOcclusion()
.lightLevel { if (it.getValue(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)
BlockBehaviour.Properties.of()
.mapColor(MapColor.METAL)
.sound(SoundType.METAL)
.pushReaction(PushReaction.BLOCK)
.strength(2F)
.nonOpaque()
.luminance { if ((it.get(PCBlock.ON) as Boolean) && (it.get(PCBlock.PART) == PCBlock.PCPart.TOP)) 10 else 0 }
.noOcclusion()
.lightLevel { if ((it.getValue(PCBlock.ON) as Boolean) && (it.getValue(PCBlock.PART) == PCBlock.PCPart.TOP)) 10 else 0 }
)
)
@JvmField
val LECTERN = create(
"lectern",
LecternBlock(
BlockBehaviour.Properties.of()
.mapColor(MapColor.WOOD)
.instrument(NoteBlockInstrument.BASS)
.sound(SoundType.WOOD)
.strength(2.5F)
.ignitedByLava()
)
)
@@ -392,45 +829,45 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val DISPLAY_CASE = create(
"display_case",
DisplayCaseBlock(
AbstractBlock.Settings.create()
.sounds(CobblemonSounds.DISPLAY_CASE_SOUNDS)
.nonOpaque()
.pistonBehavior(PistonBehavior.BLOCK)
.mapColor(MapColor.STONE_GRAY)
.strength(0.3f)
BlockBehaviour.Properties.of()
.sound(CobblemonSounds.DISPLAY_CASE_SOUNDS)
.noOcclusion()
.pushReaction(PushReaction.BLOCK)
.mapColor(MapColor.STONE)
.strength(0.3F)
)
)
val RED_MINT = create("red_mint", MintBlock(MintType.RED, AbstractBlock.Settings.create().mapColor(MapColor.RED).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.MINT_SOUNDS)))
val RED_MINT = create("red_mint", MintBlock(MintType.RED, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_RED).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MINT_SOUNDS).pushReaction(PushReaction.DESTROY)))
@JvmField
val BLUE_MINT = create("blue_mint", MintBlock(MintType.BLUE, AbstractBlock.Settings.create().mapColor(MapColor.BLUE).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.MINT_SOUNDS)))
val BLUE_MINT = create("blue_mint", MintBlock(MintType.BLUE, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLUE).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MINT_SOUNDS).pushReaction(PushReaction.DESTROY)))
@JvmField
val CYAN_MINT = create("cyan_mint", MintBlock(MintType.CYAN, AbstractBlock.Settings.create().mapColor(MapColor.CYAN).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.MINT_SOUNDS)))
val CYAN_MINT = create("cyan_mint", MintBlock(MintType.CYAN, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_CYAN).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MINT_SOUNDS).pushReaction(PushReaction.DESTROY)))
@JvmField
val PINK_MINT = create("pink_mint", MintBlock(MintType.PINK, AbstractBlock.Settings.create().mapColor(MapColor.PINK).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.MINT_SOUNDS)))
val PINK_MINT = create("pink_mint", MintBlock(MintType.PINK, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_PINK).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MINT_SOUNDS).pushReaction(PushReaction.DESTROY)))
@JvmField
val GREEN_MINT = create("green_mint", MintBlock(MintType.GREEN, AbstractBlock.Settings.create().mapColor(MapColor.GREEN).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.MINT_SOUNDS)))
val GREEN_MINT = create("green_mint", MintBlock(MintType.GREEN, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GREEN).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MINT_SOUNDS).pushReaction(PushReaction.DESTROY)))
@JvmField
val WHITE_MINT = create("white_mint", MintBlock(MintType.WHITE, AbstractBlock.Settings.create().mapColor(MapColor.WHITE).noCollision().ticksRandomly().breakInstantly().sounds(CobblemonSounds.MINT_SOUNDS)))
val WHITE_MINT = create("white_mint", MintBlock(MintType.WHITE, BlockBehaviour.Properties.of().mapColor(MapColor.SNOW).noCollission().randomTicks().instabreak().sound(CobblemonSounds.MINT_SOUNDS).pushReaction(PushReaction.DESTROY)))
@JvmField
val PASTURE = create(
"pasture",
PastureBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.BROWN)
.sounds(BlockSoundGroup.WOOD)
BlockBehaviour.Properties.of()
.mapColor(MapColor.COLOR_BROWN)
.sound(SoundType.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 }
.noOcclusion()
.pushReaction(PushReaction.BLOCK)
.lightLevel { if ((it.getValue(PastureBlock.ON) as Boolean) && (it.getValue(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(CobblemonSounds.VIVICHOKE_SOUNDS)))
val VIVICHOKE_SEEDS = this.create("vivichoke_seeds", VivichokeBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).ignitedByLava().mapColor(MapColor.PLANT).noCollission().randomTicks().instabreak().sound(CobblemonSounds.VIVICHOKE_SOUNDS)))
@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)))
val PEP_UP_FLOWER = this.create("pep_up_flower", FlowerBlock(MobEffects.LEVITATION, 10F, BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().instabreak().sound(SoundType.GRASS).offsetType(BlockBehaviour.OffsetType.XZ).pushReaction(PushReaction.DESTROY)))
@JvmField
val POTTED_PEP_UP_FLOWER = this.create("potted_pep_up_flower", BlocksInvoker.createFlowerPotBlock(PEP_UP_FLOWER))
@@ -446,18 +883,18 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
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 fun apricornBlock(name: String, apricorn: Apricorn): ApricornBlock = this.create(name, ApricornBlock(BlockBehaviour.Properties.of().mapColor(apricorn.mapColor()).randomTicks().strength(Blocks.OAK_LOG.defaultDestroyTime(), Blocks.OAK_LOG.explosionResistance).sound(SoundType.WOOD).noOcclusion(), apricorn))
private fun tumblestoneBlock(name: String, stage: Int, height: Int, xzOffset: Int, nextStage: Block?) : Block {
return this.create(name, TumblestoneBlock(AbstractBlock.Settings.create()
.pistonBehavior(PistonBehavior.DESTROY)
.nonOpaque()
return this.create(name, TumblestoneBlock(BlockBehaviour.Properties.of()
.pushReaction(PushReaction.DESTROY)
.noOcclusion()
.strength(1.5F)
.sounds(CobblemonSounds.TUMBLESTONE_SOUNDS),
.sound(CobblemonSounds.TUMBLESTONE_SOUNDS),
stage, height, xzOffset, nextStage))
}
private val berries = mutableMapOf<Identifier, BerryBlock>()
private val berries = mutableMapOf<ResourceLocation, BerryBlock>()
val AGUAV_BERRY = this.berryBlock("aguav")
val APICOT_BERRY = this.berryBlock("apicot")
@@ -528,6 +965,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val WEPEAR_BERRY = this.berryBlock("wepear")
val WIKI_BERRY = this.berryBlock("wiki")
val YACHE_BERRY = this.berryBlock("yache")
//val BINDING_SOIL = this.create("binding_soil", BindingSoilBlock(BlockBehaviour.Properties.of()))
init {
/**
@@ -552,7 +990,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
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(CobblemonSounds.BERRY_BUSH_SOUNDS).strength(0.2F)))
val block = this.create(identifier.path, BerryBlock(identifier, BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).dynamicShape().sound(CobblemonSounds.BERRY_BUSH_SOUNDS).strength(0.2F)))
this.berries[identifier] = block
return block
}
@@ -560,7 +998,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
/**
* Calls helper method from Vanilla
*/
private fun log(name: String, arg: MapColor = MapColor.DIRT_BROWN, arg2: MapColor = MapColor.DIRT_BROWN): PillarBlock {
private fun log(name: String, arg: MapColor = MapColor.DIRT, arg2: MapColor = MapColor.DIRT): Block {
val block = BlocksInvoker.createLogBlock(arg, arg2)
return this.create(name, block)
}
@@ -580,16 +1018,16 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
return block
}
private fun evolutionStoneOre(name: String) = this.create(name, ExperienceDroppingBlock(AbstractBlock.Settings.copy(Blocks.IRON_ORE), UniformIntProvider.create(1, 2)))
private fun evolutionStoneOre(name: String) = this.create(name, DropExperienceBlock(UniformInt.of(1, 2), BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_ORE)))
private fun deepslateEvolutionStoneOre(name: String) = this.create(name, ExperienceDroppingBlock(AbstractBlock.Settings.copy(Blocks.DEEPSLATE_IRON_ORE), UniformIntProvider.create(1, 2)))
private fun deepslateEvolutionStoneOre(name: String) = this.create(name, DropExperienceBlock(UniformInt.of(1, 2), BlockBehaviour.Properties.ofFullCopy(Blocks.DEEPSLATE_IRON_ORE)))
/**
* Helper method for creating leaves
* copied over from Vanilla
*/
private fun leaves(name: String): LeavesBlock {
val block = BlocksInvoker.createLeavesBlock(BlockSoundGroup.GRASS)
private fun leaves(name: String): Block {
val block = BlocksInvoker.createLeavesBlock(SoundType.GRASS)
return this.create(name, block)
}
}
}
@@ -8,39 +8,39 @@
package com.cobblemon.mod.common
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.EntityRendererFactory
import net.minecraft.client.render.entity.model.EntityModelLayer
import net.minecraft.entity.Entity
import net.minecraft.entity.EntityType
import net.minecraft.item.Item
import net.minecraft.particle.ParticleEffect
import net.minecraft.particle.ParticleType
import java.util.function.Supplier
import net.minecraft.client.color.block.BlockColor
import net.minecraft.client.color.item.ItemColor
import net.minecraft.client.model.geom.ModelLayerLocation
import net.minecraft.client.model.geom.builders.LayerDefinition
import net.minecraft.client.particle.ParticleProvider
import net.minecraft.client.particle.SpriteSet
import net.minecraft.client.renderer.RenderType
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider
import net.minecraft.client.renderer.entity.EntityRendererProvider
import net.minecraft.core.particles.ParticleOptions
import net.minecraft.core.particles.ParticleType
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EntityType
import net.minecraft.world.item.Item
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.entity.BlockEntityType
interface CobblemonClientImplementation {
fun registerLayer(modelLayer: EntityModelLayer, supplier: Supplier<TexturedModelData>)
fun <T : ParticleEffect> registerParticleFactory(
fun registerLayer(modelLayer: ModelLayerLocation, supplier: Supplier<LayerDefinition>)
fun <T : ParticleOptions> registerParticleFactory(
type: ParticleType<T>,
factory: (SpriteProvider) -> ParticleFactory<T>
factory: (SpriteSet) -> ParticleProvider<T>
)
fun registerBlockRenderType(layer: RenderLayer, vararg blocks: Block)
fun registerBlockRenderType(layer: RenderType, vararg blocks: Block)
fun registerItemColors(provider: ItemColorProvider, vararg items: Item)
fun registerItemColors(provider: ItemColor, vararg items: Item)
fun registerBlockColors(provider: BlockColorProvider, vararg blocks: Block)
fun registerBlockColors(provider: BlockColor, vararg blocks: Block)
fun <T : BlockEntity> registerBlockEntityRenderer(type: BlockEntityType<out T>, factory: BlockEntityRendererFactory<T>)
fun <T : BlockEntity> registerBlockEntityRenderer(type: BlockEntityType<out T>, factory: BlockEntityRendererProvider<T>)
fun <T : Entity> registerEntityRenderer(type: EntityType<out T>, factory: EntityRendererFactory<T>)
fun <T : Entity> registerEntityRenderer(type: EntityType<out T>, factory: EntityRendererProvider<T>)
}
@@ -10,13 +10,14 @@ package com.cobblemon.mod.common
import com.cobblemon.mod.common.command.*
import com.mojang.brigadier.CommandDispatcher
import net.minecraft.command.CommandRegistryAccess
import net.minecraft.server.command.CommandManager
import net.minecraft.server.command.ServerCommandSource
import net.minecraft.commands.CommandBuildContext
import net.minecraft.commands.CommandSourceStack
import net.minecraft.commands.Commands
object CobblemonCommands {
fun register(dispatcher: CommandDispatcher<ServerCommandSource>, registry: CommandRegistryAccess, selection: CommandManager.RegistrationEnvironment) {
fun register(dispatcher: CommandDispatcher<CommandSourceStack>, registry: CommandBuildContext, selection: Commands.CommandSelection) {
SpawnPokemon.register(dispatcher)
SpawnNPCCommand.register(dispatcher)
GivePokemon.register(dispatcher)
TakePokemon.register(dispatcher)
ChangeScaleAndSize.register(dispatcher)
@@ -39,6 +40,7 @@ object CobblemonCommands {
PcCommand.register(dispatcher)
SpawnPokemonFromPool.register(dispatcher)
PokeboxCommand.register(dispatcher)
PokedexCommand.register(dispatcher)
TestStoreCommand.register(dispatcher)
QueryLearnsetCommand.register(dispatcher)
TestPcSlotCommand.register(dispatcher)
@@ -48,6 +50,10 @@ object CobblemonCommands {
PokemonRestartCommand.register(dispatcher)
BedrockParticleCommand.register(dispatcher)
OpenDialogueCommand.register(dispatcher)
NPCEditCommand.register(dispatcher)
AbandonMultiTeam.register(dispatcher)
FreezePokemonCommand.register(dispatcher)
ApplyPlayerTextureCommand.register(dispatcher)
// Possibly lock down registration if and only if under dev environment or running in an environment
// with a certain system environment variable set
@@ -11,31 +11,34 @@ package com.cobblemon.mod.common
import com.cobblemon.mod.common.api.pokeball.PokeBalls
import com.cobblemon.mod.common.entity.boat.CobblemonBoatEntity
import com.cobblemon.mod.common.entity.boat.CobblemonChestBoatEntity
import com.cobblemon.mod.common.entity.fishing.PokeRodFishingBobberEntity
import com.cobblemon.mod.common.entity.generic.GenericBedrockEntity
import com.cobblemon.mod.common.entity.npc.NPCEntity
import com.cobblemon.mod.common.entity.pokeball.EmptyPokeBallEntity
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.entity.EntityType
import net.minecraft.entity.LivingEntity
import net.minecraft.entity.SpawnGroup
import net.minecraft.entity.attribute.DefaultAttributeContainer
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.world.entity.EntityType
import net.minecraft.world.entity.LivingEntity
import net.minecraft.resources.ResourceKey
import net.minecraft.world.entity.MobCategory
import net.minecraft.world.entity.ai.attributes.AttributeSupplier
object CobblemonEntities : PlatformRegistry<Registry<EntityType<*>>, RegistryKey<Registry<EntityType<*>>>, EntityType<*>>() {
object CobblemonEntities : PlatformRegistry<Registry<EntityType<*>>, ResourceKey<Registry<EntityType<*>>>, EntityType<*>>() {
override val registry: Registry<EntityType<*>> = Registries.ENTITY_TYPE
override val registryKey: RegistryKey<Registry<EntityType<*>>> = RegistryKeys.ENTITY_TYPE
override val registry: Registry<EntityType<*>> = BuiltInRegistries.ENTITY_TYPE
override val resourceKey: ResourceKey<Registry<EntityType<*>>> = Registries.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)
EntityType.Builder.of({ _, world -> PokemonEntity(world) }, MobCategory.CREATURE)
.build(POKEMON_KEY.toString())
)
@@ -44,7 +47,7 @@ object CobblemonEntities : PlatformRegistry<Registry<EntityType<*>>, RegistryKey
@JvmField
val EMPTY_POKEBALL: EntityType<EmptyPokeBallEntity> = this.create(
EMPTY_POKEBALL_KEY.path,
EntityType.Builder.create({ _, world -> EmptyPokeBallEntity(PokeBalls.POKE_BALL, world) }, SpawnGroup.MISC)
EntityType.Builder.of({ _, world -> EmptyPokeBallEntity(PokeBalls.POKE_BALL, world) }, MobCategory.MISC)
.build(EMPTY_POKEBALL_KEY.toString())
)
@@ -53,7 +56,7 @@ object CobblemonEntities : PlatformRegistry<Registry<EntityType<*>>, RegistryKey
@JvmField
val BOAT: EntityType<CobblemonBoatEntity> = this.create(
BOAT_KEY.path,
EntityType.Builder.create(::CobblemonBoatEntity, SpawnGroup.MISC).setDimensions(1.375F, 0.5625F).maxTrackingRange(10)
EntityType.Builder.of(::CobblemonBoatEntity, MobCategory.MISC).sized(1.375F, 0.5625F).clientTrackingRange(10)
.build(BOAT_KEY.toString())
)
@@ -62,21 +65,38 @@ object CobblemonEntities : PlatformRegistry<Registry<EntityType<*>>, RegistryKey
@JvmField
val CHEST_BOAT: EntityType<CobblemonChestBoatEntity> = this.create(
CHEST_BOAT_KEY.path,
EntityType.Builder.create(::CobblemonChestBoatEntity, SpawnGroup.MISC).setDimensions(1.375F, 0.5625F).maxTrackingRange(10)
EntityType.Builder.of(::CobblemonChestBoatEntity, MobCategory.MISC).sized(1.375F, 0.5625F).clientTrackingRange(10)
.build(CHEST_BOAT_KEY.toString())
)
@JvmField
val POKE_BOBBER_KEY = cobblemonResource("poke_bobber")
@JvmField
val POKE_BOBBER: EntityType<PokeRodFishingBobberEntity> = this.create(
POKE_BOBBER_KEY.path,
EntityType.Builder.of(::PokeRodFishingBobberEntity, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(10)
.build(POKE_BOBBER_KEY.toString())
)
@JvmField
val GENERIC_BEDROCK_ENTITY_KEY = cobblemonResource("generic_bedrock")
@JvmField
val GENERIC_BEDROCK_ENTITY: EntityType<GenericBedrockEntity> = this.create(
GENERIC_BEDROCK_ENTITY_KEY.path,
EntityType.Builder.create({ _, world -> GenericBedrockEntity(world) }, SpawnGroup.MISC)
EntityType.Builder.of({ _, world -> GenericBedrockEntity(world) }, MobCategory.MISC)
.build(GENERIC_BEDROCK_ENTITY_KEY.toString())
)
fun registerAttributes(consumer: (EntityType<out LivingEntity>, DefaultAttributeContainer.Builder) -> Unit) {
consumer(POKEMON, PokemonEntity.createAttributes())
}
@JvmField
val NPC_KEY = cobblemonResource("npc")
@JvmField
val NPC: EntityType<NPCEntity> = create(
NPC_KEY.path,
EntityType.Builder.of({ _, world -> NPCEntity(world) }, MobCategory.CREATURE).build("$NPC_KEY")
)
fun registerAttributes(consumer: (EntityType<out LivingEntity>, AttributeSupplier.Builder) -> Unit) {
consumer(POKEMON, PokemonEntity.createAttributes())
consumer(NPC, NPCEntity.createAttributes())
}
}
@@ -9,31 +9,24 @@
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 kotlin.reflect.KClass
import net.minecraft.advancement.criterion.Criterion
import net.minecraft.block.ComposterBlock
import net.minecraft.command.argument.serialize.ArgumentSerializer
import net.minecraft.item.ItemConvertible
import net.minecraft.network.PacketByteBuf
import net.minecraft.network.listener.ClientPlayPacketListener
import net.minecraft.network.packet.Packet
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.commands.synchronization.ArgumentTypeInfo
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.MinecraftServer
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.text.Text
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 net.minecraft.server.level.ServerPlayer
import net.minecraft.server.packs.PackType
import net.minecraft.server.packs.resources.PreparableReloadListener
import net.minecraft.server.packs.resources.ResourceManager
import net.minecraft.tags.TagKey
import net.minecraft.world.level.GameRules
import net.minecraft.world.level.ItemLike
import net.minecraft.world.level.biome.Biome
import net.minecraft.world.level.levelgen.GenerationStep
import net.minecraft.world.level.levelgen.placement.PlacedFeature
import kotlin.reflect.KClass
interface CobblemonImplementation {
val modAPI: ModAPI
@@ -70,6 +63,10 @@ interface CobblemonImplementation {
*/
fun registerSoundEvents()
fun registerDataComponents()
fun registerEntityDataSerializers()
/**
* TODO
*
@@ -100,6 +97,12 @@ interface CobblemonImplementation {
*/
fun registerBlockEntityTypes()
/**
* TODO
*
*/
fun registerVillagers()
/**
* TODO
*
@@ -108,6 +111,9 @@ interface CobblemonImplementation {
fun registerParticles()
fun registerEntitySubPredicates()
/**
* Add a feature to the current platform implementation.
*
@@ -115,7 +121,7 @@ interface CobblemonImplementation {
* @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>?)
fun addFeatureToWorldGen(feature: ResourceKey<PlacedFeature>, step: GenerationStep.Decoration, validTag: TagKey<Biome>?)
/**
* TODO
@@ -126,7 +132,7 @@ interface CobblemonImplementation {
* @param argumentClass
* @param serializer
*/
fun <A : ArgumentType<*>, T : ArgumentSerializer.ArgumentTypeProperties<A>> registerCommandArgument(identifier: Identifier, argumentClass: KClass<A>, serializer: ArgumentSerializer<A, T>)
fun <A : ArgumentType<*>, T : ArgumentTypeInfo.Template<A>> registerCommandArgument(identifier: ResourceLocation, argumentClass: KClass<A>, serializer: ArgumentTypeInfo<A, T>)
/**
* TODO
@@ -137,7 +143,7 @@ interface CobblemonImplementation {
* @param type
* @return
*/
fun <T : GameRules.Rule<T>> registerGameRule(name: String, category: GameRules.Category, type: GameRules.Type<T>): GameRules.Key<T>
fun <T : GameRules.Value<T>> registerGameRule(name: String, category: GameRules.Category, type: GameRules.Type<T>): GameRules.Key<T>
/**
* TODO
@@ -146,7 +152,7 @@ interface CobblemonImplementation {
* @param criteria
* @return
*/
fun <T : Criterion<*>> registerCriteria(criteria: T): T
fun registerCriteria()
/**
* TODO
@@ -156,7 +162,7 @@ interface CobblemonImplementation {
* @param type
* @param dependencies
*/
fun registerResourceReloader(identifier: Identifier, reloader: ResourceReloader, type: ResourceType, dependencies: Collection<Identifier>)
fun registerResourceReloader(identifier: ResourceLocation, reloader: PreparableReloadListener, type: PackType, dependencies: Collection<ResourceLocation>)
/**
* TODO
@@ -171,24 +177,24 @@ interface CobblemonImplementation {
* @param registry The [JsonDataRegistry] to reload.
* @param manager The [ResourceManager] to reload from.
*/
fun <T> reloadJsonRegistry(registry: JsonDataRegistry<T>, manager: ResourceManager): HashMap<Identifier, T>
fun <T> reloadJsonRegistry(registry: JsonDataRegistry<T>, manager: ResourceManager): HashMap<ResourceLocation, T>
/**
* Registers an item to the [ComposterBlock].
*
* @param item The [ItemConvertible] being registered.
* @param item The [ItemLike] being registered.
* @param chance The chance % of increasing the composter level, 0 to 1 expected.
*/
fun registerCompostable(item: ItemConvertible, chance: Float)
fun registerCompostable(item: ItemLike, chance: Float)
/**
* Registers a builtin resource pack.
*
* @param id The unique [Identifier] of this pack.
* @param id The unique [ResourceLocation] of this pack.
* @param title The title displayed in the resource pack GUI, the description is still a part of the pack metadata.
* @param activationBehaviour The [ResourcePackActivationBehaviour] for this pack.
*/
fun registerBuiltinResourcePack(id: Identifier, title: Text, activationBehaviour: ResourcePackActivationBehaviour)
fun registerBuiltinResourcePack(id: ResourceLocation, title: Component, activationBehaviour: ResourcePackActivationBehaviour)
}
@@ -214,30 +220,17 @@ enum class ResourcePackActivationBehaviour {
enum class ModAPI {
FABRIC,
FORGE
FORGE,
NEOFORGE
}
interface NetworkManager {
fun sendPacketToPlayer(player: ServerPlayer, packet: NetworkPacket<*>)
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>
fun sendToServer(packet: NetworkPacket<*>)
}
enum class Environment {
CLIENT,
SERVER
}
}
@@ -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
import com.cobblemon.mod.common.item.components.HeldItemCapableComponent
import com.cobblemon.mod.common.item.components.PokemonItemComponent
import com.cobblemon.mod.common.item.RodBaitComponent
import com.cobblemon.mod.common.platform.PlatformRegistry
import net.minecraft.core.Registry
import net.minecraft.core.component.DataComponentType
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
object CobblemonItemComponents : PlatformRegistry<Registry<DataComponentType<*>>, ResourceKey<Registry<DataComponentType<*>>>, DataComponentType<*>>() {
val POKEMON_ITEM: DataComponentType<PokemonItemComponent> = create("pokemon_item", DataComponentType.builder<PokemonItemComponent>()
.persistent(PokemonItemComponent.CODEC)
.networkSynchronized(PokemonItemComponent.PACKET_CODEC)
.build())
val HELD_ITEM_REP: DataComponentType<HeldItemCapableComponent> = DataComponentType.builder<HeldItemCapableComponent>()
.persistent(HeldItemCapableComponent.CODEC)
.networkSynchronized(HeldItemCapableComponent.PACKET_CODEC)
.build()
val BAIT: DataComponentType<RodBaitComponent> = create("bait", DataComponentType.builder<RodBaitComponent>()
.persistent(RodBaitComponent.CODEC)
.networkSynchronized(RodBaitComponent.PACKET_CODEC)
.build())
fun register() {
Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.parse("cobblemon:pokemon_item"), POKEMON_ITEM)
Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.parse("cobblemon:bait"), BAIT)
}
override val registry = BuiltInRegistries.DATA_COMPONENT_TYPE
override val resourceKey = Registries.DATA_COMPONENT_TYPE
}
@@ -14,21 +14,19 @@ 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.api.pokemon.status.Statuses
import com.cobblemon.mod.common.api.text.blue
import com.cobblemon.mod.common.api.text.gray
import com.cobblemon.mod.common.block.BerryBlock
import com.cobblemon.mod.common.block.MintBlock
import com.cobblemon.mod.common.block.MintBlock.MintType
import com.cobblemon.mod.common.client.pokedex.PokedexTypes
import com.cobblemon.mod.common.entity.boat.CobblemonBoatType
import com.cobblemon.mod.common.item.*
import com.cobblemon.mod.common.item.armor.CobblemonArmorTrims
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.berry.*
import com.cobblemon.mod.common.item.interactive.*
import com.cobblemon.mod.common.item.interactive.PotionItem
import com.cobblemon.mod.common.item.interactive.ability.AbilityChangeItem
@@ -36,22 +34,25 @@ import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.pokeball.PokeBall
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.block.Block
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
import net.minecraft.core.Registry
import net.minecraft.core.component.DataComponents
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.effect.MobEffectInstance
import net.minecraft.world.effect.MobEffects
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.food.FoodProperties
import net.minecraft.world.item.*
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block
@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
@Suppress("unused", "SameParameterValue")
object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<Item>>, Item>() {
override val registry: Registry<Item> = BuiltInRegistries.ITEM
override val resourceKey: ResourceKey<Registry<Item>> = Registries.ITEM
@JvmField
val pokeBalls = mutableListOf<PokeBallItem>()
@@ -152,6 +153,21 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val ANCIENT_ORIGIN_BALL = pokeBallItem(PokeBalls.ANCIENT_ORIGIN_BALL)
@JvmField
val POKEDEX_BLACK = create("pokedex_black", PokedexItem(PokedexTypes.BLACK))
@JvmField
val POKEDEX_BLUE = create("pokedex_blue", PokedexItem(PokedexTypes.BLUE))
@JvmField
val POKEDEX_GREEN = create("pokedex_green", PokedexItem(PokedexTypes.GREEN))
@JvmField
val POKEDEX_PINK = create("pokedex_pink", PokedexItem(PokedexTypes.PINK))
@JvmField
val POKEDEX_RED = create("pokedex_red", PokedexItem(PokedexTypes.RED))
@JvmField
val POKEDEX_WHITE = create("pokedex_white", PokedexItem(PokedexTypes.WHITE))
@JvmField
val POKEDEX_YELLOW = create("pokedex_yellow", PokedexItem(PokedexTypes.YELLOW))
@JvmField
val VIVICHOKE = compostableItem("vivichoke")
@@ -201,9 +217,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val APRICORN_LEAVES = compostableBlockItem("apricorn_leaves", CobblemonBlocks.APRICORN_LEAVES)
@JvmField
val APRICORN_BOAT = create("apricorn_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, false, Item.Settings().maxCount(1)))
val APRICORN_BOAT = create("apricorn_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, false, Item.Properties().stacksTo(1)))
@JvmField
val APRICORN_CHEST_BOAT = create("apricorn_chest_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, true, Item.Settings().maxCount(1)))
val APRICORN_CHEST_BOAT = create("apricorn_chest_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, true, Item.Properties().stacksTo(1)))
@JvmField
val APRICORN_DOOR = blockItem("apricorn_door", CobblemonBlocks.APRICORN_DOOR)
@@ -222,25 +238,25 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val APRICORN_STAIRS = blockItem("apricorn_stairs", CobblemonBlocks.APRICORN_STAIRS)
@JvmField
val APRICORN_SIGN = this.create("apricorn_sign", SignItem(Item.Settings().maxCount(16), CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN))
val APRICORN_SIGN = this.create("apricorn_sign", SignItem(Item.Properties().stacksTo(16), CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN))
@JvmField
val APRICORN_HANGING_SIGN = this.create("apricorn_hanging_sign", HangingSignItem(CobblemonBlocks.APRICORN_HANGING_SIGN, CobblemonBlocks.APRICORN_WALL_HANGING_SIGN, Item.Settings().maxCount(16)))
val APRICORN_HANGING_SIGN = this.create("apricorn_hanging_sign", HangingSignItem(CobblemonBlocks.APRICORN_HANGING_SIGN, CobblemonBlocks.APRICORN_WALL_HANGING_SIGN, Item.Properties().stacksTo(16)))
@JvmField
val GILDED_CHEST = this.create("gilded_chest", BlockItem(CobblemonBlocks.GILDED_CHEST, Item.Settings()))
val GILDED_CHEST = this.create("gilded_chest", BlockItem(CobblemonBlocks.GILDED_CHEST, Item.Properties()))
@JvmField
val BLUE_GILDED_CHEST = this.create("blue_gilded_chest", BlockItem(CobblemonBlocks.BLUE_GILDED_CHEST, Item.Settings()))
val BLUE_GILDED_CHEST = this.create("blue_gilded_chest", BlockItem(CobblemonBlocks.BLUE_GILDED_CHEST, Item.Properties()))
@JvmField
val YELLOW_GILDED_CHEST = this.create("yellow_gilded_chest", BlockItem(CobblemonBlocks.YELLOW_GILDED_CHEST, Item.Settings()))
val YELLOW_GILDED_CHEST = this.create("yellow_gilded_chest", BlockItem(CobblemonBlocks.YELLOW_GILDED_CHEST, Item.Properties()))
@JvmField
val PINK_GILDED_CHEST = this.create("pink_gilded_chest", BlockItem(CobblemonBlocks.PINK_GILDED_CHEST, Item.Settings()))
val PINK_GILDED_CHEST = this.create("pink_gilded_chest", BlockItem(CobblemonBlocks.PINK_GILDED_CHEST, Item.Properties()))
@JvmField
val BLACK_GILDED_CHEST = this.create("black_gilded_chest", BlockItem(CobblemonBlocks.BLACK_GILDED_CHEST, Item.Settings()))
val BLACK_GILDED_CHEST = this.create("black_gilded_chest", BlockItem(CobblemonBlocks.BLACK_GILDED_CHEST, Item.Properties()))
@JvmField
val WHITE_GILDED_CHEST = this.create("white_gilded_chest", BlockItem(CobblemonBlocks.WHITE_GILDED_CHEST, Item.Settings()))
val WHITE_GILDED_CHEST = this.create("white_gilded_chest", BlockItem(CobblemonBlocks.WHITE_GILDED_CHEST, Item.Properties()))
@JvmField
val GREEN_GILDED_CHEST = this.create("green_gilded_chest", BlockItem(CobblemonBlocks.GREEN_GILDED_CHEST, Item.Settings()))
val GREEN_GILDED_CHEST = this.create("green_gilded_chest", BlockItem(CobblemonBlocks.GREEN_GILDED_CHEST, Item.Properties()))
@JvmField
val GIMMIGHOUL_CHEST = this.create("gimmighoul_chest", BlockItem(CobblemonBlocks.GIMMIGHOUL_CHEST, Item.Settings()))
val GIMMIGHOUL_CHEST = this.create("gimmighoul_chest", BlockItem(CobblemonBlocks.GIMMIGHOUL_CHEST, Item.Properties()))
@JvmField
val RESTORATION_TANK = blockItem("restoration_tank", CobblemonBlocks.RESTORATION_TANK)
@@ -256,6 +272,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val PASTURE = blockItem("pasture", CobblemonBlocks.PASTURE)
@JvmField
val DISPLAY_CASE = blockItem("display_case", CobblemonBlocks.DISPLAY_CASE)
@JvmField
val LECTERN = blockItem("lectern", CobblemonBlocks.LECTERN)
// Evolution items
@JvmField val LINK_CABLE = create("link_cable", LinkCableItem())
@@ -296,7 +314,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField val AUSPICIOUS_ARMOR = heldItem("auspicious_armor")
@JvmField val MALICIOUS_ARMOR = heldItem("malicious_armor")
private val berries = mutableMapOf<Identifier, BerryItem>()
private val berries = mutableMapOf<ResourceLocation, 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))
@@ -408,32 +426,32 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val CLEVER_FEATHER = create("clever_feather", FeatherItem(Stats.SPECIAL_DEFENCE))
@JvmField
val MEDICINAL_LEEK = heldItem("medicinal_leek", MedicinalLeekItem(CobblemonBlocks.MEDICINAL_LEEK, Item.Settings().food(FoodComponent.Builder().snack().hunger(1).saturationModifier(0.2f).build())), "leek")
val MEDICINAL_LEEK = heldItem("medicinal_leek", MedicinalLeekItem(CobblemonBlocks.MEDICINAL_LEEK, Item.Properties().food(FoodProperties.Builder().fast().nutrition(1).saturationModifier(0.2f).build())), "leek")
@JvmField
val ROASTED_LEEK = create("roasted_leek", Item(Item.Settings().food(FoodComponent.Builder().snack().hunger(3).saturationModifier(0.3f).build())))
val ROASTED_LEEK = create("roasted_leek", Item(Item.Properties().food(FoodProperties.Builder().fast().nutrition(3).saturationModifier(0.3f).build())))
@JvmField
val BRAISED_VIVICHOKE = create("braised_vivichoke", Item(Item.Settings().food(FoodComponent.Builder().hunger(6).saturationModifier(0.6f).build())))
val BRAISED_VIVICHOKE = create("braised_vivichoke", Item(Item.Properties().food(FoodProperties.Builder().nutrition(6).saturationModifier(0.6f).build())))
@JvmField
val VIVICHOKE_DIP = create("vivichoke_dip", object : StewItem(Settings().maxCount(1)
.food(FoodComponent.Builder()
.hunger(10)
val VIVICHOKE_DIP = create("vivichoke_dip", object : Item(Properties().stacksTo(1)
.food(FoodProperties.Builder()
.nutrition(10)
.saturationModifier(1.2F)
.statusEffect(StatusEffectInstance(StatusEffects.ABSORPTION, 900, 0), 1F)
.effect(MobEffectInstance(MobEffects.ABSORPTION, 900, 0), 1F)
.alwaysEdible()
.build())) {
override fun finishUsing(stack: ItemStack?, world: World?, user: LivingEntity?): ItemStack {
user?.clearStatusEffects()
return super.finishUsing(stack, world, user)
override fun finishUsingItem(stack: ItemStack, world: Level, user: LivingEntity): ItemStack {
user.removeAllEffects()
return super.finishUsingItem(stack, world, user)
}
})
@JvmField
val ENERGY_ROOT = compostableItem("energy_root", EnergyRootItem(CobblemonBlocks.ENERGY_ROOT, Item.Settings().food(FoodComponent.Builder().hunger(1).snack().saturationModifier(0.2f).build())))
val ENERGY_ROOT = compostableItem("energy_root", EnergyRootItem(CobblemonBlocks.ENERGY_ROOT, Item.Properties().food(FoodProperties.Builder().nutrition(1).fast().saturationModifier(0.2f).build())))
@JvmField
val REVIVAL_HERB = compostableItem("revival_herb", RevivalHerbItem(CobblemonBlocks.REVIVAL_HERB))
@JvmField
val PEP_UP_FLOWER = compostableBlockItem("pep_up_flower", CobblemonBlocks.PEP_UP_FLOWER)
@JvmField
val MEDICINAL_BREW = create("medicinal_brew", Item(Item.Settings()))
val MEDICINAL_BREW = create("medicinal_brew", Item(Item.Properties()))
@JvmField
val REMEDY = create("remedy", RemedyItem(RemedyItem.NORMAL))
@JvmField
@@ -455,7 +473,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@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)))
val LEEK_AND_POTATO_STEW = create("leek_and_potato_stew", Item(Item.Properties().food(FoodProperties.Builder().nutrition(8).saturationModifier(0.6f).build()).stacksTo(1)))
@JvmField
val REVIVE = create("revive", ReviveItem(max = false))
@JvmField
@@ -680,6 +698,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val EJECT_PACK = heldItem("eject_pack")
@JvmField
val ELECTRIC_SEED = heldItem("electric_seed")
@JvmField
val EVERSTONE = heldItem("everstone")
@JvmField
val EVIOLITE = heldItem("eviolite")
@@ -697,6 +717,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val FOCUS_BAND = heldItem("focus_band")
@JvmField
val FOCUS_SASH = heldItem("focus_sash")
@JvmField
val GRASSY_SEED = heldItem("grassy_seed")
// @JvmField
// val GRIP_CLAW = heldItem("grip_claw")
@JvmField
@@ -723,8 +745,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
// val LUMINOUS_MOSS = heldItem("luminous_moss")
@JvmField
val MAGNET = heldItem("magnet")
// @JvmField
// val METRONOME = heldItem("metronome")
@JvmField
val METRONOME = heldItem("metronome")
@JvmField
val MIRACLE_SEED = heldItem("miracle_seed")
@JvmField
@@ -747,10 +769,12 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val POWER_LENS = heldItem("power_lens")
@JvmField
val POWER_WEIGHT = heldItem("power_weight")
// @JvmField
// val PROTECTIVE_PADS = heldItem("protective_pads")
// @JvmField
// val PUNCHING_GLOVE = heldItem("punching_glove")
@JvmField
val PSYCHIC_SEED = heldItem("psychic_seed")
@JvmField
val PROTECTIVE_PADS = heldItem("protective_pads")
@JvmField
val PUNCHING_GLOVE = heldItem("punching_glove")
@JvmField
val QUICK_CLAW = heldItem("quick_claw")
@JvmField
@@ -759,16 +783,16 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val RING_TARGET = heldItem("ring_target")
@JvmField
val ROCKY_HELMET = heldItem("rocky_helmet")
// @JvmField
// val ROOM_SERVICE = heldItem("room_service")
@JvmField
val ROOM_SERVICE = heldItem("room_service")
@JvmField
val SAFETY_GOGGLES = heldItem("safety_goggles")
// @JvmField
// val SCOPE_LENS = heldItem("scope_lens")
@JvmField
val SCOPE_LENS = heldItem("scope_lens")
@JvmField
val SHARP_BEAK = heldItem("sharp_beak")
// @JvmField
// val SHED_SHELL = heldItem("shed_shell")
@JvmField
val SHED_SHELL = heldItem("shed_shell")
@JvmField
val SHELL_BELL = heldItem("shell_bell")
@JvmField
@@ -785,29 +809,31 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val SOOTHE_BELL = heldItem("soothe_bell")
@JvmField
val STICKY_BARB = heldItem("sticky_barb")
// @JvmField
// val TERRAIN_EXTENDER = heldItem("terrain_extender")
// @JvmField
// val THROAT_SPRAY = heldItem("throat_spray")
@JvmField
val TERRAIN_EXTENDER = heldItem("terrain_extender")
@JvmField
val THROAT_SPRAY = heldItem("throat_spray")
@JvmField
val TOXIC_ORB = heldItem("toxic_orb")
@JvmField
val TWISTED_SPOON = heldItem("twisted_spoon")
// @JvmField
// val UTILITY_UMBRELLA = heldItem("utility_umbrella")
@JvmField
val UTILITY_UMBRELLA = heldItem("utility_umbrella")
@JvmField
val WEAKNESS_POLICY = heldItem("weakness_policy")
// @JvmField
// val WIDE_LENS = heldItem("wide_lens")
@JvmField
val WIDE_LENS = heldItem("wide_lens")
@JvmField
val WISE_GLASSES = heldItem("wise_glasses")
// @JvmField
// val ZOOM_LENS = heldItem("zoom_lens")
@JvmField
val ZOOM_LENS = heldItem("zoom_lens")
@JvmField
val MENTAL_HERB = compostableHeldItem("mental_herb", null, 1F)
@JvmField
val MIRROR_HERB = compostableHeldItem("mirror_herb", null, 1F)
@JvmField
val MISTY_SEED = heldItem("misty_seed")
@JvmField
val POWER_HERB = compostableHeldItem("power_herb", null, 1F)
@JvmField
val WHITE_HERB = compostableHeldItem("white_herb", null, 1F)
@@ -892,11 +918,11 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val SUSPICIOUS_SHERD = noSettingsItem("suspicious_sherd")
@JvmField
val TUMBLESTONE = this.create("tumblestone", TumblestoneItem(Item.Settings(), CobblemonBlocks.SMALL_BUDDING_TUMBLESTONE))
val TUMBLESTONE = this.create("tumblestone", TumblestoneItem(Item.Properties(), CobblemonBlocks.SMALL_BUDDING_TUMBLESTONE))
@JvmField
val BLACK_TUMBLESTONE = this.create("black_tumblestone", TumblestoneItem(Item.Settings(), CobblemonBlocks.SMALL_BUDDING_BLACK_TUMBLESTONE))
val BLACK_TUMBLESTONE = this.create("black_tumblestone", TumblestoneItem(Item.Properties(), CobblemonBlocks.SMALL_BUDDING_BLACK_TUMBLESTONE))
@JvmField
val SKY_TUMBLESTONE = this.create("sky_tumblestone", TumblestoneItem(Item.Settings(), CobblemonBlocks.SMALL_BUDDING_SKY_TUMBLESTONE))
val SKY_TUMBLESTONE = this.create("sky_tumblestone", TumblestoneItem(Item.Properties(), CobblemonBlocks.SMALL_BUDDING_SKY_TUMBLESTONE))
@JvmField
val SMALL_BUDDING_TUMBLESTONE = blockItem("small_budding_tumblestone", CobblemonBlocks.SMALL_BUDDING_TUMBLESTONE)
@@ -932,12 +958,221 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val BLACK_TUMBLESTONE_BLOCK = blockItem("black_tumblestone_block", CobblemonBlocks.BLACK_TUMBLESTONE_BLOCK)
@JvmField
val POKEROD_SMITHING_TEMPLATE = create("pokerod_smithing_template", SmithingTemplateItem(
Component.translatable("item.minecraft.fishing_rod").blue(),
Component.translatable("item.cobblemon.smithing_template.pokerod.ingredients").blue(),
Component.translatable("upgrade.cobblemon.pokerod").gray(),
Component.translatable("item.cobblemon.smithing_template.pokerod.base_slot_description"),
Component.translatable("item.cobblemon.smithing_template.pokerod.additions_slot_description"),
listOf(cobblemonResource("item/empty_slot_fishing_rod")),
listOf(cobblemonResource("item/empty_slot_pokeball"))
))
@JvmField
val POLISHED_TUMBLESTONE = blockItem("polished_tumblestone", CobblemonBlocks.POLISHED_TUMBLESTONE)
@JvmField
val POLISHED_TUMBLESTONE_STAIRS = blockItem("polished_tumblestone_stairs", CobblemonBlocks.POLISHED_TUMBLESTONE_STAIRS)
@JvmField
val POLISHED_TUMBLESTONE_SLAB = blockItem("polished_tumblestone_slab", CobblemonBlocks.POLISHED_TUMBLESTONE_SLAB)
@JvmField
val POLISHED_TUMBLESTONE_WALL = blockItem("polished_tumblestone_wall", CobblemonBlocks.POLISHED_TUMBLESTONE_WALL)
@JvmField
val CHISELED_POLISHED_TUMBLESTONE = blockItem("chiseled_polished_tumblestone", CobblemonBlocks.CHISELED_POLISHED_TUMBLESTONE)
@JvmField
val SMOOTH_TUMBLESTONE = blockItem("smooth_tumblestone", CobblemonBlocks.SMOOTH_TUMBLESTONE)
@JvmField
val SMOOTH_TUMBLESTONE_STAIRS = blockItem("smooth_tumblestone_stairs", CobblemonBlocks.SMOOTH_TUMBLESTONE_STAIRS)
@JvmField
val SMOOTH_TUMBLESTONE_SLAB = blockItem("smooth_tumblestone_slab", CobblemonBlocks.SMOOTH_TUMBLESTONE_SLAB)
@JvmField
val TUMBLESTONE_BRICKS = blockItem("tumblestone_bricks", CobblemonBlocks.TUMBLESTONE_BRICKS)
@JvmField
val TUMBLESTONE_BRICK_STAIRS = blockItem("tumblestone_brick_stairs", CobblemonBlocks.TUMBLESTONE_BRICK_STAIRS)
@JvmField
val TUMBLESTONE_BRICK_SLAB = blockItem("tumblestone_brick_slab", CobblemonBlocks.TUMBLESTONE_BRICK_SLAB)
@JvmField
val TUMBLESTONE_BRICK_WALL = blockItem("tumblestone_brick_wall", CobblemonBlocks.TUMBLESTONE_BRICK_WALL)
@JvmField
val CHISELED_TUMBLESTONE_BRICKS = blockItem("chiseled_tumblestone_bricks", CobblemonBlocks.CHISELED_TUMBLESTONE_BRICKS)
@JvmField
val POLISHED_SKY_TUMBLESTONE = blockItem("polished_sky_tumblestone", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE)
@JvmField
val POLISHED_SKY_TUMBLESTONE_STAIRS = blockItem("polished_sky_tumblestone_stairs", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE_STAIRS)
@JvmField
val POLISHED_SKY_TUMBLESTONE_SLAB = blockItem("polished_sky_tumblestone_slab", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE_SLAB)
@JvmField
val POLISHED_SKY_TUMBLESTONE_WALL = blockItem("polished_sky_tumblestone_wall", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE_WALL)
@JvmField
val CHISELED_POLISHED_SKY_TUMBLESTONE = blockItem("chiseled_polished_sky_tumblestone", CobblemonBlocks.CHISELED_POLISHED_SKY_TUMBLESTONE)
@JvmField
val SMOOTH_SKY_TUMBLESTONE = blockItem("smooth_sky_tumblestone", CobblemonBlocks.SMOOTH_SKY_TUMBLESTONE)
@JvmField
val SMOOTH_SKY_TUMBLESTONE_STAIRS = blockItem("smooth_sky_tumblestone_stairs", CobblemonBlocks.SMOOTH_SKY_TUMBLESTONE_STAIRS)
@JvmField
val SMOOTH_SKY_TUMBLESTONE_SLAB = blockItem("smooth_sky_tumblestone_slab", CobblemonBlocks.SMOOTH_SKY_TUMBLESTONE_SLAB)
@JvmField
val SKY_TUMBLESTONE_BRICKS = blockItem("sky_tumblestone_bricks", CobblemonBlocks.SKY_TUMBLESTONE_BRICKS)
@JvmField
val SKY_TUMBLESTONE_BRICK_STAIRS = blockItem("sky_tumblestone_brick_stairs", CobblemonBlocks.SKY_TUMBLESTONE_BRICK_STAIRS)
@JvmField
val SKY_TUMBLESTONE_BRICK_SLAB = blockItem("sky_tumblestone_brick_slab", CobblemonBlocks.SKY_TUMBLESTONE_BRICK_SLAB)
@JvmField
val SKY_TUMBLESTONE_BRICK_WALL = blockItem("sky_tumblestone_brick_wall", CobblemonBlocks.SKY_TUMBLESTONE_BRICK_WALL)
@JvmField
val CHISELED_SKY_TUMBLESTONE_BRICKS = blockItem("chiseled_sky_tumblestone_bricks", CobblemonBlocks.CHISELED_SKY_TUMBLESTONE_BRICKS)
@JvmField
val POLISHED_BLACK_TUMBLESTONE = blockItem("polished_black_tumblestone", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_STAIRS = blockItem("polished_black_tumblestone_stairs", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE_STAIRS)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_SLAB = blockItem("polished_black_tumblestone_slab", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE_SLAB)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_WALL = blockItem("polished_black_tumblestone_wall", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE_WALL)
@JvmField
val CHISELED_POLISHED_BLACK_TUMBLESTONE = blockItem("chiseled_polished_black_tumblestone", CobblemonBlocks.CHISELED_POLISHED_BLACK_TUMBLESTONE)
@JvmField
val SMOOTH_BLACK_TUMBLESTONE = blockItem("smooth_black_tumblestone", CobblemonBlocks.SMOOTH_BLACK_TUMBLESTONE)
@JvmField
val SMOOTH_BLACK_TUMBLESTONE_STAIRS = blockItem("smooth_black_tumblestone_stairs", CobblemonBlocks.SMOOTH_BLACK_TUMBLESTONE_STAIRS)
@JvmField
val SMOOTH_BLACK_TUMBLESTONE_SLAB = blockItem("smooth_black_tumblestone_slab", CobblemonBlocks.SMOOTH_BLACK_TUMBLESTONE_SLAB)
@JvmField
val BLACK_TUMBLESTONE_BRICKS = blockItem("black_tumblestone_bricks", CobblemonBlocks.BLACK_TUMBLESTONE_BRICKS)
@JvmField
val BLACK_TUMBLESTONE_BRICK_STAIRS = blockItem("black_tumblestone_brick_stairs", CobblemonBlocks.BLACK_TUMBLESTONE_BRICK_STAIRS)
@JvmField
val BLACK_TUMBLESTONE_BRICK_SLAB = blockItem("black_tumblestone_brick_slab", CobblemonBlocks.BLACK_TUMBLESTONE_BRICK_SLAB)
@JvmField
val BLACK_TUMBLESTONE_BRICK_WALL = blockItem("black_tumblestone_brick_wall", CobblemonBlocks.BLACK_TUMBLESTONE_BRICK_WALL)
@JvmField
val CHISELED_BLACK_TUMBLESTONE_BRICKS = blockItem("chiseled_black_tumblestone_bricks", CobblemonBlocks.CHISELED_BLACK_TUMBLESTONE_BRICKS)
@JvmField
val FIRE_STONE_BLOCK = blockItem("fire_stone_block", CobblemonBlocks.FIRE_STONE_BLOCK)
@JvmField
val WATER_STONE_BLOCK = blockItem("water_stone_block", CobblemonBlocks.WATER_STONE_BLOCK)
@JvmField
val THUNDER_STONE_BLOCK = blockItem("thunder_stone_block", CobblemonBlocks.THUNDER_STONE_BLOCK)
@JvmField
val LEAF_STONE_BLOCK = blockItem("leaf_stone_block", CobblemonBlocks.LEAF_STONE_BLOCK)
@JvmField
val ICE_STONE_BLOCK = blockItem("ice_stone_block", CobblemonBlocks.ICE_STONE_BLOCK)
@JvmField
val SUN_STONE_BLOCK = blockItem("sun_stone_block", CobblemonBlocks.SUN_STONE_BLOCK)
@JvmField
val MOON_STONE_BLOCK = blockItem("moon_stone_block", CobblemonBlocks.MOON_STONE_BLOCK)
@JvmField
val SHINY_STONE_BLOCK = blockItem("shiny_stone_block", CobblemonBlocks.SHINY_STONE_BLOCK)
@JvmField
val DAWN_STONE_BLOCK = blockItem("dawn_stone_block", CobblemonBlocks.DAWN_STONE_BLOCK)
@JvmField
val DUSK_STONE_BLOCK = blockItem("dusk_stone_block", CobblemonBlocks.DUSK_STONE_BLOCK)
@JvmField
val AUTOMATON_ARMOR_TRIM_SMITHING_TEMPLATE: SmithingTemplateItem = this.create(
"automaton_armor_trim_smithing_template",
SmithingTemplateItem.of(CobblemonArmorTrims.AUTOMATON)
SmithingTemplateItem.createArmorTrimTemplate(CobblemonArmorTrims.AUTOMATON)
)
val pokeRods = mutableListOf<PokerodItem>()
@JvmField
val POKE_ROD = pokerodItem(cobblemonResource("poke_rod"))
@JvmField
val CITRINE_ROD = pokerodItem(cobblemonResource("citrine_rod"))
@JvmField
val VERDANT_ROD = pokerodItem(cobblemonResource("verdant_rod"))
@JvmField
val AZURE_ROD = pokerodItem(cobblemonResource("azure_rod"))
@JvmField
val ROSEATE_ROD = pokerodItem(cobblemonResource("roseate_rod"))
@JvmField
val SLATE_ROD = pokerodItem(cobblemonResource("slate_rod"))
@JvmField
val PREMIER_ROD = pokerodItem(cobblemonResource("premier_rod"))
@JvmField
val GREAT_ROD = pokerodItem(cobblemonResource("great_rod"))
@JvmField
val ULTRA_ROD = pokerodItem(cobblemonResource("ultra_rod"))
@JvmField
val SAFARI_ROD = pokerodItem(cobblemonResource("safari_rod"))
@JvmField
val FAST_ROD = pokerodItem(cobblemonResource("fast_rod"))
@JvmField
val LEVEL_ROD = pokerodItem(cobblemonResource("level_rod"))
@JvmField
val LURE_ROD = pokerodItem(cobblemonResource("lure_rod"))
@JvmField
val HEAVY_ROD = pokerodItem(cobblemonResource("heavy_rod"))
@JvmField
val LOVE_ROD = pokerodItem(cobblemonResource("love_rod"))
@JvmField
val FRIEND_ROD = pokerodItem(cobblemonResource("friend_rod"))
@JvmField
val MOON_ROD = pokerodItem(cobblemonResource("moon_rod"))
@JvmField
val SPORT_ROD = pokerodItem(cobblemonResource("sport_rod"))
@JvmField
val PARK_ROD = pokerodItem(cobblemonResource("park_rod"))
@JvmField
val NET_ROD = pokerodItem(cobblemonResource("net_rod"))
@JvmField
val DIVE_ROD = pokerodItem(cobblemonResource("dive_rod"))
@JvmField
val NEST_ROD = pokerodItem(cobblemonResource("nest_rod"))
@JvmField
val REPEAT_ROD = pokerodItem(cobblemonResource("repeat_rod"))
@JvmField
val TIMER_ROD = pokerodItem(cobblemonResource("timer_rod"))
@JvmField
val LUXURY_ROD = pokerodItem(cobblemonResource("luxury_rod"))
@JvmField
val DUSK_ROD = pokerodItem(cobblemonResource("dusk_rod"))
@JvmField
val HEAL_ROD = pokerodItem(cobblemonResource("heal_rod"))
@JvmField
val QUICK_ROD = pokerodItem(cobblemonResource("quick_rod"))
@JvmField
val DREAM_ROD = pokerodItem(cobblemonResource("dream_rod"))
@JvmField
val BEAST_ROD = pokerodItem(cobblemonResource("beast_rod"))
@JvmField
val MASTER_ROD = pokerodItem(cobblemonResource("master_rod"))
@JvmField
val CHERISH_ROD = pokerodItem(cobblemonResource("cherish_rod"))
@JvmField
val ANCIENT_POKE_ROD = pokerodItem(cobblemonResource("ancient_poke_rod"))
@JvmField
val ANCIENT_CITRINE_ROD = pokerodItem(cobblemonResource("ancient_citrine_rod"))
@JvmField
val ANCIENT_VERDANT_ROD = pokerodItem(cobblemonResource("ancient_verdant_rod"))
@JvmField
val ANCIENT_AZURE_ROD = pokerodItem(cobblemonResource("ancient_azure_rod"))
@JvmField
val ANCIENT_ROSEATE_ROD = pokerodItem(cobblemonResource("ancient_roseate_rod"))
@JvmField
val ANCIENT_SLATE_ROD = pokerodItem(cobblemonResource("ancient_slate_rod"))
@JvmField
val ANCIENT_IVORY_ROD = pokerodItem(cobblemonResource("ancient_ivory_rod"))
@JvmField
val ANCIENT_GREAT_ROD = pokerodItem(cobblemonResource("ancient_great_rod"))
@JvmField
val ANCIENT_ULTRA_ROD = pokerodItem(cobblemonResource("ancient_ultra_rod"))
@JvmField
val ANCIENT_FEATHER_ROD = pokerodItem(cobblemonResource("ancient_feather_rod"))
@JvmField
val ANCIENT_WING_ROD = pokerodItem(cobblemonResource("ancient_wing_rod"))
@JvmField
val ANCIENT_JET_ROD = pokerodItem(cobblemonResource("ancient_jet_rod"))
@JvmField
val ANCIENT_HEAVY_ROD = pokerodItem(cobblemonResource("ancient_heavy_rod"))
@JvmField
val ANCIENT_LEADEN_ROD = pokerodItem(cobblemonResource("ancient_leaden_rod"))
@JvmField
val ANCIENT_GIGATON_ROD = pokerodItem(cobblemonResource("ancient_gigaton_rod"))
@JvmField
val ANCIENT_ORIGIN_ROD = pokerodItem(cobblemonResource("ancient_origin_rod"))
// Misc
@JvmField
val POKEMON_MODEL = this.create("pokemon_model", PokemonItem())
@@ -985,10 +1220,12 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val STEEL_GEM = noSettingsItem("steel_gem")
@JvmField
val FAIRY_GEM = noSettingsItem("fairy_gem")
//@JvmField
//val BINDING_SOIL = blockItem("binding_soil", CobblemonBlocks.BINDING_SOIL)
private fun blockItem(name: String, block: Block): BlockItem = this.create(name, BlockItem(block, Item.Settings()))
private fun blockItem(name: String, block: Block): BlockItem = this.create(name, BlockItem(block, Item.Properties()))
private fun noSettingsItem(name: String): CobblemonItem = this.create(name, CobblemonItem(Item.Settings()))
private fun noSettingsItem(name: String): CobblemonItem = this.create(name, CobblemonItem(Item.Properties()))
fun berries() = this.berries.toMap()
@@ -1003,9 +1240,16 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
private fun candyItem(name: String, calculator: CandyItem.Calculator): CandyItem = this.create(name, CandyItem(calculator))
private fun pokerodItem(pokeRodId: ResourceLocation): PokerodItem {
val settings = Item.Properties().stacksTo(1).durability(Items.FISHING_ROD.components().get(DataComponents.MAX_DAMAGE)!!)
val item = create(pokeRodId.path, PokerodItem(pokeRodId, settings))
pokeRods.add(item)
return item
}
private fun heldItem(name: String, remappedName: String? = null): CobblemonItem = create(
name,
CobblemonItem(Item.Settings()).also {
CobblemonItem(Item.Properties()).also {
if (remappedName != null) {
CobblemonHeldItemManager.registerRemap(it, remappedName)
}
@@ -1076,7 +1320,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
}
private fun compostableItem(name: String, item: Item? = null, increaseLevelChance: Float = .65f): Item {
val createdItem = this.create(name, item ?: Item(Item.Settings()))
val createdItem = this.create(name, item ?: Item(Item.Properties()))
compostable(createdItem, increaseLevelChance)
return createdItem
}
@@ -1093,4 +1337,4 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
return createdItem
}
}
}
@@ -10,32 +10,35 @@ package com.cobblemon.mod.common
import com.bedrockk.molang.Expression
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.molang.ExpressionLike
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.adapters.ExpressionLikeAdapter
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
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.server.packs.PackType
import net.minecraft.server.packs.resources.ResourceManager
object CobblemonMechanics : DataRegistry {
override val id: Identifier = cobblemonResource("mechanics")
override val type = ResourceType.SERVER_DATA
override val id: ResourceLocation = cobblemonResource("mechanics")
override val type = PackType.SERVER_DATA
override val observable = SimpleObservable<CobblemonMechanics>()
val gson = GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(Expression::class.java, ExpressionAdapter)
.registerTypeAdapter(ExpressionLike::class.java, ExpressionLikeAdapter)
.create()
var remedies = RemediesMechanic()
var berries = BerriesMechanic()
var potions = PotionsMechanic()
override fun sync(player: ServerPlayerEntity) {}
override fun sync(player: ServerPlayer) {}
override fun reload(manager: ResourceManager) {
remedies = loadMechanic(manager, "remedies", RemediesMechanic::class.java)
berries = loadMechanic(manager, "berries", BerriesMechanic::class.java)
@@ -43,7 +46,7 @@ object CobblemonMechanics : DataRegistry {
}
private fun <T> loadMechanic(manager: ResourceManager, name: String, clazz: Class<T>): T {
manager.getResourceOrThrow(cobblemonResource("mechanics/$name.json")).inputStream.use {
manager.getResourceOrThrow(cobblemonResource("mechanics/$name.json")).open().use {
return gson.fromJson(it.reader(), clazz)
}
}
@@ -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
import com.cobblemon.mod.common.api.dialogue.ActiveDialogue
import com.cobblemon.mod.common.api.moves.animations.ActionEffectContext
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.ListCodec
import com.mojang.serialization.codecs.PrimitiveCodec
import net.minecraft.core.UUIDUtil
import net.minecraft.world.entity.ai.memory.MemoryModuleType
import java.util.Optional
object CobblemonMemories {
val memories = mutableMapOf<String, MemoryModuleType<*>>()
val BATTLING_POKEMON = register("battling_pokemon", ListCodec(UUIDUtil.CODEC, 0, 31))
val NPC_BATTLING = register("npc_battling", PrimitiveCodec.BOOL)
val DIALOGUES = register<List<ActiveDialogue>>("npc_dialogues")
val ACTIVE_ACTION_EFFECT = register<ActionEffectContext>("active_action_effect")
fun <U> register(id: String, codec: Codec<U>): MemoryModuleType<U> {
val memoryModule = MemoryModuleType(Optional.of(codec))
memories[id] = memoryModule
return memoryModule
}
fun <U> register(id: String): MemoryModuleType<U> {
val memoryModule = MemoryModuleType<U>(Optional.empty())
memories[id] = memoryModule
return memoryModule
}
}
@@ -8,29 +8,31 @@
package com.cobblemon.mod.common
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.cobblemon.mod.common.client.net.PlayerInteractOptionsHandler
import com.cobblemon.mod.common.client.net.SetClientPlayerDataHandler
import com.cobblemon.mod.common.client.net.animation.PlayPoseableAnimationHandler
import com.cobblemon.mod.common.client.net.animation.PlayPosableAnimationHandler
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.RunPosableMoLangHandler
import com.cobblemon.mod.common.client.net.dialogue.DialogueClosedHandler
import com.cobblemon.mod.common.client.net.dialogue.DialogueOpenedHandler
import com.cobblemon.mod.common.client.net.effect.RunPosableMoLangHandler
import com.cobblemon.mod.common.client.net.effect.SpawnSnowstormEntityParticleHandler
import com.cobblemon.mod.common.client.net.effect.SpawnSnowstormParticleHandler
import com.cobblemon.mod.common.client.net.gui.InteractPokemonUIPacketHandler
import com.cobblemon.mod.common.client.net.gui.PokedexUIPacketHandler
import com.cobblemon.mod.common.client.net.gui.SummaryUIPacketHandler
import com.cobblemon.mod.common.client.net.npc.CloseNPCEditorHandler
import com.cobblemon.mod.common.client.net.npc.OpenNPCEditorHandler
import com.cobblemon.mod.common.client.net.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.pokedex.ServerConfirmedRegisterHandler
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.UnvalidatedPlaySoundS2CPacketHandler
@@ -56,28 +58,24 @@ 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.PacketRegisterInfo
import com.cobblemon.mod.common.net.messages.client.PlayerInteractOptionsPacket
import com.cobblemon.mod.common.net.messages.client.animation.PlayPoseableAnimationPacket
import com.cobblemon.mod.common.net.messages.client.animation.PlayPosableAnimationPacket
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.AbilityRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.BerryRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.GlobalSpeciesFeatureSyncPacket
import com.cobblemon.mod.common.net.messages.client.data.MovesRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.PropertiesCompletionRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.SpeciesFeatureAssignmentSyncPacket
import com.cobblemon.mod.common.net.messages.client.data.SpeciesRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.data.StandardSpeciesFeatureSyncPacket
import com.cobblemon.mod.common.net.messages.client.data.UnlockReloadPacket
import com.cobblemon.mod.common.net.messages.client.data.*
import com.cobblemon.mod.common.net.messages.client.dialogue.DialogueClosedPacket
import com.cobblemon.mod.common.net.messages.client.dialogue.DialogueOpenedPacket
import com.cobblemon.mod.common.net.messages.client.effect.RunPosableMoLangPacket
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormEntityParticlePacket
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormParticlePacket
import com.cobblemon.mod.common.net.messages.client.fishing.FishingBaitRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.fossil.FossilRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.fossil.NaturalMaterialRegistrySyncPacket
import com.cobblemon.mod.common.net.messages.client.npc.CloseNPCEditorPacket
import com.cobblemon.mod.common.net.messages.client.npc.OpenNPCEditorPacket
import com.cobblemon.mod.common.net.messages.client.pasture.ClosePasturePacket
import com.cobblemon.mod.common.net.messages.client.pasture.OpenPasturePacket
import com.cobblemon.mod.common.net.messages.client.pasture.PokemonPasturedPacket
@@ -89,22 +87,18 @@ import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.Rem
import com.cobblemon.mod.common.net.messages.client.settings.ServerSettingsPacket
import com.cobblemon.mod.common.net.messages.client.sound.UnvalidatedPlaySoundS2CPacket
import com.cobblemon.mod.common.net.messages.client.spawn.SpawnGenericBedrockPacket
import com.cobblemon.mod.common.net.messages.client.spawn.SpawnNPCPacket
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.SetClientPlayerDataPacket
import com.cobblemon.mod.common.net.messages.client.storage.RemoveClientPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.SwapClientPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.party.InitializePartyPacket
import com.cobblemon.mod.common.net.messages.client.storage.party.MoveClientPartyPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.party.SetPartyPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.party.SetPartyReferencePacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.ClosePCPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.InitializePCPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.MoveClientPCPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.OpenPCPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.SetPCBoxPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.SetPCPokemonPacket
import com.cobblemon.mod.common.net.messages.client.storage.pc.*
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
@@ -114,6 +108,7 @@ import com.cobblemon.mod.common.net.messages.client.trade.TradeOfferNotification
import com.cobblemon.mod.common.net.messages.client.trade.TradeStartedPacket
import com.cobblemon.mod.common.net.messages.client.trade.TradeUpdatedPacket
import com.cobblemon.mod.common.net.messages.client.ui.InteractPokemonUIPacket
import com.cobblemon.mod.common.net.messages.client.ui.PokedexUIPacket
import com.cobblemon.mod.common.net.messages.client.ui.SummaryUIPacket
import com.cobblemon.mod.common.net.messages.server.*
import com.cobblemon.mod.common.net.messages.server.battle.BattleSelectActionsPacket
@@ -127,9 +122,11 @@ import com.cobblemon.mod.common.net.messages.server.callback.partymove.PartyMove
import com.cobblemon.mod.common.net.messages.server.callback.partymove.PartyPokemonMoveSelectedPacket
import com.cobblemon.mod.common.net.messages.server.dialogue.EscapeDialoguePacket
import com.cobblemon.mod.common.net.messages.server.dialogue.InputToDialoguePacket
import com.cobblemon.mod.common.net.messages.server.npc.SaveNPCPacket
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.pokedex.scanner.StartScanningPacket
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
@@ -149,8 +146,7 @@ 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.RequestInteractionsHandler
import com.cobblemon.mod.common.net.serverhandling.*
import com.cobblemon.mod.common.net.serverhandling.battle.BattleSelectActionsHandler
import com.cobblemon.mod.common.net.serverhandling.battle.RemoveSpectatorHandler
import com.cobblemon.mod.common.net.serverhandling.battle.SpectateBattleHandler
@@ -163,6 +159,7 @@ import com.cobblemon.mod.common.net.serverhandling.callback.partymove.PartyPokem
import com.cobblemon.mod.common.net.serverhandling.dialogue.EscapeDialogueHandler
import com.cobblemon.mod.common.net.serverhandling.dialogue.InputToDialogueHandler
import com.cobblemon.mod.common.net.serverhandling.evolution.AcceptEvolutionHandler
import com.cobblemon.mod.common.net.serverhandling.npc.SaveNPCHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.PasturePokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.UnpastureAllPokemonHandler
import com.cobblemon.mod.common.net.serverhandling.pasture.UnpasturePokemonHandler
@@ -188,13 +185,12 @@ 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.net.messages.client.pokedex.ServerConfirmedRegisterPacket
import com.cobblemon.mod.common.net.messages.server.pokedex.scanner.FinishScanningPacket
import com.cobblemon.mod.common.net.serverhandling.pokedex.scanner.FinishScanningHandler
import com.cobblemon.mod.common.net.serverhandling.pokedex.scanner.StartScanningHandler
import com.cobblemon.mod.common.util.server
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
import kotlin.reflect.KClass
import net.minecraft.server.level.ServerPlayer
/**
* Registers Cobblemon network packets.
@@ -204,254 +200,270 @@ import kotlin.reflect.KClass
* @author Hiroku, Licious
* @since November 27th, 2021
*/
object CobblemonNetwork : NetworkManager {
object CobblemonNetwork {
//private val logger = LogUtils.getLogger()
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) }
fun ServerPlayer.sendPacket(packet: NetworkPacket<*>) {
sendPacketToPlayer(this, packet)
}
fun sendToServer(packet: NetworkPacket<*>) {
//logger.info("[C->S] ${packet.type()}")
Cobblemon.implementation.networkManager.sendToServer(packet)
}
fun sendToAllPlayers(packet: NetworkPacket<*>) = sendPacketToPlayers(server()!!.playerList.players, packet)
fun sendPacketToPlayers(players: Iterable<ServerPlayer>, packet: NetworkPacket<*>) = players.forEach { sendPacketToPlayer(it, packet) }
val s2cPayloads = generateS2CPacketInfoList()
val c2sPayloads = generateC2SPacketInfoList()
private fun generateS2CPacketInfoList(): List<PacketRegisterInfo<*>> {
val list = mutableListOf<PacketRegisterInfo<*>>()
override fun registerClientBound() {
// Pokemon Update Packets
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())
this.createClientBound(SpeciesFeatureUpdatePacket.ID, SpeciesFeatureUpdatePacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(OriginalTrainerUpdatePacket.ID, OriginalTrainerUpdatePacket::decode, PokemonUpdatePacketHandler())
list.add(PacketRegisterInfo(FriendshipUpdatePacket.ID, FriendshipUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(MoveSetUpdatePacket.ID, MoveSetUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(NatureUpdatePacket.ID, NatureUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(ShinyUpdatePacket.ID, ShinyUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(SpeciesUpdatePacket.ID, SpeciesUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(NicknameUpdatePacket.ID, NicknameUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(HealthUpdatePacket.ID, HealthUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(ExperienceUpdatePacket.ID, ExperienceUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(StatusUpdatePacket.ID, StatusUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(CaughtBallUpdatePacket.ID, CaughtBallUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(BenchedMovesUpdatePacket.ID, BenchedMovesUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(GenderUpdatePacket.ID, GenderUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(AspectsUpdatePacket.ID, AspectsUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(AbilityUpdatePacket.ID, AbilityUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(EVsUpdatePacket.ID, EVsUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(IVsUpdatePacket.ID, IVsUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(HeldItemUpdatePacket.ID, HeldItemUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(PokemonStateUpdatePacket.ID, PokemonStateUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(TetheringUpdatePacket.ID, TetheringUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(TradeableUpdatePacket.ID, TradeableUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(SpeciesFeatureUpdatePacket.ID, SpeciesFeatureUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(OriginalTrainerUpdatePacket.ID, OriginalTrainerUpdatePacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(FormUpdatePacket.ID, FormUpdatePacket::decode, PokemonUpdatePacketHandler()))
// Evolution start
this.createClientBound(AddEvolutionPacket.ID, AddEvolutionPacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(ClearEvolutionsPacket.ID, ClearEvolutionsPacket::decode, PokemonUpdatePacketHandler())
this.createClientBound(RemoveEvolutionPacket.ID, RemoveEvolutionPacket::decode, PokemonUpdatePacketHandler())
list.add(PacketRegisterInfo(AddEvolutionPacket.ID, AddEvolutionPacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(ClearEvolutionsPacket.ID, ClearEvolutionsPacket::decode, PokemonUpdatePacketHandler()))
list.add(PacketRegisterInfo(RemoveEvolutionPacket.ID, RemoveEvolutionPacket::decode, PokemonUpdatePacketHandler()))
// Evolution End
// Storage Packets
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)
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)
this.createClientBound(SwapClientPokemonPacket.ID, SwapClientPokemonPacket::decode, SwapClientPokemonHandler)
this.createClientBound(RemoveClientPokemonPacket.ID, RemoveClientPokemonPacket::decode, RemoveClientPokemonHandler)
list.add(PacketRegisterInfo(InitializePartyPacket.ID, InitializePartyPacket::decode, InitializePartyHandler))
list.add(PacketRegisterInfo(SetPartyPokemonPacket.ID, SetPartyPokemonPacket::decode, SetPartyPokemonHandler))
list.add(PacketRegisterInfo(MoveClientPartyPokemonPacket.ID, MoveClientPartyPokemonPacket::decode, MoveClientPartyPokemonHandler))
list.add(PacketRegisterInfo(SetPartyReferencePacket.ID, SetPartyReferencePacket::decode, SetPartyReferenceHandler))
list.add(PacketRegisterInfo(InitializePCPacket.ID, InitializePCPacket::decode, InitializePCHandler))
list.add(PacketRegisterInfo(MoveClientPCPokemonPacket.ID, MoveClientPCPokemonPacket::decode, MoveClientPCPokemonHandler))
list.add(PacketRegisterInfo(SetPCBoxPokemonPacket.ID, SetPCBoxPokemonPacket::decode, SetPCBoxPokemonHandler))
list.add(PacketRegisterInfo(SetPCPokemonPacket.ID, SetPCPokemonPacket::decode, SetPCPokemonHandler))
list.add(PacketRegisterInfo(OpenPCPacket.ID, OpenPCPacket::decode, OpenPCHandler))
list.add(PacketRegisterInfo(ClosePCPacket.ID, ClosePCPacket::decode, ClosePCHandler))
list.add(PacketRegisterInfo(SwapClientPokemonPacket.ID, SwapClientPokemonPacket::decode, SwapClientPokemonHandler))
list.add(PacketRegisterInfo(RemoveClientPokemonPacket.ID, RemoveClientPokemonPacket::decode, RemoveClientPokemonHandler))
// UI Packets
this.createClientBound(SummaryUIPacket.ID, SummaryUIPacket::decode, SummaryUIPacketHandler)
this.createClientBound(InteractPokemonUIPacket.ID, InteractPokemonUIPacket::decode, InteractPokemonUIPacketHandler)
this.createClientBound(PlayerInteractOptionsPacket.ID, PlayerInteractOptionsPacket::decode, PlayerInteractOptionsHandler)
list.add(PacketRegisterInfo(SummaryUIPacket.ID, SummaryUIPacket::decode, SummaryUIPacketHandler))
list.add(PacketRegisterInfo(InteractPokemonUIPacket.ID, InteractPokemonUIPacket::decode, InteractPokemonUIPacketHandler))
list.add(PacketRegisterInfo(PlayerInteractOptionsPacket.ID, PlayerInteractOptionsPacket::decode, PlayerInteractOptionsHandler))
list.add(PacketRegisterInfo(PokedexUIPacket.ID, PokedexUIPacket::decode, PokedexUIPacketHandler))
// Starter packets
this.createClientBound(OpenStarterUIPacket.ID, OpenStarterUIPacket::decode, StarterUIPacketHandler)
this.createClientBound(SetClientPlayerDataPacket.ID, SetClientPlayerDataPacket::decode, SetClientPlayerDataHandler)
list.add(PacketRegisterInfo(OpenStarterUIPacket.ID, OpenStarterUIPacket::decode, StarterUIPacketHandler))
list.add(PacketRegisterInfo(SetClientPlayerDataPacket.ID, SetClientPlayerDataPacket::decode, SetClientPlayerDataHandler))
// Battle packets
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)
this.createClientBound(BattleReplacePokemonPacket.ID, BattleReplacePokemonPacket::decode, BattleReplacePokemonHandler)
this.createClientBound(BattleTransformPokemonPacket.ID, BattleTransformPokemonPacket::decode, BattleTransformPokemonHandler)
list.add(PacketRegisterInfo(BattleEndPacket.ID, BattleEndPacket::decode, BattleEndHandler))
list.add(PacketRegisterInfo(BattleInitializePacket.ID, BattleInitializePacket::decode, BattleInitializeHandler))
list.add(PacketRegisterInfo(BattleQueueRequestPacket.ID, BattleQueueRequestPacket::decode, BattleQueueRequestHandler))
list.add(PacketRegisterInfo(BattleFaintPacket.ID, BattleFaintPacket::decode, BattleFaintHandler))
list.add(PacketRegisterInfo(BattleMakeChoicePacket.ID, BattleMakeChoicePacket::decode, BattleMakeChoiceHandler))
list.add(PacketRegisterInfo(BattleHealthChangePacket.ID, BattleHealthChangePacket::decode, BattleHealthChangeHandler))
list.add(PacketRegisterInfo(BattleSetTeamPokemonPacket.ID, BattleSetTeamPokemonPacket::decode, BattleSetTeamPokemonHandler))
list.add(PacketRegisterInfo(BattleSwitchPokemonPacket.ID, BattleSwitchPokemonPacket::decode, BattleSwitchPokemonHandler))
list.add(PacketRegisterInfo(BattleSwapPokemonPacket.ID, BattleSwapPokemonPacket::decode, BattleSwapPokemonHandler))
list.add(PacketRegisterInfo(BattleMessagePacket.ID, BattleMessagePacket::decode, BattleMessageHandler))
list.add(PacketRegisterInfo(BattleCaptureStartPacket.ID, BattleCaptureStartPacket::decode, BattleCaptureStartHandler))
list.add(PacketRegisterInfo(BattleCaptureEndPacket.ID, BattleCaptureEndPacket::decode, BattleCaptureEndHandler))
list.add(PacketRegisterInfo(BattleCaptureShakePacket.ID, BattleCaptureShakePacket::decode, BattleCaptureShakeHandler))
list.add(PacketRegisterInfo(BattleApplyPassResponsePacket.ID, BattleApplyPassResponsePacket::decode, BattleApplyPassResponseHandler))
list.add(PacketRegisterInfo(BattleChallengeNotificationPacket.ID, BattleChallengeNotificationPacket::decode, BattleChallengeNotificationHandler))
list.add(PacketRegisterInfo(BattleUpdateTeamPokemonPacket.ID, BattleUpdateTeamPokemonPacket::decode, BattleUpdateTeamPokemonHandler))
list.add(PacketRegisterInfo(BattlePersistentStatusPacket.ID, BattlePersistentStatusPacket::decode, BattlePersistentStatusHandler))
list.add(PacketRegisterInfo(BattleMadeInvalidChoicePacket.ID, BattleMadeInvalidChoicePacket::decode, BattleMadeInvalidChoiceHandler))
list.add(PacketRegisterInfo(BattleMusicPacket.ID, BattleMusicPacket::decode, BattleMusicHandler))
list.add(PacketRegisterInfo(BattleChallengeExpiredPacket.ID, BattleChallengeExpiredPacket::decode, BattleChallengeExpiredHandler))
list.add(PacketRegisterInfo(BattleReplacePokemonPacket.ID, BattleReplacePokemonPacket::decode, BattleReplacePokemonHandler))
list.add(PacketRegisterInfo(BattleTransformPokemonPacket.ID, BattleTransformPokemonPacket::decode, BattleTransformPokemonHandler))
// MultiBattleTeam Packets
list.add(PacketRegisterInfo(TeamRequestNotificationPacket.ID, TeamRequestNotificationPacket::decode, TeamRequestNotificationHandler))
list.add(PacketRegisterInfo(TeamRequestExpiredPacket.ID, TeamRequestExpiredPacket::decode, TeamRequestExpiredHandler))
list.add(PacketRegisterInfo(TeamMemberRemoveNotificationPacket.ID, TeamMemberRemoveNotificationPacket::decode, TeamMemberRemoveNotificationHandler))
list.add(PacketRegisterInfo(TeamJoinNotificationPacket.ID, TeamJoinNotificationPacket::decode, TeamJoinNotificationHandler))
// Settings packets
this.createClientBound(ServerSettingsPacket.ID, ServerSettingsPacket::decode, ServerSettingsPacketHandler)
list.add(PacketRegisterInfo(ServerSettingsPacket.ID, ServerSettingsPacket::decode, ServerSettingsPacketHandler))
// Data registries
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())
this.createClientBound(StandardSpeciesFeatureSyncPacket.ID, StandardSpeciesFeatureSyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(GlobalSpeciesFeatureSyncPacket.ID, GlobalSpeciesFeatureSyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(SpeciesFeatureAssignmentSyncPacket.ID, SpeciesFeatureAssignmentSyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(NaturalMaterialRegistrySyncPacket.ID, NaturalMaterialRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
this.createClientBound(FossilRegistrySyncPacket.ID, FossilRegistrySyncPacket::decode, DataRegistrySyncPacketHandler())
list.add(PacketRegisterInfo(AbilityRegistrySyncPacket.ID, AbilityRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(MovesRegistrySyncPacket.ID, MovesRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(BerryRegistrySyncPacket.ID, BerryRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(SpeciesRegistrySyncPacket.ID, SpeciesRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(PropertiesCompletionRegistrySyncPacket.ID, PropertiesCompletionRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(UnlockReloadPacket.ID, UnlockReloadPacket::decode, UnlockReloadPacketHandler))
list.add(PacketRegisterInfo(StandardSpeciesFeatureSyncPacket.ID, StandardSpeciesFeatureSyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(GlobalSpeciesFeatureSyncPacket.ID, GlobalSpeciesFeatureSyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(SpeciesFeatureAssignmentSyncPacket.ID, SpeciesFeatureAssignmentSyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(NaturalMaterialRegistrySyncPacket.ID, NaturalMaterialRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(FossilRegistrySyncPacket.ID, FossilRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(NPCRegistrySyncPacket.ID, NPCRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(PokeRodRegistrySyncPacket.ID, PokeRodRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(ScriptRegistrySyncPacket.ID, ScriptRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(PokedexDexSyncPacket.ID, PokedexDexSyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(DexEntrySyncPacket.ID, DexEntrySyncPacket::decode, DataRegistrySyncPacketHandler()))
list.add(PacketRegisterInfo(FishingBaitRegistrySyncPacket.ID, FishingBaitRegistrySyncPacket::decode, DataRegistrySyncPacketHandler()))
// Effects
this.createClientBound(SpawnSnowstormParticlePacket.ID, SpawnSnowstormParticlePacket::decode, SpawnSnowstormParticleHandler)
this.createClientBound(SpawnSnowstormEntityParticlePacket.ID, SpawnSnowstormEntityParticlePacket::decode, SpawnSnowstormEntityParticleHandler)
this.createClientBound(RunPosableMoLangPacket.ID, RunPosableMoLangPacket::decode, RunPosableMoLangHandler)
list.add(PacketRegisterInfo(SpawnSnowstormParticlePacket.ID, SpawnSnowstormParticlePacket::decode, SpawnSnowstormParticleHandler))
list.add(PacketRegisterInfo(SpawnSnowstormEntityParticlePacket.ID, SpawnSnowstormEntityParticlePacket::decode, SpawnSnowstormEntityParticleHandler))
list.add(PacketRegisterInfo(RunPosableMoLangPacket.ID, RunPosableMoLangPacket::decode, RunPosableMoLangHandler))
// 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)
this.createClientBound(SpawnGenericBedrockPacket.ID, SpawnGenericBedrockPacket::decode, SpawnExtraDataEntityHandler())
list.add(PacketRegisterInfo(UnvalidatedPlaySoundS2CPacket.ID, UnvalidatedPlaySoundS2CPacket::decode, UnvalidatedPlaySoundS2CPacketHandler))
list.add(PacketRegisterInfo(SpawnPokemonPacket.ID, SpawnPokemonPacket::decode, SpawnExtraDataEntityHandler()))
list.add(PacketRegisterInfo(SpawnPokeballPacket.ID, SpawnPokeballPacket::decode, SpawnExtraDataEntityHandler()))
list.add(PacketRegisterInfo(SpawnGenericBedrockPacket.ID, SpawnGenericBedrockPacket::decode, SpawnExtraDataEntityHandler()))
list.add(PacketRegisterInfo(SpawnNPCPacket.ID, SpawnNPCPacket::decode, SpawnExtraDataEntityHandler()))
list.add(PacketRegisterInfo(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)
list.add(PacketRegisterInfo(TradeAcceptanceChangedPacket.ID, TradeAcceptanceChangedPacket::decode, TradeAcceptanceChangedHandler))
list.add(PacketRegisterInfo(TradeCancelledPacket.ID, TradeCancelledPacket::decode, TradeCancelledHandler))
list.add(PacketRegisterInfo(TradeCompletedPacket.ID, TradeCompletedPacket::decode, TradeCompletedHandler))
list.add(PacketRegisterInfo(TradeUpdatedPacket.ID, TradeUpdatedPacket::decode, TradeUpdatedHandler))
list.add(PacketRegisterInfo(TradeOfferNotificationPacket.ID, TradeOfferNotificationPacket::decode, TradeOfferNotificationHandler))
list.add(PacketRegisterInfo(TradeOfferExpiredPacket.ID, TradeOfferExpiredPacket::decode, TradeOfferExpiredHandler))
list.add(PacketRegisterInfo(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)
list.add(PacketRegisterInfo(OpenPasturePacket.ID, OpenPasturePacket::decode, OpenPastureHandler))
list.add(PacketRegisterInfo(ClosePasturePacket.ID, ClosePasturePacket::decode, ClosePastureHandler))
list.add(PacketRegisterInfo(PokemonPasturedPacket.ID, PokemonPasturedPacket::decode, PokemonPasturedHandler))
list.add(PacketRegisterInfo(PokemonUnpasturedPacket.ID, PokemonUnpasturedPacket::decode, PokemonUnpasturedHandler))
// Behaviours
this.createClientBound(PlayPoseableAnimationPacket.ID, PlayPoseableAnimationPacket::decode, PlayPoseableAnimationHandler)
list.add(PacketRegisterInfo(PlayPosableAnimationPacket.ID, PlayPosableAnimationPacket::decode, PlayPosableAnimationHandler))
// Move select packets
this.createClientBound(OpenMoveCallbackPacket.ID, OpenMoveCallbackPacket::decode, OpenMoveCallbackHandler)
list.add(PacketRegisterInfo(OpenMoveCallbackPacket.ID, OpenMoveCallbackPacket::decode, OpenMoveCallbackHandler))
// Party select packets
this.createClientBound(OpenPartyCallbackPacket.ID, OpenPartyCallbackPacket::decode, OpenPartyCallbackHandler)
list.add(PacketRegisterInfo(OpenPartyCallbackPacket.ID, OpenPartyCallbackPacket::decode, OpenPartyCallbackHandler))
// Party move select packets
this.createClientBound(OpenPartyMoveCallbackPacket.ID, OpenPartyMoveCallbackPacket::decode, OpenPartyMoveCallbackHandler)
list.add(PacketRegisterInfo(OpenPartyMoveCallbackPacket.ID, OpenPartyMoveCallbackPacket::decode, OpenPartyMoveCallbackHandler))
// Dialogue packets
this.createClientBound(DialogueClosedPacket.ID, DialogueClosedPacket::decode, DialogueClosedHandler)
this.createClientBound(DialogueOpenedPacket.ID, DialogueOpenedPacket::decode, DialogueOpenedHandler)
list.add(PacketRegisterInfo(DialogueClosedPacket.ID, DialogueClosedPacket::decode, DialogueClosedHandler))
list.add(PacketRegisterInfo(DialogueOpenedPacket.ID, DialogueOpenedPacket::decode, DialogueOpenedHandler))
// NPCs
list.add(PacketRegisterInfo(CloseNPCEditorPacket.ID, CloseNPCEditorPacket::decode, CloseNPCEditorHandler))
list.add(PacketRegisterInfo(OpenNPCEditorPacket.ID, OpenNPCEditorPacket::decode, OpenNPCEditorHandler))
//Pokedex scanning
list.add(PacketRegisterInfo(ServerConfirmedRegisterPacket.ID, ServerConfirmedRegisterPacket::decode, ServerConfirmedRegisterHandler))
return list
}
override fun registerServerBound() {
private fun generateC2SPacketInfoList(): List<PacketRegisterInfo<*>> {
val list = mutableListOf<PacketRegisterInfo<*>>()
// Pokemon Update Packets
this.createServerBound(SetNicknamePacket.ID, SetNicknamePacket::decode, SetNicknameHandler)
list.add(PacketRegisterInfo(SetNicknamePacket.ID, SetNicknamePacket::decode, SetNicknameHandler))
// Evolution Packets
this.createServerBound(AcceptEvolutionPacket.ID, AcceptEvolutionPacket::decode, AcceptEvolutionHandler)
list.add(PacketRegisterInfo(AcceptEvolutionPacket.ID, AcceptEvolutionPacket::decode, AcceptEvolutionHandler))
// Interaction Packets
this.createServerBound(InteractPokemonPacket.ID, InteractPokemonPacket::decode, InteractPokemonHandler)
this.createServerBound(RequestPlayerInteractionsPacket.ID, RequestPlayerInteractionsPacket::decode, RequestInteractionsHandler)
list.add(PacketRegisterInfo(InteractPokemonPacket.ID, InteractPokemonPacket::decode, InteractPokemonHandler))
list.add(PacketRegisterInfo(RequestPlayerInteractionsPacket.ID, RequestPlayerInteractionsPacket::decode, RequestInteractionsHandler))
// Storage Packets
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)
list.add(PacketRegisterInfo(SendOutPokemonPacket.ID, SendOutPokemonPacket::decode, SendOutPokemonHandler))
list.add(PacketRegisterInfo(RequestMoveSwapPacket.ID, RequestMoveSwapPacket::decode, RequestMoveSwapHandler))
list.add(PacketRegisterInfo(BenchMovePacket.ID, BenchMovePacket::decode, BenchMoveHandler))
list.add(PacketRegisterInfo(BattleChallengePacket.ID, BattleChallengePacket::decode, ChallengeHandler))
list.add(PacketRegisterInfo(BattleChallengeResponsePacket.ID, BattleChallengeResponsePacket::decode, ChallengeResponseHandler))
list.add(PacketRegisterInfo(BattleTeamRequestPacket.ID, BattleTeamRequestPacket::decode, TeamRequestHandler))
list.add(PacketRegisterInfo(BattleTeamResponsePacket.ID, BattleTeamResponsePacket::decode, TeamRequestResponseHandler))
list.add(PacketRegisterInfo(BattleTeamLeavePacket.ID, BattleTeamLeavePacket::decode, TeamLeaveHandler))
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)
list.add(PacketRegisterInfo(MovePCPokemonToPartyPacket.ID, MovePCPokemonToPartyPacket::decode, MovePCPokemonToPartyHandler))
list.add(PacketRegisterInfo(MovePartyPokemonToPCPacket.ID, MovePartyPokemonToPCPacket::decode, MovePartyPokemonToPCHandler))
list.add(PacketRegisterInfo(ReleasePartyPokemonPacket.ID, ReleasePartyPokemonPacket::decode, ReleasePartyPokemonHandler))
list.add(PacketRegisterInfo(ReleasePCPokemonPacket.ID, ReleasePCPokemonPacket::decode, ReleasePCPokemonHandler))
list.add(PacketRegisterInfo(UnlinkPlayerFromPCPacket.ID, UnlinkPlayerFromPCPacket::decode, UnlinkPlayerFromPCHandler))
// Starter packets
this.createServerBound(SelectStarterPacket.ID, SelectStarterPacket::decode, SelectStarterPacketHandler)
this.createServerBound(RequestStarterScreenPacket.ID, RequestStarterScreenPacket::decode, RequestStarterScreenHandler)
list.add(PacketRegisterInfo(SelectStarterPacket.ID, SelectStarterPacket::decode, SelectStarterPacketHandler))
list.add(PacketRegisterInfo(RequestStarterScreenPacket.ID, RequestStarterScreenPacket::decode, RequestStarterScreenHandler))
this.createServerBound(SwapPCPokemonPacket.ID, SwapPCPokemonPacket::decode, SwapPCPokemonHandler)
this.createServerBound(SwapPartyPokemonPacket.ID, SwapPartyPokemonPacket::decode, SwapPartyPokemonHandler)
list.add(PacketRegisterInfo(SwapPCPokemonPacket.ID, SwapPCPokemonPacket::decode, SwapPCPokemonHandler))
list.add(PacketRegisterInfo(SwapPartyPokemonPacket.ID, SwapPartyPokemonPacket::decode, SwapPartyPokemonHandler))
this.createServerBound(MovePCPokemonPacket.ID, MovePCPokemonPacket::decode, MovePCPokemonHandler)
this.createServerBound(MovePartyPokemonPacket.ID, MovePartyPokemonPacket::decode, MovePartyPokemonHandler)
list.add(PacketRegisterInfo(MovePCPokemonPacket.ID, MovePCPokemonPacket::decode, MovePCPokemonHandler))
list.add(PacketRegisterInfo(MovePartyPokemonPacket.ID, MovePartyPokemonPacket::decode, MovePartyPokemonHandler))
this.createServerBound(SwapPCPartyPokemonPacket.ID, SwapPCPartyPokemonPacket::decode, SwapPCPartyPokemonHandler)
list.add(PacketRegisterInfo(SwapPCPartyPokemonPacket.ID, SwapPCPartyPokemonPacket::decode, SwapPCPartyPokemonHandler))
// Battle packets
this.createServerBound(BattleSelectActionsPacket.ID, BattleSelectActionsPacket::decode, BattleSelectActionsHandler)
this.createServerBound(SpectateBattlePacket.ID, SpectateBattlePacket::decode, SpectateBattleHandler)
this.createServerBound(RemoveSpectatorPacket.ID, RemoveSpectatorPacket::decode, RemoveSpectatorHandler)
list.add(PacketRegisterInfo(BattleSelectActionsPacket.ID, BattleSelectActionsPacket::decode, BattleSelectActionsHandler))
list.add(PacketRegisterInfo(SpectateBattlePacket.ID, SpectateBattlePacket::decode, SpectateBattleHandler))
list.add(PacketRegisterInfo(RemoveSpectatorPacket.ID, RemoveSpectatorPacket::decode, RemoveSpectatorHandler))
// 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)
list.add(PacketRegisterInfo(AcceptTradeRequestPacket.ID, AcceptTradeRequestPacket::decode, AcceptTradeRequestHandler))
list.add(PacketRegisterInfo(CancelTradePacket.ID, CancelTradePacket::decode, CancelTradeHandler))
list.add(PacketRegisterInfo(ChangeTradeAcceptancePacket.ID, ChangeTradeAcceptancePacket::decode, ChangeTradeAcceptanceHandler))
list.add(PacketRegisterInfo(OfferTradePacket.ID, OfferTradePacket::decode, OfferTradeHandler))
list.add(PacketRegisterInfo(UpdateTradeOfferPacket.ID, UpdateTradeOfferPacket::decode, UpdateTradeOfferHandler))
// Pokedex scanning
list.add(PacketRegisterInfo(StartScanningPacket.ID, StartScanningPacket::decode, StartScanningHandler))
list.add(PacketRegisterInfo(FinishScanningPacket.ID, FinishScanningPacket::decode, FinishScanningHandler))
// Pasture
this.createServerBound(PasturePokemonPacket.ID, PasturePokemonPacket::decode, PasturePokemonHandler)
this.createServerBound(UnpasturePokemonPacket.ID, UnpasturePokemonPacket::decode, UnpasturePokemonHandler)
this.createServerBound(UnpastureAllPokemonPacket.ID, UnpastureAllPokemonPacket::decode, UnpastureAllPokemonHandler)
list.add(PacketRegisterInfo(PasturePokemonPacket.ID, PasturePokemonPacket::decode, PasturePokemonHandler))
list.add(PacketRegisterInfo(UnpasturePokemonPacket.ID, UnpasturePokemonPacket::decode, UnpasturePokemonHandler))
list.add(PacketRegisterInfo(UnpastureAllPokemonPacket.ID, UnpastureAllPokemonPacket::decode, UnpastureAllPokemonHandler))
// Move select packets
this.createServerBound(MoveSelectedPacket.ID, MoveSelectedPacket::decode, MoveSelectedHandler)
this.createServerBound(MoveSelectCancelledPacket.ID, MoveSelectCancelledPacket::decode, MoveSelectCancelledHandler)
list.add(PacketRegisterInfo(MoveSelectedPacket.ID, MoveSelectedPacket::decode, MoveSelectedHandler))
list.add(PacketRegisterInfo(MoveSelectCancelledPacket.ID, MoveSelectCancelledPacket::decode, MoveSelectCancelledHandler))
// Party select packets
this.createServerBound(PartyPokemonSelectedPacket.ID, PartyPokemonSelectedPacket::decode, PartyPokemonSelectedHandler)
this.createServerBound(PartySelectCancelledPacket.ID, PartySelectCancelledPacket::decode, PartySelectCancelledHandler)
list.add(PacketRegisterInfo(PartyPokemonSelectedPacket.ID, PartyPokemonSelectedPacket::decode, PartyPokemonSelectedHandler))
list.add(PacketRegisterInfo(PartySelectCancelledPacket.ID, PartySelectCancelledPacket::decode, PartySelectCancelledHandler))
// Party move select packets
this.createServerBound(PartyPokemonMoveSelectedPacket.ID, PartyPokemonMoveSelectedPacket::decode, PartyPokemonMoveSelectedHandler)
this.createServerBound(PartyMoveSelectCancelledPacket.ID, PartyMoveSelectCancelledPacket::decode, PartyMoveSelectCancelledHandler)
list.add(PacketRegisterInfo(PartyPokemonMoveSelectedPacket.ID, PartyPokemonMoveSelectedPacket::decode, PartyPokemonMoveSelectedHandler))
list.add(PacketRegisterInfo(PartyMoveSelectCancelledPacket.ID, PartyMoveSelectCancelledPacket::decode, PartyMoveSelectCancelledHandler))
// Dialogue packets
this.createServerBound(EscapeDialoguePacket.ID, EscapeDialoguePacket::decode, EscapeDialogueHandler)
this.createServerBound(InputToDialoguePacket.ID, InputToDialoguePacket::decode, InputToDialogueHandler)
list.add(PacketRegisterInfo(EscapeDialoguePacket.ID, EscapeDialoguePacket::decode, EscapeDialogueHandler))
list.add(PacketRegisterInfo(InputToDialoguePacket.ID, InputToDialoguePacket::decode, InputToDialogueHandler))
// NPC packets
list.add(PacketRegisterInfo(SaveNPCPacket.ID, SaveNPCPacket::decode, SaveNPCHandler))
return list
}
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)
fun sendPacketToPlayer(player: ServerPlayer, packet: NetworkPacket<*>) {
//logger.info("[S->C] ${packet.type()}")
Cobblemon.implementation.networkManager.sendPacketToPlayer(player, packet)
}
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)
}
@@ -0,0 +1,29 @@
/*
* 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.cobblemon.mod.common.entity.sensor.BattlingPokemonSensor
import com.cobblemon.mod.common.entity.sensor.NPCBattlingSensor
import java.util.function.Supplier
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.ai.sensing.Sensor
import net.minecraft.world.entity.ai.sensing.SensorType
object CobblemonSensors {
val sensors = mutableMapOf<String, SensorType<*>>()
val NPC_BATTLING = register("npc_battling", ::NPCBattlingSensor)
val BATTLING_POKEMON = register("battling_pokemon", ::BattlingPokemonSensor)
fun <E : Entity, U : Sensor<E>> register(id: String, supplier: Supplier<U>): SensorType<U> {
val sensor = SensorType(supplier)
sensors[id] = sensor
return sensor
}
}
@@ -10,18 +10,18 @@ package com.cobblemon.mod.common
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.BlockSoundGroup
import net.minecraft.sound.SoundEvent
import net.minecraft.sound.SoundEvents
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.sounds.SoundEvent
import net.minecraft.sounds.SoundEvents
import net.minecraft.world.level.block.SoundType
object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Registry<SoundEvent>>, SoundEvent>() {
object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, ResourceKey<Registry<SoundEvent>>, SoundEvent>() {
override val registry: Registry<SoundEvent> = Registries.SOUND_EVENT
override val registryKey: RegistryKey<Registry<SoundEvent>> = RegistryKeys.SOUND_EVENT
override val registry: Registry<SoundEvent> = BuiltInRegistries.SOUND_EVENT
override val resourceKey: ResourceKey<Registry<SoundEvent>> = Registries.SOUND_EVENT
@JvmField
val GUI_CLICK = this.create("gui.click")
@@ -39,6 +39,8 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
@JvmField
val PC_CLICK = this.create("pc.click")
@JvmField
val VILLAGER_WORK_NURSE = this.create("entity.villager.work_nurse")
@JvmField
val HEALING_MACHINE_ACTIVE = this.create("healing_machine.active")
@@ -51,24 +53,51 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
@JvmField
val POKE_BALL_OPEN = this.create("poke_ball.open")
@JvmField
val POKE_BALL_SHINY_OPEN = this.create("poke_ball.shiny_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_SHINY_SEND_OUT = this.create("poke_ball.shiny_send_out")
@JvmField
val POKE_BALL_RECALL = this.create("poke_ball.recall")
@JvmField
val POKE_BALL_THROW = this.create("poke_ball.throw")
@JvmField
val POKE_BALL_TRAIL = this.create("poke_ball.trail")
@JvmField
val POKEDEX_OPEN = this.create("item.pokedex.open")
@JvmField
val POKEDEX_CLOSE = this.create("item.pokedex.close")
@JvmField
val POKEDEX_CLICK = this.create("item.pokedex.click")
@JvmField
val POKEDEX_CLICK_SHORT = this.create("item.pokedex.click_short")
@JvmField
val POKEDEX_SCAN_OPEN = this.create("item.pokedex.scan_open")
@JvmField
val POKEDEX_SCAN_CLOSE = this.create("item.pokedex.scan_close")
@JvmField
val POKEDEX_SCAN_LOOP = this.create("item.pokedex.scan_loop")
@JvmField
val POKEDEX_SCAN_DETAIL = this.create("item.pokedex.scan_detail")
@JvmField
val POKEDEX_SCAN_REGISTER_POKEMON = this.create("item.pokedex.scan_register_pokemon")
@JvmField
val POKEDEX_SCAN_REGISTER_ASPECT = this.create("item.pokedex.scan_register_aspect")
@JvmField
val POKEDEX_SCAN_ZOOM_INCREMENT = this.create("item.pokedex.scan_zoom_increment")
@JvmField
val ITEM_USE = this.create("item.use")
@JvmField
val CAN_EVOLVE = this.create("pokemon.can_evolve")
val EVOLUTION_NOTIFICATION = this.create("evolution.notification")
@JvmField
val EVOLVING = this.create("pokemon.evolving")
val EVOLUTION_UI = this.create("evolution.ui")
@JvmField
val EVOLVE = this.create("evolution.evolve")
val EVOLUTION = this.create("evolution.full")
@JvmField
val PVN_BATTLE = this.create("battle.pvn.default")
@@ -134,6 +163,22 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
@JvmField
val RELIC_COIN_POUCH_PLACE = this.create("relic_coin_pouch.place")
@JvmField
val FISHING_NOTIFICATION = this.create("fishing.notification")
@JvmField
val FISHING_SPLASH_BIG = this.create("fishing.splash_big")
@JvmField
val FISHING_SPLASH_SMALL = this.create("fishing.splash_small")
@JvmField
val FISHING_BOBBER_LAND = this.create("fishing.bobber_land")
@JvmField
val FISHING_ROD_CAST = this.create("fishing.rod_cast")
@JvmField
val FISHING_ROD_REEL_IN = this.create("fishing.rod_reel_in")
@JvmField
val FISHING_BAIT_ATTACH = this.create("fishing.bait_attach")
@JvmField
val FISHING_BAIT_DETACH = this.create("fishing.bait_detach")
@JvmField
val TUMBLESTONE_BREAK = this.create("tumblestone.break")
@JvmField
@@ -145,6 +190,15 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
@JvmField
val TUMBLESTONE_STEP = this.create("tumblestone.step")
@JvmField
val EVOLUTION_STONE_BLOCK_BREAK = this.create("evolution_stone_block.break")
@JvmField
val EVOLUTION_STONE_BLOCK_HIT = this.create("evolution_stone_block.hit")
@JvmField
val EVOLUTION_STONE_BLOCK_PLACE = this.create("evolution_stone_block.place")
@JvmField
val EVOLUTION_STONE_BLOCK_STEP = this.create("evolution_stone_block.step")
@JvmField
val GIMMIGHOUL_GIVE_ITEM_SMALL = this.create("gimmighoul.give_item_small")
@JvmField
@@ -194,7 +248,7 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
val GILDED_CHEST_PLACE = this.create("gilded_chest.place")
@JvmField
val RELIC_COIN_SACK_SOUNDS = BlockSoundGroup(1f, 1f,
val RELIC_COIN_SACK_SOUNDS = SoundType(1f, 1.1f,
RELIC_COIN_SACK_BREAK,
RELIC_COIN_SACK_STEP,
RELIC_COIN_SACK_PLACE,
@@ -202,7 +256,7 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
RELIC_COIN_SACK_STEP
)
@JvmField
val RELIC_COIN_POUCH_SOUNDS = BlockSoundGroup(1f, 1f,
val RELIC_COIN_POUCH_SOUNDS = SoundType(1f, 1.1f,
RELIC_COIN_POUCH_BREAK,
RELIC_COIN_SACK_STEP,
RELIC_COIN_POUCH_PLACE,
@@ -248,7 +302,7 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
val IMPACT_WATER = this.create("impact.water")
@JvmField
val TUMBLESTONE_SOUNDS = BlockSoundGroup(1f, 1f,
val TUMBLESTONE_SOUNDS = SoundType(1f, 1.1f,
TUMBLESTONE_BREAK,
TUMBLESTONE_STEP,
TUMBLESTONE_PLACE,
@@ -257,79 +311,88 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
)
@JvmField
val TUMBLESTONE_BLOCK_SOUNDS = BlockSoundGroup(1f, 1f,
val TUMBLESTONE_BLOCK_SOUNDS = SoundType(1f, 1.1f,
TUMBLESTONE_BLOCK_BREAK,
TUMBLESTONE_STEP,
TUMBLESTONE_PLACE,
TUMBLESTONE_HIT,
TUMBLESTONE_STEP
)
@JvmField
val EVOLUTION_STONE_BLOCK_SOUNDS = SoundType(1f, 1.1f,
EVOLUTION_STONE_BLOCK_BREAK,
EVOLUTION_STONE_BLOCK_STEP,
EVOLUTION_STONE_BLOCK_PLACE,
EVOLUTION_STONE_BLOCK_HIT,
EVOLUTION_STONE_BLOCK_STEP
)
@JvmField
val BERRY_BUSH_SOUNDS = BlockSoundGroup(1f, 1f,
val BERRY_BUSH_SOUNDS = SoundType(0.8f, 1.1f,
BERRY_BUSH_BREAK,
SoundEvents.BLOCK_GRASS_STEP,
SoundEvents.GRASS_STEP,
BERRY_BUSH_PLACE,
SoundEvents.BLOCK_GRASS_HIT,
SoundEvents.BLOCK_GRASS_STEP
SoundEvents.GRASS_HIT,
SoundEvents.GRASS_STEP
)
@JvmField
val BIG_ROOT_SOUNDS = BlockSoundGroup(1f, 1f,
val BIG_ROOT_SOUNDS = SoundType(0.8f, 1.1f,
BIG_ROOT_BREAK,
SoundEvents.BLOCK_ROOTS_STEP,
SoundEvents.BLOCK_ROOTS_PLACE,
SoundEvents.BLOCK_ROOTS_HIT,
SoundEvents.BLOCK_ROOTS_FALL
)
@JvmField
val ENERGY_ROOT_SOUNDS = BlockSoundGroup(1f, 1f,
SoundEvents.BLOCK_ROOTS_BREAK,
SoundEvents.BLOCK_ROOTS_STEP,
SoundEvents.ROOTS_STEP,
ENERGY_ROOT_PLACE,
SoundEvents.BLOCK_ROOTS_HIT,
SoundEvents.BLOCK_ROOTS_FALL
SoundEvents.ROOTS_HIT,
SoundEvents.ROOTS_FALL
)
@JvmField
val MEDICINAL_LEEK_SOUNDS = BlockSoundGroup(1f, 1f,
val ENERGY_ROOT_SOUNDS = SoundType(0.8f, 1.1f,
BIG_ROOT_BREAK,
SoundEvents.ROOTS_STEP,
ENERGY_ROOT_PLACE,
SoundEvents.ROOTS_HIT,
SoundEvents.ROOTS_FALL
)
@JvmField
val MEDICINAL_LEEK_SOUNDS = SoundType(1f, 1.1f,
MEDICINAL_LEEK_BREAK,
SoundEvents.BLOCK_GRASS_STEP,
SoundEvents.GRASS_STEP,
MEDICINAL_LEEK_PLACE,
SoundEvents.BLOCK_GRASS_HIT,
SoundEvents.BLOCK_GRASS_FALL
SoundEvents.GRASS_HIT,
SoundEvents.GRASS_FALL
)
@JvmField
val VIVICHOKE_SOUNDS = BlockSoundGroup(1f, 1f,
val VIVICHOKE_SOUNDS = SoundType(0.6f, 1.1f,
VIVICHOKE_BREAK,
SoundEvents.BLOCK_GRASS_STEP,
SoundEvents.GRASS_STEP,
VIVICHOKE_PLACE,
SoundEvents.BLOCK_GRASS_HIT,
SoundEvents.BLOCK_GRASS_FALL
SoundEvents.GRASS_HIT,
SoundEvents.GRASS_FALL
)
@JvmField
val MINT_SOUNDS = BlockSoundGroup(1f, 1f,
val MINT_SOUNDS = SoundType(0.6f, 1.1f,
MINT_BREAK,
SoundEvents.BLOCK_GRASS_STEP,
SoundEvents.GRASS_STEP,
MINT_PLACE,
SoundEvents.BLOCK_GRASS_HIT,
SoundEvents.BLOCK_GRASS_FALL
SoundEvents.GRASS_HIT,
SoundEvents.GRASS_FALL
)
@JvmField
val REVIVAL_HERB_SOUNDS = BlockSoundGroup(1f, 1f,
val REVIVAL_HERB_SOUNDS = SoundType(0.6f, 1.1f,
REVIVAL_HERB_BREAK,
SoundEvents.BLOCK_GRASS_STEP,
SoundEvents.GRASS_STEP,
REVIVAL_HERB_PLACE,
SoundEvents.BLOCK_GRASS_HIT,
SoundEvents.BLOCK_GRASS_FALL
SoundEvents.GRASS_HIT,
SoundEvents.GRASS_FALL
)
@JvmField
val GILDED_CHEST_SOUNDS = BlockSoundGroup(1f, 1f,
val GILDED_CHEST_SOUNDS = SoundType(1f, 1.1f,
GILDED_CHEST_BREAK,
GILDED_CHEST_STEP,
GILDED_CHEST_PLACE,
@@ -351,7 +414,7 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
val DISPLAY_CASE_STEP = this.create("display_case.step")
@JvmField
val DISPLAY_CASE_SOUNDS = BlockSoundGroup(1f, 1f,
val DISPLAY_CASE_SOUNDS = SoundType(1f, 1f,
DISPLAY_CASE_BREAK,
DISPLAY_CASE_STEP,
DISPLAY_CASE_PLACE,
@@ -359,5 +422,5 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, RegistryKey<Regi
DISPLAY_CASE_STEP
)
private fun create(name: String): SoundEvent = this.create(name, SoundEvent.of(cobblemonResource(name)))
private fun create(name: String): SoundEvent = this.create(name, SoundEvent.createVariableRangeEvent(cobblemonResource(name)))
}
@@ -8,10 +8,17 @@
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
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.util.RandomSource
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.npc.VillagerData
import net.minecraft.world.entity.npc.VillagerProfession
import net.minecraft.world.entity.npc.VillagerTrades
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items
import net.minecraft.world.item.trading.ItemCost
import net.minecraft.world.item.trading.MerchantOffer
import java.util.Optional
/**
* A generator for various trade offers in the mod.
@@ -23,7 +30,7 @@ object CobblemonTradeOffers {
*
* @return The resulting list.
*/
fun tradeOffersForAll(): List<VillagerTradeOffer> = Registries.VILLAGER_PROFESSION.map(this::tradeOffersFor).flatten()
fun tradeOffersForAll(): List<VillagerTradeOffer> = BuiltInRegistries.VILLAGER_PROFESSION.map(this::tradeOffersFor).flatten()
/**
* Creates a list of all Cobblemon trade offers for the given [VillagerProfession].
@@ -32,7 +39,47 @@ object CobblemonTradeOffers {
* @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))))
CobblemonVillagerProfessions.NURSE -> listOf(
// requiredLevel = the level of the villager for the trade to appear for
// Novice = 1, Apprentice = 2, Journeyman = 3, Expert = 4, Master = 5
VillagerTradeOffer(CobblemonVillagerProfessions.NURSE, 1, listOf(
// i = emeraldCost, j = numberOfItems, k = maxUses, l = villagerXp, f = priceMultiplier
VillagerTrades.ItemsForEmeralds(CobblemonItems.ORAN_BERRY, 4, 1, 16, 1),
VillagerTrades.ItemsForEmeralds(CobblemonItems.PERSIM_BERRY, 4, 1, 16, 1),
VillagerTrades.ItemsForEmeralds(CobblemonItems.ENERGY_ROOT, 4, 1, 12, 1),
TradeOffer(ItemCost(CobblemonItems.MEDICINAL_LEEK, 24), ItemStack(Items.EMERALD, 1), 12, 2)
)),
VillagerTradeOffer(CobblemonVillagerProfessions.NURSE, 2, listOf(
TradeOffer(ItemCost(Items.EMERALD, 8), ItemStack(CobblemonItems.MEDICINAL_BREW), 8, 5, Optional.of<ItemCost>(ItemCost(Items.GLASS_BOTTLE))),
VillagerTrades.ItemsForEmeralds(CobblemonItems.BLUE_MINT_LEAF, 2, 1, 8, 5),
VillagerTrades.ItemsForEmeralds(CobblemonItems.CYAN_MINT_LEAF, 2, 1, 8, 5),
VillagerTrades.ItemsForEmeralds(CobblemonItems.GREEN_MINT_LEAF, 2, 1, 8, 5),
VillagerTrades.ItemsForEmeralds(CobblemonItems.PINK_MINT_LEAF, 2, 1, 8, 5),
VillagerTrades.ItemsForEmeralds(CobblemonItems.RED_MINT_LEAF, 2, 1, 8, 5),
VillagerTrades.ItemsForEmeralds(CobblemonItems.WHITE_MINT_LEAF, 2, 1, 8, 5)
)),
VillagerTradeOffer(CobblemonVillagerProfessions.NURSE, 3, listOf(
TradeOffer(ItemCost(CobblemonItems.MULCH_BASE, 4), ItemStack(Items.EMERALD, 2), 16, 20),
VillagerTrades.ItemsForEmeralds(Items.GLASS_BOTTLE, 1, 1, 16, 10)
)),
VillagerTradeOffer(CobblemonVillagerProfessions.NURSE, 4, listOf(
VillagerTrades.ItemsForEmeralds(CobblemonItems.REVIVAL_HERB, 8, 1, 16, 15),
VillagerTrades.ItemsForEmeralds(CobblemonItems.VIVICHOKE_SEEDS, 24, 1, 4, 15)
)),
VillagerTradeOffer(CobblemonVillagerProfessions.NURSE, 5, listOf(
TradeOffer(ItemCost(Items.EMERALD, 10), ItemStack(CobblemonItems.ANTIDOTE, 1), 12, 30, Optional.of<ItemCost>(ItemCost(Items.GLASS_BOTTLE))),
TradeOffer(ItemCost(Items.EMERALD, 10), ItemStack(CobblemonItems.AWAKENING, 1), 12, 30, Optional.of<ItemCost>(ItemCost(Items.GLASS_BOTTLE))),
TradeOffer(ItemCost(Items.EMERALD, 10), ItemStack(CobblemonItems.BURN_HEAL, 1), 12, 30, Optional.of<ItemCost>(ItemCost(Items.GLASS_BOTTLE))),
TradeOffer(ItemCost(Items.EMERALD, 10), ItemStack(CobblemonItems.ICE_HEAL, 1), 12, 30, Optional.of<ItemCost>(ItemCost(Items.GLASS_BOTTLE))),
TradeOffer(ItemCost(Items.EMERALD, 10), ItemStack(CobblemonItems.PARALYZE_HEAL, 1), 12, 30, Optional.of<ItemCost>(ItemCost(Items.GLASS_BOTTLE))),
TradeOffer(ItemCost(Items.EMERALD, 22), ItemStack(CobblemonItems.VIVICHOKE_DIP, 1), 4, 30, Optional.of<ItemCost>(ItemCost(Items.BOWL)))
))
)
VillagerProfession.FISHERMAN -> listOf(
VillagerTradeOffer(VillagerProfession.FISHERMAN, 5, listOf(
VillagerTrades.ItemsForEmeralds(CobblemonItems.POKEROD_SMITHING_TEMPLATE, 12, 3, 30)
))
)
else -> emptyList()
}
@@ -42,21 +89,21 @@ object CobblemonTradeOffers {
* @return The resulting list.
*/
fun resolveWanderingTradeOffers(): List<WandererTradeOffer> = listOf(
WandererTradeOffer(false, listOf(TradeOffers.SellItemFactory(CobblemonItems.VIVICHOKE_SEEDS, 24, 1, 1, 6)))
WandererTradeOffer(false, listOf(VillagerTrades.ItemsForEmeralds(CobblemonItems.VIVICHOKE_SEEDS, 24, 1, 1, 6)))
)
/**
* Represents a trade offer that can be attached to a villager or a wandering trader.
* Represents trade offers 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>
val tradeOffers: List<VillagerTrades.ItemListing>
}
/**
* Represents a trade offer from a villager.
* Represents trade offers from a villager.
*
* @property profession The target profession for this trade.
* @property requiredLevel The level required must be a possible level.
@@ -67,26 +114,46 @@ object CobblemonTradeOffers {
data class VillagerTradeOffer(
val profession: VillagerProfession,
val requiredLevel: Int,
override val tradeOffers: List<TradeOffers.Factory>
) : TradeOfferHolder {
override val tradeOffers: List<VillagerTrades.ItemListing>
): 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}")
if (this.requiredLevel < VillagerData.MIN_VILLAGER_LEVEL || this.requiredLevel > VillagerData.MAX_VILLAGER_LEVEL) {
throw IllegalArgumentException("${this.requiredLevel} is not a valid level for a villager trade accepted range is ${VillagerData.MIN_VILLAGER_LEVEL}-${VillagerData.MAX_VILLAGER_LEVEL}")
}
}
}
/**
* Represents a trade offer from a wandering trader.
* Represents trade offers 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
override val tradeOffers: List<VillagerTrades.ItemListing>
): TradeOfferHolder
/**
* Represents a trade offer from a villager.
*
* @property offeredItem The item cost offered to the villager.
* @property receivedItem The item received from the villager.
* @property maxUses How many times the trade can be used before the villager resupplies.
* @property villagerXp The experience the villager gains from the trade.
* @property optionalOfferedItem The optional, secondary item cost offered to the villager.
* @property priceMultiplier The amount multiplier of how much the item cost can rise and fall by depending on discounts and penalties
*/
class TradeOffer(
private val offeredItem: ItemCost,
private val receivedItem: ItemStack,
private val maxUses: Int,
private val villagerXp: Int = 1,
private val optionalOfferedItem: Optional<ItemCost> = Optional.empty(),
private val priceMultiplier: Float = 0.05F
): VillagerTrades.ItemListing {
override fun getOffer(entity: Entity?, randomSource: RandomSource?): MerchantOffer = MerchantOffer(offeredItem, optionalOfferedItem, receivedItem, maxUses, villagerXp, priceMultiplier)
}
}
@@ -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
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.cobblemon.mod.common.util.cobblemonResource
import com.google.common.collect.ImmutableSet
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.world.entity.ai.village.poi.PoiType
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
object CobblemonVillagerPoiTypes: PlatformRegistry<Registry<PoiType>, ResourceKey<Registry<PoiType>>, PoiType>() {
override val registry: Registry<PoiType> = BuiltInRegistries.POINT_OF_INTEREST_TYPE
override val resourceKey: ResourceKey<Registry<PoiType>> = Registries.POINT_OF_INTEREST_TYPE
@JvmField
val NURSE_KEY: ResourceKey<PoiType> = createKey("nurse")
@JvmField
val NURSE = create(NURSE_KEY.location().path, PoiType(getBlockStates(CobblemonBlocks.HEALING_MACHINE), 1, 1))
private fun createKey(string: String): ResourceKey<PoiType> = ResourceKey.create(Registries.POINT_OF_INTEREST_TYPE, cobblemonResource(string))
private fun getBlockStates(block: Block): Set<BlockState> = ImmutableSet.copyOf(block.stateDefinition.possibleStates)
}
@@ -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
import com.cobblemon.mod.common.platform.PlatformRegistry
import com.google.common.collect.ImmutableSet
import net.minecraft.core.Holder
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.sounds.SoundEvent
import net.minecraft.world.entity.ai.village.poi.PoiType
import net.minecraft.world.entity.npc.VillagerProfession
object CobblemonVillagerProfessions: PlatformRegistry<Registry<VillagerProfession>, ResourceKey<Registry<VillagerProfession>>, VillagerProfession>() {
override val registry: Registry<VillagerProfession> = BuiltInRegistries.VILLAGER_PROFESSION
override val resourceKey: ResourceKey<Registry<VillagerProfession>> = Registries.VILLAGER_PROFESSION
@JvmField
val NURSE = profession(CobblemonVillagerPoiTypes.NURSE_KEY, CobblemonSounds.VILLAGER_WORK_NURSE)
/**
* Register a villager profession texture override for Cobblemon villagers of the given [VillagerProfession] for specified names.
*
* @param profession The Cobblemon [VillagerProfession] being overridden.
* @return The profession override texture file name and a list of names that will trigger the override, as a pair.
*/
fun getNameTagOverride(profession: VillagerProfession?): Pair<String, Array<String>>? = when (profession) {
NURSE -> Pair("nurse_joy", arrayOf("ジョーイ", "간호순", "祖兒", "喬伊", "乔伊", "האחות ג'וי", "الممرضة جوي", "Joy", "Joelle", "Joëlle", "Джой", "จอย"))
else -> null
}
private fun profession(resourceKey: ResourceKey<PoiType>, soundEvent: SoundEvent?): VillagerProfession =
create(resourceKey.location().path, VillagerProfession(
resourceKey.location().toString(),
{ holder: Holder<PoiType> -> holder.`is`(resourceKey) },
{ holder: Holder<PoiType> -> holder.`is`(resourceKey) },
ImmutableSet.of(), ImmutableSet.of(), soundEvent
))
}
@@ -8,10 +8,13 @@
package com.cobblemon.mod.common.advancement
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.Criterion
import com.cobblemon.mod.common.platform.PlatformRegistry
import net.minecraft.advancements.CriterionTrigger
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
/**
* Contains all the advancement criteria in Cobblemon.
@@ -19,108 +22,40 @@ import net.minecraft.advancement.criterion.Criterion
* @author Licious
* @since October 26th, 2022
*/
object CobblemonCriteria {
val PICK_STARTER = this.create(
SimpleCriterionTrigger(
cobblemonResource("pick_starter"),
PickStarterCriterionCondition::class.java
)
)
val CATCH_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("catch_pokemon"),
CaughtPokemonCriterionCondition::class.java
)
)
val CATCH_SHINY_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("catch_shiny_pokemon"),
SimpleCountableCriterionCondition::class.java
)
)
val EGG_HATCH = this.create(
SimpleCriterionTrigger(
cobblemonResource("eggs_hatched"),
SimpleCountableCriterionCondition::class.java
)
)
val EVOLVE_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("pokemon_evolved"),
EvolvePokemonCriterionCondition::class.java
)
)
val WIN_BATTLE = this.create(
BattleCountableCriterionTrigger(
cobblemonResource("battles_won"),
BattleCountableCriterionCondition::class.java
)
)
object CobblemonCriteria : PlatformRegistry<Registry<CriterionTrigger<*>>, ResourceKey<Registry<CriterionTrigger<*>>>, CriterionTrigger<*>>(){
val PICK_STARTER = this.create("pick_starter", SimpleCriterionTrigger(PokemonCriterion.CODEC))
val DEFEAT_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("pokemon_defeated"),
SimpleCountableCriterionCondition::class.java
)
)
val CATCH_POKEMON = this.create("catch_pokemon", SimpleCriterionTrigger(CaughtPokemonCriterion.CODEC))
val COLLECT_ASPECT = this.create(
AspectCriterionTrigger(
cobblemonResource("aspects_collected"),
AspectCriterionCondition::class.java
)
)
val CATCH_SHINY_POKEMON = this.create("catch_shiny_pokemon", SimpleCriterionTrigger(CountableCriterion.CODEC))
val POKEMON_INTERACT = this.create(
SimpleCriterionTrigger(
cobblemonResource("pokemon_interact"),
PokemonInteractCriterion::class.java
)
)
val EGG_HATCH = this.create("eggs_hatched", SimpleCriterionTrigger(CountableCriterion.CODEC))
val PARTY_CHECK = this.create(
SimpleCriterionTrigger(
cobblemonResource("party"),
PartyCheckCriterion::class.java
)
)
val EVOLVE_POKEMON = this.create("pokemon_evolved", SimpleCriterionTrigger(EvolvePokemonCriterion.CODEC))
val LEVEL_UP = this.create(
SimpleCriterionTrigger(
cobblemonResource("level_up"),
LevelUpCriterionCondition::class.java
)
)
val WIN_BATTLE = this.create("battles_won", SimpleCriterionTrigger(BattleCountableCriterion.CODEC))
val PASTURE_USE = this.create(
SimpleCriterionTrigger(
cobblemonResource("pasture_use"),
PickStarterCriterionCondition::class.java
)
)
val DEFEAT_POKEMON = this.create("pokemon_defeated", SimpleCriterionTrigger(CountableCriterion.CODEC))
val RESURRECT_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("resurrect_pokemon"),
PickStarterCriterionCondition::class.java
)
)
val COLLECT_ASPECT = this.create("aspects_collected", SimpleCriterionTrigger(AspectCriterion.CODEC))
val TRADE_POKEMON = this.create(
SimpleCriterionTrigger(
cobblemonResource("trade_pokemon"),
TradePokemonCriterionCondition::class.java
)
)
val POKEMON_INTERACT = this.create("pokemon_interact", SimpleCriterionTrigger(PokemonInteractCriterion.CODEC))
val PARTY_CHECK = this.create("party", SimpleCriterionTrigger(PartyCheckCriterion.CODEC))
val LEVEL_UP = this.create("level_up", SimpleCriterionTrigger(LevelUpCriterion.CODEC))
val PASTURE_USE = this.create("pasture_use", SimpleCriterionTrigger(PokemonCriterion.CODEC))
val RESURRECT_POKEMON = this.create("resurrect_pokemon", SimpleCriterionTrigger(PokemonCriterion.CODEC))
val TRADE_POKEMON = this.create("trade_pokemon", SimpleCriterionTrigger(TradePokemonCriterion.CODEC))
val CAST_POKE_ROD = this.create("cast_poke_rod", SimpleCriterionTrigger(CastPokeRodCriterionCondition.CODEC))
// Advancement criteria for [grow_tumblestone.json]
val PLANT_TUMBLESTONE = this.create(
SimpleCriterionTrigger(
cobblemonResource("plant_tumblestone"),
PlantTumblestoneCriterionCondition::class.java
)
)
private fun <T : Criterion<*>> create(criteria: T): T = Cobblemon.implementation.registerCriteria(criteria)
val PLANT_TUMBLESTONE = this.create("plant_tumblestone", SimpleCriterionTrigger(PlantTumblestoneCriterion.CODEC))
override val registry = BuiltInRegistries.TRIGGER_TYPES
override val resourceKey = Registries.TRIGGER_TYPE
}
@@ -8,38 +8,60 @@
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
import com.cobblemon.mod.common.util.cobblemonResource
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import java.util.Optional
open class AspectCriterionTrigger(identifier: Identifier, criterionClass: Class<AspectCriterionCondition>) : SimpleCriterionTrigger<MutableMap<Identifier, MutableSet<String>>, AspectCriterionCondition>(identifier, criterionClass) {
class AspectCriterion(
playerCtx: Optional<ContextAwarePredicate>,
val pokemon: ResourceLocation,
val aspects: List<String>
): SimpleCriterionCondition<MutableMap<ResourceLocation, MutableSet<String>>>(playerCtx) {
}
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())
companion object {
val CODEC: Codec<AspectCriterion> = RecordCodecBuilder.create { it.group(
//All three of these codecs used to use Codecs.createStrictOptionalFieldCodec, that no longer exists
ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(AspectCriterion::playerCtx),
ResourceLocation.CODEC.optionalFieldOf("pokemon", cobblemonResource("pikachu")).forGetter(AspectCriterion::pokemon),
Codec.STRING.listOf().optionalFieldOf("aspects", listOf()).forGetter(AspectCriterion::aspects)
) .apply(it, ::AspectCriterion) }
}
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 {
override fun matches(player: ServerPlayer, context: MutableMap<ResourceLocation, MutableSet<String>>): Boolean {
val caughtAspects = context.getOrDefault(pokemon, mutableSetOf())
return this.aspects.all { it in caughtAspects }
}
}
}
//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.of("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: ServerPlayer, context: MutableMap<Identifier, MutableSet<String>>): Boolean {
// val caughtAspects = context.getOrDefault(pokemon, mutableSetOf())
// return this.aspects.all { it in caughtAspects }
// }
//
//}
@@ -10,58 +10,103 @@ 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
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.server.level.ServerPlayer
import java.util.Optional
open class BattleCountableCriterionTrigger(identifier: Identifier, criterionClass: Class<BattleCountableCriterionCondition>) : SimpleCriterionTrigger<BattleCountableContext, BattleCountableCriterionCondition>(identifier, criterionClass) {
open class BattleCountableContext(var battle : PokemonBattle, times : Int) : CountableContext(times)
}
class BattleCountableCriterion(
playerCtx: Optional<ContextAwarePredicate>,
val battleTypes: List<String>,
count: Int
): CountableCriterion<BattleCountableContext>(playerCtx, count) {
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)
}
}
companion object {
val CODEC: Codec<BattleCountableCriterion> = RecordCodecBuilder.create { it.group(
ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(BattleCountableCriterion::playerCtx),
Codec.STRING.listOf().optionalFieldOf("battle_types", listOf("any")).forGetter(BattleCountableCriterion::battleTypes),
Codec.INT.optionalFieldOf( "count", 0).forGetter(BattleCountableCriterion::count)
).apply(it, ::BattleCountableCriterion) }
}
override fun toJson(json: JsonObject) {
super.toJson(json)
json.add("battle_types", battleTypes.toJsonArray())
}
override fun matches(player: ServerPlayerEntity, context: BattleCountableContext): Boolean {
override fun matches(player: ServerPlayer, context: BattleCountableContext): Boolean {
var typeCheck = false
val advancementData = Cobblemon.playerData.get(player).advancementData
val advancementData = Cobblemon.playerDataManager.getGenericData(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
return typeCheck && super.matches(player, context)
}
}
open class BattleCountableContext(times : Int, var battle : PokemonBattle) : CountableContext(times)
//open class BattleCountableCriterionTrigger(identifier: Identifier, criterionClass: Class<BattleCountableCriterion>) : SimpleCriterionTrigger<BattleCountableContext, BattleCountableCriterion>(identifier, criterionClass) {
//
//}
//
//class BattleCountableCriterion(id: Identifier, predicate: LootContextPredicate) : CountableCriterion<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: ServerPlayer, 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
// }
//}
@@ -0,0 +1,33 @@
/*
* 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.mojang.serialization.Codec
import com.mojang.serialization.codecs.PrimitiveCodec
import com.mojang.serialization.codecs.RecordCodecBuilder
import java.util.Optional
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.server.level.ServerPlayer
class CastPokeRodCriterionCondition(
playerCtx: Optional<ContextAwarePredicate>,
val hasBait: Boolean
): SimpleCriterionCondition<Boolean>(playerCtx) {
companion object {
val CODEC: Codec<CastPokeRodCriterionCondition> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(CastPokeRodCriterionCondition::playerCtx),
PrimitiveCodec.BOOL.fieldOf("hasBait").forGetter(CastPokeRodCriterionCondition::hasBait)
).apply(it, ::CastPokeRodCriterionCondition) }
}
override fun matches(player: ServerPlayer, context: Boolean): Boolean {
return hasBait == context
}
}
@@ -8,10 +8,12 @@
package com.cobblemon.mod.common.advancement.criterion
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.server.level.ServerPlayer
import java.util.Optional
/**
* A context that is used when you require a [CountableContext] along with some type string.
@@ -21,19 +23,38 @@ import net.minecraft.util.Identifier
*/
open class CountablePokemonTypeContext(times: Int, var type: String) : CountableContext(times)
class CaughtPokemonCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<CountablePokemonTypeContext>(id, predicate) {
var type = "any"
override fun toJson(json: JsonObject) {
super.toJson(json)
json.addProperty("type", type)
class CaughtPokemonCriterion(
playerCtx: Optional<ContextAwarePredicate>,
val type: String,
count: Int
): CountableCriterion<CountablePokemonTypeContext>(playerCtx, count) {
companion object {
val CODEC: Codec<CaughtPokemonCriterion> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(CaughtPokemonCriterion::playerCtx),
Codec.STRING.optionalFieldOf("type", "any").forGetter(CaughtPokemonCriterion::type),
Codec.INT.optionalFieldOf("count", 0).forGetter(CaughtPokemonCriterion::count)
).apply(it, ::CaughtPokemonCriterion) }
}
override fun fromJson(json: JsonObject) {
super.fromJson(json)
type = json.get("type")?.asString ?: "any"
}
override fun matches(player: ServerPlayerEntity, context: CountablePokemonTypeContext): Boolean {
override fun matches(player: ServerPlayer, context: CountablePokemonTypeContext): Boolean {
return super.matches(player, context) && (context.type == type || type == "any")
}
}
}
//class CaughtPokemonCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<CountablePokemonTypeContext>(id, predicate) {
// var type = "any"
// override fun toJson(json: JsonObject) {
// super.toJson(json)
// json.addProperty("type", type)
// }
//
// override fun fromJson(json: JsonObject) {
// super.fromJson(json)
// type = json.get("type")?.asString ?: "any"
// }
//
// override fun matches(player: ServerPlayer, context: CountablePokemonTypeContext): Boolean {
// return super.matches(player, context) && (context.type == type || type == "any")
// }
//}
@@ -8,48 +8,68 @@
package com.cobblemon.mod.common.advancement.criterion
import com.google.gson.JsonObject
import net.minecraft.predicate.entity.LootContextPredicate
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.server.level.ServerPlayer
import java.util.Optional
/**
* A type of advancement criterion condition that requires some number of completions. This can be extended to add
* more conditions than just the count.
*
* @author Hiroku
* @since November 4th, 2022
*/
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
open class CountableContext(var times: Int)
open class CountableCriterion<T : CountableContext>(
playerCtx: Optional<ContextAwarePredicate>,
val count: Int
): SimpleCriterionCondition<T>(playerCtx) {
companion object {
val CODEC: Codec<CountableCriterion<CountableContext>> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(CountableCriterion<CountableContext>::playerCtx),
Codec.INT.optionalFieldOf("count", 0).forGetter(CountableCriterion<CountableContext>::count)
).apply(it, ::CountableCriterion) }
}
override fun toJson(json: JsonObject) {
json.addProperty("count", count)
}
override fun matches(player: ServerPlayer, context: T) = context.times >= count
override fun matches(player: ServerPlayerEntity, context: T) = context.times >= count
}
/**
* A concrete subclass of [CountableCriterionCondition] so that you can have advancements that really just need the
* count and nothing else.
*
* This is just a quirk of using generics like this, don't worry about it. The criterion conditions that get used must
* not be generic typed.
*
* @author Hiroku
* @since November 4th, 2022
*/
class SimpleCountableCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<CountableContext>(id, predicate)
fun SimpleCriterionTrigger<CountableContext, SimpleCountableCriterionCondition>.trigger(player: ServerPlayerEntity, times: Int) = trigger(player, CountableContext(times))
/**
* Some type of context that has a count associated with it, representing how many times the trigger has occurred.
*
* @author Hiroku
* @since November 4th, 2022
*/
open class CountableContext(var times: Int)
///**
// * A type of advancement criterion condition that requires some number of completions. This can be extended to add
// * more conditions than just the count.
// *
// * @author Hiroku
// * @since November 4th, 2022
// */
//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
// }
//
// override fun toJson(json: JsonObject) {
// json.addProperty("count", count)
// }
//
// override fun matches(player: ServerPlayer, context: T) = context.times >= count
//}
//
///**
// * A concrete subclass of [CountableCriterionCondition] so that you can have advancements that really just need the
// * count and nothing else.
// *
// * This is just a quirk of using generics like this, don't worry about it. The criterion conditions that get used must
// * not be generic typed.
// *
// * @author Hiroku
// * @since November 4th, 2022
// */
//class SimpleCountableCriterionCondition(id: Identifier, predicate: LootContextPredicate) : CountableCriterionCondition<CountableContext>(id, predicate)
//fun SimpleCriterionTrigger<CountableContext, SimpleCountableCriterionCondition>.trigger(player: ServerPlayer, times: Int) = trigger(player, CountableContext(times))
//
///**
// * Some type of context that has a count associated with it, representing how many times the trigger has occurred.
// *
// * @author Hiroku
// * @since November 4th, 2022
// */
//open class CountableContext(var times: Int)
@@ -0,0 +1,64 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.advancement.criterion
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.server.level.ServerPlayer
import net.minecraft.resources.ResourceLocation
import java.util.Optional
class EvolvePokemonContext(val species : ResourceLocation, val evolution : ResourceLocation, times: Int) : CountableContext(times)
class EvolvePokemonCriterion(
playerCtx: Optional<ContextAwarePredicate>,
val species: String,
val evolution: String,
count: Int
): CountableCriterion<EvolvePokemonContext>(playerCtx, count) {
companion object {
val CODEC: Codec<EvolvePokemonCriterion> = RecordCodecBuilder.create { it.group(
ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(EvolvePokemonCriterion::playerCtx),
Codec.STRING.optionalFieldOf("species", "any").forGetter(EvolvePokemonCriterion::species),
Codec.STRING.optionalFieldOf("evolution", "any").forGetter(EvolvePokemonCriterion::evolution),
Codec.INT.optionalFieldOf("count", 0).forGetter(EvolvePokemonCriterion::count)
).apply(it, ::EvolvePokemonCriterion) }
}
override fun matches(player: ServerPlayer, context: EvolvePokemonContext): Boolean {
return context.times >= count && (context.species == species.asIdentifierDefaultingNamespace() || species == "any") &&
(context.evolution == evolution.asIdentifierDefaultingNamespace() || evolution == "any")
}
}
//class EvolvePokemonCriterion(id: Identifier, entity: LootContextPredicate) : CountableCriterion<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: ServerPlayer, 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)
@@ -1,38 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.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)
@@ -9,12 +9,42 @@
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
import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.advancements.critereon.ContextAwarePredicate
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.server.level.ServerPlayer
import java.util.Optional
class LevelUpCriterionCondition(id: Identifier, entity: LootContextPredicate) : SimpleCriterionCondition<LevelUpContext>(id, entity) {
class LevelUpContext(val level: Int, val pokemon: Pokemon)
class LevelUpCriterion(
playerCtx: Optional<ContextAwarePredicate>,
val level: Int,
val evolved: Boolean
): SimpleCriterionCondition<LevelUpContext>(playerCtx) {
companion object {
val CODEC: Codec<LevelUpCriterion> = RecordCodecBuilder.create { it.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(LevelUpCriterion::playerCtx),
Codec.INT.optionalFieldOf("level", 0).forGetter(LevelUpCriterion::level),
Codec.BOOL.optionalFieldOf("evolved", true).forGetter(LevelUpCriterion::evolved)
).apply(it, ::LevelUpCriterion) }
}
override fun matches(player: ServerPlayer, 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
}
}
/*class LevelUpCriterionCondition(id: Identifier, entity: LootContextPredicate) : SimpleCriterionCondition<LevelUpContext>(id, entity) {
var level = 0
var evolved = true
override fun toJson(json: JsonObject) {
@@ -27,7 +57,7 @@ class LevelUpCriterionCondition(id: Identifier, entity: LootContextPredicate) :
evolved = json.get("has_evolved")?.asBoolean ?: true
}
override fun matches(player: ServerPlayerEntity, context: LevelUpContext): Boolean {
override fun matches(player: ServerPlayer, context: LevelUpContext): Boolean {
val preEvo = context.pokemon.preEvolution == null
val hasEvolution = !context.pokemon.evolutions.none()
var evolutionCheck = true
@@ -36,6 +66,4 @@ class LevelUpCriterionCondition(id: Identifier, entity: LootContextPredicate) :
}
return level == context.level && evolutionCheck == evolved
}
}
open class LevelUpContext(var level : Int, var pokemon : Pokemon)
}*/

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