Compare commits

..
Author SHA1 Message Date
PaulandLandon Wills 9a0f389c6b experimenting with entity bound battle code 2024-07-08 20:16:03 -04:00
763 changed files with 1945 additions and 28103 deletions
-1
View File
@@ -3,4 +3,3 @@
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf
CHANGELOG.md merge=union
+1 -23
View File
@@ -1,27 +1,5 @@
# Changelog
## [1.5.3](#1-5-3)
### Fixes
- Scaled down Amaura's fetus model to avoid clipping through the tank while animating
- Added Polished Tumblestone and Tumblestone Brick block sets from Tumblestone, Black Tumblestone, and Sky Tumblestone.
- Fixed the Seafloor spawning context not being a usable context.
- Fixed Pokemon spawning in non-full blocks like slabs.
- Fixed Gilded Chests not dropping the chest itself when broken, only the contents.
- Fixed Pokémon losing their Hidden Ability through evolution if the middle stage did not have a Hidden Ability.
### Additions
- Added extra visuals to early berry growth stages
### Changes
- Altered the item model for Medicinal Leeks and Roasted Leeks to be held like sticks and other rod items.
- Adjusted some berry balance values like yield and growth times
- Changes to mulch buffs/durations
### Developer
### Data Pack & Resource Pack Creators
- Added support for "shedders" similar to Shedinja's evolution logic.
## [1.5.2 (May 27th, 2024)](#1-5-2)
### Fixes
- Fixed Wooloo and Dubwool dyeing making your game start dying. Only if you do it on a server.
@@ -105,7 +83,7 @@
- Fixed a bunch of spam during world generation.
- Fixed a bug in which throwing a Poké Ball at a player owned Pokémon with the ability Illusion would reveal its true species. Hilarious meta strategy.
- Fixed root-part animations not working for JSON posed Pokémon. You didn't notice this but if we didn't fix this in this update then if you use Quick Attack a lot you'd have seen a whole lot of [this](https://cdn.discordapp.com/attachments/1076993968803434627/1242660506783715369/Minecraft__1.20.1_-_Singleplayer_2024-05-21_22-08-17.mp4?ex=66549408&is=66534288&hm=ff95ee293eb15634fd63e6546534ea279540a1c892605e8d561593ca2c5600c5&) which is damn funny but very unintended.
### Developer
- Changed SpawnAction#complete to return a nullable generic R (the spawn action result) instead of a boolean. Provides more information this way.
- Added an event that fires when a fossil is revived, with or without a player.
@@ -371,6 +371,36 @@ object Cobblemon {
BATTLE_VICTORY.subscribe { AdvancementHandler.onWinBattle(it) }
EVOLUTION_COMPLETE.subscribe(Priority.LOWEST) { event ->
AdvancementHandler.onEvolve(event)
val pokemon = event.pokemon
val ninjaskIdentifier = cobblemonResource("ninjask")
// Ensure the config option is enabled and that the result was a ninjask and that shedinja exists
if (this.config.ninjaskCreatesShedinja && pokemon.species.resourceIdentifier == ninjaskIdentifier && PokemonSpecies.getByIdentifier(Pokemon.SHEDINJA) != null) {
val player = pokemon.getOwnerPlayer() ?: return@subscribe
if (player.isCreative || player.inventory.containsAny { it.item is PokeBallItem }) {
var pokeball = Items.AIR
player.inventory.combinedInventory.forEach {
it.forEach {
itemStack -> if (itemStack.item is PokeBallItem && pokeball == Items.AIR) {
pokeball = itemStack.item as PokeBallItem
}
}
}
if (!player.isCreative) {
player.inventory.removeAmountIf(1) { it.item is PokeBallItem }
}
if (pokeball == Items.AIR) {
pokeball = CobblemonItems.POKE_BALL
}
val properties = event.evolution.result.copy()
properties.species = Pokemon.SHEDINJA.toString()
val product = pokemon.clone()
product.removeHeldItem()
properties.apply(product)
product.caughtBall = (pokeball as PokeBallItem).pokeBall
pokemon.storeCoordinates.get()?.store?.add(product)
CobblemonCriteria.EVOLVE_POKEMON.trigger(player, EvolvePokemonContext(event.pokemon.preEvolution!!.species.resourceIdentifier, product.species.resourceIdentifier, playerData.get(player).advancementData.totalEvolvedCount))
}
}
}
LEVEL_UP_EVENT.subscribe { AdvancementHandler.onLevelUp(it) }
TRADE_COMPLETED.subscribe { AdvancementHandler.onTradeCompleted(it) }
@@ -214,213 +214,6 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_TUMBLESTONE = this.create("polished_tumblestone", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_TUMBLESTONE_STAIRS = this.create("polished_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(POLISHED_TUMBLESTONE.defaultState, AbstractBlock.Settings.copy(POLISHED_TUMBLESTONE)))
@JvmField
val POLISHED_TUMBLESTONE_SLAB = this.create("polished_tumblestone_slab", SlabBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_TUMBLESTONE_WALL = this.create("polished_tumblestone_wall", WallBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val CHISELED_POLISHED_TUMBLESTONE = this.create("chiseled_polished_tumblestone", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val TUMBLESTONE_BRICKS = this.create("tumblestone_bricks", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val TUMBLESTONE_BRICK_STAIRS = this.create("tumblestone_brick_stairs", StairsBlockInvoker.`cobblemon$create`(TUMBLESTONE_BRICKS.defaultState, AbstractBlock.Settings.copy(TUMBLESTONE_BRICKS)))
@JvmField
val TUMBLESTONE_BRICK_SLAB = this.create("tumblestone_brick_slab", SlabBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val TUMBLESTONE_BRICK_WALL = this.create("tumblestone_brick_wall", WallBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val CHISELED_TUMBLESTONE_BRICKS = this.create("chiseled_tumblestone_bricks", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_ORANGE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_SKY_TUMBLESTONE = this.create("polished_sky_tumblestone", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_SKY_TUMBLESTONE_STAIRS = this.create("polished_sky_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(POLISHED_SKY_TUMBLESTONE.defaultState, AbstractBlock.Settings.copy(POLISHED_SKY_TUMBLESTONE)))
@JvmField
val POLISHED_SKY_TUMBLESTONE_SLAB = this.create("polished_sky_tumblestone_slab", SlabBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_SKY_TUMBLESTONE_WALL = this.create("polished_sky_tumblestone_wall", WallBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val CHISELED_POLISHED_SKY_TUMBLESTONE = this.create("chiseled_polished_sky_tumblestone", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val SKY_TUMBLESTONE_BRICKS = this.create("sky_tumblestone_bricks", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val SKY_TUMBLESTONE_BRICK_STAIRS = this.create("sky_tumblestone_brick_stairs", StairsBlockInvoker.`cobblemon$create`(
SKY_TUMBLESTONE_BRICKS.defaultState, AbstractBlock.Settings.copy(SKY_TUMBLESTONE_BRICKS)))
@JvmField
val SKY_TUMBLESTONE_BRICK_SLAB = this.create("sky_tumblestone_brick_slab", SlabBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val SKY_TUMBLESTONE_BRICK_WALL = this.create("sky_tumblestone_brick_wall", WallBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val CHISELED_SKY_TUMBLESTONE_BRICKS = this.create("chiseled_sky_tumblestone_bricks", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.LIGHT_BLUE)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_BLACK_TUMBLESTONE = this.create("polished_black_tumblestone", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_BLACK_TUMBLESTONE_STAIRS = this.create("polished_black_tumblestone_stairs", StairsBlockInvoker.`cobblemon$create`(POLISHED_BLACK_TUMBLESTONE.defaultState, AbstractBlock.Settings.copy(POLISHED_BLACK_TUMBLESTONE)))
@JvmField
val POLISHED_BLACK_TUMBLESTONE_SLAB = this.create("polished_black_tumblestone_slab", SlabBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val POLISHED_BLACK_TUMBLESTONE_WALL = this.create("polished_black_tumblestone_wall", WallBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val CHISELED_POLISHED_BLACK_TUMBLESTONE = this.create("chiseled_polished_black_tumblestone", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val BLACK_TUMBLESTONE_BRICKS = this.create("black_tumblestone_bricks", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val BLACK_TUMBLESTONE_BRICK_STAIRS = this.create("black_tumblestone_brick_stairs", StairsBlockInvoker.`cobblemon$create`(
BLACK_TUMBLESTONE_BRICKS.defaultState, AbstractBlock.Settings.copy(BLACK_TUMBLESTONE_BRICKS)))
@JvmField
val BLACK_TUMBLESTONE_BRICK_SLAB = this.create("black_tumblestone_brick_slab", SlabBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val BLACK_TUMBLESTONE_BRICK_WALL = this.create("black_tumblestone_brick_wall", WallBlock(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val CHISELED_BLACK_TUMBLESTONE_BRICKS = this.create("chiseled_black_tumblestone_bricks", Block(AbstractBlock.Settings.create()
.mapColor(MapColor.TERRACOTTA_BLACK)
.strength(1.0F)
.sounds(CobblemonSounds.TUMBLESTONE_BLOCK_SOUNDS)
.requiresTool()
.instrument(Instrument.BASEDRUM)
))
@JvmField
val BLACK_APRICORN = apricornBlock("black_apricorn", Apricorn.BLACK)
@JvmField
@@ -735,7 +528,6 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, RegistryKey<Registry<
val WEPEAR_BERRY = this.berryBlock("wepear")
val WIKI_BERRY = this.berryBlock("wiki")
val YACHE_BERRY = this.berryBlock("yache")
//val BINDING_SOIL = this.create("binding_soil", BindingSoilBlock(AbstractBlock.Settings.create()))
init {
/**
@@ -48,6 +48,7 @@ object CobblemonCommands {
PokemonRestartCommand.register(dispatcher)
BedrockParticleCommand.register(dispatcher)
OpenDialogueCommand.register(dispatcher)
ChallengeCommand.register(dispatcher)
// Possibly lock down registration if and only if under dev environment or running in an environment
// with a certain system environment variable set
@@ -23,7 +23,6 @@ import com.cobblemon.mod.common.item.armor.CobblemonArmorTrims
import com.cobblemon.mod.common.item.battle.DireHitItem
import com.cobblemon.mod.common.item.battle.GuardSpecItem
import com.cobblemon.mod.common.item.battle.XStatItem
import com.cobblemon.mod.common.item.berry.BerryItem
import com.cobblemon.mod.common.item.berry.FriendshipRaisingBerryItem
import com.cobblemon.mod.common.item.berry.HealingBerryItem
import com.cobblemon.mod.common.item.berry.PPRestoringBerryItem
@@ -933,67 +932,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
@JvmField
val BLACK_TUMBLESTONE_BLOCK = blockItem("black_tumblestone_block", CobblemonBlocks.BLACK_TUMBLESTONE_BLOCK)
@JvmField
val POLISHED_TUMBLESTONE = blockItem("polished_tumblestone", CobblemonBlocks.POLISHED_TUMBLESTONE)
@JvmField
val POLISHED_TUMBLESTONE_STAIRS = blockItem("polished_tumblestone_stairs", CobblemonBlocks.POLISHED_TUMBLESTONE_STAIRS)
@JvmField
val POLISHED_TUMBLESTONE_SLAB = blockItem("polished_tumblestone_slab", CobblemonBlocks.POLISHED_TUMBLESTONE_SLAB)
@JvmField
val POLISHED_TUMBLESTONE_WALL = blockItem("polished_tumblestone_wall", CobblemonBlocks.POLISHED_TUMBLESTONE_WALL)
@JvmField
val CHISELED_POLISHED_TUMBLESTONE = blockItem("chiseled_polished_tumblestone", CobblemonBlocks.CHISELED_POLISHED_TUMBLESTONE)
@JvmField
val TUMBLESTONE_BRICKS = blockItem("tumblestone_bricks", CobblemonBlocks.TUMBLESTONE_BRICKS)
@JvmField
val TUMBLESTONE_BRICK_STAIRS = blockItem("tumblestone_brick_stairs", CobblemonBlocks.TUMBLESTONE_BRICK_STAIRS)
@JvmField
val TUMBLESTONE_BRICK_SLAB = blockItem("tumblestone_brick_slab", CobblemonBlocks.TUMBLESTONE_BRICK_SLAB)
@JvmField
val TUMBLESTONE_BRICK_WALL = blockItem("tumblestone_brick_wall", CobblemonBlocks.TUMBLESTONE_BRICK_WALL)
@JvmField
val CHISELED_TUMBLESTONE_BRICKS = blockItem("chiseled_tumblestone_bricks", CobblemonBlocks.CHISELED_TUMBLESTONE_BRICKS)
@JvmField
val POLISHED_SKY_TUMBLESTONE = blockItem("polished_sky_tumblestone", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE)
@JvmField
val POLISHED_SKY_TUMBLESTONE_STAIRS = blockItem("polished_sky_tumblestone_stairs", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE_STAIRS)
@JvmField
val POLISHED_SKY_TUMBLESTONE_SLAB = blockItem("polished_sky_tumblestone_slab", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE_SLAB)
@JvmField
val POLISHED_SKY_TUMBLESTONE_WALL = blockItem("polished_sky_tumblestone_wall", CobblemonBlocks.POLISHED_SKY_TUMBLESTONE_WALL)
@JvmField
val CHISELED_POLISHED_SKY_TUMBLESTONE = blockItem("chiseled_polished_sky_tumblestone", CobblemonBlocks.CHISELED_POLISHED_SKY_TUMBLESTONE)
@JvmField
val SKY_TUMBLESTONE_BRICKS = blockItem("sky_tumblestone_bricks", CobblemonBlocks.SKY_TUMBLESTONE_BRICKS)
@JvmField
val SKY_TUMBLESTONE_BRICK_STAIRS = blockItem("sky_tumblestone_brick_stairs", CobblemonBlocks.SKY_TUMBLESTONE_BRICK_STAIRS)
@JvmField
val SKY_TUMBLESTONE_BRICK_SLAB = blockItem("sky_tumblestone_brick_slab", CobblemonBlocks.SKY_TUMBLESTONE_BRICK_SLAB)
@JvmField
val SKY_TUMBLESTONE_BRICK_WALL = blockItem("sky_tumblestone_brick_wall", CobblemonBlocks.SKY_TUMBLESTONE_BRICK_WALL)
@JvmField
val CHISELED_SKY_TUMBLESTONE_BRICKS = blockItem("chiseled_sky_tumblestone_bricks", CobblemonBlocks.CHISELED_SKY_TUMBLESTONE_BRICKS)
@JvmField
val POLISHED_BLACK_TUMBLESTONE = blockItem("polished_black_tumblestone", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_STAIRS = blockItem("polished_black_tumblestone_stairs", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE_STAIRS)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_SLAB = blockItem("polished_black_tumblestone_slab", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE_SLAB)
@JvmField
val POLISHED_BLACK_TUMBLESTONE_WALL = blockItem("polished_black_tumblestone_wall", CobblemonBlocks.POLISHED_BLACK_TUMBLESTONE_WALL)
@JvmField
val CHISELED_POLISHED_BLACK_TUMBLESTONE = blockItem("chiseled_polished_black_tumblestone", CobblemonBlocks.CHISELED_POLISHED_BLACK_TUMBLESTONE)
@JvmField
val BLACK_TUMBLESTONE_BRICKS = blockItem("black_tumblestone_bricks", CobblemonBlocks.BLACK_TUMBLESTONE_BRICKS)
@JvmField
val BLACK_TUMBLESTONE_BRICK_STAIRS = blockItem("black_tumblestone_brick_stairs", CobblemonBlocks.BLACK_TUMBLESTONE_BRICK_STAIRS)
@JvmField
val BLACK_TUMBLESTONE_BRICK_SLAB = blockItem("black_tumblestone_brick_slab", CobblemonBlocks.BLACK_TUMBLESTONE_BRICK_SLAB)
@JvmField
val BLACK_TUMBLESTONE_BRICK_WALL = blockItem("black_tumblestone_brick_wall", CobblemonBlocks.BLACK_TUMBLESTONE_BRICK_WALL)
@JvmField
val CHISELED_BLACK_TUMBLESTONE_BRICKS = blockItem("chiseled_black_tumblestone_bricks", CobblemonBlocks.CHISELED_BLACK_TUMBLESTONE_BRICKS)
@JvmField
val AUTOMATON_ARMOR_TRIM_SMITHING_TEMPLATE: SmithingTemplateItem = this.create(
"automaton_armor_trim_smithing_template",
@@ -1047,8 +985,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, RegistryKey<Registry<It
val STEEL_GEM = noSettingsItem("steel_gem")
@JvmField
val FAIRY_GEM = noSettingsItem("fairy_gem")
//@JvmField
//val BINDING_SOIL = blockItem("binding_soil", CobblemonBlocks.BINDING_SOIL)
private fun blockItem(name: String, block: Block): BlockItem = this.create(name, BlockItem(block, Item.Settings()))
@@ -16,7 +16,7 @@ import com.cobblemon.mod.common.api.events.berry.BerryYieldCalculationEvent
import com.cobblemon.mod.common.api.mulch.MulchVariant
import com.cobblemon.mod.common.block.BerryBlock
import com.cobblemon.mod.common.block.entity.BerryBlockEntity
import com.cobblemon.mod.common.item.berry.BerryItem
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.pokemon.Nature
import com.cobblemon.mod.common.util.readBox
import com.cobblemon.mod.common.util.writeBox
@@ -45,8 +45,9 @@ import net.minecraft.world.biome.Biome
* @property identifier The [Identifier] of this berry.
* @property baseYield The [IntRange] possible for the berry tree before [bonusYield] is calculated.
* @property preferredBiomeTags The [TagKey]s of the berries preffered biomes. Determines spawning and yield
* @property growthTime The [IntRange] possible in minutes for how long the berry tree takes to grow frome age 0 to age 3
* @property refreshRate The [IntRange] possible in minutes for how long the berry tree takes to grow from age 3 to age 5
* @property growthTime The [IntRange] possible in minutes for how long the berry tree takes to grow.
* @property refreshRate The [IntRange] possible in minutes for how long the berry tree takes to regrow its berries once it has been harvested.
* @depreciated @property lifeCycles The [IntRange] possible for the berry to live for between harvests.
* @property favoriteMulches The types of mulches that benefit this berries yield
* @property growthFactors An array of [GrowthFactor]s that will affect this berry. The client is not aware of these.
* @property mutations A map of the partner berry as the key and the value as the resulting mutation with this berry.
@@ -59,7 +60,6 @@ import net.minecraft.world.biome.Biome
* @property flowerTexture The [Identifier] for the texture of the berry in flower form. This is resolved into a [ModelPart] on the client.
* @property fruitModelIdentifier The [Identifier] for the model of the berry in flower form. This is resolved into a [ModelPart] on the client.
* @property fruitTexture The [Identifier] for the texture of the berry in flower form.
* @property stageOnePositioning Transformation of the berry model for age 0
*
* @throws IllegalArgumentException if the any yield range argument is not a positive range.
*/
@@ -69,6 +69,7 @@ class Berry(
val preferredBiomeTags: List<TagKey<Biome>>,
val growthTime: IntRange,
val refreshRate: IntRange,
//val lifeCycles: IntRange,
val favoriteMulches: EnumSet<MulchVariant>,
val growthFactors: Collection<GrowthFactor>,
val spawnConditions: List<BerrySpawnCondition>,
@@ -87,9 +88,7 @@ class Berry(
@SerializedName("fruitModel")
val fruitModelIdentifier: Identifier,
val fruitTexture: Identifier,
val stageOnePositioning: GrowthPoint,
val weight: Float,
val boneMealChance: Float
val weight: Float
) {
@Transient
@@ -162,9 +161,8 @@ class Berry(
val bonus = this.bonusYield(world, state, pos)
var yield = base + bonus.first
val treeEntity = world.getBlockEntity(pos) as BerryBlockEntity
if (BerryBlock.getMulch(treeEntity) == MulchVariant.RICH) {
//I hope the upper bound isnt exclusive, especially when there's a method called nextBetweenExclusive
yield += world.random.nextBetween(1, 3)
if (BerryBlock.getMulch(state) == MulchVariant.RICH) {
yield = min(yield + 1, maxYield())
treeEntity.decrementMulchDuration(world, pos, state)
}
val event = BerryYieldCalculationEvent(this, world, state, pos, placer, yield, bonus.second)
@@ -281,13 +279,6 @@ class Berry(
buffer.writeIdentifier(this.flowerTexture)
buffer.writeIdentifier(this.fruitModelIdentifier)
buffer.writeIdentifier(this.fruitTexture)
buffer.writeDouble(stageOnePositioning.position.x)
buffer.writeDouble(stageOnePositioning.position.y)
buffer.writeDouble(stageOnePositioning.position.z)
buffer.writeDouble(stageOnePositioning.rotation.x)
buffer.writeDouble(stageOnePositioning.rotation.y)
buffer.writeDouble(stageOnePositioning.rotation.z)
buffer.writeFloat(boneMealChance)
}
/**
@@ -301,8 +292,7 @@ class Berry(
private fun bonusYield(world: World, state: BlockState, pos: BlockPos): Pair<Int, Collection<GrowthFactor>> {
var bonus = 0
val passed = arrayListOf<GrowthFactor>()
val treeEntity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return 0 to passed
val mulchVariant = BerryBlock.getMulch(treeEntity)
val mulchVariant = BerryBlock.getMulch(state)
val hasBiomeMulch = mulchVariant in favoriteMulches
this.growthFactors.forEach { factor ->
if (factor.isValid(world, state, pos)) {
@@ -349,9 +339,7 @@ class Berry(
val flowerTexture = buffer.readIdentifier()
val fruitModelIdentifier = buffer.readIdentifier()
val fruitTexture = buffer.readIdentifier()
val stageOneYPos = GrowthPoint(Vec3d(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()), Vec3d(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()))
val boneMealChance = buffer.readFloat()
return Berry(identifier, baseYield, emptyList(), growthTime, refreshRate, favMulchs, emptySet(), emptyList(), growthPoints, randomizedGrowthPoints, mutations, sproutShapeBoxes, matureShapeBoxes, flavors, tintIndexes, flowerModelIdentifier, flowerTexture, fruitModelIdentifier, fruitTexture, stageOneYPos, 0F, boneMealChance)
return Berry(identifier, baseYield, emptyList(), growthTime, refreshRate, favMulchs, emptySet(), emptyList(), growthPoints, randomizedGrowthPoints, mutations, sproutShapeBoxes, matureShapeBoxes, flavors, tintIndexes, flowerModelIdentifier, flowerTexture, fruitModelIdentifier, fruitTexture, 0F)
}
}
@@ -8,30 +8,24 @@
package com.cobblemon.mod.common.api.mulch
import com.cobblemon.mod.common.BakingOverride
import com.cobblemon.mod.common.client.CobblemonBakingOverrides
import net.minecraft.util.StringIdentifiable
/**
* Represents the different types of Mulch implemented in the mod.
*
*/
enum class MulchVariant(val model: BakingOverride?, val duration: Int = -1) : StringIdentifiable {
COARSE(CobblemonBakingOverrides.COARSE_MULCH),
GROWTH(CobblemonBakingOverrides.GROWTH_MULCH, 5),
HUMID(CobblemonBakingOverrides.HUMID_MULCH),
LOAMY(CobblemonBakingOverrides.LOAMY_MULCH),
PEAT(CobblemonBakingOverrides.PEAT_MULCH),
RICH(CobblemonBakingOverrides.RICH_MULCH, 5),
SANDY(CobblemonBakingOverrides.SANDY_MULCH),
SURPRISE(CobblemonBakingOverrides.SURPRISE_MULCH, 3),
NONE(null);
enum class MulchVariant(val duration: Int = -1) : StringIdentifiable {
COARSE,
GROWTH(3),
HUMID,
LOAMY,
PEAT,
RICH(3),
SANDY,
SURPRISE(3),
NONE;
override fun asString(): String {
return name.lowercase()
}
companion object {
const val GROWTH_TIME_MULTIPLIER = 0.5
}
}
@@ -8,11 +8,7 @@
package com.cobblemon.mod.common.api.pokemon.evolution
import com.cobblemon.mod.common.Cobblemon.playerData
import com.cobblemon.mod.common.CobblemonItems
import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.advancement.CobblemonCriteria
import com.cobblemon.mod.common.advancement.criterion.EvolvePokemonContext
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.pokemon.evolution.EvolutionCompleteEvent
import com.cobblemon.mod.common.api.events.pokemon.evolution.EvolutionTestedEvent
@@ -21,9 +17,7 @@ import com.cobblemon.mod.common.api.moves.MoveTemplate
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
import com.cobblemon.mod.common.api.pokemon.evolution.requirement.EvolutionRequirement
import com.cobblemon.mod.common.api.scheduling.afterOnServer
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
import com.cobblemon.mod.common.entity.generic.GenericBedrockEntity
import com.cobblemon.mod.common.item.PokeBallItem
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.pokemon.activestate.ShoulderedState
import com.cobblemon.mod.common.pokemon.evolution.variants.ItemInteractionEvolution
@@ -31,7 +25,6 @@ import com.cobblemon.mod.common.pokemon.evolution.variants.LevelUpEvolution
import com.cobblemon.mod.common.pokemon.evolution.variants.TradeEvolution
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.lang
import com.cobblemon.mod.common.util.party
import net.minecraft.item.ItemStack
import net.minecraft.sound.SoundCategory
@@ -51,11 +44,6 @@ interface Evolution : EvolutionLike {
*/
val result: PokemonProperties
/**
* The shed result of this evolution.
*/
val shedder: PokemonProperties?
/**
* If this evolution allows the user to choose when to start it or not.
*/
@@ -107,36 +95,6 @@ interface Evolution : EvolutionLike {
return true
}
fun shed(pokemon: Pokemon): Boolean {
val innerShedder = shedder ?: return false
val owner = pokemon.getOwnerPlayer() ?: return false
// If the player has at least one Pokeball in their inventory.
var pokeballStack: ItemStack? = null
if (!owner.isCreative) {
for (i in 0 until owner.inventory.size()) {
val stackI = owner.inventory.getStack(i)
if (stackI.isIn(CobblemonItemTags.POKE_BALLS)) {
pokeballStack = stackI
}
}
if (pokeballStack == null) return false
}
// If the player has at least one empty spot in their party.
val emptySlot = owner.party().getFirstAvailablePosition() ?: return false
// Add shed Pokemon to player's party
val shedPokemon = pokemon.clone()
shedPokemon.removeHeldItem()
innerShedder.apply(shedPokemon)
shedPokemon.caughtBall = ((pokeballStack?.item ?: CobblemonItems.POKE_BALL) as PokeBallItem).pokeBall
pokemon.storeCoordinates.get()?.store?.add(shedPokemon)
CobblemonCriteria.EVOLVE_POKEMON.trigger(owner, EvolvePokemonContext(pokemon.preEvolution!!.species.resourceIdentifier, shedPokemon.species.resourceIdentifier, playerData.get(owner).advancementData.totalEvolvedCount))
// Consume one of the balls
pokeballStack?.decrement(1)
return true
}
/**
* Starts this evolution as soon as possible.
@@ -197,7 +155,6 @@ interface Evolution : EvolutionLike {
// we want to instantly tick for example you might only evolve your Bulbasaur at level 34 so Venusaur should be immediately available
pokemon.lockedEvolutions.filterIsInstance<PassiveEvolution>().forEach { evolution -> evolution.attemptEvolution(pokemon) }
pokemon.getOwnerPlayer()?.playSound(CobblemonSounds.EVOLVING, SoundCategory.NEUTRAL, 1F, 1F)
this.shed(pokemon)
CobblemonEvents.EVOLUTION_COMPLETE.post(EvolutionCompleteEvent(pokemon, this))
}
@@ -10,7 +10,12 @@ package com.cobblemon.mod.common.api.spawning
import com.cobblemon.mod.common.Cobblemon.LOGGER
import com.cobblemon.mod.common.api.entity.Despawner
import com.cobblemon.mod.common.api.spawning.condition.*
import com.cobblemon.mod.common.api.spawning.condition.AreaSpawningCondition
import com.cobblemon.mod.common.api.spawning.condition.BasicSpawningCondition
import com.cobblemon.mod.common.api.spawning.condition.GroundedSpawningCondition
import com.cobblemon.mod.common.api.spawning.condition.SpawningCondition
import com.cobblemon.mod.common.api.spawning.condition.SubmergedSpawningCondition
import com.cobblemon.mod.common.api.spawning.condition.SurfaceSpawningCondition
import com.cobblemon.mod.common.api.spawning.context.AreaContextResolver
import com.cobblemon.mod.common.api.spawning.context.GroundedSpawningContext
import com.cobblemon.mod.common.api.spawning.context.LavafloorSpawningContext
@@ -86,7 +91,6 @@ object BestSpawner {
SpawningCondition.register(SubmergedSpawningCondition.NAME, SubmergedSpawningCondition::class.java)
SpawningCondition.register(GroundedSpawningCondition.NAME, GroundedSpawningCondition::class.java)
SpawningCondition.register(SurfaceSpawningCondition.NAME, SurfaceSpawningCondition::class.java)
SpawningCondition.register(SeafloorSpawningCondition.NAME, SeafloorSpawningCondition::class.java)
LOGGER.info("Loaded ${SpawningCondition.conditionTypes.size} spawning condition types.")
SpawningContextCalculator.register(GroundedSpawningContextCalculator)
@@ -96,7 +100,7 @@ object BestSpawner {
SpawningContextCalculator.register(SurfaceSpawningContextCalculator)
SpawningContext.register(name = "grounded", clazz = GroundedSpawningContext::class.java, defaultCondition = GroundedSpawningCondition.NAME)
SpawningContext.register(name = "seafloor", clazz = SeafloorSpawningContext::class.java, defaultCondition = SeafloorSpawningCondition.NAME)
SpawningContext.register(name = "seafloor", clazz = SeafloorSpawningContext::class.java, defaultCondition = GroundedSpawningCondition.NAME)
SpawningContext.register(name = "lavafloor", clazz = LavafloorSpawningContext::class.java, defaultCondition = GroundedSpawningCondition.NAME)
SpawningContext.register(name = "submerged", clazz = SubmergedSpawningContext::class.java, defaultCondition = SubmergedSpawningCondition.NAME)
SpawningContext.register(name = "surface", clazz = SurfaceSpawningContext::class.java, defaultCondition = SurfaceSpawningCondition.NAME)
@@ -1,58 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.spawning.condition
import com.cobblemon.mod.common.api.conditional.RegistryLikeCondition
import com.cobblemon.mod.common.api.spawning.context.SeafloorSpawningContext
import com.cobblemon.mod.common.util.Merger
import net.minecraft.block.Block
/**
* Base type for a spawning condition that applies to some kind of [SeafloorSpawningContext]. This
* can be extended for subclasses of [SeafloorSpawningContext].
*
* Borrowed the Grounded context code since it was unintentionally spawning Pokémon on the sea floor
* already. Seems to be working fine /shrug
*
* @author FrankTheFarmer
* @since May 22nd, 2024
*/
abstract class SeafloorTypeSpawningCondition<T : SeafloorSpawningContext> : AreaTypeSpawningCondition<T>() {
var neededBaseBlocks: MutableList<RegistryLikeCondition<Block>>? = null
override fun fits(ctx: T): Boolean {
return if (!super.fits(ctx)) {
false
} else if (minHeight != null && ctx.height < minHeight!!) {
return false
} else if (maxHeight != null && ctx.height > maxHeight!!) {
return false
} else !(neededBaseBlocks != null && neededBaseBlocks!!.none { it.fits(ctx.baseBlock.block, ctx.blockRegistry) })
}
override fun copyFrom(other: SpawningCondition<*>, merger: Merger) {
super.copyFrom(other, merger)
if (other is SeafloorTypeSpawningCondition) {
neededBaseBlocks = merger.merge(neededBaseBlocks, other.neededBaseBlocks)?.toMutableList()
}
}
}
/**
* A spawning condition for a [SeafloorSpawningContext].
*
* @author FrankTheFarmer
* @since May 22nd, 2024
*/
open class SeafloorSpawningCondition : SeafloorTypeSpawningCondition<SeafloorSpawningContext>() {
override fun contextClass() = SeafloorSpawningContext::class.java
companion object {
const val NAME = "seafloor"
}
}
@@ -49,7 +49,7 @@ open class AreaSpawningContext(
* This is not considering the provided state as what the entity would be on top of,
* but rather the space its hitbox would fill.
*/
open fun isSafeSpace(world: ServerWorld, pos: BlockPos, state: BlockState): Boolean = !state.isSolid
open fun isSafeSpace(world: ServerWorld, pos: BlockPos, state: BlockState): Boolean = !state.isFullCube(world, pos)
override fun postFilter(detail: SpawnDetail): Boolean {
if (!super.postFilter(detail)) {
@@ -34,8 +34,7 @@ class BestSpawnerConfig {
val contextWeights = mutableMapOf(
"grounded" to 1F,
"submerged" to 0.99F,
"surface" to 0.01F,
"seafloor" to 1F
"surface" to 0.01F
)
val buckets = mutableListOf(
SpawnBucket("common", 93.8F),
@@ -64,7 +64,9 @@ class ActivateInstruction(val instructionSet: InstructionSet, val message: Battl
val actionEffect = status?.getActionEffect() ?: return@dispatch GO
val providers = mutableListOf<Any>(battle)
val pokemon = message.battlePokemon(0, battle) ?: return@dispatch GO
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
if (!SwitchInstruction.isVirtual) {
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
}
val context = ActionEffectContext(
actionEffect = actionEffect,
runtime = runtime,
@@ -49,7 +49,9 @@ class BoostInstruction(val instructionSet: InstructionSet, val message: BattleMe
val actionEffect = if (isBoost) BOOST_EFFECT else UNBOOST_EFFECT
val providers = mutableListOf<Any>(battle)
val pokemon = message.battlePokemon(0, battle) ?: return@dispatch GO
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
if (!SwitchInstruction.isVirtual) {
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
}
val context = ActionEffectContext(
actionEffect = actionEffect,
runtime = runtime,
@@ -53,7 +53,9 @@ class CantInstruction(val message: BattleMessage): ActionEffectInstruction {
val status = Statuses.getStatus(effectID)
val actionEffect = status?.getActionEffect() ?: return@dispatch GO
val providers = mutableListOf<Any>(battle)
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
if (!SwitchInstruction.isVirtual) {
pokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
}
val context = ActionEffectContext(
actionEffect = actionEffect,
@@ -107,7 +107,9 @@ class DamageInstruction(
}
val actionEffect = status?.getActionEffect() ?: return@dispatch GO
val providers = mutableListOf<Any>(battle)
battlePokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
if (!SwitchInstruction.isVirtual) {
battlePokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
}
val context = ActionEffectContext(
actionEffect = actionEffect,
@@ -132,7 +134,7 @@ class DamageInstruction(
val pokemonName = battlePokemon.getName()
val pokemonEntity = battlePokemon.entity
//Play recoil animation if the pokemon recoiling isnt dead
if (!causedFaint && pokemonEntity != null) {
if (!causedFaint && pokemonEntity != null && !SwitchInstruction.isVirtual) {
val pkt = PlayPoseableAnimationPacket(pokemonEntity.id, setOf("recoil"), emptySet())
pkt.sendToPlayersAround(
x = pokemonEntity.x,
@@ -143,7 +145,7 @@ class DamageInstruction(
)
}
//Play hit particle
if (pokemonEntity != null) {
if (pokemonEntity != null && !SwitchInstruction.isVirtual) {
RunPosableMoLangPacket(pokemonEntity.id, setOf("q.particle('cobblemon:hit', 'target')")).sendToPlayersAround(
x = pokemonEntity.x,
y = pokemonEntity.y,
@@ -47,7 +47,7 @@ class DragInstruction(val instructionSet: InstructionSet, val battleActor: Battl
val entity = if (battleActor is EntityBackedBattleActor<*>) battleActor.entity else null
setOf(
BattleDispatch {
if (entity != null) {
if (entity != null && !SwitchInstruction.isVirtual) {
SwitchInstruction.createEntitySwitch(battle, battleActor, entity, pnx, activePokemon, pokemon, illusion, imposter)
} else {
SwitchInstruction.createNonEntitySwitch(battle, battleActor, pnx, activePokemon, pokemon, illusion)
@@ -38,7 +38,9 @@ class EndItemInstruction(val message: BattleMessage): InterpreterInstruction {
battle.minorBattleActions[battlePokemon.uuid] = message
battlePokemon.contextManager.remove(itemEffect.id, BattleContext.Type.ITEM)
if (message.hasOptionalArgument("eat")) {
battlePokemon.entity?.playSound(CobblemonSounds.BERRY_EAT, 1F, 1F)
if (!SwitchInstruction.isVirtual) {
battlePokemon.entity?.playSound(CobblemonSounds.BERRY_EAT, 1F, 1F)
}
}
}
}
@@ -86,6 +86,7 @@ class MoveInstruction(
battle.majorBattleActions[userPokemon.uuid] = message
val providers = mutableListOf<Any>(battle)
if (SwitchInstruction.isVirtual) return@dispatch GO
userPokemon.effectedPokemon.entity?.let { UsersProvider(it) }?.let(providers::add)
targetPokemon?.effectedPokemon?.entity?.let { TargetsProvider(it) }?.let(providers::add)
val runtime = MoLangRuntime().also {
@@ -32,8 +32,10 @@ class ReplaceInstruction(val message: BattleMessage): InterpreterInstruction {
val pokemon = message.battlePokemon(0, battle) ?: return
battle.dispatchGo {
val entity = pokemon.entity
entity?.let { it.effects.mockEffect?.end(it) }
if (!SwitchInstruction.isVirtual) {
val entity = pokemon.entity
entity?.let { it.effects.mockEffect?.end(it) }
}
battle.sendSidedUpdate(
source = actor,
@@ -48,7 +48,7 @@ class SwitchInstruction(val instructionSet: InstructionSet, val battleActor: Bat
activePokemon.battlePokemon = pokemon
activePokemon.illusion = illusion
val pokemonEntity = pokemon.entity
if (pokemonEntity == null && entity != null) {
if (pokemonEntity == null && entity != null && !isVirtual) {
val targetPos = battleActor.getSide().getOppositeSide().actors.filterIsInstance<EntityBackedBattleActor<*>>().firstOrNull()?.entity?.pos?.let { pos ->
val offset = pos.subtract(entity.pos)
val idealPos = entity.pos.add(offset.multiply(0.33))
@@ -87,7 +87,7 @@ class SwitchInstruction(val instructionSet: InstructionSet, val battleActor: Bat
setOf(
BattleDispatch {
if (entity != null) {
if (entity != null && !isVirtual) {
createEntitySwitch(battle, actor, entity, pnx, activePokemon, pokemon, illusion, imposter)
} else {
createNonEntitySwitch(battle, actor, pnx, activePokemon, pokemon, illusion)
@@ -99,6 +99,8 @@ class SwitchInstruction(val instructionSet: InstructionSet, val battleActor: Bat
}
companion object{
val isVirtual = true
fun createEntitySwitch(
battle: PokemonBattle,
actor: BattleActor,
@@ -40,22 +40,26 @@ class TransformInstruction(val battle: PokemonBattle, val message: BattleMessage
ShowdownInterpreter.broadcastOptionalAbility(battle, effect, pokemon)
battle.dispatch {
if (SwitchInstruction.isVirtual) return@dispatch GO
val entity = pokemon.entity ?: return@dispatch GO
val future = TransformEffect(targetPokemon.effectedPokemon, battle.started).start(entity)
UntilDispatch { future?.isDone != false }
}
battle.dispatchWaiting {
val mock = pokemon.entity?.effects?.mockEffect?.mock
val pokemonName = pokemon.getName()
val targetPokemonName = targetPokemon.getName()
mock?.let {
battle.sendSidedUpdate(
source = actor,
allyPacket = BattleTransformPokemonPacket(pnx, pokemon, it, true),
opponentPacket = BattleTransformPokemonPacket(pnx, pokemon, it, false)
)
if (!SwitchInstruction.isVirtual) {
val mock = pokemon.entity?.effects?.mockEffect?.mock
mock?.let {
battle.sendSidedUpdate(
source = actor,
allyPacket = BattleTransformPokemonPacket(pnx, pokemon, it, true),
opponentPacket = BattleTransformPokemonPacket(pnx, pokemon, it, false)
)
}
}
val lang = battleLang("transform", pokemonName, targetPokemonName)
@@ -10,6 +10,7 @@ package com.cobblemon.mod.common.battles.runner
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.battles.runner.graal.GraalShowdownService
import com.cobblemon.mod.common.battles.runner.socket.SocketShowdownService
import com.google.gson.JsonArray
import java.util.UUID
@@ -36,6 +37,6 @@ interface ShowdownService {
companion object {
val service: ShowdownService by lazy { GraalShowdownService() }
val service: ShowdownService by lazy { SocketShowdownService() }
}
}
}
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.battles.runner.socket
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.CobblemonImplementation
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies
import com.cobblemon.mod.common.battles.BagItems
@@ -16,9 +17,11 @@ import com.cobblemon.mod.common.battles.ShowdownInterpreter
import com.cobblemon.mod.common.battles.runner.ShowdownService
import com.cobblemon.mod.common.pokemon.FormData
import com.cobblemon.mod.common.pokemon.Species
import com.cobblemon.mod.common.util.server
import com.google.gson.Gson
import com.google.gson.JsonArray
import java.io.BufferedReader
import java.io.File
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.net.InetAddress
@@ -83,7 +86,9 @@ class SocketShowdownService(val host: String = "localhost", val port: Int = 1846
private fun readMessage(): String {
val payloadSize = read(reader, 8).toInt()
println("Reading payload of size: $payloadSize")
val payload = read(reader, payloadSize)
println("Response: $payload")
return payload
}
@@ -113,7 +118,18 @@ class SocketShowdownService(val host: String = "localhost", val port: Int = 1846
writer.write(">getCobbledMoves\n")
writer.flush()
val response = readMessage()
return gson.fromJson(response, JsonArray::class.java)
try {
return gson.fromJson(response, JsonArray::class.java)
}
catch (e: Exception) {
println("Error, JSON logged to logs/showdown.log")
File("./showdown.log").writer().use {
server()?.getFile("./logs/showdown.log")?.writer().use { writer ->
writer?.write(response)
}
}
}
return JsonArray()
}
override fun getItemIds(): JsonArray {
@@ -166,4 +182,4 @@ class SocketShowdownService(val host: String = "localhost", val port: Int = 1846
acknowledge()
}
}
}
@@ -19,7 +19,6 @@ import com.cobblemon.mod.common.api.mulch.MulchVariant
import com.cobblemon.mod.common.api.mulch.Mulchable
import com.cobblemon.mod.common.api.tags.CobblemonBlockTags
import com.cobblemon.mod.common.block.entity.BerryBlockEntity
import dev.lambdaurora.lambdynlights.util.SodiumDynamicLightHandler.pos
import net.minecraft.block.Block
import net.minecraft.block.BlockRenderType
import net.minecraft.block.BlockState
@@ -88,31 +87,22 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
init {
defaultState = this.stateManager.defaultState
.with(WAS_GENERATED, false)
.with(MULCH, MulchVariant.NONE)
.with(AGE, 0)
.with(IS_ROOTED, false)
.with(MULCH, MulchVariant.NONE)
}
override fun grow(world: ServerWorld, random: Random, pos: BlockPos, state: BlockState) {
growHelper(world, random, pos, state, true)
}
//grow, but cooler
fun growHelper(world: ServerWorld, random: Random, pos: BlockPos, state: BlockState, boneMealed: Boolean = false) {
val berry = berry() ?: return
if (boneMealed && random.nextFloat() > berry.boneMealChance) return
val curAge = state.get(AGE)
val newAge = curAge + 1
if (newAge > FRUIT_AGE) return
val newState = state.with(AGE, newAge)
val treeEntity = world.getBlockEntity(pos) as BerryBlockEntity
if (curAge == MATURE_AGE) {
treeEntity.generateGrowthPoints(world, newState, pos, null)
determineMutation(world, random, pos, newState)
treeEntity.generateGrowthPoints(world, state, pos, null)
determineMutation(world, random, pos, state)
}
world.setBlockState(pos, newState, Block.NOTIFY_LISTENERS)
convertMulchToEntity(world, newState, pos)
treeEntity.goToNextStageTimer(FRUIT_AGE - curAge)
treeEntity.markDirty()
}
@@ -132,7 +122,7 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
CobblemonEvents.BERRY_MUTATION_OFFER.post(BerryMutationOfferEvent(berry, world, state, pos, mutations)) { berryMutationOffer ->
if (berryMutationOffer.mutations.isNotEmpty()) {
var mutateChance = 125
if (getMulch(treeEntity) == MulchVariant.SURPRISE) {
if (getMulch(state) == MulchVariant.SURPRISE) {
mutateChance *= 4
treeEntity.decrementMulchDuration(world, pos, state)
}
@@ -153,10 +143,7 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
state: BlockState,
variant: MulchVariant
): Boolean {
val underBlockState = world.getBlockState(pos.down())
val validSoil = state.get(IS_ROOTED) || underBlockState.isIn(CobblemonBlockTags.BERRY_SOIL)
val treeEntity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return false
return getMulch(treeEntity) == MulchVariant.NONE && state.get(AGE) < FLOWER_AGE && validSoil
return getMulch(state) == MulchVariant.NONE && state.get(AGE) < FLOWER_AGE && world.getBlockState(pos.down()).isOf(Blocks.FARMLAND)
}
override fun applyMulch(
@@ -167,15 +154,18 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
variant: MulchVariant
) {
val treeEntity = world.getBlockEntity(pos) as BerryBlockEntity
treeEntity.setMulch(variant, world, state, pos)
setMulch(world, pos, state, variant)
treeEntity.mulchDuration = variant.duration
world.playSound(null, pos, CobblemonSounds.MULCH_PLACE, SoundCategory.BLOCKS, 0.6F, 1F)
treeEntity.refreshTimers(pos)
}
@Deprecated("Deprecated in Java")
override fun onUse(state: BlockState, world: World, pos: BlockPos, player: PlayerEntity, hand: Hand, hit: BlockHitResult): ActionResult {
val treeEntity = world.getBlockEntity(pos) as BerryBlockEntity
if (player.getStackInHand(hand).item is ShovelItem && getMulch(treeEntity) != MulchVariant.NONE) {
treeEntity.setMulch(MulchVariant.NONE, world, state, pos)
if (player.getStackInHand(hand).item is ShovelItem && getMulch(state) != MulchVariant.NONE) {
setMulch(world, pos, state, MulchVariant.NONE)
treeEntity.markDirty()
world.playSound(null, pos, CobblemonSounds.MULCH_REMOVE, SoundCategory.BLOCKS, 0.6F, 1F)
this.spawnBreakParticles(world, player, pos, state.with(AGE, 0))
return ActionResult.SUCCESS
@@ -199,7 +189,7 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
val below = world.getBlockState(pos.down())
return (state.get(WAS_GENERATED) && below.isIn(CobblemonBlockTags.BERRY_WILD_SOIL))
|| below.isIn(CobblemonBlockTags.BERRY_SOIL)
|| state.get(IS_ROOTED)
|| below.block is FarmlandBlock
}
@Deprecated("Deprecated in Java")
@@ -218,7 +208,6 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
builder.add(AGE)
builder.add(WAS_GENERATED)
builder.add(MULCH)
builder.add(IS_ROOTED)
}
override fun getPickStack(world: BlockView?, pos: BlockPos?, state: BlockState?): ItemStack {
@@ -250,7 +239,6 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
val AGE: IntProperty = IntProperty.of("age", 0, FRUIT_AGE)
val MULCH: EnumProperty<MulchVariant> = EnumProperty.of("mulch", MulchVariant::class.java)
val WAS_GENERATED: BooleanProperty = BooleanProperty.of("generated")
val IS_ROOTED: BooleanProperty = BooleanProperty.of("rooted")
// val PLANTED_SHAPE = VoxelShapes.union(
// VoxelShapes.cuboid(0.3125, -0.0625, 0.3125, 0.6875, 0.0, 0.6875),
// VoxelShapes.cuboid(0.375, 0.0, 0.375, 0.625, 0.0625, 0.625)
@@ -313,14 +301,15 @@ class BerryBlock(private val berryIdentifier: Identifier, settings: Settings) :
val TALL_MATURE = listOf(Box(0.0, -1.0, 0.0, 16.0, 24.0, 16.0))
fun getMulch(entity: BerryBlockEntity) = entity.mulchVariant
fun convertMulchToEntity(world: ServerWorld, state: BlockState, pos: BlockPos) {
val entity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return
if (state.get(MULCH) != MulchVariant.NONE && state.get(MULCH) != entity.mulchVariant) {
entity.mulchVariant = state.get(MULCH)
world.setBlockState(pos, state.with(MULCH, MulchVariant.NONE))
fun getMulch(state: BlockState): MulchVariant {
if (!state.contains(MULCH)) {
return MulchVariant.NONE
}
return state.get(MULCH)
}
fun setMulch(world: World, pos: BlockPos, state: BlockState, mulch: MulchVariant) {
world.setBlockState(pos, state.with(MULCH, mulch))
}
}
}
@@ -1,49 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.block
import com.cobblemon.mod.common.block.entity.BerryBlockEntity
import com.cobblemon.mod.common.item.berry.BerryItem
import net.minecraft.block.AbstractBlock
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.util.ActionResult
import net.minecraft.util.Hand
import net.minecraft.util.hit.BlockHitResult
import net.minecraft.util.math.BlockPos
import net.minecraft.world.World
/**
* @author Apion
* @since February 27, 2024
*/
class BindingSoilBlock(settings: Settings) : Block(settings) {
@Deprecated("Deprecated in Java")
override fun onUse(
state: BlockState,
world: World,
pos: BlockPos,
player: PlayerEntity,
hand: Hand,
hit: BlockHitResult
): ActionResult {
if (!world.isClient) {
val itemStack = player.getStackInHand(hand)
val item = itemStack.item
if (item is BerryItem) {
world.setBlockState(pos, item.block.defaultState.with(BerryBlock.IS_ROOTED, true))
if (!player.isCreative) {
itemStack.decrement(1)
}
}
}
return ActionResult.SUCCESS
}
}
@@ -131,6 +131,7 @@ class GildedChestBlock(settings: Settings, val type: Type = Type.RED) : BlockWit
if (isFake() && (player is ServerPlayerEntity)) {
spawnPokemon(world, pos, state, player)
}
world.setBlockState(pos, if (state.fluidState.isOf(Fluids.WATER)) Blocks.WATER.defaultState else Blocks.AIR.defaultState)
val bEntity = world.getBlockEntity(pos) as? GildedChestBlockEntity
bEntity?.markRemoved()
} else super.onBreak(world, pos, state, player)
@@ -17,6 +17,7 @@ import com.cobblemon.mod.common.api.events.berry.BerryHarvestEvent
import com.cobblemon.mod.common.api.mulch.MulchVariant
import com.cobblemon.mod.common.block.BerryBlock
import com.cobblemon.mod.common.block.BerryBlock.Companion.getMulch
import com.cobblemon.mod.common.block.BerryBlock.Companion.setMulch
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.block.entity.BlockEntity
@@ -42,8 +43,8 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
lateinit var berryIdentifier: Identifier
private val ticksPerMinute = 1200
var renderState: RenderState? = null
//The time left for the tree until its either age 3 or age 5 (check block state, if we are at age 0<x<3 unti 3 otherwise until 5)
var growthTimer: Int = 0
//The time left for the tree to grow to stage 5
var growthTimer: Int = 72000
set(value) {
if (value < 0) {
throw IllegalArgumentException("You cannot set the growth time to less than zero")
@@ -54,7 +55,7 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
field = value
}
//The time left for the tree to grow to the next stage
var stageTimer: Int = 0
var stageTimer: Int = growthTimer / BerryBlock.MATURE_AGE
set(value) {
if (field != value) {
this.markDirty()
@@ -62,7 +63,6 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
field = value
}
private val growthPoints = arrayListOf<Identifier>()
var mulchVariant = MulchVariant.NONE
/**
* The idea behind the growth point sequence is it's a 16-long string of
@@ -85,6 +85,20 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
markDirty()
}
fun decrementMulchDuration(world: World, pos: BlockPos, state: BlockState) {
val currentMulch = getMulch(state)
if (currentMulch == MulchVariant.NONE || currentMulch.duration == -1) {
return
}
val newDuration = mulchDuration - 1
mulchDuration = if (newDuration <= 0) {
setMulch(world, pos, state, MulchVariant.NONE)
0
} else {
newDuration
}
}
constructor(pos: BlockPos, state: BlockState, berryIdentifier: Identifier): this(pos, state) {
this.berryIdentifier = berryIdentifier
resetGrowTimers(pos, state)
@@ -93,31 +107,6 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
}
}
fun decrementMulchDuration(world: World, pos: BlockPos, state: BlockState) {
if (mulchVariant == MulchVariant.NONE || mulchVariant.duration == -1) {
return
}
val newDuration = mulchDuration - 1
mulchDuration = if (newDuration <= 0) {
mulchVariant = MulchVariant.NONE
this.markDirty()
world.updateListeners(pos, state, state, Block.NOTIFY_LISTENERS)
0
} else {
newDuration
}
}
fun setMulch(mulch: MulchVariant, world: World, state: BlockState, pos: BlockPos) {
this.mulchVariant = mulch
this.mulchDuration = mulch.duration
refreshTimers(pos)
world.updateListeners(pos, state, state, Block.NOTIFY_LISTENERS)
this.markDirty()
}
//This function basically runs twice when the berry tree is growing, once when it starts, once when it hits age 3
//Why dont we just go 0-5? Design thinks its annoying to balance the numbers using 0-5 and 3-5
fun resetGrowTimers(pos: BlockPos, state: BlockState) {
val curAge = state.get(BerryBlock.AGE)
if (curAge == 5) {
@@ -130,15 +119,12 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
val upperGrowthLimit = (if (curAge == 0) berry.growthTime.last else berry.refreshRate.last) * multiplier / 10
val growthRange = lowerGrowthLimit..upperGrowthLimit
this.growthTimer = this.applyMulchModifier(pos, growthRange.random() * ticksPerMinute, true)
val stagesLeft = if (curAge < 3) BerryBlock.MATURE_AGE - curAge else BerryBlock.FRUIT_AGE - curAge
this.goToNextStageTimer(stagesLeft)
this.growthTimer = this.applyMulchModifier(pos, growthRange.random() * ticksPerMinute)
this.goToNextStageTimer(BerryBlock.FRUIT_AGE - curAge)
}
fun goToNextStageTimer(stagesLeft: Int) {
val avgStageTime = growthTimer / stagesLeft
//A number between 80% and 100% the average stage time
//So stages have some variance
stageTimer = this.world?.random?.nextBetween((avgStageTime * 8) / 10, avgStageTime) ?:
(((Math.random() * 0.2) + 0.8) * avgStageTime).toInt()
growthTimer -= stageTimer
@@ -151,7 +137,7 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
* @param timer Timer to be modified
* @return The modified timer
*/
private fun applyMulchModifier(pos: BlockPos, timer: Int, decrementMulch: Boolean = false): Int {
private fun applyMulchModifier(pos: BlockPos, timer: Int): Int {
val state = world?.getBlockState(pos) ?: return timer
val curAge = state.get(BerryBlock.AGE)
@@ -159,15 +145,11 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
return timer
}
if (mulchVariant != MulchVariant.GROWTH) {
if (getMulch(state) != MulchVariant.GROWTH) {
return timer
}
if (decrementMulch) {
world?.let {
decrementMulchDuration(it, pos, state)
}
}
return (timer * MulchVariant.GROWTH_TIME_MULTIPLIER).toInt()
return (timer * 0.66).toInt()
}
/**
@@ -175,8 +157,8 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
* @param pos The position of the block
*/
fun refreshTimers(pos: BlockPos) {
this.growthTimer = this.applyMulchModifier(pos, growthTimer, false)
this.stageTimer = this.applyMulchModifier(pos, stageTimer, false)
this.growthTimer = this.applyMulchModifier(pos, growthTimer)
this.stageTimer = this.applyMulchModifier(pos, stageTimer)
}
/**
@@ -266,9 +248,6 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
if (nbt.contains(GROWTH_POINTS_SEQUENCE)) {
growthPointSequence = nbt.getString(GROWTH_POINTS_SEQUENCE)
}
if (nbt.contains(MULCH_VARIANT)) {
mulchVariant = MulchVariant.valueOf(nbt.getString(MULCH_VARIANT))
}
this.renderState?.needsRebuild = true
}
@@ -281,7 +260,6 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
nbt.putString(BERRY, berryIdentifier.toString())
nbt.putInt(MULCH_DURATION, mulchDuration)
nbt.putString(GROWTH_POINTS_SEQUENCE, growthPointSequence)
nbt.putString(MULCH_VARIANT, mulchVariant.toString())
}
override fun markDirty() {
@@ -345,12 +323,11 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
companion object {
internal val TICKER = BlockEntityTicker<BerryBlockEntity> { world, pos, state, blockEntity ->
if (world.isClient) return@BlockEntityTicker
if (state.get(BerryBlock.IS_ROOTED)) return@BlockEntityTicker
if (blockEntity.stageTimer >= 0) {
blockEntity.stageTimer--
}
if (blockEntity.stageTimer == 0) {
(state.block as BerryBlock).growHelper(world as ServerWorld, world.random, pos, state)
(state.block as BerryBlock).grow(world as ServerWorld, world.random, pos, state)
}
}
//private const val LIFE_CYCLES = "life_cycles"
@@ -360,7 +337,6 @@ class BerryBlockEntity(pos: BlockPos, state: BlockState) : BlockEntity(Cobblemon
private const val STAGE_TIMER = "StageTimer"
private const val BERRY = "Berry"
private const val MULCH_DURATION = "MulchDuration"
private const val MULCH_VARIANT = "MulchVariant"
}
}
@@ -62,46 +62,6 @@ object CobblemonBakingOverrides {
cobblemonModel("restoration_tank_connector", "none")
)
val COARSE_MULCH = registerOverride(
cobblemonResource("block/coarse_mulch"),
cobblemonModel("coarse_mulch", "none")
)
val GROWTH_MULCH = registerOverride(
cobblemonResource("block/growth_mulch"),
cobblemonModel("growth_mulch", "none")
)
val HUMID_MULCH = registerOverride(
cobblemonResource("block/humid_mulch"),
cobblemonModel("humid_mulch", "none")
)
val LOAMY_MULCH = registerOverride(
cobblemonResource("block/loamy_mulch"),
cobblemonModel("loamy_mulch", "none")
)
val PEAT_MULCH = registerOverride(
cobblemonResource("block/peat_mulch"),
cobblemonModel("peat_mulch", "none")
)
val RICH_MULCH = registerOverride(
cobblemonResource("block/rich_mulch"),
cobblemonModel("rich_mulch", "none")
)
val SANDY_MULCH = registerOverride(
cobblemonResource("block/sandy_mulch"),
cobblemonModel("sandy_mulch", "none")
)
val SURPRISE_MULCH = registerOverride(
cobblemonResource("block/surprise_mulch"),
cobblemonModel("surprise_mulch", "none")
)
fun registerOverride(modelLocation: Identifier, modelIdentifier: ModelIdentifier): BakingOverride {
val result = BakingOverride(modelLocation, modelIdentifier)
models.add(result)
@@ -16,7 +16,6 @@ class BerryBlockEntityRenderState : BerryBlockEntity.RenderState {
override var needsRebuild = true
val vbo: VertexBuffer = VertexBuffer(VertexBuffer.Usage.STATIC)
var vboLightLevel: Int = 0
var drawVbo: Boolean = false
override fun close() {
vbo.close()
@@ -23,7 +23,6 @@ import net.minecraft.client.gl.ShaderProgram
import net.minecraft.client.gl.VertexBuffer
import net.minecraft.client.render.GameRenderer
import net.minecraft.client.render.LightmapTextureManager
import net.minecraft.client.render.RenderLayer
import net.minecraft.client.render.Tessellator
import net.minecraft.client.render.VertexConsumerProvider
import net.minecraft.client.render.VertexFormat
@@ -34,7 +33,6 @@ import net.minecraft.client.util.math.MatrixStack
import net.minecraft.util.math.Box
import net.minecraft.util.math.Vec3d
import org.joml.Matrix4f
import org.joml.Vector3f
class BerryBlockRenderer(private val context: BlockEntityRendererFactory.Context) : BlockEntityRenderer<BerryBlockEntity> {
@@ -47,88 +45,33 @@ class BerryBlockRenderer(private val context: BlockEntityRendererFactory.Context
override fun render(entity: BerryBlockEntity, tickDelta: Float, matrices: MatrixStack, vertexConsumers: VertexConsumerProvider, light: Int, overlay: Int) {
if (!isInRenderDistance(entity, entity.pos.toVec3d())) return
val blockState = entity.cachedState
val age = blockState.get(BerryBlock.AGE)
if (age <= BerryBlock.MATURE_AGE) {
return
}
if (entity.renderState == null) {
entity.renderState = BerryBlockEntityRenderState()
}
val renderState = entity.renderState as BerryBlockEntityRenderState
if (renderState.needsRebuild || renderState.vboLightLevel != light) {
renderToBuffer(entity, light, overlay, renderState)
renderToBuffer(entity, light, overlay, renderState.vbo)
renderState.vboLightLevel = light
(entity.renderState as BerryBlockEntityRenderState).needsRebuild = false
}
if (renderState.drawVbo) {
matrices.push()
CobblemonRenderLayers.BERRY_LAYER.startDrawing()
renderState.vbo.bind()
renderState.vbo.draw(
matrices.peek().positionMatrix.mul(RenderSystem.getModelViewMatrix()),
RenderSystem.getProjectionMatrix(),
GameRenderer.getRenderTypeCutoutProgram()
)
VertexBuffer.unbind()
CobblemonRenderLayers.BERRY_LAYER.endDrawing()
matrices.pop()
}
drawMulch(matrices, vertexConsumers, entity, light, overlay)
}
private fun drawMulch(
matrices: MatrixStack,
vertexConsumers: VertexConsumerProvider,
entity: BerryBlockEntity,
light: Int,
overlay: Int
) {
matrices.push()
//Mulch is rendered on a different layer than the actual berries so
val mulchBuf = vertexConsumers.getBuffer(RenderLayer.getCutout())
val model = entity.mulchVariant.model
model?.let {
it.getModel().getQuads(entity.cachedState, null, entity.world?.random).forEach { quad ->
mulchBuf.quad(matrices.peek(), quad, 1F, 1F, 1F, light, overlay)
}
}
CobblemonRenderLayers.BERRY_LAYER.startDrawing()
renderState.vbo.bind()
renderState.vbo.draw(
matrices.peek().positionMatrix.mul(RenderSystem.getModelViewMatrix()),
RenderSystem.getProjectionMatrix(),
GameRenderer.getRenderTypeCutoutProgram()
)
VertexBuffer.unbind()
CobblemonRenderLayers.BERRY_LAYER.endDrawing()
matrices.pop()
}
fun renderToBuffer(entity: BerryBlockEntity, light: Int, overlay: Int, renderState: BerryBlockEntityRenderState) {
if (entity.cachedState.get(BerryBlock.AGE) == 0) {
renderBabyToBuffer(entity, light, overlay, renderState.vbo)
renderState.drawVbo = true
}
else if (entity.cachedState.get(BerryBlock.AGE) > BerryBlock.MATURE_AGE){
renderAdultToBuffer(entity, light, overlay, renderState.vbo)
renderState.drawVbo = true
}
else {
renderState.drawVbo = false
}
}
fun renderBabyToBuffer(entity: BerryBlockEntity, light: Int, overlay: Int, buffer: VertexBuffer) {
val bufferBuilder = Tessellator.getInstance().buffer
bufferBuilder.begin(CobblemonRenderLayers.BERRY_LAYER.drawMode, CobblemonRenderLayers.BERRY_LAYER.vertexFormat)
val berry = entity.berry() ?: return
val model = BerryModelRepository.modelOf(berry.fruitModelIdentifier) ?: return
val pos = berry.stageOnePositioning.position
model.setPosition(Axis.X_AXIS.ordinal, pos.x.toFloat())
model.setPosition(Axis.Y_AXIS.ordinal, pos.y.toFloat())
model.setPosition(Axis.Z_AXIS.ordinal, pos.z.toFloat())
val rot = berry.stageOnePositioning.rotation
model.setAngles(
Math.toRadians(180 - rot.x).toFloat(),
Math.toRadians(180 + rot.y).toFloat(),
Math.toRadians(rot.z).toFloat()
)
model.render(MatrixStack(), bufferBuilder, light, overlay)
val bufferBuilderFinal = bufferBuilder.end()
buffer.bind()
buffer.upload(bufferBuilderFinal)
VertexBuffer.unbind()
}
fun renderAdultToBuffer(entity: BerryBlockEntity, light: Int, overlay: Int, buffer: VertexBuffer) {
fun renderToBuffer(entity: BerryBlockEntity, light: Int, overlay: Int, buffer: VertexBuffer) {
val blockState = entity.cachedState
val age = blockState.get(BerryBlock.AGE)
if (age <= BerryBlock.MATURE_AGE) {
@@ -0,0 +1,35 @@
package com.cobblemon.mod.common.command
import com.cobblemon.mod.common.battles.BattleBuilder
import com.cobblemon.mod.common.util.party
import com.mojang.brigadier.Command
import com.mojang.brigadier.CommandDispatcher
import com.mojang.brigadier.context.CommandContext
import net.minecraft.command.argument.EntityArgumentType
import net.minecraft.server.command.CommandManager
import net.minecraft.server.command.ServerCommandSource
object ChallengeCommand {
fun register(dispatcher : CommandDispatcher<ServerCommandSource>) {
val command = CommandManager.literal("battle")
.then(
CommandManager
.argument("target", EntityArgumentType.player())
.executes(::execute)
)
dispatcher.register(command)
}
private fun execute(context: CommandContext<ServerCommandSource>) : Int {
val player = context.source.playerOrThrow
val target = EntityArgumentType.getPlayer(context, "target")
val leadingPlayerPokemon = player.party().filterNotNull().firstOrNull() ?: return 0
val leadingTargetPokemon = target.party().filterNotNull().firstOrNull() ?: return 0
BattleBuilder.pvp1v1(player, target, leadingPlayerPokemon.uuid, leadingTargetPokemon.uuid)
return Command.SINGLE_SUCCESS
}
}
@@ -24,6 +24,7 @@ import com.mojang.brigadier.context.CommandContext
import net.minecraft.server.command.CommandManager
import net.minecraft.server.command.CommandManager.literal
import net.minecraft.server.command.ServerCommandSource
import net.minecraft.text.Text
/**
* Spawn Pokemon From Surrounding Pool
@@ -83,15 +84,14 @@ object SpawnPokemonFromPool {
val spawnAction = result.second.doSpawn(ctx = result.first)
spawnAction.future
.thenApply {
if (it is EntitySpawnResult) {
for (entity in it.entities) {
player.sendMessage(commandLang("spawnpokemonfrompool", entity.displayName).green())
}
spawnAction.future.thenApply {
if (it is EntitySpawnResult) {
for (entity in it.entities) {
player.sendMessage(commandLang("spawnpokemonfrompool.success", entity.displayName).green())
}
}
spawnAction.complete()
}
spawnsTriggered++
}
@@ -171,6 +171,9 @@ class CobblemonConfig {
@NodeCategory(Category.Spawning)
var baseApricornTreeGenerationChance = 0.1F
@NodeCategory(Category.Pokemon)
var ninjaskCreatesShedinja = true
@NodeCategory(Category.Pokemon)
var displayEntityLevelLabel = true
@@ -235,7 +235,7 @@ class PokemonServerDelegate : PokemonSideDelegate {
}
if (entity.deathTime == 60) {
if (entity.pokemon.isWild()) {
if (entity.owner == null) {
entity.world.sendEntityStatus(entity, 60.toByte()) // Sends smoke effect
if(entity.world.gameRules.getBoolean(CobblemonGameRules.DO_POKEMON_LOOT)) {
(entity.drops ?: entity.pokemon.form.drops).drop(entity, entity.world as ServerWorld, entity.pos, entity.killer)
@@ -10,9 +10,10 @@ package com.cobblemon.mod.common.integration.jei.berry
import com.cobblemon.mod.common.CobblemonItems
import com.cobblemon.mod.common.integration.jei.CobblemonJeiProvider
import com.cobblemon.mod.common.item.berry.BerryItem
import com.cobblemon.mod.common.item.BerryItem
import mezz.jei.api.registration.IRecipeCategoryRegistration
import mezz.jei.api.registration.IRecipeRegistration
import net.minecraft.item.ItemStack
class BerryMutationProvider : CobblemonJeiProvider {
override fun registerCategory(registration: IRecipeCategoryRegistration) {
@@ -8,7 +8,7 @@
package com.cobblemon.mod.common.integration.jei.berry
import com.cobblemon.mod.common.item.berry.BerryItem
import com.cobblemon.mod.common.item.BerryItem
//Dont make these ItemStacks, they do not have consistent hash codes, breaks stuff
data class BerryMutationRecipe(
@@ -6,7 +6,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.item.berry
package com.cobblemon.mod.common.item
import com.cobblemon.mod.common.block.BerryBlock
import net.minecraft.item.AliasedBlockItem
@@ -14,6 +14,7 @@ import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.api.item.PokemonSelectingItem
import com.cobblemon.mod.common.api.pokemon.stats.Stat
import com.cobblemon.mod.common.block.BerryBlock
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.genericRuntime
import com.cobblemon.mod.common.util.resolveInt
@@ -15,6 +15,7 @@ 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.block.BerryBlock
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.item.battle.BagItem
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.genericRuntime
@@ -16,6 +16,7 @@ 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.block.BerryBlock
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.item.battle.BagItem
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.genericRuntime
@@ -15,6 +15,7 @@ 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.block.BerryBlock
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.item.battle.BagItem
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.util.genericRuntime
@@ -15,6 +15,7 @@ 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.block.BerryBlock
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.item.battle.BagItem
import com.cobblemon.mod.common.pokemon.Pokemon
import net.minecraft.entity.player.PlayerEntity
@@ -14,6 +14,7 @@ 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.block.BerryBlock
import com.cobblemon.mod.common.item.BerryItem
import com.cobblemon.mod.common.item.battle.BagItem
import com.cobblemon.mod.common.pokemon.Pokemon
import net.minecraft.item.ItemStack
@@ -253,37 +253,6 @@ object CobblemonItemGroups {
entries.add(CobblemonItems.BLACK_TUMBLESTONE_BLOCK)
entries.add(CobblemonItems.SKY_TUMBLESTONE_BLOCK)
entries.add(CobblemonItems.POLISHED_TUMBLESTONE)
entries.add(CobblemonItems.POLISHED_TUMBLESTONE_STAIRS)
entries.add(CobblemonItems.POLISHED_TUMBLESTONE_SLAB)
entries.add(CobblemonItems.POLISHED_TUMBLESTONE_WALL)
entries.add(CobblemonItems.CHISELED_POLISHED_TUMBLESTONE)
entries.add(CobblemonItems.TUMBLESTONE_BRICKS)
entries.add(CobblemonItems.TUMBLESTONE_BRICK_STAIRS)
entries.add(CobblemonItems.TUMBLESTONE_BRICK_SLAB)
entries.add(CobblemonItems.TUMBLESTONE_BRICK_WALL)
entries.add(CobblemonItems.CHISELED_TUMBLESTONE_BRICKS)
entries.add(CobblemonItems.POLISHED_BLACK_TUMBLESTONE)
entries.add(CobblemonItems.POLISHED_BLACK_TUMBLESTONE_STAIRS)
entries.add(CobblemonItems.POLISHED_BLACK_TUMBLESTONE_SLAB)
entries.add(CobblemonItems.POLISHED_BLACK_TUMBLESTONE_WALL)
entries.add(CobblemonItems.CHISELED_POLISHED_BLACK_TUMBLESTONE)
entries.add(CobblemonItems.BLACK_TUMBLESTONE_BRICKS)
entries.add(CobblemonItems.BLACK_TUMBLESTONE_BRICK_STAIRS)
entries.add(CobblemonItems.BLACK_TUMBLESTONE_BRICK_SLAB)
entries.add(CobblemonItems.BLACK_TUMBLESTONE_BRICK_WALL)
entries.add(CobblemonItems.CHISELED_BLACK_TUMBLESTONE_BRICKS)
entries.add(CobblemonItems.POLISHED_SKY_TUMBLESTONE)
entries.add(CobblemonItems.POLISHED_SKY_TUMBLESTONE_STAIRS)
entries.add(CobblemonItems.POLISHED_SKY_TUMBLESTONE_SLAB)
entries.add(CobblemonItems.POLISHED_SKY_TUMBLESTONE_WALL)
entries.add(CobblemonItems.CHISELED_POLISHED_SKY_TUMBLESTONE)
entries.add(CobblemonItems.SKY_TUMBLESTONE_BRICKS)
entries.add(CobblemonItems.SKY_TUMBLESTONE_BRICK_STAIRS)
entries.add(CobblemonItems.SKY_TUMBLESTONE_BRICK_SLAB)
entries.add(CobblemonItems.SKY_TUMBLESTONE_BRICK_WALL)
entries.add(CobblemonItems.CHISELED_SKY_TUMBLESTONE_BRICKS)
entries.add(CobblemonItems.DAWN_STONE_ORE)
entries.add(CobblemonItems.DEEPSLATE_DAWN_STONE_ORE)
entries.add(CobblemonItems.DUSK_STONE_ORE)
@@ -31,7 +31,6 @@ import net.minecraft.world.World
open class BlockClickEvolution(
override val id: String,
override val result: PokemonProperties,
override val shedder: PokemonProperties?,
override val requiredContext: RegistryLikeCondition<Block>,
override var optional: Boolean,
override var consumeHeldItem: Boolean,
@@ -41,7 +40,6 @@ open class BlockClickEvolution(
constructor(): this(
id = "id",
result = PokemonProperties(),
shedder = null,
requiredContext = BlockIdentifierCondition(Identifier("minecraft", "dirt")),
optional = true,
consumeHeldItem = true,
@@ -19,7 +19,6 @@ internal class DummyEvolution : Evolution {
override val id = "dummy"
override val result: PokemonProperties = PokemonProperties()
override val shedder: PokemonProperties? = null
override var optional = false
override var consumeHeldItem = false
override val requirements: MutableSet<EvolutionRequirement> = mutableSetOf()
@@ -32,7 +32,6 @@ import net.minecraft.world.World
open class ItemInteractionEvolution(
override val id: String,
override val result: PokemonProperties,
override val shedder: PokemonProperties?,
override val requiredContext: NbtItemPredicate,
override var optional: Boolean,
override var consumeHeldItem: Boolean,
@@ -42,7 +41,6 @@ open class ItemInteractionEvolution(
constructor(): this(
id = "id",
result = PokemonProperties(),
shedder = null,
requiredContext = NbtItemPredicate(ItemIdentifierCondition(Identifier("minecraft", "fish")), NbtPredicate.ANY),
optional = true,
consumeHeldItem = true,
@@ -25,7 +25,6 @@ import com.cobblemon.mod.common.pokemon.Pokemon
open class LevelUpEvolution(
override val id: String,
override val result: PokemonProperties,
override val shedder: PokemonProperties?,
override var optional: Boolean,
override var consumeHeldItem: Boolean,
override val requirements: MutableSet<EvolutionRequirement>,
@@ -37,7 +36,6 @@ open class LevelUpEvolution(
constructor(): this(
id = "id",
result = PokemonProperties(),
shedder = null,
optional = true,
consumeHeldItem = true,
requirements = mutableSetOf(),
@@ -26,7 +26,6 @@ import com.cobblemon.mod.common.pokemon.Pokemon
open class TradeEvolution(
override val id: String,
override val result: PokemonProperties,
override val shedder: PokemonProperties?,
override val requiredContext: PokemonProperties,
override var optional: Boolean,
override var consumeHeldItem: Boolean,
@@ -36,7 +35,6 @@ open class TradeEvolution(
constructor(): this(
id = "id",
result = PokemonProperties(),
shedder = null,
requiredContext = PokemonProperties(),
optional = true,
consumeHeldItem = true,
@@ -1,5 +1,5 @@
{
"maxScale": 0.8,
"maxScale": 1.0,
"yTranslation": 0.1,
"yGrowthPoint": 0.5625,
"animations": [
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/aguav_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/aguav_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/aguav_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/aguav_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/aguav_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/aguav_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/aguav_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/aguav_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/aguav_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/aguav_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/apicot_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/apicot_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/apicot_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/apicot_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/apicot_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/apicot_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/apicot_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/apicot_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/apicot_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/apicot_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/aspear_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/aspear_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/aspear_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/aspear_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/aspear_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/aspear_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/aspear_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/aspear_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/aspear_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/aspear_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/babiri_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/babiri_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/babiri_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/babiri_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/babiri_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/babiri_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/babiri_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/babiri_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/babiri_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/babiri_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/belue_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/belue_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/belue_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/belue_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/belue_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/belue_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/belue_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/belue_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/belue_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/belue_mature",
@@ -1,13 +0,0 @@
{
"variants": {
"type=bottom": {
"model": "cobblemon:block/black_tumblestone_brick_slab"
},
"type=double": {
"model": "cobblemon:block/black_tumblestone_bricks"
},
"type=top": {
"model": "cobblemon:block/black_tumblestone_brick_slab_top"
}
}
}
@@ -1,209 +0,0 @@
{
"variants": {
"facing=east,half=bottom,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"y": 270
},
"facing=east,half=bottom,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner"
},
"facing=east,half=bottom,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"y": 270
},
"facing=east,half=bottom,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer"
},
"facing=east,half=bottom,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs"
},
"facing=east,half=top,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180
},
"facing=east,half=top,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180,
"y": 90
},
"facing=east,half=top,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180
},
"facing=east,half=top,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180,
"y": 90
},
"facing=east,half=top,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"x": 180
},
"facing=north,half=bottom,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"y": 180
},
"facing=north,half=bottom,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"y": 270
},
"facing=north,half=bottom,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"y": 180
},
"facing=north,half=bottom,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"y": 270
},
"facing=north,half=bottom,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"y": 270
},
"facing=north,half=top,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180,
"y": 270
},
"facing=north,half=top,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180
},
"facing=north,half=top,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180,
"y": 270
},
"facing=north,half=top,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180
},
"facing=north,half=top,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"x": 180,
"y": 270
},
"facing=south,half=bottom,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner"
},
"facing=south,half=bottom,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"y": 90
},
"facing=south,half=bottom,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer"
},
"facing=south,half=bottom,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"y": 90
},
"facing=south,half=bottom,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"y": 90
},
"facing=south,half=top,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180,
"y": 90
},
"facing=south,half=top,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180,
"y": 180
},
"facing=south,half=top,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180,
"y": 90
},
"facing=south,half=top,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180,
"y": 180
},
"facing=south,half=top,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"x": 180,
"y": 90
},
"facing=west,half=bottom,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"y": 90
},
"facing=west,half=bottom,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"y": 180
},
"facing=west,half=bottom,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"y": 90
},
"facing=west,half=bottom,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"y": 180
},
"facing=west,half=bottom,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"y": 180
},
"facing=west,half=top,shape=inner_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180,
"y": 180
},
"facing=west,half=top,shape=inner_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_inner",
"uvlock": true,
"x": 180,
"y": 270
},
"facing=west,half=top,shape=outer_left": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180,
"y": 180
},
"facing=west,half=top,shape=outer_right": {
"model": "cobblemon:block/black_tumblestone_brick_stairs_outer",
"uvlock": true,
"x": 180,
"y": 270
},
"facing=west,half=top,shape=straight": {
"model": "cobblemon:block/black_tumblestone_brick_stairs",
"uvlock": true,
"x": 180,
"y": 180
}
}
}
@@ -1,90 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_post"
},
"when": {
"up": "true"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side",
"uvlock": true
},
"when": {
"north": "low"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side",
"uvlock": true,
"y": 90
},
"when": {
"east": "low"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side",
"uvlock": true,
"y": 180
},
"when": {
"south": "low"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side",
"uvlock": true,
"y": 270
},
"when": {
"west": "low"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side_tall",
"uvlock": true
},
"when": {
"north": "tall"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side_tall",
"uvlock": true,
"y": 90
},
"when": {
"east": "tall"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side_tall",
"uvlock": true,
"y": 180
},
"when": {
"south": "tall"
}
},
{
"apply": {
"model": "cobblemon:block/black_tumblestone_brick_wall_side_tall",
"uvlock": true,
"y": 270
},
"when": {
"west": "tall"
}
}
]
}
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/black_tumblestone_bricks"
}
}
}
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/bluk_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/bluk_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/bluk_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/bluk_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/bluk_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/bluk_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/bluk_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/bluk_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/bluk_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/bluk_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/charti_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/charti_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/charti_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/charti_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/charti_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/charti_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/charti_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/charti_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/charti_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/charti_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/cheri_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/cheri_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/cheri_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/cheri_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/cheri_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/cheri_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/cheri_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/cheri_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/cheri_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/cheri_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chesto_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chesto_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/chesto_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chesto_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/chesto_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/chesto_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chesto_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chesto_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chesto_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/chesto_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chilan_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chilan_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/chilan_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chilan_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/chilan_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/chilan_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chilan_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chilan_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chilan_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/chilan_mature",
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/chiseled_black_tumblestone_bricks"
}
}
}
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/chiseled_polished_black_tumblestone"
}
}
}
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/chiseled_polished_sky_tumblestone"
}
}
}
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/chiseled_polished_tumblestone"
}
}
}
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/chiseled_sky_tumblestone_bricks"
}
}
}
@@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "cobblemon:block/chiseled_tumblestone_bricks"
}
}
}
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chople_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chople_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/chople_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chople_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/chople_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/chople_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chople_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/chople_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/chople_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/chople_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/coba_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/coba_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/coba_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/coba_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/coba_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/coba_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/coba_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/coba_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/coba_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/coba_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/colbur_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/colbur_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/colbur_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/colbur_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/colbur_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/colbur_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/colbur_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/colbur_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/colbur_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/colbur_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/cornn_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/cornn_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/cornn_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/cornn_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/cornn_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/cornn_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/cornn_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/cornn_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/cornn_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/cornn_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/custap_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/custap_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/custap_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/custap_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/custap_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/custap_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/custap_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/custap_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/custap_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/custap_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/durin_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/durin_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/durin_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/durin_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/durin_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/durin_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/durin_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/durin_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/durin_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/durin_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/enigma_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/enigma_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/enigma_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/enigma_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/enigma_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/enigma_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/enigma_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/enigma_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/enigma_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/enigma_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/figy_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/figy_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/figy_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/figy_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/figy_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/figy_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/figy_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/figy_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/figy_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/figy_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/ganlon_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/ganlon_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/ganlon_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/ganlon_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/ganlon_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/ganlon_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/ganlon_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/ganlon_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/ganlon_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/ganlon_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/grepa_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/grepa_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/grepa_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/grepa_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/grepa_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/grepa_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/grepa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/grepa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/grepa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/grepa_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/haban_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/haban_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/haban_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/haban_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/haban_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/haban_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/haban_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/haban_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/haban_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/haban_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/hondew_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/hondew_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/hondew_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/hondew_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/hondew_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/hondew_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/hondew_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/hondew_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/hondew_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/hondew_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/hopo_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/hopo_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/hopo_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/hopo_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/hopo_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/hopo_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/hopo_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/hopo_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/hopo_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/hopo_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/iapapa_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/iapapa_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/iapapa_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/iapapa_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/iapapa_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/iapapa_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/iapapa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/iapapa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/iapapa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/iapapa_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/jaboca_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/jaboca_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/jaboca_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/jaboca_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/jaboca_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/jaboca_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/jaboca_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/jaboca_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/jaboca_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/jaboca_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kasib_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kasib_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/kasib_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kasib_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/kasib_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/kasib_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kasib_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kasib_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kasib_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/kasib_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kebia_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kebia_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/kebia_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kebia_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/kebia_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/kebia_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kebia_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kebia_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kebia_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/kebia_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kee_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kee_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/kee_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kee_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/kee_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/kee_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kee_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kee_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kee_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/kee_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/kelpsy_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/lansat_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/lansat_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/lansat_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/lansat_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/lansat_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/lansat_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/lansat_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/lansat_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/lansat_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/lansat_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/leppa_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/leppa_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/leppa_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/leppa_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/leppa_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/leppa_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/leppa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/leppa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/leppa_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/leppa_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/liechi_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/liechi_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/liechi_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/liechi_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/liechi_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/liechi_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/liechi_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/liechi_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/liechi_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/liechi_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/lum_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/lum_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/lum_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/lum_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/lum_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/lum_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/lum_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/lum_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/lum_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/lum_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/mago_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/mago_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/mago_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/mago_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/mago_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/mago_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/mago_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/mago_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/mago_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/mago_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/magost_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/magost_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/magost_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/magost_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/magost_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/magost_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/magost_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/magost_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/magost_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/magost_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/maranga_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/maranga_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/maranga_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/maranga_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/maranga_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/maranga_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/maranga_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/maranga_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/maranga_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/maranga_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/micle_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/micle_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/micle_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/micle_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/micle_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/micle_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/micle_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/micle_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/micle_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/micle_mature",
@@ -2,14 +2,7 @@
"multipart": [
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": false
}
]
"age": "0"
},
"apply": {
"model": "cobblemon:block/berries/planted",
@@ -18,62 +11,16 @@
},
{
"when": {
"AND": [
{
"age": 0
},
{
"rooted": true
}
]
"age": "1"
},
"apply": {
"model": "cobblemon:block/berries/planted_bound",
"model": "cobblemon:block/berries/sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/nanab_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 1
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/nanab_sprout",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": false
}
]
"age": "2"
},
"apply": {
"model": "cobblemon:block/berries/nanab_young",
@@ -82,30 +29,7 @@
},
{
"when": {
"AND": [
{
"age": 2
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/nanab_young",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": false
}
]
"age": "3"
},
"apply": {
"model": "cobblemon:block/berries/nanab_mature",
@@ -114,14 +38,7 @@
},
{
"when": {
"AND": [
{
"age": 3
},
{
"rooted": true
}
]
"age": "4"
},
"apply": {
"model": "cobblemon:block/berries/nanab_mature",
@@ -130,62 +47,7 @@
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/nanab_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 4
},
{
"rooted": true
}
]
},
"apply": {
"model": "cobblemon:block/berries/nanab_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": false
}
]
},
"apply": {
"model": "cobblemon:block/berries/nanab_mature",
"uvlock": false
}
},
{
"when": {
"AND": [
{
"age": 5
},
{
"rooted": true
}
]
"age": "5"
},
"apply": {
"model": "cobblemon:block/berries/nanab_mature",

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