├── .gitattributes ├── .gitignore ├── LICENSE ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src └── main ├── java └── com │ └── chailotl │ └── particular │ ├── ConfigModel.java │ ├── Main.java │ ├── Particles.java │ ├── compat │ ├── RegionsUnexplored.java │ ├── Traverse.java │ └── WilderWild.java │ ├── mixin │ ├── AccessorBillboardParticle.java │ ├── AccessorBiome.java │ ├── AccessorBlockLeakParticle.java │ ├── AccessorChestBlockEntity.java │ ├── AccessorEnderChestBlockEntity.java │ ├── AccessorParticle.java │ ├── InjectBarrelBlock.java │ ├── InjectBlock.java │ ├── InjectBlockLeakParticle.java │ ├── InjectBubbleColumnUpParticle.java │ ├── InjectCakeBlock.java │ ├── InjectChestBlock.java │ ├── InjectChestBlockEntity.java │ ├── InjectContinuousFalling.java │ ├── InjectEnderChestBlock.java │ ├── InjectEnderChestBlockEntity.java │ ├── InjectEntity.java │ ├── InjectFlowableFluid.java │ ├── InjectLeavesBlock.java │ ├── InjectWaterBubbleParticle.java │ ├── InjectWaterFluid.java │ ├── InjectWorldRenderer.java │ └── InvokerLivingEntity.java │ └── particles │ ├── CascadeParticle.java │ ├── CaveDustParticle.java │ ├── EnderBubbleParticle.java │ ├── FireflyParticle.java │ ├── WaterRippleParticle.java │ ├── WaterfallSprayParticle.java │ ├── leaves │ ├── BigLeafParticle.java │ ├── ConiferLeafParticle.java │ ├── LeafParticle.java │ └── SpinningLeafParticle.java │ └── splashes │ ├── WaterSplashEmitterParticle.java │ ├── WaterSplashFoamParticle.java │ ├── WaterSplashParticle.java │ └── WaterSplashRingParticle.java └── resources ├── assets └── particular │ ├── icon.png │ ├── lang │ ├── en_ca.json │ ├── en_us.json │ ├── es_mx.json │ ├── fr_ca.json │ ├── fr_fr.json │ ├── ru_ru.json │ └── zh_cn.json │ ├── particles │ ├── acacia_leaf.json │ ├── azalea_leaf.json │ ├── bamboo_leaf.json │ ├── birch_leaf.json │ ├── brimwood_leaf.json │ ├── cascade.json │ ├── cave_dust.json │ ├── dark_oak_leaf.json │ ├── ender_bubble.json │ ├── ender_bubble_pop.json │ ├── eucalyptus_leaf.json │ ├── firefly.json │ ├── golden_larch_leaf.json │ ├── jungle_leaf.json │ ├── kapok_leaf.json │ ├── larch_leaf.json │ ├── magnolia_leaf.json │ ├── mangrove_leaf.json │ ├── maple_leaf.json │ ├── oak_leaf.json │ ├── redwood_leaf.json │ ├── ru_baobab_leaf.json │ ├── ru_cypress_leaf.json │ ├── ru_palm_leaf.json │ ├── socotra_leaf.json │ ├── spruce_leaf.json │ ├── water_ripple.json │ ├── water_splash.json │ ├── water_splash_foam.json │ ├── water_splash_ring.json │ ├── waterfall_spray.json │ ├── white_oak_leaf.json │ ├── white_spruce_leaf.json │ ├── willow_leaf.json │ ├── ww_baobab_leaf.json │ ├── ww_cypress_leaf.json │ └── ww_palm_leaf.json │ └── textures │ └── particle │ ├── acacia_leaf_1.png │ ├── acacia_leaf_2.png │ ├── azalea_leaf_1.png │ ├── azalea_leaf_2.png │ ├── azalea_leaf_3.png │ ├── azalea_leaf_4.png │ ├── azalea_leaf_5.png │ ├── azalea_leaf_6.png │ ├── bamboo_leaf_1.png │ ├── bamboo_leaf_2.png │ ├── bamboo_leaf_3.png │ ├── bamboo_leaf_4.png │ ├── birch_leaf_1.png │ ├── birch_leaf_2.png │ ├── birch_leaf_3.png │ ├── birch_leaf_4.png │ ├── birch_leaf_5.png │ ├── birch_leaf_6.png │ ├── brimwood_leaf_1.png │ ├── brimwood_leaf_2.png │ ├── brimwood_leaf_3.png │ ├── brimwood_leaf_4.png │ ├── brimwood_leaf_5.png │ ├── brimwood_leaf_6.png │ ├── cascade_0.png │ ├── cascade_1.png │ ├── cascade_10.png │ ├── cascade_11.png │ ├── cascade_2.png │ ├── cascade_3.png │ ├── cascade_4.png │ ├── cascade_5.png │ ├── cascade_6.png │ ├── cascade_7.png │ ├── cascade_8.png │ ├── cascade_9.png │ ├── ender_bubble.png │ ├── ender_bubble_pop_0.png │ ├── ender_bubble_pop_1.png │ ├── ender_bubble_pop_2.png │ ├── ender_bubble_pop_3.png │ ├── ender_bubble_pop_4.png │ ├── eucalyptus_leaf_1.png │ ├── eucalyptus_leaf_2.png │ ├── eucalyptus_leaf_3.png │ ├── eucalyptus_leaf_4.png │ ├── eucalyptus_leaf_5.png │ ├── eucalyptus_leaf_6.png │ ├── firefly.png │ ├── golden_larch_leaf_1.png │ ├── golden_larch_leaf_2.png │ ├── golden_larch_leaf_3.png │ ├── jungle_leaf_1.png │ ├── jungle_leaf_2.png │ ├── jungle_leaf_3.png │ ├── kapok_leaf_1.png │ ├── kapok_leaf_2.png │ ├── kapok_leaf_3.png │ ├── kapok_leaf_4.png │ ├── larch_leaf_1.png │ ├── larch_leaf_2.png │ ├── larch_leaf_3.png │ ├── magnolia_leaf_1.png │ ├── magnolia_leaf_2.png │ ├── magnolia_leaf_3.png │ ├── magnolia_leaf_4.png │ ├── magnolia_leaf_5.png │ ├── magnolia_leaf_6.png │ ├── mangrove_leaf_1.png │ ├── mangrove_leaf_2.png │ ├── mangrove_leaf_3.png │ ├── mangrove_leaf_4.png │ ├── mangrove_leaf_5.png │ ├── mangrove_leaf_6.png │ ├── maple_leaf_1.png │ ├── maple_leaf_2.png │ ├── maple_leaf_3.png │ ├── oak_leaf_1.png │ ├── oak_leaf_2.png │ ├── oak_leaf_3.png │ ├── oak_leaf_4.png │ ├── oak_leaf_5.png │ ├── oak_leaf_6.png │ ├── redwood_leaf_1.png │ ├── redwood_leaf_2.png │ ├── ru_baobab_leaf_1.png │ ├── ru_baobab_leaf_2.png │ ├── ru_baobab_leaf_3.png │ ├── ru_baobab_leaf_4.png │ ├── ru_cypress_leaf_1.png │ ├── ru_cypress_leaf_2.png │ ├── ru_palm_leaf_1.png │ ├── ru_palm_leaf_2.png │ ├── socotra_leaf_1.png │ ├── socotra_leaf_2.png │ ├── socotra_leaf_3.png │ ├── socotra_leaf_4.png │ ├── socotra_leaf_5.png │ ├── socotra_leaf_6.png │ ├── socotra_leaf_7.png │ ├── socotra_leaf_8.png │ ├── spruce_leaf_1.png │ ├── spruce_leaf_2.png │ ├── water_ripple_1.png │ ├── water_ripple_2.png │ ├── water_ripple_3.png │ ├── water_ripple_4.png │ ├── water_ripple_5.png │ ├── water_ripple_6.png │ ├── water_ripple_7.png │ ├── water_splash_1.png │ ├── water_splash_2.png │ ├── water_splash_3.png │ ├── water_splash_4.png │ ├── water_splash_5.png │ ├── water_splash_6.png │ ├── water_splash_7.png │ ├── water_splash_8.png │ ├── water_splash_9.png │ ├── water_splash_foam_1.png │ ├── water_splash_foam_2.png │ ├── water_splash_foam_3.png │ ├── water_splash_foam_4.png │ ├── water_splash_foam_5.png │ ├── water_splash_foam_6.png │ ├── water_splash_foam_7.png │ ├── water_splash_foam_8.png │ ├── water_splash_foam_9.png │ ├── water_splash_ring_1.png │ ├── water_splash_ring_2.png │ ├── water_splash_ring_3.png │ ├── water_splash_ring_4.png │ ├── water_splash_ring_5.png │ ├── water_splash_ring_6.png │ ├── water_splash_ring_7.png │ ├── water_splash_ring_8.png │ ├── water_splash_ring_9.png │ ├── white_oak_leaf_1.png │ ├── white_oak_leaf_2.png │ ├── white_oak_leaf_3.png │ ├── white_oak_leaf_4.png │ ├── white_oak_leaf_5.png │ ├── white_oak_leaf_6.png │ ├── white_spruce_leaf_1.png │ ├── white_spruce_leaf_2.png │ ├── willow_leaf_1.png │ ├── willow_leaf_2.png │ ├── willow_leaf_3.png │ ├── willow_leaf_4.png │ ├── willow_leaf_5.png │ ├── willow_leaf_6.png │ ├── willow_leaf_7.png │ ├── willow_leaf_8.png │ ├── ww_baobab_leaf_1.png │ ├── ww_baobab_leaf_10.png │ ├── ww_baobab_leaf_2.png │ ├── ww_baobab_leaf_3.png │ ├── ww_baobab_leaf_4.png │ ├── ww_baobab_leaf_5.png │ ├── ww_baobab_leaf_6.png │ ├── ww_baobab_leaf_7.png │ ├── ww_baobab_leaf_8.png │ ├── ww_baobab_leaf_9.png │ ├── ww_cypress_leaf_1.png │ ├── ww_cypress_leaf_2.png │ ├── ww_cypress_leaf_3.png │ ├── ww_cypress_leaf_4.png │ ├── ww_cypress_leaf_5.png │ ├── ww_cypress_leaf_6.png │ ├── ww_palm_leaf_1.png │ ├── ww_palm_leaf_2.png │ ├── ww_palm_leaf_3.png │ └── ww_palm_leaf_4.png ├── fabric.mod.json ├── particular.accesswidener └── particular.mixins.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # 2 | # https://help.github.com/articles/dealing-with-line-endings/ 3 | # 4 | # Linux start script should use lf 5 | /gradlew text eol=lf 6 | 7 | # These are Windows script files and should use crlf 8 | *.bat text eol=crlf 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | replay_pid* 25 | 26 | # gradle 27 | .gradle/ 28 | build/ 29 | out/ 30 | classes/ 31 | !gradle/wrapper/gradle-wrapper.jar 32 | 33 | # eclipse 34 | *.launch 35 | 36 | # idea 37 | .idea/ 38 | *.iml 39 | *.ipr 40 | *.iws 41 | 42 | # vscode 43 | .settings/ 44 | .vscode/ 45 | bin/ 46 | .classpath 47 | .project 48 | 49 | # macos 50 | *.DS_Store 51 | 52 | # fabric 53 | run/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'fabric-loom' version '1.6-SNAPSHOT' 3 | id 'maven-publish' 4 | id "me.modmuss50.mod-publish-plugin" version "0.5.1" 5 | } 6 | 7 | version = project.mod_version 8 | group = project.maven_group 9 | 10 | base { 11 | archivesName = project.archives_base_name 12 | } 13 | 14 | repositories { 15 | // Add repositories to retrieve artifacts from in here. 16 | // You should only use this when depending on other mods because 17 | // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. 18 | // See https://docs.gradle.org/current/userguide/declaring_repositories.html 19 | // for more information about repositories. 20 | maven { url "https://maven.wispforest.io" } 21 | maven { url "https://maven.axoga.to/releases" } 22 | maven { url "https://api.modrinth.com/maven" } 23 | } 24 | 25 | loom { 26 | accessWidenerPath = file("src/main/resources/particular.accesswidener") 27 | } 28 | 29 | dependencies { 30 | // To change the versions see the gradle.properties file 31 | minecraft "com.mojang:minecraft:${project.minecraft_version}" 32 | mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" 33 | modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" 34 | 35 | // Fabric API. This is technically optional, but you probably want it anyway. 36 | modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" 37 | 38 | include "io.wispforest:owo-sentinel:${project.owo_version}" 39 | annotationProcessor modImplementation("io.wispforest:owo-lib:${project.owo_version}") 40 | 41 | modImplementation "com.chailotl:sushi_bar:${project.sushi_version}" 42 | 43 | //modCompileOnly "io.github.lucaargolo:fabric-seasons:${project.seasons_version}" 44 | } 45 | 46 | processResources { 47 | inputs.property "version", project.version 48 | inputs.property "name", project.mod_name 49 | 50 | filesMatching("fabric.mod.json") { 51 | expand "version": project.version, 52 | "name": project.mod_name 53 | } 54 | } 55 | 56 | tasks.withType(JavaCompile).configureEach { 57 | it.options.release = 17 58 | } 59 | 60 | java { 61 | // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task 62 | // if it is present. 63 | // If you remove this line, sources will not be generated. 64 | withSourcesJar() 65 | 66 | sourceCompatibility = JavaVersion.VERSION_17 67 | targetCompatibility = JavaVersion.VERSION_17 68 | } 69 | 70 | jar { 71 | from("LICENSE") { 72 | rename { "${it}_${project.base.archivesName.get()}"} 73 | } 74 | } 75 | 76 | // configure the maven publication 77 | publishing { 78 | publications { 79 | create("mavenJava", MavenPublication) { 80 | artifactId = project.archives_base_name 81 | from components.java 82 | } 83 | } 84 | 85 | // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. 86 | repositories { 87 | // Add repositories to publish to here. 88 | // Notice: This block does NOT have the same function as the block in the top level. 89 | // The repositories here will be used for publishing your artifact, not for 90 | // retrieving dependencies. 91 | } 92 | } 93 | 94 | publishMods { 95 | File changelogFile = new File("CHANGELOG.md") 96 | 97 | file = remapJar.archiveFile 98 | changelog = changelogFile.exists() ? changelogFile.text : "" 99 | type = STABLE 100 | displayName = "${project.mod_name} ${project.mod_version}" 101 | modLoaders.add("fabric") 102 | 103 | modrinth { 104 | accessToken = providers.gradleProperty("modrinth_token").get() 105 | projectId = "B1CcCd9h" 106 | minecraftVersionRange { 107 | start = "1.20" 108 | end = "1.20.4" 109 | } 110 | requires("fabric-api") 111 | requires("owo-lib") 112 | requires("sushi-bar") 113 | optional("modmenu") 114 | } 115 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Done to increase the memory available to gradle. 2 | org.gradle.jvmargs=-Xmx1G 3 | org.gradle.parallel=true 4 | 5 | # Fabric Properties 6 | # check these on https://fabricmc.net/develop 7 | minecraft_version=1.20 8 | yarn_mappings=1.20+build.1 9 | loader_version=0.15.7 10 | 11 | # Mod Properties 12 | mod_name=Particular 13 | mod_version=1.1.1 14 | maven_group=com.chailotl.particular 15 | archives_base_name=particular 16 | 17 | # Dependencies 18 | fabric_version=0.83.0+1.20 19 | owo_version=0.11.2+1.20 20 | sushi_version=0.1.1 21 | seasons_version=2.2.1+1.20 -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%"=="" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%"=="" set DIRNAME=. 29 | @rem This is normally unused 30 | set APP_BASE_NAME=%~n0 31 | set APP_HOME=%DIRNAME% 32 | 33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 35 | 36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 38 | 39 | @rem Find java.exe 40 | if defined JAVA_HOME goto findJavaFromJavaHome 41 | 42 | set JAVA_EXE=java.exe 43 | %JAVA_EXE% -version >NUL 2>&1 44 | if %ERRORLEVEL% equ 0 goto execute 45 | 46 | echo. 1>&2 47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 48 | echo. 1>&2 49 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 50 | echo location of your Java installation. 1>&2 51 | 52 | goto fail 53 | 54 | :findJavaFromJavaHome 55 | set JAVA_HOME=%JAVA_HOME:"=% 56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 57 | 58 | if exist "%JAVA_EXE%" goto execute 59 | 60 | echo. 1>&2 61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 62 | echo. 1>&2 63 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 64 | echo location of your Java installation. 1>&2 65 | 66 | goto fail 67 | 68 | :execute 69 | @rem Setup the command line 70 | 71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 72 | 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if %ERRORLEVEL% equ 0 goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | set EXIT_CODE=%ERRORLEVEL% 85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 87 | exit /b %EXIT_CODE% 88 | 89 | :mainEnd 90 | if "%OS%"=="Windows_NT" endlocal 91 | 92 | :omega 93 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | mavenCentral() 8 | gradlePluginPortal() 9 | } 10 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/ConfigModel.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular; 2 | 3 | import com.chailotl.sushi_bar.owo.config.SushiModmenu; 4 | import io.wispforest.owo.config.annotation.*; 5 | import io.wispforest.owo.ui.core.Color; 6 | import net.minecraft.util.Identifier; 7 | 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @SushiModmenu(modId = Main.MOD_ID) 12 | @Config(name = Main.MOD_ID, wrapperName = "ParticularConfig") 13 | public class ConfigModel 14 | { 15 | @SectionHeader("enabledEffects") 16 | public boolean waterSplash = true; 17 | public boolean cascades = true; 18 | public boolean waterfallSpray = true; 19 | public boolean fireflies = true; 20 | public boolean fallingLeaves = true; 21 | public boolean caveDust = true; 22 | public boolean chestBubbles = true; 23 | public boolean soulSandBubbles = true; 24 | public boolean barrelBubbles = true; 25 | public boolean poppingBubbles = true; 26 | public boolean rainRipples = true; 27 | public boolean waterDripRipples = true; 28 | public boolean cakeEatingParticles = true; 29 | public boolean emissiveLavaDrips = true; 30 | 31 | @SectionHeader("advancedSettings") 32 | @Nest 33 | public FireflySettings fireflySettings = new FireflySettings(); 34 | @Nest 35 | public FallingLeavesSettings fallingLeavesSettings = new FallingLeavesSettings(); 36 | @Nest 37 | public CaveDustSettings caveDustSettings = new CaveDustSettings(); 38 | 39 | public static class FireflySettings 40 | { 41 | @RangeConstraint(min = 0, max = 23999) 42 | public int startTime = 12000; 43 | @RangeConstraint(min = 0, max = 23999) 44 | public int endTime = 23000; 45 | public float minTemp = 0.5f; 46 | public float maxTemp = 0.99f; 47 | public boolean canSpawnInRain = false; 48 | @SectionHeader("frequencyModifiers") 49 | public List dailyRandom = Arrays.asList( 50 | 0f, 0f, 0f, 0.33f, 0.66f, 1f 51 | ); 52 | @RangeConstraint(min = 0, max = 1) 53 | public float grass = 1/6f; 54 | @RangeConstraint(min = 0, max = 1) 55 | public float tallGrass = 1/12f; 56 | @RangeConstraint(min = 0, max = 1) 57 | public float flowers = 1f; 58 | @RangeConstraint(min = 0, max = 1) 59 | public float tallFlowers = 0.5f; 60 | } 61 | 62 | public static class FallingLeavesSettings 63 | { 64 | @PredicateConstraint("minOne") 65 | public int spawnChance = 60; 66 | public boolean spawnRipples = true; 67 | public boolean layFlatOnGround = true; 68 | public boolean layFlatRightAngles = false; 69 | 70 | public static boolean minOne(int num) 71 | { 72 | return num >= 1; 73 | } 74 | } 75 | 76 | public static class CaveDustSettings 77 | { 78 | @PredicateConstraint("minOne") 79 | public int spawnChance = 700; 80 | @PredicateConstraint("minOne") 81 | public int baseMaxAge = 200; 82 | public Color color = Color.ofRgb(0x808080); 83 | @PredicateConstraint("minZero") 84 | public int fadeDuration = 20; 85 | public float maxAcceleration = 0.03f; 86 | @PredicateConstraint("minOne") 87 | public int accelChangeChance = 180; 88 | public List excludeBiomes = Arrays.asList( 89 | new Identifier("minecraft:lush_caves"), 90 | new Identifier("minecraft:dripstone_caves"), 91 | new Identifier("minecraft:deep_dark") 92 | ); 93 | 94 | public static boolean minOne(int num) 95 | { 96 | return num >= 1; 97 | } 98 | 99 | public static boolean minZero(int num) 100 | { 101 | return num >= 0; 102 | } 103 | } 104 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/Particles.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular; 2 | 3 | import com.chailotl.particular.particles.*; 4 | import com.chailotl.particular.particles.leaves.BigLeafParticle; 5 | import com.chailotl.particular.particles.leaves.ConiferLeafParticle; 6 | import com.chailotl.particular.particles.leaves.LeafParticle; 7 | import com.chailotl.particular.particles.leaves.SpinningLeafParticle; 8 | import com.chailotl.particular.particles.splashes.WaterSplashEmitterParticle; 9 | import com.chailotl.particular.particles.splashes.WaterSplashFoamParticle; 10 | import com.chailotl.particular.particles.splashes.WaterSplashParticle; 11 | import com.chailotl.particular.particles.splashes.WaterSplashRingParticle; 12 | import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; 13 | import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; 14 | import net.minecraft.client.particle.BubblePopParticle; 15 | import net.minecraft.particle.DefaultParticleType; 16 | import net.minecraft.registry.Registries; 17 | import net.minecraft.registry.Registry; 18 | import net.minecraft.util.Identifier; 19 | 20 | public class Particles 21 | { 22 | // Vanilla leaves 23 | public static final DefaultParticleType OAK_LEAF = registerParticle("oak_leaf", LeafParticle.Factory::new); 24 | public static final DefaultParticleType BIRCH_LEAF = registerParticle("birch_leaf", SpinningLeafParticle.Factory::new); 25 | public static final DefaultParticleType SPRUCE_LEAF = registerParticle("spruce_leaf", ConiferLeafParticle.Factory::new); 26 | public static final DefaultParticleType JUNGLE_LEAF = registerParticle("jungle_leaf", LeafParticle.Factory::new); 27 | public static final DefaultParticleType ACACIA_LEAF = registerParticle("acacia_leaf", SpinningLeafParticle.Factory::new); 28 | public static final DefaultParticleType DARK_OAK_LEAF = registerParticle("dark_oak_leaf", LeafParticle.Factory::new); 29 | public static final DefaultParticleType AZALEA_LEAF = registerParticle("azalea_leaf", LeafParticle.Factory::new); 30 | public static final DefaultParticleType MANGROVE_LEAF = registerParticle("mangrove_leaf", LeafParticle.Factory::new); 31 | 32 | // Generic leaves 33 | public static final DefaultParticleType WHITE_OAK_LEAF = registerParticle("white_oak_leaf", LeafParticle.Factory::new); 34 | public static final DefaultParticleType WHITE_SPRUCE_LEAF = registerParticle("white_spruce_leaf", ConiferLeafParticle.Factory::new); 35 | 36 | // Regions Unexplored leaves 37 | public static final DefaultParticleType MAPLE_LEAF = registerParticle("maple_leaf", SpinningLeafParticle.Factory::new); 38 | public static final DefaultParticleType BRIMWOOD_LEAF = registerParticle("brimwood_leaf", SpinningLeafParticle.Factory::new); 39 | public static final DefaultParticleType RU_BAOBAB_LEAF = registerParticle("ru_baobab_leaf", LeafParticle.Factory::new); 40 | public static final DefaultParticleType KAPOK_LEAF = registerParticle("kapok_leaf", LeafParticle.Factory::new); 41 | public static final DefaultParticleType EUCALYPTUS_LEAF = registerParticle("eucalyptus_leaf", BigLeafParticle.Factory::new); 42 | public static final DefaultParticleType REDWOOD_LEAF = registerParticle("redwood_leaf", ConiferLeafParticle.Factory::new); 43 | public static final DefaultParticleType MAGNOLIA_LEAF = registerParticle("magnolia_leaf", LeafParticle.Factory::new); 44 | public static final DefaultParticleType RU_PALM_LEAF = registerParticle("ru_palm_leaf", BigLeafParticle.Factory::new); 45 | public static final DefaultParticleType LARCH_LEAF = registerParticle("larch_leaf", ConiferLeafParticle.Factory::new); 46 | public static final DefaultParticleType GOLDEN_LARCH_LEAF = registerParticle("golden_larch_leaf", ConiferLeafParticle.Factory::new); 47 | public static final DefaultParticleType SOCOTRA_LEAF = registerParticle("socotra_leaf", LeafParticle.Factory::new); 48 | public static final DefaultParticleType BAMBOO_LEAF = registerParticle("bamboo_leaf", LeafParticle.Factory::new); 49 | public static final DefaultParticleType WILLOW_LEAF = registerParticle("willow_leaf", LeafParticle.Factory::new); 50 | public static final DefaultParticleType RU_CYPRESS_LEAF = registerParticle("ru_cypress_leaf", ConiferLeafParticle.Factory::new); 51 | 52 | // Wilder World leaves 53 | public static final DefaultParticleType WW_BAOBAB_LEAF = registerParticle("ww_baobab_leaf", SpinningLeafParticle.Factory::new); 54 | public static final DefaultParticleType WW_CYPRESS_LEAF = registerParticle("ww_cypress_leaf", ConiferLeafParticle.Factory::new); 55 | public static final DefaultParticleType WW_PALM_LEAF = registerParticle("ww_palm_leaf", BigLeafParticle.Factory::new); 56 | 57 | // Other particles 58 | public static final DefaultParticleType WATER_RIPPLE = registerParticle("water_ripple", WaterRippleParticle.Factory::new); 59 | public static final DefaultParticleType ENDER_BUBBLE = registerParticle("ender_bubble", EnderBubbleParticle.Factory::new); 60 | public static final DefaultParticleType ENDER_BUBBLE_POP = registerParticle("ender_bubble_pop", BubblePopParticle.Factory::new); 61 | public static final DefaultParticleType CAVE_DUST = registerParticle("cave_dust", CaveDustParticle.Factory::new); 62 | public static final DefaultParticleType FIREFLY = registerParticle("firefly", FireflyParticle.Factory::new); 63 | public static final DefaultParticleType WATERFALL_SPRAY = registerParticle("waterfall_spray", WaterfallSprayParticle.Factory::new); 64 | public static final DefaultParticleType CASCADE = FabricParticleTypes.simple(true); 65 | 66 | // Water splash particles 67 | public static final DefaultParticleType WATER_SPLASH_EMITTER = FabricParticleTypes.simple(true); 68 | public static final DefaultParticleType WATER_SPLASH = FabricParticleTypes.simple(true); 69 | public static final DefaultParticleType WATER_SPLASH_FOAM = FabricParticleTypes.simple(true); 70 | public static final DefaultParticleType WATER_SPLASH_RING = FabricParticleTypes.simple(true); 71 | 72 | public static void register() 73 | { 74 | Registry.register(Registries.PARTICLE_TYPE, new Identifier(Main.MOD_ID, "cascade"), Particles.CASCADE); 75 | Registry.register(Registries.PARTICLE_TYPE, new Identifier(Main.MOD_ID, "water_splash_emitter"), Particles.WATER_SPLASH_EMITTER); 76 | Registry.register(Registries.PARTICLE_TYPE, new Identifier(Main.MOD_ID, "water_splash"), Particles.WATER_SPLASH); 77 | Registry.register(Registries.PARTICLE_TYPE, new Identifier(Main.MOD_ID, "water_splash_foam"), Particles.WATER_SPLASH_FOAM); 78 | Registry.register(Registries.PARTICLE_TYPE, new Identifier(Main.MOD_ID, "water_splash_ring"), Particles.WATER_SPLASH_RING); 79 | 80 | ParticleFactoryRegistry.getInstance().register(Particles.CASCADE, CascadeParticle.Factory::new); 81 | ParticleFactoryRegistry.getInstance().register(Particles.WATER_SPLASH_EMITTER, WaterSplashEmitterParticle.Factory::new); 82 | ParticleFactoryRegistry.getInstance().register(Particles.WATER_SPLASH, WaterSplashParticle.Factory::new); 83 | ParticleFactoryRegistry.getInstance().register(Particles.WATER_SPLASH_FOAM, WaterSplashFoamParticle.Factory::new); 84 | ParticleFactoryRegistry.getInstance().register(Particles.WATER_SPLASH_RING, WaterSplashRingParticle.Factory::new); 85 | } 86 | 87 | public static DefaultParticleType registerParticle(String name, ParticleFactoryRegistry.PendingParticleFactory constructor) 88 | { 89 | DefaultParticleType particle = FabricParticleTypes.simple(); 90 | Registry.register(Registries.PARTICLE_TYPE, new Identifier(Main.MOD_ID, name), particle); 91 | ParticleFactoryRegistry.getInstance().register(particle, constructor); 92 | return particle; 93 | } 94 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/compat/RegionsUnexplored.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.compat; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.util.Identifier; 6 | 7 | import java.awt.*; 8 | 9 | public class RegionsUnexplored 10 | { 11 | private static String MOD_ID = "regions_unexplored"; 12 | 13 | private static Identifier id(String path) 14 | { 15 | return new Identifier(MOD_ID, path); 16 | } 17 | 18 | public static void addLeaves() 19 | { 20 | // Apple oak leaves, flowering leaves, small oak leaves 21 | Main.registerLeafData(id("alpha_leaves"), new Main.LeafData(null)); // Classic leaves had no particles 22 | Main.registerLeafData(id("ashen_leaves"), new Main.LeafData(null)); // Burnt to ash 23 | Main.registerLeafData(id("blue_magnolia_leaves"), new Main.LeafData(null)); 24 | Main.registerLeafData(id("pink_magnolia_leaves"), new Main.LeafData(null)); 25 | Main.registerLeafData(id("white_magnolia_leaves"), new Main.LeafData(null)); 26 | Main.registerLeafData(id("orange_maple_leaves"), new Main.LeafData(null)); 27 | Main.registerLeafData(id("red_maple_leaves"), new Main.LeafData(null)); 28 | Main.registerLeafData(id("mauve_leaves"), new Main.LeafData(null)); 29 | Main.registerLeafData(id("silver_birch_leaves"), new Main.LeafData(null)); 30 | Main.registerLeafData(id("enchanted_birch_leaves"), new Main.LeafData(null)); 31 | Main.registerLeafData(id("dead_leaves"), new Main.LeafData(Particles.WHITE_OAK_LEAF, new Color(0x865D40))); 32 | Main.registerLeafData(id("dead_pine_leaves"), new Main.LeafData(Particles.WHITE_SPRUCE_LEAF, new Color(0x7D5C46))); 33 | Main.registerLeafData(id("blackwood_leaves"), new Main.LeafData(Particles.WHITE_SPRUCE_LEAF, new Color(0x2D4519))); 34 | Main.registerLeafData(id("maple_leaves"), new Main.LeafData(Particles.MAPLE_LEAF)); 35 | Main.registerLeafData(id("brimwood_leaves"), new Main.LeafData(Particles.BRIMWOOD_LEAF, Color.white)); 36 | Main.registerLeafData(id("baobab_leaves"), new Main.LeafData(Particles.RU_BAOBAB_LEAF)); 37 | Main.registerLeafData(id("kapok_leaves"), new Main.LeafData(Particles.KAPOK_LEAF)); 38 | Main.registerLeafData(id("eucalyptus_leaves"), new Main.LeafData(Particles.EUCALYPTUS_LEAF)); 39 | Main.registerLeafData(id("pine_leaves"), new Main.LeafData(Particles.SPRUCE_LEAF)); 40 | Main.registerLeafData(id("redwood_leaves"), new Main.LeafData(Particles.REDWOOD_LEAF)); 41 | Main.registerLeafData(id("magnolia_leaves"), new Main.LeafData(Particles.MAGNOLIA_LEAF)); 42 | Main.registerLeafData(id("palm_leaves"), new Main.LeafData(Particles.RU_PALM_LEAF)); 43 | Main.registerLeafData(id("larch_leaves"), new Main.LeafData(Particles.LARCH_LEAF, Color.white)); 44 | Main.registerLeafData(id("golden_larch_leaves"), new Main.LeafData(Particles.GOLDEN_LARCH_LEAF, Color.white)); 45 | Main.registerLeafData(id("socotra_leaves"), new Main.LeafData(Particles.SOCOTRA_LEAF)); 46 | Main.registerLeafData(id("bamboo_leaves"), new Main.LeafData(Particles.BAMBOO_LEAF, Color.white)); 47 | Main.registerLeafData(id("willow_leaves"), new Main.LeafData(Particles.WILLOW_LEAF)); 48 | Main.registerLeafData(id("cypress_leaves"), new Main.LeafData(Particles.RU_CYPRESS_LEAF)); 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/compat/Traverse.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.compat; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.util.Identifier; 6 | 7 | import java.awt.*; 8 | 9 | public class Traverse 10 | { 11 | private static String MOD_ID = "traverse"; 12 | 13 | private static Identifier id(String path) 14 | { 15 | return new Identifier(MOD_ID, path); 16 | } 17 | 18 | public static void addLeaves() 19 | { 20 | Main.registerLeafData(id("brown_autumnal_leaves"), new Main.LeafData(Particles.WHITE_OAK_LEAF, new Color(0x734B27))); 21 | Main.registerLeafData(id("red_autumnal_leaves"), new Main.LeafData(Particles.WHITE_OAK_LEAF, new Color(0xB64430))); 22 | Main.registerLeafData(id("orange_autumnal_leaves"), new Main.LeafData(Particles.WHITE_OAK_LEAF, new Color(0xEF8F1D))); 23 | Main.registerLeafData(id("yellow_autumnal_leaves"), new Main.LeafData(Particles.WHITE_OAK_LEAF, new Color(0xE9D131))); 24 | Main.registerLeafData(id("fir_leaves"), new Main.LeafData(Particles.WHITE_SPRUCE_LEAF, new Color(0x1B4719))); 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/compat/WilderWild.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.compat; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.util.Identifier; 6 | 7 | public class WilderWild 8 | { 9 | private static String MOD_ID = "wilderwild"; 10 | 11 | private static Identifier id(String path) 12 | { 13 | return new Identifier(MOD_ID, path); 14 | } 15 | 16 | public static void addLeaves() 17 | { 18 | Main.registerLeafData(id("baobab_leaves"), new Main.LeafData(Particles.WW_BAOBAB_LEAF)); 19 | Main.registerLeafData(id("cypress_leaves"), new Main.LeafData(Particles.WW_CYPRESS_LEAF)); 20 | Main.registerLeafData(id("palm_fronds"), new Main.LeafData(Particles.WW_PALM_LEAF)); 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/AccessorBillboardParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.client.particle.BillboardParticle; 4 | import org.spongepowered.asm.mixin.Mixin; 5 | import org.spongepowered.asm.mixin.gen.Accessor; 6 | 7 | @Mixin(BillboardParticle.class) 8 | public interface AccessorBillboardParticle 9 | { 10 | @Accessor("scale") 11 | void setScale(float scale); 12 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/AccessorBiome.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.world.biome.Biome; 4 | import org.spongepowered.asm.mixin.Mixin; 5 | import org.spongepowered.asm.mixin.gen.Accessor; 6 | 7 | @Mixin(Biome.class) 8 | public interface AccessorBiome 9 | { 10 | @Accessor("weather") 11 | Biome.Weather getWeather(); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/AccessorBlockLeakParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.client.particle.BlockLeakParticle; 4 | import net.minecraft.fluid.Fluid; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | @Mixin(BlockLeakParticle.class) 9 | public interface AccessorBlockLeakParticle 10 | { 11 | @Accessor("fluid") 12 | Fluid getFluid(); 13 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/AccessorChestBlockEntity.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.block.entity.ChestBlockEntity; 4 | import net.minecraft.block.entity.ViewerCountManager; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | @Mixin(ChestBlockEntity.class) 9 | public interface AccessorChestBlockEntity 10 | { 11 | @Accessor("stateManager") 12 | ViewerCountManager getStateManager(); 13 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/AccessorEnderChestBlockEntity.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.block.entity.EnderChestBlockEntity; 4 | import net.minecraft.block.entity.ViewerCountManager; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | 9 | @Mixin(EnderChestBlockEntity.class) 10 | public interface AccessorEnderChestBlockEntity 11 | { 12 | @Accessor("stateManager") 13 | ViewerCountManager getStateManager(); 14 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/AccessorParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.client.particle.Particle; 4 | import org.spongepowered.asm.mixin.Mixin; 5 | import org.spongepowered.asm.mixin.gen.Accessor; 6 | 7 | @Mixin(Particle.class) 8 | public interface AccessorParticle 9 | { 10 | @Accessor("field_21507") 11 | void setField_21507(boolean val); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectBarrelBlock.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.block.BarrelBlock; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.client.util.ParticleUtil; 7 | import net.minecraft.entity.player.PlayerEntity; 8 | import net.minecraft.particle.ParticleTypes; 9 | import net.minecraft.registry.tag.FluidTags; 10 | import net.minecraft.state.property.Properties; 11 | import net.minecraft.util.ActionResult; 12 | import net.minecraft.util.Hand; 13 | import net.minecraft.util.hit.BlockHitResult; 14 | import net.minecraft.util.math.BlockPos; 15 | import net.minecraft.util.math.Direction; 16 | import net.minecraft.util.math.Vec3d; 17 | import net.minecraft.world.World; 18 | import org.spongepowered.asm.mixin.Mixin; 19 | import org.spongepowered.asm.mixin.injection.At; 20 | import org.spongepowered.asm.mixin.injection.Inject; 21 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 22 | 23 | @Mixin(BarrelBlock.class) 24 | public class InjectBarrelBlock 25 | { 26 | @Inject( 27 | method = "onUse", 28 | at = @At("HEAD")) 29 | private void releaseBubbles(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) 30 | { 31 | if (!Main.CONFIG.barrelBubbles()) { return; } 32 | 33 | Direction direction = state.get(Properties.FACING); 34 | 35 | if (direction == Direction.DOWN || !world.getFluidState(pos.add(direction.getVector())).isIn(FluidTags.WATER)) 36 | { 37 | return; 38 | } 39 | 40 | for (int i = 0; i < 10; ++i) 41 | { 42 | ParticleUtil.spawnParticle(world, pos, direction, ParticleTypes.BUBBLE_COLUMN_UP, Vec3d.ZERO, 0.55); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectBlock.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.block.*; 6 | import net.minecraft.registry.entry.RegistryEntry; 7 | import net.minecraft.util.math.BlockPos; 8 | import net.minecraft.util.math.random.Random; 9 | import net.minecraft.world.LightType; 10 | import net.minecraft.world.World; 11 | import net.minecraft.world.biome.Biome; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.Unique; 14 | import org.spongepowered.asm.mixin.injection.At; 15 | import org.spongepowered.asm.mixin.injection.Inject; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 17 | 18 | @Mixin(Block.class) 19 | public class InjectBlock 20 | { 21 | @Unique 22 | private static boolean isValidBiome(RegistryEntry biome) 23 | { 24 | var key = biome.getKey(); 25 | if (key.isEmpty()) { return true; } 26 | return !Main.CONFIG.caveDustSettings.excludeBiomes().contains(key.get().getValue()); 27 | } 28 | 29 | @Inject(at = @At("TAIL"), method = "randomDisplayTick") 30 | public void spawnParticles(BlockState state, World world, BlockPos pos, Random random, CallbackInfo ci) 31 | { 32 | Block block = state.getBlock(); 33 | 34 | if (Main.CONFIG.fireflies()) 35 | { 36 | // Fireflies 37 | double val = random.nextDouble(); 38 | if ((block == Blocks.GRASS && val < Main.CONFIG.fireflySettings.grass()) || 39 | (block == Blocks.TALL_GRASS && val < Main.CONFIG.fireflySettings.tallGrass()) || 40 | (block instanceof FlowerBlock && val < Main.CONFIG.fireflySettings.flowers()) || 41 | (block instanceof TallFlowerBlock && val < Main.CONFIG.fireflySettings.tallFlowers())) 42 | { 43 | Main.spawnFirefly(world, pos, random); 44 | return; 45 | } 46 | } 47 | 48 | if (Main.CONFIG.caveDust()) 49 | { 50 | // Cave dust 51 | if (block == Blocks.AIR || block == Blocks.CAVE_AIR) 52 | { 53 | if (random.nextInt(Main.CONFIG.caveDustSettings.spawnChance()) == 0 && pos.getY() < world.getSeaLevel() && isValidBiome(world.getBiome(pos))) 54 | { 55 | float lightChance = 1f - Math.min(8, world.getLightLevel(LightType.SKY, pos)) / 8f; 56 | float depthChance = Math.min(1f, (world.getSeaLevel() - pos.getY()) / 96f); 57 | 58 | if (random.nextFloat() < lightChance * depthChance) 59 | { 60 | double x = (double)pos.getX() + random.nextDouble(); 61 | double y = (double)pos.getY() + random.nextDouble(); 62 | double z = (double)pos.getZ() + random.nextDouble(); 63 | world.addParticle(Particles.CAVE_DUST, x, y, z, 0.0, 0.0, 0.0); 64 | } 65 | } 66 | } 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectBlockLeakParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.client.particle.BlockLeakParticle; 5 | import net.minecraft.fluid.Fluids; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 10 | 11 | @Mixin(BlockLeakParticle.class) 12 | public class InjectBlockLeakParticle 13 | { 14 | @Inject( 15 | method = "getBrightness", 16 | at = @At("HEAD"), 17 | cancellable = true) 18 | public void getBrightness(float tint, CallbackInfoReturnable cir) 19 | { 20 | if (!Main.CONFIG.emissiveLavaDrips()) { return; } 21 | 22 | if (((AccessorBlockLeakParticle) this).getFluid().matchesType(Fluids.LAVA)) 23 | { 24 | cir.setReturnValue(15728880); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectBubbleColumnUpParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.client.MinecraftClient; 5 | import net.minecraft.client.particle.BubbleColumnUpParticle; 6 | import net.minecraft.client.particle.Particle; 7 | import net.minecraft.client.particle.SpriteBillboardParticle; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.ParticleTypes; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 14 | 15 | @Mixin(BubbleColumnUpParticle.class) 16 | public abstract class InjectBubbleColumnUpParticle extends SpriteBillboardParticle 17 | { 18 | protected InjectBubbleColumnUpParticle(ClientWorld clientWorld, double d, double e, double f) 19 | { 20 | super(clientWorld, d, e, f); 21 | } 22 | 23 | @Inject( 24 | method = "tick", 25 | at = @At("TAIL")) 26 | private void releaseBubbles(CallbackInfo ci) 27 | { 28 | if (!Main.CONFIG.poppingBubbles()) { return; } 29 | 30 | if (this.dead) 31 | { 32 | Particle bubble = MinecraftClient.getInstance().particleManager.addParticle(ParticleTypes.BUBBLE_POP, x, y, z, 0, 0, 0); 33 | if (bubble != null) 34 | { 35 | ((AccessorBillboardParticle) bubble).setScale(this.scale * 2f); 36 | } 37 | 38 | //world.playSound(x, y, z, SoundEvents.BLOCK_BUBBLE_COLUMN_BUBBLE_POP, SoundCategory.AMBIENT, 1f, 1f, true); 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectCakeBlock.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.CakeBlock; 6 | import net.minecraft.entity.player.PlayerEntity; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.item.Items; 9 | import net.minecraft.util.ActionResult; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.world.WorldAccess; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 16 | 17 | @Mixin(CakeBlock.class) 18 | public class InjectCakeBlock 19 | { 20 | @Inject(at = @At("TAIL"), method = "tryEat") 21 | private static void makeSounds(WorldAccess world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) 22 | { 23 | if (!Main.CONFIG.cakeEatingParticles()) { return; } 24 | 25 | ItemStack cake = Items.CAKE.getDefaultStack(); 26 | player.playSound(player.getEatSound(cake), 1f, 1f); 27 | ((InvokerLivingEntity) player).spawnParticles(cake, 5); 28 | } 29 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectChestBlock.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.block.ChestBlock; 7 | import net.minecraft.block.entity.ChestBlockEntity; 8 | import net.minecraft.block.enums.ChestType; 9 | import net.minecraft.entity.player.PlayerEntity; 10 | import net.minecraft.particle.ParticleTypes; 11 | import net.minecraft.state.property.Properties; 12 | import net.minecraft.util.ActionResult; 13 | import net.minecraft.util.Hand; 14 | import net.minecraft.util.hit.BlockHitResult; 15 | import net.minecraft.util.math.BlockPos; 16 | import net.minecraft.world.World; 17 | import org.spongepowered.asm.mixin.Mixin; 18 | import org.spongepowered.asm.mixin.injection.At; 19 | import org.spongepowered.asm.mixin.injection.Inject; 20 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 21 | 22 | @Mixin(ChestBlock.class) 23 | public class InjectChestBlock 24 | { 25 | @Inject( 26 | method = "onUse", 27 | at = @At("HEAD")) 28 | private void releaseBubbles(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) 29 | { 30 | if (!Main.CONFIG.chestBubbles()) { return; } 31 | 32 | if (!state.get(Properties.WATERLOGGED) || ChestBlock.getInventory((ChestBlock) Blocks.CHEST, state, world, pos, false) == null) 33 | { 34 | return; 35 | } 36 | 37 | if (state.get(Properties.CHEST_TYPE) == ChestType.SINGLE) 38 | { 39 | Main.spawnChestBubbles(ParticleTypes.BUBBLE_COLUMN_UP, world, pos); 40 | } 41 | else 42 | { 43 | Main.spawnDoubleChestBubbles(ParticleTypes.BUBBLE_COLUMN_UP, world, pos, state); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectChestBlockEntity.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.block.ChestBlock; 7 | import net.minecraft.block.entity.BlockEntity; 8 | import net.minecraft.block.entity.BlockEntityType; 9 | import net.minecraft.block.entity.ChestBlockEntity; 10 | import net.minecraft.block.enums.ChestType; 11 | import net.minecraft.particle.ParticleTypes; 12 | import net.minecraft.sound.SoundCategory; 13 | import net.minecraft.sound.SoundEvents; 14 | import net.minecraft.state.property.Properties; 15 | import net.minecraft.util.math.BlockPos; 16 | import net.minecraft.util.math.Direction; 17 | import net.minecraft.world.World; 18 | import org.spongepowered.asm.mixin.Mixin; 19 | import org.spongepowered.asm.mixin.Unique; 20 | import org.spongepowered.asm.mixin.injection.At; 21 | import org.spongepowered.asm.mixin.injection.Inject; 22 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 23 | 24 | @Mixin(ChestBlockEntity.class) 25 | public class InjectChestBlockEntity extends BlockEntity 26 | { 27 | @Unique 28 | private int ticksUntilNextSwitch = 20; 29 | @Unique 30 | private boolean isOpen = false; 31 | 32 | @Unique 33 | private static final int minClosedTime = 20 * 8; 34 | @Unique 35 | private static final int maxClosedTime = 20 * 24; 36 | @Unique 37 | private static final int minOpenTime = 20 * 2; 38 | @Unique 39 | private static final int maxOpenTime = 20 * 3; 40 | 41 | public InjectChestBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) 42 | { 43 | super(type, pos, state); 44 | } 45 | 46 | @Unique 47 | private static boolean getSoulSand(World world, BlockPos pos, BlockState state) 48 | { 49 | pos = pos.down(); 50 | 51 | if (world.getBlockState(pos).getBlock() == Blocks.SOUL_SAND) { return true; } 52 | 53 | if (state.get(Properties.CHEST_TYPE) == ChestType.RIGHT) 54 | { 55 | BlockPos pos2 = pos.add(state.get(Properties.HORIZONTAL_FACING).rotateCounterclockwise(Direction.Axis.Y).getVector()); 56 | 57 | return world.getBlockState(pos2).getBlock() == Blocks.SOUL_SAND; 58 | } 59 | 60 | return false; 61 | } 62 | 63 | @SuppressWarnings("InvalidInjectorMethodSignature") 64 | @Inject( 65 | method = "clientTick", 66 | at = @At("TAIL")) 67 | private static void randomlyOpen(World world, BlockPos pos, BlockState state, InjectChestBlockEntity blockEntity, CallbackInfo ci) 68 | { 69 | if (!Main.CONFIG.soulSandBubbles()) { return; } 70 | 71 | if (!state.get(Properties.WATERLOGGED) || 72 | state.get(Properties.CHEST_TYPE) == ChestType.LEFT || 73 | !getSoulSand(world, pos, state) || 74 | ChestBlock.getInventory((ChestBlock) Blocks.CHEST, state, world, pos, false) == null) 75 | { 76 | return; 77 | } 78 | 79 | if (--blockEntity.ticksUntilNextSwitch <= 0) 80 | { 81 | if (blockEntity.isOpen) 82 | { 83 | blockEntity.isOpen = false; 84 | blockEntity.ticksUntilNextSwitch = world.random.nextBetween(minClosedTime, maxClosedTime); 85 | ((AccessorChestBlockEntity) blockEntity).getStateManager().closeContainer(null, world, pos, blockEntity.getCachedState()); 86 | } 87 | else 88 | { 89 | blockEntity.isOpen = true; 90 | blockEntity.ticksUntilNextSwitch = world.random.nextBetween(minOpenTime, maxOpenTime); 91 | ((AccessorChestBlockEntity) blockEntity).getStateManager().openContainer(null, world, pos, blockEntity.getCachedState()); 92 | world.playSound(pos.getX(), pos.getY(), pos.getZ(), SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT, SoundCategory.AMBIENT, 1f, 1f, true); 93 | } 94 | } 95 | 96 | if (blockEntity.isOpen && 97 | blockEntity.ticksUntilNextSwitch > 10 && 98 | blockEntity.ticksUntilNextSwitch % 2 == 0) 99 | { 100 | if (state.get(Properties.CHEST_TYPE) == ChestType.SINGLE) 101 | { 102 | Main.spawnBubble(ParticleTypes.BUBBLE_COLUMN_UP, world, pos); 103 | } 104 | else 105 | { 106 | Main.spawnDoubleBubbles(ParticleTypes.BUBBLE_COLUMN_UP, world, pos, state); 107 | } 108 | } 109 | } 110 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectContinuousFalling.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.client.particle.BlockLeakParticle; 6 | import net.minecraft.client.particle.SpriteBillboardParticle; 7 | import net.minecraft.client.world.ClientWorld; 8 | import net.minecraft.fluid.FluidState; 9 | import net.minecraft.particle.ParticleEffect; 10 | import net.minecraft.particle.ParticleTypes; 11 | import net.minecraft.registry.tag.FluidTags; 12 | import net.minecraft.util.math.BlockPos; 13 | import org.spongepowered.asm.mixin.Final; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.Shadow; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.Inject; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 19 | 20 | @Mixin(BlockLeakParticle.ContinuousFalling.class) 21 | public abstract class InjectContinuousFalling extends SpriteBillboardParticle 22 | { 23 | @Shadow @Final protected ParticleEffect nextParticle; 24 | 25 | protected InjectContinuousFalling(ClientWorld clientWorld, double d, double e, double f) 26 | { 27 | super(clientWorld, d, e, f); 28 | } 29 | 30 | @Inject( 31 | method = "updateVelocity", 32 | at = @At("TAIL")) 33 | private void addRipples(CallbackInfo ci) 34 | { 35 | if (!Main.CONFIG.waterDripRipples()) { return; } 36 | 37 | if (nextParticle != ParticleTypes.SPLASH) 38 | { 39 | return; 40 | } 41 | 42 | BlockPos pos = BlockPos.ofFloored(x, y, z); 43 | FluidState fluidState = world.getFluidState(pos); 44 | if (fluidState.isIn(FluidTags.WATER)) 45 | { 46 | float yWater = pos.getY() + fluidState.getHeight(world, pos); 47 | if (y < yWater) 48 | { 49 | world.addParticle(Particles.WATER_RIPPLE, x, yWater, z, 0, 0, 0); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectEnderChestBlock.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.block.*; 6 | import net.minecraft.entity.player.PlayerEntity; 7 | import net.minecraft.state.property.Properties; 8 | import net.minecraft.util.ActionResult; 9 | import net.minecraft.util.Hand; 10 | import net.minecraft.util.hit.BlockHitResult; 11 | import net.minecraft.util.math.BlockPos; 12 | import net.minecraft.world.World; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | import org.spongepowered.asm.mixin.injection.At; 15 | import org.spongepowered.asm.mixin.injection.Inject; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 17 | 18 | @Mixin(EnderChestBlock.class) 19 | public class InjectEnderChestBlock 20 | { 21 | @Inject( 22 | method = "onUse", 23 | at = @At("HEAD")) 24 | private void releaseBubbles(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) 25 | { 26 | if (!Main.CONFIG.chestBubbles()) { return; } 27 | 28 | if (!state.get(Properties.WATERLOGGED) || world.getBlockState(pos.up()).isSolidBlock(world, pos.up())) 29 | { 30 | return; 31 | } 32 | 33 | Main.spawnChestBubbles(Particles.ENDER_BUBBLE, world, pos); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectEnderChestBlockEntity.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.block.entity.BlockEntity; 8 | import net.minecraft.block.entity.BlockEntityType; 9 | import net.minecraft.block.entity.EnderChestBlockEntity; 10 | import net.minecraft.sound.SoundCategory; 11 | import net.minecraft.sound.SoundEvents; 12 | import net.minecraft.state.property.Properties; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.world.World; 15 | import org.spongepowered.asm.mixin.Mixin; 16 | import org.spongepowered.asm.mixin.Unique; 17 | import org.spongepowered.asm.mixin.injection.At; 18 | import org.spongepowered.asm.mixin.injection.Inject; 19 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 20 | 21 | @Mixin(EnderChestBlockEntity.class) 22 | public class InjectEnderChestBlockEntity extends BlockEntity 23 | { 24 | @Unique 25 | private int ticksUntilNextSwitch = 20; 26 | @Unique 27 | private boolean isOpen = false; 28 | 29 | @Unique 30 | private static final int minClosedTime = 20 * 8; 31 | @Unique 32 | private static final int maxClosedTime = 20 * 24; 33 | @Unique 34 | private static final int minOpenTime = 20 * 2; 35 | @Unique 36 | private static final int maxOpenTime = 20 * 3; 37 | 38 | public InjectEnderChestBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) 39 | { 40 | super(type, pos, state); 41 | } 42 | 43 | @SuppressWarnings("InvalidInjectorMethodSignature") 44 | @Inject( 45 | method = "clientTick", 46 | at = @At("TAIL")) 47 | private static void randomlyOpen(World world, BlockPos pos, BlockState state, InjectEnderChestBlockEntity blockEntity, CallbackInfo ci) 48 | { 49 | if (!Main.CONFIG.soulSandBubbles()) { return; } 50 | 51 | if (!state.get(Properties.WATERLOGGED) || 52 | world.getBlockState(pos.down()).getBlock() != Blocks.SOUL_SAND || 53 | world.getBlockState(pos.up()).isSolidBlock(world, pos.up())) 54 | { 55 | return; 56 | } 57 | 58 | if (--blockEntity.ticksUntilNextSwitch <= 0) 59 | { 60 | if (blockEntity.isOpen) 61 | { 62 | blockEntity.isOpen = false; 63 | blockEntity.ticksUntilNextSwitch = world.random.nextBetween(minClosedTime, maxClosedTime); 64 | ((AccessorEnderChestBlockEntity) blockEntity).getStateManager().closeContainer(null, world, pos, blockEntity.getCachedState()); 65 | } 66 | else 67 | { 68 | blockEntity.isOpen = true; 69 | blockEntity.ticksUntilNextSwitch = world.random.nextBetween(minOpenTime, maxOpenTime); 70 | ((AccessorEnderChestBlockEntity) blockEntity).getStateManager().openContainer(null, world, pos, blockEntity.getCachedState()); 71 | world.playSound(pos.getX(), pos.getY(), pos.getZ(), SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT, SoundCategory.AMBIENT, 1f, 1f, true); 72 | } 73 | } 74 | 75 | if (blockEntity.isOpen && 76 | blockEntity.ticksUntilNextSwitch > 10 && 77 | blockEntity.ticksUntilNextSwitch % 2 == 0) 78 | { 79 | Main.spawnBubble(Particles.ENDER_BUBBLE, world, pos); 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectEntity.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.entity.Entity; 6 | import net.minecraft.entity.EntityDimensions; 7 | import net.minecraft.entity.projectile.ArrowEntity; 8 | import net.minecraft.fluid.FluidState; 9 | import net.minecraft.fluid.Fluids; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.util.math.MathHelper; 12 | import net.minecraft.util.math.Vec3d; 13 | import net.minecraft.util.math.random.Random; 14 | import net.minecraft.world.World; 15 | import org.spongepowered.asm.mixin.Final; 16 | import org.spongepowered.asm.mixin.Mixin; 17 | import org.spongepowered.asm.mixin.Shadow; 18 | import org.spongepowered.asm.mixin.Unique; 19 | import org.spongepowered.asm.mixin.injection.At; 20 | import org.spongepowered.asm.mixin.injection.Inject; 21 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 22 | 23 | import java.util.Collections; 24 | import java.util.LinkedList; 25 | import java.util.Queue; 26 | 27 | @Mixin(Entity.class) 28 | public abstract class InjectEntity 29 | { 30 | @Shadow private Vec3d velocity; 31 | @Shadow private EntityDimensions dimensions; 32 | @Shadow @Final protected Random random; 33 | @Shadow public abstract double getX(); 34 | @Shadow public abstract double getY(); 35 | @Shadow public abstract double getZ(); 36 | 37 | @Shadow public abstract World getWorld(); 38 | @Shadow public abstract Vec3d getPos(); 39 | @Shadow public abstract BlockPos getBlockPos(); 40 | 41 | @Unique 42 | public Queue velocities = new LinkedList<>(); 43 | 44 | @Inject( 45 | method = "tick", 46 | at = @At("TAIL") 47 | ) 48 | private void onSetVelocity(CallbackInfo ci) 49 | { 50 | if (!Main.CONFIG.waterSplash()) { return; } 51 | 52 | velocities.offer(Math.abs(velocity.getY())); 53 | if (velocities.size() > 4) 54 | { 55 | velocities.poll(); 56 | } 57 | } 58 | 59 | @Inject( 60 | method = "onSwimmingStart", 61 | at = @At("TAIL")) 62 | private void waterParticles(CallbackInfo ci) 63 | { 64 | if (!Main.CONFIG.waterSplash()) { return; } 65 | 66 | //noinspection ConstantConditions 67 | if ((Object) this instanceof ArrowEntity || !getWorld().isClient) { return; } 68 | 69 | // Find water height 70 | float baseY = MathHelper.floor(getY()); 71 | 72 | boolean foundSurface = false; 73 | FluidState prevState = Fluids.EMPTY.getDefaultState(); 74 | for (int i = 0; i < 5; ++i) 75 | { 76 | FluidState nextState = getWorld().getFluidState(getBlockPos().add(0, i, 0)); 77 | if (prevState.isOf(Fluids.WATER) && nextState.isOf(Fluids.EMPTY)) 78 | { 79 | baseY += i - 1; 80 | foundSurface = true; 81 | break; 82 | } 83 | 84 | prevState = nextState; 85 | } 86 | 87 | if (!foundSurface) { return; } 88 | 89 | // 3D splash 90 | getWorld().addParticle(Particles.WATER_SPLASH_EMITTER, getX(), baseY + prevState.getHeight(), getZ(), dimensions.width, Collections.max(velocities), 0.0); 91 | } 92 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectFlowableFluid.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.fluid.FlowableFluid; 5 | import net.minecraft.fluid.FluidState; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.world.World; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | 13 | @Mixin(FlowableFluid.class) 14 | public class InjectFlowableFluid 15 | { 16 | @Inject( 17 | method = "onScheduledTick", 18 | at = @At("TAIL")) 19 | protected void spawnCascades(World world, BlockPos pos, FluidState state, CallbackInfo ci) 20 | { 21 | if (!Main.CONFIG.cascades()) { return; } 22 | 23 | Main.updateCascade(world, pos, state); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectLeavesBlock.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.LeavesBlock; 7 | import net.minecraft.client.MinecraftClient; 8 | import net.minecraft.client.particle.Particle; 9 | import net.minecraft.particle.ParticleEffect; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.util.math.Direction; 12 | import net.minecraft.util.math.random.Random; 13 | import net.minecraft.world.World; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Inject; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 18 | 19 | import java.awt.*; 20 | 21 | @Mixin(LeavesBlock.class) 22 | public class InjectLeavesBlock 23 | { 24 | @Inject( 25 | method = "randomDisplayTick", 26 | at = @At("HEAD")) 27 | private void dropLeaves(BlockState state, World world, BlockPos pos, Random random, CallbackInfo ci) 28 | { 29 | if (!Main.CONFIG.fallingLeaves()) { return; } 30 | 31 | if (random.nextInt(Main.CONFIG.fallingLeavesSettings.spawnChance()) == 0) 32 | { 33 | BlockPos blockPos = pos.down(); 34 | BlockState blockState = world.getBlockState(blockPos); 35 | if (!Block.isFaceFullSquare(blockState.getCollisionShape(world, blockPos), Direction.UP)) 36 | { 37 | double x = pos.getX() + 0.02d + random.nextDouble() * 0.96d; 38 | double y = pos.getY() - 0.05d; 39 | double z = pos.getZ() + 0.02d + random.nextDouble() * 0.96d; 40 | 41 | Main.LeafData leafData = Main.getLeafData(state.getBlock()); 42 | 43 | ParticleEffect particle = leafData.getParticle(); 44 | if (particle == null) { return; } 45 | Color color = leafData.getColor(world, pos); 46 | 47 | Particle leaf = MinecraftClient.getInstance().particleManager.addParticle(particle, x, y, z, 0, 0, 0); 48 | if (leaf != null) 49 | { 50 | leaf.setColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f); 51 | } 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectWaterBubbleParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import net.minecraft.client.MinecraftClient; 5 | import net.minecraft.client.particle.Particle; 6 | import net.minecraft.client.particle.SpriteBillboardParticle; 7 | import net.minecraft.client.particle.WaterBubbleParticle; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.ParticleTypes; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 14 | 15 | @Mixin(WaterBubbleParticle.class) 16 | public abstract class InjectWaterBubbleParticle extends SpriteBillboardParticle 17 | { 18 | protected InjectWaterBubbleParticle(ClientWorld clientWorld, double d, double e, double f) 19 | { 20 | super(clientWorld, d, e, f); 21 | } 22 | 23 | @Inject( 24 | method = "tick", 25 | at = @At("TAIL")) 26 | private void releaseBubbles(CallbackInfo ci) 27 | { 28 | if (!Main.CONFIG.poppingBubbles()) { return; } 29 | 30 | if (this.dead || maxAge == 0) 31 | { 32 | Particle bubble = MinecraftClient.getInstance().particleManager.addParticle(ParticleTypes.BUBBLE_POP, x, y, z, 0, 0, 0); 33 | if (bubble != null) 34 | { 35 | ((AccessorBillboardParticle) bubble).setScale(this.scale * 2f); 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectWaterFluid.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.minecraft.fluid.FluidState; 6 | import net.minecraft.fluid.WaterFluid; 7 | import net.minecraft.registry.tag.FluidTags; 8 | import net.minecraft.state.property.Properties; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.util.math.Vec3d; 11 | import net.minecraft.util.math.random.Random; 12 | import net.minecraft.world.World; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | import org.spongepowered.asm.mixin.injection.At; 15 | import org.spongepowered.asm.mixin.injection.Inject; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 17 | 18 | @Mixin(WaterFluid.class) 19 | public class InjectWaterFluid 20 | { 21 | @Inject( 22 | method = "randomDisplayTick", 23 | at = @At("TAIL")) 24 | private void waterParticles(World world, BlockPos pos, FluidState state, Random random, CallbackInfo ci) 25 | { 26 | if (!Main.CONFIG.waterfallSpray()) { return; } 27 | 28 | if (!state.isStill() && 29 | world.getFluidState(pos.down()).isIn(FluidTags.WATER)) 30 | { 31 | // Splishy splashy 32 | for (int i = 0; i < 2; ++i) 33 | { 34 | if (state.get(Properties.FALLING)) 35 | { 36 | double x = pos.getX(); 37 | double y = (double) pos.getY() + random.nextDouble(); 38 | double z = pos.getZ(); 39 | 40 | if (random.nextBoolean()) 41 | { 42 | x += random.nextDouble(); 43 | z += random.nextBetween(0, 1); 44 | } 45 | else 46 | { 47 | x += random.nextBetween(0, 1); 48 | z += random.nextDouble(); 49 | } 50 | 51 | world.addParticle(Particles.WATERFALL_SPRAY, x, y, z, 0.0, 0.0, 0.0); 52 | } 53 | else 54 | { 55 | double x = (double) pos.getX() + random.nextDouble(); 56 | double y = (double) pos.getY() + (random.nextDouble() * state.getHeight()); 57 | double z = (double) pos.getZ() + random.nextDouble(); 58 | Vec3d vel = state.getVelocity(world, pos).multiply(0.075); 59 | world.addParticle(Particles.WATERFALL_SPRAY, x, y, z, vel.x, 0.0, vel.z); 60 | } 61 | } 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InjectWorldRenderer.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import com.llamalad7.mixinextras.sugar.Local; 6 | import com.llamalad7.mixinextras.sugar.ref.LocalRef; 7 | import net.minecraft.client.render.Camera; 8 | import net.minecraft.client.render.WorldRenderer; 9 | import net.minecraft.fluid.FluidState; 10 | import net.minecraft.particle.ParticleEffect; 11 | import net.minecraft.registry.tag.FluidTags; 12 | import org.objectweb.asm.Opcodes; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | import org.spongepowered.asm.mixin.injection.*; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 16 | 17 | @Mixin(WorldRenderer.class) 18 | public class InjectWorldRenderer 19 | { 20 | @Inject( 21 | method = "tickRainSplashing", 22 | slice = @Slice( 23 | from = @At(value = "INVOKE", target = "Lnet/minecraft/block/CampfireBlock;isLitCampfire(Lnet/minecraft/block/BlockState;)Z"), 24 | to = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;addParticle(Lnet/minecraft/particle/ParticleEffect;DDDDDD)V") 25 | ), 26 | at = @At( 27 | value = "FIELD", 28 | target = "Lnet/minecraft/client/render/WorldRenderer;client:Lnet/minecraft/client/MinecraftClient;", 29 | opcode = Opcodes.GETFIELD)) 30 | private void modifyParticleEffect(Camera camera, CallbackInfo ci, @Local FluidState fluidState, @Local LocalRef particleEffect) 31 | { 32 | if (fluidState.isIn(FluidTags.WATER) && Main.CONFIG.rainRipples()) 33 | { 34 | particleEffect.set(Particles.WATER_RIPPLE); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/mixin/InvokerLivingEntity.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.mixin; 2 | 3 | import net.minecraft.entity.LivingEntity; 4 | import net.minecraft.item.ItemStack; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Invoker; 7 | 8 | @Mixin(LivingEntity.class) 9 | public interface InvokerLivingEntity 10 | { 11 | @Invoker("spawnItemParticles") 12 | void spawnParticles(ItemStack stack, int count); 13 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/CascadeParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.*; 6 | import net.minecraft.client.world.ClientWorld; 7 | import net.minecraft.particle.DefaultParticleType; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Vec3d; 10 | 11 | public class CascadeParticle extends SpriteBillboardParticle 12 | { 13 | protected final SpriteProvider provider; 14 | 15 | protected CascadeParticle(ClientWorld clientWorld, double x, double y, double z, SpriteProvider provider) 16 | { 17 | super(clientWorld, x, y, z); 18 | this.provider = provider; 19 | maxAge = 9; 20 | scale = 1f; 21 | gravityStrength = 0.4f; 22 | setVelocity(random.nextDouble() * 0.25f - 0.125f, 0, random.nextDouble() * 0.25f - 0.125f); 23 | setSpriteForAge(provider); 24 | removeIfInsideSolidBlock(); 25 | } 26 | 27 | @Override 28 | public void tick() 29 | { 30 | super.tick(); 31 | 32 | removeIfInsideSolidBlock(); 33 | 34 | setSpriteForAge(provider); 35 | } 36 | 37 | private void removeIfInsideSolidBlock() 38 | { 39 | BlockPos pos = BlockPos.ofFloored(new Vec3d(x, y, z)); 40 | if (world.getBlockState(pos).isSolidBlock(world, pos)) 41 | { 42 | alpha = 0; 43 | markDead(); 44 | } 45 | } 46 | 47 | @Override 48 | public ParticleTextureSheet getType() 49 | { 50 | return ParticleTextureSheet.PARTICLE_SHEET_OPAQUE; 51 | } 52 | 53 | @Environment(EnvType.CLIENT) 54 | public static class Factory implements ParticleFactory 55 | { 56 | private final SpriteProvider provider; 57 | 58 | public Factory(SpriteProvider provider) 59 | { 60 | this.provider = provider; 61 | } 62 | 63 | @Override 64 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 65 | { 66 | return new CascadeParticle(world, x, y, z, provider); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/CaveDustParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles; 2 | 3 | import com.chailotl.particular.Main; 4 | import io.wispforest.owo.ui.core.Color; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.client.particle.*; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | 11 | import java.awt.*; 12 | 13 | public class CaveDustParticle extends AscendingParticle 14 | { 15 | protected CaveDustParticle(ClientWorld world, double x, double y, double z, double velocityX, double velocityY, double velocityZ, float scaleMultiplier, SpriteProvider spriteProvider) 16 | { 17 | super(world, x, y, z, 0, 0, 0, velocityX, velocityY, velocityZ, scaleMultiplier, spriteProvider, 0, Main.CONFIG.caveDustSettings.baseMaxAge(), 0, true); 18 | 19 | Color color = Main.CONFIG.caveDustSettings.color(); 20 | red = color.red(); 21 | green = color.green(); 22 | blue = color.blue(); 23 | 24 | gravityStrength = (random.nextFloat() - 0.5f) * Main.CONFIG.caveDustSettings.maxAcceleration(); 25 | } 26 | 27 | @Override 28 | public void tick() 29 | { 30 | super.tick(); 31 | 32 | if (random.nextInt(Main.CONFIG.caveDustSettings.accelChangeChance()) == 0) 33 | { 34 | gravityStrength = (random.nextFloat() - 0.5f) * Main.CONFIG.caveDustSettings.maxAcceleration(); 35 | } 36 | 37 | int fadeDuration = Main.CONFIG.caveDustSettings.fadeDuration(); 38 | 39 | if (age <= fadeDuration) 40 | { 41 | alpha = age / (float)fadeDuration; 42 | } 43 | else if (age > maxAge - fadeDuration) 44 | { 45 | alpha = (maxAge - age) / (float)fadeDuration; 46 | } 47 | } 48 | 49 | public ParticleTextureSheet getType() 50 | { 51 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 52 | } 53 | 54 | @Environment(EnvType.CLIENT) 55 | public static class Factory implements ParticleFactory 56 | { 57 | private final SpriteProvider provider; 58 | 59 | public Factory(SpriteProvider provider) 60 | { 61 | this.provider = provider; 62 | } 63 | 64 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, double y, double z, double velX, double velY, double velZ) 65 | { 66 | return new CaveDustParticle(clientWorld, x, y, z, 0, 0, 0, 1.0F, provider); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/EnderBubbleParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import com.chailotl.particular.mixin.AccessorBillboardParticle; 6 | import net.fabricmc.api.EnvType; 7 | import net.fabricmc.api.Environment; 8 | import net.minecraft.client.MinecraftClient; 9 | import net.minecraft.client.particle.BubbleColumnUpParticle; 10 | import net.minecraft.client.particle.Particle; 11 | import net.minecraft.client.particle.ParticleFactory; 12 | import net.minecraft.client.particle.SpriteProvider; 13 | import net.minecraft.client.world.ClientWorld; 14 | import net.minecraft.particle.DefaultParticleType; 15 | 16 | public class EnderBubbleParticle extends BubbleColumnUpParticle 17 | { 18 | protected EnderBubbleParticle(ClientWorld clientWorld, double d, double e, double f, double g, double h, double i) 19 | { 20 | super(clientWorld, d, e, f, g, h, i); 21 | } 22 | 23 | @Override 24 | public void tick() 25 | { 26 | super.tick(); 27 | 28 | if (!Main.CONFIG.poppingBubbles()) { return; } 29 | 30 | if (this.dead) 31 | { 32 | Particle bubble = MinecraftClient.getInstance().particleManager.addParticle(Particles.ENDER_BUBBLE_POP, x, y, z, 0, 0, 0); 33 | if (bubble != null) 34 | { 35 | ((AccessorBillboardParticle) bubble).setScale(this.scale * 2f); 36 | } 37 | } 38 | } 39 | 40 | @Environment(EnvType.CLIENT) 41 | public static class Factory implements ParticleFactory 42 | { 43 | private final SpriteProvider spriteProvider; 44 | 45 | public Factory(SpriteProvider spriteProvider) 46 | { 47 | this.spriteProvider = spriteProvider; 48 | } 49 | 50 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double d, double e, double f, double g, double h, double i) 51 | { 52 | EnderBubbleParticle enderBubbleParticle = new EnderBubbleParticle(clientWorld, d, e, f, g, h, i); 53 | enderBubbleParticle.setSprite(this.spriteProvider); 54 | return enderBubbleParticle; 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/FireflyParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles; 2 | 3 | import com.chailotl.particular.mixin.AccessorChestBlockEntity; 4 | import com.chailotl.particular.mixin.AccessorParticle; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.client.particle.*; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | import net.minecraft.sound.SoundCategory; 11 | import net.minecraft.sound.SoundEvents; 12 | import net.minecraft.util.math.Box; 13 | import net.minecraft.util.math.noise.SimplexNoiseSampler; 14 | import org.spongepowered.asm.mixin.Unique; 15 | 16 | public class FireflyParticle extends SpriteBillboardParticle 17 | { 18 | private static final int minOffTime = 20 * 2; 19 | private static final int maxOffTime = 20 * 4; 20 | private static final int minOnTime = 10; 21 | private static final int maxOnTime = 20; 22 | 23 | private final SimplexNoiseSampler noise; 24 | private int ageOffset = 0; 25 | private int ticksUntilNextSwitch = 40; 26 | private boolean isOn = false; 27 | 28 | protected FireflyParticle(ClientWorld world, double x, double y, double z, SpriteProvider provider) 29 | { 30 | super(world, x, y, z); 31 | setSprite(provider); 32 | 33 | gravityStrength = 0; 34 | velocityX = 0; 35 | velocityY = 0; 36 | velocityZ = 0; 37 | 38 | alpha = 0; 39 | red = 187f/255f; 40 | green = 1f; 41 | blue = 107f/255f; 42 | 43 | if (world.getRandom().nextInt(10) == 1) 44 | { 45 | red = 107f/255f; 46 | green = 250/255f; 47 | blue = 1f; 48 | 49 | if (world.getRandom().nextInt(10) == 1) 50 | { 51 | red = 1f; 52 | green = 124/255f; 53 | blue = 107/255f; 54 | } 55 | } 56 | 57 | maxAge = 200; 58 | scale = 1/4f; 59 | 60 | noise = new SimplexNoiseSampler(random); 61 | } 62 | 63 | @Override 64 | public void tick() 65 | { 66 | super.tick(); 67 | 68 | if (onGround) 69 | { 70 | ((AccessorParticle) this).setField_21507(false); 71 | ageOffset += 5; 72 | } 73 | 74 | if (--ticksUntilNextSwitch <= 0) 75 | { 76 | if (isOn) 77 | { 78 | isOn = false; 79 | ticksUntilNextSwitch = random.nextBetween(minOffTime, maxOffTime); 80 | } 81 | else 82 | { 83 | isOn = true; 84 | ticksUntilNextSwitch = random.nextBetween(minOnTime, maxOnTime); 85 | } 86 | } 87 | 88 | alpha = isOn && (maxAge - age) > 3 ? Math.min(1, alpha + 0.33f) : Math.max(0, alpha - 0.33f); 89 | 90 | // Broad movement 91 | float speedFactor = 1 / 10f; 92 | float noiseFactor = 1 / 300f; 93 | velocityX = noise.sample(age * noiseFactor, age * noiseFactor) * speedFactor; 94 | velocityY = noise.sample((age + ageOffset) * noiseFactor - 50f, (age + ageOffset) * noiseFactor + 100f) * speedFactor * 0.5f; 95 | velocityZ = noise.sample(age * noiseFactor + 100f, age * noiseFactor - 50f) * speedFactor; 96 | 97 | // Granular movement 98 | speedFactor = 1 / (10f + (float) Math.sin(Math.PI + age / 30f) * 2f); 99 | noiseFactor = 1 / 30f; 100 | velocityX += noise.sample(age * noiseFactor, age * noiseFactor) * speedFactor * 0.5f; 101 | velocityY += noise.sample((age + ageOffset) * noiseFactor - 50f, (age + ageOffset) * noiseFactor + 100f) * speedFactor; 102 | velocityZ += noise.sample(age * noiseFactor + 100f, age * noiseFactor - 50f) * speedFactor * 0.5f; 103 | } 104 | 105 | @Override 106 | protected int getBrightness(float tint) 107 | { 108 | return 15728880; 109 | } 110 | 111 | @Override 112 | public ParticleTextureSheet getType() 113 | { 114 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 115 | } 116 | 117 | @Environment(EnvType.CLIENT) 118 | public static class Factory implements ParticleFactory 119 | { 120 | private final SpriteProvider provider; 121 | 122 | public Factory(SpriteProvider provider) 123 | { 124 | this.provider = provider; 125 | } 126 | 127 | @Override 128 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 129 | { 130 | return new FireflyParticle(world, x, y, z, provider); 131 | } 132 | } 133 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/WaterRippleParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.*; 6 | import net.minecraft.client.render.Camera; 7 | import net.minecraft.client.render.VertexConsumer; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | import net.minecraft.util.math.MathHelper; 11 | import net.minecraft.util.math.Vec3d; 12 | import org.joml.Vector3f; 13 | 14 | public class WaterRippleParticle extends SpriteBillboardParticle 15 | { 16 | protected final SpriteProvider provider; 17 | 18 | protected WaterRippleParticle(ClientWorld world, double x, double y, double z, SpriteProvider provider) 19 | { 20 | super(world, x, y, z); 21 | maxAge = 7; 22 | alpha = 0.2f; 23 | scale = 0.25f; 24 | this.provider = provider; 25 | setSpriteForAge(provider); 26 | } 27 | 28 | @Override 29 | public void tick() 30 | { 31 | prevPosX = x; 32 | prevPosY = y; 33 | prevPosZ = z; 34 | if (age++ >= maxAge) 35 | { 36 | markDead(); 37 | } 38 | else 39 | { 40 | setSpriteForAge(provider); 41 | } 42 | } 43 | 44 | @Override 45 | public ParticleTextureSheet getType() 46 | { 47 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 48 | } 49 | 50 | @Override 51 | public void buildGeometry(VertexConsumer vertexConsumer, Camera camera, float tickDelta) 52 | { 53 | Vec3d vec3d = camera.getPos(); 54 | float f = (float)(MathHelper.lerp(tickDelta, prevPosX, x) - vec3d.getX()); 55 | float g = (float)(MathHelper.lerp(tickDelta, prevPosY, y) - vec3d.getY()); 56 | float h = (float)(MathHelper.lerp(tickDelta, prevPosZ, z) - vec3d.getZ()); 57 | 58 | Vector3f[] vector3fs = new Vector3f[]{new Vector3f(-1.0F, 0.0F, -1.0f), new Vector3f(-1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, -1.0F)}; 59 | float j = getSize(tickDelta); 60 | 61 | for (int k = 0; k < 4; ++k) 62 | { 63 | Vector3f vector3f2 = vector3fs[k]; 64 | vector3f2.mul(j); 65 | vector3f2.add(f, g, h); 66 | } 67 | 68 | float l = getMinU(); 69 | float m = getMaxU(); 70 | float n = getMinV(); 71 | float o = getMaxV(); 72 | int p = getBrightness(tickDelta); 73 | vertexConsumer.vertex(vector3fs[0].x(), vector3fs[0].y(), vector3fs[0].z()).texture(m, o).color(red, green, blue, alpha).light(p).next(); 74 | vertexConsumer.vertex(vector3fs[1].x(), vector3fs[1].y(), vector3fs[1].z()).texture(m, n).color(red, green, blue, alpha).light(p).next(); 75 | vertexConsumer.vertex(vector3fs[2].x(), vector3fs[2].y(), vector3fs[2].z()).texture(l, n).color(red, green, blue, alpha).light(p).next(); 76 | vertexConsumer.vertex(vector3fs[3].x(), vector3fs[3].y(), vector3fs[3].z()).texture(l, o).color(red, green, blue, alpha).light(p).next(); 77 | } 78 | 79 | @Environment(EnvType.CLIENT) 80 | public static class Factory implements ParticleFactory 81 | { 82 | private final SpriteProvider provider; 83 | 84 | public Factory(SpriteProvider provider) 85 | { 86 | this.provider = provider; 87 | } 88 | 89 | @Override 90 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 91 | { 92 | return new WaterRippleParticle(world, x, y, z, provider); 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/WaterfallSprayParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.color.world.BiomeColors; 6 | import net.minecraft.client.particle.Particle; 7 | import net.minecraft.client.particle.ParticleFactory; 8 | import net.minecraft.client.particle.RainSplashParticle; 9 | import net.minecraft.client.particle.SpriteProvider; 10 | import net.minecraft.client.world.ClientWorld; 11 | import net.minecraft.fluid.FluidState; 12 | import net.minecraft.particle.DefaultParticleType; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.util.math.Direction; 15 | 16 | import java.awt.*; 17 | 18 | public class WaterfallSprayParticle extends RainSplashParticle 19 | { 20 | protected WaterfallSprayParticle(ClientWorld clientWorld, double d, double e, double f, double g, double h, double i) 21 | { 22 | super(clientWorld, d, e, f); 23 | 24 | velocityX += g; 25 | velocityY *= 0.75f; 26 | velocityZ += i; 27 | 28 | Color color = new Color(BiomeColors.getWaterColor(clientWorld, BlockPos.ofFloored(x, y, z))); 29 | red = color.getRed() / 255f; 30 | green = color.getGreen() / 255f; 31 | blue = color.getBlue() / 255f; 32 | } 33 | 34 | @Override 35 | public void tick() 36 | { 37 | prevPosX = x; 38 | prevPosY = y; 39 | prevPosZ = z; 40 | 41 | if (maxAge-- <= 0) 42 | { 43 | markDead(); 44 | } 45 | else 46 | { 47 | velocityY -= gravityStrength; 48 | move(velocityX, velocityY, velocityZ); 49 | velocityX *= 0.9800000190734863; 50 | velocityY *= 0.9800000190734863; 51 | velocityZ *= 0.9800000190734863; 52 | 53 | if (onGround) 54 | { 55 | if (Math.random() < 0.5) 56 | { 57 | markDead(); 58 | } 59 | 60 | velocityX *= 0.699999988079071; 61 | velocityZ *= 0.699999988079071; 62 | } 63 | 64 | BlockPos blockPos = BlockPos.ofFloored(x, y, z); 65 | double d = world.getBlockState(blockPos).getCollisionShape(world, blockPos).getEndingCoord(Direction.Axis.Y, x - (double)blockPos.getX(), z - (double)blockPos.getZ()); 66 | 67 | FluidState fluidState = world.getFluidState(blockPos); 68 | if (fluidState.isStill()) 69 | { 70 | d = Math.max(d, fluidState.getHeight(world, blockPos)); 71 | } 72 | 73 | if (d > 0.0 && y < (double)blockPos.getY() + d) 74 | { 75 | markDead(); 76 | } 77 | } 78 | } 79 | 80 | @Environment(EnvType.CLIENT) 81 | public static class Factory implements ParticleFactory 82 | { 83 | private final SpriteProvider spriteProvider; 84 | 85 | public Factory(SpriteProvider spriteProvider) 86 | { 87 | this.spriteProvider = spriteProvider; 88 | } 89 | 90 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double d, double e, double f, double g, double h, double i) 91 | { 92 | WaterfallSprayParticle waterfallSprayParticle = new WaterfallSprayParticle(clientWorld, d, e, f, g, h, i); 93 | waterfallSprayParticle.setSprite(this.spriteProvider); 94 | return waterfallSprayParticle; 95 | } 96 | } 97 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/leaves/BigLeafParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.leaves; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.Particle; 6 | import net.minecraft.client.particle.ParticleFactory; 7 | import net.minecraft.client.particle.SpriteProvider; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | 11 | public class BigLeafParticle extends LeafParticle 12 | { 13 | protected BigLeafParticle(ClientWorld world, double x, double y, double z, double r, double g, double b, SpriteProvider provider) 14 | { 15 | super(world, x, y, z, r, g, b, provider); 16 | 17 | rotateFactor = 9f + ((float) Math.random() * 3f); 18 | scale = 9f / 32f; 19 | } 20 | 21 | @Environment(EnvType.CLIENT) 22 | public static class Factory implements ParticleFactory 23 | { 24 | private final SpriteProvider provider; 25 | 26 | public Factory(SpriteProvider provider) 27 | { 28 | this.provider = provider; 29 | } 30 | 31 | @Override 32 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 33 | { 34 | return new BigLeafParticle(world, x, y, z, velX, velY, velZ, provider); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/leaves/ConiferLeafParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.leaves; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.Particle; 6 | import net.minecraft.client.particle.ParticleFactory; 7 | import net.minecraft.client.particle.SpriteProvider; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | 11 | public class ConiferLeafParticle extends LeafParticle 12 | { 13 | protected ConiferLeafParticle(ClientWorld world, double x, double y, double z, double r, double g, double b, SpriteProvider provider) 14 | { 15 | super(world, x, y, z, r, g, b, provider); 16 | 17 | gravityFactor = 0.3f; 18 | } 19 | 20 | @Environment(EnvType.CLIENT) 21 | public static class Factory implements ParticleFactory 22 | { 23 | private final SpriteProvider provider; 24 | 25 | public Factory(SpriteProvider provider) 26 | { 27 | this.provider = provider; 28 | } 29 | 30 | @Override 31 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 32 | { 33 | return new ConiferLeafParticle(world, x, y, z, velX, velY, velZ, provider); 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/leaves/LeafParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.leaves; 2 | 3 | import com.chailotl.particular.Main; 4 | import com.chailotl.particular.Particles; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.client.particle.*; 8 | import net.minecraft.client.render.Camera; 9 | import net.minecraft.client.render.VertexConsumer; 10 | import net.minecraft.client.world.ClientWorld; 11 | import net.minecraft.fluid.FluidState; 12 | import net.minecraft.particle.DefaultParticleType; 13 | import net.minecraft.registry.tag.FluidTags; 14 | import net.minecraft.util.math.BlockPos; 15 | import net.minecraft.util.math.MathHelper; 16 | import net.minecraft.util.math.Vec3d; 17 | import org.joml.Quaternionf; 18 | import org.joml.Vector3f; 19 | 20 | public class LeafParticle extends SpriteBillboardParticle 21 | { 22 | protected static final int fadeInDuration = 10; 23 | protected static final int rampUpDuration = 20; 24 | protected static final int fadeOutDuration = 100; 25 | 26 | protected float rotateFactor; 27 | protected float gravityFactor = 0.075f; 28 | protected final boolean flippedSprite; 29 | protected final int flippedDirection; 30 | protected boolean expiring = false; 31 | 32 | protected LeafParticle(ClientWorld world, double x, double y, double z, double r, double g, double b, SpriteProvider provider) 33 | { 34 | super(world, x, y, z, r, g, b); 35 | setSprite(provider); 36 | 37 | collidesWithWorld = true; 38 | gravityStrength = 0; 39 | maxAge = 200; 40 | 41 | velocityX = 0; 42 | velocityY = 0; 43 | velocityZ = 0; 44 | 45 | alpha = 0; 46 | red = (float) r; 47 | green = (float) g; 48 | blue = (float) b; 49 | rotateFactor = 6f + ((float) Math.random() * 3f); 50 | flippedSprite = random.nextBoolean(); 51 | flippedDirection = random.nextBoolean() ? 1 : -1; 52 | 53 | scale = 7f / 32f; 54 | } 55 | 56 | protected float clamp(float value, float min, float max) 57 | { 58 | return Math.max(min, Math.min(max, value)); 59 | } 60 | 61 | protected float getAngle() 62 | { 63 | int time = age - fadeInDuration; 64 | float speed = rotateFactor; 65 | float amplitude = clamp(time, 0, 30) / 30f; 66 | return (float) Math.sin(time / speed) * amplitude * 0.5f * flippedDirection; 67 | } 68 | 69 | @Override 70 | public void tick() 71 | { 72 | super.tick(); 73 | 74 | if (age <= fadeInDuration) 75 | { 76 | velocityY = 0; 77 | } 78 | else if (!expiring && (onGround || velocityY == 0)) 79 | { 80 | expiring = true; 81 | age = maxAge - fadeOutDuration; 82 | y += 0.01d; 83 | if (Main.CONFIG.fallingLeavesSettings.layFlatOnGround()) 84 | { 85 | if (Main.CONFIG.fallingLeavesSettings.layFlatRightAngles()) 86 | { 87 | angle = (float)(random.nextInt(4) / 2.0 * Math.PI); 88 | } 89 | else 90 | { 91 | angle = (float)(Math.random() * Math.PI * 2.0); 92 | } 93 | } 94 | } 95 | 96 | prevAngle = angle; 97 | 98 | BlockPos pos = BlockPos.ofFloored(x, y, z); 99 | FluidState fluidState = world.getFluidState(pos); 100 | if (fluidState.isIn(FluidTags.WATER)) 101 | { 102 | if (gravityStrength > 0) 103 | { 104 | y = pos.getY() + fluidState.getHeight(world, pos); 105 | if (Main.CONFIG.fallingLeavesSettings.spawnRipples()) 106 | { 107 | world.addParticle(Particles.WATER_RIPPLE, x, y, z, 0, 0, 0); 108 | } 109 | } 110 | 111 | // Float on top of water 112 | velocityY = 0; 113 | gravityStrength = 0; 114 | // investigate this 115 | } 116 | else if (age >= fadeInDuration) 117 | { 118 | gravityStrength = gravityFactor; 119 | if (!onGround) 120 | { 121 | angle = getAngle(); 122 | } 123 | } 124 | } 125 | 126 | @Override 127 | public ParticleTextureSheet getType() 128 | { 129 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 130 | } 131 | 132 | @Override 133 | public void buildGeometry(VertexConsumer vertexConsumer, Camera camera, float tickDelta) 134 | { 135 | Vec3d vec3d = camera.getPos(); 136 | float f = (float)(MathHelper.lerp(tickDelta, prevPosX, x) - vec3d.getX()); 137 | float g = (float)(MathHelper.lerp(tickDelta, prevPosY, y) - vec3d.getY()); 138 | float h = (float)(MathHelper.lerp(tickDelta, prevPosZ, z) - vec3d.getZ()); 139 | 140 | Vector3f[] vector3fs; 141 | float j = getSize(tickDelta); 142 | 143 | if (!expiring || !Main.CONFIG.fallingLeavesSettings.layFlatOnGround()) 144 | { 145 | vector3fs = new Vector3f[]{new Vector3f(-1.0F, -1.0F, 0.0F), new Vector3f(-1.0F, 1.0F, 0.0F), new Vector3f(1.0F, 1.0F, 0.0F), new Vector3f(1.0F, -1.0F, 0.0F)}; 146 | 147 | Quaternionf quaternionf; 148 | if (angle == 0.0F) 149 | { 150 | quaternionf = camera.getRotation(); 151 | } 152 | else 153 | { 154 | quaternionf = new Quaternionf(camera.getRotation()); 155 | quaternionf.rotateZ(MathHelper.lerp(tickDelta, prevAngle, angle)); 156 | } 157 | 158 | for (int k = 0; k < 4; ++k) 159 | { 160 | Vector3f vector3f = vector3fs[k]; 161 | vector3f.rotate(quaternionf); 162 | vector3f.mul(j); 163 | vector3f.add(f, g, h); 164 | } 165 | } 166 | else 167 | { 168 | vector3fs = new Vector3f[]{new Vector3f(-1.0F, 0.0F, -1.0f), new Vector3f(-1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, -1.0F)}; 169 | 170 | for (int k = 0; k < 4; ++k) 171 | { 172 | Vector3f vector3f = vector3fs[k]; 173 | vector3f.rotateAxis(angle, 0, 1, 0); 174 | vector3f.mul(j); 175 | vector3f.add(f, g, h); 176 | } 177 | } 178 | 179 | float ageDelta = MathHelper.lerp(tickDelta, age, age + 1); 180 | if (age <= fadeInDuration) 181 | { 182 | alpha = ageDelta / (float)fadeInDuration; 183 | } 184 | else if (age > maxAge - fadeOutDuration) 185 | { 186 | ++ageDelta; 187 | alpha = (maxAge - ageDelta) / (float)fadeOutDuration; 188 | } 189 | else 190 | { 191 | alpha = 1; 192 | } 193 | 194 | float l = getMinU(); 195 | float m = getMaxU(); 196 | float n = getMinV(); 197 | float o = getMaxV(); 198 | int p = getBrightness(tickDelta); 199 | if (flippedSprite) 200 | { 201 | float temp = l; 202 | l = m; 203 | m = temp; 204 | } 205 | 206 | vertexConsumer.vertex(vector3fs[0].x(), vector3fs[0].y(), vector3fs[0].z()).texture(m, o).color(red, green, blue, alpha).light(p).next(); 207 | vertexConsumer.vertex(vector3fs[1].x(), vector3fs[1].y(), vector3fs[1].z()).texture(m, n).color(red, green, blue, alpha).light(p).next(); 208 | vertexConsumer.vertex(vector3fs[2].x(), vector3fs[2].y(), vector3fs[2].z()).texture(l, n).color(red, green, blue, alpha).light(p).next(); 209 | vertexConsumer.vertex(vector3fs[3].x(), vector3fs[3].y(), vector3fs[3].z()).texture(l, o).color(red, green, blue, alpha).light(p).next(); 210 | } 211 | 212 | @Environment(EnvType.CLIENT) 213 | public static class Factory implements ParticleFactory 214 | { 215 | private final SpriteProvider provider; 216 | 217 | public Factory(SpriteProvider provider) 218 | { 219 | this.provider = provider; 220 | } 221 | 222 | @Override 223 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 224 | { 225 | return new LeafParticle(world, x, y, z, velX, velY, velZ, provider); 226 | } 227 | } 228 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/leaves/SpinningLeafParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.leaves; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.Particle; 6 | import net.minecraft.client.particle.ParticleFactory; 7 | import net.minecraft.client.particle.SpriteProvider; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | 11 | public class SpinningLeafParticle extends LeafParticle 12 | { 13 | protected float angleFactor; 14 | 15 | protected SpinningLeafParticle(ClientWorld world, double x, double y, double z, double r, double g, double b, SpriteProvider provider) 16 | { 17 | super(world, x, y, z, r, g, b, provider); 18 | 19 | angleFactor = (float) (Math.random() * Math.PI * 2.0); 20 | angle = getAngle(); 21 | } 22 | 23 | @Override 24 | protected float getAngle() 25 | { 26 | int a = Math.max(0, age - fadeInDuration); 27 | return (angleFactor + a / (rotateFactor + (maxAge - a) / 100f) / 2f) * flippedDirection; 28 | } 29 | 30 | @Environment(EnvType.CLIENT) 31 | public static class Factory implements ParticleFactory 32 | { 33 | private final SpriteProvider provider; 34 | 35 | public Factory(SpriteProvider provider) 36 | { 37 | this.provider = provider; 38 | } 39 | 40 | @Override 41 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velX, double velY, double velZ) 42 | { 43 | return new SpinningLeafParticle(world, x, y, z, velX, velY, velZ, provider); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/splashes/WaterSplashEmitterParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.splashes; 2 | 3 | import com.chailotl.particular.Particles; 4 | import com.chailotl.particular.mixin.AccessorBillboardParticle; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.client.MinecraftClient; 8 | import net.minecraft.client.particle.*; 9 | import net.minecraft.client.world.ClientWorld; 10 | import net.minecraft.particle.DefaultParticleType; 11 | import net.minecraft.particle.ParticleTypes; 12 | import net.minecraft.registry.tag.FluidTags; 13 | import net.minecraft.util.math.BlockPos; 14 | 15 | public class WaterSplashEmitterParticle extends NoRenderParticle 16 | { 17 | private final float speed; 18 | private final float width; 19 | private final float height; 20 | 21 | WaterSplashEmitterParticle(ClientWorld clientWorld, double x, double y, double z, float width, float speed) 22 | { 23 | super(clientWorld, x, y, z); 24 | speed = Math.min(2, speed); 25 | gravityStrength = 0; 26 | maxAge = 24; 27 | this.speed = speed; 28 | this.width = width; 29 | this.height = (speed / 2f + width / 3f); 30 | 31 | clientWorld.addParticle(Particles.WATER_SPLASH, true, x, y, z, width, this.height, 0); 32 | clientWorld.addParticle(Particles.WATER_SPLASH_FOAM, true, x, y, z, width, this.height, 0); 33 | clientWorld.addParticle(Particles.WATER_SPLASH_RING, true, x, y, z, width, 0, 0); 34 | 35 | if (speed > 0.5) 36 | { 37 | splash(width, (1.5f/8f + speed * 1/8f) + (width / 6f), 0.15f); 38 | } 39 | else 40 | { 41 | markDead(); 42 | } 43 | } 44 | 45 | @Override 46 | public void tick() 47 | { 48 | super.tick(); 49 | 50 | if (age == 8) 51 | { 52 | world.addParticle(Particles.WATER_SPLASH, true, x, y, z, width * 0.66f, height * 2f, 0); 53 | world.addParticle(Particles.WATER_SPLASH_FOAM, true, x, y, z, width * 0.66f, height * 2f, 0); 54 | world.addParticle(Particles.WATER_SPLASH_RING, true, x, y, z, width * 0.66f, 0, 0); 55 | splash(width * 0.66f, (3f/8f + speed * 1/8f) + (width / 6f), 0.05f); 56 | } 57 | 58 | if (!world.getFluidState(BlockPos.ofFloored(x, y, z)).isIn(FluidTags.WATER)) 59 | { 60 | this.markDead(); 61 | } 62 | } 63 | 64 | private void splash(float width, float speed, float spread) 65 | { 66 | for (int i = 0; i < width * 20f; ++i) 67 | { 68 | Particle droplet = MinecraftClient.getInstance().particleManager.addParticle(ParticleTypes.FALLING_WATER, 69 | x, y + 1/16f, z, 0, 0, 0); 70 | if (droplet != null) 71 | { 72 | double xVel = random.nextTriangular(0.0, spread); 73 | double yVel = speed * random.nextTriangular(1.0, 0.25); 74 | double zVel = random.nextTriangular(0.0, spread); 75 | droplet.setPos(x + xVel / spread * width, y + 1/16f, z + zVel / spread * width); 76 | droplet.setVelocity(xVel, yVel, zVel); 77 | droplet.setColor(1f, 1f, 1f); 78 | ((AccessorBillboardParticle) droplet).setScale(1/8f); 79 | } 80 | } 81 | } 82 | 83 | @Environment(EnvType.CLIENT) 84 | public static class Factory implements ParticleFactory 85 | { 86 | public Factory(SpriteProvider provider) { } 87 | 88 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, double y, double z, double g, double h, double i) 89 | { 90 | return new WaterSplashEmitterParticle(clientWorld, x, y, z, (float) g, (float) h); 91 | } 92 | } 93 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/splashes/WaterSplashFoamParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.splashes; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.Particle; 6 | import net.minecraft.client.particle.ParticleFactory; 7 | import net.minecraft.client.particle.SpriteProvider; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | 11 | public class WaterSplashFoamParticle extends WaterSplashParticle 12 | { 13 | WaterSplashFoamParticle(ClientWorld clientWorld, double x, double y, double z, float width, float height, SpriteProvider provider) 14 | { 15 | super(clientWorld, x, y, z, width, height, provider); 16 | colored = false; 17 | } 18 | 19 | @Environment(EnvType.CLIENT) 20 | public static class Factory implements ParticleFactory 21 | { 22 | private final SpriteProvider provider; 23 | 24 | public Factory(SpriteProvider provider) 25 | { 26 | this.provider = provider; 27 | } 28 | 29 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, double y, double z, double g, double h, double i) 30 | { 31 | return new WaterSplashFoamParticle(clientWorld, x, y, z, (float) g, (float) h, provider); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/splashes/WaterSplashParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.splashes; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.client.color.world.BiomeColors; 7 | import net.minecraft.client.particle.*; 8 | import net.minecraft.client.render.Camera; 9 | import net.minecraft.client.render.VertexConsumer; 10 | import net.minecraft.client.world.ClientWorld; 11 | import net.minecraft.particle.DefaultParticleType; 12 | import net.minecraft.registry.tag.FluidTags; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.util.math.MathHelper; 15 | import net.minecraft.util.math.Vec3d; 16 | import org.joml.Vector3f; 17 | 18 | import java.awt.*; 19 | 20 | public class WaterSplashParticle extends SpriteBillboardParticle 21 | { 22 | protected final SpriteProvider provider; 23 | private final float width; 24 | private final float height; 25 | private final Color color; 26 | private final float unit; 27 | protected boolean colored = true; 28 | 29 | WaterSplashParticle(ClientWorld clientWorld, double x, double y, double z, float width, float height, SpriteProvider provider) 30 | { 31 | super(clientWorld, x, y, z); 32 | gravityStrength = 0; 33 | maxAge = 18; 34 | this.width = width; 35 | this.height = height; 36 | this.provider = provider; 37 | setSpriteForAge(provider); 38 | 39 | color = new Color(BiomeColors.getWaterColor(clientWorld, BlockPos.ofFloored(x, y, z))); 40 | unit = 2f / MinecraftClient.getInstance().particleManager.particleAtlasTexture.getWidth(); 41 | } 42 | 43 | public ParticleTextureSheet getType() 44 | { 45 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 46 | } 47 | 48 | @Override 49 | public void tick() 50 | { 51 | super.tick(); 52 | 53 | setSpriteForAge(provider); 54 | 55 | if (!world.getFluidState(BlockPos.ofFloored(x, y, z)).isIn(FluidTags.WATER)) 56 | { 57 | this.markDead(); 58 | } 59 | } 60 | 61 | @Override 62 | public void buildGeometry(VertexConsumer vertexConsumer, Camera camera, float tickDelta) 63 | { 64 | Vec3d vec3d = camera.getPos(); 65 | float f = (float)(MathHelper.lerp(tickDelta, prevPosX, x) - vec3d.getX()); 66 | float g = (float)(MathHelper.lerp(tickDelta, prevPosY, y) - vec3d.getY()); 67 | float h = (float)(MathHelper.lerp(tickDelta, prevPosZ, z) - vec3d.getZ()); 68 | 69 | Vector3f[] vector3fs = new Vector3f[]{new Vector3f(-1.0F, 0.0F, -1.0f), new Vector3f(-1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, -1.0F)}; 70 | float ageDelta = MathHelper.lerp(tickDelta, age - 1, (float)age); 71 | float progress = ageDelta / (float)maxAge; 72 | float scale = width * (0.8f + 0.2f * progress); 73 | 74 | for (int i = 0; i < 4; ++i) 75 | { 76 | Vector3f vector3f2 = vector3fs[i]; 77 | vector3f2.mul(scale); 78 | vector3f2.add(f, g, h); 79 | } 80 | 81 | float l = getMinU() + unit; 82 | float m = getMaxU() - unit; 83 | float n = getMinV(); 84 | float o = getMaxV(); 85 | int light = getBrightness(tickDelta); 86 | int color = colored ? this.color.getRGB() : Color.white.getRGB(); 87 | renderSide(vertexConsumer, vector3fs, 0, 1, height, l, m, n, o, light, color); 88 | renderSide(vertexConsumer, vector3fs, 1, 2, height, l, m, n, o, light, color); 89 | renderSide(vertexConsumer, vector3fs, 2, 3, height, l, m, n, o, light, color); 90 | renderSide(vertexConsumer, vector3fs, 3, 0, height, l, m, n, o, light, color); 91 | } 92 | private void renderSide(VertexConsumer vertexConsumer, Vector3f[] vector3fs, int a, int b, float height, float l, float m, float n, float o, int light, int color) 93 | { 94 | vertexConsumer.vertex(vector3fs[a].x(), vector3fs[a].y(), vector3fs[a].z()).texture(l, o).color(color).light(light).next(); 95 | vertexConsumer.vertex(vector3fs[b].x(), vector3fs[b].y(), vector3fs[b].z()).texture(m, o).color(color).light(light).next(); 96 | vertexConsumer.vertex(vector3fs[b].x(), vector3fs[b].y() + height, vector3fs[b].z()).texture(m, n).color(color).light(light).next(); 97 | vertexConsumer.vertex(vector3fs[a].x(), vector3fs[a].y() + height, vector3fs[a].z()).texture(l, n).color(color).light(light).next(); 98 | 99 | vertexConsumer.vertex(vector3fs[b].x(), vector3fs[b].y(), vector3fs[b].z()).texture(m, o).color(color).light(light).next(); 100 | vertexConsumer.vertex(vector3fs[a].x(), vector3fs[a].y(), vector3fs[a].z()).texture(l, o).color(color).light(light).next(); 101 | vertexConsumer.vertex(vector3fs[a].x(), vector3fs[a].y() + height, vector3fs[a].z()).texture(l, n).color(color).light(light).next(); 102 | vertexConsumer.vertex(vector3fs[b].x(), vector3fs[b].y() + height, vector3fs[b].z()).texture(m, n).color(color).light(light).next(); 103 | } 104 | 105 | @Environment(EnvType.CLIENT) 106 | public static class Factory implements ParticleFactory 107 | { 108 | private final SpriteProvider provider; 109 | 110 | public Factory(SpriteProvider provider) 111 | { 112 | this.provider = provider; 113 | } 114 | 115 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, double y, double z, double g, double h, double i) 116 | { 117 | return new WaterSplashParticle(clientWorld, x, y, z, (float) g, (float) h, provider); 118 | } 119 | } 120 | } -------------------------------------------------------------------------------- /src/main/java/com/chailotl/particular/particles/splashes/WaterSplashRingParticle.java: -------------------------------------------------------------------------------- 1 | package com.chailotl.particular.particles.splashes; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.minecraft.client.particle.*; 6 | import net.minecraft.client.render.Camera; 7 | import net.minecraft.client.render.VertexConsumer; 8 | import net.minecraft.client.world.ClientWorld; 9 | import net.minecraft.particle.DefaultParticleType; 10 | import net.minecraft.registry.tag.FluidTags; 11 | import net.minecraft.util.math.BlockPos; 12 | import net.minecraft.util.math.MathHelper; 13 | import net.minecraft.util.math.Vec3d; 14 | import org.joml.Vector3f; 15 | 16 | public class WaterSplashRingParticle extends SpriteBillboardParticle 17 | { 18 | protected final SpriteProvider provider; 19 | private final float width; 20 | 21 | WaterSplashRingParticle(ClientWorld clientWorld, double x, double y, double z, float width, SpriteProvider provider) 22 | { 23 | super(clientWorld, x, y, z); 24 | gravityStrength = 0; 25 | maxAge = 18; 26 | this.width = width; 27 | this.provider = provider; 28 | setSpriteForAge(provider); 29 | } 30 | 31 | public ParticleTextureSheet getType() 32 | { 33 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 34 | } 35 | 36 | @Override 37 | public void tick() 38 | { 39 | super.tick(); 40 | 41 | setSpriteForAge(provider); 42 | 43 | if (!world.getFluidState(BlockPos.ofFloored(x, y, z)).isIn(FluidTags.WATER)) 44 | { 45 | this.markDead(); 46 | } 47 | } 48 | 49 | @Override 50 | public void buildGeometry(VertexConsumer vertexConsumer, Camera camera, float tickDelta) 51 | { 52 | Vec3d vec3d = camera.getPos(); 53 | float f = (float) (MathHelper.lerp(tickDelta, prevPosX, x) - vec3d.getX()); 54 | float g = (float) (MathHelper.lerp(tickDelta, prevPosY, y) - vec3d.getY()); 55 | float h = (float) (MathHelper.lerp(tickDelta, prevPosZ, z) - vec3d.getZ()); 56 | 57 | Vector3f[] vector3fs = new Vector3f[]{new Vector3f(-1.0F, 0.0F, -1.0f), new Vector3f(-1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, 1.0F), new Vector3f(1.0F, 0.0F, -1.0F)}; 58 | float ageDelta = MathHelper.lerp(tickDelta, age - 1, (float)age); 59 | float progress = ageDelta / (float)maxAge; 60 | float scale = width * (0.8f + 0.2f * progress); 61 | 62 | for (int k = 0; k < 4; ++k) 63 | { 64 | Vector3f vector3f2 = vector3fs[k]; 65 | vector3f2.mul(scale); 66 | vector3f2.add(f, g, h); 67 | } 68 | 69 | float l = getMinU(); 70 | float m = getMaxU(); 71 | float n = getMinV(); 72 | float o = getMaxV(); 73 | int p = getBrightness(tickDelta); 74 | vertexConsumer.vertex(vector3fs[0].x(), vector3fs[0].y(), vector3fs[0].z()).texture(m, o).color(red, green, blue, alpha).light(p).next(); 75 | vertexConsumer.vertex(vector3fs[1].x(), vector3fs[1].y(), vector3fs[1].z()).texture(m, n).color(red, green, blue, alpha).light(p).next(); 76 | vertexConsumer.vertex(vector3fs[2].x(), vector3fs[2].y(), vector3fs[2].z()).texture(l, n).color(red, green, blue, alpha).light(p).next(); 77 | vertexConsumer.vertex(vector3fs[3].x(), vector3fs[3].y(), vector3fs[3].z()).texture(l, o).color(red, green, blue, alpha).light(p).next(); 78 | } 79 | 80 | @Environment(EnvType.CLIENT) 81 | public static class Factory implements ParticleFactory 82 | { 83 | private final SpriteProvider provider; 84 | 85 | public Factory(SpriteProvider provider) 86 | { 87 | this.provider = provider; 88 | } 89 | 90 | public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, double y, double z, double g, double h, double i) 91 | { 92 | return new WaterSplashRingParticle(clientWorld, x, y, z, (float) g, provider); 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/en_ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Particular Configuration", 3 | 4 | "text.config.particular.section.enabledEffects": "Enabled Effects", 5 | "text.config.particular.section.advancedSettings": "Advanced Settings", 6 | "text.config.particular.section.frequencyModifiers": "Frequency Modifiers", 7 | 8 | "text.config.particular.option.waterSplash": "Water Splashes", 9 | "text.config.particular.option.cascades": "Cascades", 10 | "text.config.particular.option.waterfallSpray": "Waterfall Spray", 11 | "text.config.particular.option.fireflies": "Fireflies", 12 | "text.config.particular.option.fallingLeaves": "Falling Leaves", 13 | "text.config.particular.option.caveDust": "Cave Dust", 14 | "text.config.particular.option.chestBubbles": "Chest Bubbles", 15 | "text.config.particular.option.soulSandBubbles": "Chest Bubbles from Soul Sand", 16 | "text.config.particular.option.barrelBubbles": "Barrel Bubbles", 17 | "text.config.particular.option.poppingBubbles": "Popping Bubbles", 18 | "text.config.particular.option.rainRipples": "Rain Ripples", 19 | "text.config.particular.option.waterDripRipples": "Water Drip Ripples", 20 | "text.config.particular.option.cakeEatingParticles": "Cake Eating Particles", 21 | "text.config.particular.option.emissiveLavaDrips": "Emissive Lava Drips", 22 | 23 | "text.config.particular.category.fireflySettings": "Firefly Settings", 24 | "text.config.particular.option.fireflySettings.startTime": "Start Time", 25 | "text.config.particular.option.fireflySettings.endTime": "End Time", 26 | "text.config.particular.option.fireflySettings.canSpawnInRain": "Can Spawn in Rain", 27 | "text.config.particular.option.fireflySettings.minTemp": "Minimum Temperature", 28 | "text.config.particular.option.fireflySettings.maxTemp": "Maximum Temperature", 29 | "text.config.particular.option.fireflySettings.dailyRandom": "Daily Random", 30 | "text.config.particular.option.fireflySettings.grass": "Grass", 31 | "text.config.particular.option.fireflySettings.tallGrass": "Tall Grass", 32 | "text.config.particular.option.fireflySettings.flowers": "Flowers", 33 | "text.config.particular.option.fireflySettings.tallFlowers": "Tall Flowers", 34 | 35 | "text.config.particular.category.fallingLeavesSettings": "Falling Leaves Settings", 36 | "text.config.particular.option.fallingLeavesSettings.spawnChance": "Spawn Chance", 37 | "text.config.particular.option.fallingLeavesSettings.spawnRipples": "Spawn Ripples", 38 | "text.config.particular.option.fallingLeavesSettings.layFlatOnGround": "Lay Flat on the Ground", 39 | "text.config.particular.option.fallingLeavesSettings.layFlatRightAngles": "Right Angle Snap When Laying Flat", 40 | 41 | "text.config.particular.category.caveDustSettings": "Cave Dust Settings", 42 | "text.config.particular.option.caveDustSettings.spawnChance": "Spawn Chance", 43 | "text.config.particular.option.caveDustSettings.baseMaxAge": "Base Max Age", 44 | "text.config.particular.option.caveDustSettings.color": "Colour", 45 | "text.config.particular.option.caveDustSettings.fadeDuration": "Fade Duration", 46 | "text.config.particular.option.caveDustSettings.maxAcceleration": "Max Acceleration", 47 | "text.config.particular.option.caveDustSettings.accelChangeChance": "Acceleration Change Chance", 48 | "text.config.particular.option.caveDustSettings.excludeBiomes": "Exclude Biomes" 49 | } 50 | -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/en_us.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Particular Config", 3 | 4 | "text.config.particular.section.enabledEffects": "Enabled Effects", 5 | "text.config.particular.section.advancedSettings": "Advanced Settings", 6 | "text.config.particular.section.frequencyModifiers": "Frequency Modifiers", 7 | 8 | "text.config.particular.option.waterSplash": "Water Splashes", 9 | "text.config.particular.option.cascades": "Cascades", 10 | "text.config.particular.option.waterfallSpray": "Waterfall Spray", 11 | "text.config.particular.option.fireflies": "Fireflies", 12 | "text.config.particular.option.fallingLeaves": "Falling Leaves", 13 | "text.config.particular.option.caveDust": "Cave Dust", 14 | "text.config.particular.option.chestBubbles": "Chest Bubbles", 15 | "text.config.particular.option.soulSandBubbles": "Chest Bubbles from Soul Sand", 16 | "text.config.particular.option.barrelBubbles": "Barrel Bubbles", 17 | "text.config.particular.option.poppingBubbles": "Popping Bubbles", 18 | "text.config.particular.option.rainRipples": "Rain Ripples", 19 | "text.config.particular.option.waterDripRipples": "Water Drip Ripples", 20 | "text.config.particular.option.cakeEatingParticles": "Cake Eating Particles", 21 | "text.config.particular.option.emissiveLavaDrips": "Emissive Lava Drips", 22 | 23 | "text.config.particular.category.fireflySettings": "Firefly Settings", 24 | "text.config.particular.option.fireflySettings.startTime": "Start Time", 25 | "text.config.particular.option.fireflySettings.endTime": "End Time", 26 | "text.config.particular.option.fireflySettings.canSpawnInRain": "Can Spawn in Rain", 27 | "text.config.particular.option.fireflySettings.minTemp": "Minimum Temperature", 28 | "text.config.particular.option.fireflySettings.maxTemp": "Maximum Temperature", 29 | "text.config.particular.option.fireflySettings.dailyRandom": "Daily Random", 30 | "text.config.particular.option.fireflySettings.grass": "Grass", 31 | "text.config.particular.option.fireflySettings.tallGrass": "Tall Grass", 32 | "text.config.particular.option.fireflySettings.flowers": "Flowers", 33 | "text.config.particular.option.fireflySettings.tallFlowers": "Tall Flowers", 34 | 35 | "text.config.particular.category.fallingLeavesSettings": "Falling Leaves Settings", 36 | "text.config.particular.option.fallingLeavesSettings.spawnChance": "Spawn Chance", 37 | "text.config.particular.option.fallingLeavesSettings.spawnRipples": "Spawn Ripples", 38 | "text.config.particular.option.fallingLeavesSettings.layFlatOnGround": "Lay Flat on the Ground", 39 | "text.config.particular.option.fallingLeavesSettings.layFlatRightAngles": "Right Angle Snap When Laying Flat", 40 | 41 | "text.config.particular.category.caveDustSettings": "Cave Dust Settings", 42 | "text.config.particular.option.caveDustSettings.spawnChance": "Spawn Chance", 43 | "text.config.particular.option.caveDustSettings.baseMaxAge": "Base Max Age", 44 | "text.config.particular.option.caveDustSettings.color": "Color", 45 | "text.config.particular.option.caveDustSettings.fadeDuration": "Fade Duration", 46 | "text.config.particular.option.caveDustSettings.maxAcceleration": "Max Acceleration", 47 | "text.config.particular.option.caveDustSettings.accelChangeChance": "Acceleration Change Chance", 48 | "text.config.particular.option.caveDustSettings.excludeBiomes": "Exclude Biomes" 49 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/es_mx.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Configuración de Particular", 3 | "text.config.particular.option.waterSplash": "Salpicaduras de agua", 4 | "text.config.particular.option.cascades": "Cascadas", 5 | "text.config.particular.option.waterfallSpray": "Rocío de cascada", 6 | "text.config.particular.option.fireflies": "Luciérnagas", 7 | "text.config.particular.option.fallingLeaves": "Hojas cayendo", 8 | "text.config.particular.option.caveDust": "Polvo de cuevas", 9 | "text.config.particular.option.excludeCaveDust": "Biomas excluidos de polvo de cuevas", 10 | "text.config.particular.option.chestBubbles": "Burbujas de cofres", 11 | "text.config.particular.option.soulSandBubbles": "Burbujas de cofres por arena de almas", 12 | "text.config.particular.option.barrelBubbles": "Burbujas de barriles", 13 | "text.config.particular.option.poppingBubbles": "Las burbujas estallan", 14 | "text.config.particular.option.rainRipples": "Ondas de lluvia", 15 | "text.config.particular.option.waterDripRipples": "Ondas de goteo en el agua", 16 | "text.config.particular.option.cakeEatingParticles": "Partículas al comer pastel", 17 | "text.config.particular.option.emissiveLavaDrips": "Gotas de lava emisivas" 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/fr_ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Configuration Particulière", 3 | 4 | "text.config.particular.section.enabledEffects": "Effets Activés", 5 | "text.config.particular.section.advancedSettings": "Paramètres Avancés", 6 | "text.config.particular.section.frequencyModifiers": "Modificateurs de Fréquence", 7 | 8 | "text.config.particular.option.waterSplash": "Éclaboussures d'Eau", 9 | "text.config.particular.option.cascades": "Cascades", 10 | "text.config.particular.option.waterfallSpray": "Pulvérisation de Cascade", 11 | "text.config.particular.option.fireflies": "Lucioles", 12 | "text.config.particular.option.fallingLeaves": "Feuilles Tombantes", 13 | "text.config.particular.option.caveDust": "Poussière de Grotte", 14 | "text.config.particular.option.chestBubbles": "Bulles de Coffre", 15 | "text.config.particular.option.soulSandBubbles": "Bulles de Sable des Âmes", 16 | "text.config.particular.option.barrelBubbles": "Bulles de Tonneau", 17 | "text.config.particular.option.poppingBubbles": "Éclatement de Bulles", 18 | "text.config.particular.option.rainRipples": "Ondes de Pluie", 19 | "text.config.particular.option.waterDripRipples": "Ondes de Gouttes d'Eau", 20 | "text.config.particular.option.cakeEatingParticles": "Particules de Gâteau", 21 | "text.config.particular.option.emissiveLavaDrips": "Gouttes de Lave Émissives", 22 | 23 | "text.config.particular.category.fireflySettings": "Paramètres des Lucioles", 24 | "text.config.particular.option.fireflySettings.startTime": "Heure de Début", 25 | "text.config.particular.option.fireflySettings.endTime": "Heure de Fin", 26 | "text.config.particular.option.fireflySettings.canSpawnInRain": "Peut Apparaître sous la Pluie", 27 | "text.config.particular.option.fireflySettings.minTemp": "Température Minimale", 28 | "text.config.particular.option.fireflySettings.maxTemp": "Température Maximale", 29 | "text.config.particular.option.fireflySettings.dailyRandom": "Aléatoire Quotidien", 30 | "text.config.particular.option.fireflySettings.grass": "Herbe", 31 | "text.config.particular.option.fireflySettings.tallGrass": "Hautes Herbes", 32 | "text.config.particular.option.fireflySettings.flowers": "Fleurs", 33 | "text.config.particular.option.fireflySettings.tallFlowers": "Grandes Fleurs", 34 | 35 | "text.config.particular.category.fallingLeavesSettings": "Paramètres des Feuilles Tombantes", 36 | "text.config.particular.option.fallingLeavesSettings.spawnChance": "Chance d'Apparition", 37 | "text.config.particular.option.fallingLeavesSettings.spawnRipples": "Apparition d'Ondes", 38 | "text.config.particular.option.fallingLeavesSettings.layFlatOnGround": "Se Couchent au Sol", 39 | "text.config.particular.option.fallingLeavesSettings.layFlatRightAngles": "Angles Droits lors de la Chute", 40 | 41 | "text.config.particular.category.caveDustSettings": "Paramètres de la Poussière de Grotte", 42 | "text.config.particular.option.caveDustSettings.spawnChance": "Chance d'Apparition", 43 | "text.config.particular.option.caveDustSettings.baseMaxAge": "Âge Maximal de Base", 44 | "text.config.particular.option.caveDustSettings.color": "Couleur", 45 | "text.config.particular.option.caveDustSettings.fadeDuration": "Durée de Disparition", 46 | "text.config.particular.option.caveDustSettings.maxAcceleration": "Accélération Maximale", 47 | "text.config.particular.option.caveDustSettings.accelChangeChance": "Chance de Changement d'Accélération", 48 | "text.config.particular.option.caveDustSettings.excludeBiomes": "Biomes Exclus" 49 | } 50 | -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/fr_fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Configuration Particulière", 3 | 4 | "text.config.particular.section.enabledEffects": "Effets Activés", 5 | "text.config.particular.section.advancedSettings": "Paramètres Avancés", 6 | "text.config.particular.section.frequencyModifiers": "Modificateurs de Fréquence", 7 | 8 | "text.config.particular.option.waterSplash": "Éclaboussures d'Eau", 9 | "text.config.particular.option.cascades": "Cascades", 10 | "text.config.particular.option.waterfallSpray": "Pulvérisation de Cascade", 11 | "text.config.particular.option.fireflies": "Lucioles", 12 | "text.config.particular.option.fallingLeaves": "Feuilles Tombantes", 13 | "text.config.particular.option.caveDust": "Poussière de Grotte", 14 | "text.config.particular.option.chestBubbles": "Bulles de Coffre", 15 | "text.config.particular.option.soulSandBubbles": "Bulles de Sable des Âmes", 16 | "text.config.particular.option.barrelBubbles": "Bulles de Tonneau", 17 | "text.config.particular.option.poppingBubbles": "Éclatement de Bulles", 18 | "text.config.particular.option.rainRipples": "Ondes de Pluie", 19 | "text.config.particular.option.waterDripRipples": "Ondes de Gouttes d'Eau", 20 | "text.config.particular.option.cakeEatingParticles": "Particules de Gâteau Mangé", 21 | "text.config.particular.option.emissiveLavaDrips": "Gouttes de Lave Émissives", 22 | 23 | "text.config.particular.category.fireflySettings": "Paramètres des Lucioles", 24 | "text.config.particular.option.fireflySettings.startTime": "Heure de Début", 25 | "text.config.particular.option.fireflySettings.endTime": "Heure de Fin", 26 | "text.config.particular.option.fireflySettings.canSpawnInRain": "Peut Apparaître sous la Pluie", 27 | "text.config.particular.option.fireflySettings.minTemp": "Température Minimale", 28 | "text.config.particular.option.fireflySettings.maxTemp": "Température Maximale", 29 | "text.config.particular.option.fireflySettings.dailyRandom": "Aléatoire Quotidien", 30 | "text.config.particular.option.fireflySettings.grass": "Herbe", 31 | "text.config.particular.option.fireflySettings.tallGrass": "Herbes Hautes", 32 | "text.config.particular.option.fireflySettings.flowers": "Fleurs", 33 | "text.config.particular.option.fireflySettings.tallFlowers": "Grandes Fleurs", 34 | 35 | "text.config.particular.category.fallingLeavesSettings": "Paramètres des Feuilles Tombantes", 36 | "text.config.particular.option.fallingLeavesSettings.spawnChance": "Chance d'Apparition", 37 | "text.config.particular.option.fallingLeavesSettings.spawnRipples": "Apparition d'Ondes", 38 | "text.config.particular.option.fallingLeavesSettings.layFlatOnGround": "Reposent à Plat sur le Sol", 39 | "text.config.particular.option.fallingLeavesSettings.layFlatRightAngles": "S'Allongent à Angles Droits", 40 | 41 | "text.config.particular.category.caveDustSettings": "Paramètres de la Poussière de Grotte", 42 | "text.config.particular.option.caveDustSettings.spawnChance": "Chance d'Apparition", 43 | "text.config.particular.option.caveDustSettings.baseMaxAge": "Âge Maximal de Base", 44 | "text.config.particular.option.caveDustSettings.color": "Couleur", 45 | "text.config.particular.option.caveDustSettings.fadeDuration": "Durée de Disparition", 46 | "text.config.particular.option.caveDustSettings.maxAcceleration": "Accélération Maximale", 47 | "text.config.particular.option.caveDustSettings.accelChangeChance": "Chance de Changement d'Accélération", 48 | "text.config.particular.option.caveDustSettings.excludeBiomes": "Exclure les Biomes" 49 | } 50 | -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/ru_ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Конфигурация Particular", 3 | 4 | "text.config.particular.section.enabledEffects": "Включенные эффекты", 5 | "text.config.particular.section.advancedSettings": "Продвинутые настройки", 6 | "text.config.particular.section.frequencyModifiers": "Модификаторы частоты появления", 7 | 8 | "text.config.particular.option.waterSplash": "Брызги от воды", 9 | "text.config.particular.option.cascades": "Пена от водопадов", 10 | "text.config.particular.option.waterfallSpray": "Брызги от водопадов", 11 | "text.config.particular.option.fireflies": "Светлячки", 12 | "text.config.particular.option.fallingLeaves": "Падающие листья", 13 | "text.config.particular.option.caveDust": "Пещерная пыль", 14 | "text.config.particular.option.chestBubbles": "Пузырьки из сундуков", 15 | "text.config.particular.option.soulSandBubbles": "Пузырьки из песка душ", 16 | "text.config.particular.option.barrelBubbles": "Пузырьки из бочек", 17 | "text.config.particular.option.poppingBubbles": "Лопание пузырьков", 18 | "text.config.particular.option.rainRipples": "Рябь от дождя", 19 | "text.config.particular.option.waterDripRipples": "Рябь от стекающих капель воды", 20 | "text.config.particular.option.cakeEatingParticles": "Частицы поедания торта", 21 | "text.config.particular.option.emissiveLavaDrips": "Стекающие капли лавы светятся", 22 | 23 | "text.config.particular.category.fireflySettings": "Настройки светлячков", 24 | "text.config.particular.option.fireflySettings.startTime": "Время начала", 25 | "text.config.particular.option.fireflySettings.endTime": "Время конца", 26 | "text.config.particular.option.fireflySettings.canSpawnInRain": "Могут появляться под дождём", 27 | "text.config.particular.option.fireflySettings.minTemp": "Минимальная температура", 28 | "text.config.particular.option.fireflySettings.maxTemp": "Максимальная температура", 29 | "text.config.particular.option.fireflySettings.dailyRandom": "Случайное значение из списка каждый день", 30 | "text.config.particular.option.fireflySettings.grass": "Появление из травы", 31 | "text.config.particular.option.fireflySettings.tallGrass": "Появление из высокой травы", 32 | "text.config.particular.option.fireflySettings.flowers": "Появление из цветов", 33 | "text.config.particular.option.fireflySettings.tallFlowers": "Появление из высоких цветов", 34 | 35 | "text.config.particular.category.fallingLeavesSettings": "Настройки падающих листьев", 36 | "text.config.particular.option.fallingLeavesSettings.spawnChance": "Шанс появления частиц", 37 | "text.config.particular.option.fallingLeavesSettings.spawnRipples": "Рябь от появления частиц", 38 | "text.config.particular.option.fallingLeavesSettings.layFlatOnGround": "Упавшие листья лежат на земле", 39 | "text.config.particular.option.fallingLeavesSettings.layFlatRightAngles": "Упавшие на землю листья имеют правильный угол", 40 | "text.config.particular.category.caveDustSettings": "Настройки пещерной пыли", 41 | "text.config.particular.option.caveDustSettings.spawnChance": "Шанс появления частиц", 42 | "text.config.particular.option.caveDustSettings.baseMaxAge": "Максимальный возраст частиц", 43 | "text.config.particular.option.caveDustSettings.color": "Цвет частиц", 44 | "text.config.particular.option.caveDustSettings.fadeDuration": "Продолжительность затухания частиц", 45 | "text.config.particular.option.caveDustSettings.maxAcceleration": "Максимальное ускорение частиц", 46 | "text.config.particular.option.caveDustSettings.accelChangeChance": "Шанс изменения ускорения частиц", 47 | "text.config.particular.option.caveDustSettings.excludeBiomes": "Биомы-исключения для появления частиц" 48 | } 49 | -------------------------------------------------------------------------------- /src/main/resources/assets/particular/lang/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "text.config.particular.title": "Particular 配置", 3 | 4 | "text.config.particular.section.enabledEffects": "启用效果", 5 | "text.config.particular.section.advancedSettings": "高级设置", 6 | "text.config.particular.section.frequencyModifiers": "频率更改", 7 | 8 | "text.config.particular.option.waterSplash": "水花", 9 | "text.config.particular.option.cascades": "瀑布", 10 | "text.config.particular.option.waterfallSpray": "瀑布水雾", 11 | "text.config.particular.option.fireflies": "萤火虫", 12 | "text.config.particular.option.fallingLeaves": "落叶", 13 | "text.config.particular.option.caveDust": "洞穴灰尘", 14 | "text.config.particular.option.chestBubbles": "箱子气泡", 15 | "text.config.particular.option.soulSandBubbles": "在箱子下方放置灵魂沙使其自动打开并释放气泡", 16 | "text.config.particular.option.barrelBubbles": "木桶气泡", 17 | "text.config.particular.option.poppingBubbles": "破裂气泡", 18 | "text.config.particular.option.rainRipples": "雨滴涟漪", 19 | "text.config.particular.option.waterDripRipples": "水滴涟漪", 20 | "text.config.particular.option.cakeEatingParticles": "蛋糕食用粒子", 21 | "text.config.particular.option.emissiveLavaDrips": "发光熔岩液滴", 22 | 23 | "text.config.particular.category.fireflySettings": "萤火虫设置", 24 | "text.config.particular.option.fireflySettings.startTime": "开始时间", 25 | "text.config.particular.option.fireflySettings.endTime": "结束时间", 26 | "text.config.particular.option.fireflySettings.canSpawnInRain": "在雨中生成", 27 | "text.config.particular.option.fireflySettings.minTemp": "最小温度", 28 | "text.config.particular.option.fireflySettings.maxTemp": "最大温度", 29 | "text.config.particular.option.fireflySettings.dailyRandom": "每日随机", 30 | "text.config.particular.option.fireflySettings.grass": "草", 31 | "text.config.particular.option.fireflySettings.tallGrass": "高草丛", 32 | "text.config.particular.option.fireflySettings.flowers": "花", 33 | "text.config.particular.option.fireflySettings.tallFlowers": "花丛", 34 | 35 | "text.config.particular.category.fallingLeavesSettings": "落叶设置", 36 | "text.config.particular.option.fallingLeavesSettings.spawnChance": "生成几率", 37 | "text.config.particular.option.fallingLeavesSettings.spawnRipples": "生成涟漪", 38 | "text.config.particular.option.fallingLeavesSettings.layFlatOnGround": "平置于地面", 39 | "text.config.particular.option.fallingLeavesSettings.layFlatRightAngles": "直角放置于地面", 40 | 41 | "text.config.particular.category.caveDustSettings": "洞穴灰尘设置", 42 | "text.config.particular.option.caveDustSettings.spawnChance": "生成几率", 43 | "text.config.particular.option.caveDustSettings.baseMaxAge": "基础最大阶段", 44 | "text.config.particular.option.caveDustSettings.color": "颜色", 45 | "text.config.particular.option.caveDustSettings.fadeDuration": "淡入淡出持续时间", 46 | "text.config.particular.option.caveDustSettings.maxAcceleration": "最大加速度", 47 | "text.config.particular.option.caveDustSettings.accelChangeChance": "加速度改变几率", 48 | "text.config.particular.option.caveDustSettings.excludeBiomes": "黑名单生物群系" 49 | } 50 | -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/acacia_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:acacia_leaf_1", 4 | "particular:acacia_leaf_2" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/azalea_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:azalea_leaf_1", 4 | "particular:azalea_leaf_2", 5 | "particular:azalea_leaf_3", 6 | "particular:azalea_leaf_4", 7 | "particular:azalea_leaf_5", 8 | "particular:azalea_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/bamboo_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:bamboo_leaf_1", 4 | "particular:bamboo_leaf_2", 5 | "particular:bamboo_leaf_3", 6 | "particular:bamboo_leaf_4" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/birch_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:birch_leaf_1", 4 | "particular:birch_leaf_2", 5 | "particular:birch_leaf_3", 6 | "particular:birch_leaf_4", 7 | "particular:birch_leaf_5", 8 | "particular:birch_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/brimwood_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:brimwood_leaf_1", 4 | "particular:brimwood_leaf_2", 5 | "particular:brimwood_leaf_3", 6 | "particular:brimwood_leaf_4", 7 | "particular:brimwood_leaf_5", 8 | "particular:brimwood_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/cascade.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:cascade_0", 4 | "particular:cascade_1", 5 | "particular:cascade_2", 6 | "particular:cascade_3", 7 | "particular:cascade_4", 8 | "particular:cascade_5", 9 | "particular:cascade_6", 10 | "particular:cascade_7", 11 | "particular:cascade_8", 12 | "particular:cascade_9", 13 | "particular:cascade_10", 14 | "particular:cascade_11" 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/cave_dust.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "minecraft:generic_0" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/dark_oak_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:oak_leaf_1", 4 | "particular:oak_leaf_2", 5 | "particular:oak_leaf_3", 6 | "particular:oak_leaf_4", 7 | "particular:oak_leaf_5", 8 | "particular:oak_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ender_bubble.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ender_bubble" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ender_bubble_pop.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ender_bubble_pop_0", 4 | "particular:ender_bubble_pop_1", 5 | "particular:ender_bubble_pop_2", 6 | "particular:ender_bubble_pop_3", 7 | "particular:ender_bubble_pop_4" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/eucalyptus_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:eucalyptus_leaf_1", 4 | "particular:eucalyptus_leaf_2", 5 | "particular:eucalyptus_leaf_3", 6 | "particular:eucalyptus_leaf_4", 7 | "particular:eucalyptus_leaf_5", 8 | "particular:eucalyptus_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/firefly.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:firefly" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/golden_larch_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:golden_larch_leaf_1", 4 | "particular:golden_larch_leaf_2", 5 | "particular:golden_larch_leaf_3" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/jungle_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:jungle_leaf_1", 4 | "particular:jungle_leaf_2", 5 | "particular:jungle_leaf_3" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/kapok_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:kapok_leaf_1", 4 | "particular:kapok_leaf_2", 5 | "particular:kapok_leaf_3", 6 | "particular:kapok_leaf_4" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/larch_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:larch_leaf_1", 4 | "particular:larch_leaf_2", 5 | "particular:larch_leaf_3" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/magnolia_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:magnolia_leaf_1", 4 | "particular:magnolia_leaf_2", 5 | "particular:magnolia_leaf_3", 6 | "particular:magnolia_leaf_4", 7 | "particular:magnolia_leaf_5", 8 | "particular:magnolia_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/mangrove_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:mangrove_leaf_1", 4 | "particular:mangrove_leaf_2", 5 | "particular:mangrove_leaf_3", 6 | "particular:mangrove_leaf_4", 7 | "particular:mangrove_leaf_5", 8 | "particular:mangrove_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/maple_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:maple_leaf_1", 4 | "particular:maple_leaf_2", 5 | "particular:maple_leaf_3" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/oak_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:oak_leaf_1", 4 | "particular:oak_leaf_2", 5 | "particular:oak_leaf_3", 6 | "particular:oak_leaf_4", 7 | "particular:oak_leaf_5", 8 | "particular:oak_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/redwood_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:redwood_leaf_1", 4 | "particular:redwood_leaf_2" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ru_baobab_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ru_baobab_leaf_1", 4 | "particular:ru_baobab_leaf_2", 5 | "particular:ru_baobab_leaf_3", 6 | "particular:ru_baobab_leaf_4" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ru_cypress_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ru_cypress_leaf_1", 4 | "particular:ru_cypress_leaf_2" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ru_palm_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ru_palm_leaf_1", 4 | "particular:ru_palm_leaf_2" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/socotra_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:socotra_leaf_1", 4 | "particular:socotra_leaf_2", 5 | "particular:socotra_leaf_3", 6 | "particular:socotra_leaf_4", 7 | "particular:socotra_leaf_5", 8 | "particular:socotra_leaf_6", 9 | "particular:socotra_leaf_7", 10 | "particular:socotra_leaf_8" 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/spruce_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:spruce_leaf_1", 4 | "particular:spruce_leaf_2" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/water_ripple.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:water_ripple_1", 4 | "particular:water_ripple_2", 5 | "particular:water_ripple_3", 6 | "particular:water_ripple_4", 7 | "particular:water_ripple_5", 8 | "particular:water_ripple_6", 9 | "particular:water_ripple_7" 10 | ] 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/water_splash.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:water_splash_1", 4 | "particular:water_splash_2", 5 | "particular:water_splash_3", 6 | "particular:water_splash_4", 7 | "particular:water_splash_5", 8 | "particular:water_splash_6", 9 | "particular:water_splash_7", 10 | "particular:water_splash_8", 11 | "particular:water_splash_9" 12 | ] 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/water_splash_foam.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:water_splash_foam_1", 4 | "particular:water_splash_foam_2", 5 | "particular:water_splash_foam_3", 6 | "particular:water_splash_foam_4", 7 | "particular:water_splash_foam_5", 8 | "particular:water_splash_foam_6", 9 | "particular:water_splash_foam_7", 10 | "particular:water_splash_foam_8", 11 | "particular:water_splash_foam_9" 12 | ] 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/water_splash_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:water_splash_ring_1", 4 | "particular:water_splash_ring_2", 5 | "particular:water_splash_ring_3", 6 | "particular:water_splash_ring_4", 7 | "particular:water_splash_ring_5", 8 | "particular:water_splash_ring_6", 9 | "particular:water_splash_ring_7", 10 | "particular:water_splash_ring_8", 11 | "particular:water_splash_ring_9" 12 | ] 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/waterfall_spray.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "minecraft:generic_0" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/white_oak_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:white_oak_leaf_1", 4 | "particular:white_oak_leaf_2", 5 | "particular:white_oak_leaf_3", 6 | "particular:white_oak_leaf_4", 7 | "particular:white_oak_leaf_5", 8 | "particular:white_oak_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/white_spruce_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:white_spruce_leaf_1", 4 | "particular:white_spruce_leaf_2" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/willow_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:willow_leaf_1", 4 | "particular:willow_leaf_2", 5 | "particular:willow_leaf_3", 6 | "particular:willow_leaf_4", 7 | "particular:willow_leaf_5", 8 | "particular:willow_leaf_6", 9 | "particular:willow_leaf_7", 10 | "particular:willow_leaf_8" 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ww_baobab_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ww_baobab_leaf_1", 4 | "particular:ww_baobab_leaf_2", 5 | "particular:ww_baobab_leaf_3", 6 | "particular:ww_baobab_leaf_4", 7 | "particular:ww_baobab_leaf_5", 8 | "particular:ww_baobab_leaf_6", 9 | "particular:ww_baobab_leaf_7", 10 | "particular:ww_baobab_leaf_8", 11 | "particular:ww_baobab_leaf_9", 12 | "particular:ww_baobab_leaf_10" 13 | ] 14 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ww_cypress_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ww_cypress_leaf_1", 4 | "particular:ww_cypress_leaf_2", 5 | "particular:ww_cypress_leaf_3", 6 | "particular:ww_cypress_leaf_4", 7 | "particular:ww_cypress_leaf_5", 8 | "particular:ww_cypress_leaf_6" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/particles/ww_palm_leaf.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "particular:ww_palm_leaf_1", 4 | "particular:ww_palm_leaf_2", 5 | "particular:ww_palm_leaf_3", 6 | "particular:ww_palm_leaf_4" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/acacia_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/acacia_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/acacia_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/acacia_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/azalea_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/azalea_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/azalea_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/azalea_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/azalea_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/azalea_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/azalea_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/azalea_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/azalea_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/azalea_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/azalea_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/azalea_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/bamboo_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/bamboo_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/bamboo_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/bamboo_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/bamboo_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/bamboo_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/bamboo_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/bamboo_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/birch_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/birch_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/birch_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/birch_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/birch_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/birch_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/birch_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/birch_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/birch_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/birch_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/birch_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/birch_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/brimwood_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/brimwood_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/brimwood_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/brimwood_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/brimwood_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/brimwood_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/brimwood_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/brimwood_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/brimwood_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/brimwood_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/brimwood_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/brimwood_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_10.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_11.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/cascade_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/cascade_9.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ender_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ender_bubble.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ender_bubble_pop_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ender_bubble_pop_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ender_bubble_pop_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ender_bubble_pop_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ender_bubble_pop_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ender_bubble_pop_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ender_bubble_pop_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ender_bubble_pop_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ender_bubble_pop_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ender_bubble_pop_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/eucalyptus_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/firefly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/firefly.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/golden_larch_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/golden_larch_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/golden_larch_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/golden_larch_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/golden_larch_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/golden_larch_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/jungle_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/jungle_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/jungle_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/jungle_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/jungle_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/jungle_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/kapok_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/kapok_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/kapok_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/kapok_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/kapok_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/kapok_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/kapok_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/kapok_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/larch_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/larch_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/larch_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/larch_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/larch_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/larch_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/magnolia_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/magnolia_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/magnolia_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/magnolia_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/magnolia_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/magnolia_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/magnolia_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/magnolia_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/magnolia_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/magnolia_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/magnolia_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/magnolia_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/mangrove_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/mangrove_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/mangrove_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/mangrove_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/mangrove_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/mangrove_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/mangrove_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/mangrove_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/mangrove_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/mangrove_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/mangrove_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/mangrove_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/maple_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/maple_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/maple_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/maple_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/maple_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/maple_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/oak_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/oak_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/oak_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/oak_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/oak_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/oak_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/oak_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/oak_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/oak_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/oak_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/oak_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/oak_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/redwood_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/redwood_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/redwood_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/redwood_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_baobab_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_cypress_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_cypress_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_cypress_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_cypress_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_palm_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_palm_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ru_palm_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ru_palm_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/socotra_leaf_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/socotra_leaf_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/spruce_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/spruce_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/spruce_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/spruce_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_ripple_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_ripple_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_9.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_foam_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_foam_9.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/water_splash_ring_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/water_splash_ring_9.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_oak_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_oak_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_oak_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_oak_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_oak_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_oak_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_oak_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_oak_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_oak_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_oak_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_oak_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_oak_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_spruce_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_spruce_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/white_spruce_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/white_spruce_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/willow_leaf_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/willow_leaf_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_10.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_baobab_leaf_9.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_cypress_leaf_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_palm_leaf_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_palm_leaf_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_palm_leaf_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_palm_leaf_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_palm_leaf_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_palm_leaf_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/particular/textures/particle/ww_palm_leaf_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chailotl/particular/661589151cd94ac6f77dd6abacf49447c00b9adb/src/main/resources/assets/particular/textures/particle/ww_palm_leaf_4.png -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "particular", 4 | "version": "${version}", 5 | "name": "${name}", 6 | "description": "Enhances Minecraft's ambience with hand-crafted visual effects like fireflies, falling leaves, and waterfall cascades", 7 | "authors": [ 8 | "Chai" 9 | ], 10 | "contact": { 11 | "homepage": "https://modrinth.com/mod/particular/", 12 | "sources": "https://github.com/chailotl/particular", 13 | "issues": "https://github.com/chailotl/particular/issues" 14 | }, 15 | "custom": { 16 | "modmenu": { 17 | "links": { 18 | "modmenu.discord": "https://discord.gg/SuZb3aJUCx" 19 | } 20 | } 21 | }, 22 | "license": "LGPL-3.0", 23 | "icon": "assets/particular/icon.png", 24 | "environment": "client", 25 | "entrypoints": { 26 | "client": [ 27 | "com.chailotl.particular.Main" 28 | ] 29 | }, 30 | "mixins": [ 31 | "particular.mixins.json" 32 | ], 33 | "accessWidener": "particular.accesswidener", 34 | "depends": { 35 | "fabricloader": ">=0.15.7", 36 | "minecraft": "~1.20", 37 | "java": ">=17", 38 | "fabric-api": "*", 39 | "owo-lib": "^0.11.2", 40 | "sushi_bar": "^0.1.0" 41 | } 42 | } -------------------------------------------------------------------------------- /src/main/resources/particular.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v2 named 2 | accessible method net/minecraft/client/particle/BubbleColumnUpParticle (Lnet/minecraft/client/world/ClientWorld;DDDDDD)V 3 | accessible method net/minecraft/client/particle/BubblePopParticle (Lnet/minecraft/client/world/ClientWorld;DDDDDDLnet/minecraft/client/particle/SpriteProvider;)V 4 | accessible class net/minecraft/client/particle/BlockLeakParticle$ContinuousFalling 5 | accessible class net/minecraft/world/biome/Biome$Weather 6 | accessible field net/minecraft/client/particle/ParticleManager particleAtlasTexture Lnet/minecraft/client/texture/SpriteAtlasTexture; 7 | accessible method net/minecraft/client/texture/SpriteAtlasTexture getWidth ()I -------------------------------------------------------------------------------- /src/main/resources/particular.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "package": "com.chailotl.particular.mixin", 4 | "compatibilityLevel": "JAVA_17", 5 | "mixins": [ 6 | ], 7 | "injectors": { 8 | "defaultRequire": 1 9 | }, 10 | "client": [ 11 | "AccessorBiome", 12 | "AccessorBillboardParticle", 13 | "AccessorBlockLeakParticle", 14 | "AccessorChestBlockEntity", 15 | "AccessorEnderChestBlockEntity", 16 | "AccessorParticle", 17 | "InjectBarrelBlock", 18 | "InjectBlockLeakParticle", 19 | "InjectBubbleColumnUpParticle", 20 | "InjectCakeBlock", 21 | "InjectChestBlock", 22 | "InjectChestBlockEntity", 23 | "InjectContinuousFalling", 24 | "InjectEnderChestBlock", 25 | "InjectEnderChestBlockEntity", 26 | "InjectEntity", 27 | "InjectFlowableFluid", 28 | "InjectBlock", 29 | "InjectLeavesBlock", 30 | "InjectWaterBubbleParticle", 31 | "InjectWaterFluid", 32 | "InvokerLivingEntity", 33 | "InjectWorldRenderer" 34 | ] 35 | } 36 | --------------------------------------------------------------------------------