Compare commits

..
Author SHA1 Message Date
Polymeta 367e84a9c8 26.1.2 backport of dataregistry
Signed-off-by: Polymeta <4726322-polymeta@users.noreply.gitlab.com>
2026-05-22 11:16:36 +01:00
1196 changed files with 15450 additions and 121006 deletions

No files matched your search

-1
View File
@@ -24,7 +24,6 @@ eclipse
run
runClient
runServer
utilityscripts/implementation/*.txt
# Files from Forge MDK
forge*changelog.txt
+33 -135
View File
@@ -56,19 +56,17 @@
- Pressing the inventory key now closes the Pokémon interact wheel GUI
- Pokémon cries now play when clicking Pokémon in the summary screen.
- Pressing the Summary key while either the starter selection or summary screen are open now closes those screens
- Ice type Pokémon are now immune to Packed Snow
### New rideable Pokémon
- Crobat
- Skarmory
- Milotic
- Archeops
- Goodra
- Goodra (Hisuian Form)
- Drampa
- Archeops
- Skarmory
- Crobat
- Goodra
- Hisuian Goodra
- Milotic
### Pokémon Added
#### Generation 3
- Wurmple
- Silcoon
- Beautifly
@@ -76,55 +74,59 @@
- Dustox
- Skitty
- Delcatty
- Seviper
- Zangoose
#### Generation 4
- Cherubi
- Cherrim
- Stunky
- Skuntank
#### Generation 5
- Audino
- Pawniard
- Bisharp
- Kingambit
#### Generation 6
- Pancham (+ Cosmetic with Black Glasses)
- Pangoro (+ Cosmetic with Black Glasses)
#### Generation 7
- Rockruff
- Lycanroc
#### Generation 8
- Rolycoly
- Carkol
- Coalossal
- Runerigus
- Snom
- Frosmoth
- Indeedee
- Duraludon
- Archaludon
- Applin
- Flapple
- Appletun
#### Generation 9
- Dipplin
- Hydrapple
- Nymble
- Lokix
- Kingambit
- Dipplin
- Archaludon
- Hydrapple
#### Regional Forms
- Sandshrew (Alolan Form)
- Sandslash (Alolan Form)
- Yamask (Galarian Form)
- Avalugg (Hisuian Form)
- Sandshrew (Alolan)
- Sandslash (Alolan)
- Avalugg (Hisuian)
### Model updates for the following Pokémon
- Goomy
- Sliggoo
- Goodra
- Porygon
- Porygon2
- Porygon-Z
- Zubat
- Golbat
- Crobat
### Model updates for the following Pokémon
@@ -134,12 +136,11 @@
- Zubat
- Golbat
- Crobat
- Ditto
- Porygon
- Porygon2
- Porygon-Z
- Skarmory
- Smoochum
- Jynx
- Popplio
- Brionne
@@ -147,22 +148,17 @@
- Fletchling
- Fletchinder
- Talonflame
- Sableye
- Mawile
- Goomy
- Sliggoo
- Goodra
- Nacli
- Naclstack
- Garganacl
- Bidoof
- Cranidos
- Chatot
- Yamask
- Cofagrigus
- Tyranitar
- Turtonator
- Arbok (New Patterns: Angry, Cartoon, Clown, Comedic, Crow, Grin, Ink, Modern, Rain, Scribble, Silence, Sloth, Suspicious, Will)
#### Model changes to the regional bias resource pack:
@@ -171,14 +167,6 @@
- Changed models for every existing regional bias
### Animation updates for the following Pokémon
- Happiny
- Poliwrath
- Zubat
- Vulpix
- Drowzee
- Hypno
- Noctowl
- Skarmory
- Skitty
- Flygon
@@ -204,22 +192,8 @@
- Shedinja
- Skwovet
- Greedent
- Bidoof
- Cranidos
- Chatot
- Yamask
- Cofagrigus
- Luvdisc
- Staryu
- Starmie
- Togetic
- Rellor
- Rabsca
- Yungoos
- Gumshoos
#### Added sounds to the following moves
- Absorb
- Aurora Beam
- Double Team
@@ -248,12 +222,10 @@
### Fixes
- Adjusted Croagunk's walkspeed
- Adjusted Aerodactyl's walkspeed
- Fixed Blitzle's base scale being `1` rather than the intended `0.8`
- Fixed Magnezone's emissive layer for the shiny having the wrong name, thus displaying wrongly
- Fixed Litleo not blinking
- Fixed Garchomp T-posing when sleeping while out of battle.
- Fixed Omanyte and Omastar incorrectly using water animations on land.
- Sharp Beak can now be crafted
- Metal Alloy can now be crafted
- Ability Capsules can now be brewed
@@ -316,8 +288,6 @@
- Lowered the volume of Blitzle and Zebstrika's cry
- Fixed Raichu (male) and Alolan Raichu (both genders) not displaying the correct Partner Cap when Pewter Crunchies are in the cosmetic slot.
- Regional Foods will now prioritize being eaten instead of used for healing Pokémon, shift clicking will use it as healing
- Resolved Z-Fighting on Pokédex Models
- Restored Ninjask's ability to do barrel rolls
### Fixes
- Fixed Croagunk's walkspeed
@@ -365,9 +335,6 @@
- Fixed Exploit where you could take out the bait or drop your Pokérod with bait to avoid consuming bait, now the bobber will just disappear if you do so
- Fixed Apricorn and Saccharine boats incorrectly using chest boat models
- Fixed wild and trainer battle AI refusing to select moves with the `adjacentAlly` target type, even when it's their only option
- Fixed Guilded chests being more accessible than intended
- Fixed fished up Pokémon not being added as "seen" to the Pokedex
- Fixed surprised Gimmighoul encounters not being added as "seen" to the Pokedex
### Developer
- Added `PokeSnackSpawnerFactory` which allows influence registration on PokeSnack encounters
@@ -401,84 +368,15 @@
- Ride sounds no longer play when submerged unless specified with a new setting
- NPC Trainers can now call a `command` animation when issuing a command in battle.
- Added a q.failed function to move action effects.
- Herd spawned Pokémon have their levels controlled differently. The `levelRange` property now acts as a clamp instead of a filter, with a new `herdLevelRange` property to do the filter behaviour.
- `q.sound` now accepts three parameters (sound event, volume and pitch) instead of just the sound event and pitch.
- Herd spawned Pokémon have their levels controlled differently. The `levelRange` property now acts as a clamp instead of a filter, with a new `herdLevelRange` property to do the filter behaviour.
### Particles
#### New Move Animations
- Blizzard
- Disarming Voice
- Draco Meteor
- Dragon Breath
- Dragon Rage
- Drain Punch
- Fairy Wind
- Fire Fang
- Gust
- Horn Drill
- Hydro Pump
- Ice Fang
- Leafage
- Leaf Storm
- Light Screen
- Night Shade
- Play Rough
- Pyro Ball
- Reflect
- Rock Slide
- Sonic Boom
- Sucker Punch
- Supersonic
- Thunder Fang
#### Tweaks and Fixes (Moves)
- Confusion
- Dragon Claw
- Eruption
- Fire Punch
- Flame Burst
- Flame Charge
- Flamethrower
- Frost Breath
- Hypnosis
- Ice Punch
- Icy Wind
- Mud Sport
- Poison Fang
- Protect
- Psychic
- Quick Attack
- Rage Powder
- Razor Leaf
- Sand Attack
- Scratch
- Shadow Claw
- Sing
- Spore
- String Shot
- Tackle
- Tail Whip
- Thunder
- Thunder Punch
- Thunder Wave
- Water Gun
- Water Pulse
- Water Sport
#### Miscellaneous Particles
+ Added Wild Might particles for Alpha Pokémon
+ Updated stat increase and decrease particles
### Localization
- Updated translations for:
- Japanese
- German
- Spanish
- Ecuadorian Spanish
- Brazilian Portuguese
- Simplified Chinese
- Traditional Chinese
- Korean
@@ -1,97 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin;
import com.cobblemon.mod.common.mixin.accessor.SinglePoolElementAccessor;
import com.cobblemon.mod.common.world.structureprocessors.HeightRangeStructureProcessor;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.levelgen.structure.Structure;
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement;
import net.minecraft.world.level.levelgen.structure.pools.LegacySinglePoolElement;
import net.minecraft.world.level.levelgen.structure.pools.SinglePoolElement;
import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement;
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.List;
import java.util.Optional;
@Mixin(JigsawPlacement.class)
public class JigsawPlacementMixin {
@Inject(
method = "addPieces*",
at = @At("HEAD"),
cancellable = true
)
private static void cobblemon$cancelInvalidHeightRangeStart(
CallbackInfoReturnable<Optional<Structure.GenerationStub>> cir,
@Local(argsOnly = true, ordinal = 0) Structure.GenerationContext generationContext,
@Local(argsOnly = true, ordinal = 0) Holder<StructureTemplatePool> startPool,
@Local(argsOnly = true, ordinal = 0) BlockPos startPos
) {
if (cobblemon$canAnyStartElementPlace(generationContext, startPool, startPos)) {
return;
}
cir.setReturnValue(Optional.empty());
}
@Unique
private static boolean cobblemon$canAnyStartElementPlace(
Structure.GenerationContext generationContext,
Holder<StructureTemplatePool> startPool,
BlockPos startPos
) {
List<StructurePoolElement> elements = startPool.value().getShuffledTemplates(RandomSource.create(0L));
for (StructurePoolElement element : elements) {
Optional<HeightRangeStructureProcessor> heightRangeProcessor = cobblemon$getHeightRangeProcessor(element);
if (heightRangeProcessor.isEmpty()) {
return true;
}
if (heightRangeProcessor.get().isValidPlacement(
generationContext.chunkGenerator(),
generationContext.heightAccessor(),
generationContext.randomState(),
startPos
)) {
return true;
}
}
return false;
}
@Unique
private static Optional<HeightRangeStructureProcessor> cobblemon$getHeightRangeProcessor(StructurePoolElement element) {
if (!(element instanceof SinglePoolElement)) {
return Optional.empty();
}
StructureProcessorList processorList = ((SinglePoolElementAccessor) element).getProcessors().value();
for (StructureProcessor processor : processorList.list()) {
if (processor instanceof HeightRangeStructureProcessor heightRangeStructureProcessor) {
return Optional.of(heightRangeStructureProcessor);
}
}
return Optional.empty();
}
}
@@ -1,22 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.core.Holder;
import net.minecraft.world.level.levelgen.structure.pools.SinglePoolElement;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(SinglePoolElement.class)
public interface SinglePoolElementAccessor {
@Accessor("processors")
Holder<StructureProcessorList> getProcessors();
}
@@ -12,6 +12,7 @@ import com.cobblemon.mod.common.api.net.NetworkPacket
import com.mojang.brigadier.arguments.ArgumentType
import kotlin.reflect.KClass
import net.minecraft.commands.synchronization.ArgumentTypeInfo
import net.minecraft.core.HolderLookup
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.MinecraftServer
@@ -168,12 +169,16 @@ interface CobblemonImplementation {
* TODO
*
* @param identifier
* @param reloader
* @param reloaderFactory
* @param type
* @param dependencies
*/
fun registerResourceReloader(identifier: ResourceLocation, reloader: PreparableReloadListener, type: PackType, dependencies: Collection<ResourceLocation>)
fun registerResourceReloader(
identifier: ResourceLocation,
type: PackType,
dependencies: Collection<ResourceLocation>,
reloaderFactory: (HolderLookup.Provider) -> PreparableReloadListener
)
/**
* TODO
*
@@ -0,0 +1,93 @@
/*
* 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.data
import com.cobblemon.mod.common.util.endsWith
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import net.minecraft.core.HolderLookup
import java.io.BufferedReader
import java.io.File
import java.util.concurrent.ExecutionException
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.packs.PackType
import net.minecraft.server.packs.resources.ResourceManager
/**
* A [DataRegistry] that consumes JSON files.
* Every deserialized instance is attached to an [Identifier].
* For example a file under data/mymod/[resourcePath]/entry.json would be backed by the identifier modid:entry.
*
* @param T The type of the data consumed by this registry.
*
* @author Licious
* @since August 5th, 2022
*/
interface ServerJsonDataRegistry<T> : DataRegistry {
/**
* The [TypeToken] of type [T].
*/
val typeToken: TypeToken<T>
/**
* The folder location for the data this registry will consume.
*/
val resourcePath: String
override val type: PackType
get() = PackType.SERVER_DATA
override fun reload(manager: ResourceManager) {
//NO-OP, handled by reload(manager, registry)
}
fun reload(manager: ResourceManager, registry: HolderLookup.Provider) {
val gson = setupParser(registry)
val data = hashMapOf<ResourceLocation, T>()
manager.listResources(resourcePath) { path -> path.endsWith(JSON_EXTENSION) }.forEach { (identifier, resource) ->
if (identifier.namespace == "pixelmon") {
return@forEach
}
resource.open().use { stream ->
stream.bufferedReader().use { reader ->
val resolvedIdentifier = ResourceLocation.fromNamespaceAndPath(identifier.namespace, File(identifier.path).nameWithoutExtension)
data[resolvedIdentifier] = parse(reader, resolvedIdentifier, gson)
}
}
}
reload(data, registry)
}
fun parse(reader: BufferedReader, identifier: ResourceLocation, gson: Gson): T {
return try {
gson.fromJson(reader, typeToken.type)
} catch (exception: Exception) {
throw ExecutionException("Error loading JSON for data: $identifier", exception)
}
}
/**
* Allows the creation of [Gson] instances which have adapters that are registry-aware, e.g. [com.cobblemon.mod.common.pokemon.evolution.adapters.LegacyItemConditionWrapperAdapter]
*/
fun setupParser(registry: HolderLookup.Provider): Gson
/**
* Reloads this registry from the deserialized data.
*
* @param data A map of the data associating an instance to the respective identifier from the [ResourceManager].
*/
fun reload(data: Map<ResourceLocation, T>, registry: HolderLookup.Provider)
companion object {
const val JSON_EXTENSION = ".json"
}
}
@@ -10,7 +10,7 @@ package com.cobblemon.mod.common.api.interaction
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.conditional.RegistryLikeCondition
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.data.ServerJsonDataRegistry
import com.cobblemon.mod.common.api.molang.ExpressionLike
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
import com.cobblemon.mod.common.api.pokemon.requirement.Requirement
@@ -26,6 +26,7 @@ import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.core.HolderLookup
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.server.packs.PackType
@@ -36,28 +37,31 @@ import net.minecraft.world.level.block.Block
import net.minecraft.world.level.levelgen.structure.Structure
import net.minecraft.world.level.material.Fluid
object PokemonInteractions : JsonDataRegistry<PokemonInteractionSet> {
object PokemonInteractions : ServerJsonDataRegistry<PokemonInteractionSet> {
override val id = cobblemonResource("pokemon_interactions")
override val type = PackType.SERVER_DATA
override fun setupParser(registry: HolderLookup.Provider): Gson {
return GsonBuilder()
.registerTypeAdapter(ResourceLocation::class.java, IdentifierAdapter)
.registerTypeAdapter(PokemonProperties::class.java, pokemonPropertiesShortAdapter)
.registerTypeAdapter(ItemPredicate::class.java, LegacyItemConditionWrapperAdapter(registry))
.registerTypeAdapter(Requirement::class.java, CobblemonRequirementAdapter)
.registerTypeAdapter(InteractionEffect::class.java, InteractionEffectAdapter)
.registerTypeAdapter(ExpressionLike::class.java, ExpressionLikeAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Biome::class.java).type, BiomeLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Block::class.java).type, BlockLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Item::class.java).type, ItemLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Structure::class.java).type, StructureLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Fluid::class.java).type, FluidLikeConditionAdapter)
.registerTypeAdapter(IntRange::class.java, IntRangeAdapter)
.registerTypeAdapterFactory(LowerCaseEnumTypeAdapterFactory())
.setPrettyPrinting()
.create()
}
override val observable = SimpleObservable<PokemonInteractions>()
override val typeToken: TypeToken<PokemonInteractionSet> = TypeToken.get(PokemonInteractionSet::class.java)
override val resourcePath = "pokemon_interactions"
override val gson: Gson = GsonBuilder()
.registerTypeAdapter(ResourceLocation::class.java, IdentifierAdapter)
.registerTypeAdapter(PokemonProperties::class.java, pokemonPropertiesShortAdapter)
.registerTypeAdapter(ItemPredicate::class.java, LegacyItemConditionWrapperAdapter)
.registerTypeAdapter(Requirement::class.java, CobblemonRequirementAdapter)
.registerTypeAdapter(InteractionEffect::class.java, InteractionEffectAdapter)
.registerTypeAdapter(ExpressionLike::class.java, ExpressionLikeAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Biome::class.java).type, BiomeLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Block::class.java).type, BlockLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Item::class.java).type, ItemLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Structure::class.java).type, StructureLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Fluid::class.java).type, FluidLikeConditionAdapter)
.registerTypeAdapter(IntRange::class.java, IntRangeAdapter)
.registerTypeAdapterFactory(LowerCaseEnumTypeAdapterFactory())
.setPrettyPrinting()
.create()
val interactions = mutableListOf<PokemonInteractionSet>()
@@ -65,7 +69,7 @@ object PokemonInteractions : JsonDataRegistry<PokemonInteractionSet> {
PokemonInteractionsSyncPacket(interactions).sendToPlayer(player)
}
override fun reload(data: Map<ResourceLocation, PokemonInteractionSet>) {
override fun reload(data: Map<ResourceLocation, PokemonInteractionSet>, registry: HolderLookup.Provider) {
interactions.clear()
val split = data.entries
.partition {
@@ -87,4 +91,4 @@ object PokemonInteractions : JsonDataRegistry<PokemonInteractionSet> {
.flatMap { it.interactions }
.firstOrNull(interactionCheck)
}
}
}
@@ -109,7 +109,7 @@ object PokemonMoLangFunctions : AbstractMoLangFunctionHolder<Pokemon>() {
DoubleValue(pokemon.species.nationalPokedexNumber.toDouble())
}
map["types"] = {
pokemon.form.types.map { it.showdownId }.asArrayValue(::StringValue)
pokemon.form.types.map { it.toString() }.asArrayValue(::StringValue)
}
map["gender_ratio"] = {
DoubleValue(pokemon.form.maleRatio.toDouble())
@@ -21,8 +21,6 @@ import com.cobblemon.mod.common.api.spawning.detail.SpawnDetail
import com.cobblemon.mod.common.api.spawning.position.SpawnablePosition
import com.cobblemon.mod.common.api.types.ElementalTypes
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.entity.pokemon.ai.sensors.AlphaLevelMatchingSensor
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.Entity
/**
@@ -49,13 +47,6 @@ open class SpawnBaitInfluence(val effects: List<SpawnBait.Effect>, val onUsed: (
Effects.getEffectFunction(effect.type)?.invoke(entity, effect)
}
}
if (entity.pokemon.isAlpha) {
val spawningPlayer = action.spawnablePosition.cause.entity as? ServerPlayer
if (spawningPlayer != null) {
AlphaLevelMatchingSensor.applyLevelMatching(entity, spawningPlayer)
}
}
}
}
@@ -139,4 +130,4 @@ open class SpawnBaitInfluence(val effects: List<SpawnBait.Effect>, val onUsed: (
if (used) markUsed()
return super.affectWeight(detail, spawnablePosition, newWeight)
}
}
}
@@ -103,6 +103,8 @@ class GildedChestBlockEntity(pos: BlockPos, state: BlockState, val type: Type =
return dir == Direction.DOWN
}
override fun stillValid(player: Player) = !player.isSpectator
override fun setItems(inventory: NonNullList<ItemStack>) {
inventoryContents = inventory
}
@@ -0,0 +1,121 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.animation.WaveAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.WaveSegment
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.sineFunction
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class ArbokModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("arbok")
override val head = getPart("head_ai")
override var portraitScale = 1.5F
override var portraitTranslation = Vec3(-0.4, 1.0, 0.0)
override var profileScale = 0.67F
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var summary: Pose
val tail = getPart("tail")
val tail2 = getPart("tail2")
val tail3 = getPart("tail3")
val tail4 = getPart("tail4")
val tail5 = getPart("tail5")
val tailWaveSegment = WaveSegment(modelPart = tail, length = 11F)
val tail2WaveSegment = WaveSegment(modelPart = tail2, length = 11F)
val tail3WaveSegment = WaveSegment(modelPart = tail3, length = 11F)
val tail4WaveSegment = WaveSegment(modelPart = tail4, length = 11F)
val tail5WaveSegment = WaveSegment(modelPart = tail5, length = 11F)
override val cryAnimation = CryProvider { bedrockStateful("arbok", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("arbok", "blink") }
// TODO tongue_flick
val wave = WaveAnimation(
waveFunction = sineFunction(
period = 10F,
amplitude = 0.5F
),
basedOnLimbSwing = true,
oscillationsScalar = 8F,
head = tail,
rotationAxis = ModelPartTransformation.Y_AXIS,
motionAxis = ModelPartTransformation.X_AXIS,
headLength = 0.1F,
segments = arrayOf(
tailWaveSegment,
tail2WaveSegment,
tail3WaveSegment,
tail4WaveSegment,
tail5WaveSegment
)
)
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("arbok", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("arbok", "summary_idle"),
wave
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("arbok", "ground_walk"),
wave
)
)
summary = registerPose(
poseName = "summary",
poseTypes = UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("arbok", "summary_idle")
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, sleep)) bedrockStateful("arbok", "faint") else null
}
@@ -0,0 +1,74 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class DittoModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("ditto")
override var portraitScale = 3.2F
override var portraitTranslation = Vec3(0.0, -2.2, 0.0)
override var profileScale = 1.4F
override var profileTranslation = Vec3(0.0, -0.34, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var sleep: Pose
override val cryAnimation = CryProvider { bedrockStateful("ditto", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("ditto", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
// singleBoneLook()
bedrock("ditto", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
// singleBoneLook()
bedrock("ditto", "ground_walk")
)
)
sleep = registerPose(
poseName = "sleep",
poseType = PoseType.SLEEP,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
// singleBoneLook()
bedrock("ditto", "sleep")
)
)
}
override fun getFaintAnimation(state: PosableState) = bedrockStateful("ditto", "faint")
}
@@ -0,0 +1,103 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class OmanyteModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("omanyte")
override var portraitScale = 3.15F
override var portraitTranslation = Vec3(-0.06, -3.18, 0.0)
override var profileScale = 1.13F
override var profileTranslation = Vec3(0.0, -0.02, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var float: CobblemonPose
lateinit var swim: CobblemonPose
lateinit var sleep: CobblemonPose
lateinit var battleidle: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("omanyte", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("omanyte", "blink") }
sleep = registerPose(
poseName = "sleep",
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("omanyte", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STANDING_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
transformTicks = 10,
condition = { !it.isBattling},
animations = arrayOf(
bedrock("omanyte", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES - PoseType.SWIM,
quirks = arrayOf(blink),
transformTicks = 10,
animations = arrayOf(
bedrock("omanyte", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseTypes = setOf(PoseType.FLOAT, PoseType.HOVER),
quirks = arrayOf(blink),
transformTicks = 10,
animations = arrayOf(
bedrock("omanyte", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseTypes = setOf(PoseType.SWIM, PoseType.FLY),
quirks = arrayOf(blink),
transformTicks = 10,
animations = arrayOf(
bedrock("omanyte", "water_swim")
)
)
battleidle = registerPose(
poseName = "battle-standing",
poseTypes = PoseType.STATIONARY_POSES,
quirks = arrayOf(blink),
transformTicks = 10,
condition = { it.isBattling},
animations = arrayOf(
bedrock("omanyte", "battle_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("omanyte", "faint") else null
}
@@ -0,0 +1,102 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class OmastarModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("omastar")
override var portraitTranslation = Vec3(0.02, -2.20, 0.0)
override var portraitScale = 2.4F
override var profileTranslation = Vec3(0.0, 0.066, 0.0)
override var profileScale = 1.1F
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var float: CobblemonPose
lateinit var swim: CobblemonPose
lateinit var sleep: CobblemonPose
lateinit var battleidle: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("omastar", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("omastar", "blink") }
sleep = registerPose(
poseName = "sleep",
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("omastar", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STANDING_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
transformTicks = 10,
condition = { !it.isBattling},
animations = arrayOf(
bedrock("omastar", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES - PoseType.SWIM,
quirks = arrayOf(blink),
transformTicks = 10,
animations = arrayOf(
bedrock("omastar", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseTypes = setOf(PoseType.FLOAT, PoseType.HOVER),
quirks = arrayOf(blink),
transformTicks = 10,
animations = arrayOf(
bedrock("omastar", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseTypes = setOf(PoseType.SWIM, PoseType.FLY),
quirks = arrayOf(blink),
transformTicks = 10,
animations = arrayOf(
bedrock("omastar", "water_swim")
)
)
battleidle = registerPose(
poseName = "battle-standing",
poseTypes = PoseType.STATIONARY_POSES,
quirks = arrayOf(blink),
transformTicks = 10,
condition = { it.isBattling},
animations = arrayOf(
bedrock("omastar", "battle_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("omastar", "faint") else null
}
@@ -0,0 +1,93 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import com.cobblemon.mod.common.util.isInWater
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TentacoolModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("tentacool")
override var portraitScale = 1.2F
override var portraitTranslation = Vec3(0.1, 1.1, 0.0)
override var profileScale = 0.6F
override var profileTranslation = Vec3(0.0, 0.8, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var swim: CobblemonPose
lateinit var float: CobblemonPose
lateinit var sleep: CobblemonPose
lateinit var watersleep: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("tentacool", "blink")}
standing = registerPose(
poseName = "standing",
poseType = PoseType.STAND,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("tentacool", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseType = PoseType.WALK,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("tentacool", "ground_idle")
//bedrock("tentacool", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseTypes = UI_POSES + PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("tentacool", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("tentacool", "water_swim")
)
)
sleep = registerPose(
poseName = "sleep",
poseType = PoseType.SLEEP,
condition = { !it.isInWater },
animations = arrayOf(bedrock("tentacool", "sleep"))
)
watersleep = registerPose(
poseName = "watersleep",
poseType = PoseType.SLEEP,
condition = { it.isInWater },
animations = arrayOf(bedrock("tentacool", "water_sleep"))
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("tentacool", "faint") else null
}
@@ -0,0 +1,155 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import com.cobblemon.mod.common.util.isUnderWater
import com.cobblemon.mod.common.util.isInWater
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FeraligatrModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame {
override val rootPart = root.registerChildWithAllChildren("feraligatr")
override val head = getPart("head_ai")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 1.3F
override var portraitTranslation = Vec3(-0.7, 1.1, 0.0)
override var profileScale = 0.6F
override var profileTranslation = Vec3(0.0, 0.8, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var floating: Pose
lateinit var swimming: Pose
lateinit var sleep: Pose
lateinit var watersleep: Pose
lateinit var battleidle: Pose
lateinit var water_surface_idle: Pose
lateinit var water_surface_swim: Pose
val wateroffset = -10
override val cryAnimation = CryProvider { bedrockStateful("feraligatr", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("feraligatr", "blink")}
sleep = registerPose(
poseName = "sleeping",
poseType = PoseType.SLEEP,
condition = { !it.isInWater },
animations = arrayOf(bedrock("feraligatr", "sleep"))
)
watersleep = registerPose(
poseName = "water_sleeping",
poseType = PoseType.SLEEP,
condition = { it.isInWater },
animations = arrayOf(bedrock("feraligatr", "water_sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.UI_POSES + PoseType.STAND,
transformTicks = 10,
condition = { !it.isBattling && !it.isInWater && !it.isUnderWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
transformTicks = 10,
poseType = PoseType.WALK,
condition = { !it.isInWater && !it.isUnderWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "ground_walk")
)
)
floating = registerPose(
poseName = "floating",
transformTicks = 10,
poseType = PoseType.FLOAT,
condition = { it.isUnderWater },
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "water_idle")
)
)
swimming = registerPose(
poseName = "swimming",
transformTicks = 10,
condition = { it.isUnderWater },
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "water_swim"),
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling && !it.isInWater },
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "battle_idle")
)
)
water_surface_idle = registerPose(
poseName = "surface_idle",
poseTypes = PoseType.STATIONARY_POSES,
quirks = arrayOf(blink),
condition = { !it.isUnderWater && it.isInWater },
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "watersurface_idle"),
),
transformedParts = arrayOf(rootPart.createTransformation().addPosition(ModelPartTransformation.Y_AXIS, wateroffset))
)
water_surface_swim = registerPose(
poseName = "surface_swim",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
condition = { !it.isUnderWater && it.isInWater },
animations = arrayOf(
singleBoneLook(),
bedrock("feraligatr", "watersurface_swim"),
),
transformedParts = arrayOf(rootPart.createTransformation().addPosition(ModelPartTransformation.Y_AXIS, wateroffset))
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, sleep)) bedrockStateful("feraligatr", "faint") else if (state.isPosedIn(water_surface_idle, water_surface_swim, watersleep )) bedrockStateful("feraligatr", "faint") else null
}
@@ -0,0 +1,91 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SmoochumModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("smoochum")
override val head = getPart("head")
override var portraitScale = 2.3F
override var portraitTranslation = Vec3(-0.14, -1.0, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.55, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
val shoulderOffset = 1
override fun registerPoses() {
// val blink = quirk { bedrockStateful("smoochum", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
// quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("smoochum", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
// quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("smoochum", "ground_idle")
)
)
shoulderLeft = registerPose(
poseType = PoseType.SHOULDER_LEFT,
//quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("smoochum", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(ModelPartTransformation.X_AXIS, shoulderOffset)
)
)
shoulderRight = registerPose(
poseType = PoseType.SHOULDER_RIGHT,
//quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("smoochum", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(ModelPartTransformation.X_AXIS, -shoulderOffset)
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("smoochum", "faint") else null
}
@@ -19,7 +19,7 @@ import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TyphlosionHisuianModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("typhlosion")
override val rootPart = root.registerChildWithAllChildren("typhlosion_hisui")
override val head = getPart("head")
override var portraitScale = 1.4F
@@ -0,0 +1,67 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TyranitarModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame, BimanualFrame, HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("tyranitar")
override val head = getPart("head")
override val leftArm = getPart("arm_left")
override val rightArm = getPart("arm_right")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 1.21F
override var portraitTranslation = Vec3(-0.43, 3.73, 0.0)
override var profileScale = 0.33F
override var profileTranslation = Vec3(0.02, 1.31, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("tyranitar", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("tyranitar", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(pitchMultiplier = 0.2F, yawMultiplier = 0.4F),
bedrock("tyranitar", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(pitchMultiplier = 0.2F, yawMultiplier = 0.4F),
bedrock("tyranitar", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
)
)
}
}
@@ -23,7 +23,7 @@ import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class WooperPaldeanModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("wooper")
override val rootPart = root.registerChildWithAllChildren("wooper_paldean")
override val head = getPart("head")
override var portraitScale = 2.0F
@@ -0,0 +1,78 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class LuvdiscModel (root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("luvdisc")
override var portraitScale = 6.0F
override var portraitTranslation = Vec3(0.15, -6.5, 0.0)
override var profileScale = 2.0F
override var profileTranslation = Vec3(0.0, -1.3, 0.0)
lateinit var standing: Pose
lateinit var sleep: Pose
lateinit var walk: Pose
lateinit var float: Pose
lateinit var swim: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("luvdisc", "blink")}
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("luvdisc", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseType = PoseType.STAND,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("luvdisc", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseType = PoseType.WALK,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("luvdisc", "ground_walk")
)
)
float = registerPose(
poseName = "float",
poseTypes = PoseType.UI_POSES + PoseType.FLOAT,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("luvdisc", "water_idle")
)
)
swim = registerPose(
poseName = "swim",
poseType = PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("luvdisc", "water_swim")
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, sleep)) bedrockStateful("luvdisc", "ground_faint") else null
}
@@ -0,0 +1,170 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.animation.WingFlapIdleAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BiWingedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.parabolaFunction
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.sineFunction
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.FLYING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.SHOULDER_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import com.cobblemon.mod.common.util.math.geometry.toRadians
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class ChatotModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BiWingedFrame{
override val rootPart = root.registerChildWithAllChildren("chatot")
override val leftWing = getPart("wing_left")
override val rightWing = getPart("wing_right")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override val head = getPart("head")
private val tail = getPart("tail")
override var portraitScale = 3.5F
override var portraitTranslation = Vec3(-0.1, -2.1, 0.0)
override var profileScale = 1.2F
override var profileTranslation = Vec3(0.0, -0.01, 0.0)
lateinit var sleep: Pose
lateinit var stand: Pose
lateinit var walk: Pose
lateinit var fly: Pose
override val cryAnimation = CryProvider { bedrockStateful("chatot", "cry") }
override fun registerPoses() {
// no sleep anim yet
// sleep = registerPose(
// poseType = PoseType.SLEEP,
// animations = arrayOf(bedrock("chatot", "sleep"))
// )
val blink = quirk { bedrockStateful("chatot", "blink") }
stand = registerPose(
poseName = "standing",
poseTypes = SHOULDER_POSES + UI_POSES + PoseType.STAND,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("chatot", "ground_idle")
)
)
fly = registerPose(
poseName = "hover",
poseTypes = FLYING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("chatot", "air_idle"),
WingFlapIdleAnimation(this,
flapFunction = sineFunction(verticalShift = -10F.toRadians(), period = 0.9F, amplitude = 0.6F),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Z_AXIS
)
)
)
walk = registerPose(
poseName = "walking",
poseType = PoseType.WALK,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("chatot", "ground_idle"),
rootPart.translation(
function = parabolaFunction(
peak = -4F,
period = 0.4F
),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Y_AXIS
),
head.translation(
function = sineFunction(
amplitude = (-20F).toRadians(),
period = 1F,
verticalShift = (-10F).toRadians()
),
axis = ModelPartTransformation.X_AXIS,
timeVariable = { state, _, _ -> state.animationSeconds }
),
leftLeg.rotation(
function = parabolaFunction(
tightness = -20F,
phaseShift = 0F,
verticalShift = (30F).toRadians()
),
axis = ModelPartTransformation.X_AXIS,
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
),
rightLeg.rotation(
function = parabolaFunction(
tightness = -20F,
phaseShift = 0F,
verticalShift = (30F).toRadians()
),
axis = ModelPartTransformation.X_AXIS,
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
),
tail.rotation(
function = sineFunction(
amplitude = (-5F).toRadians(),
period = 1F
),
axis = ModelPartTransformation.X_AXIS,
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
),
wingFlap(
flapFunction = sineFunction(
amplitude = (-5F).toRadians(),
period = 0.4F,
phaseShift = 0.00F,
verticalShift = (-20F).toRadians()
),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Z_AXIS
),
rightWing.translation(
function = parabolaFunction(
tightness = -10F,
phaseShift = 30F,
verticalShift = (25F).toRadians()
),
axis = ModelPartTransformation.Y_AXIS,
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
),
leftWing.translation(
function = parabolaFunction(
tightness = -10F,
phaseShift = 30F,
verticalShift = (25F).toRadians()
),
axis = ModelPartTransformation.Y_AXIS,
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
),
)
)
}
}
@@ -0,0 +1,86 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.isBattling
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TurtonatorModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
override val rootPart = root.registerChildWithAllChildren("turtonator")
override val head = getPart("head")
override val leftArm = getPart("arm_left")
override val rightArm = getPart("arm_right")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 1.62F
override var portraitTranslation = Vec3(-1.14, 1.92, 0.0)
override var profileScale = 0.54F
override var profileTranslation = Vec3(-0.08, 0.87, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var battleidle: CobblemonPose
override fun registerPoses() {
val blink = quirk { bedrockStateful("turtonator", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink),
condition = { !it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("turtonator", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("turtonator", "ground_idle"),
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
//bedrock("turtonator", "ground_walk")
)
)
battleidle = registerPose(
poseName = "battle_idle",
poseTypes = PoseType.STATIONARY_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
condition = { it.isBattling },
animations = arrayOf(
singleBoneLook(),
bedrock("turtonator", "battle_idle")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("turtonator", "faint") else null
}
@@ -248,8 +248,10 @@ object VaryingModelRepository {
inbuilt("machop", ::MachopModel)
inbuilt("machoke", ::MachokeModel)
inbuilt("machamp", ::MachampModel)
inbuilt("arbok", ::ArbokModel)
inbuilt("chansey", ::ChanseyModel)
inbuilt("cubone", ::CuboneModel)
inbuilt("ditto", ::DittoModel)
inbuilt("dodrio", ::DodrioModel)
inbuilt("doduo", ::DoduoModel)
inbuilt("electabuzz", ::ElectabuzzModel)
@@ -276,6 +278,8 @@ object VaryingModelRepository {
inbuilt("nidoranm", ::NidoranmModel)
inbuilt("nidorina", ::NidorinaModel)
inbuilt("nidorino", ::NidorinoModel)
inbuilt("omanyte", ::OmanyteModel)
inbuilt("omastar", ::OmastarModel)
inbuilt("persian", ::PersianModel)
inbuilt("pinsir", ::PinsirModel)
inbuilt("poliwag", ::PoliwagModel)
@@ -285,9 +289,11 @@ object VaryingModelRepository {
inbuilt("rapidash", ::RapidashModel)
inbuilt("sandslash", ::SandslashModel)
inbuilt("tangela", ::TangelaModel)
inbuilt("tentacool", ::TentacoolModel)
inbuilt("venomoth", ::VenomothModel)
inbuilt("venonat", ::VenonatModel)
inbuilt("elekid", ::ElekidModel)
inbuilt("smoochum", ::SmoochumModel)
inbuilt("hitmontop", ::HitmontopModel)
inbuilt("electivire", ::ElectivireModel)
inbuilt("tangrowth", ::TangrowthModel)
@@ -349,6 +355,7 @@ object VaryingModelRepository {
inbuilt("whismur", :: WhismurModel)
inbuilt("loudred", :: LoudredModel)
inbuilt("exploud", :: ExploudModel)
inbuilt("luvdisc", :: LuvdiscModel)
inbuilt("cryogonal", :: CryogonalModel)
inbuilt("pumpkaboo", :: PumpkabooModel)
inbuilt("gourgeist", :: GourgeistModel)
@@ -390,6 +397,7 @@ object VaryingModelRepository {
inbuilt("tandemaus", ::TandemausModel)
inbuilt("fidough", ::FidoughModel)
inbuilt("dachsbun", ::DachsbunModel)
inbuilt("chatot", ::ChatotModel)
inbuilt("gligar", ::GligarModel)
inbuilt("gliscor", ::GliscorModel)
inbuilt("poochyena", ::PoochyenaModel)
@@ -479,6 +487,7 @@ object VaryingModelRepository {
inbuilt("phantump", ::PhantumpModel)
inbuilt("totodile", ::TotodileModel)
inbuilt("croconaw", ::CroconawModel)
inbuilt("feraligatr", ::FeraligatrModel)
inbuilt("cyndaquil", ::CyndaquilModel)
inbuilt("quilava", ::QuilavaModel)
inbuilt("typhlosion", ::TyphlosionModel)
@@ -535,6 +544,7 @@ object VaryingModelRepository {
inbuilt("petilil_hisui_bias", ::PetililHisuiBiasModel)
inbuilt("lilligant_hisuian", ::LilligantHisuianModel)
inbuilt("darumaka", ::DarumakaModel)
inbuilt("turtonator", ::TurtonatorModel)
inbuilt("cufant", ::CufantModel)
inbuilt("copperajah", ::CopperajahModel)
inbuilt("budew", ::BudewModel)
@@ -564,6 +574,7 @@ object VaryingModelRepository {
inbuilt("vibrava", ::VibravaModel)
inbuilt("larvitar", ::LarvitarModel)
inbuilt("pupitar", ::PupitarModel)
inbuilt("tyranitar", ::TyranitarModel)
inbuilt("impidimp", ::ImpidimpModel)
inbuilt("morgrem", ::MorgremModel)
inbuilt("grimmsnarl", ::GrimmsnarlModel)
@@ -15,6 +15,7 @@ import com.cobblemon.mod.common.api.berry.Berries
import com.cobblemon.mod.common.api.cooking.Seasonings
import com.cobblemon.mod.common.api.data.DataProvider
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.data.ServerJsonDataRegistry
import com.cobblemon.mod.common.api.dialogue.Dialogues
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.fishing.PokeRods
@@ -51,6 +52,7 @@ import com.cobblemon.mod.common.pokemon.properties.PropertiesCompletionProvider
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.ifClient
import com.cobblemon.mod.common.util.server
import net.minecraft.core.HolderLookup
import java.util.UUID
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
@@ -119,9 +121,9 @@ object CobblemonDataProvider : DataProvider {
}
ifClient {
Cobblemon.implementation.registerResourceReloader(cobblemonResource("client_resources"), SimpleResourceReloader(PackType.CLIENT_RESOURCES), PackType.CLIENT_RESOURCES, emptyList())
Cobblemon.implementation.registerResourceReloader(cobblemonResource("client_resources"), PackType.CLIENT_RESOURCES, emptyList()) { ClientResourceReloader() }
}
Cobblemon.implementation.registerResourceReloader(cobblemonResource("data_resources"), SimpleResourceReloader(PackType.SERVER_DATA), PackType.SERVER_DATA, emptyList())
Cobblemon.implementation.registerResourceReloader(cobblemonResource("data_resources"), PackType.SERVER_DATA, emptyList()) { ServerResourceReloader(it) }
}
override fun <T : DataRegistry> register(registry: T, reloadable: Boolean): T {
@@ -160,11 +162,22 @@ object CobblemonDataProvider : DataProvider {
}
}
private class SimpleResourceReloader(private val type: PackType) : ResourceManagerReloadListener {
private class ClientResourceReloader : ResourceManagerReloadListener {
override fun onResourceManagerReload(manager: ResourceManager) {
registries.filter { it.type == PackType.CLIENT_RESOURCES }.forEach { it.reload(manager) }
}
}
private class ServerResourceReloader(private val registryAccess: HolderLookup.Provider) : ResourceManagerReloadListener {
override fun onResourceManagerReload(manager: ResourceManager) {
// Check for a server running, this is due to the create a world screen triggering datapack reloads, these are fine to happen as many times as needed as players may be in the process of adding their datapacks.
val reloadAllowed = server()?.isReady != true
registries.filter { it.type == this.type && (reloadAllowed || it in reloadableRegistries) }
registries
.filter { it.type == PackType.SERVER_DATA && (reloadAllowed || it in reloadableRegistries) }
.filterIsInstance<ServerJsonDataRegistry<*>>()
.forEach { it.reload(manager, registryAccess) }
registries
.filter { it.type == PackType.SERVER_DATA && (reloadAllowed || it in reloadableRegistries) }
.forEach { it.reload(manager) }
}
}
@@ -16,7 +16,6 @@ import com.cobblemon.mod.common.advancement.CobblemonCriteria
import com.cobblemon.mod.common.advancement.criterion.ReelInPokemonContext
import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.fishing.BobberSpawnPokemonEvent
import com.cobblemon.mod.common.api.events.pokemon.PokemonSeenEvent
import com.cobblemon.mod.common.api.fishing.SpawnBait
import com.cobblemon.mod.common.api.fishing.SpawnBaitEffects
import com.cobblemon.mod.common.api.scheduling.afterOnServer
@@ -21,7 +21,6 @@ import com.cobblemon.mod.common.api.events.CobblemonEvents
import com.cobblemon.mod.common.api.events.entity.PokemonEntityLoadEvent
import com.cobblemon.mod.common.api.events.entity.PokemonEntitySaveEvent
import com.cobblemon.mod.common.api.events.entity.PokemonEntitySaveToWorldEvent
import com.cobblemon.mod.common.api.events.pokemon.PokemonSeenEvent
import com.cobblemon.mod.common.api.events.pokemon.RidePokemonEvent
import com.cobblemon.mod.common.api.events.pokemon.ShoulderMountEvent
import com.cobblemon.mod.common.api.interaction.PokemonEntityInteraction
@@ -798,13 +797,6 @@ open class PokemonEntity(
return pokemon.isFireImmune()
}
/**
* Prevents ice type Pokémon from freezing (from powered snow)
*/
override fun canFreeze(): Boolean {
return !pokemon.isFreezeImmune() && super.canFreeze()
}
/**
* Prevents flying type Pokémon from taking fall damage.
*/
@@ -2095,7 +2087,7 @@ open class PokemonEntity(
return false
}
val lead = player.party().firstOrNull { it.entity != null }?.uuid
return BattleBuilder.pve(player, this, lead).ifSuccessful { CobblemonEvents.POKEMON_SEEN.post(PokemonSeenEvent(player.uuid, this.pokemon)) } is SuccessfulBattleStart
return BattleBuilder.pve(player, this, lead) is SuccessfulBattleStart
}
/**
@@ -50,71 +50,64 @@ class AlphaLevelMatchingSensor : Sensor<PokemonEntity>(20) {
.sendToPlayersAround(entity.x, entity.y, entity.z, 64.0, world.dimension())
}
applyLevelMatching(entity, nearestPlayer)
val strongestPartyLevel = nearestPlayer.party().maxOfOrNull { it.level } ?: return
val minEvolutionLevel = minimumEvolutionLevel(entity.pokemon)
val targetLevel = when {
strongestPartyLevel < 20 -> strongestPartyLevel + 5
strongestPartyLevel in 31..40 -> strongestPartyLevel + 10
strongestPartyLevel in 51..65 -> strongestPartyLevel + 15
strongestPartyLevel >= 66 -> strongestPartyLevel + 20
else -> strongestPartyLevel
}.coerceAtMost(100).coerceAtLeast(minEvolutionLevel)
if (entity.pokemon.level != targetLevel) {
entity.pokemon.level = targetLevel
}
}
// we do not want an Alpha to go below their minimum level requirement....
private fun minimumEvolutionLevel(pokemon: Pokemon): Int {
val preEvolution = pokemon.preEvolution ?: return 1
val currentSpecies = pokemon.species.resourceIdentifier
val isStandardForm = pokemon.form == pokemon.species.standardForm
val currentFormId = pokemon.form.formOnlyShowdownId()
var floor = Int.MAX_VALUE
// make sure we safely grab the correct pre-evo to get the evolution number value from
for (evolution in preEvolution.form.evolutions) {
val resultSpecies = evolution.result.species ?: continue
if (!resultSpecies.equals(currentSpecies.path, ignoreCase = true) &&
!resultSpecies.equals(currentSpecies.toString(), ignoreCase = true)
) {
continue
}
val resultForm = evolution.result.form
if (resultForm == null && !isStandardForm) {
continue
}
if (resultForm != null &&
!resultForm.equals(currentFormId, ignoreCase = true) &&
!resultForm.equals(pokemon.form.name, ignoreCase = true)
) {
continue
}
var minLevel = 1
for (requirement in evolution.requirements) {
if (requirement is LevelRequirement && requirement.minLevel > minLevel) {
minLevel = requirement.minLevel
}
}
if (minLevel < floor) {
floor = minLevel
}
}
return if (floor == Int.MAX_VALUE) 1 else floor
}
companion object {
private const val RADIUS_SQR = 32.0 * 32.0
fun applyLevelMatching(entity: PokemonEntity, player: ServerPlayer) {
val targetLevel = getTargetLevel(entity.pokemon, player) ?: return
if (entity.pokemon.level != targetLevel) {
entity.pokemon.level = targetLevel
}
}
private fun getTargetLevel(pokemon: Pokemon, player: ServerPlayer): Int? {
val strongestPartyLevel = player.party().maxOfOrNull { it.level } ?: return null
val minEvolutionLevel = minimumEvolutionLevel(pokemon)
return when {
strongestPartyLevel < 20 -> strongestPartyLevel + 5
strongestPartyLevel in 31..40 -> strongestPartyLevel + 10
strongestPartyLevel in 51..65 -> strongestPartyLevel + 15
strongestPartyLevel >= 66 -> strongestPartyLevel + 20
else -> strongestPartyLevel
}.coerceAtMost(100).coerceAtLeast(minEvolutionLevel)
}
// we do not want an Alpha to go below their minimum level requirement....
private fun minimumEvolutionLevel(pokemon: Pokemon): Int {
val preEvolution = pokemon.preEvolution ?: return 1
val currentSpecies = pokemon.species.resourceIdentifier
val isStandardForm = pokemon.form == pokemon.species.standardForm
val currentFormId = pokemon.form.formOnlyShowdownId()
var floor = Int.MAX_VALUE
// make sure we safely grab the correct pre-evo to get the evolution number value from
for (evolution in preEvolution.form.evolutions) {
val resultSpecies = evolution.result.species ?: continue
if (!resultSpecies.equals(currentSpecies.path, ignoreCase = true) &&
!resultSpecies.equals(currentSpecies.toString(), ignoreCase = true)
) {
continue
}
val resultForm = evolution.result.form
if (resultForm == null && !isStandardForm) {
continue
}
if (resultForm != null &&
!resultForm.equals(currentFormId, ignoreCase = true) &&
!resultForm.equals(pokemon.form.name, ignoreCase = true)
) {
continue
}
var minLevel = 1
for (requirement in evolution.requirements) {
if (requirement is LevelRequirement && requirement.minLevel > minLevel) {
minLevel = requirement.minLevel
}
}
if (minLevel < floor) {
floor = minLevel
}
}
return if (floor == Int.MAX_VALUE) 1 else floor
}
}
}
@@ -1037,10 +1037,6 @@ open class Pokemon : ShowdownIdentifiable {
return ElementalTypes.FIRE in types || form.behaviour.moving.swim.canSwimInLava || form.behaviour.fireImmune
}
fun isFreezeImmune(): Boolean {
return ElementalTypes.ICE in types || form.behaviour.freezeImmune
}
fun dampensVibrations(): Boolean = form.behaviour.dampensVibrations
// function to return the max hunger for the pokemon
@@ -1895,10 +1891,6 @@ open class Pokemon : ShowdownIdentifiable {
}
fun initializeMovesetFromDefault() {
if (isClient) {
moveSet.copyFrom(MoveSet().also { it.add(Moves.getExceptional().create()) })
return
}
val movesetBuilderId = if (isAlpha) {
cobblemonResource("alpha")
} else {
@@ -35,9 +35,6 @@ class FormPokemonBehaviour {
@SerializedName("fireImmune")
private val _fireImmune: Boolean? = null
@SerializedName("freezeImmune")
private val _freezeImmune: Boolean? = null
@SerializedName("dampensVibrations")
private val _dampensVibrations: Boolean? = null
@@ -75,9 +72,6 @@ class FormPokemonBehaviour {
val fireImmune: Boolean
get() = _fireImmune ?: parent.fireImmune
val freezeImmune: Boolean
get() = _freezeImmune ?: parent.freezeImmune
val entityInteract: EntityBehaviour
get() = _entityInteract ?: parent.entityInteract
@@ -31,7 +31,6 @@ open class PokemonBehaviour(
val herd: HerdBehaviour = HerdBehaviour(),
val characteristicRainbow: Boolean = false,
val itemInteract: ItemBehavior = ItemBehavior(),
val freezeImmune: Boolean = false,
) {
@Transient
val struct = ObjectValue<PokemonBehaviour>(this).also {
@@ -9,6 +9,7 @@
package com.cobblemon.mod.common.pokemon.evolution.adapters
import com.cobblemon.mod.common.util.adapters.CodecBackedAdapter
import com.cobblemon.mod.common.util.adapters.RegistryAccessResolver
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
@@ -19,6 +20,7 @@ import net.minecraft.advancements.critereon.ItemCustomDataPredicate
import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.advancements.critereon.ItemSubPredicates
import net.minecraft.advancements.critereon.NbtPredicate
import net.minecraft.core.HolderLookup
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceLocation
@@ -26,13 +28,16 @@ import net.minecraft.tags.TagKey
import java.lang.reflect.Type
// This is an ugly adapter because breaking changes are scary and people would ;(
object LegacyItemConditionWrapperAdapter : JsonDeserializer<ItemPredicate>, JsonSerializer<ItemPredicate> {
class LegacyItemConditionWrapperAdapter(val registryAccess: HolderLookup.Provider = RegistryAccessResolver.getAccess())
: JsonDeserializer<ItemPredicate>, JsonSerializer<ItemPredicate> {
private const val TAG_PREFIX = "#"
private const val LEGACY_ITEM = "item"
private const val LEGACY_NBT = "nbt"
companion object {
private const val TAG_PREFIX = "#"
private const val LEGACY_ITEM = "item"
private const val LEGACY_NBT = "nbt"
}
private val codecAdapter = CodecBackedAdapter(ItemPredicate.CODEC)
private val codecAdapter = CodecBackedAdapter(ItemPredicate.CODEC, registryAccess)
override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): ItemPredicate {
if (json.isJsonPrimitive) {
@@ -64,7 +69,9 @@ object LegacyItemConditionWrapperAdapter : JsonDeserializer<ItemPredicate>, Json
{ id ->
if (isTag) {
val tag = TagKey.create(Registries.ITEM, id)
builder.of(tag)
registryAccess.lookup(Registries.ITEM)
.map { builder.of(tag) }
.orElseGet { builder }
} else {
BuiltInRegistries.ITEM.getOptional(id)
.map { builder.of(it) }
@@ -75,4 +82,4 @@ object LegacyItemConditionWrapperAdapter : JsonDeserializer<ItemPredicate>, Json
)
}
}
}
@@ -10,16 +10,19 @@ package com.cobblemon.mod.common.util.adapters
import com.google.gson.*
import com.mojang.serialization.Codec
import com.mojang.serialization.JsonOps
import net.minecraft.core.HolderLookup
import net.minecraft.resources.RegistryOps
import java.lang.reflect.Type
class CodecBackedAdapter<T>(val codec: Codec<T>) : JsonDeserializer<T>, JsonSerializer<T> {
class CodecBackedAdapter<T>(val codec: Codec<T>, val registryAccess: HolderLookup.Provider = RegistryAccessResolver.getAccess()) : JsonDeserializer<T>, JsonSerializer<T> {
override fun deserialize(
jElement: JsonElement,
typeOfT: Type,
context: JsonDeserializationContext
): T {
val ops = RegistryOpsProvider.getOpsWithDefaultFallback()
val ops = RegistryOps.create(JsonOps.INSTANCE, registryAccess)
val result = ops.withDecoder(codec).apply(jElement)
return result.result().orElseThrow {
IllegalStateException("Failed to deserialize $jElement: ${result.error().orElse(null)}")
@@ -31,7 +34,7 @@ class CodecBackedAdapter<T>(val codec: Codec<T>) : JsonDeserializer<T>, JsonSeri
typeOfSrc: Type?,
context: JsonSerializationContext?
): JsonElement {
val ops = RegistryOpsProvider.getOpsWithDefaultFallback()
val ops = RegistryOps.create(JsonOps.INSTANCE, registryAccess)
val result = ops.withEncoder(codec).apply(src)
return result.result().orElseThrow {
IllegalStateException("Failed to serialize $src: ${result.error().orElse(null)}")
@@ -15,27 +15,33 @@ import com.google.gson.JsonElement
import com.mojang.serialization.DynamicOps
import com.mojang.serialization.JsonOps
import net.minecraft.client.Minecraft
import net.minecraft.core.RegistryAccess
import net.minecraft.resources.RegistryOps
/**
* Utility for obtaining RegistryOps with the correct client/server registry access.
* Used when manually encoding/decoding registry-backed values (e.g., items, predicates).
* Utility for getting RegistryAccess with the correct client/server registry access.
* Used when as a fallback when manually encoding/decoding registry-backed values (e.g., items, predicates).
*/
object RegistryOpsProvider {
fun getOpsWithDefaultFallback(): DynamicOps<JsonElement> {
object RegistryAccessResolver {
fun getAccess(): RegistryAccess {
try {
Cobblemon.implementation
} catch (e: UninitializedPropertyAccessException) {
return RegistryAccess.EMPTY
}
if (Cobblemon.implementation.environment() == Environment.CLIENT) {
val minecraft = Minecraft.getInstance()
if (minecraft != null && minecraft.level != null)
return RegistryOps.create(JsonOps.INSTANCE, minecraft.level!!.registryAccess())
return minecraft.level!!.registryAccess()
}
if (Cobblemon.implementation.environment() == Environment.SERVER) {
val server = server()
if (server != null)
return RegistryOps.create(JsonOps.INSTANCE, server.registryAccess())
return server.registryAccess()
}
return JsonOps.INSTANCE
return RegistryAccess.EMPTY
}
}
@@ -92,9 +92,7 @@ object CobblemonPlacedFeatures {
@JvmField
val SKELETAL_FALL = of("habitats/skeletal_fall")
@JvmField
val STRANGE_CRIMSON_FUNGAL_DWELLINGS = of("habitats/strange_crimson_fungal_dwellings")
@JvmField
val STRANGE_WARPED_FUNGAL_DWELLINGS = of("habitats/strange_warped_fungal_dwellings")
val STRANGE_FUNGAL_DWELLINGS = of("habitats/strange_fungal_dwellings")
@JvmField
val VOLCANIC_PLUMES = of("habitats/volcanic_plumes")
@@ -179,8 +177,7 @@ object CobblemonPlacedFeatures {
Cobblemon.implementation.addFeatureToWorldGen(ROOT_NURSERIES, GenerationStep.Decoration.LOCAL_MODIFICATIONS, CobblemonBiomeTags.IS_SWAMP)
Cobblemon.implementation.addFeatureToWorldGen(SANDY_TIDEPOOLS, GenerationStep.Decoration.LOCAL_MODIFICATIONS, CobblemonBiomeTags.IS_BEACH)
Cobblemon.implementation.addFeatureToWorldGen(SKELETAL_FALL, GenerationStep.Decoration.LOCAL_MODIFICATIONS, CobblemonBiomeTags.IS_SOUL_SAND)
Cobblemon.implementation.addFeatureToWorldGen(STRANGE_CRIMSON_FUNGAL_DWELLINGS, GenerationStep.Decoration.LOCAL_MODIFICATIONS, CobblemonBiomeTags.IS_WASTELAND)
Cobblemon.implementation.addFeatureToWorldGen(STRANGE_WARPED_FUNGAL_DWELLINGS, GenerationStep.Decoration.LOCAL_MODIFICATIONS, CobblemonBiomeTags.IS_WASTELAND)
Cobblemon.implementation.addFeatureToWorldGen(STRANGE_FUNGAL_DWELLINGS, GenerationStep.Decoration.LOCAL_MODIFICATIONS, CobblemonBiomeTags.IS_WASTELAND)
Cobblemon.implementation.addFeatureToWorldGen(VOLCANIC_PLUMES, GenerationStep.Decoration.LOCAL_MODIFICATIONS, BiomeTags.IS_NETHER)
Cobblemon.implementation.addFeatureToWorldGen(PREHISTORIC_BIRCH_TREE, GenerationStep.Decoration.LAKES, CobblemonBiomeTags.HAS_BIRCH_LOG)
Cobblemon.implementation.addFeatureToWorldGen(PREHISTORIC_DRIPSTONE_OASIS, GenerationStep.Decoration.LAKES, CobblemonBiomeTags.IS_DRIPSTONE)
@@ -13,10 +13,7 @@ import com.mojang.serialization.MapCodec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.core.BlockPos
import net.minecraft.world.level.LevelReader
import net.minecraft.world.level.LevelHeightAccessor
import net.minecraft.world.level.chunk.ChunkGenerator
import net.minecraft.world.level.levelgen.Heightmap
import net.minecraft.world.level.levelgen.RandomState
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate
@@ -27,25 +24,6 @@ class HeightRangeStructureProcessor(
val reference: HeightReference = HeightReference.SEA_LEVEL
) : StructureProcessor() {
fun isValidPlacement(world: LevelReader, pos: BlockPos): Boolean {
val referenceY = reference.getY(world, pos)
val minY = referenceY + minOffset
val maxY = referenceY + maxOffset
return pos.y in minY..maxY
}
fun isValidPlacement(
chunkGenerator: ChunkGenerator,
heightAccessor: LevelHeightAccessor,
randomState: RandomState,
pos: BlockPos
): Boolean {
val referenceY = reference.getY(chunkGenerator, heightAccessor, randomState, pos)
val minY = referenceY + minOffset
val maxY = referenceY + maxOffset
return pos.y in minY..maxY
}
override fun processBlock(
world: LevelReader,
pos: BlockPos,
@@ -54,7 +32,11 @@ class HeightRangeStructureProcessor(
currentBlockInfo: StructureTemplate.StructureBlockInfo,
data: StructurePlaceSettings
): StructureTemplate.StructureBlockInfo? {
return if (isValidPlacement(world, pos)) {
val referenceY = reference.getY(world, pos)
val minY = referenceY + minOffset
val maxY = referenceY + maxOffset
return if (pos.y in minY..maxY) {
currentBlockInfo
} else {
null
@@ -83,19 +65,6 @@ class HeightRangeStructureProcessor(
}
}
fun getY(
chunkGenerator: ChunkGenerator,
heightAccessor: LevelHeightAccessor,
randomState: RandomState,
pos: BlockPos
): Int {
return if (this == SEA_LEVEL) {
chunkGenerator.seaLevel
} else {
chunkGenerator.getBaseHeight(pos.x, pos.z, type ?: Heightmap.Types.WORLD_SURFACE_WG, heightAccessor, randomState)
}
}
companion object {
val CODEC: Codec<HeightReference> = Codec.STRING.xmap(
{ serialized -> entries.firstOrNull { it.id == serialized } ?: SEA_LEVEL },
@@ -1,39 +0,0 @@
{
"format_version": "1.8.0",
"animations": {
"animation.playrough.actor": {
"animation_length": 3,
"bones": {
"root_part": {
"position": {
"0.0": [0, 0, 0],
"0.0417": [0, 0, -3],
"0.0833": [0, 0, -6],
"0.125": [0, 0, -16],
"0.2917": [0, 0, -26],
"1.2083": [0, 0, -10],
"1.2917": [0, 0, -4],
"1.4167": [0, 0, 0]
},
"scale": {
"0.0": [1, 1, 1],
"0.0417": [1, 1, 1.05],
"0.0833": [1, 1, 1.2],
"0.125": {"pre": [0.9841, 0.9841, 1.6], "post": [0, 0, 0]},
"1.2083": {"pre": [0, 0, 0], "post": [1, 1, 1]}
}
}
},
"particle_effects": {
"0.0": {
"effect": "closecombat_actor",
"locator": "middle"
},
"0.0417": {
"effect": "closecombat_dashlines",
"locator": "middle"
}
}
}
}
}
@@ -1,72 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:blizzard_actor",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_ice"
}
},
"curves": {
"variable.bsizing": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.69, 0.96, 1, 1, 1, 1, 1, 1, 0.96, 0.82, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 900,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.1
},
"minecraft:emitter_shape_box": {
"offset": [0, 4, 2],
"half_dimensions": [10, 4, 10],
"direction": ["(v.particle_random_1-0.5)*0.5", "(v.target_deltay/v.target_distance)+((v.particle_random_2-0.5)*0.5)", -1]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.9,1.4)*1.1"
},
"minecraft:particle_initial_speed": "(v.particle_random_4+1)*16",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["math.sin(v.particle_age*((v.particle_random_2-0.5)*(360+(v.particle_random_2*180))))*1.5", "math.cos(v.particle_age*((v.particle_random_4-0.5)*(360+(v.particle_random_2*180))))*2", "math.sin(v.particle_age*((v.particle_random_1-0.5)*(360+(v.particle_random_2*180))))*1.5"],
"linear_drag_coefficient": 1.5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.1*v.bsizing", "0.1*v.bsizing"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 10,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.2,
"coefficient_of_restitution": 0.05,
"collision_radius": 0.1
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"1.0": "#FFAAD4FF"
}
}
}
}
}
}
@@ -1,73 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:blizzard_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_ice"
}
},
"curves": {
"variable.dfd": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.69, 0.96, 1, 1, 1, 0.96, 0.82, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.entity_height=1;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 1000,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_shape_point": {
"direction": ["(v.particle_random_1-0.5)*3", "(v.particle_random_2-0.5)*3", "(v.particle_random_3-0.5)*3"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "0.6+(v.particle_random_4*0.4)"
},
"minecraft:particle_initial_speed": "math.random(1.25,4.75)*7",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_3-0.5)*16", "(v.particle_random_4-0.5)*16", "(v.particle_random_2-0.5)*16"],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.1*v.dfd", "0.1*v.dfd"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 10,
"max_frame": 7,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.2,
"coefficient_of_restitution": 0.6,
"collision_radius": 0.1
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"1.0": "#FFAAD4FF"
}
}
}
}
}
}
@@ -1,64 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:blizzard_targetswirl",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_ice"
}
},
"curves": {
"variable.dfd": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.69, 0.96, 1, 1, 1, 0.96, 0.82, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.entity_height=1;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 200,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.7
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "0.6+(v.particle_random_4*0.4)"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["(math.sin((v.particle_age*420)+(v.particle_random_1*360))*(math.clamp(v.entity_radius*1.04,0.65,4)+(v.particle_age*1.7)))", "(math.cos((v.particle_age*410)+(v.particle_random_1*360))*0.25)+((((v.particle_random_2-0.5)*2)*(v.entity_height*0.65))+((v.particle_age+v.particle_age)*(v.particle_random_4-0.5)))", "(math.cos((v.particle_age*410)+(v.particle_random_1*360))*(math.clamp(v.entity_radius*1.04,0.65,4)+(v.particle_age*1.7)))"]
},
"minecraft:particle_appearance_billboard": {
"size": ["0.1*v.dfd", "0.1*v.dfd"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 10,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"1.0": "#FFAAD4FF"
}
}
}
}
}
}
@@ -37,7 +37,7 @@
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["0.35+(v.particle_age*0.175)", "0.35+(v.particle_age*0.175)"],
"facing_camera_mode": "emitter_transform_xy",
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 117,
"texture_height": 13,
@@ -48,7 +48,7 @@
0.55,
0.55
],
"facing_camera_mode": "emitter_transform_xy",
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 68,
"texture_height": 17,
@@ -1,60 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:disarmingvoice_actor1",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/ring/largering"
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 8,
"max_particles": 7
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.1
},
"minecraft:emitter_shape_point": {
"offset": ["v.target_deltax*(v.emitter_age/v.emitter_lifetime)", "v.target_deltay*(v.emitter_age/v.emitter_lifetime)", "-(v.target_deltaz*(v.emitter_age/v.emitter_lifetime))"],
"direction": [0, "(v.target_deltay/v.target_distance)", -1]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.43
},
"minecraft:particle_initial_speed": "math.clamp(v.target_deltaz,1,12)",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": "math.clamp(v.target_deltaz*1.5,3,10)"
},
"minecraft:particle_appearance_billboard": {
"size": [0.75, 0.75],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 160,
"texture_height": 20,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [20, 20],
"step_UV": [20, 0],
"frames_per_second": 20,
"max_frame": 8
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFECFE",
"0.47": "#FFFF89E8",
"1.0": "#FFE600BA"
}
}
}
}
}
}
@@ -1,60 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:disarmingvoice_actor2",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/ring/mediumring"
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 8,
"max_particles": 7
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.1
},
"minecraft:emitter_shape_point": {
"offset": ["v.target_deltax*(v.emitter_age/v.emitter_lifetime)", "v.target_deltay*(v.emitter_age/v.emitter_lifetime)", "-(v.target_deltaz*(v.emitter_age/v.emitter_lifetime))"],
"direction": [0, "(v.target_deltay/v.target_distance)", -1]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.3
},
"minecraft:particle_initial_speed": "math.clamp(v.target_deltaz,1,12)",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": "math.clamp(v.target_deltaz*1.5,3,10)"
},
"minecraft:particle_appearance_billboard": {
"size": [0.55, 0.55],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 90,
"texture_height": 15,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 15],
"step_UV": [15, 0],
"frames_per_second": 20,
"max_frame": 6
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFECFE",
"0.47": "#FFFF89E8",
"1.0": "#FFE600BA"
}
}
}
}
}
}
@@ -1,63 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:disarmingvoice_actorhearts",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/status/infatuation_heart"
}
},
"curves": {
"variable.d": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.93, 1, 1, 1, 0.93, 0.61, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 25,
"max_particles": 2000
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.1
},
"minecraft:emitter_shape_point": {
"offset": ["(v.target_deltax*(v.emitter_age/v.emitter_lifetime))+math.sin(v.emitter_age*360*7.5)*0.7", "(v.target_deltay*(v.emitter_age/v.emitter_lifetime))+math.cos(v.emitter_age*360*7.5)*0.7", "-(v.target_deltaz*(v.emitter_age/v.emitter_lifetime))"],
"direction": [0, "(v.target_deltay/v.target_distance)", -1]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.45
},
"minecraft:particle_initial_speed": "v.target_deltaz*0.5",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)", "(v.particle_random_2-0.5)", "(v.particle_random_3-0.5)"],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.1-(v.particle_random_4*0.04))*v.d", "(0.1-(v.particle_random_4*0.04))*v.d"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 90,
"texture_height": 9,
"uv": [3, 3],
"uv_size": [3, 3]
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFF89E8",
"1.0": "#FFE600BA"
}
}
}
}
}
}
@@ -1,70 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:disarmingvoice_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/ring/xlring"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0.24, 0.69, 0.9, 0.98, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}
},
"events": {
"event": {
"particle_effect": {
"effect": "cobblemon:disarmingvoice_targetsparks",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event"
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.43
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["1*v.s", "1*v.s"],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 160,
"texture_height": 20,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [20, 20],
"step_UV": [20, 0],
"frames_per_second": 20,
"max_frame": 8
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFECFE",
"0.47": "#FFFF89E8",
"1.0": "#FFE600BA"
}
}
}
}
}
}
@@ -1,64 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:disarmingvoice_targetsparks",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/orb/scaling"
}
},
"curves": {
"variable.size": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 0.98, 0.86, 0.6, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 10
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"direction": ["math.random(-0.91,0.91)", "math.random(-0.81, 1.01)", "math.random(-0.91,0.91)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.45, 0.6)"
},
"minecraft:particle_initial_speed": "(0.8+(v.particle_random_4*0.6))*10",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*7", "(v.particle_random_2-0.5)*7", "(v.particle_random_3-0.5)*7"],
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.11*v.size", "0.11*v.size"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 32,
"flipbook": {
"base_UV": [0, 16],
"size_UV": [8, 8],
"step_UV": [0, -8],
"frames_per_second": 12,
"max_frame": 3,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFECFE",
"0.93": "#FFE600BA"
}
}
}
}
}
}
@@ -1,77 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonbreath_actor",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.fun": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 0.99, 0.97, 0.91, 0.77, 0.54, -0.1]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;v.target_deltax=0;v.target_deltay=0;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": "30*(math.clamp(v.target_deltaz,1,4))",
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"direction": ["(-v.target_deltax+((v.particle_random_1-0.5)*1.05))+(math.sin(v.emitter_age*360)*0.25)", "(v.target_deltay+((v.particle_random_2-0.5)*1.05))+(math.sin(v.emitter_age*540)*0.2)", "-v.target_deltaz*1.05"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.75,1.0)*1.4"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(v.target_deltaz*((v.particle_random_4+0.75)*1.15))*(math.clamp(v.target_deltaz,3,24)/1.7)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_3-0.5)*4", "3+(v.particle_random_1-0.5)*2", "(v.particle_random_2-0.5)*1"],
"linear_drag_coefficient": "math.clamp(v.target_deltaz,1,20)*(0.5+(math.clamp(v.target_deltaz,1,5)*0.05))"
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.5-(v.particle_random_4*0.15))*v.fun", "(0.5-(v.particle_random_4*0.15))*v.fun"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 12,
"max_frame": 10
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 10,
"collision_radius": 0.01
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "(v.particle_age / v.particle_lifetime) * (v.particle_random_4+0.75)",
"gradient": {
"0.0": "#FFFFE6A1",
"0.05": "#FFFFE6A1",
"0.2": "#FFFF3B8F",
"0.6": "#FFA300FF",
"1.0": "#FF3E00C7"
}
}
}
}
}
}
@@ -1,71 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonbreath_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.dorasize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0.42, 0.77, 0.91, 0.98, 1, 1, 1, 1, 1, 0.86, 0.55, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 250,
"max_particles": 150
},
"minecraft:emitter_lifetime_looping": {
"active_time": 0.3
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, "math.random(0.15,-0.05)"],
"direction": ["math.random(-2,2)*1.1", "math.random(-2,2)*1.1", "math.random(-2,2)*0.45"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.65,1.0)*1.4"
},
"minecraft:particle_initial_speed": "math.random(1.25,4.75)*1.25",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, "math.random(1.5,3.5)", 0],
"linear_drag_coefficient": "math.random(1.25,1.5)*2"
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.5-(v.particle_random_4*0.15))*v.dorasize", "(0.5-(v.particle_random_4*0.15))*v.dorasize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 12,
"max_frame": 10
}
}
},
"minecraft:particle_motion_collision": {
"coefficient_of_restitution": 0.1,
"collision_radius": 0.1
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFE6A1",
"0.35": "#FFFF3B8F",
"0.7": "#FFA300FF",
"1.0": "#FF3E00C7"
}
}
}
}
}
}
@@ -1,74 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonrage_actor",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.fun": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 0.99, 0.95, 0.8, 0.5, 0.05]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 60,
"max_particles": 300
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.65
},
"minecraft:emitter_shape_point": {
"offset": ["-v.target_deltax*(v.emitter_age/v.emitter_lifetime)", "v.target_deltay*(v.emitter_age/v.emitter_lifetime)", "-v.target_deltaz*(v.emitter_age/v.emitter_lifetime)"],
"direction": ["math.random(-0.45,0.45)", "math.random(-0.45,0.45)-(v.target_deltay/v.target_deltaz)", "math.random(-2.05,-0.55)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.7
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "math.random(2.75,3.25)*(v.target_deltaz*0.5)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*4", "1.5+(v.particle_random_1-0.5)*3", "(v.particle_random_1-0.5)*3"],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.45*v.fun", "0.45*v.fun"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 20,
"max_frame": 10
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFA1A1",
"0.05": "#FFFFA1A1",
"0.2": "#FFFF3BF2",
"0.6": "#FF7C00FF",
"1.0": "#FF3E00C7"
}
}
}
}
}
}
@@ -1,85 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonrage_actorburst",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.fun": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 0.97, 0.87, 0.54, 0]
}
},
"events": {
"ring": {
"particle_effect": {
"effect": "cobblemon:dragonrage_actorring",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 200,
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "ring"
},
"minecraft:emitter_shape_point": {
"direction": ["math.random(-1.05,1.05)*1.25", "math.random(-1.05,1.05)*1.25", "math.random(-1.25,-0.05)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.4,0.8)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "math.random(2.5,7.5)*2",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*4", "3+(v.particle_random_1-0.5)*3", "(v.particle_random_1-0.5)*1"],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.5-(v.particle_random_4*0.15))*v.fun", "(0.5-(v.particle_random_4*0.15))*v.fun"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [16, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 20,
"max_frame": 9
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 10,
"collision_radius": 0.01
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFA1A1",
"0.05": "#FFFFA1A1",
"0.2": "#FFFF3BF2",
"0.6": "#FF7C00FF",
"1.0": "#FF3E00C7"
}
}
}
}
}
}
@@ -1,63 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonrage_actorring",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/ring/xlring"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.57, 0.84, 0.96, 1, 1, 1, 1, 1, 1, 1]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.05
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.1]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.45
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["1.2*v.s", "1.2*v.s"],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 200,
"texture_height": 25,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [25, 25],
"step_UV": [25, 0],
"frames_per_second": 20,
"max_frame": 8
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFA1A1",
"0.05": "#FFFFA1A1",
"0.2": "#FFFF3BF2",
"0.78": "#FF6600C7",
"1.0": "#003E00C7"
}
}
}
}
}
}
@@ -1,84 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonrage_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.fun": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 1, 1, 0.96, 0.85, 0.6, -0.05]
}
},
"events": {
"cover": {
"particle_effect": {
"effect": "cobblemon:dragonrage_targetcover",
"type": "emitter_bound"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": "30*math.clamp(v.entity_height,1,2)"
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.05
},
"minecraft:emitter_lifetime_events": {
"creation_event": "cover"
},
"minecraft:emitter_shape_point": {
"direction": ["math.random(-1.55,1.55)", "math.random(-1.55,1.55)", "math.random(-1.55,1.55)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.35,0.95)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "math.random(3,8.5)*math.clamp(v.entity_height,1,1.5)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*5", "4+(v.particle_random_2-0.5)*3", "(v.particle_random_3-0.5)*5"],
"linear_drag_coefficient": 3
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.5-(v.particle_random_4*0.15))*v.fun", "(0.5-(v.particle_random_4*0.15))*v.fun"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [16, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 20,
"max_frame": 9
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 10,
"collision_radius": 0.01
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFA1A1",
"0.05": "#FFFFA1A1",
"0.2": "#FFFF3BF2",
"0.6": "#FF7C00FF",
"1.0": "#FF3E00C7"
}
}
}
}
}
}
@@ -1,78 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:dragonrage_targetcover",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.burstarc": {
"type": "linear",
"input": "v.emitter_age",
"horizontal_range": "v.emitter_lifetime",
"nodes": [0.06, 0.5, 0.78, 0.91, 0.97, 0.99, 0.96, 0.83, 0.55, 0.06]
},
"variable.fun": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 1, 1, 0.96, 0.85, 0.6, -0.05]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": "25*math.clamp(v.entity_height,1,2)",
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.75
},
"minecraft:emitter_shape_sphere": {
"radius": "(v.entity_height*(0.7-(v.particle_random_4*0.15)))*math.clamp(v.entity_scale,0.5,1))",
"surface_only": true,
"direction": ["math.random(-0.45,0.45)", "math.random(-0.15,0.35)", "math.random(-0.45,0.45)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.45,0.75)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": 1,
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*4", "3+(v.particle_random_1-0.5)*2", "(v.particle_random_1-0.5)*4"],
"linear_drag_coefficient": 2
},
"minecraft:particle_appearance_billboard": {
"size": ["0.4*v.fun", "0.4*v.fun"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 20,
"max_frame": 10
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFA1A1",
"0.05": "#FFFFA1A1",
"0.2": "#FFFF3BF2",
"0.6": "#FF7C00FF",
"1.0": "#FF3E00C7"
}
}
}
}
}
}
@@ -1,78 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:drainpunch_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/orb/xsfadeorblite"
}
},
"curves": {
"variable.drainopen": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0.35, 0.8, 0.98, 1, 1, 1, 1, 0.98, 0.9, 0.65, 0.01]
}
},
"events": {
"sparkle": {
"particle_effect": {
"effect": "cobblemon:megadrain_actortrail",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 15,
"max_particles": 32
},
"minecraft:emitter_lifetime_looping": {
"active_time": 1.3
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.7
},
"minecraft:particle_lifetime_events": {
"timeline": {
"0.05": "sparkle",
"0.15": "sparkle",
"0.33": "sparkle",
"0.45": "sparkle"
}
},
"minecraft:particle_motion_parametric": {
"relative_position": ["(math.sin((v.particle_age*65)+(v.emitter_age*1523))*(0.75-(v.particle_age*(v.particle_age*1.7)))*v.drainopen)-(v.target_deltax*0.9)+((v.target_deltax * (v.particle_age / v.particle_lifetime))*0.95)", "(math.cos((v.particle_age*65)+(v.emitter_age*1523))*(0.75-(v.particle_age*(v.particle_age*1.7)))*v.drainopen)+(v.target_deltay*0.9)-((v.target_deltay * (v.particle_age / v.particle_lifetime))*0.95)", "-(v.target_deltaz*0.9)+((v.target_deltaz*(v.particle_age / v.particle_lifetime))*0.95)"]
},
"minecraft:particle_appearance_billboard": {
"size": [0.135, 0.135],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 45,
"texture_height": 5,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 12,
"max_frame": 9
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#8FC48F00",
"0.25": "#DFFFE74E",
"0.85": "#DFBDF700",
"1.0": "#4F65D000"
}
}
}
}
}
}
@@ -1,81 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:drainpunch_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/bigfist"
}
},
"curves": {
"variable.punch": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0.54, 0.27, 0, 0.06, 0.1, 0.13, 0.15, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16]
}
},
"events": {
"burst": {
"particle_effect": {
"effect": "cobblemon:drainpunch_targetburst",
"type": "emitter"
}
},
"ring": {
"particle_effect": {
"effect": "cobblemon:drainpunch_targetring",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_looping": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"timeline": {
"0.05": ["burst", "ring"]
}
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.65
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["0.6+v.punch", "0.6+v.punch"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 270,
"texture_height": 30,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [30, 30],
"step_UV": [30, 0],
"frames_per_second": 14,
"max_frame": 9
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFF7A00",
"0.2": "#FFFFA700",
"0.25": "#FFFFF390",
"0.43": "#FFFF7A00",
"0.65": "#FFB84100",
"1.0": "#005F1D00"
}
}
}
}
}
}
@@ -1,73 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:drainpunch_targetburst",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/orb/xsfadeorblite"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 0.97, 0.94, 0.89, 0.83, 0.68, 0.52, 0.26, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 300,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.05
},
"minecraft:emitter_shape_point": {
"direction": ["(v.particle_random_1-0.5)*6", "(v.particle_random_2-0.5)*6", "(v.particle_random_3-0.5)*4"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.5,0.8)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_2*3)*90"
},
"minecraft:particle_initial_speed": "(3+(v.particle_random_4*5))*3.5",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*12", "(v.particle_random_2-0.5)*12", "(v.particle_random_3-0.5)*12"],
"linear_drag_coefficient": 8
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.1-(v.particle_random_4*0.06))*variable.scale", "(0.1-(v.particle_random_4*0.06))*variable.scale"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 45,
"texture_height": 5,
"flipbook": {
"base_UV": [10, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 16,
"max_frame": 7
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 1,
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age/v.particle_lifetime",
"gradient": {
"0.0": "#FFFF7A00",
"0.2": "#FFFFF390",
"1.0": "#FFFF7A00"
}
}
}
}
}
}
@@ -1,59 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:drainpunch_targetring",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/ring/xlring"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.56, 0.88, 0.98, 1, 1, 1, 1, 1]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.4
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["1.05*v.s", "1.05*v.s"],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 200,
"texture_height": 25,
"flipbook": {
"base_UV": [50, 0],
"size_UV": [25, 25],
"step_UV": [25, 0],
"frames_per_second": 16,
"max_frame": 6
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFF390",
"0.79": "#FFFF7A00",
"1.0": "#FFBA3800"
}
}
}
}
}
}
@@ -5,7 +5,7 @@
"identifier": "cobblemon:eruption_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/burning_rock"
"texture": "textures/particles/vanilla/lava"
}
},
"curves": {
@@ -19,7 +19,7 @@
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [-0.04, 0.46, 0.8, 0.96, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
"nodes": [1, 1, 0.99, 0.97, 0.93, 0.83, 0.54, 0]
}
},
"events": {
@@ -47,7 +47,7 @@
"creation_expression": "v.target_deltaz=10;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 10,
"spawn_rate": 25,
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
@@ -55,7 +55,7 @@
},
"minecraft:emitter_shape_disc": {
"offset": [0, 9, "-v.target_deltaz*0.33"],
"radius": "math.clamp(v.entity_width,2,10)",
"radius": "math.clamp(v.entity_width,1.5,10)",
"direction": ["(v.particle_random_1-0.5)*0.3", "(-v.particle_random_2-0.55)*0.9", "(v.target_deltaz*0.05)+(v.particle_random_3-0.5)*0.3"]
},
"minecraft:particle_lifetime_expression": {
@@ -87,18 +87,18 @@
"linear_drag_coefficient": 1
},
"minecraft:particle_appearance_billboard": {
"size": ["((0.8-(v.particle_random_4*0.125))*v.quiver)*v.shrink", "((0.8-(v.particle_random_4*0.125))*v.quiver)*v.shrink"],
"size": ["((0.3-(v.particle_random_4*0.125))*v.quiver)*v.shrink", "((0.3-(v.particle_random_4*0.125))*v.quiver)*v.shrink"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 32,
"texture_height": 192,
"uv": [0, "math.round(v.particle_random_4*5)*32"],
"uv_size": [32, 32]
"texture_width": 8,
"texture_height": 8,
"uv": [0, 0],
"uv_size": [8, 8]
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 20,
"collision_radius": 0.2
"collision_radius": 0.1
},
"minecraft:particle_appearance_tinting": {
"color": {
@@ -38,7 +38,7 @@
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 600,
"spawn_rate": 400,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
@@ -18,13 +18,13 @@
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 2
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.4
},
"minecraft:emitter_shape_point": {
"offset": [0, -0.5, 0.25],
"offset": [0, 0, 0],
"direction": ["math.random(-1.55,1.55)*0.7", "math.random(-1.55,-0.55)", "math.random(-1.55,1.55)*0.7"]
},
"minecraft:particle_lifetime_expression": {
@@ -1,84 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:fairywind_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/generic"
}
},
"curves": {
"variable.debrissize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 0.89, 0.59, 0]
}
},
"events": {
"sparkle": {
"particle_effect": {
"effect": "cobblemon:fairywind_actorspark",
"type": "particle"
}
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 30,
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.4
},
"minecraft:emitter_shape_sphere": {
"offset": ["-((v.target_deltax*0.8)*(v.emitter_age/v.emitter_lifetime))", "((v.target_deltay*0.8)*(v.emitter_age/v.emitter_lifetime))", "-((v.target_deltaz*0.8)*(v.emitter_age/v.emitter_lifetime))"],
"radius": "0.1+(v.emitter_age*2)",
"surface_only": true,
"direction": ["(math.random(-0.4,0.4))/((v.emitter_age+0.25)*5)", "(math.random(-0.3,0.3))+((v.target_deltay/v.target_deltaz)*1.1)", "math.random(-1.15, -0.95)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.6,0.7)*1.2"
},
"minecraft:particle_lifetime_events": {
"timeline": {
"0.07": "sparkle"
}
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "4-(v.emitter_age*4)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 2, 0],
"linear_drag_coefficient": 3
},
"minecraft:particle_appearance_billboard": {
"size": ["0.15*v.debrissize", "0.15*v.debrissize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 64,
"texture_height": 8,
"flipbook": {
"base_UV": [56, 0],
"size_UV": [8, 8],
"step_UV": [-8, 0],
"frames_per_second": 12,
"max_frame": 8
}
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_tinting": {
"color": [1, 0.75686, 0.97647, 0.62745]
}
}
}
}
@@ -1,65 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:fairywind_actorspark",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_fairy"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.73, 1, 0.96, 0.87, 0.61, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_shape_sphere": {
"radius": 0.2,
"surface_only": true,
"direction": ["math.random(-0.4,0.4)", "(math.random(-0.2,0.2))+((v.target_deltay/v.target_deltaz)*1.1)", "math.random(-1.15, -0.95)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "0.5-(v.particle_random_4*0.1)"
},
"minecraft:particle_initial_speed": "math.clamp(v.target_deltaz*4,0,4)",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.125*v.scale)-(v.particle_random_4*0.075)", "(0.125*v.scale)-(v.particle_random_4*0.075)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 16,
"max_frame": 7
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.33": "#ffffffff",
"1.0": "#FFFF80E7"
}
}
}
}
}
}
@@ -1,68 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:fairywind_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/generic"
}
},
"curves": {
"variable.debrissize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 0.69, 0.35, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 200,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, "-0.4/math.clamp(q.entity_scale*1.1-0.1,1,9)"],
"radius": 0.1,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.6,0.7)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "math.random(1.5,2.75)*2.85",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 3, 0],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.2*v.debrissize", "0.2*v.debrissize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 64,
"texture_height": 8,
"flipbook": {
"base_UV": [56, 0],
"size_UV": [8, 8],
"step_UV": [-8, 0],
"frames_per_second": 12,
"max_frame": 8
}
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_tinting": {
"color": [1, 0.75686, 0.97647, 0.62745]
}
}
}
}
@@ -1,67 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:fairywind_targethit",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_fairy"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.73, 1, 0.96, 0.87, 0.61, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 20,
"max_particles": 8
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.7
},
"minecraft:emitter_shape_sphere": {
"radius": 0.8,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "0.5-(v.particle_random_4*0.1)"
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 2, 0],
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.125*v.scale)-(v.particle_random_4*0.075)", "(0.125*v.scale)-(v.particle_random_4*0.075)"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 16,
"max_frame": 7
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.33": "#ffffffff",
"1.0": "#FFFF80E7"
}
}
}
}
}
}
@@ -1,67 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:firefang_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/bite"
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "cobblemon:move.bite.target"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.25]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.55
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [0.9, 0.9],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 32,
"texture_height": 320,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [32, 32],
"step_UV": [0, 32],
"frames_per_second": 18,
"max_frame": 10
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#00570000",
"0.12": "#FFFF3A00",
"0.38": "#FFFF3A00",
"0.44": "#FFFFD600",
"0.63": "#FFFF7400",
"0.82": "#E0C30000",
"1.0": "#003E0C00"
}
}
}
}
}
}
@@ -1,76 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:firefang_targetburst",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/fire/cloudyfire_white"
}
},
"curves": {
"variable.fun": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 1, 0.96, 0.85, 0.6, -0.05]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 150,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_shape_point": {
"direction": ["math.random(-1.75,1.75)", "math.random(-1.15,0.85)", "math.random(-0.65,0.65)*1.15"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.65,0.95)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(math.random(2,5.25)*math.clamp(v.entity_height,1,1.5))*1.85",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*5", "4+(v.particle_random_2-0.5)*3", "(v.particle_random_3-0.5)*5"],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.5-(v.particle_random_4*0.15))*v.fun", "(0.5-(v.particle_random_4*0.15))*v.fun"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 160,
"texture_height": 16,
"flipbook": {
"base_UV": [16, 0],
"size_UV": [16, 16],
"step_UV": [16, 0],
"frames_per_second": 20,
"max_frame": 9
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 10,
"collision_radius": 0.01
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#ffffffff",
"0.2": "#FFFFE872",
"0.4": "#FFFFCC00",
"0.55": "#FFFF9400",
"0.75": "#FFFF4700",
"0.9": "#FFFF4700",
"1.0": "#FF531C0E"
}
}
}
}
}
}
@@ -1,67 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:firefang_targetspark",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/critical_hit"
}
},
"curves": {
"variable.bitespark": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.87, 1, 0.5, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 10
},
"minecraft:emitter_lifetime_looping": {
"active_time": 1
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, -0.25],
"radius": 0.025,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.35
},
"minecraft:particle_initial_speed": "math.random(1.75,4.55)*3",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -5, 0],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.1*v.bitespark", "0.1*v.bitespark"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 8,
"uv": [0, 0],
"uv_size": [7, 7]
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFF3A00",
"0.23": "#FFFFAD00",
"0.6": "#FFFF3A00",
"1.0": "#FF9D2300"
}
}
}
}
}
}
@@ -25,7 +25,7 @@
"active_time": 0.9
},
"minecraft:emitter_shape_point": {
"offset": ["v.target_deltax*(v.emitter_age/v.emitter_lifetime)", "v.target_deltay*(v.emitter_age/v.emitter_lifetime)+(v.burstarc*0.7)", "-v.target_deltaz*(v.emitter_age/v.emitter_lifetime)"],
"offset": ["-v.target_deltax*(v.emitter_age/v.emitter_lifetime)", "v.target_deltay*(v.emitter_age/v.emitter_lifetime)+(v.burstarc*0.7)", "-v.target_deltaz*(v.emitter_age/v.emitter_lifetime)"],
"direction": ["math.random(-0.45,0.45)", "(v.burstarc/math.clamp(v.target_deltaz*0.5,1,4))+math.random(-0.45,0.45)-(v.target_deltay/v.target_deltaz)", "math.random(-2.05,-0.55)"]
},
"minecraft:particle_lifetime_expression": {
@@ -28,8 +28,7 @@
"active_time": 1
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, 0],
"direction": ["(-v.target_deltax+((v.particle_random_1-0.5)*1.15))+(math.sin(v.emitter_age*360)*0.35)", "(v.target_deltay+((v.particle_random_2-0.5)*1.05))+(math.sin(v.emitter_age*540)*0.3)", "-v.target_deltaz"]
"direction": ["(-v.target_deltax+((v.particle_random_1-0.5)*1.05))+(math.sin(v.emitter_age*360)*0.25)", "(v.target_deltay+((v.particle_random_2-0.5)*0.95))+(math.sin(v.emitter_age*540)*0.2)", "-v.target_deltaz*1.05"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.65,1.0)*1.4"
@@ -37,9 +36,9 @@
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(v.target_deltaz*((v.particle_random_4+0.75)*1.25))*(math.clamp(v.target_deltaz,3,24)/2)",
"minecraft:particle_initial_speed": "(v.target_deltaz*math.random(0.65,2.05))*(math.clamp(v.target_deltaz,3,24)/2)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_3-0.5)*4", "3+(v.particle_random_4-0.5)*2", "(v.particle_random_2-0.5)*1"],
"linear_acceleration": ["(v.particle_random_1-0.5)*4", "3+(v.particle_random_2-0.5)*2", "(v.particle_random_3-0.5)*1"],
"linear_drag_coefficient": "math.clamp(v.target_deltaz,1,20)*(0.5+(math.clamp(v.target_deltaz,1,5)*0.05))"
},
"minecraft:particle_appearance_billboard": {
@@ -63,15 +62,15 @@
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "(v.particle_age / v.particle_lifetime) * (v.particle_random_4+0.75)",
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFB3F6FF",
"0.05": "#FFFFFFFF",
"0.15": "#FFFFE872",
"0.3": "#FFFFCC00",
"0.5": "#FFFF8700",
"0.0": "#ffffffff",
"0.2": "#FFFFE872",
"0.4": "#FFFFCC00",
"0.55": "#FFFF9400",
"0.75": "#FFFF4700",
"1.0": "#FFA31F00"
"0.9": "#FFFF4700",
"1.0": "#FF531C0E"
}
}
}
@@ -60,6 +60,7 @@
"minecraft:particle_motion_collision": {
"collision_radius": 0.1
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
@@ -57,6 +57,7 @@
"minecraft:particle_motion_collision": {
"collision_radius": 0.1
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
@@ -1,70 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:gust_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/generic"
}
},
"curves": {
"variable.debrissize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 0.89, 0.59, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 90,
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.2
},
"minecraft:emitter_shape_point": {
"offset": ["-((v.target_deltax*0.5)*(v.emitter_age/v.emitter_lifetime))", "((v.target_deltay*0.5)*(v.emitter_age/v.emitter_lifetime))", "-((v.target_deltaz*0.5)*(v.emitter_age/v.emitter_lifetime))"],
"direction": ["(math.random(-1.1,1.1))/((v.emitter_age+0.25)*5)", "(math.random(-0.8,0.8))+((v.target_deltay/v.target_deltaz)*1.1)", "math.random(-1.15, -0.95)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.6,0.7)*1.2"
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "8-(v.emitter_age*4)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 2, 0],
"linear_drag_coefficient": 3
},
"minecraft:particle_appearance_billboard": {
"size": ["0.2*v.debrissize", "0.2*v.debrissize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 64,
"texture_height": 8,
"flipbook": {
"base_UV": [56, 0],
"size_UV": [8, 8],
"step_UV": [-8, 0],
"frames_per_second": 12,
"max_frame": 8
}
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": [0.83529, 0.90196, 1, 0.62745]
}
}
}
}
@@ -1,69 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:gust_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/generic"
}
},
"curves": {
"variable.debrissize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 0.69, 0.35, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 200,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, "-0.4/math.clamp(q.entity_scale*1.1-0.1,1,9)"],
"radius": 0.1,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.6,0.7)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "math.random(2.5,3.25)*2.85",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, 3, 0],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.25*v.debrissize", "0.25*v.debrissize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 64,
"texture_height": 8,
"flipbook": {
"base_UV": [56, 0],
"size_UV": [8, 8],
"step_UV": [-8, 0],
"frames_per_second": 12,
"max_frame": 8
}
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": [0.83529, 0.90196, 1, 0.62745]
}
}
}
}
@@ -1,52 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:gust_targethit",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/gust"
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, "-0.4/math.clamp(q.entity_scale*1.1-0.1,1,9)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.48
},
"minecraft:particle_appearance_billboard": {
"size": [1, 1],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 384,
"texture_height": 32,
"flipbook": {
"base_UV": [160, 0],
"size_UV": [32, 32],
"step_UV": [32, 0],
"frames_per_second": 24,
"max_frame": 7,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#B0EFFEFF",
"1.0": "#B0AFD0EF"
}
}
}
}
}
}
@@ -1,74 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:horndrill_spark",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/balls/afterspark"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 0]
},
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 0.43, 0.12, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 60,
"max_particles": 400
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.3
},
"minecraft:emitter_shape_sphere": {
"radius": 0.25,
"surface_only": true,
"direction": ["math.random(-3,3)", "math.random(-2,5)", "math.random(-1,1)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.7
},
"minecraft:particle_initial_speed": "math.random(5,8)*3",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -8, 0],
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.12*v.s", "0.12*v.s"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 20,
"texture_height": 5,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [5, 5],
"step_UV": [5, 0],
"frames_per_second": 8,
"max_frame": 4
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.32": "#ffffffff",
"0.73": "#FFFFF087",
"0.93": "#FFFFC986"
}
}
}
}
}
}
@@ -1,86 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:horndrill_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/drill"
}
},
"curves": {
"variable.xt": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [-3.5, -3.49, -1.74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
},
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0, 0, 0.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}
},
"events": {
"sparks": {
"particle_effect": {
"effect": "cobblemon:horndrill_spark",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"timeline": {
"0.15": "sparks"
}
},
"minecraft:emitter_shape_point": {
"offset": [0, 0.2, "math.max(-0.5 * q.entity_radius, -1)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 1.7
},
"minecraft:particle_motion_parametric": {
"relative_position": [0, 0, "-0.85+v.xt"],
"direction": [0, 0, 90]
},
"minecraft:particle_appearance_billboard": {
"size": ["1*v.s", "1*v.s"],
"facing_camera_mode": "lookat_direction",
"uv": {
"texture_width": 192,
"texture_height": 32,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [32, 32],
"step_UV": [32, 0],
"frames_per_second": 28,
"max_frame": 6,
"loop": true
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.56": "#FFFFFFFF",
"0.63": "#FFFFF96E",
"0.69": "#ffffffff",
"0.76": "#FFFFF96E",
"0.82": "#ffffffff",
"0.98": "#FFDC5D3D"
}
}
}
}
}
}
@@ -1,65 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:hydropump_actor",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/water/giantsplash"
}
},
"curves": {
"variable.sx": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.55, 0.9, 1, 1, 1, 1, 1, 1]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 30,
"max_particles": 300
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.75
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.45
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["((-v.target_deltax+((v.particle_random_1-0.5)*0.5))*(v.particle_age/v.particle_lifetime))*1", "((v.target_deltay+((v.particle_random_2-0.5)*0.5))*(v.particle_age/v.particle_lifetime))*1.3", "-0.2+((-v.target_deltaz*(v.particle_age/v.particle_lifetime))*(1.2+(v.particle_random_3*0.2)))"]
},
"minecraft:particle_appearance_billboard": {
"size": ["0.55*v.sx", "0.55*v.sx"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 12,
"texture_height": 96,
"flipbook": {
"base_UV": [0, "0+math.round(v.particle_random_4*2)*12"],
"size_UV": [12, 12],
"step_UV": [0, 12],
"frames_per_second": 16,
"max_frame": 2,
"loop": true
}
}
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FF5FB6FF",
"1.0": "#ffffffff"
}
}
}
}
}
}
@@ -1,53 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:hydropump_actorpulse",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/ring/giantring_white"
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.7
},
"minecraft:emitter_shape_point": {
"offset": ["v.target_deltax*0.1", "v.target_deltay*0.1", -0.2]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.6
},
"minecraft:particle_initial_speed": 0.01,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [1.8, 1.8],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 448,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [64, 64],
"step_UV": [64, 0],
"frames_per_second": 14,
"max_frame": 7
}
}
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FF008AFF",
"1.0": "#FFACFCFF"
}
}
}
}
}
}
@@ -1,71 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:hydropump_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/water/giantsplash"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.85, 1, 1, 1, 1, 1, 1, 1, 0.95, 0.75]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 90,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_shape_point": {
"direction": ["(v.particle_random_1-0.5)*2", "(v.particle_random_2-0.5)*2", "-(v.particle_random_3-0.1)*0.75"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.5
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "((v.particle_random_4*0.25)+1.75)*6",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.55*v.s", "0.55*v.s"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 12,
"texture_height": 96,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [12, 12],
"step_UV": [0, 12],
"frames_per_second": 20,
"max_frame": 8
}
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.65": "#ffffffff",
"1.0": "#00FFFFFF"
}
}
}
}
}
}
@@ -1,72 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:hydropump_targetburst",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/water/giantsplash"
}
},
"curves": {
"variable.sx": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.85, 1, 1, 1, 1, 1, 1, 1, 1, 0.95, 0.55]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 360,
"max_particles": 1000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.1
},
"minecraft:emitter_shape_point": {
"direction": ["(v.particle_random_1-0.5)*2", "(v.particle_random_2-0.5)*2", "-(v.particle_random_3-0.4)*0.95"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.5
},
"minecraft:particle_initial_spin": {
"rotation": "math.random_integer(0,3)*90"
},
"minecraft:particle_initial_speed": "((v.particle_random_4*0.95)+1.05)*12",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4.5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.55*v.sx", "0.55*v.sx"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 12,
"texture_height": 96,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [12, 12],
"step_UV": [0, 12],
"frames_per_second": 20,
"max_frame": 8
}
}
},
"minecraft:particle_motion_collision": {
"coefficient_of_restitution": 0.7,
"collision_radius": 0.01
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFFFFFFF",
"0.65": "#ffffffff",
"1.0": "#00FFFFFF"
}
}
}
}
}
}
@@ -40,7 +40,7 @@
"0.25+(v.particle_age*0.5)",
"0.25+(v.particle_age*0.5)"
],
"facing_camera_mode": "emitter_transform_xy",
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 117,
"texture_height": 13,
@@ -45,7 +45,7 @@
"0.75*v.spiralsize",
"0.75*v.spiralsize"
],
"facing_camera_mode": "emitter_transform_xy",
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 192,
"texture_height": 24,
@@ -1,64 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:icefang_target",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/bite"
}
},
"events": {
"event_sound": {
"sound_effect": {
"event_name": "cobblemon:move.bite.target"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "event_sound"
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.25]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.55
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [0.9, 0.9],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 32,
"texture_height": 320,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [32, 32],
"step_UV": [0, 32],
"frames_per_second": 18,
"max_frame": 10
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#000045A3",
"0.12": "#FFADDCFF",
"0.54": "#FF269CFF",
"1.0": "#0000266F"
}
}
}
}
}
}
@@ -1,58 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:icefang_targetburst",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/ice/iceshard"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 20
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_shape_point": {
"direction": ["(v.particle_random_1-0.5)", "(v.particle_random_2-0.25)", "(v.particle_random_3-0.5)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.4, 0.65)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.random(0,45)*8"
},
"minecraft:particle_initial_speed": "math.random(9.5,13.5)",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -8, 0],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.325-(v.particle_random_4*0.2)) * variable.scale", "(0.325-(v.particle_random_4*0.2)) * variable.scale"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 42,
"texture_height": 14,
"uv": [28, 0],
"uv_size": [14, 14]
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.5,
"coefficient_of_restitution": 1.5,
"collision_radius": 0.05
},
"minecraft:particle_appearance_lighting": {}
}
}
}
@@ -1,66 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:icefang_targetspark",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/vanilla/critical_hit"
}
},
"curves": {
"variable.bitespark": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.87, 1, 0.5, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 10
},
"minecraft:emitter_lifetime_looping": {
"active_time": 1
},
"minecraft:emitter_shape_sphere": {
"offset": [0, 0, -0.25],
"radius": 0.025,
"surface_only": true,
"direction": "outwards"
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.35
},
"minecraft:particle_initial_speed": "math.random(1.75,4.55)*3",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": [0, -5, 0],
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.1*v.bitespark", "0.1*v.bitespark"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 8,
"uv": [0, 0],
"uv_size": [7, 7]
}
},
"minecraft:particle_motion_collision": {
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FF269CFF",
"0.27": "#FFADDCFF",
"1.0": "#FF008BFF"
}
}
}
}
}
}
@@ -58,6 +58,7 @@
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
@@ -59,6 +59,7 @@
"collision_radius": 0.01,
"expire_on_contact": true
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
@@ -63,6 +63,7 @@
"minecraft:particle_motion_collision": {
"collision_radius": 0.1
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
@@ -1,68 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafage_actor",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/grass/razorleaf"
}
},
"curves": {
"variable.leafsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 0.9, 0.6, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 20,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.5
},
"minecraft:emitter_shape_point": {
"offset": ["-v.target_deltax * (v.emitter_age / v.emitter_lifetime)", "v.target_deltay * (v.emitter_age / v.emitter_lifetime)", "-v.target_deltaz * (v.emitter_age / v.emitter_lifetime)"],
"direction": ["math.sin(v.emitter_age*360*7.5)*(0.2+v.emitter_age*2)", "math.cos(v.emitter_age*360*7.5)*(0.2+v.emitter_age*2)", "(v.particle_random_3-1.5)*(1+v.emitter_age)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.6
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(5+(v.particle_random_4*3))*1",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.2*v.leafsize", "0.2*v.leafsize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 11,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.4,
"coefficient_of_restitution": 0.4,
"collision_radius": 0.01
},
"minecraft:particle_appearance_lighting": {}
}
}
}
@@ -1,68 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafage_actorexcess",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/grass/razorleaf"
}
},
"curves": {
"variable.leafsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 1, 1, 0.9, 0.6, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 20,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.4
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, -0.1],
"direction": ["-math.sin(v.emitter_age*360*7.5)", "-math.cos(v.emitter_age*360*7.5)", "(v.particle_random_3-1)*1"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.6
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(3+(v.particle_random_4*4))*1.2",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.2*v.leafsize", "0.2*v.leafsize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 11,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.4,
"coefficient_of_restitution": 0.4,
"collision_radius": 0.01
},
"minecraft:particle_appearance_lighting": {}
}
}
}
@@ -1,66 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafage_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/hit"
}
},
"events": {
"leaf": {
"particle_effect": {
"effect": "cobblemon:leafage_targetexcess",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": "leaf"
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.2
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": [0.9, 0.9],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 32,
"texture_height": 160,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [32, 32],
"step_UV": [0, 32],
"frames_per_second": 20,
"max_frame": 5,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#FFCAFF60",
"1.0": "#FF227700"
}
}
},
"minecraft:particle_appearance_lighting": {}
}
}
}
@@ -1,56 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafage_targetexcess",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/impact/impact_grass"
}
},
"curves": {
"variable.scale": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 0]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 8
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": "math.random(0.4, 0.6)"
},
"minecraft:particle_initial_spin": {
"rotation": "math.random(0,360)"
},
"minecraft:particle_initial_speed": "math.random(8,13)",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 5
},
"minecraft:particle_appearance_billboard": {
"size": ["0.25 * variable.scale", "0.25 * variable.scale"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 56,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 20,
"max_frame": 7,
"stretch_to_lifetime": true
}
}
},
"minecraft:particle_appearance_lighting": {}
}
}
}
@@ -1,55 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafstorm_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/grass/leaf"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.49, 0.81, 0.93, 0.97, 0.99, 1, 1, 1, 1, 1, 0.98, 0.84, 0.49, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 10,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.7
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.85
},
"minecraft:particle_motion_parametric": {
"relative_position": ["(-math.sin((v.particle_age*360)+(v.emitter_age*1523))*0.65)-(v.target_deltax*(v.particle_age/v.particle_lifetime))*1.3", "(-math.cos((v.particle_age*360)+(v.emitter_age*1523))*0.65)+(v.target_deltay*(v.particle_age/v.particle_lifetime))*1.3", "(-v.target_deltaz*(v.particle_age/v.particle_lifetime))*1.3"]
},
"minecraft:particle_appearance_billboard": {
"size": ["(0.7-(v.particle_random_2*0.1))*v.s", "(0.7-(v.particle_random_2*0.1))*v.s"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 16,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [16, 16],
"step_UV": [0, 16],
"frames_per_second": 16,
"max_frame": 4,
"loop": true
}
}
}
}
}
}
@@ -1,80 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafstorm_actorexcess1",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/grass/razorleaf"
}
},
"curves": {
"variable.leafsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.52, 0.8, 0.95, 1, 1, 1, 1, 0.9, 0.6, 0]
}
},
"events": {
"event": {
"particle_effect": {
"effect": "cobblemon:leafstorm_actorwind",
"type": "emitter"
}
},
"excess2": {
"particle_effect": {
"effect": "cobblemon:leafstorm_actorexcess2",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 20,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": ["event", "excess2"]
},
"minecraft:emitter_shape_point": {
"direction": ["math.sin(v.emitter_age*1953)", "math.cos(v.emitter_age*1953)", "(v.particle_random_3-0.5)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.7
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(5+(v.particle_random_4*3))*2",
"minecraft:particle_motion_dynamic": {
"linear_drag_coefficient": 4
},
"minecraft:particle_appearance_billboard": {
"size": ["0.25*v.leafsize", "0.25*v.leafsize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 11,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.4,
"coefficient_of_restitution": 0.4,
"collision_radius": 0.01
}
}
}
}
@@ -1,68 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafstorm_actorexcess2",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/grass/razorleaf"
}
},
"curves": {
"variable.leafsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.66, 0.92, 1, 1, 1, 1, 1, 0.98, 0.93, 0.84, 0.69, 0.43, 0]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;v.target_deltay=0;v.target_deltax=0;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 20,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.9
},
"minecraft:emitter_shape_point": {
"offset": ["-math.sin(v.emitter_age*1953)*1.4", "-math.cos(v.emitter_age*1953)*1.4", 0],
"direction": ["-v.target_deltax", "v.target_deltay", "-v.target_deltaz"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 1
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "v.target_deltaz*2",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_1-0.5)*5", "(v.particle_random_2-0.5)*5", "(v.particle_random_3-0.5)*2"],
"linear_drag_coefficient": "math.clamp(v.target_deltaz*0.2,0,1.2)"
},
"minecraft:particle_appearance_billboard": {
"size": ["0.3*v.leafsize", "0.3*v.leafsize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 11,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.4,
"coefficient_of_restitution": 0.4,
"collision_radius": 0.01
}
}
}
}
@@ -1,74 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafstorm_actorwind",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/swirlingwind"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.49, 0.81, 0.93, 0.97, 0.99, 1, 1, 1, 1, 1, 1]
},
"variable.t": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0, 0, 0, 0.02, 0.07, 0.13, 0.19, 0.25, 0.32, 0.38, 0.44, 0.5, 0.56, 0.63, 0.69, 0.75, 0.82, 0.88, 0.94, 1, 1.06, 1.12, 1.18, 1.24]
}
},
"components": {
"minecraft:emitter_initialization": {
"creation_expression": "v.target_deltaz=5;"
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 8,
"max_particles": 100
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.8
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.6
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.emitter_age*8)*90"
},
"minecraft:particle_motion_parametric": {
"relative_position": ["-v.target_deltax*v.t", "v.target_deltay*v.t", "-v.target_deltaz*v.t"]
},
"minecraft:particle_appearance_billboard": {
"size": ["(2-(v.particle_random_2*0.3))*v.s", "(2-(v.particle_random_2*0.3))*v.s"],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 864,
"texture_height": 32,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [32, 32],
"step_UV": [32, 0],
"frames_per_second": 30,
"max_frame": 27
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#0028AB00",
"0.15": "#D069FF25",
"0.82": "#D02BCA00",
"1.0": "#00249900"
}
}
}
}
}
}
@@ -1,64 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:leafstorm_target",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particles/generic/grass/razorleaf"
}
},
"curves": {
"variable.leafsize": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.52, 0.8, 0.95, 1, 1, 0.9, 0.6, 0]
}
},
"components": {
"minecraft:emitter_rate_steady": {
"spawn_rate": 60,
"max_particles": 10000
},
"minecraft:emitter_lifetime_once": {
"active_time": 0.6
},
"minecraft:emitter_shape_point": {
"direction": ["(v.particle_random_1-0.5)*2", "(v.particle_random_2-0.5)*2", "(v.particle_random_3-0.5)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 0.6
},
"minecraft:particle_initial_spin": {
"rotation": "math.round(v.particle_random_4*3)*90"
},
"minecraft:particle_initial_speed": "(2+(v.particle_random_4*4))*2.5",
"minecraft:particle_motion_dynamic": {
"linear_acceleration": ["(v.particle_random_4-0.5)*12", "(v.particle_random_3-0.5)*12", "(v.particle_random_1-0.5)*12"],
"linear_drag_coefficient": 3
},
"minecraft:particle_appearance_billboard": {
"size": ["0.25*v.leafsize", "0.25*v.leafsize"],
"facing_camera_mode": "rotate_xyz",
"uv": {
"texture_width": 8,
"texture_height": 64,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [8, 8],
"step_UV": [0, 8],
"frames_per_second": 11,
"max_frame": 7,
"loop": true
}
}
},
"minecraft:particle_motion_collision": {
"collision_drag": 0.4,
"coefficient_of_restitution": 0.4,
"collision_radius": 0.01
}
}
}
}
@@ -1,88 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:lightscreen_actor",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/screen_color"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [0, 0.97, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99, 0.97, 0.93]
}
},
"events": {
"border_1": {
"particle_effect": {
"effect": "cobblemon:lightscreen_actorborder1",
"type": "emitter"
}
},
"border_2": {
"particle_effect": {
"effect": "cobblemon:lightscreen_actorborder2",
"type": "emitter"
}
},
"side_1": {
"particle_effect": {
"effect": "cobblemon:lightscreen_actorside1",
"type": "emitter"
}
},
"side_2": {
"particle_effect": {
"effect": "cobblemon:lightscreen_actorside2",
"type": "emitter"
}
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_lifetime_events": {
"creation_event": ["border_1", "border_2", "side_1", "side_2"]
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, "-math.clamp(q.entity_width*0.5,0.5,1)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 1.1
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["0.9375*v.s", "1.25*v.s"],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 15,
"texture_height": 20,
"uv": [0, 0],
"uv_size": [15, 20]
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#00F7B9E1",
"0.06": "#FFFFC9EA",
"0.17": "#A5FF8AD5",
"0.54": "#A5F58AFF",
"0.8": "#8F7DC7FF",
"1.0": "#000078FF"
}
}
}
}
}
}
@@ -1,64 +0,0 @@
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "cobblemon:lightscreen_actorborder1",
"basic_render_parameters": {
"material": "particles_blend",
"texture": "textures/particles/generic/screen"
}
},
"curves": {
"variable.s": {
"type": "linear",
"input": "v.particle_age",
"horizontal_range": "v.particle_lifetime",
"nodes": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99, 0.97, 0.93]
}
},
"components": {
"minecraft:emitter_rate_instant": {
"num_particles": 1
},
"minecraft:emitter_lifetime_once": {
"active_time": 1
},
"minecraft:emitter_shape_point": {
"offset": [0, 0, "-0.02-math.clamp(q.entity_width*0.5,0.5,1)"]
},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 1.1
},
"minecraft:particle_initial_speed": 0,
"minecraft:particle_motion_dynamic": {},
"minecraft:particle_appearance_billboard": {
"size": ["0.9375*v.s", "1.25*v.s"],
"facing_camera_mode": "emitter_transform_xy",
"uv": {
"texture_width": 180,
"texture_height": 20,
"flipbook": {
"base_UV": [0, 0],
"size_UV": [15, 20],
"step_UV": [15, 0],
"frames_per_second": 16,
"max_frame": 12
}
}
},
"minecraft:particle_appearance_tinting": {
"color": {
"interpolant": "v.particle_age / v.particle_lifetime",
"gradient": {
"0.0": "#00FFFFFF",
"0.05": "#00FFC9EA",
"0.13": "#E0FFDCF1",
"0.43": "#E0FF92FD",
"0.8": "#DF77D2FF",
"1.0": "#000078FF"
}
}
}
}
}
}
Loaded 100 of 1196 files, more files were not shown because too many files have changed in this diff. Show more