forked from mirrors/cobblemon
Compare commits
120
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e696c7b37e | ||
|
|
b543692180 | ||
|
|
98fab80fb4 | ||
|
|
efc1fd719c | ||
|
|
9fb20e8850 | ||
|
|
ef17a6d496 | ||
|
|
bcb444577b | ||
|
|
190fccce8f | ||
|
|
127310ce5b | ||
|
|
72152aa2dd | ||
|
|
f9810a0f00 | ||
|
|
15385b9276 | ||
|
|
dae2b18353 | ||
|
|
ca5bda092f | ||
|
|
31291713d0 | ||
|
|
16bbbf6e18 | ||
|
|
c4ad1dde27 | ||
|
|
2c401d26d9 | ||
|
|
d4714721eb | ||
|
|
2fb22029ff | ||
|
|
a96411c50b | ||
|
|
191005b29a | ||
|
|
d68759e4a3 | ||
|
|
25bf01ca20 | ||
|
|
4b8426d78c | ||
|
|
26c62acb6c | ||
|
|
70522f3f3f | ||
|
|
8423df7ef9 | ||
|
|
d8f83697c8 | ||
|
|
2b81da943e | ||
|
|
a8e7a01e48 | ||
|
|
aa2a3d69fb | ||
|
|
880f919f9f | ||
|
|
d1557b23b4 | ||
|
|
e3fab0f69c | ||
|
|
0f24cf8480 | ||
|
|
3ebba3dfe5 | ||
|
|
b339b552c6 | ||
|
|
3a5095887d | ||
|
|
6b9821e170 | ||
|
|
e24a0e637a | ||
|
|
924450d4c8 | ||
|
|
a4aabbb28f | ||
|
|
e5029bf074 | ||
|
|
8135c3baef | ||
|
|
72ce0a843d | ||
|
|
2fef675958 | ||
|
|
6b3722f9b9 | ||
|
|
6384fc9fcb | ||
|
|
a8b2e2b72d | ||
|
|
431ab62ebb | ||
|
|
af50547477 | ||
|
|
de5ab3d2dc | ||
|
|
a803bb9be8 | ||
|
|
b19074d130 | ||
|
|
3c048b7eb0 | ||
|
|
185b06082c | ||
|
|
b9bbbc3c4d | ||
|
|
f76886bab8 | ||
|
|
f163cf0722 | ||
|
|
f1966208a8 | ||
|
|
52f4541836 | ||
|
|
4c7adb01b7 | ||
|
|
f40fbf31bb | ||
|
|
cd1f052837 | ||
|
|
fd323b5e61 | ||
|
|
69f4a52621 | ||
|
|
dff9612db4 | ||
|
|
16049e5476 | ||
|
|
4331375832 | ||
|
|
e1b86ab910 | ||
|
|
161165d8da | ||
|
|
cf5693de8a | ||
|
|
9a1afe9342 | ||
|
|
b3e77f9eb1 | ||
|
|
df06413ffb | ||
|
|
9aa67d836b | ||
|
|
24bbb57ca4 | ||
|
|
c976c9f85b | ||
|
|
16b94b19dc | ||
|
|
5d2473066d | ||
|
|
a835a8d314 | ||
|
|
0bc351a533 | ||
|
|
7ad5e88402 | ||
|
|
5a610932a2 | ||
|
|
0bafe7e682 | ||
|
|
1260420bfb | ||
|
|
185e8ec9b2 | ||
|
|
f782c0f6ed | ||
|
|
aec0717e75 | ||
|
|
55276f5e96 | ||
|
|
3e81be4c75 | ||
|
|
37c393d314 | ||
|
|
a0ee80b3b6 | ||
|
|
3809da42b2 | ||
|
|
a18e96c10d | ||
|
|
adf159fd8e | ||
|
|
53dfdfd0c2 | ||
|
|
b956016c2d | ||
|
|
119d11e03c | ||
|
|
55c8380777 | ||
|
|
90c7b88007 | ||
|
|
033137029d | ||
|
|
fa2246843f | ||
|
|
2dfa3dcdc1 | ||
|
|
8812c775cf | ||
|
|
f6c003e90f | ||
|
|
9c39cb3ebc | ||
|
|
36f5c4597e | ||
|
|
f0aa728174 | ||
|
|
4f34b6b556 | ||
|
|
d639f78571 | ||
|
|
6adc3991db | ||
|
|
2f7889df97 | ||
|
|
d8a667c424 | ||
|
|
9fda6a53c5 | ||
|
|
c80ce11314 | ||
|
|
ef58eb86da | ||
|
|
02129fe2a1 | ||
|
|
3f2d8cec09 |
+487
@@ -2,6 +2,493 @@
|
||||
## [1.7.1 (MONTH xth, 2025)](#1-7-1)
|
||||
|
||||
### Additions
|
||||
- Added `/npcdelete` uuid parameter support and usuable to console
|
||||
- Added `/spectateBattle <player>` command to spectate battles without having to manually walk up to the target.
|
||||
- Added an in-game configuration screen, allowing all settings from `main.json` to be edited directly in-game.
|
||||
- Added `/cobblemonconfig reload` command to reload `main.json` configuration. **Note:** Some settings require a server restart to take effect; use this command cautiously.
|
||||
- Added `blacklisted_items_to_hold` and `whitelisted_items_to_hold` tags to allow for controlling which items players can give to their Pokémon. If the whitelist is empty, it will consider all item as allowed (unless they are in the blacklist).
|
||||
- Pokémon now follow the mouse cursor on the Summary screen, with an option to disable this in the settings.
|
||||
- Added Datapackable Item interactions with Pokemon
|
||||
- Pokémon's held items can now be rendered, with a visibility toggle in the Summary screen.
|
||||
- Added cosmetic item functionality for Pokémon. Certain cosmetic items can be given to applicable Pokémon via the interact menu.
|
||||
- Added the various log blocks as cosmetic items for Timburr and Komala.
|
||||
- Added cosmetics for Spoink, Gurdurr, Conkeldurr, Squirtle Line, Sneasler, Sandile line, Treecko line, Braixen, Delphox, and Dragonite.
|
||||
- Added Gilded Chest cosmetics for Chest Gimmighoul and Gholdengo
|
||||
- Added `visibility/hidden`, `visibility/hat` and `visibility/face` tags to control where and how certain items are rendered.
|
||||
- Added Pokémon markings, toggleable within the summary.
|
||||
- Added `/boxcount` command to change PC boxes amount
|
||||
- Added `/transformmodelpart (position|rotation|scale) <modelPart> <transform: x y z>` command that can add transformations to a pokemon's model part.
|
||||
- The player executing the command must be facing the target pokemon entity. Transformations are not persistent and will revert when resources are reloaded.
|
||||
- Added `legacy` and `special` sourced moves to Pokémon.
|
||||
- Added lang keys for all moves and abilities up to Generation 9.
|
||||
- Added `translucent_cull` boolean option into resolver's layer to allow for translucent textures with culling
|
||||
- Added [LambDynamicLights](https://modrinth.com/mod/lambdynamiclights) support for items held by Pokémon, evolution stone blocks, evolution stone items, Pokédex, Luminous Moss, Flame Orb, and Magmarizer.
|
||||
- Added the Clear Amulet, Grip Claw, Lagging Tail, Luminous Moss, Metal Alloy, Scroll of Darkness, Scroll of Waters
|
||||
- Added Recipes for Masterpiece Cup, Eject Pack.
|
||||
- Added modification to Minecraft Creative Inventory search to account for item names that contain `poké` when input contains `poke`.
|
||||
- Added Campfire Pot as well as loads of new food items (Poke Puffs, Ponigiri, Sinister Tea, etc)
|
||||
- Added Hearty Grains, a new crop used in the new cooking mechanic
|
||||
- Added Tatami blocks and Tatami Mat blocks, made from Hearty Grain, for decorating builds
|
||||
- Added `/pcsearch <player> <pokemonProperties>` command that searches for a specific Pokémon within a player's PC.
|
||||
- Added `/pctake <player> <box> <slot>` command that takes a specific Pokémon from a player's PC. Removes the pokemon if target is self or ran from the server.
|
||||
- Added Hyper Training items (IV Modification) as well as some additional candy items to do so (Health Candy, Sickly Candy)
|
||||
- Added Galarica Nut Bushes
|
||||
- Many Pokémon (mostly cats) are now feared by phantoms
|
||||
- Combees are now capable of gathering nectar from flowers and delivering it to either Saccharine leaves or hives. (Hive interactions are restricted to wild Combees)
|
||||
- Lightning is now affected by a Pokemon's ability/typing
|
||||
- Pokémon with the ability Lightning Rod draw in lightning similar to a lightning rod block albeit with a lower priority and range, gain immunity to lightning damage, and receive a temporary damage buff.
|
||||
- Pokémon with the ability Motor Drive are immune to lightning damage and receive a temporary speed buff when struck by lightning
|
||||
- Pokémon with the ability Volt Absorb are immune to lightning damage and receive Regeneration II for a short duration
|
||||
- Ground type Pokémon are immune to lightning damage
|
||||
- Added functionality to Everstone when held by a Pokémon; suppresses evolution notification and hides evolve button in summary interface.
|
||||
- Added optional `filePath` parameter to MoLang functions to allow for global stores (ex. `../global/`). Path must end in a forward slash.
|
||||
- Added new optional property `attachment_options` for most EmitterShapes to be attached to the locator/entities scale, rotation, and/or position. Position is true by default.
|
||||
- Galarica Nut bushes now generate on beaches
|
||||
- Added a lot of new blocks
|
||||
- Floor Placeable: Damp Rock, Heat Rock, Icy Rock, Smooth Rock, Sachet, Bright Powder, Metal Powder, Quick Powder, Luminous Moss, Chipped Pot, Cracked Pot, Masterpiece Teacup, Unremarkable Teacup, Destiny Knot, Iron Ball, Hard Stone, Galarica Cuff, Kings Rock, Never-Melt Ice
|
||||
- Floor Stackable: Upgrade, Dubious Disc, Metal Coat, Potion, Super Potion, Hyper Potion, Max Potion, Full Restore, Antidote, Awakening, Burn Heal, Ice Heal, Paralyze Heal, Full Heal, Ether, Elixir, Max Ether, Max Elixir, X Accuracy, X Attack, X Defence, X Special Attack, X Special Defence, X Speed, Dire Hit, Guard Spec, HP Up, Protein, Iron, Carbos, Calcium, Zinc, PP Up, PP Max
|
||||
- Floor Interactive: Metronome
|
||||
- Wall Placeable: Weakness Policy, Blunder Policy
|
||||
- Wall Stackable: Cleanse Tag, Spell Tag
|
||||
- Wall Interactive: Ring Target
|
||||
- Six Face (Rotation): Galarica Wreath, Magnet, Flame Orb, Toxic Orb, Life Orb, Smoke Ball, Light Ball, White Plaque, Light Gray Plaque, Gray Plaque, Black Plaque, Brown Plaque, Red Plaque, Orange Plaque, Yellow Plaque, Lime Plaque, Green Plaque, Cyan Plaque, Light Blue Plaque, Blue Plaque, Purple Plaque, Magenta Plaque, Pink Plaque
|
||||
- Six Face (Rotation) Interactive: Eject Button
|
||||
- Six Directional Block: Peat Block
|
||||
- Added recipe to Smoke Ball and Light Ball
|
||||
- Galarica Nut bushes now generate on beaches.
|
||||
- Some Pokémon now pitch their bodies in the direction they're moving.
|
||||
- Added new advancements Didn't Stop To Think, We Need To Cook, and Pokémon Jockey!.
|
||||
- Berries can now be smelted into their respective dyes.
|
||||
- Added Syrupy Apples.
|
||||
- Added `/runmolang <molang> [<npc>|<player>|<pokemon>]` command that executes a MoLang expression with the provided options as environment variables, as well as the entity (as `q.entity`) that executed the command.
|
||||
- Added bubble quirk to Kingler; like Krabby, Kingler will blows bubbles during dusk.
|
||||
- Added `.Pre` and `.Post` to the following events:
|
||||
- `PokemonRecallEvent`
|
||||
- `TradeEvent`
|
||||
- Added a new gamerule, 'healerHealsPC', when set to true a successful use of a healer will also heal all of the Pokemon in that player's PC.
|
||||
|
||||
### Pokémon Added
|
||||
|
||||
#### Gen 2
|
||||
- Marill
|
||||
- Azumarill
|
||||
- Hoppip
|
||||
- Skiploom
|
||||
- Jumpluff
|
||||
- Dunsparce
|
||||
- Togepi
|
||||
- Togetic
|
||||
- Unown
|
||||
- Houndour
|
||||
- Houndoom
|
||||
- Ho-Oh
|
||||
- Lugia
|
||||
- Alola Bias Pichu (built-in resourcepack)
|
||||
|
||||
#### Gen 3
|
||||
- Azurill
|
||||
- Meditite
|
||||
- Medicham
|
||||
- Electrike
|
||||
- Manectric
|
||||
- Spoink
|
||||
- Grumpig
|
||||
- Swablu
|
||||
- Altaria
|
||||
- Snorunt
|
||||
- Glalie
|
||||
- Latias
|
||||
- Latios
|
||||
|
||||
#### Gen 4
|
||||
- Bronzor
|
||||
- Bronzong
|
||||
- Croagunk
|
||||
- Toxicroak
|
||||
- Froslass
|
||||
- Glameow
|
||||
- Purugly
|
||||
- Skorupi
|
||||
- Drapion
|
||||
- Togekiss
|
||||
|
||||
#### Gen 5
|
||||
- Pansage
|
||||
- Simisage
|
||||
- Pansear
|
||||
- Simisear
|
||||
- Panpour
|
||||
- Simipour
|
||||
- Munna
|
||||
- Musharna
|
||||
- Blitzle
|
||||
- Zebstrika
|
||||
- Drilbur
|
||||
- Excadrill
|
||||
- Trubbish
|
||||
- Garbodor
|
||||
- Gothita
|
||||
- Gothorita
|
||||
- Gothitelle
|
||||
- Solosis
|
||||
- Duosion
|
||||
- Reuniclus
|
||||
- Tynamo
|
||||
- Eelektrik
|
||||
- Eelektross
|
||||
- Axew
|
||||
- Fraxure
|
||||
- Haxorus
|
||||
- Mienfoo
|
||||
- Mienshao
|
||||
- Sewaddle
|
||||
- Swadloon
|
||||
- Leavanny
|
||||
- Druddigon
|
||||
|
||||
#### Gen 6
|
||||
- Skiddo
|
||||
- Gogoat
|
||||
- Espurr
|
||||
- Meowstic
|
||||
- Inkay
|
||||
- Malamar
|
||||
- Hawlucha
|
||||
- Dedenne
|
||||
- Noibat
|
||||
- Noivern
|
||||
- Furfrou
|
||||
- You can change Furfrou's form by using shears on it while it holds a certain dye in its cosmetic slot.
|
||||
|
||||
#### Gen 7
|
||||
- Yungoos
|
||||
- Gumshoos
|
||||
- Drampa
|
||||
- Alolan Grimer
|
||||
- Alolan Muk
|
||||
- Togedemaru
|
||||
|
||||
#### Gen 8
|
||||
- Skwovet
|
||||
- Greedent
|
||||
- Chewtle
|
||||
- Drednaw
|
||||
- Toxel
|
||||
- Toxtricity
|
||||
- Morpeko
|
||||
- Silicobra
|
||||
- Sandaconda
|
||||
- Sinistea
|
||||
- Polteageist
|
||||
- Galarian Corsola
|
||||
- Cursola
|
||||
- Mr. Rime
|
||||
- Galarian Mr. Mime
|
||||
- Clobbopus
|
||||
- Grapploct
|
||||
- Galarian Weezing
|
||||
|
||||
#### Gen 9
|
||||
- Smoliv
|
||||
- Dolliv
|
||||
- Arboliva
|
||||
- Tarountula
|
||||
- Spidops
|
||||
- Orthworm
|
||||
- Dudunsparce
|
||||
- Cyclizar
|
||||
- Poltchageist
|
||||
- Sinistcha
|
||||
- Capsakid
|
||||
- Scovillain
|
||||
- Tadbulb
|
||||
- Bellibolt
|
||||
- Toedscool
|
||||
- Toedscruel
|
||||
- Rellor
|
||||
- Rabsca
|
||||
- Bramblin
|
||||
- Brambleghast
|
||||
|
||||
### Animation updates for the following Pokémon
|
||||
- Garchomp
|
||||
- Tropius
|
||||
- Nosepass
|
||||
- Probopass
|
||||
- Sneasel
|
||||
- Weavile
|
||||
- Sneasler
|
||||
- Braixen
|
||||
- Delphox
|
||||
- Cinderace
|
||||
- Kangaskhan
|
||||
- Gossifleur
|
||||
- Eldegoss
|
||||
- Stonjourner
|
||||
- Wailmer
|
||||
- Lechonk
|
||||
- Oinkologne
|
||||
- Dratini
|
||||
- Dragonair
|
||||
- Dragonite
|
||||
- G. Corsola
|
||||
- Cursola
|
||||
- Dunsparce
|
||||
- Dudunsparce (both forms)
|
||||
- Porygon
|
||||
- Porygon2
|
||||
- Porygon-Z
|
||||
- Wattrel
|
||||
- Kilowattrel
|
||||
- Golurk
|
||||
- Spinarak
|
||||
- Ariados
|
||||
- Wyrdeer
|
||||
- Tyrantrum
|
||||
- Pidove
|
||||
- Tranquill
|
||||
- Unfezant
|
||||
- Beldum
|
||||
- Metang
|
||||
- Metagross
|
||||
- Plusle
|
||||
- Minun
|
||||
- Murkrow
|
||||
- Honchkrow
|
||||
- Larvesta
|
||||
- Volcarona
|
||||
- Dwebble
|
||||
- Crustle
|
||||
- Mr. Mime
|
||||
- Flygon
|
||||
- Pichu
|
||||
- Pikachu
|
||||
- Raichu
|
||||
- Alolan Raichu
|
||||
- Espathra
|
||||
- Abra
|
||||
- Kadabra
|
||||
- Alakazam
|
||||
- Deino
|
||||
- Zweilous
|
||||
- Hydreigon
|
||||
- Slaking
|
||||
- Klink
|
||||
- Klang
|
||||
- Klinklang
|
||||
- Baltoy
|
||||
- Claydol
|
||||
- Mamoswine
|
||||
- Rufflet
|
||||
- Braviary
|
||||
- Girafarig
|
||||
- Farigiraf
|
||||
- Rookidee
|
||||
- Corvisquire
|
||||
- Corviknight
|
||||
- Venipede
|
||||
- Whirlipede
|
||||
- Scolipede
|
||||
- Venusaur
|
||||
- Parasect
|
||||
- Bastiodon
|
||||
- Amaura
|
||||
- Varoom
|
||||
- Revavroom
|
||||
- Bouffalant
|
||||
- Lickilicky
|
||||
- Blaziken
|
||||
- Rhyhorn
|
||||
- Rhydon
|
||||
- Rhyperior
|
||||
- Tauros
|
||||
- Tauros - Paldea Aqua
|
||||
- Tauros - Paldea Blaze
|
||||
- Tauros - Paldea Combat
|
||||
- Dewgong
|
||||
- Exeggutor - Kanto
|
||||
|
||||
### Model updates for the following Pokémon
|
||||
- Cleffa
|
||||
- Clefairy
|
||||
- Clefable
|
||||
- Gyarados
|
||||
- Dragonite
|
||||
- Eevee
|
||||
- Vaporeon
|
||||
- Jolteon
|
||||
- Flareon
|
||||
- Espeon
|
||||
- Umbreon
|
||||
- Leafeon
|
||||
- Glaceon
|
||||
- Sylveon
|
||||
- Treecko
|
||||
- Grovyle
|
||||
- Sceptile
|
||||
- Honchkrow
|
||||
- Gible
|
||||
- Gabite
|
||||
- Garchomp
|
||||
- Pidgeot
|
||||
- Nosepass
|
||||
- Probopass
|
||||
- Kangaskhan
|
||||
- Cinderace
|
||||
- Magnemite
|
||||
- Magneton
|
||||
- Magnezone
|
||||
- Beldum
|
||||
- Metang
|
||||
- Metagross
|
||||
- Hoothoot
|
||||
- Noctowl
|
||||
- Teddiursa
|
||||
- Ursaring
|
||||
- Ursaluna
|
||||
- Heatmor
|
||||
- Bouffalant
|
||||
- Sigilyph
|
||||
- Sharpedo
|
||||
- Maractus
|
||||
- Clodsire
|
||||
- Scyther
|
||||
- Scizor
|
||||
- Cacturne
|
||||
- Taillow
|
||||
- Swellow
|
||||
- Seel
|
||||
- Dewgong
|
||||
- Honedge
|
||||
- Doublade
|
||||
- Aegislash
|
||||
- Drowzee
|
||||
- Hypno
|
||||
- Mudkip
|
||||
- Marshtomp
|
||||
- Swampert
|
||||
- Shelmet
|
||||
- Escavalier
|
||||
- Klink
|
||||
- Klank
|
||||
- Klinklang
|
||||
- Spinarak
|
||||
- Ariados
|
||||
- Pidove
|
||||
- Tranquill
|
||||
- Unfezant
|
||||
- Sobble
|
||||
- Drizzile
|
||||
- Inteleon
|
||||
- Plusle
|
||||
- Minun
|
||||
- Murkrow
|
||||
- Zorua
|
||||
- Zoroark
|
||||
- Mime.Jr
|
||||
- Mr. Mime
|
||||
- Pichu
|
||||
- Pikachu
|
||||
- Raichu
|
||||
- Alolan Raichu
|
||||
- Dusknoir
|
||||
- Deino
|
||||
- Zweilous
|
||||
- Hydreigon
|
||||
- Dreepy
|
||||
- Drakloak
|
||||
- Dragapult
|
||||
- Mamoswine
|
||||
- Rookidee
|
||||
- Corvisquire
|
||||
- Corviknight
|
||||
- Venipede
|
||||
- Whirlipede
|
||||
- Scolipede
|
||||
- Farigiraf
|
||||
- Staryu
|
||||
- Starmie
|
||||
- Gimmighoul
|
||||
- Gholdengo
|
||||
- Starly
|
||||
- Staravia
|
||||
- Staraptor
|
||||
- Varoom
|
||||
- Revavroom
|
||||
- Nickit
|
||||
- Thievul
|
||||
- Litwick
|
||||
- Lampent
|
||||
- Chandelure
|
||||
|
||||
### Changes
|
||||
- Changed pokemon caught and seen count to update based on the current pokedex being looked
|
||||
- Renamed `chargeGainedPerTick` config to `secondsToChargeHealingMachine`.
|
||||
- Made Blocks of Gold count as Big Nuggets when held by a Pokémon (for Fling functionality)
|
||||
- Players can now eat Sweet and Tart Apples, Whipped Dreams, and the Alcremie Sweets.
|
||||
- Updated Sweet and Tart Apple sprites
|
||||
- Updated the following recipes: Air Balloon, Assault Vest, Binding Band, Black Belt, Blunder Policy, Choice Band, Choice Scarf, Cleanse Tag, Covert Cloak, Destiny Knot, Eject Button, Expert Belt, Focus Band, Focus Sash, Magnet, Metronome, Muscle Band, Power Anklet, Power Band, Power Belt, Power Bracer, Power Lens, Power Weight, Protective Pads, Protein, Punching Glove, Reaper Cloth, Rocky Helmet, Room Service, Sachet, Safety Goggles, Silk Scarf, Spell Tag, Utility Umbrella, Weakness Policy, Zinc, Chipped Pot, Cracked Pot, Unremarkable Cup, Loaded Dice, Charcoal Stick, Dragon Fang, Miracle Seed, Mystic Water, Never Melt Ice, Twisted Spoon, Black Glasses, Fairy Feather, Hard Stone, Silver Powder, Soft Sand
|
||||
- Added alternate ingredient options to the following recipes: Cell Battery, Damp Rock, Heat Rock, Icy Rock, Smooth Rock
|
||||
- Grouped together some recipes within the Recipe Book. Groups include: the seven basic Poké Balls, the seven basic Ancient Poké Balls, Gilded Chests, Pokedexes, and the Weather Rocks.
|
||||
- Updated some item tags to better integrate behaviours between Cobblemon, Vanilla Minecraft, and other mods
|
||||
- Removed Cooked Meat, Raw Meat, Protein Ingredients, and Zinc Ingredients, the first two are now using `c` namespace tags, the latter have better integrated use of tags within their recipes which removes need for custom tags.
|
||||
- Added our seeds tag into `#c:seeds`, which is now made use of for the Miracle Seed recipe.
|
||||
- Added herbs and snowballs to the consumable in PvE and Wild battle tags
|
||||
- Tweaked the Natural Materials Vanilla file to fit with the changes to tags
|
||||
- Substantially optimised spawning checks mainly by front-loading biome filtering.
|
||||
- When using the `cobblemon` or `generation_9` capture calculators a critical capture with a single shake will always play for successful captures when you've already registered the Pokémon as caught in your Pokédex.
|
||||
- Improved the performance of saving Pokédex and player data.
|
||||
- Pokémon hitbox now scales with entity attribute `generic.scale`.
|
||||
- Removed Shulker aspect and replaced it with cosmetic_item-shulker_shell.
|
||||
- Shulker shell Forretress is now a cosmetic rather than a special evo and thus all shulker Forretress will revert back to normal until a shulker shell is put in their cosmetic slot.
|
||||
- Updated `doPokemonSpawning` gamerule to support per-dimension configurations.
|
||||
- The Pokedex now displays a form name of a "normal" Pokémon for when the base form is still a named form.
|
||||
- Improved the zoom functionality of the Pokédex Scanner by giving the levels logarithmic scaling.
|
||||
- Added a subtle rotation effect to the Pokédex Scanner's wheel when zooming.
|
||||
- Improved parity with vanilla mobs' drop behavior; loot and XP drop on death instead of after the entire death sequence finishes.
|
||||
- Quirk animations no longer play in the battle GUI since they were pretty distracting.
|
||||
- A number of Pokemon that float above the ground visually (Gastly, Klingklang, etc.) are no longer considered to be touching the ground
|
||||
- Changed the recipes for Level, Lure, and Moon Balls to be cleaner
|
||||
- Renamed `pokemonId` and `type` to `species` in relevant Advancement triggers for conformity, this is a breaking change.
|
||||
- Added a separate `species` argument to the `pick_starter`, `pasture_use` and `resurrect_pokemon` Advancement triggers.
|
||||
- Made `CobblemonAgingDespawner` thresholds configurable via the config file.
|
||||
- Tweaked Berry flavor data to balance cooking pot mechanics
|
||||
- Made Red, Yellow, Green, Blue, Pink, Black, and White Apricorn Sprout and Saccharine Sapling able to be placed into flower pots.
|
||||
- Added all Potted Apricorn Sprouts, Potted Saccharine Saplings, and Potted Pep-Up Flowers to the `#minecraft:flower_pots` block tag
|
||||
- Corrected the healing values of the remedies and energy root, and reintroduced the friendship lowering mechanics for them, revival herb, and heal powder
|
||||
- Updated battle language keys for side effects to use position-specific formats, improving grammatical consistency
|
||||
- Saccharine Leaves are now Collectable
|
||||
- Saccharine Leaves Age 1 or higher will now show Yellow particles when broken
|
||||
- Destroying a Saccharine Honey Log will now drop a Saccharine Log instead of nothing
|
||||
- Reworked some compost chances
|
||||
- Updated interaction interface to include 4 more option spaces
|
||||
- Made lecterns that hold a Pokédex emit light.
|
||||
- Updated light levels for active PC, Pasture, Healing Machine, and Data Monitor.
|
||||
- Vivichokes now always drop one seed when harvested, and converting a fully grown Vivichoke to seeds via crafting results in 1 seed.
|
||||
- Healing Machine recipe rebalanced.
|
||||
- Reorganised the `block` texture folder to be more organised, in line with the `item` texture folder.
|
||||
- Offset in EmitterShape now ignores scale to be more like Blockbench by default. You can get this behaviour back by adding `"scale": true` in the `attachment_options` property in most EmitterShapes.
|
||||
- Not specifying a dex in `/pokedex printcalculations {player} {dex}` will now print the National Dex statistics instead of showing all dexes. `/pokedex printcalculations {player} all` is how to view all dex statistics in one command.
|
||||
- `custom_model_data=1` on items can now be displayed when placed in a Display Case by adding to the item tag `cobblemon:display_case_items`
|
||||
- Upgrade, Dubious Disc, and Luminous Moss sprites have been updated to better match the new block forms
|
||||
- Updated Peat Block and Peat Mulch recipes
|
||||
- Minor tab reorganisation
|
||||
- Removed Braised Vivichoke
|
||||
- Updated Pokémon state icons shown in party interfaces
|
||||
- MoLang `face` function can now be run on any `PosableEntity` (Like Pokémon!) instead of just NPCs.
|
||||
- MoLang `run_action_effect` now works on Pokémon.
|
||||
- Changed MoLang entity function `is_standing_on` to allow for block tags in the list.
|
||||
- Added entity (as `q.entity`) that executed the command to the `executemolangscript` command.
|
||||
- Refactored the following events to `.Pre` and `.Post` for consistency:
|
||||
- `PokemonSentEvent`
|
||||
- `ExperienceGainedEvent`
|
||||
- `BattleStartedEvent`
|
||||
- Updated `PokemonSentEvent` parameters to include the Position and Level of the Pokémon being sent out.
|
||||
- Updated `EvolutionCompleteEvent` parameters to include the Source Pokemon that evolved.
|
||||
- Updated `HatchEggEvent.Post` to include the Pokemon that hatched.
|
||||
- Roseli Berry Trees now naturally generate in their preferred biomes.
|
||||
- Refactored dynamic lights compat to be more future proof. The dynamic light support is only tested with LambDynamicLights, on NeoForged use that mod in combination with Sinytra Connector
|
||||
- Shulker Boxes and Traveler's Backpacks can no longer be held by Pokémon. Thanks Monocle ;) You could re-enable this with a datapack but you'd be crazy.
|
||||
|
||||
### Changes
|
||||
|
||||
|
||||
@@ -10,19 +10,26 @@ 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.campfirepot.CampfireBlock
|
||||
import com.cobblemon.mod.common.block.LecternBlock
|
||||
import com.cobblemon.mod.common.block.MintBlock.MintType
|
||||
import com.cobblemon.mod.common.block.campfirepot.CampfireBlock
|
||||
import com.cobblemon.mod.common.block.campfirepot.CampfirePotBlock
|
||||
import com.cobblemon.mod.common.block.chest.GildedChestBlock
|
||||
import com.cobblemon.mod.common.block.decor.*
|
||||
import com.cobblemon.mod.common.block.decor.DecorativeItemBlock.ItemType
|
||||
import com.cobblemon.mod.common.block.decor.StackableItemBlock.StackableItemType
|
||||
import com.cobblemon.mod.common.block.decor.WallAttachedDecorativeItemBlock.WallItemType
|
||||
import com.cobblemon.mod.common.block.decor.WallAttachedStackableItemBlock.WallStackableItemType
|
||||
import com.cobblemon.mod.common.block.decor.SixFaceDecorativeItemBlock.SixFaceItemType
|
||||
import com.cobblemon.mod.common.block.general.BaleBlock
|
||||
import com.cobblemon.mod.common.block.general.HorizontalRotationCarpetBlock
|
||||
import com.cobblemon.mod.common.block.general.HorizontalRotationalBlock
|
||||
import com.cobblemon.mod.common.block.general.SixDirectionalBlock
|
||||
import com.cobblemon.mod.common.block.grower.SaccharineTreeGrower
|
||||
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 com.cobblemon.mod.common.block.general.HorizontalRotationCarpetBlock
|
||||
import com.cobblemon.mod.common.block.general.HorizontalRotationalBlock
|
||||
import com.cobblemon.mod.common.mixin.invoker.*
|
||||
import com.cobblemon.mod.common.platform.PlatformRegistry
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
@@ -460,6 +467,179 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
@JvmField
|
||||
val RELIC_COIN_SACK = create("relic_coin_sack", CoinPouchBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.RELIC_COIN_SACK_SOUNDS).pushReaction(PushReaction.DESTROY).strength(0.4f), false))
|
||||
|
||||
@JvmField
|
||||
val KINGS_ROCK = create("kings_rock", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), ItemType.GENERIC_7x6))
|
||||
@JvmField
|
||||
val CHIPPED_POT = create("chipped_pot", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.TUMBLESTONE_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), ItemType.TEAPOT))
|
||||
@JvmField
|
||||
val CRACKED_POT = create("cracked_pot", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.TUMBLESTONE_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), ItemType.TEAPOT))
|
||||
@JvmField
|
||||
val MASTERPIECE_TEACUP = create("masterpiece_teacup", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.TUMBLESTONE_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), ItemType.TEACUP))
|
||||
@JvmField
|
||||
val UNREMARKABLE_TEACUP = create("unremarkable_teacup", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.TUMBLESTONE_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), ItemType.TEACUP))
|
||||
@JvmField
|
||||
val LUMINOUS_MOSS = create("luminous_moss", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.MOSS).mapColor(MapColor.NONE).noOcclusion().lightLevel{5}, ItemType.MOSS))
|
||||
@JvmField
|
||||
val GALARICA_CUFF = create("galarica_cuff", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.SWEET_BERRY_BUSH).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion().noCollission(), ItemType.GENERIC_8x4))
|
||||
@JvmField
|
||||
val GALARICA_WREATH = create("galarica_wreath", GalaricaWreathBlock(BlockBehaviour.Properties.of().sound(SoundType.SWEET_BERRY_BUSH).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion().noCollission()))
|
||||
@JvmField
|
||||
val DESTINY_KNOT = create("destiny_knot", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOL).mapColor(MapColor.NONE).noOcclusion(), ItemType.KNOT))
|
||||
@JvmField
|
||||
val METRONOME = create("metronome", MetronomeBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion()))
|
||||
@JvmField
|
||||
val DAMP_ROCK = create("damp_rock", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.DRIPSTONE_BLOCK).mapColor(MapColor.NONE).noOcclusion(), ItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val HEAT_ROCK = create("heat_rock", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.DRIPSTONE_BLOCK).mapColor(MapColor.NONE).noOcclusion(), ItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val ICY_ROCK = create("icy_rock", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.DRIPSTONE_BLOCK).mapColor(MapColor.NONE).noOcclusion(), ItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val SMOOTH_ROCK = create("smooth_rock", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.DRIPSTONE_BLOCK).mapColor(MapColor.NONE).noOcclusion(), ItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val UPGRADE = create("upgrade", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.UPGRADE))
|
||||
@JvmField
|
||||
val DUBIOUS_DISC = create("dubious_disc", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.UPGRADE))
|
||||
@JvmField
|
||||
val NEVER_MELT_ICE = create("never_melt_ice", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion().friction(0.989F), ItemType.GENERIC_7x6))
|
||||
@JvmField
|
||||
val PEAT_BLOCK = create("peat_block", SixDirectionalBlock(BlockBehaviour.Properties.of().mapColor(MapColor.CLAY).strength(0.5f).sound(SoundType.MUD)))
|
||||
@JvmField
|
||||
val CLEANSE_TAG = create("cleanse_tag", WallAttachedStackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOD).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion().noCollission(), WallStackableItemType.TAG))
|
||||
@JvmField
|
||||
val SPELL_TAG = create("spell_tag", WallAttachedStackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOD).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion().noCollission(), WallStackableItemType.TAG))
|
||||
@JvmField
|
||||
val BLUNDER_POLICY = create("blunder_policy", WallAttachedDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOD).mapColor(MapColor.NONE).noOcclusion().noCollission(), WallItemType.POLICY))
|
||||
@JvmField
|
||||
val WEAKNESS_POLICY = create("weakness_policy", WallAttachedDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOD).mapColor(MapColor.NONE).noOcclusion().noCollission(), WallItemType.POLICY))
|
||||
@JvmField
|
||||
val SACHET = create("sachet", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.RELIC_COIN_POUCH_SOUNDS).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion(), ItemType.POUCH))
|
||||
@JvmField
|
||||
val BRIGHT_POWDER = create("bright_powder", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.RELIC_COIN_POUCH_SOUNDS).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion().lightLevel{2}, ItemType.POUCH))
|
||||
@JvmField
|
||||
val METAL_POWDER = create("metal_powder", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.RELIC_COIN_POUCH_SOUNDS).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion(), ItemType.POUCH))
|
||||
@JvmField
|
||||
val QUICK_POWDER = create("quick_powder", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.RELIC_COIN_POUCH_SOUNDS).mapColor(MapColor.NONE).pushReaction(PushReaction.DESTROY).noOcclusion(), ItemType.POUCH))
|
||||
@JvmField
|
||||
val LIFE_ORB = create("life_orb", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion().lightLevel{2}, SixFaceItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val FLAME_ORB = create("flame_orb", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion().lightLevel{15}, SixFaceItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val TOXIC_ORB = create("toxic_orb", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), SixFaceItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val LIGHT_BALL = create("light_ball", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion().lightLevel{13}, SixFaceItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val SMOKE_BALL = create("smoke_ball", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), SixFaceItemType.GENERIC_8x))
|
||||
/*@JvmField
|
||||
val SOUL_DEW = create("soul_dew", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion().lightLevel{11}, SixFaceItemType.GENERIC_8x))*/
|
||||
@JvmField
|
||||
val IRON_BALL = create("iron_ball", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion().strength(5f), ItemType.GENERIC_8x)) //TODO Determine whether this should be a falling block with damage source - Idea is solid, but the damage bit is concerning to get working, so leaving it as a maybe for now
|
||||
@JvmField
|
||||
val HARD_STONE = create("hard_stone", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.STONE).mapColor(MapColor.NONE).noOcclusion().strength(0.5f), ItemType.GENERIC_8x))
|
||||
@JvmField
|
||||
val RING_TARGET = create("ring_target", WallAttachedTargetBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOD).mapColor(MapColor.NONE).noOcclusion().strength(0.5f)))
|
||||
@JvmField
|
||||
val EJECT_BUTTON = create("eject_button", EjectButtonBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).strength(1.0f).pushReaction(PushReaction.DESTROY)))
|
||||
@JvmField
|
||||
val METAL_COAT = create("metal_coat", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.METAL_COAT))
|
||||
@JvmField
|
||||
val MAGNET = create("magnet", SixFaceDecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion(), SixFaceItemType.MAGNET))
|
||||
|
||||
@JvmField
|
||||
val POTION = create("potion", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.POTION))
|
||||
@JvmField
|
||||
val SUPER_POTION = create("super_potion", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.POTION))
|
||||
@JvmField
|
||||
val HYPER_POTION = create("hyper_potion", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.POTION))
|
||||
@JvmField
|
||||
val MAX_POTION = create("max_potion", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.MAX_POTION))
|
||||
@JvmField
|
||||
val FULL_RESTORE = create("full_restore", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.MAX_POTION))
|
||||
@JvmField
|
||||
val ANTIDOTE = create("antidote", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.RESTORE))
|
||||
@JvmField
|
||||
val AWAKENING = create("awakening", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.RESTORE))
|
||||
@JvmField
|
||||
val BURN_HEAL = create("burn_heal", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.RESTORE))
|
||||
@JvmField
|
||||
val ICE_HEAL = create("ice_heal", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.RESTORE))
|
||||
@JvmField
|
||||
val PARALYZE_HEAL = create("paralyze_heal", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.RESTORE))
|
||||
@JvmField
|
||||
val FULL_HEAL = create("full_heal", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.RESTORE))
|
||||
@JvmField
|
||||
val ETHER = create("ether", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.ETHER))
|
||||
@JvmField
|
||||
val MAX_ETHER = create("max_ether", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.ETHER))
|
||||
@JvmField
|
||||
val ELIXIR = create("elixir", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.ETHER))
|
||||
@JvmField
|
||||
val MAX_ELIXIR = create("max_elixir", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.ETHER))
|
||||
@JvmField
|
||||
val X_ACCURACY = create("x_accuracy", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val X_ATTACK = create("x_attack", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val X_DEFENCE = create("x_defence", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val X_SPECIAL_ATTACK = create("x_special_attack", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val X_SPECIAL_DEFENCE = create("x_special_defence", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val X_SPEED = create("x_speed", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val DIRE_HIT = create("dire_hit", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val GUARD_SPEC = create("guard_spec", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.BATTLE_X))
|
||||
@JvmField
|
||||
val HP_UP = create("hp_up", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val PROTEIN = create("protein", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val IRON = create("iron", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val CARBOS = create("carbos", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val CALCIUM = create("calcium", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val ZINC = create("zinc", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val PP_UP = create("pp_up", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
@JvmField
|
||||
val PP_MAX = create("pp_max", StackableItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion(), StackableItemType.VITAMIN))
|
||||
|
||||
@JvmField
|
||||
val WHITE_PLAQUE = create("white_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val LIGHT_GRAY_PLAQUE = create("light_gray_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val GRAY_PLAQUE = create("gray_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val BLACK_PLAQUE = create("black_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val BROWN_PLAQUE = create("brown_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val RED_PLAQUE = create("red_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val ORANGE_PLAQUE = create("orange_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val YELLOW_PLAQUE = create("yellow_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val LIME_PLAQUE = create("lime_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val GREEN_PLAQUE = create("green_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val CYAN_PLAQUE = create("cyan_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val LIGHT_BLUE_PLAQUE = create("light_blue_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val BLUE_PLAQUE = create("blue_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val PURPLE_PLAQUE = create("purple_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val MAGENTA_PLAQUE = create("magenta_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
@JvmField
|
||||
val PINK_PLAQUE = create("pink_plaque", PlaqueBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.METAL).noOcclusion().pushReaction(PushReaction.DESTROY).strength(5.0F)))
|
||||
|
||||
@JvmField
|
||||
val GILDED_CHEST = create("gilded_chest", GildedChestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CHEST).noOcclusion().sound(CobblemonSounds.GILDED_CHEST_SOUNDS), GildedChestBlock.Type.RED))
|
||||
@JvmField
|
||||
@@ -494,7 +674,7 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
val LECTERN = create("lectern", LecternBlock(BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).instrument(NoteBlockInstrument.BASS).sound(SoundType.WOOD).strength(2.5F).ignitedByLava().lightLevel { if (it.getValue(LecternBlock.EMIT_LIGHT) as Boolean) 13 else 0 }))
|
||||
|
||||
@JvmField
|
||||
val DISPLAY_CASE = create("display_case", DisplayCaseBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.DISPLAY_CASE_SOUNDS).noOcclusion().pushReaction(PushReaction.BLOCK).mapColor(MapColor.STONE).strength(0.3F).requiresCorrectToolForDrops()))
|
||||
val DISPLAY_CASE = create("display_case", DisplayCaseBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.DISPLAY_CASE_SOUNDS).instrument(NoteBlockInstrument.HAT).noOcclusion().pushReaction(PushReaction.BLOCK).mapColor(MapColor.STONE).strength(0.3F).requiresCorrectToolForDrops()))
|
||||
|
||||
// TODO after 1.7
|
||||
// @JvmField
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.cobblemon.mod.common.pokeball.PokeBall
|
||||
import com.cobblemon.mod.common.pokemon.IVs
|
||||
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.client.renderer.item.ItemProperties
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
@@ -66,6 +67,7 @@ import net.minecraft.world.item.SignItem
|
||||
import net.minecraft.world.item.SmithingTemplateItem
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
|
||||
@Suppress("unused", "SameParameterValue")
|
||||
object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<Item>>, Item>() {
|
||||
@@ -73,7 +75,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
override val resourceKey: ResourceKey<Registry<Item>> = Registries.ITEM
|
||||
|
||||
@JvmField
|
||||
val NPC_EDITOR = create("npc_editor", CobblemonItem(Item.Properties().stacksTo(1)))
|
||||
val NPC_EDITOR = create("npc_editor", CobblemonItem(Properties().stacksTo(1)))
|
||||
|
||||
@JvmField
|
||||
val pokeBalls = mutableListOf<PokeBallItem>()
|
||||
@@ -217,7 +219,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
val TATAMI_MAT = blockItem("tatami_mat", CobblemonBlocks.TATAMI_MAT)
|
||||
|
||||
@JvmField
|
||||
val VIVICHOKE = compostableItem("vivichoke", CobblemonItem(Item.Properties()), 0.80f)
|
||||
val VIVICHOKE = compostableItem("vivichoke", CobblemonItem(Properties()), 0.80f)
|
||||
|
||||
@JvmField
|
||||
val VIVICHOKE_SEEDS = compostableItem("vivichoke_seeds", VivichokeItem(CobblemonBlocks.VIVICHOKE_SEEDS), 0.30f)
|
||||
@@ -265,9 +267,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val APRICORN_LEAVES = compostableBlockItem("apricorn_leaves", CobblemonBlocks.APRICORN_LEAVES, 0.30f)
|
||||
@JvmField
|
||||
val APRICORN_BOAT = create("apricorn_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, false, Item.Properties().stacksTo(1)))
|
||||
val APRICORN_BOAT = create("apricorn_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, false, Properties().stacksTo(1)))
|
||||
@JvmField
|
||||
val APRICORN_CHEST_BOAT = create("apricorn_chest_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, true, Item.Properties().stacksTo(1)))
|
||||
val APRICORN_CHEST_BOAT = create("apricorn_chest_boat", CobblemonBoatItem(CobblemonBoatType.APRICORN, true, Properties().stacksTo(1)))
|
||||
|
||||
@JvmField
|
||||
val APRICORN_DOOR = blockItem("apricorn_door", CobblemonBlocks.APRICORN_DOOR)
|
||||
@@ -286,25 +288,33 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val APRICORN_STAIRS = blockItem("apricorn_stairs", CobblemonBlocks.APRICORN_STAIRS)
|
||||
@JvmField
|
||||
val APRICORN_SIGN = this.create("apricorn_sign", SignItem(Item.Properties().stacksTo(16), CobblemonBlocks.APRICORN_SIGN, CobblemonBlocks.APRICORN_WALL_SIGN))
|
||||
val APRICORN_SIGN = this.create("apricorn_sign", SignItem(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.Properties().stacksTo(16)))
|
||||
val APRICORN_HANGING_SIGN = this.create("apricorn_hanging_sign", HangingSignItem(CobblemonBlocks.APRICORN_HANGING_SIGN, CobblemonBlocks.APRICORN_WALL_HANGING_SIGN, Properties().stacksTo(16)))
|
||||
@JvmField
|
||||
val GILDED_CHEST = this.create("gilded_chest", BlockItem(CobblemonBlocks.GILDED_CHEST, Item.Properties()))
|
||||
val GILDED_CHEST = this.create("gilded_chest", BlockItem(CobblemonBlocks.GILDED_CHEST, Properties()))
|
||||
@JvmField
|
||||
val BLUE_GILDED_CHEST = this.create("blue_gilded_chest", BlockItem(CobblemonBlocks.BLUE_GILDED_CHEST, Item.Properties()))
|
||||
val BLUE_GILDED_CHEST = this.create("blue_gilded_chest", BlockItem(CobblemonBlocks.BLUE_GILDED_CHEST, Properties()))
|
||||
@JvmField
|
||||
val YELLOW_GILDED_CHEST = this.create("yellow_gilded_chest", BlockItem(CobblemonBlocks.YELLOW_GILDED_CHEST, Item.Properties()))
|
||||
val YELLOW_GILDED_CHEST = this.create("yellow_gilded_chest", BlockItem(CobblemonBlocks.YELLOW_GILDED_CHEST,
|
||||
Properties()
|
||||
))
|
||||
@JvmField
|
||||
val PINK_GILDED_CHEST = this.create("pink_gilded_chest", BlockItem(CobblemonBlocks.PINK_GILDED_CHEST, Item.Properties()))
|
||||
val PINK_GILDED_CHEST = this.create("pink_gilded_chest", BlockItem(CobblemonBlocks.PINK_GILDED_CHEST, Properties()))
|
||||
@JvmField
|
||||
val BLACK_GILDED_CHEST = this.create("black_gilded_chest", BlockItem(CobblemonBlocks.BLACK_GILDED_CHEST, Item.Properties()))
|
||||
val BLACK_GILDED_CHEST = this.create("black_gilded_chest", BlockItem(CobblemonBlocks.BLACK_GILDED_CHEST,
|
||||
Properties()
|
||||
))
|
||||
@JvmField
|
||||
val WHITE_GILDED_CHEST = this.create("white_gilded_chest", BlockItem(CobblemonBlocks.WHITE_GILDED_CHEST, Item.Properties()))
|
||||
val WHITE_GILDED_CHEST = this.create("white_gilded_chest", BlockItem(CobblemonBlocks.WHITE_GILDED_CHEST,
|
||||
Properties()
|
||||
))
|
||||
@JvmField
|
||||
val GREEN_GILDED_CHEST = this.create("green_gilded_chest", BlockItem(CobblemonBlocks.GREEN_GILDED_CHEST, Item.Properties()))
|
||||
val GREEN_GILDED_CHEST = this.create("green_gilded_chest", BlockItem(CobblemonBlocks.GREEN_GILDED_CHEST,
|
||||
Properties()
|
||||
))
|
||||
@JvmField
|
||||
val GIMMIGHOUL_CHEST = this.create("gimmighoul_chest", BlockItem(CobblemonBlocks.GIMMIGHOUL_CHEST, Item.Properties()))
|
||||
val GIMMIGHOUL_CHEST = this.create("gimmighoul_chest", BlockItem(CobblemonBlocks.GIMMIGHOUL_CHEST, Properties()))
|
||||
|
||||
// Saccharines
|
||||
@JvmField
|
||||
@@ -322,9 +332,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val SACCHARINE_LEAVES = compostableBlockItem("saccharine_leaves", CobblemonBlocks.SACCHARINE_LEAVES, 0.35f)
|
||||
@JvmField
|
||||
val SACCHARINE_BOAT = create("saccharine_boat", CobblemonBoatItem(CobblemonBoatType.SACCHARINE, false, Item.Properties().stacksTo(1)))
|
||||
val SACCHARINE_BOAT = create("saccharine_boat", CobblemonBoatItem(CobblemonBoatType.SACCHARINE, false, Properties().stacksTo(1)))
|
||||
@JvmField
|
||||
val SACCHARINE_CHEST_BOAT = create("saccharine_chest_boat", CobblemonBoatItem(CobblemonBoatType.SACCHARINE, true, Item.Properties().stacksTo(1)))
|
||||
val SACCHARINE_CHEST_BOAT = create("saccharine_chest_boat", CobblemonBoatItem(CobblemonBoatType.SACCHARINE, true, Properties().stacksTo(1)))
|
||||
|
||||
@JvmField
|
||||
val SACCHARINE_DOOR = blockItem("saccharine_door", CobblemonBlocks.SACCHARINE_DOOR)
|
||||
@@ -343,9 +353,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val SACCHARINE_STAIRS = blockItem("saccharine_stairs", CobblemonBlocks.SACCHARINE_STAIRS)
|
||||
@JvmField
|
||||
val SACCHARINE_SIGN = this.create("saccharine_sign", SignItem(Item.Properties().stacksTo(16), CobblemonBlocks.SACCHARINE_SIGN, CobblemonBlocks.SACCHARINE_WALL_SIGN))
|
||||
val SACCHARINE_SIGN = this.create("saccharine_sign", SignItem(Properties().stacksTo(16), CobblemonBlocks.SACCHARINE_SIGN, CobblemonBlocks.SACCHARINE_WALL_SIGN))
|
||||
@JvmField
|
||||
val SACCHARINE_HANGING_SIGN = this.create("saccharine_hanging_sign", HangingSignItem(CobblemonBlocks.SACCHARINE_HANGING_SIGN, CobblemonBlocks.SACCHARINE_WALL_HANGING_SIGN, Item.Properties().stacksTo(16)))
|
||||
val SACCHARINE_HANGING_SIGN = this.create("saccharine_hanging_sign", HangingSignItem(CobblemonBlocks.SACCHARINE_HANGING_SIGN, CobblemonBlocks.SACCHARINE_WALL_HANGING_SIGN, Properties().stacksTo(16)))
|
||||
@JvmField
|
||||
val SACCHARINE_SAPLING = compostableBlockItem("saccharine_sapling", CobblemonBlocks.SACCHARINE_SAPLING, 0.30f)
|
||||
|
||||
@@ -467,9 +477,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
// Evolution items
|
||||
@JvmField val LINK_CABLE = create("link_cable", LinkCableItem())
|
||||
@JvmField val DRAGON_SCALE = noSettingsItem("dragon_scale")
|
||||
@JvmField val METAL_COAT = noSettingsItem("metal_coat")
|
||||
@JvmField val UPGRADE = noSettingsItem("upgrade")
|
||||
@JvmField val DUBIOUS_DISC = noSettingsItem("dubious_disc")
|
||||
@JvmField val METAL_COAT = itemNameBlockItem("metal_coat", CobblemonBlocks.METAL_COAT)
|
||||
@JvmField val UPGRADE = itemNameBlockItem("upgrade", CobblemonBlocks.UPGRADE)
|
||||
@JvmField val DUBIOUS_DISC = itemNameBlockItem("dubious_disc", CobblemonBlocks.DUBIOUS_DISC)
|
||||
@JvmField val DEEP_SEA_SCALE = noSettingsItem("deep_sea_scale")
|
||||
@JvmField val DEEP_SEA_TOOTH = noSettingsItem("deep_sea_tooth")
|
||||
@JvmField val ELECTIRIZER = noSettingsItem("electirizer")
|
||||
@@ -478,7 +488,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField val PROTECTOR = noSettingsItem("protector")
|
||||
@JvmField val REAPER_CLOTH = noSettingsItem("reaper_cloth")
|
||||
@JvmField val PRISM_SCALE = noSettingsItem("prism_scale")
|
||||
@JvmField val SACHET = noSettingsItem("sachet")
|
||||
@JvmField val SACHET = itemNameBlockItem("sachet", CobblemonBlocks.SACHET)
|
||||
@JvmField val WHIPPED_DREAM = create("whipped_dream", foodItem(8, 0.3f))
|
||||
@JvmField val STRAWBERRY_SWEET = create("strawberry_sweet", foodItem(6, 0.125f))
|
||||
@JvmField val LOVE_SWEET = create("love_sweet", foodItem(6, 0.125f))
|
||||
@@ -487,26 +497,41 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField val FLOWER_SWEET = create("flower_sweet", foodItem(6, 0.125f))
|
||||
@JvmField val STAR_SWEET = create("star_sweet", foodItem(6, 0.125f))
|
||||
@JvmField val RIBBON_SWEET = create("ribbon_sweet", foodItem(6, 0.125f))
|
||||
@JvmField val CHIPPED_POT = noSettingsItem("chipped_pot")
|
||||
@JvmField val CRACKED_POT = noSettingsItem("cracked_pot")
|
||||
@JvmField val MASTERPIECE_TEACUP = noSettingsItem("masterpiece_teacup")
|
||||
@JvmField val UNREMARKABLE_TEACUP = noSettingsItem("unremarkable_teacup")
|
||||
@JvmField val CHIPPED_POT = itemNameBlockItem("chipped_pot", CobblemonBlocks.CHIPPED_POT)
|
||||
@JvmField val CRACKED_POT = itemNameBlockItem("cracked_pot", CobblemonBlocks.CRACKED_POT)
|
||||
@JvmField val MASTERPIECE_TEACUP = itemNameBlockItem("masterpiece_teacup", CobblemonBlocks.MASTERPIECE_TEACUP)
|
||||
@JvmField val UNREMARKABLE_TEACUP = itemNameBlockItem("unremarkable_teacup", CobblemonBlocks.UNREMARKABLE_TEACUP)
|
||||
@JvmField val SWEET_APPLE = compostableItem("sweet_apple", foodItem(4, 0.3f), 0.65f)
|
||||
@JvmField val TART_APPLE = compostableItem("tart_apple", foodItem(4, 0.3f), 0.65f)
|
||||
@JvmField val SYRUPY_APPLE = compostableItem("syrupy_apple", foodItem(4, 0.3f), 0.65f)
|
||||
@JvmField val GALARICA_CUFF = noSettingsItem("galarica_cuff")
|
||||
@JvmField val GALARICA_WREATH = noSettingsItem("galarica_wreath")
|
||||
@JvmField val GALARICA_CUFF = itemNameBlockItem("galarica_cuff", CobblemonBlocks.GALARICA_CUFF)
|
||||
@JvmField val BLACK_AUGURITE = noSettingsItem("black_augurite")
|
||||
@JvmField val PEAT_BLOCK = noSettingsItem("peat_block")
|
||||
@JvmField val PEAT_BLOCK = itemNameBlockItem("peat_block", CobblemonBlocks.PEAT_BLOCK)
|
||||
@JvmField val RAZOR_CLAW = noSettingsItem("razor_claw")
|
||||
@JvmField val RAZOR_FANG = noSettingsItem("razor_fang")
|
||||
@JvmField val AUSPICIOUS_ARMOR = heldItem("auspicious_armor")
|
||||
@JvmField val MALICIOUS_ARMOR = heldItem("malicious_armor")
|
||||
@JvmField val SHELL_HELMET = heldItem("shell_helmet")
|
||||
@JvmField val METAL_ALLOY = noSettingsItem("metal_alloy")
|
||||
@JvmField val SCROLL_OF_DARKNESS = noSettingsItem("scroll_of_darkness")
|
||||
@JvmField val SCROLL_OF_WATERS = noSettingsItem("scroll_of_waters")
|
||||
|
||||
@JvmField val WHITE_PLAQUE = blockItem("white_plaque", CobblemonBlocks.WHITE_PLAQUE)
|
||||
@JvmField val LIGHT_GRAY_PLAQUE = blockItem("light_gray_plaque", CobblemonBlocks.LIGHT_GRAY_PLAQUE)
|
||||
@JvmField val GRAY_PLAQUE = blockItem("gray_plaque", CobblemonBlocks.GRAY_PLAQUE)
|
||||
@JvmField val BLACK_PLAQUE = blockItem("black_plaque", CobblemonBlocks.BLACK_PLAQUE)
|
||||
@JvmField val BROWN_PLAQUE = blockItem("brown_plaque", CobblemonBlocks.BROWN_PLAQUE)
|
||||
@JvmField val RED_PLAQUE = blockItem("red_plaque", CobblemonBlocks.RED_PLAQUE)
|
||||
@JvmField val ORANGE_PLAQUE = blockItem("orange_plaque", CobblemonBlocks.ORANGE_PLAQUE)
|
||||
@JvmField val YELLOW_PLAQUE = blockItem("yellow_plaque", CobblemonBlocks.YELLOW_PLAQUE)
|
||||
@JvmField val LIME_PLAQUE = blockItem("lime_plaque", CobblemonBlocks.LIME_PLAQUE)
|
||||
@JvmField val GREEN_PLAQUE = blockItem("green_plaque", CobblemonBlocks.GREEN_PLAQUE)
|
||||
@JvmField val CYAN_PLAQUE = blockItem("cyan_plaque", CobblemonBlocks.CYAN_PLAQUE)
|
||||
@JvmField val LIGHT_BLUE_PLAQUE = blockItem("light_blue_plaque", CobblemonBlocks.LIGHT_BLUE_PLAQUE)
|
||||
@JvmField val BLUE_PLAQUE = blockItem("blue_plaque", CobblemonBlocks.BLUE_PLAQUE)
|
||||
@JvmField val PURPLE_PLAQUE = blockItem("purple_plaque", CobblemonBlocks.PURPLE_PLAQUE)
|
||||
@JvmField val MAGENTA_PLAQUE = blockItem("magenta_plaque", CobblemonBlocks.MAGENTA_PLAQUE)
|
||||
@JvmField val PINK_PLAQUE = blockItem("pink_plaque", CobblemonBlocks.PINK_PLAQUE)
|
||||
|
||||
private val berries = mutableMapOf<ResourceLocation, BerryItem>()
|
||||
// Plants
|
||||
@JvmField val CHERI_BERRY = berryItem("cheri", StatusCuringBerryItem(CobblemonBlocks.CHERI_BERRY, Statuses.PARALYSIS))
|
||||
@@ -626,17 +651,17 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val EXPERIENCE_CANDY_XL = candyItem("exp_candy_xl") { _, _ -> CandyItem.DEFAULT_XL_CANDY_YIELD }
|
||||
@JvmField
|
||||
val CALCIUM = create("calcium", VitaminItem(Stats.SPECIAL_ATTACK))
|
||||
val CALCIUM = create("calcium", VitaminItem(Stats.SPECIAL_ATTACK, block = CobblemonBlocks.CALCIUM))
|
||||
@JvmField
|
||||
val CARBOS = create("carbos", VitaminItem(Stats.SPEED))
|
||||
val CARBOS = create("carbos", VitaminItem(Stats.SPEED, block = CobblemonBlocks.CARBOS))
|
||||
@JvmField
|
||||
val HP_UP = create("hp_up", VitaminItem(Stats.HP))
|
||||
val HP_UP = create("hp_up", VitaminItem(Stats.HP, block = CobblemonBlocks.HP_UP))
|
||||
@JvmField
|
||||
val IRON = create("iron", VitaminItem(Stats.DEFENCE))
|
||||
val IRON = create("iron", VitaminItem(Stats.DEFENCE, block = CobblemonBlocks.IRON))
|
||||
@JvmField
|
||||
val PROTEIN = create("protein", VitaminItem(Stats.ATTACK))
|
||||
val PROTEIN = create("protein", VitaminItem(Stats.ATTACK, block = CobblemonBlocks.PROTEIN))
|
||||
@JvmField
|
||||
val ZINC = create("zinc", VitaminItem(Stats.SPECIAL_DEFENCE))
|
||||
val ZINC = create("zinc", VitaminItem(Stats.SPECIAL_DEFENCE, block = CobblemonBlocks.ZINC))
|
||||
@JvmField
|
||||
val HEALTH_MOCHI = create("health_mochi", MochiItem(Stats.HP))
|
||||
@JvmField
|
||||
@@ -664,7 +689,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<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.Properties().food(FoodProperties.Builder().fast().nutrition(1).saturationModifier(0.2f).build())), "leek")
|
||||
val MEDICINAL_LEEK = heldItem("medicinal_leek", MedicinalLeekItem(CobblemonBlocks.MEDICINAL_LEEK, Properties().food(FoodProperties.Builder().fast().nutrition(1).saturationModifier(0.2f).build())), "leek")
|
||||
@JvmField
|
||||
val ROASTED_LEEK = compostableItem("roasted_leek", CobblemonItem(Item.Properties().food(FoodProperties.Builder().fast().nutrition(3).saturationModifier(0.2f).build())), 0.85f)
|
||||
@JvmField
|
||||
@@ -699,15 +724,15 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
val MOOMOO_MILK = create("moomoo_milk", MoomooMilk(Item.Properties().craftRemainder(Items.GLASS_BOTTLE).stacksTo((16))))
|
||||
|
||||
@JvmField
|
||||
val POTION = create("potion", PotionItem(PotionType.POTION))
|
||||
val POTION = potionItem("potion", PotionType.POTION, CobblemonBlocks.POTION)
|
||||
@JvmField
|
||||
val SUPER_POTION = create("super_potion", PotionItem(PotionType.SUPER_POTION))
|
||||
val SUPER_POTION = potionItem("super_potion", PotionType.SUPER_POTION, CobblemonBlocks.SUPER_POTION)
|
||||
@JvmField
|
||||
val HYPER_POTION = create("hyper_potion", PotionItem(PotionType.HYPER_POTION))
|
||||
val HYPER_POTION = potionItem("hyper_potion", PotionType.HYPER_POTION, CobblemonBlocks.HYPER_POTION)
|
||||
@JvmField
|
||||
val MAX_POTION = create("max_potion", PotionItem(PotionType.MAX_POTION))
|
||||
val MAX_POTION = potionItem("max_potion", PotionType.MAX_POTION, CobblemonBlocks.MAX_POTION)
|
||||
@JvmField
|
||||
val FULL_RESTORE = create("full_restore", PotionItem(PotionType.FULL_RESTORE))
|
||||
val FULL_RESTORE = potionItem("full_restore", PotionType.FULL_RESTORE, CobblemonBlocks.FULL_RESTORE)
|
||||
|
||||
@JvmField
|
||||
val HEAL_POWDER = create("heal_powder", HealPowderItem())
|
||||
@@ -718,9 +743,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val MAX_REVIVE = create("max_revive", ReviveItem(max = true))
|
||||
@JvmField
|
||||
val PP_UP = create("pp_up", PPUpItem(1))
|
||||
val PP_UP = create("pp_up", PPUpItem(1, block = CobblemonBlocks.PP_UP))
|
||||
@JvmField
|
||||
val PP_MAX = create("pp_max", PPUpItem(3))
|
||||
val PP_MAX = create("pp_max", PPUpItem(3, block = CobblemonBlocks.PP_MAX))
|
||||
|
||||
@JvmField
|
||||
val RED_MINT_SEEDS = mintSeed("red", MintType.RED.getCropBlock())
|
||||
@@ -792,28 +817,29 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val SERIOUS_MINT = mintItem("serious_mint", MintItem(Natures.SERIOUS))
|
||||
|
||||
@JvmField val X_ACCURACY = create("x_${Stats.ACCURACY.identifier.path}", XStatItem(Stats.ACCURACY))
|
||||
@JvmField val X_ATTACK = create("x_${Stats.ATTACK.identifier.path}", XStatItem(Stats.ATTACK))
|
||||
@JvmField val X_DEFENSE = create("x_${Stats.DEFENCE.identifier.path}", XStatItem(Stats.DEFENCE))
|
||||
@JvmField val X_SP_ATK = create("x_${Stats.SPECIAL_ATTACK.identifier.path}", XStatItem(Stats.SPECIAL_ATTACK))
|
||||
@JvmField val X_SP_DEF = create("x_${Stats.SPECIAL_DEFENCE.identifier.path}", XStatItem(Stats.SPECIAL_DEFENCE))
|
||||
@JvmField val X_SPEED = create("x_${Stats.SPEED.identifier.path}", XStatItem(Stats.SPEED))
|
||||
@JvmField val X_ACCURACY = create("x_${Stats.ACCURACY.identifier.path}", XStatItem(Stats.ACCURACY, block = CobblemonBlocks.X_ACCURACY))
|
||||
@JvmField val X_ATTACK = create("x_${Stats.ATTACK.identifier.path}", XStatItem(Stats.ATTACK, block = CobblemonBlocks.X_ATTACK))
|
||||
@JvmField val X_DEFENSE = create("x_${Stats.DEFENCE.identifier.path}", XStatItem(Stats.DEFENCE, block = CobblemonBlocks.X_DEFENCE))
|
||||
@JvmField val X_SP_ATK = create("x_${Stats.SPECIAL_ATTACK.identifier.path}", XStatItem(Stats.SPECIAL_ATTACK, block = CobblemonBlocks.X_SPECIAL_ATTACK))
|
||||
@JvmField val X_SP_DEF = create("x_${Stats.SPECIAL_DEFENCE.identifier.path}", XStatItem(Stats.SPECIAL_DEFENCE, block = CobblemonBlocks.X_SPECIAL_DEFENCE))
|
||||
@JvmField val X_SPEED = create("x_${Stats.SPEED.identifier.path}", XStatItem(Stats.SPEED, block = CobblemonBlocks.X_SPEED))
|
||||
|
||||
@JvmField val DIRE_HIT = create("dire_hit", DireHitItem())
|
||||
@JvmField val GUARD_SPEC = create("guard_spec", GuardSpecItem())
|
||||
@JvmField val DIRE_HIT = create("dire_hit", DireHitItem(block = CobblemonBlocks.DIRE_HIT))
|
||||
@JvmField val GUARD_SPEC = create("guard_spec", GuardSpecItem(block = CobblemonBlocks.GUARD_SPEC))
|
||||
|
||||
@JvmField val BURN_HEAL = create("burn_heal", StatusCureItem("item.cobblemon.burn_heal", Statuses.BURN))
|
||||
@JvmField val PARALYZE_HEAL = create("paralyze_heal", StatusCureItem("item.cobblemon.paralyze_heal", Statuses.PARALYSIS))
|
||||
@JvmField val ICE_HEAL = create("ice_heal", StatusCureItem("item.cobblemon.ice_heal", Statuses.FROZEN))
|
||||
@JvmField val ANTIDOTE = create("antidote", StatusCureItem("item.cobblemon.antidote", Statuses.POISON, Statuses.POISON_BADLY))
|
||||
@JvmField val AWAKENING = create("awakening", StatusCureItem("item.cobblemon.awakening", Statuses.SLEEP))
|
||||
@JvmField val BURN_HEAL = create("burn_heal", StatusCureItem("item.cobblemon.burn_heal", Statuses.BURN, block = CobblemonBlocks.BURN_HEAL))
|
||||
@JvmField val PARALYZE_HEAL = create("paralyze_heal", StatusCureItem(
|
||||
"item.cobblemon.paralyze_heal", Statuses.PARALYSIS, block = CobblemonBlocks.PARALYZE_HEAL))
|
||||
@JvmField val ICE_HEAL = create("ice_heal", StatusCureItem("item.cobblemon.ice_heal", Statuses.FROZEN, block = CobblemonBlocks.ICE_HEAL))
|
||||
@JvmField val ANTIDOTE = create("antidote", StatusCureItem("item.cobblemon.antidote", Statuses.POISON, Statuses.POISON_BADLY, block = CobblemonBlocks.ANTIDOTE))
|
||||
@JvmField val AWAKENING = create("awakening", StatusCureItem("item.cobblemon.awakening", Statuses.SLEEP, block = CobblemonBlocks.AWAKENING))
|
||||
|
||||
@JvmField val FULL_HEAL = create("full_heal", StatusCureItem("item.cobblemon.full_heal"))
|
||||
@JvmField val FULL_HEAL = create("full_heal", StatusCureItem("item.cobblemon.full_heal", block = CobblemonBlocks.FULL_HEAL))
|
||||
|
||||
@JvmField val ETHER = create("ether", EtherItem(max = false))
|
||||
@JvmField val MAX_ETHER = create("max_ether", EtherItem(max = true))
|
||||
@JvmField val ELIXIR = create("elixir", ElixirItem(max = false))
|
||||
@JvmField val MAX_ELIXIR = create("max_elixir", ElixirItem(max = true))
|
||||
@JvmField val ETHER = create("ether", EtherItem(max = false, block = CobblemonBlocks.ETHER))
|
||||
@JvmField val MAX_ETHER = create("max_ether", EtherItem(max = true, block = CobblemonBlocks.MAX_ETHER))
|
||||
@JvmField val ELIXIR = create("elixir", ElixirItem(max = false, block = CobblemonBlocks.ELIXIR))
|
||||
@JvmField val MAX_ELIXIR = create("max_elixir", ElixirItem(max = true, block = CobblemonBlocks.MAX_ELIXIR))
|
||||
|
||||
@JvmField
|
||||
val ABILITY_CAPSULE = this.create("ability_capsule", AbilityChangeItem(AbilityChanger.COMMON_ABILITY))
|
||||
@@ -898,11 +924,18 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField val CHOICE_SPECS = wearableItem("choice_specs")
|
||||
@JvmField val EXP_SHARE = wearableItem("exp_share")
|
||||
@JvmField val FOCUS_BAND = wearableItem("focus_band")
|
||||
@JvmField val KINGS_ROCK = wearableItem("kings_rock")
|
||||
@JvmField val KINGS_ROCK = wearableItem("kings_rock", block = CobblemonBlocks.KINGS_ROCK)
|
||||
@JvmField val MUSCLE_BAND = wearableItem("muscle_band")
|
||||
@JvmField val ROCKY_HELMET = wearableItem("rocky_helmet")
|
||||
@JvmField val SAFETY_GOGGLES = wearableItem("safety_goggles")
|
||||
@JvmField val WISE_GLASSES = wearableItem("wise_glasses")
|
||||
@JvmField val GALARICA_WREATH = wearableItem("galarica_wreath", block = CobblemonBlocks.GALARICA_WREATH)
|
||||
@JvmField val SHELL_HELMET = wearableItem("shell_helmet")
|
||||
@JvmField val NEVER_MELT_ICE = wearableItem("never_melt_ice", block = CobblemonBlocks.NEVER_MELT_ICE)
|
||||
@JvmField val CLEANSE_TAG = wearableItem("cleanse_tag", block = CobblemonBlocks.CLEANSE_TAG)
|
||||
@JvmField val SPELL_TAG = wearableItem("spell_tag", block = CobblemonBlocks.SPELL_TAG)
|
||||
@JvmField val COVERT_CLOAK = wearableItem("covert_cloak")
|
||||
@JvmField val SHARP_BEAK = wearableItem("sharp_beak")
|
||||
|
||||
// Held Items
|
||||
@JvmField
|
||||
@@ -922,7 +955,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val BLACK_SLUDGE = heldItem("black_sludge")
|
||||
@JvmField
|
||||
val BLUNDER_POLICY = heldItem("blunder_policy")
|
||||
val BLUNDER_POLICY = itemNameBlockItem("blunder_policy", CobblemonBlocks.BLUNDER_POLICY)
|
||||
@JvmField
|
||||
val CELL_BATTERY = heldItem("cell_battery")
|
||||
@JvmField
|
||||
@@ -930,17 +963,13 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val CHOICE_SCARF = heldItem("choice_scarf")
|
||||
@JvmField
|
||||
val CLEANSE_TAG = heldItem("cleanse_tag")
|
||||
@JvmField
|
||||
val CLEAR_AMULET = heldItem("clear_amulet")
|
||||
@JvmField
|
||||
val COVERT_CLOAK = heldItem("covert_cloak")
|
||||
@JvmField
|
||||
val DESTINY_KNOT = heldItem("destiny_knot")
|
||||
val DESTINY_KNOT = itemNameBlockItem("destiny_knot", CobblemonBlocks.DESTINY_KNOT)
|
||||
@JvmField
|
||||
val DRAGON_FANG = heldItem("dragon_fang")
|
||||
@JvmField
|
||||
val EJECT_BUTTON = heldItem("eject_button")
|
||||
val EJECT_BUTTON = itemNameBlockItem("eject_button", CobblemonBlocks.EJECT_BUTTON)
|
||||
@JvmField
|
||||
val EJECT_PACK = heldItem("eject_pack")
|
||||
@JvmField
|
||||
@@ -954,7 +983,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val FAIRY_FEATHER = heldItem("fairy_feather")
|
||||
@JvmField
|
||||
val FLAME_ORB = heldItem("flame_orb")
|
||||
val FLAME_ORB = itemNameBlockItem("flame_orb", CobblemonBlocks.FLAME_ORB)
|
||||
@JvmField
|
||||
val FLOAT_STONE = heldItem("float_stone")
|
||||
@JvmField
|
||||
@@ -964,19 +993,19 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val GRIP_CLAW = heldItem("grip_claw")
|
||||
@JvmField
|
||||
val HARD_STONE = heldItem("hard_stone")
|
||||
val HARD_STONE = itemNameBlockItem("hard_stone", CobblemonBlocks.HARD_STONE)
|
||||
@JvmField
|
||||
val HEAVY_DUTY_BOOTS = heldItem("heavy_duty_boots")
|
||||
@JvmField
|
||||
val IRON_BALL = heldItem("iron_ball")
|
||||
val IRON_BALL = itemNameBlockItem("iron_ball", CobblemonBlocks.IRON_BALL)
|
||||
@JvmField
|
||||
val LAGGING_TAIL = heldItem("lagging_tail")
|
||||
@JvmField
|
||||
val LEFTOVERS = compostableHeldItem("leftovers", null, 0.50f)
|
||||
@JvmField
|
||||
val LIFE_ORB = heldItem("life_orb")
|
||||
val LIFE_ORB = itemNameBlockItem("life_orb", CobblemonBlocks.LIFE_ORB)
|
||||
@JvmField
|
||||
val LIGHT_BALL = heldItem("light_ball")
|
||||
val LIGHT_BALL = itemNameBlockItem("light_ball", CobblemonBlocks.LIGHT_BALL)
|
||||
@JvmField
|
||||
val LIGHT_CLAY = heldItem("light_clay")
|
||||
@JvmField
|
||||
@@ -984,18 +1013,16 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val LUCKY_EGG = heldItem("lucky_egg")
|
||||
@JvmField
|
||||
val LUMINOUS_MOSS = heldItem("luminous_moss")
|
||||
val LUMINOUS_MOSS = itemNameBlockItem("luminous_moss", CobblemonBlocks.LUMINOUS_MOSS)
|
||||
@JvmField
|
||||
val MAGNET = heldItem("magnet")
|
||||
val MAGNET = itemNameBlockItem("magnet", CobblemonBlocks.MAGNET)
|
||||
@JvmField
|
||||
val METRONOME = heldItem("metronome")
|
||||
val METRONOME = itemNameBlockItem("metronome", CobblemonBlocks.METRONOME)
|
||||
@JvmField
|
||||
val MIRACLE_SEED = heldItem("miracle_seed")
|
||||
@JvmField
|
||||
val MYSTIC_WATER = heldItem("mystic_water")
|
||||
@JvmField
|
||||
val NEVER_MELT_ICE = heldItem("never_melt_ice")
|
||||
@JvmField
|
||||
val POISON_BARB = heldItem("poison_barb")
|
||||
@JvmField
|
||||
val POWER_ANKLET = heldItem("power_anklet")
|
||||
@@ -1020,14 +1047,12 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val RED_CARD = heldItem("red_card")
|
||||
@JvmField
|
||||
val RING_TARGET = heldItem("ring_target")
|
||||
val RING_TARGET = itemNameBlockItem("ring_target", CobblemonBlocks.RING_TARGET)
|
||||
@JvmField
|
||||
val ROOM_SERVICE = heldItem("room_service")
|
||||
@JvmField
|
||||
val SCOPE_LENS = heldItem("scope_lens")
|
||||
@JvmField
|
||||
val SHARP_BEAK = heldItem("sharp_beak")
|
||||
@JvmField
|
||||
val SHED_SHELL = heldItem("shed_shell")
|
||||
@JvmField
|
||||
val SHELL_BELL = heldItem("shell_bell")
|
||||
@@ -1038,9 +1063,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val SOFT_SAND = heldItem("soft_sand")
|
||||
@JvmField
|
||||
val SPELL_TAG = heldItem("spell_tag")
|
||||
@JvmField
|
||||
val SMOKE_BALL = heldItem("smoke_ball")
|
||||
val SMOKE_BALL = itemNameBlockItem("smoke_ball", CobblemonBlocks.SMOKE_BALL)
|
||||
@JvmField
|
||||
val SOOTHE_BELL = heldItem("soothe_bell")
|
||||
@JvmField
|
||||
@@ -1050,13 +1073,13 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val THROAT_SPRAY = heldItem("throat_spray")
|
||||
@JvmField
|
||||
val TOXIC_ORB = heldItem("toxic_orb")
|
||||
val TOXIC_ORB = itemNameBlockItem("toxic_orb", CobblemonBlocks.TOXIC_ORB)
|
||||
@JvmField
|
||||
val TWISTED_SPOON = heldItem("twisted_spoon")
|
||||
@JvmField
|
||||
val UTILITY_UMBRELLA = heldItem("utility_umbrella")
|
||||
@JvmField
|
||||
val WEAKNESS_POLICY = heldItem("weakness_policy")
|
||||
val WEAKNESS_POLICY = itemNameBlockItem("weakness_policy", CobblemonBlocks.WEAKNESS_POLICY)
|
||||
@JvmField
|
||||
val WIDE_LENS = heldItem("wide_lens")
|
||||
@JvmField
|
||||
@@ -1072,19 +1095,19 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val WHITE_HERB = compostableHeldItem("white_herb", null, 0.85F)
|
||||
@JvmField
|
||||
val BRIGHT_POWDER = heldItem("bright_powder")
|
||||
val BRIGHT_POWDER = itemNameBlockItem("bright_powder", CobblemonBlocks.BRIGHT_POWDER)
|
||||
@JvmField
|
||||
val METAL_POWDER = heldItem("metal_powder")
|
||||
val METAL_POWDER = itemNameBlockItem("metal_powder", CobblemonBlocks.METAL_POWDER)
|
||||
@JvmField
|
||||
val QUICK_POWDER = heldItem("quick_powder")
|
||||
val QUICK_POWDER = itemNameBlockItem("quick_powder", CobblemonBlocks.QUICK_POWDER)
|
||||
@JvmField
|
||||
val DAMP_ROCK = heldItem("damp_rock")
|
||||
val DAMP_ROCK = itemNameBlockItem("damp_rock", CobblemonBlocks.DAMP_ROCK)
|
||||
@JvmField
|
||||
val HEAT_ROCK = heldItem("heat_rock")
|
||||
val HEAT_ROCK = itemNameBlockItem("heat_rock", CobblemonBlocks.HEAT_ROCK)
|
||||
@JvmField
|
||||
val SMOOTH_ROCK = heldItem("smooth_rock")
|
||||
val SMOOTH_ROCK = itemNameBlockItem("smooth_rock", CobblemonBlocks.SMOOTH_ROCK)
|
||||
@JvmField
|
||||
val ICY_ROCK = heldItem("icy_rock")
|
||||
val ICY_ROCK = itemNameBlockItem("icy_rock", CobblemonBlocks.ICY_ROCK)
|
||||
|
||||
// Mulch
|
||||
@JvmField
|
||||
@@ -1152,11 +1175,11 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
val SUSPICIOUS_SHERD = itemWithRarity("suspicious_sherd", Rarity.UNCOMMON)
|
||||
|
||||
@JvmField
|
||||
val TUMBLESTONE = this.create("tumblestone", TumblestoneItem(Item.Properties(), CobblemonBlocks.SMALL_BUDDING_TUMBLESTONE))
|
||||
val TUMBLESTONE = this.create("tumblestone", TumblestoneItem(Properties(), CobblemonBlocks.SMALL_BUDDING_TUMBLESTONE))
|
||||
@JvmField
|
||||
val BLACK_TUMBLESTONE = this.create("black_tumblestone", TumblestoneItem(Item.Properties(), CobblemonBlocks.SMALL_BUDDING_BLACK_TUMBLESTONE))
|
||||
val BLACK_TUMBLESTONE = this.create("black_tumblestone", TumblestoneItem(Properties(), CobblemonBlocks.SMALL_BUDDING_BLACK_TUMBLESTONE))
|
||||
@JvmField
|
||||
val SKY_TUMBLESTONE = this.create("sky_tumblestone", TumblestoneItem(Item.Properties(), CobblemonBlocks.SMALL_BUDDING_SKY_TUMBLESTONE))
|
||||
val SKY_TUMBLESTONE = this.create("sky_tumblestone", TumblestoneItem(Properties(), CobblemonBlocks.SMALL_BUDDING_SKY_TUMBLESTONE))
|
||||
|
||||
@JvmField
|
||||
val SMALL_BUDDING_TUMBLESTONE = blockItem("small_budding_tumblestone", CobblemonBlocks.SMALL_BUDDING_TUMBLESTONE)
|
||||
@@ -1413,7 +1436,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val RELIC_COIN = noSettingsItem("relic_coin")
|
||||
@JvmField
|
||||
val RELIC_COIN_POUCH = blockItem("relic_coin_pouch", CobblemonBlocks.RELIC_COIN_POUCH)
|
||||
val RELIC_COIN_POUCH = itemNameBlockItem("relic_coin_pouch", CobblemonBlocks.RELIC_COIN_POUCH)
|
||||
@JvmField
|
||||
val RELIC_COIN_SACK = blockItem("relic_coin_sack", CobblemonBlocks.RELIC_COIN_SACK)
|
||||
|
||||
@@ -1457,13 +1480,13 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
//@JvmField
|
||||
//val BINDING_SOIL = blockItem("binding_soil", CobblemonBlocks.BINDING_SOIL)
|
||||
|
||||
private fun blockItem(name: String, block: Block, rarity: Rarity = Rarity.COMMON): BlockItem = this.create(name, BlockItem(block, Item.Properties().rarity(rarity)))
|
||||
private fun blockItem(name: String, block: Block, rarity: Rarity = Rarity.COMMON): BlockItem = this.create(name, BlockItem(block, Properties().rarity(rarity)))
|
||||
|
||||
private fun itemNameBlockItem(name: String, block: Block, rarity: Rarity = Rarity.COMMON): ItemNameBlockItem = this.create(name, ItemNameBlockItem(block, Item.Properties().rarity(rarity)))
|
||||
private fun itemNameBlockItem(name: String, block: Block, rarity: Rarity = Rarity.COMMON): ItemNameBlockItem = this.create(name, ItemNameBlockItem(block, Properties().rarity(rarity)))
|
||||
|
||||
private fun noSettingsItem(name: String): CobblemonItem = this.create(name, CobblemonItem(Item.Properties()))
|
||||
private fun noSettingsItem(name: String): CobblemonItem = this.create(name, CobblemonItem(Properties()))
|
||||
|
||||
private fun itemWithRarity(name: String, rarity: Rarity): CobblemonItem = this.create(name, CobblemonItem(Item.Properties().rarity(rarity)))
|
||||
private fun itemWithRarity(name: String, rarity: Rarity): CobblemonItem = this.create(name, CobblemonItem(Properties().rarity(rarity)))
|
||||
|
||||
fun berries() = this.berries.toMap()
|
||||
|
||||
@@ -1479,7 +1502,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
private fun candyItem(name: String, rarity: Rarity = Rarity.COMMON, calculator: CandyItem.Calculator): CandyItem = this.create(name, CandyItem(rarity, calculator))
|
||||
|
||||
private fun pokerodItem(pokeRodId: ResourceLocation, rarity: Rarity = Rarity.COMMON): PokerodItem {
|
||||
val settings = Item.Properties().stacksTo(1).durability(256).rarity(rarity)
|
||||
val settings = Properties().stacksTo(1).durability(256).rarity(rarity)
|
||||
val item = create(pokeRodId.path, PokerodItem(pokeRodId, settings))
|
||||
pokeRods.add(item)
|
||||
return item
|
||||
@@ -1491,15 +1514,14 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
return item
|
||||
}
|
||||
|
||||
private fun wearableItem(name: String, heldItemRemappedName: String? = null): CobblemonItem = create(
|
||||
name,
|
||||
WearableItem(name).also {
|
||||
wearables.add(it)
|
||||
if (heldItemRemappedName != null) {
|
||||
CobblemonHeldItemManager.registerRemap(it, heldItemRemappedName)
|
||||
}
|
||||
}
|
||||
)
|
||||
private fun wearableItem(name: String, heldItemRemappedName: String? = null, block: Block = Blocks.AIR): WearableItem =
|
||||
create(name,
|
||||
WearableItem(name, block).also {
|
||||
wearables.add(it)
|
||||
if (heldItemRemappedName != null) {
|
||||
CobblemonHeldItemManager.registerRemap(it, heldItemRemappedName)
|
||||
}
|
||||
})
|
||||
|
||||
private fun campfirePotItem(block: Block, color: CampfirePotColor): CampfirePotItem {
|
||||
val item = create("campfire_pot_${color.suffix}", CampfirePotItem(block, color))
|
||||
@@ -1538,7 +1560,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
foodPropertiesBuilder.usingConvertsTo(convertsToOnUse.item)
|
||||
}
|
||||
|
||||
val properties = Item.Properties()
|
||||
val properties = Properties()
|
||||
.stacksTo(stacksTo)
|
||||
.food(foodPropertiesBuilder.build())
|
||||
|
||||
@@ -1547,7 +1569,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
|
||||
private fun heldItem(name: String, remappedName: String? = null): CobblemonItem = create(
|
||||
name,
|
||||
CobblemonItem(Item.Properties()).also {
|
||||
CobblemonItem(Properties()).also {
|
||||
if (remappedName != null) {
|
||||
CobblemonHeldItemManager.registerRemap(it, remappedName)
|
||||
}
|
||||
@@ -1623,7 +1645,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
}
|
||||
|
||||
private fun compostableItem(name: String, item: Item? = null, increaseLevelChance: Float = .65f): Item {
|
||||
val createdItem = this.create(name, item ?: CobblemonItem(Item.Properties()))
|
||||
val createdItem = this.create(name, item ?: CobblemonItem(Properties()))
|
||||
compostable(createdItem, increaseLevelChance)
|
||||
return createdItem
|
||||
}
|
||||
@@ -1646,7 +1668,12 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
return createdItem
|
||||
}
|
||||
|
||||
private fun potionItem(name: String, type: PotionType, block: Block): PotionItem {
|
||||
val item = PotionItem(type, block)
|
||||
return create(name, item)
|
||||
}
|
||||
|
||||
private fun foodItem(nutrition: Int, saturationModifier: Float): Item {
|
||||
return CobblemonItem(Item.Properties().food(FoodProperties.Builder().nutrition(nutrition).saturationModifier(saturationModifier).build()))
|
||||
return CobblemonItem(Properties().food(FoodProperties.Builder().nutrition(nutrition).saturationModifier(saturationModifier).build()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,11 +37,10 @@ object CobblemonItemTags {
|
||||
@JvmField val BLACK_TUMBLESTONE_BRICKS = create("black_tumblestone_bricks")
|
||||
@JvmField val BLACK_TUMBLESTONES = create("black_tumblestones")
|
||||
@JvmField val BOATS = create("boats")
|
||||
/** This tag is used for Fossil Machine natural materials */
|
||||
@JvmField val COOKED_MEAT = create("cooked_meat")
|
||||
@JvmField val DAWN_STONE_ORES = create("dawn_stone_ores")
|
||||
@JvmField val POTTERY_SHERDS = create("decorated_pot_sherds")
|
||||
@JvmField val DEEP_SEAS = create("deep_seas")
|
||||
@JvmField val DISPLAY_CASE_ITEMS = create("display_case_items")
|
||||
@JvmField val DUSK_STONE_ORES = create("dusk_stone_ores")
|
||||
@JvmField val ETHERS = create("ethers")
|
||||
@JvmField val EVOLUTION_ITEMS = create("evolution_items")
|
||||
@@ -57,6 +56,7 @@ object CobblemonItemTags {
|
||||
@JvmField val HANGING_SIGNS = create("hanging_signs")
|
||||
@JvmField val HERBS = create("herbs")
|
||||
@JvmField val ICE_STONE_ORES = create("ice_stone_ores")
|
||||
@JvmField val ITEM_BLOCKS = create("item_blocks")
|
||||
@JvmField val LEAF_STONE_ORES = create("leaf_stone_ores")
|
||||
@JvmField val MACHINES = create("machines")
|
||||
@JvmField val MINT_LEAF = create("mint_leaf")
|
||||
@@ -66,15 +66,13 @@ object CobblemonItemTags {
|
||||
@JvmField val MOON_STONE_ORES = create("moon_stone_ores")
|
||||
@JvmField val MUTATED_BERRIES = create("mutated_berries")
|
||||
@JvmField val PLANTS = create("plants")
|
||||
@JvmField val PLAQUES = create("plaques")
|
||||
@JvmField val POKE_BALLS = create("poke_balls")
|
||||
@JvmField val POKE_RODS = create("poke_rods")
|
||||
@JvmField val POKEDEX = create("pokedex")
|
||||
@JvmField val POKEDEX_SCREEN = create("pokedex_screen")
|
||||
@JvmField val POKE_FOOD = create("poke_food")
|
||||
@JvmField val POTIONS = create("potions")
|
||||
@JvmField val PROTEIN_INGREDIENTS = create("protein_ingredients")
|
||||
/** See [COOKED_MEAT] */
|
||||
@JvmField val RAW_MEAT = create("raw_meat")
|
||||
@JvmField val RED_TUMBLESTONE_BRICKS = create("red_tumblestone_bricks")
|
||||
@JvmField val RED_TUMBLESTONES = create("red_tumblestones")
|
||||
@JvmField val REMEDIES = create("remedies")
|
||||
|
||||
@@ -19,6 +19,7 @@ import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.BlockItem
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.BaseEntityBlock
|
||||
@@ -110,6 +111,8 @@ class DisplayCaseBlock(settings: Properties) : BaseEntityBlock(settings) {
|
||||
|
||||
override fun getRenderShape(state: BlockState) = RenderShape.MODEL
|
||||
|
||||
override fun getShadeBrightness(state: BlockState, level: BlockGetter, pos: BlockPos): Float {return 0.75f}
|
||||
|
||||
override fun getAnalogOutputSignal(state: BlockState, world: Level, pos: BlockPos): Int {
|
||||
val stack = (world.getBlockEntity(pos) as DisplayCaseBlockEntity).getStack()
|
||||
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
class DecorativeItemBlock(settings: Properties, val itemType: ItemType) : Block(settings), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
enum class ItemType : StringRepresentable {
|
||||
TEAPOT,
|
||||
TEACUP,
|
||||
MOSS,
|
||||
KNOT,
|
||||
POUCH,
|
||||
GENERIC_7x6,
|
||||
GENERIC_8x,
|
||||
GENERIC_8x4;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
companion object {
|
||||
val CODEC = StringRepresentable.fromEnum(::values)
|
||||
}
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<DecorativeItemBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(ctx: BlockPlaceContext): BlockState? {
|
||||
var blockState = defaultBlockState()
|
||||
.setValue(WATERLOGGED, ctx.level.getFluidState(ctx.clickedPos).type == Fluids.WATER)
|
||||
val worldView = ctx.level
|
||||
val blockPos = ctx.clickedPos
|
||||
ctx.nearestLookingDirections.forEach { direction ->
|
||||
if (direction.axis.isHorizontal) {
|
||||
blockState = blockState.setValue(FACING, direction.opposite) as BlockState
|
||||
if (blockState.canSurvive(worldView, blockPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (itemType) {
|
||||
ItemType.TEAPOT -> {
|
||||
when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> TEAPOT_SOUTH
|
||||
Direction.WEST -> TEAPOT_WEST
|
||||
Direction.EAST -> TEAPOT_EAST
|
||||
else -> TEAPOT_NORTH
|
||||
}
|
||||
}
|
||||
ItemType.KNOT -> {
|
||||
when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> KNOT_SOUTH
|
||||
Direction.WEST -> KNOT_WEST
|
||||
Direction.EAST -> KNOT_EAST
|
||||
else -> KNOT_NORTH
|
||||
}
|
||||
}
|
||||
ItemType.TEACUP -> TEACUP
|
||||
ItemType.MOSS -> MOSS
|
||||
ItemType.POUCH -> POUCH
|
||||
ItemType.GENERIC_7x6 -> ITEM_7x6
|
||||
ItemType.GENERIC_8x4 -> ITEM_8x4
|
||||
else -> ITEM_8x
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (direction == state.getValue(FACING) && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(HORIZONTAL_FACING, rotation.rotate(state.getValue(HORIZONTAL_FACING)))
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isPathfindable(state: BlockState, type: PathComputationType): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<DecorativeItemBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec(),
|
||||
ItemType.CODEC.fieldOf("itemType").forGetter(DecorativeItemBlock::itemType)
|
||||
).apply(it, ::DecorativeItemBlock) }
|
||||
|
||||
val ITEM_8x = Shapes.box(0.25, 0.0, 0.25, 0.75, 0.5, 0.75)
|
||||
val ITEM_8x4 = Shapes.box(0.25, 0.0, 0.25, 0.75, 0.25, 0.75)
|
||||
val ITEM_7x6 = Shapes.box(0.28125, 0.0, 0.28125, 0.71875, 0.375, 0.71875)
|
||||
val POUCH = Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.3125, 0.6875)
|
||||
private val TEACUP = Shapes.or(
|
||||
Shapes.box(0.375, 0.0, 0.375, 0.625, 0.0625, 0.625),
|
||||
Shapes.box(0.3125, 0.0, 0.3125, 0.625, 0.25, 0.375),
|
||||
Shapes.box(0.375, 0.0, 0.625, 0.6875, 0.25, 0.6875),
|
||||
Shapes.box(0.625, 0.0, 0.3125, 0.6875, 0.25, 0.625),
|
||||
Shapes.box(0.3125, 0.0, 0.375, 0.375, 0.25, 0.6875)
|
||||
)
|
||||
private val MOSS = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.75, 0.25, 0.75),
|
||||
Shapes.box(0.3125, 0.25, 0.3125, 0.6875, 0.4375, 0.6875)
|
||||
)
|
||||
val KNOT_NORTH = Shapes.box(0.375, 0.0, 0.375, 0.75, 0.375, 0.75)
|
||||
val KNOT_WEST = Shapes.box(0.375, 0.0, 0.25, 0.75, 0.375, 0.625)
|
||||
val KNOT_SOUTH = Shapes.box(0.25, 0.0, 0.25, 0.625, 0.375, 0.625)
|
||||
val KNOT_EAST = Shapes.box(0.25, 0.0, 0.375, 0.625, 0.375, 0.75)
|
||||
private val TEAPOT_NORTH = Shapes.or(
|
||||
Shapes.box(0.3125, 0.5, 0.3125, 0.6875, 0.625, 0.6875),
|
||||
Shapes.box(0.4375, 0.625, 0.4375, 0.5625, 0.6875, 0.5625),
|
||||
Shapes.box(0.25, 0.0625, 0.25, 0.75, 0.5, 0.75),
|
||||
Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.0625, 0.6875),
|
||||
Shapes.box(0.75, 0.125, 0.40625, 0.875, 0.375, 0.59375)
|
||||
)
|
||||
private val TEAPOT_EAST = Shapes.or(
|
||||
Shapes.box(0.3125, 0.5, 0.3125, 0.6875, 0.625, 0.6875),
|
||||
Shapes.box(0.4375, 0.625, 0.4375, 0.5625, 0.6875, 0.5625),
|
||||
Shapes.box(0.25, 0.0625, 0.25, 0.75, 0.5, 0.75),
|
||||
Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.0625, 0.6875),
|
||||
Shapes.box(0.40625, 0.125, 0.75, 0.59375, 0.375, 0.875)
|
||||
)
|
||||
private val TEAPOT_SOUTH = Shapes.or(
|
||||
Shapes.box(0.3125, 0.5, 0.3125, 0.6875, 0.625, 0.6875),
|
||||
Shapes.box(0.4375, 0.625, 0.4375, 0.5625, 0.6875, 0.5625),
|
||||
Shapes.box(0.25, 0.0625, 0.25, 0.75, 0.5, 0.75),
|
||||
Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.0625, 0.6875),
|
||||
Shapes.box(0.125, 0.125, 0.40625, 0.25, 0.375, 0.59375)
|
||||
)
|
||||
private val TEAPOT_WEST = Shapes.or(
|
||||
Shapes.box(0.3125, 0.5, 0.3125, 0.6875, 0.625, 0.6875),
|
||||
Shapes.box(0.4375, 0.625, 0.4375, 0.5625, 0.6875, 0.5625),
|
||||
Shapes.box(0.25, 0.0625, 0.25, 0.75, 0.5, 0.75),
|
||||
Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.0625, 0.6875),
|
||||
Shapes.box(0.40625, 0.125, 0.125, 0.59375, 0.375, 0.25)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,301 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.AttachFace
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.gameevent.GameEvent
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class EjectButtonBlock(properties : Properties) : FaceAttachedHorizontalDirectionalBlock(properties), SimpleWaterloggedBlock {
|
||||
private val ticksToStayPressed: Int
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(FACE, AttachFace.FLOOR)
|
||||
.setValue(POWERED, false)
|
||||
.setValue(WATERLOGGED, false))
|
||||
this.ticksToStayPressed = 20
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(FACE)
|
||||
builder.add(POWERED)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<EjectButtonBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
}
|
||||
|
||||
//May need some clean up, ended up just copying this straight from the original class so I could inject the waterlogging stuff to make it properly work, but it does look a bit ugly
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val var2 = context.nearestLookingDirections
|
||||
val var3 = var2.size
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
|
||||
for (var4 in 0 until var3) {
|
||||
val direction = var2[var4]
|
||||
var blockState = if (direction.axis === Direction.Axis.Y) {
|
||||
defaultBlockState().setValue(
|
||||
FACE,
|
||||
if (direction == Direction.UP) AttachFace.CEILING else AttachFace.FLOOR
|
||||
)
|
||||
.setValue(FACING, context.horizontalDirection.opposite).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
} else {
|
||||
(defaultBlockState().setValue(FACE, AttachFace.WALL) as BlockState).setValue(
|
||||
FACING,
|
||||
direction.opposite
|
||||
).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
if (blockState.canSurvive(context.level, context.clickedPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
val direction = state.getValue(FACING)
|
||||
return when (state.getValue(FACE)) {
|
||||
AttachFace.FLOOR -> return if (state.getValue(POWERED)) {FLOOR_POWERED} else {FLOOR_UNPOWERED}
|
||||
AttachFace.WALL -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> return if (state.getValue(POWERED)) {EAST_WALL_POWERED} else {EAST_WALL_UNPOWERED}
|
||||
Direction.WEST -> return if (state.getValue(POWERED)) {WEST_WALL_POWERED} else {WEST_WALL_UNPOWERED}
|
||||
Direction.SOUTH -> return if (state.getValue(POWERED)) {SOUTH_WALL_POWERED} else {SOUTH_WALL_UNPOWERED}
|
||||
Direction.NORTH -> return if (state.getValue(POWERED)) {NORTH_WALL_POWERED} else {NORTH_WALL_UNPOWERED}
|
||||
else -> {FLOOR_UNPOWERED}
|
||||
}
|
||||
}
|
||||
AttachFace.CEILING -> return if (state.getValue(POWERED)) {CEILING_POWERED} else {CEILING_UNPOWERED}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCollisionShape(
|
||||
state: BlockState,
|
||||
level: BlockGetter,
|
||||
pos: BlockPos,
|
||||
context: CollisionContext
|
||||
): VoxelShape {
|
||||
val direction = state.getValue(FACING)
|
||||
return when (state.getValue(FACE)) {
|
||||
AttachFace.FLOOR -> {FLOOR_PANEL}
|
||||
AttachFace.WALL -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> {EAST_WALL_PANEL}
|
||||
Direction.WEST -> {WEST_WALL_PANEL}
|
||||
Direction.SOUTH -> {SOUTH_WALL_PANEL}
|
||||
Direction.NORTH -> {NORTH_WALL_PANEL}
|
||||
else -> {FLOOR_PANEL}
|
||||
}
|
||||
}
|
||||
AttachFace.CEILING -> {CEILING_PANEL}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (getConnectedDirection(state).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
//It does in fact override, and crashes if it isn't overriding. Don't trust this.
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState?, level: LevelReader?, pos: BlockPos): Boolean {
|
||||
return when (state?.getValue(FACE)) {
|
||||
AttachFace.CEILING -> {
|
||||
level!!.getBlockState(pos.above()).isSolid
|
||||
}
|
||||
AttachFace.WALL -> {
|
||||
level!!.getBlockState(pos.relative(state.getValue(FACING).opposite)).isSolid
|
||||
}
|
||||
AttachFace.FLOOR -> {
|
||||
level!!.getBlockState(pos.below()).isSolid
|
||||
}
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
|
||||
override fun useWithoutItem(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hitResult: BlockHitResult
|
||||
): InteractionResult {
|
||||
if (state.getValue(POWERED) as Boolean) {
|
||||
return InteractionResult.CONSUME
|
||||
} else {
|
||||
this.press(state, level, pos, player)
|
||||
return InteractionResult.sidedSuccess(level.isClientSide)
|
||||
}
|
||||
}
|
||||
|
||||
fun press(state: BlockState, level: Level, pos: BlockPos, player: Player?) {
|
||||
level.setBlock(pos, state.setValue(POWERED, true) as BlockState, 3)
|
||||
this.updateNeighbours(state, level, pos)
|
||||
level.scheduleTick(pos, this, this.ticksToStayPressed)
|
||||
//this.playSound(player, level, pos, true)
|
||||
level.gameEvent(player, GameEvent.BLOCK_ACTIVATE, pos)
|
||||
}
|
||||
|
||||
private fun updateNeighbours(state: BlockState, level: Level, pos: BlockPos) {
|
||||
level.updateNeighborsAt(pos, this)
|
||||
level.updateNeighborsAt(pos.relative(getConnectedDirection(state).getOpposite()), this)
|
||||
}
|
||||
|
||||
override fun onRemove(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
newState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
if (!movedByPiston && !state.`is`(newState.getBlock())) {
|
||||
if (state.getValue(POWERED) as Boolean) {
|
||||
this.updateNeighbours(state, level, pos)
|
||||
}
|
||||
|
||||
super.onRemove(state, level, pos, newState, movedByPiston)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getSignal(state: BlockState, level: BlockGetter, pos: BlockPos, direction: Direction): Int {
|
||||
return if (state.getValue(POWERED) as Boolean) 15 else 0
|
||||
}
|
||||
|
||||
override fun getDirectSignal(state: BlockState, level: BlockGetter, pos: BlockPos, direction: Direction): Int {
|
||||
return if (state.getValue(POWERED) as Boolean && getConnectedDirection(state) == direction) 15 else 0
|
||||
}
|
||||
|
||||
override fun isSignalSource(state: BlockState): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun tick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
if (state.getValue(POWERED)) {
|
||||
this.checkPressed(state, level, pos)
|
||||
}
|
||||
}
|
||||
|
||||
protected fun checkPressed(state: BlockState, level: Level, pos: BlockPos) {
|
||||
val abstractArrow = null
|
||||
val bl = false
|
||||
val bl2 = state.getValue(POWERED) as Boolean
|
||||
if (bl != bl2) {
|
||||
level.setBlock(pos, state.setValue(POWERED, bl) as BlockState, 3)
|
||||
this.updateNeighbours(state, level, pos)
|
||||
//this.playSound(null as Player?, level, pos, bl)
|
||||
level.gameEvent(abstractArrow, if (bl) GameEvent.BLOCK_ACTIVATE else GameEvent.BLOCK_DEACTIVATE, pos)
|
||||
}
|
||||
|
||||
if (bl) {
|
||||
level.scheduleTick(BlockPos(pos), this, this.ticksToStayPressed)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<EjectButtonBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec()
|
||||
).apply(it, ::EjectButtonBlock) }
|
||||
val POWERED = BooleanProperty.create("powered")
|
||||
|
||||
val FLOOR_UNPOWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.875, 0.1875, 0.875),
|
||||
Shapes.box(0.375, 0.1875, 0.375, 0.625, 0.3125, 0.625) )
|
||||
val FLOOR_POWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.875, 0.1875, 0.875),
|
||||
Shapes.box(0.375, 0.1875, 0.375, 0.625, 0.25, 0.625) )
|
||||
val FLOOR_PANEL = Shapes.box(0.125, 0.0, 0.125, 0.875, 0.1875, 0.875)
|
||||
val CEILING_UNPOWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.8125, 0.125, 0.875, 1.0, 0.875),
|
||||
Shapes.box(0.375, 0.6875, 0.375, 0.625, 0.8125, 0.625) )
|
||||
val CEILING_POWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.8125, 0.125, 0.875, 1.0, 0.875),
|
||||
Shapes.box(0.375, 0.75, 0.375, 0.625, 0.8125, 0.625) )
|
||||
val CEILING_PANEL = Shapes.box(0.125, 0.8125, 0.125, 0.875, 1.0, 0.875)
|
||||
|
||||
val EAST_WALL_UNPOWERED = Shapes.or(
|
||||
Shapes.box(0.0, 0.125, 0.125, 0.1875, 0.875, 0.875),
|
||||
Shapes.box(0.1875, 0.375, 0.375, 0.3125, 0.625, 0.625) )
|
||||
val EAST_WALL_POWERED = Shapes.or(
|
||||
Shapes.box(0.0, 0.125, 0.125, 0.1875, 0.875, 0.875),
|
||||
Shapes.box(0.1875, 0.375, 0.375, 0.25, 0.625, 0.625) )
|
||||
val EAST_WALL_PANEL = Shapes.box(0.0, 0.125, 0.125, 0.1875, 0.875, 0.875)
|
||||
val WEST_WALL_UNPOWERED = Shapes.or(
|
||||
Shapes.box(0.8125, 0.125, 0.125, 1.0, 0.875, 0.875),
|
||||
Shapes.box(0.6875, 0.375, 0.375, 0.8125, 0.625, 0.625) )
|
||||
val WEST_WALL_POWERED = Shapes.or(
|
||||
Shapes.box(0.8125, 0.125, 0.125, 1.0, 0.875, 0.875),
|
||||
Shapes.box(0.75, 0.375, 0.375, 0.8125, 0.625, 0.625) )
|
||||
val WEST_WALL_PANEL = Shapes.box(0.8125, 0.125, 0.125, 1.0, 0.875, 0.875)
|
||||
val NORTH_WALL_UNPOWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.125, 0.8125, 0.875, 0.875, 1.0),
|
||||
Shapes.box(0.375, 0.375, 0.6875, 0.625, 0.625, 0.8125) )
|
||||
val NORTH_WALL_POWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.125, 0.8125, 0.875, 0.875, 1.0),
|
||||
Shapes.box(0.375, 0.375, 0.75, 0.625, 0.625, 0.8125) )
|
||||
val NORTH_WALL_PANEL = Shapes.box(0.125, 0.125, 0.8125, 0.875, 0.875, 1.0)
|
||||
val SOUTH_WALL_UNPOWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.125, 0.0, 0.875, 0.875, 0.1875),
|
||||
Shapes.box(0.375, 0.375, 0.1875, 0.625, 0.625, 0.3125) )
|
||||
val SOUTH_WALL_POWERED = Shapes.or(
|
||||
Shapes.box(0.125, 0.125, 0.0, 0.875, 0.875, 0.1875),
|
||||
Shapes.box(0.375, 0.375, 0.1875, 0.625, 0.625, 0.25) )
|
||||
val SOUTH_WALL_PANEL = Shapes.box(0.125, 0.125, 0.0, 0.875, 0.875, 0.1875)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.AttachFace
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class GalaricaWreathBlock(properties : Properties) : FaceAttachedHorizontalDirectionalBlock(properties), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(FACE, AttachFace.WALL)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(FACE)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
//May need some clean up, ended up just copying this straight from the original class so I could inject the waterlogging stuff to make it properly work, but it does look a bit ugly
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val var2 = context.nearestLookingDirections
|
||||
val var3 = var2.size
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
|
||||
for (var4 in 0 until var3) {
|
||||
val direction = var2[var4]
|
||||
var blockState = if (direction.axis === Direction.Axis.Y) {
|
||||
defaultBlockState().setValue(
|
||||
FACE,
|
||||
if (direction == Direction.UP) AttachFace.CEILING else AttachFace.FLOOR
|
||||
)
|
||||
.setValue(FACING, context.horizontalDirection.opposite).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
} else {
|
||||
(defaultBlockState().setValue(FACE, AttachFace.WALL) as BlockState).setValue(
|
||||
FACING,
|
||||
direction.opposite
|
||||
).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
if (blockState.canSurvive(context.level, context.clickedPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<GalaricaWreathBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
val direction = state.getValue(FACING)
|
||||
return when (state.getValue(FACE)) {
|
||||
AttachFace.FLOOR -> {
|
||||
FLOOR
|
||||
}
|
||||
|
||||
AttachFace.WALL -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> EAST_WALL
|
||||
Direction.WEST -> WEST_WALL
|
||||
Direction.SOUTH -> SOUTH_WALL
|
||||
Direction.NORTH, Direction.UP, Direction.DOWN -> NORTH_WALL
|
||||
}
|
||||
}
|
||||
|
||||
AttachFace.CEILING -> return if (direction.axis === Direction.Axis.X) {
|
||||
HANGING_NS
|
||||
} else {
|
||||
HANGING_EW
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (getConnectedDirection(state).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
//It does in fact override, and crashes if it isn't overriding. Don't trust this.
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState?, level: LevelReader?, pos: BlockPos): Boolean {
|
||||
when (state?.getValue(FACE)) {
|
||||
AttachFace.CEILING -> {
|
||||
val direction = getConnectedDirection(state!!).opposite
|
||||
return canSupportCenter(level!!, pos.relative(direction), direction.opposite)
|
||||
}
|
||||
AttachFace.WALL -> {
|
||||
return level!!.getBlockState(pos.relative(state.getValue(FACING).opposite)).isSolid
|
||||
}
|
||||
else -> return true
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<GalaricaWreathBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec()
|
||||
).apply(it, ::GalaricaWreathBlock) }
|
||||
|
||||
val FLOOR = Shapes.box(0.171875, 0.0, 0.171875, 0.828125, 0.203125, 0.828125)
|
||||
val EAST_WALL = Shapes.box(0.0, 0.171875, 0.171875, 0.203125, 0.828125, 0.828125)
|
||||
val WEST_WALL = Shapes.box(0.796875, 0.171875, 0.171875, 1.0, 0.828125, 0.828125)
|
||||
val NORTH_WALL = Shapes.box(0.171875, 0.171875, 0.796875, 0.828125, 0.828125, 1.0)
|
||||
val SOUTH_WALL = Shapes.box(0.171875, 0.171875, 0.0, 0.828125, 0.828125, 0.203125)
|
||||
val HANGING_EW = Shapes.box(0.171875, 0.171875, 0.390625, 0.828125, 0.828125, 0.609375)
|
||||
val HANGING_NS = Shapes.box(0.390625, 0.171875, 0.171875, 0.609375, 0.828125, 0.828125)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.gameevent.GameEvent
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
class MetronomeBlock(settings: Properties) : Block(settings), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(ACTIVE, false)
|
||||
.setValue(WATERLOGGED, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(ctx: BlockPlaceContext): BlockState? {
|
||||
var blockState = defaultBlockState().setValue(ACTIVE, false)
|
||||
.setValue(WATERLOGGED, ctx.level.getFluidState(ctx.clickedPos).type == Fluids.WATER)
|
||||
val worldView = ctx.level
|
||||
val blockPos = ctx.clickedPos
|
||||
ctx.nearestLookingDirections.forEach { direction ->
|
||||
if (direction.axis.isHorizontal) {
|
||||
blockState = blockState.setValue(FACING, direction.opposite) as BlockState
|
||||
if (blockState.canSurvive(worldView, blockPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING)
|
||||
builder.add(ACTIVE)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
world: BlockGetter,
|
||||
pos: BlockPos,
|
||||
context: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (state.getValue(HorizontalDirectionalBlock.FACING)) {
|
||||
Direction.NORTH -> NORTH_OUTLINE
|
||||
Direction.EAST -> EAST_OUTLINE
|
||||
Direction.WEST -> WEST_OUTLINE
|
||||
else -> SOUTH_OUTLINE
|
||||
}
|
||||
}
|
||||
|
||||
override fun useWithoutItem(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hitResult: BlockHitResult
|
||||
): InteractionResult {
|
||||
if (level.isClientSide) {
|
||||
level.setBlockAndUpdate(pos, state.cycle(ACTIVE))
|
||||
return InteractionResult.SUCCESS
|
||||
} else {
|
||||
this.push(state, level, pos, null as Player?)
|
||||
return InteractionResult.CONSUME
|
||||
}
|
||||
}
|
||||
|
||||
fun push(state: BlockState, level: Level, pos: BlockPos?, player: Player?) {
|
||||
var state = state
|
||||
state = state.cycle(ACTIVE)
|
||||
level.setBlock(pos!!, state, 3)
|
||||
level.gameEvent(player, if (state.getValue(ACTIVE)) GameEvent.BLOCK_ACTIVATE else GameEvent.BLOCK_DEACTIVATE, pos)
|
||||
}
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getAnalogOutputSignal(state: BlockState, level: Level, pos: BlockPos): Int {
|
||||
return if (level.getBlockState(pos).getValue(ACTIVE) as Boolean) 4 else 0
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(HORIZONTAL_FACING, rotation.rotate(state.getValue(HORIZONTAL_FACING)))
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isPathfindable(state: BlockState, type: PathComputationType): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (direction == state.getValue(FACING) && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC = simpleCodec(::MetronomeBlock)
|
||||
val ACTIVE = BooleanProperty.create("active")
|
||||
|
||||
val NORTH_OUTLINE = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.375, 0.75, 0.25, 0.5),
|
||||
Shapes.box(0.25, 0.0, 0.5, 0.75, 0.8125, 0.75)
|
||||
)
|
||||
val SOUTH_OUTLINE = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.5, 0.75, 0.25, 0.625),
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.75, 0.8125, 0.5)
|
||||
)
|
||||
val EAST_OUTLINE = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.25, 0.625, 0.25, 0.75),
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.5, 0.8125, 0.75)
|
||||
)
|
||||
val WEST_OUTLINE = Shapes.or(
|
||||
Shapes.box(0.375, 0.0, 0.25, 0.5, 0.25, 0.75),
|
||||
Shapes.box(0.5, 0.0, 0.25, 0.75, 0.8125, 0.75)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.AttachFace
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class PlaqueBlock(properties : Properties) : FaceAttachedHorizontalDirectionalBlock(properties), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(FACE, AttachFace.WALL)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(FACE)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
//May need some clean up, ended up just copying this straight from the original class so I could inject the waterlogging stuff to make it properly work, but it does look a bit ugly
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val var2 = context.nearestLookingDirections
|
||||
val var3 = var2.size
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
|
||||
for (var4 in 0 until var3) {
|
||||
val direction = var2[var4]
|
||||
var blockState = if (direction.axis === Direction.Axis.Y) {
|
||||
defaultBlockState().setValue(
|
||||
FACE,
|
||||
if (direction == Direction.UP) AttachFace.CEILING else AttachFace.FLOOR
|
||||
)
|
||||
.setValue(FACING, context.horizontalDirection.opposite).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
} else {
|
||||
(defaultBlockState().setValue(FACE, AttachFace.WALL) as BlockState).setValue(
|
||||
FACING,
|
||||
direction.opposite
|
||||
).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
if (blockState.canSurvive(context.level, context.clickedPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<PlaqueBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
val direction = state.getValue(FACING)
|
||||
return when (state.getValue(FACE)) {
|
||||
AttachFace.FLOOR -> return if (direction.axis === Direction.Axis.X) {
|
||||
FLOOR_NS
|
||||
} else {
|
||||
FLOOR_EW
|
||||
}
|
||||
|
||||
AttachFace.WALL -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> EAST_WALL
|
||||
Direction.WEST -> WEST_WALL
|
||||
Direction.SOUTH -> SOUTH_WALL
|
||||
Direction.NORTH, Direction.UP, Direction.DOWN -> NORTH_WALL
|
||||
}
|
||||
}
|
||||
|
||||
AttachFace.CEILING -> return if (direction.axis === Direction.Axis.X) {
|
||||
HANGING_NS
|
||||
} else {
|
||||
HANGING_EW
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (getConnectedDirection(state).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
//It does in fact override, and crashes if it isn't overriding. Don't trust this.
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState?, level: LevelReader?, pos: BlockPos): Boolean {
|
||||
when (state?.getValue(FACE)) {
|
||||
AttachFace.CEILING -> {
|
||||
val direction = getConnectedDirection(state!!).opposite
|
||||
return canSupportCenter(level!!, pos.relative(direction), direction.opposite)
|
||||
}
|
||||
AttachFace.WALL -> {
|
||||
return level!!.getBlockState(pos.relative(state.getValue(FACING).opposite)).isSolid
|
||||
}
|
||||
AttachFace.FLOOR -> {
|
||||
return level!!.getBlockState(pos.below()).isSolid
|
||||
}
|
||||
else -> return true
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<PlaqueBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec()
|
||||
).apply(it, ::PlaqueBlock) }
|
||||
|
||||
val FLOOR_EW = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.46875, 0.3125, 0.125, 0.53125),
|
||||
Shapes.box(0.6875, 0.0, 0.46875, 0.875, 0.125, 0.53125),
|
||||
Shapes.box(0.0625, 0.125, 0.4375, 0.9375, 0.875, 0.5625)
|
||||
)
|
||||
val FLOOR_NS = Shapes.or(
|
||||
Shapes.box(0.46875, 0.0, 0.125, 0.53125, 0.125, 0.3125),
|
||||
Shapes.box(0.46875, 0.0, 0.6875, 0.53125, 0.125, 0.875),
|
||||
Shapes.box(0.4375, 0.125, 0.0625, 0.5625, 0.875, 0.9375)
|
||||
)
|
||||
val EAST_WALL = Shapes.box(0.0, 0.125, 0.0625, 0.0625, 0.875, 0.9375)
|
||||
val WEST_WALL = Shapes.box(0.9375, 0.125, 0.0625, 1.0, 0.875, 0.9375)
|
||||
val NORTH_WALL = Shapes.box(0.0625, 0.125, 0.9375, 0.9375, 0.875, 1.0)
|
||||
val SOUTH_WALL = Shapes.box(0.0625, 0.125, 0.0, 0.9375, 0.875, 0.0625)
|
||||
val HANGING_NS = Shapes.box(0.4375, 0.0, 0.0625, 0.5625, 0.75, 0.9375)
|
||||
val HANGING_EW = Shapes.box(0.0625, 0.0, 0.4375, 0.9375, 0.75, 0.5625)
|
||||
}
|
||||
}
|
||||
+247
@@ -0,0 +1,247 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.AttachFace
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class SixFaceDecorativeItemBlock(properties : Properties, val sixFaceItemType: SixFaceItemType) : FaceAttachedHorizontalDirectionalBlock(properties), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(FACE, AttachFace.FLOOR)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
enum class SixFaceItemType : StringRepresentable {
|
||||
MAGNET,
|
||||
GENERIC_8x;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
companion object {
|
||||
val CODEC = StringRepresentable.fromEnum(::values)
|
||||
}
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(FACE)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
//May need some clean up, ended up just copying this straight from the original class so I could inject the waterlogging stuff to make it properly work, but it does look a bit ugly
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val var2 = context.nearestLookingDirections
|
||||
val var3 = var2.size
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
|
||||
for (var4 in 0 until var3) {
|
||||
val direction = var2[var4]
|
||||
var blockState = if (direction.axis === Direction.Axis.Y) {
|
||||
defaultBlockState().setValue(
|
||||
FACE,
|
||||
if (direction == Direction.UP) AttachFace.CEILING else AttachFace.FLOOR
|
||||
)
|
||||
.setValue(FACING, context.horizontalDirection.opposite).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
} else {
|
||||
(defaultBlockState().setValue(FACE, AttachFace.WALL) as BlockState).setValue(
|
||||
FACING,
|
||||
direction.opposite
|
||||
).setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
if (blockState.canSurvive(context.level, context.clickedPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<SixFaceDecorativeItemBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
val direction = state.getValue(FACING)
|
||||
return when (sixFaceItemType) {
|
||||
SixFaceItemType.MAGNET -> {
|
||||
when (state.getValue(FACE)) {
|
||||
AttachFace.FLOOR -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> EAST_FLOOR_MAGNET
|
||||
Direction.WEST -> WEST_FLOOR_MAGNET
|
||||
Direction.SOUTH -> SOUTH_FLOOR_MAGNET
|
||||
Direction.NORTH, Direction.UP, Direction.DOWN -> NORTH_FLOOR_MAGNET
|
||||
}
|
||||
}
|
||||
AttachFace.WALL -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> EAST_WALL_MAGNET
|
||||
Direction.WEST -> WEST_WALL_MAGNET
|
||||
Direction.SOUTH -> SOUTH_WALL_MAGNET
|
||||
Direction.NORTH, Direction.UP, Direction.DOWN -> NORTH_WALL_MAGNET
|
||||
}
|
||||
}
|
||||
AttachFace.CEILING -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> EAST_CEILING_MAGNET
|
||||
Direction.WEST -> WEST_CEILING_MAGNET
|
||||
Direction.SOUTH -> SOUTH_CEILING_MAGNET
|
||||
Direction.NORTH, Direction.UP, Direction.DOWN -> NORTH_CEILING_MAGNET
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
when (state.getValue(FACE)) {
|
||||
AttachFace.FLOOR -> {
|
||||
FLOOR_8x
|
||||
}
|
||||
AttachFace.WALL -> {
|
||||
when (direction) {
|
||||
Direction.EAST -> EAST_WALL_8x
|
||||
Direction.WEST -> WEST_WALL_8x
|
||||
Direction.SOUTH -> SOUTH_WALL_8x
|
||||
Direction.NORTH, Direction.UP, Direction.DOWN -> NORTH_WALL_8x
|
||||
}
|
||||
}
|
||||
AttachFace.CEILING -> CEILING_8x
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (getConnectedDirection(state).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState?, level: LevelReader?, pos: BlockPos): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<SixFaceDecorativeItemBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec(),
|
||||
SixFaceItemType.CODEC.fieldOf("sixFaceItemType").forGetter(SixFaceDecorativeItemBlock::sixFaceItemType)
|
||||
).apply(it, ::SixFaceDecorativeItemBlock) }
|
||||
|
||||
val FLOOR_8x = Shapes.box(0.25, 0.0, 0.25, 0.75, 0.5, 0.75)
|
||||
val EAST_WALL_8x = Shapes.box(0.0, 0.25, 0.25, 0.5, 0.75, 0.75)
|
||||
val WEST_WALL_8x = Shapes.box(0.5, 0.25, 0.25, 1.0, 0.75, 0.75)
|
||||
val NORTH_WALL_8x = Shapes.box(0.25, 0.25, 0.5, 0.75, 0.75, 1.0)
|
||||
val SOUTH_WALL_8x = Shapes.box(0.25, 0.25, 0.0, 0.75, 0.75, 0.5)
|
||||
val CEILING_8x = Shapes.box(0.25, 0.5, 0.25, 0.75, 1.0, 0.75)
|
||||
|
||||
val NORTH_FLOOR_MAGNET = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.4375, 0.1875, 0.5625),
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.75, 0.1875, 0.5625),
|
||||
Shapes.box(0.25, 0.0, 0.5625, 0.75, 0.1875, 0.75)
|
||||
)
|
||||
val EAST_FLOOR_MAGNET = Shapes.or(
|
||||
Shapes.box(0.4375, 0.0, 0.25, 0.75, 0.1875, 0.4375),
|
||||
Shapes.box(0.4375, 0.0, 0.5625, 0.75, 0.1875, 0.75),
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.4375, 0.1875, 0.75)
|
||||
)
|
||||
val SOUTH_FLOOR_MAGNET = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.4375, 0.75, 0.1875, 0.75),
|
||||
Shapes.box(0.25, 0.0, 0.4375, 0.4375, 0.1875, 0.75),
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.75, 0.1875, 0.4375)
|
||||
)
|
||||
val WEST_FLOOR_MAGNET = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.5625, 0.5625, 0.1875, 0.75),
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.5625, 0.1875, 0.4375),
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.75, 0.1875, 0.75)
|
||||
)
|
||||
|
||||
val NORTH_WALL_MAGNET = Shapes.or(
|
||||
Shapes.box(0.25, 0.25, 0.8125, 0.4375, 0.5625, 1.0),
|
||||
Shapes.box(0.5625, 0.25, 0.8125, 0.75, 0.5625, 1.0),
|
||||
Shapes.box(0.25, 0.5625, 0.8125, 0.75, 0.75, 1.0)
|
||||
)
|
||||
val EAST_WALL_MAGNET = Shapes.or(
|
||||
Shapes.box(0.0, 0.25, 0.25, 0.1875, 0.5625, 0.4375),
|
||||
Shapes.box(0.0, 0.25, 0.5625, 0.1875, 0.5625, 0.75),
|
||||
Shapes.box(0.0, 0.5625, 0.25, 0.1875, 0.75, 0.75)
|
||||
)
|
||||
val SOUTH_WALL_MAGNET = Shapes.or(
|
||||
Shapes.box(0.5625, 0.25, 0.0, 0.75, 0.5625, 0.1875),
|
||||
Shapes.box(0.25, 0.25, 0.0, 0.4375, 0.5625, 0.1875),
|
||||
Shapes.box(0.25, 0.5625, 0.0, 0.75, 0.75, 0.1875)
|
||||
)
|
||||
val WEST_WALL_MAGNET = Shapes.or(
|
||||
Shapes.box(0.8125, 0.25, 0.5625, 1.0, 0.5625, 0.75),
|
||||
Shapes.box(0.8125, 0.25, 0.25, 1.0, 0.5625, 0.4375),
|
||||
Shapes.box(0.8125, 0.5625, 0.25, 1.0, 0.75, 0.75)
|
||||
)
|
||||
|
||||
val NORTH_CEILING_MAGNET = Shapes.or(
|
||||
Shapes.box(0.25, 0.8125, 0.25, 0.4375, 1.0, 0.5625),
|
||||
Shapes.box(0.5625, 0.8125, 0.25, 0.75, 1.0, 0.5625),
|
||||
Shapes.box(0.25, 0.8125, 0.5625, 0.75, 1.0, 0.75)
|
||||
)
|
||||
val EAST_CEILING_MAGNET = Shapes.or(
|
||||
Shapes.box(0.4375, 0.8125, 0.25, 0.75, 1.0, 0.4375),
|
||||
Shapes.box(0.4375, 0.8125, 0.5625, 0.75, 1.0, 0.75),
|
||||
Shapes.box(0.25, 0.8125, 0.25, 0.4375, 1.1875, 0.75)
|
||||
)
|
||||
val SOUTH_CEILING_MAGNET = Shapes.or(
|
||||
Shapes.box(0.5625, 0.8125, 0.4375, 0.75, 1.0, 0.75),
|
||||
Shapes.box(0.25, 0.8125, 0.4375, 0.4375, 1.0, 0.75),
|
||||
Shapes.box(0.25, 0.8125, 0.25, 0.75, 1.0, 0.4375)
|
||||
)
|
||||
val WEST_CEILING_MAGNET = Shapes.or(
|
||||
Shapes.box(0.25, 0.8125, 0.5625, 0.5625, 1.0, 0.75),
|
||||
Shapes.box(0.25, 0.8125, 0.25, 0.5625, 1.0, 0.4375),
|
||||
Shapes.box(0.5625, 0.8125, 0.25, 0.75, 1.0, 0.75)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,708 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.IntegerProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
import kotlin.math.min
|
||||
|
||||
class StackableItemBlock(settings: Properties, val stackableItemType: StackableItemType) : Block(settings), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(ITEMS, 1)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
enum class StackableItemType : StringRepresentable {
|
||||
UPGRADE,
|
||||
METAL_COAT,
|
||||
POTION,
|
||||
MAX_POTION,
|
||||
RESTORE,
|
||||
ETHER,
|
||||
BATTLE_X,
|
||||
VITAMIN,
|
||||
GENERIC_8x;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
companion object {
|
||||
val CODEC = StringRepresentable.fromEnum(::values)
|
||||
}
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<StackableItemBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState {
|
||||
val blockState = context.level.getBlockState(context.clickedPos)
|
||||
return if (blockState.`is`(this)) blockState.setValue(
|
||||
ITEMS,
|
||||
min(MAX_ITEMS, (blockState.getValue(ITEMS) + 1))
|
||||
) else defaultBlockState().setValue(FACING, context.horizontalDirection.opposite).setValue(WATERLOGGED, context.level.getFluidState(context.clickedPos).type == Fluids.WATER)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING)
|
||||
builder.add(ITEMS)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (stackableItemType) {
|
||||
StackableItemType.UPGRADE -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> UPGRADE_DOUBLE
|
||||
3 -> UPGRADE_TRIPLE
|
||||
4 -> UPGRADE_QUARTET
|
||||
else -> UPGRADE_SINGLE
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.METAL_COAT -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> METAL_DOUBLE_EW
|
||||
else -> METAL_DOUBLE_NS
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> METAL_TRIPLE_S
|
||||
Direction.WEST -> METAL_TRIPLE_W
|
||||
Direction.EAST -> METAL_TRIPLE_E
|
||||
else -> METAL_TRIPLE_N
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> METAL_QUARTET_EW
|
||||
else -> METAL_QUARTET_NS
|
||||
}
|
||||
else -> METAL_SINGLE
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.POTION -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> POTION_DOUBLE_EW
|
||||
else -> POTION_DOUBLE_NS
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> POTION_TRIPLE_SOUTH
|
||||
Direction.WEST -> POTION_TRIPLE_WEST
|
||||
Direction.EAST -> POTION_TRIPLE_EAST
|
||||
else -> POTION_TRIPLE_NORTH
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> POTION_QUARTET_SOUTH
|
||||
Direction.WEST -> POTION_QUARTET_WEST
|
||||
Direction.EAST -> POTION_QUARTET_EAST
|
||||
else -> POTION_QUARTET_NORTH
|
||||
}
|
||||
else -> POTION_SINGLE
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.MAX_POTION -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> MAX_POTION_DOUBLE_SOUTH
|
||||
Direction.WEST -> MAX_POTION_DOUBLE_WEST
|
||||
Direction.EAST -> MAX_POTION_DOUBLE_EAST
|
||||
else -> MAX_POTION_DOUBLE_NORTH
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> MAX_POTION_TRIPLE_SOUTH
|
||||
Direction.WEST -> MAX_POTION_TRIPLE_WEST
|
||||
Direction.EAST -> MAX_POTION_TRIPLE_EAST
|
||||
else -> MAX_POTION_TRIPLE_NORTH
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> MAX_POTION_QUARTET_SOUTH
|
||||
Direction.WEST -> MAX_POTION_QUARTET_WEST
|
||||
Direction.EAST -> MAX_POTION_QUARTET_EAST
|
||||
else -> MAX_POTION_QUARTET_NORTH
|
||||
}
|
||||
else -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> MAX_POTION_SINGLE_EW
|
||||
else -> MAX_POTION_SINGLE_NS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.RESTORE -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> RESTORE_DOUBLE_EW
|
||||
else -> RESTORE_DOUBLE_NS
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> RESTORE_TRIPLE_SOUTH
|
||||
Direction.WEST -> RESTORE_TRIPLE_WEST
|
||||
Direction.EAST -> RESTORE_TRIPLE_EAST
|
||||
else -> RESTORE_TRIPLE_NORTH
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> RESTORE_QUARTET_SOUTH
|
||||
Direction.WEST -> RESTORE_QUARTET_WEST
|
||||
Direction.EAST -> RESTORE_QUARTET_EAST
|
||||
else -> RESTORE_QUARTET_NORTH
|
||||
}
|
||||
else -> RESTORE_SINGLE
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.ETHER -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
1 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> ETHER_SINGLE_EW
|
||||
else -> ETHER_SINGLE_NS
|
||||
}
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> ETHER_DOUBLE_SOUTH
|
||||
Direction.WEST -> ETHER_DOUBLE_WEST
|
||||
Direction.EAST -> ETHER_DOUBLE_EAST
|
||||
else -> ETHER_DOUBLE_NORTH
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> ETHER_TRIPLE_SOUTH
|
||||
Direction.WEST -> ETHER_TRIPLE_WEST
|
||||
Direction.EAST -> ETHER_TRIPLE_EAST
|
||||
else -> ETHER_TRIPLE_NORTH
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> ETHER_QUARTET_SOUTH
|
||||
Direction.WEST -> ETHER_QUARTET_WEST
|
||||
Direction.EAST -> ETHER_QUARTET_EAST
|
||||
else -> ETHER_QUARTET_NORTH
|
||||
}
|
||||
else -> ETHER_SINGLE_NS
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.BATTLE_X -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> BATTLE_DOUBLE_EW
|
||||
else -> BATTLE_DOUBLE_NS
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> BATTLE_TRIPLE_S
|
||||
Direction.WEST -> BATTLE_TRIPLE_W
|
||||
Direction.EAST -> BATTLE_TRIPLE_E
|
||||
else -> BATTLE_TRIPLE_N
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> BATTLE_QUARTET_EW
|
||||
else -> BATTLE_QUARTET_NS
|
||||
}
|
||||
else -> BATTLE_SINGLE
|
||||
}
|
||||
}
|
||||
|
||||
StackableItemType.VITAMIN -> {
|
||||
when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.WEST, Direction.EAST -> VITAMIN_DOUBLE_EW
|
||||
else -> VITAMIN_DOUBLE_NS
|
||||
}
|
||||
3 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> VITAMIN_TRIPLE_SOUTH
|
||||
Direction.WEST -> VITAMIN_TRIPLE_WEST
|
||||
Direction.EAST -> VITAMIN_TRIPLE_EAST
|
||||
else -> VITAMIN_TRIPLE_NORTH
|
||||
}
|
||||
4 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> VITAMIN_QUARTET_SOUTH
|
||||
Direction.WEST -> VITAMIN_QUARTET_WEST
|
||||
Direction.EAST -> VITAMIN_QUARTET_EAST
|
||||
else -> VITAMIN_QUARTET_NORTH
|
||||
}
|
||||
else -> VITAMIN_SINGLE
|
||||
}
|
||||
}
|
||||
|
||||
else -> ITEM_8x
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (direction == state.getValue(FACING) && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
public override fun canBeReplaced(state: BlockState, useContext: BlockPlaceContext): Boolean {
|
||||
return if (!useContext.isSecondaryUseActive && useContext.itemInHand.`is`(this.asItem()) && state.getValue(
|
||||
ITEMS
|
||||
) <= MAX_ITEMS
|
||||
) true else super.canBeReplaced(state, useContext)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(HORIZONTAL_FACING, rotation.rotate(state.getValue(HORIZONTAL_FACING)))
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isPathfindable(state: BlockState, type: PathComputationType): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<StackableItemBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec(),
|
||||
StackableItemType.CODEC.fieldOf("stackableItemType").forGetter(StackableItemBlock::stackableItemType)
|
||||
).apply(it, ::StackableItemBlock) }
|
||||
|
||||
val ITEMS = IntegerProperty.create("items", 1, 4)
|
||||
const val MAX_ITEMS: Int = 4
|
||||
|
||||
//Non-Specific Hitbox Shapes
|
||||
val ITEM_8x = Shapes.box(0.25, 0.0, 0.25, 0.75, 0.5, 0.75)
|
||||
val ITEM_16xS = Shapes.box(0.0, 0.0, 0.0, 1.0, 0.5, 1.0)
|
||||
val ITEM_8x16 = Shapes.box(0.25, 0.0, 0.0, 0.75, 0.5, 1.0)
|
||||
val ITEM_16x8 = Shapes.box(0.0, 0.0, 0.25, 1.0, 0.5, 0.75)
|
||||
|
||||
private val TRIANGLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.0, 0.0, 0.5, 1.0, 0.5, 1.0),
|
||||
Shapes.box(0.25, 0.0, 0.0, 0.75, 0.5, 0.5)
|
||||
)
|
||||
private val TRIANGLE_EAST = Shapes.or(
|
||||
Shapes.box(0.0, 0.0, 0.0, 0.5, 0.5, 1.0),
|
||||
Shapes.box(0.5, 0.0, 0.25, 1.0, 0.5, 0.75)
|
||||
)
|
||||
private val TRIANGLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.0, 0.0, 0.0, 1.0, 0.5, 0.5),
|
||||
Shapes.box(0.25, 0.0, 0.5, 0.75, 0.5, 1.0)
|
||||
)
|
||||
private val TRIANGLE_WEST = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.0, 1.0, 0.5, 1.0),
|
||||
Shapes.box(0.0, 0.0, 0.25, 0.5, 0.5, 0.75)
|
||||
)
|
||||
|
||||
//Specific Hitbox Shapes
|
||||
val UPGRADE_SINGLE = Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.125, 0.6875)
|
||||
val UPGRADE_DOUBLE = Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.25, 0.6875)
|
||||
val UPGRADE_TRIPLE = Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.375, 0.6875)
|
||||
val UPGRADE_QUARTET = Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.5, 0.6875)
|
||||
|
||||
val METAL_SINGLE = Shapes.box(0.3125, 0.0, 0.3125, 0.6875, 0.375, 0.6875)
|
||||
val METAL_DOUBLE_NS = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.875, 0.375, 0.5),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.5, 0.375, 0.875)
|
||||
)
|
||||
val METAL_DOUBLE_EW = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.5, 0.875, 0.375, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.5, 0.375, 0.5)
|
||||
)
|
||||
val METAL_TRIPLE_N = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.0625, 0.6875, 0.375, 0.4375),
|
||||
Shapes.box(0.5625, 0.0, 0.5, 0.9375, 0.375, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.5, 0.375, 0.875)
|
||||
)
|
||||
val METAL_TRIPLE_E = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.3125, 0.9375, 0.375, 0.6875),
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.5, 0.375, 0.9375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.5, 0.375, 0.5)
|
||||
)
|
||||
val METAL_TRIPLE_S = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.5625, 0.6875, 0.375, 0.9375),
|
||||
Shapes.box(0.0625, 0.0, 0.125, 0.4375, 0.375, 0.5),
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.875, 0.375, 0.5)
|
||||
)
|
||||
val METAL_TRIPLE_W = Shapes.or(
|
||||
Shapes.box(0.0625, 0.0, 0.3125, 0.4375, 0.375, 0.6875),
|
||||
Shapes.box(0.5, 0.0, 0.0625, 0.875, 0.375, 0.4375),
|
||||
Shapes.box(0.5, 0.0, 0.5, 0.875, 0.375, 0.875)
|
||||
)
|
||||
val METAL_QUARTET_NS = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.0625, 0.9375, 0.375, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.5, 0.375, 0.5),
|
||||
Shapes.box(0.5, 0.0, 0.5, 0.875, 0.375, 0.875),
|
||||
Shapes.box(0.0625, 0.0, 0.5625, 0.4375, 0.375, 0.9375)
|
||||
)
|
||||
val METAL_QUARTET_EW = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.9375, 0.375, 0.9375),
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.875, 0.375, 0.5),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.5, 0.375, 0.875),
|
||||
Shapes.box(0.0625, 0.0, 0.0625, 0.4375, 0.375, 0.4375)
|
||||
)
|
||||
|
||||
val POTION_SINGLE = Shapes.box(0.34375, 0.0, 0.34375, 0.65625, 0.625, 0.65625)
|
||||
val POTION_DOUBLE_EW = Shapes.or(
|
||||
Shapes.box(0.4375, 0.0, 0.5625, 0.75, 0.625, 0.875),
|
||||
Shapes.box(0.25, 0.0, 0.125, 0.5625, 0.625, 0.4375)
|
||||
)
|
||||
val POTION_DOUBLE_NS = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.875, 0.625, 0.5625),
|
||||
Shapes.box(0.125, 0.0, 0.4375, 0.4375, 0.625, 0.75)
|
||||
)
|
||||
val POTION_TRIPLE_EAST = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.375, 0.875, 0.625, 0.6875),
|
||||
Shapes.box(0.1875, 0.0, 0.125, 0.5, 0.625, 0.4375),
|
||||
Shapes.box(0.0625, 0.0, 0.5625, 0.375, 0.625, 0.875)
|
||||
)
|
||||
val POTION_TRIPLE_WEST = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.3125, 0.4375, 0.625, 0.625),
|
||||
Shapes.box(0.5, 0.0, 0.5625, 0.8125, 0.625, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.9375, 0.625, 0.4375)
|
||||
)
|
||||
val POTION_TRIPLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.375, 0.0, 0.125, 0.6875, 0.625, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.4375, 0.625, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.625, 0.875, 0.625, 0.9375)
|
||||
)
|
||||
val POTION_TRIPLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.5625, 0.625, 0.625, 0.875),
|
||||
Shapes.box(0.5625, 0.0, 0.1875, 0.875, 0.625, 0.5),
|
||||
Shapes.box(0.125, 0.0, 0.0625, 0.4375, 0.625, 0.375)
|
||||
)
|
||||
val POTION_QUARTET_EAST = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.5, 0.875, 0.625, 0.8125),
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.8125, 0.625, 0.4375),
|
||||
Shapes.box(0.0625, 0.0, 0.0625, 0.375, 0.625, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.4375, 0.625, 0.875)
|
||||
)
|
||||
val POTION_QUARTET_WEST = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.4375, 0.625, 0.5),
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.5, 0.625, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.625, 0.9375, 0.625, 0.9375),
|
||||
Shapes.box(0.5625, 0.0, 0.125, 0.875, 0.625, 0.4375)
|
||||
)
|
||||
val POTION_QUARTET_NORTH = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.8125, 0.625, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.4375, 0.625, 0.5),
|
||||
Shapes.box(0.0625, 0.0, 0.625, 0.375, 0.625, 0.9375),
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.875, 0.625, 0.875)
|
||||
)
|
||||
val POTION_QUARTET_SOUTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.5, 0.625, 0.875),
|
||||
Shapes.box(0.5625, 0.0, 0.5, 0.875, 0.625, 0.8125),
|
||||
Shapes.box(0.625, 0.0, 0.0625, 0.9375, 0.625, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.4375, 0.625, 0.4375)
|
||||
)
|
||||
|
||||
val MAX_POTION_SINGLE_NS = Shapes.box(0.34375, 0.0, 0.3125, 0.65625, 0.5, 0.6875)
|
||||
val MAX_POTION_SINGLE_EW = Shapes.box(0.3125, 0.0, 0.34375, 0.6875, 0.5, 0.65625)
|
||||
val MAX_POTION_DOUBLE_EAST = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.5, 0.6875, 0.5, 0.8125),
|
||||
Shapes.box(0.25, 0.0, 0.125, 0.625, 0.5, 0.4375)
|
||||
)
|
||||
val MAX_POTION_DOUBLE_WEST = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.1875, 0.6875, 0.5, 0.5),
|
||||
Shapes.box(0.375, 0.0, 0.5625, 0.75, 0.5, 0.875)
|
||||
)
|
||||
val MAX_POTION_DOUBLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.3125, 0.8125, 0.5, 0.6875),
|
||||
Shapes.box(0.125, 0.0, 0.375, 0.4375, 0.5, 0.75)
|
||||
)
|
||||
val MAX_POTION_DOUBLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.3125, 0.5, 0.5, 0.6875),
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.875, 0.5, 0.625)
|
||||
)
|
||||
val MAX_POTION_TRIPLE_EAST = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.625, 0.5625, 0.5, 0.9375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.5, 0.5, 0.4375),
|
||||
Shapes.box(0.5625, 0.0, 0.3125, 0.9375, 0.5, 0.625)
|
||||
)
|
||||
val MAX_POTION_TRIPLE_WEST = Shapes.or(
|
||||
Shapes.box(0.4375, 0.0, 0.0625, 0.8125, 0.5, 0.375),
|
||||
Shapes.box(0.5, 0.0, 0.5625, 0.875, 0.5, 0.875),
|
||||
Shapes.box(0.0625, 0.0, 0.375, 0.4375, 0.5, 0.6875)
|
||||
)
|
||||
val MAX_POTION_TRIPLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.4375, 0.9375, 0.5, 0.8125),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.4375, 0.5, 0.875),
|
||||
Shapes.box(0.3125, 0.0, 0.0625, 0.625, 0.5, 0.4375)
|
||||
)
|
||||
val MAX_POTION_TRIPLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.0625, 0.0, 0.1875, 0.375, 0.5, 0.5625),
|
||||
Shapes.box(0.5625, 0.0, 0.125, 0.875, 0.5, 0.5),
|
||||
Shapes.box(0.375, 0.0, 0.5625, 0.6875, 0.5, 0.9375)
|
||||
)
|
||||
val MAX_POTION_QUARTET_EAST = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.625, 0.5, 0.5, 0.9375),
|
||||
Shapes.box(0.0625, 0.0, 0.125, 0.4375, 0.5, 0.4375),
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.9375, 0.5, 0.875),
|
||||
Shapes.box(0.5, 0.0, 0.1875, 0.875, 0.5, 0.5)
|
||||
)
|
||||
val MAX_POTION_QUARTET_WEST = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.0625, 0.875, 0.5, 0.375),
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.9375, 0.5, 0.875),
|
||||
Shapes.box(0.0625, 0.0, 0.125, 0.4375, 0.5, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.5, 0.5, 0.8125)
|
||||
)
|
||||
val MAX_POTION_QUARTET_NORTH = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.5, 0.9375, 0.5, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.4375, 0.5, 0.9375),
|
||||
Shapes.box(0.5625, 0.0, 0.0625, 0.875, 0.5, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.125, 0.5, 0.5, 0.5)
|
||||
)
|
||||
val MAX_POTION_QUARTET_SOUTH = Shapes.or(
|
||||
Shapes.box(0.0625, 0.0, 0.125, 0.375, 0.5, 0.5),
|
||||
Shapes.box(0.5625, 0.0, 0.0625, 0.875, 0.5, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.4375, 0.5, 0.9375),
|
||||
Shapes.box(0.5, 0.0, 0.5, 0.8125, 0.5, 0.875)
|
||||
)
|
||||
|
||||
val RESTORE_SINGLE = Shapes.box(0.375, 0.0, 0.375, 0.625, 0.5, 0.625)
|
||||
val RESTORE_DOUBLE_EW = Shapes.or(
|
||||
Shapes.box(0.375, 0.0, 0.1875, 0.625, 0.5, 0.4375),
|
||||
Shapes.box(0.375, 0.0, 0.5625, 0.625, 0.5, 0.8125)
|
||||
)
|
||||
val RESTORE_DOUBLE_NS = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.375, 0.4375, 0.5, 0.625),
|
||||
Shapes.box(0.5625, 0.0, 0.375, 0.8125, 0.5, 0.625)
|
||||
)
|
||||
val RESTORE_TRIPLE_EAST = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.1875, 0.4375, 0.5, 0.4375),
|
||||
Shapes.box(0.25, 0.0, 0.5625, 0.5, 0.5, 0.8125),
|
||||
Shapes.box(0.625, 0.0, 0.375, 0.875, 0.5, 0.625)
|
||||
)
|
||||
val RESTORE_TRIPLE_WEST = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.8125, 0.5, 0.8125),
|
||||
Shapes.box(0.5, 0.0, 0.1875, 0.75, 0.5, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.375, 0.375, 0.5, 0.625)
|
||||
)
|
||||
val RESTORE_TRIPLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.4375, 0.5, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.5, 0.8125, 0.5, 0.75),
|
||||
Shapes.box(0.375, 0.0, 0.125, 0.625, 0.5, 0.375)
|
||||
)
|
||||
val RESTORE_TRIPLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.1875, 0.8125, 0.5, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.25, 0.4375, 0.5, 0.5),
|
||||
Shapes.box(0.375, 0.0, 0.625, 0.625, 0.5, 0.875)
|
||||
)
|
||||
val RESTORE_QUARTET_EAST = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.375, 0.5, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.625, 0.4375, 0.5, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.5, 0.875, 0.5, 0.75),
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.875, 0.5, 0.375)
|
||||
)
|
||||
val RESTORE_QUARTET_WEST = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.5625, 0.875, 0.5, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.125, 0.8125, 0.5, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.25, 0.375, 0.5, 0.5),
|
||||
Shapes.box(0.125, 0.0, 0.625, 0.375, 0.5, 0.875)
|
||||
)
|
||||
val RESTORE_QUARTET_NORTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.625, 0.4375, 0.5, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.5625, 0.875, 0.5, 0.8125),
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.75, 0.5, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.375, 0.5, 0.375)
|
||||
)
|
||||
val RESTORE_QUARTET_SOUTH = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.125, 0.8125, 0.5, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.375, 0.5, 0.4375),
|
||||
Shapes.box(0.25, 0.0, 0.625, 0.5, 0.5, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.625, 0.875, 0.5, 0.875)
|
||||
)
|
||||
|
||||
val ETHER_SINGLE_EW = Shapes.box(0.34375, 0.0, 0.40625, 0.65625, 0.4375, 0.59375)
|
||||
val ETHER_SINGLE_NS = Shapes.box(0.40625, 0.0, 0.34375, 0.59375, 0.4375, 0.65625)
|
||||
val ETHER_DOUBLE_EAST = Shapes.or(
|
||||
Shapes.box(0.375, 0.0, 0.5, 0.6875, 0.4375, 0.6875),
|
||||
Shapes.box(0.25, 0.0, 0.25, 0.5625, 0.4375, 0.4375)
|
||||
)
|
||||
val ETHER_DOUBLE_WEST = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.3125, 0.625, 0.4375, 0.5),
|
||||
Shapes.box(0.4375, 0.0, 0.5625, 0.75, 0.4375, 0.75)
|
||||
)
|
||||
val ETHER_DOUBLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.3125, 0.6875, 0.4375, 0.625),
|
||||
Shapes.box(0.25, 0.0, 0.4375, 0.4375, 0.4375, 0.75)
|
||||
)
|
||||
val ETHER_DOUBLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.375, 0.5, 0.4375, 0.6875),
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.75, 0.4375, 0.5625)
|
||||
)
|
||||
val ETHER_TRIPLE_EAST = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.625, 0.5625, 0.4375, 0.8125),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.4375, 0.4375, 0.375),
|
||||
Shapes.box(0.5, 0.0, 0.375, 0.8125, 0.4375, 0.5625)
|
||||
)
|
||||
val ETHER_TRIPLE_WEST = Shapes.or(
|
||||
Shapes.box(0.4375, 0.0, 0.1875, 0.75, 0.4375, 0.375),
|
||||
Shapes.box(0.5625, 0.0, 0.625, 0.875, 0.4375, 0.8125),
|
||||
Shapes.box(0.1875, 0.0, 0.4375, 0.5, 0.4375, 0.625)
|
||||
)
|
||||
val ETHER_TRIPLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.4375, 0.8125, 0.4375, 0.75),
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.375, 0.4375, 0.875),
|
||||
Shapes.box(0.375, 0.0, 0.1875, 0.5625, 0.4375, 0.5)
|
||||
)
|
||||
val ETHER_TRIPLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.25, 0.375, 0.4375, 0.5625),
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.8125, 0.4375, 0.4375),
|
||||
Shapes.box(0.4375, 0.0, 0.5, 0.625, 0.4375, 0.8125)
|
||||
)
|
||||
val ETHER_QUARTET_EAST = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.4375, 0.4375, 0.75),
|
||||
Shapes.box(0.0625, 0.0, 0.1875, 0.375, 0.4375, 0.375),
|
||||
Shapes.box(0.5625, 0.0, 0.625, 0.875, 0.4375, 0.8125),
|
||||
Shapes.box(0.5, 0.0, 0.125, 0.8125, 0.4375, 0.3125)
|
||||
)
|
||||
val ETHER_QUARTET_WEST = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.875, 0.4375, 0.4375),
|
||||
Shapes.box(0.625, 0.0, 0.625, 0.9375, 0.4375, 0.8125),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.4375, 0.4375, 0.375),
|
||||
Shapes.box(0.1875, 0.0, 0.6875, 0.5, 0.4375, 0.875)
|
||||
)
|
||||
val ETHER_QUARTET_NORTH = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.75, 0.4375, 0.875),
|
||||
Shapes.box(0.1875, 0.0, 0.625, 0.375, 0.4375, 0.9375),
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.8125, 0.4375, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.3125, 0.4375, 0.5)
|
||||
)
|
||||
val ETHER_QUARTET_SOUTH = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.125, 0.4375, 0.4375, 0.4375),
|
||||
Shapes.box(0.625, 0.0, 0.0625, 0.8125, 0.4375, 0.375),
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.375, 0.4375, 0.875),
|
||||
Shapes.box(0.6875, 0.0, 0.5, 0.875, 0.4375, 0.8125)
|
||||
)
|
||||
|
||||
val BATTLE_SINGLE = Shapes.box(0.375, 0.0, 0.375, 0.625, 0.4375, 0.625)
|
||||
val BATTLE_DOUBLE_NS = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.4375, 0.8125, 0.4375, 0.6875),
|
||||
Shapes.box(0.1875, 0.0, 0.3125, 0.4375, 0.4375, 0.5625)
|
||||
)
|
||||
val BATTLE_DOUBLE_EW = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.5625, 0.5625, 0.4375, 0.8125),
|
||||
Shapes.box(0.4375, 0.0, 0.1875, 0.6875, 0.4375, 0.4375)
|
||||
)
|
||||
val BATTLE_TRIPLE_N = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.625, 0.875, 0.4375, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.5, 0.375, 0.4375, 0.75),
|
||||
Shapes.box(0.4375, 0.0, 0.125, 0.6875, 0.4375, 0.375)
|
||||
)
|
||||
val BATTLE_TRIPLE_E = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.625, 0.375, 0.4375, 0.875),
|
||||
Shapes.box(0.25, 0.0, 0.125, 0.5, 0.4375, 0.375),
|
||||
Shapes.box(0.625, 0.0, 0.4375, 0.875, 0.4375, 0.6875)
|
||||
)
|
||||
val BATTLE_TRIPLE_S = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.375, 0.4375, 0.375),
|
||||
Shapes.box(0.625, 0.0, 0.25, 0.875, 0.4375, 0.5),
|
||||
Shapes.box(0.3125, 0.0, 0.625, 0.5625, 0.4375, 0.875)
|
||||
)
|
||||
val BATTLE_TRIPLE_W = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.875, 0.4375, 0.375),
|
||||
Shapes.box(0.5, 0.0, 0.625, 0.75, 0.4375, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.3125, 0.375, 0.4375, 0.5625)
|
||||
)
|
||||
val BATTLE_QUARTET_NS = Shapes.or(
|
||||
Shapes.box(0.625, 0.0, 0.625, 0.875, 0.4375, 0.875),
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.4375, 0.4375, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.1875, 0.8125, 0.4375, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.375, 0.4375, 0.375)
|
||||
)
|
||||
val BATTLE_QUARTET_EW = Shapes.or(
|
||||
Shapes.box(0.125, 0.0, 0.625, 0.375, 0.4375, 0.875),
|
||||
Shapes.box(0.1875, 0.0, 0.1875, 0.4375, 0.4375, 0.4375),
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.8125, 0.4375, 0.8125),
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.875, 0.4375, 0.375)
|
||||
)
|
||||
|
||||
val VITAMIN_SINGLE = Shapes.box(0.375, 0.0, 0.375, 0.625, 0.375, 0.625)
|
||||
val VITAMIN_DOUBLE_EW = Shapes.or(
|
||||
Shapes.box(0.3125, 0.0, 0.5625, 0.5625, 0.375, 0.8125),
|
||||
Shapes.box(0.4375, 0.0, 0.1875, 0.6875, 0.375, 0.4375)
|
||||
)
|
||||
val VITAMIN_DOUBLE_NS = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.4375, 0.8125, 0.375, 0.6875),
|
||||
Shapes.box(0.1875, 0.0, 0.3125, 0.4375, 0.375, 0.5625)
|
||||
)
|
||||
val VITAMIN_TRIPLE_EAST = Shapes.or(
|
||||
Shapes.box(0.5, 0.0, 0.5625, 0.75, 0.375, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.1875, 0.8125, 0.375, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.375, 0.4375, 0.375, 0.625)
|
||||
)
|
||||
val VITAMIN_TRIPLE_WEST = Shapes.or(
|
||||
Shapes.box(0.25, 0.0, 0.1875, 0.5, 0.375, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.4375, 0.375, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.375, 0.8125, 0.375, 0.625)
|
||||
)
|
||||
val VITAMIN_TRIPLE_NORTH = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.25, 0.8125, 0.375, 0.5),
|
||||
Shapes.box(0.1875, 0.0, 0.1875, 0.4375, 0.375, 0.4375),
|
||||
Shapes.box(0.375, 0.0, 0.5625, 0.625, 0.375, 0.8125)
|
||||
)
|
||||
val VITAMIN_TRIPLE_SOUTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.5, 0.4375, 0.375, 0.75),
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.8125, 0.375, 0.8125),
|
||||
Shapes.box(0.375, 0.0, 0.1875, 0.625, 0.375, 0.4375)
|
||||
)
|
||||
val VITAMIN_QUARTET_EAST = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.5625, 0.8125, 0.375, 0.8125),
|
||||
Shapes.box(0.625, 0.0, 0.1875, 0.875, 0.375, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.125, 0.4375, 0.375, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.625, 0.375, 0.375, 0.875)
|
||||
)
|
||||
val VITAMIN_QUARTET_WEST = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.1875, 0.4375, 0.375, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.375, 0.375, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.625, 0.8125, 0.375, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.125, 0.875, 0.375, 0.375)
|
||||
)
|
||||
val VITAMIN_QUARTET_NORTH = Shapes.or(
|
||||
Shapes.box(0.5625, 0.0, 0.1875, 0.8125, 0.375, 0.4375),
|
||||
Shapes.box(0.1875, 0.0, 0.125, 0.4375, 0.375, 0.375),
|
||||
Shapes.box(0.125, 0.0, 0.5625, 0.375, 0.375, 0.8125),
|
||||
Shapes.box(0.625, 0.0, 0.625, 0.875, 0.375, 0.875)
|
||||
)
|
||||
val VITAMIN_QUARTET_SOUTH = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.5625, 0.4375, 0.375, 0.8125),
|
||||
Shapes.box(0.5625, 0.0, 0.625, 0.8125, 0.375, 0.875),
|
||||
Shapes.box(0.625, 0.0, 0.1875, 0.875, 0.375, 0.4375),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.375, 0.375, 0.375)
|
||||
)
|
||||
}
|
||||
}
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class WallAttachedDecorativeItemBlock(settings: Properties, val wallItemType: WallItemType) : Block(settings), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
enum class WallItemType : StringRepresentable {
|
||||
GENERIC_PLANE,
|
||||
POLICY,
|
||||
GENERIC_8x;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
companion object {
|
||||
val CODEC = StringRepresentable.fromEnum(::values)
|
||||
}
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<WallAttachedDecorativeItemBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(ctx: BlockPlaceContext): BlockState? {
|
||||
var blockState = defaultBlockState()
|
||||
.setValue(WATERLOGGED, ctx.level.getFluidState(ctx.clickedPos).type == Fluids.WATER)
|
||||
val worldView = ctx.level
|
||||
val blockPos = ctx.clickedPos
|
||||
ctx.nearestLookingDirections.forEach { direction ->
|
||||
if (direction.axis.isHorizontal) {
|
||||
blockState = blockState.setValue(FACING, direction.opposite) as BlockState
|
||||
if (blockState.canSurvive(worldView, blockPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (wallItemType) {
|
||||
WallItemType.GENERIC_PLANE -> {
|
||||
when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> FULL_PLANE_SOUTH
|
||||
Direction.WEST -> FULL_PLANE_WEST
|
||||
Direction.EAST -> FULL_PLANE_EAST
|
||||
else -> FULL_PLANE_NORTH
|
||||
}
|
||||
}
|
||||
WallItemType.POLICY -> {
|
||||
when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> POLICY_SOUTH
|
||||
Direction.WEST -> POLICY_WEST
|
||||
Direction.EAST -> POLICY_EAST
|
||||
else -> POLICY_NORTH
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> ITEM_8x_SOUTH
|
||||
Direction.WEST -> ITEM_8x_WEST
|
||||
Direction.EAST -> ITEM_8x_EAST
|
||||
else -> ITEM_8x_NORTH
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (direction.opposite == state.getValue(FACING) && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(FACING, rotation.rotate(state.getValue(FACING)))
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isPathfindable(state: BlockState, type: PathComputationType): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
return level!!.getBlockState(pos.relative(state.getValue(FACING).opposite)).isSolid
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<WallAttachedDecorativeItemBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec(),
|
||||
WallItemType.CODEC.fieldOf("wallItemType").forGetter(WallAttachedDecorativeItemBlock::wallItemType)
|
||||
).apply(it, ::WallAttachedDecorativeItemBlock) }
|
||||
|
||||
val ITEM_8x_NORTH = Shapes.box(0.25, 0.25, 0.5, 0.75, 0.75, 1.0)
|
||||
val ITEM_8x_WEST = Shapes.box(0.5, 0.25, 0.25, 1.0, 0.75, 0.75)
|
||||
val ITEM_8x_SOUTH = Shapes.box(0.25, 0.25, 0.0, 0.75, 0.75, 0.5)
|
||||
val ITEM_8x_EAST = Shapes.box(0.0, 0.25, 0.25, 0.5, 0.75, 0.75)
|
||||
|
||||
val FULL_PLANE_NORTH = Shapes.box(0.0, 0.0, 0.925, 1.0, 1.0, 1.0)
|
||||
val FULL_PLANE_WEST = Shapes.box(0.925, 0.0, 0.0, 1.0, 1.0, 1.0)
|
||||
val FULL_PLANE_SOUTH = Shapes.box(0.0, 0.0, 0.0, 1.0, 1.0, 0.075)
|
||||
val FULL_PLANE_EAST = Shapes.box(0.0, 0.0, 0.0, 0.075, 1.0, 1.0)
|
||||
|
||||
val POLICY_NORTH = Shapes.box(0.0625, 0.125, 0.925, 1.0, 0.875, 0.9375)
|
||||
val POLICY_WEST = Shapes.box(0.925, 0.125, 0.0625, 1.0, 0.875, 0.9375)
|
||||
val POLICY_SOUTH = Shapes.box(0.0625, 0.125, 0.0, 0.9375, 0.875, 0.075)
|
||||
val POLICY_EAST = Shapes.box(0.0, 0.125, 0.0625, 0.075, 0.875, 0.9375)
|
||||
}
|
||||
}
|
||||
+213
@@ -0,0 +1,213 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.block.decor.StackableItemBlock.Companion
|
||||
import com.cobblemon.mod.common.block.decor.StackableItemBlock.Companion.ITEMS
|
||||
import com.cobblemon.mod.common.block.decor.StackableItemBlock.Companion.MAX_ITEMS
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.IntegerProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
import kotlin.math.min
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class WallAttachedStackableItemBlock(settings: Properties, val wallStackableItemType: WallStackableItemType) : Block(settings), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(ITEMS, 1)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
enum class WallStackableItemType : StringRepresentable {
|
||||
TAG,
|
||||
GENERIC_8x;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
companion object {
|
||||
val CODEC = StringRepresentable.fromEnum(::values)
|
||||
}
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<WallAttachedStackableItemBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val blockState = context.level.getBlockState(context.clickedPos)
|
||||
return if (blockState.`is`(this)) blockState.setValue(
|
||||
ITEMS,
|
||||
min(MAX_ITEMS, (blockState.getValue(ITEMS) + 1))
|
||||
) else {
|
||||
var blockState = defaultBlockState()
|
||||
.setValue(WATERLOGGED, context.level.getFluidState(context.clickedPos).type == Fluids.WATER)
|
||||
val worldView = context.level
|
||||
val blockPos = context.clickedPos
|
||||
context.nearestLookingDirections.forEach { direction ->
|
||||
if (direction.axis.isHorizontal) {
|
||||
blockState = blockState.setValue(FACING, direction.opposite)
|
||||
if (blockState.canSurvive(worldView, blockPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(ITEMS)
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (wallStackableItemType) {
|
||||
WallStackableItemType.TAG -> return when (state.getValue(ITEMS)) {
|
||||
2 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> TAGS_SOUTH
|
||||
Direction.WEST -> TAGS_WEST
|
||||
Direction.EAST -> TAGS_EAST
|
||||
else -> TAGS_NORTH
|
||||
}
|
||||
3, 4 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> TAGS_WIDE_SOUTH
|
||||
Direction.WEST -> TAGS_WIDE_WEST
|
||||
Direction.EAST -> TAGS_WIDE_EAST
|
||||
else -> TAGS_WIDE_NORTH
|
||||
}
|
||||
5, 6, 7, 8 -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> FULL_PLANE_SOUTH
|
||||
Direction.WEST -> FULL_PLANE_WEST
|
||||
Direction.EAST -> FULL_PLANE_EAST
|
||||
else -> FULL_PLANE_NORTH
|
||||
}
|
||||
else -> when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> TAG_SOUTH
|
||||
Direction.WEST -> TAG_WEST
|
||||
Direction.EAST -> TAG_EAST
|
||||
else -> TAG_NORTH
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> ITEM_8x_SOUTH
|
||||
Direction.WEST -> ITEM_8x_WEST
|
||||
Direction.EAST -> ITEM_8x_EAST
|
||||
else -> ITEM_8x_NORTH
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (direction.opposite == state.getValue(FACING) && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
public override fun canBeReplaced(state: BlockState, useContext: BlockPlaceContext): Boolean {
|
||||
return if (!useContext.isSecondaryUseActive && useContext.itemInHand.`is`(this.asItem()) && state.getValue(
|
||||
ITEMS
|
||||
) <= MAX_ITEMS
|
||||
) true else super.canBeReplaced(state, useContext)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(FACING, rotation.rotate(state.getValue(FACING)))
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isPathfindable(state: BlockState, type: PathComputationType): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
return level!!.getBlockState(pos.relative(state.getValue(FACING).opposite)).isSolid
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<WallAttachedStackableItemBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec(),
|
||||
WallStackableItemType.CODEC.fieldOf("wallStackableItemType").forGetter(WallAttachedStackableItemBlock::wallStackableItemType)
|
||||
).apply(it, ::WallAttachedStackableItemBlock) }
|
||||
|
||||
val ITEMS = IntegerProperty.create("items", 1, 8)
|
||||
const val MAX_ITEMS: Int = 8
|
||||
|
||||
val ITEM_8x_NORTH = Shapes.box(0.25, 0.25, 0.5, 0.75, 0.75, 1.0)
|
||||
val ITEM_8x_WEST = Shapes.box(0.5, 0.25, 0.25, 1.0, 0.75, 0.75)
|
||||
val ITEM_8x_SOUTH = Shapes.box(0.25, 0.25, 0.0, 0.75, 0.75, 0.5)
|
||||
val ITEM_8x_EAST = Shapes.box(0.0, 0.25, 0.25, 0.5, 0.75, 0.75)
|
||||
|
||||
val FULL_PLANE_NORTH = Shapes.box(0.0, 0.0, 0.925, 1.0, 1.0, 1.0)
|
||||
val FULL_PLANE_WEST = Shapes.box(0.925, 0.0, 0.0, 1.0, 1.0, 1.0)
|
||||
val FULL_PLANE_SOUTH = Shapes.box(0.0, 0.0, 0.0, 1.0, 1.0, 0.075)
|
||||
val FULL_PLANE_EAST = Shapes.box(0.0, 0.0, 0.0, 0.075, 1.0, 1.0)
|
||||
|
||||
//One Tag
|
||||
val TAG_NORTH = Shapes.box(0.375, 0.25, 0.925, 0.625, 0.6875, 1.0)
|
||||
val TAG_WEST = Shapes.box(0.925, 0.25, 0.375, 1.0, 0.6875, 0.625)
|
||||
val TAG_SOUTH = Shapes.box(0.375, 0.25, 0.0, 0.625, 0.6875, 0.075)
|
||||
val TAG_EAST = Shapes.box(0.0, 0.25, 0.375, 0.075, 0.6875, 0.625)
|
||||
//Two Tags
|
||||
val TAGS_NORTH = Shapes.box(0.375, 0.125, 0.925, 0.875, 0.6875, 1.0)
|
||||
val TAGS_WEST = Shapes.box(0.925, 0.125, 0.125, 1.0, 0.6875, 0.625)
|
||||
val TAGS_SOUTH = Shapes.box(0.125, 0.125, 0.0, 0.625, 0.6875, 0.075)
|
||||
val TAGS_EAST = Shapes.box(0.0, 0.125, 0.375, 0.075, 0.6875, 0.875)
|
||||
//Three and Four Tags
|
||||
val TAGS_WIDE_NORTH = Shapes.box(0.125, 0.125, 0.925, 0.875, 0.875, 1.0)
|
||||
val TAGS_WIDE_WEST = Shapes.box(0.925, 0.125, 0.125, 1.0, 0.875, 0.875)
|
||||
val TAGS_WIDE_SOUTH = Shapes.box(0.125, 0.125, 0.0, 0.875, 0.875, 0.075)
|
||||
val TAGS_WIDE_EAST = Shapes.box(0.0, 0.125, 0.125, 0.075, 0.875, 0.875)
|
||||
}
|
||||
}
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.Property
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("DEPRECATED", "OVERRIDE_DEPRECATION")
|
||||
class WallAttachedTargetBlock(settings: Properties) : TargetBlock(settings), SimpleWaterloggedBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false)
|
||||
.setValue(OUTPUT_POWER, 0))
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(ctx: BlockPlaceContext): BlockState? {
|
||||
var blockState = defaultBlockState()
|
||||
.setValue(WATERLOGGED, ctx.level.getFluidState(ctx.clickedPos).type == Fluids.WATER)
|
||||
val worldView = ctx.level
|
||||
val blockPos = ctx.clickedPos
|
||||
ctx.nearestLookingDirections.forEach { direction ->
|
||||
if (direction.axis.isHorizontal) {
|
||||
blockState = blockState.setValue(FACING, direction.opposite) as BlockState
|
||||
if (blockState.canSurvive(worldView, blockPos)) {
|
||||
return blockState
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(WATERLOGGED)
|
||||
builder.add(*arrayOf<Property<*>>(OUTPUT_POWER))
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
blockGetter: BlockGetter,
|
||||
pos: BlockPos,
|
||||
collisionContext: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> FULL_PLANE_SOUTH
|
||||
Direction.WEST -> FULL_PLANE_WEST
|
||||
Direction.EAST -> FULL_PLANE_EAST
|
||||
else -> FULL_PLANE_NORTH
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
world: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (direction.opposite == state.getValue(FACING) && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(FACING, rotation.rotate(state.getValue(FACING)))
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun isPathfindable(state: BlockState, type: PathComputationType): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun canSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
return level.getBlockState(pos.relative(state.getValue(FACING).opposite)).isSolid
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<WallAttachedTargetBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec()
|
||||
).apply(it, ::WallAttachedTargetBlock) }
|
||||
|
||||
val OUTPUT_POWER = BlockStateProperties.POWER;
|
||||
|
||||
val FULL_PLANE_NORTH = Shapes.box(0.0, 0.0, 0.925, 1.0, 1.0, 1.0)
|
||||
val FULL_PLANE_WEST = Shapes.box(0.925, 0.0, 0.0, 1.0, 1.0, 1.0)
|
||||
val FULL_PLANE_SOUTH = Shapes.box(0.0, 0.0, 0.0, 1.0, 1.0, 0.075)
|
||||
val FULL_PLANE_EAST = Shapes.box(0.0, 0.0, 0.0, 0.075, 1.0, 1.0)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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.block.general
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.AmethystClusterBlock
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.DirectionalBlock
|
||||
import net.minecraft.world.level.block.Rotation
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
|
||||
|
||||
class SixDirectionalBlock(properties: Properties) : DirectionalBlock(properties) {
|
||||
init {registerDefaultState(stateDefinition.any().setValue(FACING, Direction.UP))}
|
||||
|
||||
companion object {
|
||||
val CODEC = simpleCodec(::SixDirectionalBlock)}
|
||||
|
||||
public override fun codec(): MapCodec<SixDirectionalBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {builder.add(FACING)}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(FACING, rotation.rotate(state.getValue(FACING)))
|
||||
}
|
||||
|
||||
/* override fun mirror(state: BlockState, mirror: Mirror): BlockState {
|
||||
return state.rotate(mirror.getRotation((state.getValue(FACING))!!))
|
||||
}*/
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState {
|
||||
return defaultBlockState().setValue(FACING, context.clickedFace)
|
||||
}
|
||||
}
|
||||
@@ -235,6 +235,12 @@ object CobblemonClient {
|
||||
CobblemonBlocks.POKE_CAKE
|
||||
)
|
||||
|
||||
this.implementation.registerBlockRenderType(
|
||||
RenderType.translucent(),
|
||||
CobblemonBlocks.UPGRADE,
|
||||
CobblemonBlocks.DUBIOUS_DISC
|
||||
)
|
||||
|
||||
this.implementation.registerBlockRenderType(
|
||||
RenderType.cutout(),
|
||||
CobblemonBlocks.GILDED_CHEST,
|
||||
@@ -319,7 +325,89 @@ object CobblemonClient {
|
||||
CobblemonBlocks.PINK_CAMPFIRE_POT,
|
||||
CobblemonBlocks.RED_CAMPFIRE_POT,
|
||||
CobblemonBlocks.WHITE_CAMPFIRE_POT,
|
||||
CobblemonBlocks.YELLOW_CAMPFIRE_POT
|
||||
CobblemonBlocks.YELLOW_CAMPFIRE_POT,
|
||||
CobblemonBlocks.KINGS_ROCK,
|
||||
CobblemonBlocks.CHIPPED_POT,
|
||||
CobblemonBlocks.CRACKED_POT,
|
||||
CobblemonBlocks.MASTERPIECE_TEACUP,
|
||||
CobblemonBlocks.UNREMARKABLE_TEACUP,
|
||||
CobblemonBlocks.LUMINOUS_MOSS,
|
||||
CobblemonBlocks.GALARICA_CUFF,
|
||||
CobblemonBlocks.GALARICA_WREATH,
|
||||
CobblemonBlocks.DESTINY_KNOT,
|
||||
CobblemonBlocks.METRONOME,
|
||||
CobblemonBlocks.DAMP_ROCK,
|
||||
CobblemonBlocks.HEAT_ROCK,
|
||||
CobblemonBlocks.ICY_ROCK,
|
||||
CobblemonBlocks.SMOOTH_ROCK,
|
||||
CobblemonBlocks.NEVER_MELT_ICE,
|
||||
CobblemonBlocks.CLEANSE_TAG,
|
||||
CobblemonBlocks.SPELL_TAG,
|
||||
CobblemonBlocks.BLUNDER_POLICY,
|
||||
CobblemonBlocks.WEAKNESS_POLICY,
|
||||
CobblemonBlocks.RING_TARGET,
|
||||
CobblemonBlocks.LIFE_ORB,
|
||||
CobblemonBlocks.FLAME_ORB,
|
||||
CobblemonBlocks.TOXIC_ORB,
|
||||
CobblemonBlocks.LIGHT_BALL,
|
||||
CobblemonBlocks.SMOKE_BALL,
|
||||
CobblemonBlocks.EJECT_BUTTON,
|
||||
CobblemonBlocks.METAL_COAT,
|
||||
CobblemonBlocks.MAGNET,
|
||||
CobblemonBlocks.RELIC_COIN_POUCH,
|
||||
CobblemonBlocks.SACHET,
|
||||
CobblemonBlocks.BRIGHT_POWDER,
|
||||
CobblemonBlocks.METAL_POWDER,
|
||||
CobblemonBlocks.QUICK_POWDER,
|
||||
|
||||
CobblemonBlocks.POTION,
|
||||
CobblemonBlocks.SUPER_POTION,
|
||||
CobblemonBlocks.HYPER_POTION,
|
||||
CobblemonBlocks.MAX_POTION,
|
||||
CobblemonBlocks.FULL_RESTORE,
|
||||
CobblemonBlocks.ANTIDOTE,
|
||||
CobblemonBlocks.AWAKENING,
|
||||
CobblemonBlocks.BURN_HEAL,
|
||||
CobblemonBlocks.ICE_HEAL,
|
||||
CobblemonBlocks.PARALYZE_HEAL,
|
||||
CobblemonBlocks.FULL_HEAL,
|
||||
CobblemonBlocks.ETHER,
|
||||
CobblemonBlocks.MAX_ETHER,
|
||||
CobblemonBlocks.ELIXIR,
|
||||
CobblemonBlocks.MAX_ELIXIR,
|
||||
CobblemonBlocks.X_ACCURACY,
|
||||
CobblemonBlocks.X_ATTACK,
|
||||
CobblemonBlocks.X_DEFENCE,
|
||||
CobblemonBlocks.X_SPECIAL_ATTACK,
|
||||
CobblemonBlocks.X_SPECIAL_DEFENCE,
|
||||
CobblemonBlocks.X_SPEED,
|
||||
CobblemonBlocks.DIRE_HIT,
|
||||
CobblemonBlocks.GUARD_SPEC,
|
||||
CobblemonBlocks.HP_UP,
|
||||
CobblemonBlocks.PROTEIN,
|
||||
CobblemonBlocks.IRON,
|
||||
CobblemonBlocks.CARBOS,
|
||||
CobblemonBlocks.CALCIUM,
|
||||
CobblemonBlocks.ZINC,
|
||||
CobblemonBlocks.PP_UP,
|
||||
CobblemonBlocks.PP_MAX,
|
||||
|
||||
CobblemonBlocks.WHITE_PLAQUE,
|
||||
CobblemonBlocks.LIGHT_GRAY_PLAQUE,
|
||||
CobblemonBlocks.GRAY_PLAQUE,
|
||||
CobblemonBlocks.BLACK_PLAQUE,
|
||||
CobblemonBlocks.BROWN_PLAQUE,
|
||||
CobblemonBlocks.RED_PLAQUE,
|
||||
CobblemonBlocks.ORANGE_PLAQUE,
|
||||
CobblemonBlocks.YELLOW_PLAQUE,
|
||||
CobblemonBlocks.LIME_PLAQUE,
|
||||
CobblemonBlocks.GREEN_PLAQUE,
|
||||
CobblemonBlocks.CYAN_PLAQUE,
|
||||
CobblemonBlocks.LIGHT_BLUE_PLAQUE,
|
||||
CobblemonBlocks.BLUE_PLAQUE,
|
||||
CobblemonBlocks.PURPLE_PLAQUE,
|
||||
CobblemonBlocks.MAGENTA_PLAQUE,
|
||||
CobblemonBlocks.PINK_PLAQUE
|
||||
)
|
||||
|
||||
this.createBoatModelLayers()
|
||||
|
||||
+8
-7
@@ -15,6 +15,7 @@ import com.cobblemon.mod.common.block.DisplayCaseBlock
|
||||
import com.cobblemon.mod.common.block.entity.DisplayCaseBlockEntity
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
|
||||
import com.cobblemon.mod.common.item.PokedexItem
|
||||
import com.cobblemon.mod.common.item.WearableItem
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import com.mojang.math.Axis
|
||||
import net.minecraft.client.Minecraft
|
||||
@@ -31,9 +32,7 @@ class DisplayCaseRenderer(ctx: BlockEntityRendererProvider.Context) : BlockEntit
|
||||
val context = RenderContext().also {
|
||||
it.put(RenderContext.RENDER_STATE, RenderContext.RenderState.WORLD)
|
||||
}
|
||||
val coinPouchStack: ItemStack by lazy { ItemStack(
|
||||
CobblemonItems.RELIC_COIN_POUCH
|
||||
).also { it.set(DataComponents.CUSTOM_MODEL_DATA, CustomModelData(1)) } }
|
||||
|
||||
override fun render(
|
||||
entity: DisplayCaseBlockEntity,
|
||||
tickDelta: Float,
|
||||
@@ -42,8 +41,8 @@ class DisplayCaseRenderer(ctx: BlockEntityRendererProvider.Context) : BlockEntit
|
||||
light: Int,
|
||||
overlay: Int
|
||||
) {
|
||||
val stack: ItemStack = if (entity.getStack().`is`(CobblemonItems.RELIC_COIN_POUCH)) {
|
||||
coinPouchStack
|
||||
val stack: ItemStack = if (entity.getStack().`is`(CobblemonItemTags.DISPLAY_CASE_ITEMS)) {
|
||||
entity.getStack().copyWithCount(1).also { it.set(DataComponents.CUSTOM_MODEL_DATA, CustomModelData(1)) }
|
||||
} else {
|
||||
entity.getStack()
|
||||
}
|
||||
@@ -161,11 +160,13 @@ class DisplayCaseRenderer(ctx: BlockEntityRendererProvider.Context) : BlockEntit
|
||||
stack.item is BannerItem -> PositioningType.BANNER
|
||||
stack.`is`(CobblemonItemTags.POKE_BALLS) -> PositioningType.POKE_BALL
|
||||
stack.item is PokedexItem -> PositioningType.POKEDEX
|
||||
stack.item == CobblemonItems.RELIC_COIN_POUCH -> PositioningType.COIN_POUCH
|
||||
stack.`is`(CobblemonItemTags.DISPLAY_CASE_ITEMS) -> PositioningType.ITEM_BLOCK
|
||||
stack.item == CobblemonItems.PASTURE -> PositioningType.PASTURE
|
||||
//stack.item == CobblemonItems.POKEMON_MODEL -> PositioningType.ITEM_MODEL
|
||||
stack.item == Items.SHIELD -> PositioningType.SHIELD
|
||||
stack.item == Items.DECORATED_POT -> PositioningType.MOB_HEAD
|
||||
stack.item is WearableItem -> PositioningType.ITEM_MODEL
|
||||
stack.`is`(CobblemonItemTags.PLAQUES) -> PositioningType.ITEM_MODEL
|
||||
Minecraft.getInstance().itemRenderer.getModel(stack, world, null, 0).isGui3d -> PositioningType.BLOCK_MODEL
|
||||
else -> PositioningType.ITEM_MODEL
|
||||
}
|
||||
@@ -185,6 +186,6 @@ class DisplayCaseRenderer(ctx: BlockEntityRendererProvider.Context) : BlockEntit
|
||||
MOB_HEAD(1f, 1f, 1f, 0f, -0.025f, 0f, 180f),
|
||||
SHIELD(1f, 1f, 1f, 0f, -0.045f, 0f, 180f),
|
||||
PASTURE(1f, 1f, 1f, 0f, 0.0375f, 0f),
|
||||
COIN_POUCH(1f, 1f, 1f, 0f, 0.415f, 0f)
|
||||
ITEM_BLOCK(1f, 1f, 1f, 0f, 0.415f, 0f)
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,20 @@ package com.cobblemon.mod.common.item
|
||||
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.entity.EquipmentSlot
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.Equipable
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class WearableItem(val name: String): CobblemonItem(Properties()), Equipable {
|
||||
class WearableItem(val name: String, block: Block = Blocks.AIR): ItemNameBlockItem(block, Properties()), Equipable {
|
||||
companion object {
|
||||
const val MODEL_PATH = "item/wearable"
|
||||
}
|
||||
@@ -22,4 +32,17 @@ class WearableItem(val name: String): CobblemonItem(Properties()), Equipable {
|
||||
fun getModel2d(): ResourceLocation = cobblemonResource(this.name)
|
||||
|
||||
override fun getEquipmentSlot(): EquipmentSlot { return EquipmentSlot.HEAD }
|
||||
|
||||
override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
return this.swapWithEquipmentSlot(this, level, player, usedHand)
|
||||
}
|
||||
|
||||
override fun getDescriptionId(): String {
|
||||
return if (block == Blocks.AIR) this.getOrCreateDescriptionId() else super.getDescriptionId()
|
||||
}
|
||||
|
||||
override fun canPlace(context: BlockPlaceContext, state: BlockState): Boolean {
|
||||
//not all wearable items are placeable, so we default it to AIR and prevent placement in that case
|
||||
return if (state.block == Blocks.AIR) false else super.canPlace(context, state)
|
||||
}
|
||||
}
|
||||
@@ -13,10 +13,11 @@ import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.*
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
|
||||
class DireHitItem : CobblemonItem(Properties()), SimpleBagItemLike {
|
||||
class DireHitItem(block: Block) : ItemNameBlockItem(block, Properties()), SimpleBagItemLike {
|
||||
override val bagItem = object : BagItem {
|
||||
override val itemName = "item.cobblemon.dire_hit"
|
||||
override val returnItem = Items.AIR
|
||||
|
||||
@@ -13,9 +13,10 @@ import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.*
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
class GuardSpecItem : CobblemonItem(Properties()), SimpleBagItemLike {
|
||||
class GuardSpecItem(block: Block) : ItemNameBlockItem(block, Properties()), SimpleBagItemLike {
|
||||
override val bagItem = object : BagItem {
|
||||
override val itemName = "item.cobblemon.guard_spec"
|
||||
override val returnItem = Items.AIR
|
||||
|
||||
@@ -14,9 +14,10 @@ import com.cobblemon.mod.common.api.pokemon.stats.Stat
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.*
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
class XStatItem(val stat: Stat, stages: Int = 2) : CobblemonItem(Properties()), SimpleBagItemLike {
|
||||
class XStatItem(val stat: Stat, stages: Int = 2, block: Block) : ItemNameBlockItem(block, Properties()), SimpleBagItemLike {
|
||||
override val bagItem = object : BagItem {
|
||||
override val itemName = "item.cobblemon.x_${stat.identifier.path}"
|
||||
override val returnItem = Items.AIR
|
||||
|
||||
@@ -66,6 +66,7 @@ object CobblemonItemGroups {
|
||||
@JvmStatic val EVOLUTION_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(EVOLUTION_ITEMS_KEY)
|
||||
|
||||
@JvmStatic val BUILDING_BLOCKS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("building_blocks")), this::blocksInjections)
|
||||
@JvmStatic val COLORED_BLOCKS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("colored_blocks")), this::colorInjections)
|
||||
@JvmStatic val FOOD_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("food_and_drinks")), this::foodInjections)
|
||||
@JvmStatic val TOOLS_AND_UTILITIES_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("tools_and_utilities")), this::toolsAndUtilitiesInjections)
|
||||
@JvmStatic val INGREDIENTS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("ingredients")), this::ingredientsInjections)
|
||||
@@ -319,6 +320,7 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.SMOOTH_TUMBLESTONE)
|
||||
entries.accept(CobblemonItems.SMOOTH_TUMBLESTONE_STAIRS)
|
||||
entries.accept(CobblemonItems.SMOOTH_TUMBLESTONE_SLAB)
|
||||
|
||||
entries.accept(CobblemonItems.POLISHED_BLACK_TUMBLESTONE)
|
||||
entries.accept(CobblemonItems.POLISHED_BLACK_TUMBLESTONE_STAIRS)
|
||||
entries.accept(CobblemonItems.POLISHED_BLACK_TUMBLESTONE_SLAB)
|
||||
@@ -332,6 +334,7 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.SMOOTH_BLACK_TUMBLESTONE)
|
||||
entries.accept(CobblemonItems.SMOOTH_BLACK_TUMBLESTONE_STAIRS)
|
||||
entries.accept(CobblemonItems.SMOOTH_BLACK_TUMBLESTONE_SLAB)
|
||||
|
||||
entries.accept(CobblemonItems.POLISHED_SKY_TUMBLESTONE)
|
||||
entries.accept(CobblemonItems.POLISHED_SKY_TUMBLESTONE_STAIRS)
|
||||
entries.accept(CobblemonItems.POLISHED_SKY_TUMBLESTONE_SLAB)
|
||||
@@ -381,7 +384,100 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.THUNDER_STONE_BLOCK)
|
||||
entries.accept(CobblemonItems.WATER_STONE_BLOCK)
|
||||
|
||||
entries.accept(CobblemonItems.PEAT_BLOCK)
|
||||
|
||||
CobblemonItems.campfire_pots.forEach(entries::accept)
|
||||
|
||||
entries.accept(CobblemonItems.WHITE_PLAQUE)
|
||||
entries.accept(CobblemonItems.LIGHT_GRAY_PLAQUE)
|
||||
entries.accept(CobblemonItems.GRAY_PLAQUE)
|
||||
entries.accept(CobblemonItems.BLACK_PLAQUE)
|
||||
entries.accept(CobblemonItems.BROWN_PLAQUE)
|
||||
entries.accept(CobblemonItems.RED_PLAQUE)
|
||||
entries.accept(CobblemonItems.ORANGE_PLAQUE)
|
||||
entries.accept(CobblemonItems.YELLOW_PLAQUE)
|
||||
entries.accept(CobblemonItems.LIME_PLAQUE)
|
||||
entries.accept(CobblemonItems.GREEN_PLAQUE)
|
||||
entries.accept(CobblemonItems.CYAN_PLAQUE)
|
||||
entries.accept(CobblemonItems.LIGHT_BLUE_PLAQUE)
|
||||
entries.accept(CobblemonItems.BLUE_PLAQUE)
|
||||
entries.accept(CobblemonItems.PURPLE_PLAQUE)
|
||||
entries.accept(CobblemonItems.MAGENTA_PLAQUE)
|
||||
entries.accept(CobblemonItems.PINK_PLAQUE)
|
||||
|
||||
//Decorative Items - Easy to move around if we later want down here
|
||||
entries.accept(CobblemonItems.CHIPPED_POT)
|
||||
entries.accept(CobblemonItems.CRACKED_POT)
|
||||
entries.accept(CobblemonItems.MASTERPIECE_TEACUP)
|
||||
entries.accept(CobblemonItems.UNREMARKABLE_TEACUP)
|
||||
entries.accept(CobblemonItems.DESTINY_KNOT)
|
||||
entries.accept(CobblemonItems.EJECT_BUTTON)
|
||||
entries.accept(CobblemonItems.FLAME_ORB)
|
||||
entries.accept(CobblemonItems.TOXIC_ORB)
|
||||
entries.accept(CobblemonItems.LIFE_ORB)
|
||||
entries.accept(CobblemonItems.LIGHT_BALL)
|
||||
entries.accept(CobblemonItems.SMOKE_BALL)
|
||||
entries.accept(CobblemonItems.IRON_BALL)
|
||||
entries.accept(CobblemonItems.HARD_STONE)
|
||||
entries.accept(CobblemonItems.DAMP_ROCK)
|
||||
entries.accept(CobblemonItems.HEAT_ROCK)
|
||||
entries.accept(CobblemonItems.ICY_ROCK)
|
||||
entries.accept(CobblemonItems.SMOOTH_ROCK)
|
||||
entries.accept(CobblemonItems.KINGS_ROCK)
|
||||
entries.accept(CobblemonItems.NEVER_MELT_ICE)
|
||||
entries.accept(CobblemonItems.GALARICA_CUFF)
|
||||
entries.accept(CobblemonItems.GALARICA_WREATH)
|
||||
entries.accept(CobblemonItems.LUMINOUS_MOSS)
|
||||
entries.accept(CobblemonItems.MAGNET)
|
||||
entries.accept(CobblemonItems.METRONOME)
|
||||
entries.accept(CobblemonItems.RING_TARGET)
|
||||
entries.accept(CobblemonItems.BRIGHT_POWDER)
|
||||
entries.accept(CobblemonItems.METAL_POWDER)
|
||||
entries.accept(CobblemonItems.QUICK_POWDER)
|
||||
entries.accept(CobblemonItems.SACHET)
|
||||
entries.accept(CobblemonItems.METAL_COAT)
|
||||
entries.accept(CobblemonItems.UPGRADE)
|
||||
entries.accept(CobblemonItems.DUBIOUS_DISC)
|
||||
entries.accept(CobblemonItems.CLEANSE_TAG)
|
||||
entries.accept(CobblemonItems.SPELL_TAG)
|
||||
entries.accept(CobblemonItems.BLUNDER_POLICY)
|
||||
entries.accept(CobblemonItems.WEAKNESS_POLICY)
|
||||
|
||||
entries.accept(CobblemonItems.POTION)
|
||||
entries.accept(CobblemonItems.SUPER_POTION)
|
||||
entries.accept(CobblemonItems.HYPER_POTION)
|
||||
entries.accept(CobblemonItems.MAX_POTION)
|
||||
entries.accept(CobblemonItems.FULL_RESTORE)
|
||||
|
||||
entries.accept(CobblemonItems.ANTIDOTE)
|
||||
entries.accept(CobblemonItems.AWAKENING)
|
||||
entries.accept(CobblemonItems.BURN_HEAL)
|
||||
entries.accept(CobblemonItems.ICE_HEAL)
|
||||
entries.accept(CobblemonItems.PARALYZE_HEAL)
|
||||
entries.accept(CobblemonItems.FULL_HEAL)
|
||||
|
||||
entries.accept(CobblemonItems.ETHER)
|
||||
entries.accept(CobblemonItems.MAX_ETHER)
|
||||
entries.accept(CobblemonItems.ELIXIR)
|
||||
entries.accept(CobblemonItems.MAX_ELIXIR)
|
||||
|
||||
entries.accept(CobblemonItems.X_ATTACK)
|
||||
entries.accept(CobblemonItems.X_DEFENSE)
|
||||
entries.accept(CobblemonItems.X_SP_ATK)
|
||||
entries.accept(CobblemonItems.X_SP_DEF)
|
||||
entries.accept(CobblemonItems.X_SPEED)
|
||||
entries.accept(CobblemonItems.X_ACCURACY)
|
||||
entries.accept(CobblemonItems.DIRE_HIT)
|
||||
entries.accept(CobblemonItems.GUARD_SPEC)
|
||||
|
||||
entries.accept(CobblemonItems.HP_UP)
|
||||
entries.accept(CobblemonItems.PROTEIN)
|
||||
entries.accept(CobblemonItems.IRON)
|
||||
entries.accept(CobblemonItems.CALCIUM)
|
||||
entries.accept(CobblemonItems.ZINC)
|
||||
entries.accept(CobblemonItems.CARBOS)
|
||||
entries.accept(CobblemonItems.PP_UP)
|
||||
entries.accept(CobblemonItems.PP_MAX)
|
||||
}
|
||||
|
||||
private fun consumableEntries(displayContext: ItemDisplayParameters, entries: Output) {
|
||||
@@ -590,8 +686,8 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.TART_APPLE)
|
||||
entries.accept(CobblemonItems.SWEET_APPLE)
|
||||
entries.accept(CobblemonItems.SYRUPY_APPLE)
|
||||
entries.accept(CobblemonItems.CRACKED_POT)
|
||||
entries.accept(CobblemonItems.CHIPPED_POT)
|
||||
entries.accept(CobblemonItems.CRACKED_POT)
|
||||
entries.accept(CobblemonItems.MASTERPIECE_TEACUP)
|
||||
entries.accept(CobblemonItems.UNREMARKABLE_TEACUP)
|
||||
entries.accept(CobblemonItems.STRAWBERRY_SWEET)
|
||||
@@ -765,6 +861,25 @@ object CobblemonItemGroups {
|
||||
}
|
||||
}
|
||||
|
||||
private fun colorInjections(injector: Injector) {
|
||||
injector.putLast(CobblemonItems.WHITE_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.LIGHT_GRAY_PLAQUE, CobblemonItems.WHITE_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.GRAY_PLAQUE, CobblemonItems.LIGHT_GRAY_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.BLACK_PLAQUE, CobblemonItems.GRAY_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.BROWN_PLAQUE, CobblemonItems.BLACK_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.RED_PLAQUE, CobblemonItems.BROWN_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.ORANGE_PLAQUE, CobblemonItems.RED_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.YELLOW_PLAQUE, CobblemonItems.ORANGE_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.LIME_PLAQUE, CobblemonItems.YELLOW_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.GREEN_PLAQUE, CobblemonItems.LIME_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.CYAN_PLAQUE, CobblemonItems.GREEN_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.LIGHT_BLUE_PLAQUE, CobblemonItems.CYAN_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.BLUE_PLAQUE, CobblemonItems.LIGHT_BLUE_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.PURPLE_PLAQUE, CobblemonItems.BLUE_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.MAGENTA_PLAQUE, CobblemonItems.PURPLE_PLAQUE)
|
||||
injector.putAfter(CobblemonItems.PINK_PLAQUE, CobblemonItems.MAGENTA_PLAQUE)
|
||||
}
|
||||
|
||||
private fun foodInjections(injector: Injector) {
|
||||
injector.putAfter(CobblemonItems.TART_APPLE, Items.ENCHANTED_GOLDEN_APPLE)
|
||||
injector.putAfter(CobblemonItems.SWEET_APPLE, CobblemonItems.TART_APPLE)
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* 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.item.interactive
|
||||
|
||||
import com.cobblemon.mod.common.api.item.PokemonSelectingItem
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.ItemEvSource
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.Stat
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import com.cobblemon.mod.common.pokemon.EVs
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
abstract class EVIncreaseBlockItem(
|
||||
val stat: Stat,
|
||||
val evIncreaseAmount: Int, block: Block
|
||||
) : ItemNameBlockItem(block, Properties()), PokemonSelectingItem {
|
||||
override val bagItem = null
|
||||
override fun canUseOnPokemon(stack: ItemStack, pokemon: Pokemon) = pokemon.evs.getOrDefault(stat) < EVs.MAX_STAT_VALUE &&
|
||||
super.canUseOnPokemon(stack, pokemon)
|
||||
|
||||
abstract val sound: SoundEvent
|
||||
|
||||
override fun applyToPokemon(
|
||||
player: ServerPlayer,
|
||||
stack: ItemStack,
|
||||
pokemon: Pokemon
|
||||
): InteractionResultHolder<ItemStack> {
|
||||
val evsGained = pokemon.evs.add(stat, evIncreaseAmount, ItemEvSource(player, stack, pokemon))
|
||||
return if (evsGained > 0) {
|
||||
pokemon.entity?.playSound(sound, 1F, 1F)
|
||||
stack.consume(1, player)
|
||||
InteractionResultHolder.success(stack)
|
||||
} else {
|
||||
InteractionResultHolder.fail(stack)
|
||||
}
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
if (user is ServerPlayer) {
|
||||
return use(user, user.getItemInHand(hand))
|
||||
}
|
||||
return InteractionResultHolder.success(user.getItemInHand(hand))
|
||||
}
|
||||
}
|
||||
@@ -13,9 +13,11 @@ import com.cobblemon.mod.common.api.battles.model.PokemonBattle
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.item.PokemonSelectingItem
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import com.cobblemon.mod.common.item.battle.BagItem
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.getBattleState
|
||||
import com.cobblemon.mod.common.util.giveOrDropItemStack
|
||||
import kotlin.math.min
|
||||
import net.minecraft.world.entity.player.Player
|
||||
@@ -24,9 +26,13 @@ import net.minecraft.world.item.Items
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.item.Rarity
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
/**
|
||||
* Items for recovering PP in all moves at once.
|
||||
@@ -35,8 +41,8 @@ import net.minecraft.world.level.Level
|
||||
* @since June 30th, 2023
|
||||
*/
|
||||
class ElixirItem(
|
||||
val max: Boolean
|
||||
) : CobblemonItem(Properties().apply {
|
||||
val max: Boolean, block: Block
|
||||
) : ItemNameBlockItem(block, Properties().apply {
|
||||
if (max) rarity(Rarity.UNCOMMON)
|
||||
}), PokemonSelectingItem {
|
||||
override val bagItem = object : BagItem {
|
||||
@@ -82,9 +88,8 @@ class ElixirItem(
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
if (world is ServerLevel && user is ServerPlayer) {
|
||||
val stack = user.getItemInHand(hand)
|
||||
return use(user, stack)
|
||||
return use(user, user.getItemInHand(hand))
|
||||
}
|
||||
return InteractionResultHolder.success(user.getItemInHand(hand))
|
||||
return super<ItemNameBlockItem>.use(world, user, hand)
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,11 @@ import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.item.PokemonAndMoveSelectingItem
|
||||
import com.cobblemon.mod.common.api.moves.Move
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import com.cobblemon.mod.common.item.battle.BagItem
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.getBattleState
|
||||
import com.cobblemon.mod.common.util.giveOrDropItemStack
|
||||
import kotlin.math.min
|
||||
import net.minecraft.world.entity.player.Player
|
||||
@@ -25,9 +27,13 @@ import net.minecraft.world.item.Items
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.item.Rarity
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
/**
|
||||
* Item for recovering PP for a specific move in a Pokémon's move list. Opens a move selection GUI.
|
||||
@@ -36,8 +42,8 @@ import net.minecraft.world.level.Level
|
||||
* @since June 30th, 2023
|
||||
*/
|
||||
class EtherItem(
|
||||
val max: Boolean
|
||||
) : CobblemonItem(Properties().apply {
|
||||
val max: Boolean, block: Block
|
||||
) : ItemNameBlockItem(block, Properties().apply {
|
||||
if (max) rarity(Rarity.UNCOMMON)
|
||||
}), PokemonAndMoveSelectingItem {
|
||||
override val bagItem = object : BagItem {
|
||||
@@ -70,6 +76,6 @@ class EtherItem(
|
||||
if (world is ServerLevel && user is ServerPlayer) {
|
||||
return use(user, user.getItemInHand(hand)) ?: InteractionResultHolder.pass(user.getItemInHand(hand))
|
||||
}
|
||||
return InteractionResultHolder.success(user.getItemInHand(hand))
|
||||
return super<ItemNameBlockItem>.use(world, user, hand)
|
||||
}
|
||||
}
|
||||
@@ -18,12 +18,13 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.item.Rarity
|
||||
import net.minecraft.world.item.*
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
class PPUpItem(
|
||||
val amount: Int
|
||||
) : CobblemonItem(Properties().apply {
|
||||
val amount: Int, block: Block
|
||||
) : ItemNameBlockItem(block, Properties().apply {
|
||||
if (amount>1) rarity(Rarity.UNCOMMON)
|
||||
}), PokemonAndMoveSelectingItem {
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
package com.cobblemon.mod.common.item.interactive
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
@@ -17,28 +18,37 @@ import com.cobblemon.mod.common.api.item.HealingSource
|
||||
import com.cobblemon.mod.common.api.item.PokemonSelectingItem
|
||||
import com.cobblemon.mod.common.api.molang.ExpressionLike
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import com.cobblemon.mod.common.item.battle.BagItem
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.asExpressionLike
|
||||
import com.cobblemon.mod.common.util.genericRuntime
|
||||
import com.cobblemon.mod.common.util.getBattleState
|
||||
import com.cobblemon.mod.common.util.giveOrDropItemStack
|
||||
import com.cobblemon.mod.common.util.resolveInt
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import java.lang.Integer.min
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.item.Rarity
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.item.*
|
||||
import net.minecraft.world.item.context.UseOnContext
|
||||
import net.minecraft.world.level.ClipContext
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.HitResult
|
||||
|
||||
class PotionItem(
|
||||
val type: PotionType
|
||||
) : CobblemonItem(Properties().apply {
|
||||
val type: PotionType,
|
||||
block: Block
|
||||
) : ItemNameBlockItem(block, Properties().apply {
|
||||
when (type.name) {
|
||||
PotionType.MAX_POTION.name -> rarity(Rarity.UNCOMMON)
|
||||
PotionType.MAX_POTION.name,
|
||||
PotionType.FULL_RESTORE.name -> rarity(Rarity.UNCOMMON)
|
||||
}
|
||||
}), PokemonSelectingItem, HealingSource {
|
||||
@@ -46,10 +56,10 @@ class PotionItem(
|
||||
override val bagItem = type
|
||||
override fun canUseOnPokemon(stack: ItemStack, pokemon: Pokemon) = !pokemon.isFullHealth() && pokemon.currentHealth > 0
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
if (user is ServerPlayer) {
|
||||
if (world is ServerLevel && user is ServerPlayer) {
|
||||
return use(user, user.getItemInHand(hand))
|
||||
}
|
||||
return InteractionResultHolder.success(user.getItemInHand(hand))
|
||||
return super<ItemNameBlockItem>.use(world, user, hand)
|
||||
}
|
||||
|
||||
override fun applyToPokemon(
|
||||
|
||||
@@ -14,17 +14,24 @@ import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.item.PokemonSelectingItem
|
||||
import com.cobblemon.mod.common.api.pokemon.status.Status
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.item.CobblemonItem
|
||||
import com.cobblemon.mod.common.item.battle.BagItem
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.getBattleState
|
||||
import com.cobblemon.mod.common.util.giveOrDropItemStack
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.InteractionResultHolder
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
/**
|
||||
* An item that cures statuses. Based on the [status] parameter it can be either specific [Status]es or all statuses (none specified).
|
||||
@@ -32,7 +39,7 @@ import net.minecraft.world.level.Level
|
||||
* @author Hiroku
|
||||
* @since June 30th, 2023
|
||||
*/
|
||||
class StatusCureItem(val itemName: String, vararg val status: Status) : CobblemonItem(Properties()), PokemonSelectingItem {
|
||||
class StatusCureItem(val itemName: String, vararg val status: Status, block: Block) : ItemNameBlockItem(block, Properties()), PokemonSelectingItem {
|
||||
override val bagItem = object : BagItem {
|
||||
override val itemName = this@StatusCureItem.itemName
|
||||
override val returnItem = Items.AIR
|
||||
@@ -41,6 +48,13 @@ class StatusCureItem(val itemName: String, vararg val status: Status) : Cobblemo
|
||||
}
|
||||
|
||||
override fun canUseOnPokemon(stack: ItemStack, pokemon: Pokemon) = pokemon.status?.let { it.status in status || status.isEmpty() } == true && pokemon.currentHealth > 0
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
if (world is ServerLevel && user is ServerPlayer) {
|
||||
return use(user, user.getItemInHand(hand))
|
||||
}
|
||||
return super<ItemNameBlockItem>.use(world, user, hand)
|
||||
}
|
||||
|
||||
override fun applyToPokemon(
|
||||
player: ServerPlayer,
|
||||
stack: ItemStack,
|
||||
@@ -64,11 +78,4 @@ class StatusCureItem(val itemName: String, vararg val status: Status) : Cobblemo
|
||||
super.applyToBattlePokemon(player, stack, battlePokemon)
|
||||
battlePokemon.entity?.playSound(CobblemonSounds.MEDICINE_SPRAY_USE, 1F, 1F)
|
||||
}
|
||||
|
||||
override fun use(world: Level, user: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
|
||||
if (user is ServerPlayer) {
|
||||
return use(user, user.getItemInHand(hand))
|
||||
}
|
||||
return InteractionResultHolder.success(user.getItemInHand(hand))
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,8 @@ package com.cobblemon.mod.common.item.interactive
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.Stats
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
class VitaminItem(stat: Stats) : EVIncreaseItem(stat, 10) {
|
||||
class VitaminItem(stat: Stats, block: Block) : EVIncreaseBlockItem(stat, 10, block) {
|
||||
override val sound: SoundEvent = CobblemonSounds.MEDICINE_PILLS_USE
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/antidote_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/antidote_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/antidote_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/antidote_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/antidote_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/antidote_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/antidote_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/antidote_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/antidote_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/antidote_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/antidote_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/antidote_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/antidote_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/antidote_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/antidote_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/antidote_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/awakening_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/awakening_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/awakening_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/awakening_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/awakening_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/awakening_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/awakening_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/awakening_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/awakening_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/awakening_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/awakening_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/awakening_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/awakening_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/awakening_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/awakening_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/awakening_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/black_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/black_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/black_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/black_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/black_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/black_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/black_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/black_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/black_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/black_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/black_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/black_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/blue_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/blue_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/blue_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/blue_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/blue_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/blue_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/blue_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/blue_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/blue_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/blue_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/blue_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/blue_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/blunder_policy"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/blunder_policy",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/blunder_policy",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/blunder_policy",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/bright_powder",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/bright_powder",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/bright_powder"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/bright_powder",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/brown_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/brown_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/brown_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/brown_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/brown_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/brown_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/brown_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/brown_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/brown_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/brown_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/brown_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/brown_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/burn_heal_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/burn_heal_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/burn_heal_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/burn_heal_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/burn_heal_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/burn_heal_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/burn_heal_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/burn_heal_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/burn_heal_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/burn_heal_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/burn_heal_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/burn_heal_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/burn_heal_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/burn_heal_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/burn_heal_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/burn_heal_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/calcium_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/calcium_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/calcium_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/calcium_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/calcium_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/calcium_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/calcium_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/calcium_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/calcium_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/calcium_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/calcium_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/calcium_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/calcium_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/calcium_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/calcium_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/calcium_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/carbos_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/carbos_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/carbos_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/carbos_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/carbos_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/carbos_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/carbos_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/carbos_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/carbos_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/carbos_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/carbos_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/carbos_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/carbos_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/carbos_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/carbos_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/carbos_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/chipped_pot",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/chipped_pot",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/chipped_pot"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/chipped_pot",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_four_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=5,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_five_items"
|
||||
},
|
||||
"items=5,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_five_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=5,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_five_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=5,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_five_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=6,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_six_items"
|
||||
},
|
||||
"items=6,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_six_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=6,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_six_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=6,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_six_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=7,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_seven_items"
|
||||
},
|
||||
"items=7,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_seven_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=7,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_seven_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=7,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_seven_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=8,facing=north": {
|
||||
"model": "cobblemon:block/cleanse_tag_eight_items"
|
||||
},
|
||||
"items=8,facing=east": {
|
||||
"model": "cobblemon:block/cleanse_tag_eight_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=8,facing=south": {
|
||||
"model": "cobblemon:block/cleanse_tag_eight_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=8,facing=west": {
|
||||
"model": "cobblemon:block/cleanse_tag_eight_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/cracked_pot",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/cracked_pot",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/cracked_pot"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/cracked_pot",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/cyan_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/cyan_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/cyan_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/cyan_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/cyan_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/cyan_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/cyan_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/cyan_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/cyan_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/cyan_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/cyan_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/cyan_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/damp_rock",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/damp_rock",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/damp_rock"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/damp_rock",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/destiny_knot",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/destiny_knot",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/destiny_knot"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/destiny_knot",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/dire_hit_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/dire_hit_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/dire_hit_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/dire_hit_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/dire_hit_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/dire_hit_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/dire_hit_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/dire_hit_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/dire_hit_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/dire_hit_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/dire_hit_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/dire_hit_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/dire_hit_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/dire_hit_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/dire_hit_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/dire_hit_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/dubious_disc_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/dubious_disc_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/dubious_disc_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/dubious_disc_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/dubious_disc_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/dubious_disc_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/dubious_disc_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/dubious_disc_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/dubious_disc_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/dubious_disc_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/dubious_disc_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/dubious_disc_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/dubious_disc_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/dubious_disc_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/dubious_disc_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/dubious_disc_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=east,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=north,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=north,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=west,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=west,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north,powered=false": {
|
||||
"model": "cobblemon:block/eject_button"
|
||||
},
|
||||
"face=floor,facing=north,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed"
|
||||
},
|
||||
"face=floor,facing=south,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=south,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=west,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=east,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=south,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=south,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west,powered=false": {
|
||||
"model": "cobblemon:block/eject_button",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=west,powered=true": {
|
||||
"model": "cobblemon:block/eject_button_pressed",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/elixir_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/elixir_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/elixir_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/elixir_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/elixir_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/elixir_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/elixir_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/elixir_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/elixir_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/elixir_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/elixir_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/elixir_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/elixir_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/elixir_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/elixir_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/elixir_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/ether_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/ether_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/ether_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/ether_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/ether_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/ether_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/ether_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/ether_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/ether_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/ether_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/ether_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/ether_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/ether_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/ether_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/ether_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/ether_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/flame_orb_ceiling",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/flame_orb_ceiling"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/flame_orb_ceiling",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/flame_orb_ceiling",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/flame_orb_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/flame_orb_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/flame_orb_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/flame_orb_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/flame_orb_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/flame_orb_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/flame_orb_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/flame_orb_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/full_heal_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/full_heal_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/full_heal_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/full_heal_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/full_heal_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/full_heal_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/full_heal_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/full_heal_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/full_heal_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/full_heal_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/full_heal_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/full_heal_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/full_heal_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/full_heal_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/full_heal_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/full_heal_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/full_restore_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/full_restore_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/full_restore_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/full_restore_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/full_restore_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/full_restore_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/full_restore_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/full_restore_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/full_restore_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/full_restore_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/full_restore_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/full_restore_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/full_restore_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/full_restore_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/full_restore_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/full_restore_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/galarica_cuff",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/galarica_cuff",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/galarica_cuff"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/galarica_cuff",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"when": {
|
||||
"face": "ceiling"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_chain"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "ceiling",
|
||||
"facing": "east"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_ceiling",
|
||||
"y": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "ceiling",
|
||||
"facing": "north"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_ceiling"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "ceiling",
|
||||
"facing": "south"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_ceiling",
|
||||
"y": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "ceiling",
|
||||
"facing": "west"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_ceiling",
|
||||
"y": 270
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "floor",
|
||||
"facing": "east"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_floor",
|
||||
"y": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "floor",
|
||||
"facing": "north"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_floor"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "floor",
|
||||
"facing": "south"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_floor",
|
||||
"y": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "floor",
|
||||
"facing": "west"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_floor",
|
||||
"y": 270
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "wall",
|
||||
"facing": "east"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_wall",
|
||||
"y": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "wall",
|
||||
"facing": "north"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_wall"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "wall",
|
||||
"facing": "south"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_wall",
|
||||
"y": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"face": "wall",
|
||||
"facing": "west"
|
||||
},
|
||||
"apply": {
|
||||
"model": "cobblemon:block/galarica_wreath_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/gray_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/gray_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/gray_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/gray_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/gray_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/gray_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/gray_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/gray_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/gray_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/gray_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/gray_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/gray_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/green_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/green_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/green_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/green_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/green_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/green_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/green_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/green_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/green_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/green_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/green_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/green_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/guard_spec_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/guard_spec_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/guard_spec_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/guard_spec_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/guard_spec_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/guard_spec_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/guard_spec_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/guard_spec_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/guard_spec_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/guard_spec_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/guard_spec_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/guard_spec_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/guard_spec_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/guard_spec_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/guard_spec_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/guard_spec_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/hard_stone",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/hard_stone",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/hard_stone"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/hard_stone",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/heat_rock",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/heat_rock",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/heat_rock"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/heat_rock",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/hp_up_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/hp_up_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/hp_up_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/hp_up_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/hp_up_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/hp_up_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/hp_up_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/hp_up_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/hp_up_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/hp_up_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/hp_up_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/hp_up_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/hp_up_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/hp_up_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/hp_up_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/hp_up_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/hyper_potion_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/hyper_potion_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/hyper_potion_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/hyper_potion_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/hyper_potion_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/hyper_potion_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/hyper_potion_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/hyper_potion_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/hyper_potion_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/hyper_potion_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/hyper_potion_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/hyper_potion_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/hyper_potion_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/hyper_potion_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/hyper_potion_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/hyper_potion_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/ice_heal_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/ice_heal_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/ice_heal_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/ice_heal_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/ice_heal_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/ice_heal_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/ice_heal_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/ice_heal_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/ice_heal_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/ice_heal_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/ice_heal_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/ice_heal_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/ice_heal_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/ice_heal_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/ice_heal_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/ice_heal_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/icy_rock",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/icy_rock",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/icy_rock"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/icy_rock",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/iron_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/iron_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/iron_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/iron_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/iron_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/iron_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/iron_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/iron_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/iron_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/iron_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/iron_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/iron_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/iron_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/iron_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/iron_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/iron_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/iron_ball",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/iron_ball",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/iron_ball"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/iron_ball",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/kings_rock",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/kings_rock",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/kings_rock"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/kings_rock",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/life_orb_ceiling",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/life_orb_ceiling"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/life_orb_ceiling",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/life_orb_ceiling",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/life_orb_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/life_orb_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/life_orb_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/life_orb_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/life_orb_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/life_orb_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/life_orb_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/life_orb_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/light_ball_ceiling",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/light_ball_ceiling"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/light_ball_ceiling",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/light_ball_ceiling",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/light_ball_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/light_ball_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/light_ball_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/light_ball_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/light_ball_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/light_ball_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/light_ball_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/light_ball_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/light_blue_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/light_blue_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/light_blue_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/light_blue_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/light_blue_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/light_blue_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/light_blue_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/light_blue_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/light_blue_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/light_blue_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/light_blue_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/light_blue_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/light_gray_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/light_gray_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/light_gray_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/light_gray_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/light_gray_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/light_gray_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/light_gray_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/light_gray_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/light_gray_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/light_gray_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/light_gray_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/light_gray_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/lime_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/lime_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/lime_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/lime_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/lime_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/lime_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/lime_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/lime_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/lime_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/lime_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/lime_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/lime_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/luminous_moss",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/luminous_moss",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/luminous_moss"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/luminous_moss",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/magenta_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/magenta_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/magenta_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/magenta_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/magenta_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/magenta_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/magenta_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/magenta_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/magenta_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/magenta_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/magenta_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/magenta_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/magnet"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/magnet",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/masterpiece_teacup",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/masterpiece_teacup",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/masterpiece_teacup"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/masterpiece_teacup",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/max_elixir_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/max_elixir_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/max_elixir_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/max_elixir_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/max_elixir_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/max_elixir_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/max_elixir_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/max_elixir_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/max_elixir_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/max_elixir_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/max_elixir_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/max_elixir_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/max_elixir_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/max_elixir_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/max_elixir_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/max_elixir_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/max_ether_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/max_ether_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/max_ether_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/max_ether_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/max_ether_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/max_ether_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/max_ether_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/max_ether_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/max_ether_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/max_ether_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/max_ether_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/max_ether_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/max_ether_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/max_ether_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/max_ether_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/max_ether_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/max_potion_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/max_potion_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/max_potion_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/max_potion_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/max_potion_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/max_potion_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/max_potion_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/max_potion_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/max_potion_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/max_potion_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/max_potion_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/max_potion_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/max_potion_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/max_potion_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/max_potion_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/max_potion_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/metal_coat_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/metal_coat_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/metal_coat_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/metal_coat_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/metal_coat_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/metal_coat_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/metal_coat_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/metal_coat_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/metal_coat_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/metal_coat_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/metal_coat_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/metal_coat_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/metal_coat_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/metal_coat_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/metal_coat_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/metal_coat_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/metal_powder",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/metal_powder",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/metal_powder"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/metal_powder",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,active=false": {
|
||||
"model": "cobblemon:block/metronome",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,active=true": {
|
||||
"model": "cobblemon:block/metronome_active",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,active=false": {
|
||||
"model": "cobblemon:block/metronome"
|
||||
},
|
||||
"facing=north,active=true": {
|
||||
"model": "cobblemon:block/metronome_active"
|
||||
},
|
||||
"facing=south,active=false": {
|
||||
"model": "cobblemon:block/metronome",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,active=true": {
|
||||
"model": "cobblemon:block/metronome_active",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,active=false": {
|
||||
"model": "cobblemon:block/metronome",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,active=true": {
|
||||
"model": "cobblemon:block/metronome_active",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/never_melt_ice",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/never_melt_ice",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/never_melt_ice"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/never_melt_ice",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/orange_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/orange_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/orange_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/orange_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/orange_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/orange_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/orange_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/orange_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/orange_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/orange_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/orange_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/orange_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/paralyze_heal_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/paralyze_heal_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/paralyze_heal_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/paralyze_heal_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/paralyze_heal_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/paralyze_heal_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/paralyze_heal_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/paralyze_heal_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/paralyze_heal_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/paralyze_heal_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/paralyze_heal_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/paralyze_heal_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/paralyze_heal_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/paralyze_heal_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/paralyze_heal_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/paralyze_heal_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=up": {
|
||||
"model": "cobblemon:block/peat_block"
|
||||
},
|
||||
"facing=down": {
|
||||
"model": "cobblemon:block/peat_block",
|
||||
"x": 180,
|
||||
"uvlock": false
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/peat_block",
|
||||
"x": 270,
|
||||
"uvlock": false
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/peat_block",
|
||||
"x": 270,
|
||||
"y": 90,
|
||||
"uvlock": false
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/peat_block",
|
||||
"x": 90,
|
||||
"uvlock": false
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/peat_block",
|
||||
"x": 90,
|
||||
"y": 90,
|
||||
"uvlock": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/pink_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/pink_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/pink_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/pink_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/pink_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/pink_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/pink_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/pink_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/pink_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/pink_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/pink_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/pink_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/potion_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/potion_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/potion_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/potion_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/potion_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/potion_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/potion_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/potion_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/potion_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/potion_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/potion_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/potion_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/potion_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/potion_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/potion_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/potion_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/pp_max_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/pp_max_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/pp_max_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/pp_max_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/pp_max_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/pp_max_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/pp_max_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/pp_max_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/pp_max_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/pp_max_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/pp_max_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/pp_max_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/pp_max_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/pp_max_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/pp_max_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/pp_max_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/pp_up_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/pp_up_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/pp_up_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/pp_up_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/pp_up_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/pp_up_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/pp_up_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/pp_up_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/pp_up_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/pp_up_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/pp_up_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/pp_up_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/pp_up_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/pp_up_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/pp_up_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/pp_up_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/protein_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/protein_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/protein_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/protein_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/protein_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/protein_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/protein_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/protein_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/protein_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/protein_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/protein_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/protein_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/protein_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/protein_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/protein_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/protein_four_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/purple_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/purple_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/purple_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/purple_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/purple_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/purple_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/purple_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/purple_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/purple_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/purple_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/purple_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/purple_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/quick_powder",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/quick_powder",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/quick_powder"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/quick_powder",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/red_plaque_hanging",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/red_plaque_hanging"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/red_plaque_hanging",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/red_plaque_hanging",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/red_plaque_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/red_plaque_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/red_plaque_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/red_plaque_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/red_plaque_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/red_plaque_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/red_plaque_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/red_plaque_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/ring_target"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/ring_target",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/ring_target",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/ring_target",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/sachet",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/sachet",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/sachet"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/sachet",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east": {
|
||||
"model": "cobblemon:block/smoke_ball_ceiling",
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=north": {
|
||||
"model": "cobblemon:block/smoke_ball_ceiling"
|
||||
},
|
||||
"face=ceiling,facing=south": {
|
||||
"model": "cobblemon:block/smoke_ball_ceiling",
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=west": {
|
||||
"model": "cobblemon:block/smoke_ball_ceiling",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=east": {
|
||||
"model": "cobblemon:block/smoke_ball_floor",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north": {
|
||||
"model": "cobblemon:block/smoke_ball_floor"
|
||||
},
|
||||
"face=floor,facing=south": {
|
||||
"model": "cobblemon:block/smoke_ball_floor",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west": {
|
||||
"model": "cobblemon:block/smoke_ball_floor",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east": {
|
||||
"model": "cobblemon:block/smoke_ball_wall",
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north": {
|
||||
"model": "cobblemon:block/smoke_ball_wall"
|
||||
},
|
||||
"face=wall,facing=south": {
|
||||
"model": "cobblemon:block/smoke_ball_wall",
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west": {
|
||||
"model": "cobblemon:block/smoke_ball_wall",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/smooth_rock",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/smooth_rock",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/smooth_rock"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/smooth_rock",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"variants": {
|
||||
"items=1,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_one_item"
|
||||
},
|
||||
"items=1,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_one_item",
|
||||
"y": 90
|
||||
},
|
||||
"items=1,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_one_item",
|
||||
"y": 180
|
||||
},
|
||||
"items=1,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_one_item",
|
||||
"y": 270
|
||||
},
|
||||
"items=2,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_two_items"
|
||||
},
|
||||
"items=2,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_two_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=2,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_two_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=2,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_two_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=3,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_three_items"
|
||||
},
|
||||
"items=3,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_three_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=3,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_three_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=3,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_three_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=4,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_four_items"
|
||||
},
|
||||
"items=4,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_four_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=4,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_four_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=4,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_four_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=5,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_five_items"
|
||||
},
|
||||
"items=5,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_five_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=5,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_five_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=5,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_five_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=6,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_six_items"
|
||||
},
|
||||
"items=6,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_six_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=6,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_six_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=6,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_six_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=7,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_seven_items"
|
||||
},
|
||||
"items=7,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_seven_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=7,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_seven_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=7,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_seven_items",
|
||||
"y": 270
|
||||
},
|
||||
"items=8,facing=north": {
|
||||
"model": "cobblemon:block/spell_tag_eight_items"
|
||||
},
|
||||
"items=8,facing=east": {
|
||||
"model": "cobblemon:block/spell_tag_eight_items",
|
||||
"y": 90
|
||||
},
|
||||
"items=8,facing=south": {
|
||||
"model": "cobblemon:block/spell_tag_eight_items",
|
||||
"y": 180
|
||||
},
|
||||
"items=8,facing=west": {
|
||||
"model": "cobblemon:block/spell_tag_eight_items",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user