├── .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 |
--------------------------------------------------------------------------------