--================================================================================================-- --===== CLASSES ================================================================================-- --================================================================================================-- ---A Minecraft particle identifier. --- ---Only the default Minecraft particles are auto-completed. ---You can use any particle from any mod, even if it does not auto-complete. --- ---Note: Modded particles that require an `extra` will not work and will instead error. ---@alias ParticleID ---| "minecraft:ambient_entity_effect" ---| "minecraft:angry_villager" ---| "minecraft:ash" ---| "minecraft:barrier" ---| "minecraft:block" ---| "minecraft:bubble" ---| "minecraft:bubble_column_up" ---| "minecraft:bubble_pop" ---| "minecraft:campfire_cosy_smoke" ---| "minecraft:campfire_signal_smoke" ---| "minecraft:cloud" ---| "minecraft:composter" ---| "minecraft:crimson_spore" ---| "minecraft:crit" ---| "minecraft:current_down" ---| "minecraft:damage_indicator" ---| "minecraft:dolphin" ---| "minecraft:dragon_breath" ---| "minecraft:dripping_dripstone_lava" ---| "minecraft:dripping_dripstone_water" ---| "minecraft:dripping_honey" ---| "minecraft:dripping_lava" ---| "minecraft:dripping_obsidian_tear" ---| "minecraft:dripping_water" ---| "minecraft:dust" ---| "minecraft:dust_color_transition" ---| "minecraft:effect" ---| "minecraft:elder_guardian" ---| "minecraft:electric_spark" ---| "minecraft:enchant" ---| "minecraft:enchanted_hit" ---| "minecraft:end_rod" ---| "minecraft:entity_effect" ---| "minecraft:explosion" ---| "minecraft:explosion_emitter" ---| "minecraft:falling_dripstone_lava" ---| "minecraft:falling_dripstone_water" ---| "minecraft:falling_dust" ---| "minecraft:falling_honey" ---| "minecraft:falling_lava" ---| "minecraft:falling_nectar" ---| "minecraft:falling_obsidian_tear" ---| "minecraft:falling_spore_blossom" ---| "minecraft:falling_water" ---| "minecraft:firework" ---| "minecraft:fishing" ---| "minecraft:flame" ---| "minecraft:flash" ---| "minecraft:glow" ---| "minecraft:glow_squid_ink" ---| "minecraft:happy_villager" ---| "minecraft:heart" ---| "minecraft:instant_effect" ---| "minecraft:item" ---| "minecraft:item_slime" ---| "minecraft:item_snowball" ---| "minecraft:landing_honey" ---| "minecraft:landing_lava" ---| "minecraft:landing_obsidian_tear" ---| "minecraft:large_smoke" ---| "minecraft:lava" ---| "minecraft:light" ---| "minecraft:mycelium" ---| "minecraft:nautilus" ---| "minecraft:note" ---| "minecraft:poof" ---| "minecraft:portal" ---| "minecraft:rain" ---| "minecraft:reverse_portal" ---| "minecraft:scrape" ---| "minecraft:smoke" ---| "minecraft:sneeze" ---| "minecraft:snowflake" ---| "minecraft:soul" ---| "minecraft:soul_fire_flame" ---| "minecraft:spit" ---| "minecraft:spore_blossom_air" ---| "minecraft:splash" ---| "minecraft:squid_ink" ---| "minecraft:sweep_attack" ---| "minecraft:totem_of_undying" ---| "minecraft:underwater" ---| "minecraft:vibration" ---| "minecraft:warped_spore" ---| "minecraft:wax_off" ---| "minecraft:wax_on" ---| "minecraft:white_ash" ---| "minecraft:witch" --================================================================================================-- --===== FUNCTIONS ==============================================================================-- --================================================================================================-- ---Contains a single `function` for creating a particle. particle = {} ---Adds a particle to the world. --- ---Only the default Minecraft particles are auto-completed. ---You can use modded particles as long as they only take a position and velocity to function. --- ---Certain particles change how the parameters of this function work. ---If a particle is not on this list, assume it functions normally: ---> **minecraft:ambient_entity_effect** / **minecraft:entity_effect** ---> ---> The last three values of `pos_vel` set the velocity *and* color of the particle. ---> Velocity is converted into a direction. ---> Any horizontal velocity is applied in all horizontal directions randomly. ---> Each color is a number `0..1` or `1..255`. If the color is above 1, then the color is ---`(255 - num) / 255` If the color is above 255, set color to `(-num % 255) / 255` then calculate ---as if color was above 1. ---> (2 -> 253, 255 -> 0). ---> It is possible to mix different ranges of colors. A color of `1,0,1` is the same as `1,255,1` ---but the second color will move up instead of spreading out because of the high Y velocity. ---> *** --- ---> **minecraft:angry_villager** / **minecraft:heart** ---> ---> Velocity is completely ignored and always moves up about half a block. ---> *** --- ---> **minecraft:ash** ---> ---> Velocity is completely ignored and always falls in a random direction. ---> *** --- ---> **minecraft:barrier** / **minecraft:flash** / **minecraft:underwater** ---> ---> Velocity is completely ignored and never moves. ---> *** --- ---> **minecraft:block** / **minecraft:falling_dust** ---> ---> The `extra` is a `string` set to the blockstate string of the selected block. ---> *** --- ---> **minecraft:bubble** / **minecraft:bubble_column_up** / **minecraft:current_down** ---> ---> Dies after 1 tick if out of water at any point ---> *** --- ---> **minecraft:composter** / **minecraft:dolphin** / **minecraft:happy_villager** / ---**minecraft:mycelium** ---> ---> Velocity is capped at a very slow speed per axis. ---> *** --- ---> **minecraft:crimson_spore** / **minecraft:item_slime** / **minecraft:item_snowball** / ---**minecraft:lava** / **minecraft:rain** / **minecraft:warped_spore** ---> ---> Velocity is completely ignored and flies in a random direction, preferring any upward ---direction. ---> *** --- ---> **minecraft:dripping_honey** / **minecraft:dripping_lava** / ---**minecraft:dripping_obsidian_tear** / **minecraft:dripping_water** / ---**minecraft:dripping_dripstone_lava** / **minecraft:dripping_dripstone_water** ---> ---> Velocity is completely ignored and always sticks for a while before falling until hitting ---something solid. ---> *** --- ---> **minecraft:dust** ---> ---> Velocity is capped at a very slow speed per axis. ---> The `extra` is a `Vector4` set to the color and size of the particle. ---> `x`, `y`, and `z` are numbers `0..1` for red, green, and blue respectively. ---> `w` is a number `0..10` for the size of the particle. ---> *** --- ---> **minecraft:dust_color_transition** ---> ---> The last three values of `pos_vel` set the end color of the particle. ---> Each color is a number `0..1`. ---> The `extra` is a `Vector4` set to the start color and transition speed of the particle. ---> `x`, `y`, and `z` are numbers `0..1` for red, green, and blue respectively. ---> `w` is a number `1..` for the amount of ticks it takes to transition from the start color to ---the end color. ---> *** --- ---> **minecraft:elder_guardian** ---> ---> Ignores position and velocity, always circles the viewer's camera from top to bottom. ---> *** --- ---> **minecraft:enchant** / **minecraft:nautilus** ---> ---> The first three values of `pos_vel` set the end position of the particle. ---> The end postion Y is always decreased by ~1.125. ---> The last three values of `pos_vel` set the start position offset of the particle. ---> The offset is *not* moved by the decrease of the end position Y. ---> *** --- ---> **minecraft:explosion** / **minecraft:sweep_attack** ---> ---> Velocity is completely ignored. ---> The `w` of `pos_vel` is a number that sets the size of the particle. ---> 0 is the default size of the particle, negative numbers increase the size, postitive numbers ---> decrease it. If the number is >2, the explosion particle will be inverted and will increase in ---> size as the number gets bigger. ---> *** --- ---> **minecraft:explosion_emitter** ---> ---> Velocity is completely ignored. ---> Spawns many "minecraft:explosion" particles around it. ---> *** --- ---> **minecraft:falling_honey** / **minecraft:falling_lava** / **minecraft:falling_nectar** / ---**minecraft:falling_obsidian_tear** / **minecraft:falling_water** / **minecraft:landing_honey** / ---**minecraft:landing_lava** / **minecraft:landing_obsidian_tear** / ---**minecraft:falling_dripstone_lava** / **minecraft:falling_dripstone_water** ---> ---> Velocity is completely ignored and falls until hitting something solid. ---> *** --- ---> **minecraft:instant_effect** / **minecraft:witch** ---> ---> Velocity is converted into a direction. ---> Any horizontal velocity is applied in all horizontal directions randomly. ---> *** --- ---> **minecraft:item** ---> ---> The `extra` is a `string` set to the item and NBT string of the selected item. ---> *** --- ---> **minecraft:note** ---> ---> The `w` of `pos_vel` is a number `0..1` that sets the hue of the note, starting at lime and ---shifting backwards. ---> Velocity is completely ignored and the note always moves up about half a block. ---> *** --- ---> **minecraft:portal** ---> ---> The first three values of `pos_vel` set the end position of the particle. ---> The last three values of `pos_vel` set the start position offset of the particle. ---> The offset Y is always increased by 1. ---> *** --- ---> **minecraft:vibration** *1.17 only!* ---> ---> The last three values of `pos_vel` set the end position of the particle. ---> The `extra` is a `Vector4` set to the start position and speed of the particle. ---> `w` is a number `1..` for the amount of ticks it takes to reach the end positon. ---> *** --- ---> **minecraft:white_ash** ---> ---> Velocity is completely ignored and flies in a random direction, preferring any negative ---direction. --->*** --- ---> **PARTICLES WITH AN UNKNOWN EFFECT** ---> These particles are placed here since some 1.17 particle have yet to be tested. ---> *If you have information on exactly how these particles work, let me know.* ---> ---> minecraft:falling_spore_blossom (Possibly acts like a slower minecraft:falling_honey?) ---> minecraft:glow (Possibly acts like minecraft:barrier?) ---> minecraft:light (Possibly acts like minecraft:composter?) ---> minecraft:scrape (Possibly acts like minecraft:composter?) ---> minecraft:snowflake ---> minecraft:spore_blossom_air ---> minecraft:wax_off (Possibly acts like minecraft:composter?) ---> minecraft:wax_on (Possibly acts like minecraft:composter?) ---@param name ParticleID ---@param pos_vel Vector6 ---@param extra1? Vector3 | Vector4 | string ---@param extra2? Vector3 | Vector4 function particle.addParticle(name, pos_vel, extra1, extra2) end