From d1a423252d8c6fa8c43b2dc3775978954d6cc4f9 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 1 Oct 2020 21:34:40 +0300 Subject: [PATCH] Better Particles --- .../particle/AnimatedTestParticle.java | 56 ------------- .../particle/GlowingSphereParticleEffect.java | 50 ++++++++++++ .../particle/ParticleGlowingSphere.java | 76 ++++++++++++++++++ .../betterend/registry/ParticleRegistry.java | 6 +- .../world/biome/BiomeFoggyMushroomland.java | 2 +- .../betterend/particles/glowing_sphere.json | 38 +++++++++ .../assets/betterend/particles/test.json | 19 ----- .../textures/particle/glowing_sphere_0.png | Bin 0 -> 1831 bytes .../textures/particle/glowing_sphere_1.png | Bin 0 -> 1831 bytes .../textures/particle/glowing_sphere_2.png | Bin 0 -> 1858 bytes .../textures/particle/glowing_sphere_3.png | Bin 0 -> 1858 bytes .../textures/particle/glowing_sphere_4.png | Bin 0 -> 1858 bytes .../textures/particle/glowing_sphere_5.png | Bin 0 -> 1860 bytes .../textures/particle/glowing_sphere_6.png | Bin 0 -> 1905 bytes .../textures/particle/glowing_sphere_7.png | Bin 0 -> 1490 bytes 15 files changed, 168 insertions(+), 79 deletions(-) delete mode 100644 src/main/java/ru/betterend/particle/AnimatedTestParticle.java create mode 100644 src/main/java/ru/betterend/particle/GlowingSphereParticleEffect.java create mode 100644 src/main/java/ru/betterend/particle/ParticleGlowingSphere.java create mode 100644 src/main/resources/assets/betterend/particles/glowing_sphere.json delete mode 100644 src/main/resources/assets/betterend/particles/test.json create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_0.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_1.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_2.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_3.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_4.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_5.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_6.png create mode 100644 src/main/resources/assets/betterend/textures/particle/glowing_sphere_7.png diff --git a/src/main/java/ru/betterend/particle/AnimatedTestParticle.java b/src/main/java/ru/betterend/particle/AnimatedTestParticle.java deleted file mode 100644 index 03f53350..00000000 --- a/src/main/java/ru/betterend/particle/AnimatedTestParticle.java +++ /dev/null @@ -1,56 +0,0 @@ -package ru.betterend.particle; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.particle.AnimatedParticle; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleFactory; -import net.minecraft.client.particle.SpriteProvider; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.particle.DefaultParticleType; -import ru.betterend.util.MHelper; - -@Environment(EnvType.CLIENT) -public class AnimatedTestParticle extends AnimatedParticle { - private int ticks; - - protected AnimatedTestParticle(ClientWorld world, double x, double y, double z, SpriteProvider sprites) { - super(world, x, y, z, sprites, 0); - setSprite(sprites.getSprite(random)); - this.maxAge = MHelper.randRange(20, 80, random); - this.scale = MHelper.randRange(0.1F, 0.3F, random); - this.setTargetColor(15916745); - this.setSpriteForAge(spriteProvider); - this.velocityX = random.nextGaussian() * 0.1F; - this.velocityY = random.nextGaussian() * 0.1F; - this.velocityZ = random.nextGaussian() * 0.1F; - } - - @Override - public void tick() { - ticks ++; - if (ticks > 10) { - this.velocityX = random.nextGaussian() * 0.1F; - this.velocityY = random.nextGaussian() * 0.1F; - this.velocityZ = random.nextGaussian() * 0.1F; - ticks = 0; - } - super.tick(); - } - - @Environment(EnvType.CLIENT) - public static class Factory implements ParticleFactory { - - private final SpriteProvider sprites; - - public Factory(SpriteProvider sprites) { - this.sprites = sprites; - } - - @Override - public Particle createParticle(DefaultParticleType type, ClientWorld world, double x, double y, double z, - double vX, double vY, double vZ) { - return new AnimatedTestParticle(world, x, y, z, sprites); - } - } -} \ No newline at end of file diff --git a/src/main/java/ru/betterend/particle/GlowingSphereParticleEffect.java b/src/main/java/ru/betterend/particle/GlowingSphereParticleEffect.java new file mode 100644 index 00000000..376316f1 --- /dev/null +++ b/src/main/java/ru/betterend/particle/GlowingSphereParticleEffect.java @@ -0,0 +1,50 @@ +package ru.betterend.particle; + +import java.util.Locale; + +import net.minecraft.network.PacketByteBuf; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleType; +import net.minecraft.util.registry.Registry; +import ru.betterend.registry.ParticleRegistry; + +public class GlowingSphereParticleEffect implements ParticleEffect { + private final float red; + private final float green; + private final float blue; + + public GlowingSphereParticleEffect(float red, float green, float blue) { + this.red = red; + this.green = green; + this.blue = blue; + } + + @Override + public ParticleType getType() { + return ParticleRegistry.GLOWING_SPHERE; + } + + @Override + public void write(PacketByteBuf buf) { + buf.writeFloat(this.red); + buf.writeFloat(this.green); + buf.writeFloat(this.blue); + } + + @Override + public String asString() { + return String.format(Locale.ROOT, "%s %.2f %.2f %.2f", Registry.PARTICLE_TYPE.getId(this.getType()), this.red, this.green, this.blue); + } + + public float getRed() { + return this.red; + } + + public float getGreen() { + return this.green; + } + + public float getBlue() { + return this.blue; + } +} diff --git a/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java b/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java new file mode 100644 index 00000000..f7ac89bb --- /dev/null +++ b/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java @@ -0,0 +1,76 @@ +package ru.betterend.particle; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.particle.AnimatedParticle; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particle.DefaultParticleType; +import net.minecraft.util.math.MathHelper; +import ru.betterend.util.MHelper; + +@Environment(EnvType.CLIENT) +public class ParticleGlowingSphere extends AnimatedParticle { + private int ticks; + private double preVX; + private double preVY; + private double preVZ; + private double nextVX; + private double nextVY; + private double nextVZ; + + protected ParticleGlowingSphere(ClientWorld world, double x, double y, double z, SpriteProvider sprites, double r, double g, double b) { + super(world, x, y, z, sprites, 0); + setSprite(sprites.getSprite(random)); + this.maxAge = MHelper.randRange(150, 300, random); + this.scale = MHelper.randRange(0.05F, 0.15F, random); + this.setTargetColor(15916745); + this.setSpriteForAge(spriteProvider); + + preVX = random.nextGaussian() * 0.02; + preVY = random.nextGaussian() * 0.02; + preVZ = random.nextGaussian() * 0.02; + + nextVX = random.nextGaussian() * 0.02; + nextVY = random.nextGaussian() * 0.02; + nextVZ = random.nextGaussian() * 0.02; + } + + @Override + public void tick() { + ticks ++; + if (ticks > 30) { + preVX = nextVX; + preVY = nextVY; + preVZ = nextVZ; + nextVX = random.nextGaussian() * 0.02; + nextVY = random.nextGaussian() * 0.02; + nextVZ = random.nextGaussian() * 0.02; + ticks = 0; + } + double delta = (double) ticks / 30.0; + + this.velocityX = MathHelper.lerp(delta, preVX, nextVX); + this.velocityY = MathHelper.lerp(delta, preVY, nextVY); + this.velocityZ = MathHelper.lerp(delta, preVZ, nextVZ); + + super.tick(); + } + + @Environment(EnvType.CLIENT) + public static class FactoryGlowingSphere implements ParticleFactory { + + private final SpriteProvider sprites; + + public FactoryGlowingSphere(SpriteProvider sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle(DefaultParticleType type, ClientWorld world, double x, double y, double z, double vX, double vY, double vZ) { + return new ParticleGlowingSphere(world, x, y, z, sprites, 1, 1, 1); + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/registry/ParticleRegistry.java b/src/main/java/ru/betterend/registry/ParticleRegistry.java index 2d45d681..51fe85b5 100644 --- a/src/main/java/ru/betterend/registry/ParticleRegistry.java +++ b/src/main/java/ru/betterend/registry/ParticleRegistry.java @@ -5,13 +5,13 @@ import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; import net.minecraft.particle.DefaultParticleType; import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; -import ru.betterend.particle.AnimatedTestParticle; +import ru.betterend.particle.ParticleGlowingSphere; public class ParticleRegistry { - public static final DefaultParticleType TEST = register("test"); + public static final DefaultParticleType GLOWING_SPHERE = register("glowing_sphere"); public static void register() { - ParticleFactoryRegistry.getInstance().register(TEST, AnimatedTestParticle.Factory::new); + ParticleFactoryRegistry.getInstance().register(GLOWING_SPHERE, ParticleGlowingSphere.FactoryGlowingSphere::new); } private static DefaultParticleType register(String name) { diff --git a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java index 769d8644..fefd4f98 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java +++ b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java @@ -12,7 +12,7 @@ public class BiomeFoggyMushroomland extends EndBiome { .setWaterColor(119, 227, 250) .setWaterFogColor(119, 227, 250) .setSurface(BlockRegistry.END_MOSS, BlockRegistry.END_MYCELIUM) - .setParticles(ParticleRegistry.TEST, 0.001F) + .setParticles(ParticleRegistry.GLOWING_SPHERE, 0.001F) .addFeature(FeatureRegistry.ENDER_ORE) .addFeature(FeatureRegistry.END_LAKE) .addFeature(FeatureRegistry.MOSSY_GLOWSHROOM) diff --git a/src/main/resources/assets/betterend/particles/glowing_sphere.json b/src/main/resources/assets/betterend/particles/glowing_sphere.json new file mode 100644 index 00000000..9ede22c3 --- /dev/null +++ b/src/main/resources/assets/betterend/particles/glowing_sphere.json @@ -0,0 +1,38 @@ +{ + "textures": [ + "betterend:glowing_sphere_0", + "betterend:glowing_sphere_1", + "betterend:glowing_sphere_2", + "betterend:glowing_sphere_3", + "betterend:glowing_sphere_4", + + "betterend:glowing_sphere_5", + "betterend:glowing_sphere_6", + "betterend:glowing_sphere_7", + "betterend:glowing_sphere_6", + "betterend:glowing_sphere_5", + + "betterend:glowing_sphere_4", + + "betterend:glowing_sphere_5", + "betterend:glowing_sphere_6", + "betterend:glowing_sphere_7", + "betterend:glowing_sphere_6", + "betterend:glowing_sphere_5", + + "betterend:glowing_sphere_4", + + "betterend:glowing_sphere_5", + "betterend:glowing_sphere_6", + "betterend:glowing_sphere_7", + "betterend:glowing_sphere_6", + "betterend:glowing_sphere_5", + + "betterend:glowing_sphere_4", + + "betterend:glowing_sphere_3", + "betterend:glowing_sphere_2", + "betterend:glowing_sphere_1", + "betterend:glowing_sphere_0" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/particles/test.json b/src/main/resources/assets/betterend/particles/test.json deleted file mode 100644 index c531c014..00000000 --- a/src/main/resources/assets/betterend/particles/test.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "textures": [ - "minecraft:spell_0", - "minecraft:spell_1", - "minecraft:spell_2", - "minecraft:spell_3", - "minecraft:spell_4", - "minecraft:spell_5", - "minecraft:spell_6", - "minecraft:spell_7", - "minecraft:spell_6", - "minecraft:spell_5", - "minecraft:spell_4", - "minecraft:spell_3", - "minecraft:spell_2", - "minecraft:spell_1", - "minecraft:spell_0" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/particle/glowing_sphere_0.png b/src/main/resources/assets/betterend/textures/particle/glowing_sphere_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1d310c5e4030b98a10755f3efa2d6bf56d43d507 GIT binary patch literal 1831 zcmb_dO>f*p7CcfvoqseD{GIjo$Mw@ zZiowK)C(5`7ybYeAT|F0aRx42IP?#I!aMt60@}7wg(ZJK^SmF=Gc%v=@4bKP<{LLP zO}o|abr0ZvU7goA;ClZ0_n*P-M$!AI(zI7M)pfcjy)uXkiAbg$)`%yMl#2wRqqL)*Qh z+t>;a4v^)T*do{`PN**r1EQ5YAqU;}ma*V1GRAdX5QL`FX>01VWH~}s7={Sj$hJ*D znAK@s)0vr9w^s~ZQL!>D>Qv^sVx&WPTt^0Ex+ozl8rr;Cwh0=BX0$+73#*dmK+YOm zaa>O3!8t=>A~KQJ6=1Cf3tfui2ELXy%Nlf5@18(L%i7kWtHEg@(1EDrammE)2}HcT zN~{>mT2^EEj5?a%O*IASl!Df>97s7?3AMjs(K{U_Ok02RVVZL}t=>|BmSaSh)*>=& zY-7{HpxVH;h~*Ne{Wf+8#tUc+R^YUzYrz4r?0`81%u=ix92S8N}aDNHFkxy-7v;=o94+V(7e zXeMpPGd=8La~KG)zapm&r0fIFKXE&9BFk8E=((c|JvSEVr4^`mx||{p#K+60NvhAi zL?}~sj|`@CR&_2ur)&CjwTu?yr(*%6&k=tCt7KA7X(@I_(9^5<3q33Uik`e6drVmZ zVw%3M#Nn=EhD<$R6rP+U|t*pPh L*ZubXqfh<@>$f@O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/glowing_sphere_1.png b/src/main/resources/assets/betterend/textures/particle/glowing_sphere_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bf13989c57eb6f43acf42e2596d7506072f2e4f1 GIT binary patch literal 1831 zcmb_dO>f*p7{VR zj+{VTI3o^lLE?hMg$oiOT7CgP0Qd#{14!ZZewcu^ZB((6*JJyc=Y8JyeP-s9gZ+0m zZ@zw0)3nV&zjp}t8})T#1OA`9_T#5;dnNBbEH&-bt@^sAeg4I^rfqzc43Da#@IA^^ z+G0XQvNcO{Kx^8aomtNKv8?n+j*=`ep8oKYp(i3R9=IV6^R65x{qsWJKi?nn^JDG{ zW9P1ZXGVb_l@-%x=_D)ZEHLK06vp*y)6nOT>NqfV>wx-Ec%XMxA$7OqAx<1iZ~HCc zVc&9Y>lP+$6SqxbBTOjvsO{^^p8?Sd5!1uoJIh$`6d2>G%Bg8ir_6T9cVd6 z_E;qY!@?Fu1Vh(`7NNwUcIPc@Q;ZkT5Ue0r#nys7>RSH-E0M%!FN6wCV^yRK3YDa6 zB+Wb<&7*}O9b{$2GA;+bzyPVOBoQ=fOW!8oEG|0?amOJjim{D^$0V^lhec$e7UuU9 zKdGBo&tLdiC=MJ=>8MToNVW+>Qno!5M-E4k>l0-0h%wuaTsI~wHSZS*EGag*%v!4w zz{o7tafuh9xMRD>#STUw6ztC|>@wRUzULeIKXJQiqKZ%nsJUGmdTuP*PfFZ{8 zmme-ilSH3;i85Z>JurCPXDN*3>ts!xuBK=~I~_|PeNOWiuu{dizszUp zFWKn})MLhDr!A1@VHf$rv60UuR5oIqa}o1)#8%m_Rqs;buiW^O>X*gkW0s91?4YLc z^7&lNwa@9s<<<4S=3~}-=fY~{e_c5Lc4?o5cFteH=3Nh)Qv)8Fb4O-Sssc`xdk@Fo z!HINx(Aynu|Hl8ixY)UV_va^XYoC4n=+DQ$f3T%4zW?Q$KOUPK8`r$y)^_r=ukC)k V$-bOj|Fu5K27CLxZ|^<&=x^1iIdK30 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/glowing_sphere_2.png b/src/main/resources/assets/betterend/textures/particle/glowing_sphere_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee887b4bccaa5c6f90d96f6e310a88f416a468 GIT binary patch literal 1858 zcmb_dO^f727|yt`tg|d0R2T*pL+0XFI+f4v6x%yHcG{hW&DhK~%y`>MRi!&jCl!iViANtZg?-Y(oPl-Gsx@PG2mH+SInbh`a!E=d=kEw2^n!;jV^>HH^AZ@<|0 zZ(u6o8et;fwMm=;T9U48PEtY-cp(S8A0Sa-p6w$)ZSg_0eVp-|$2&cG zd_Y~MY+jYGOfV3{ydd%<9ws@SG?ghYhH?2?Q{*Y6IA|(cWk7k~@5(KaaoMgpD%CAR zuDdneL9SuFDjP_zYpAa2riyfo9BjJs{HH*)jD>jDdwm`Yo|?*_C{nCxF@3MieW5T_MwlF!Qo1=A)Z z)$|%FQ4ARdxO^|{I>#jT8!LS#K5hKojZ7c6qCRW_y}zql7AOpNoF z%0Tlu+#>~VDh4u;sw3!H&(N`MVYBfHGBH9ks1H_Pq##Sd4mON`fCY=fqsKxS#i7Vz z0)>iV(&t*5^rz8$A9s?xAPMCiuc?64S`;x%ki#9$Y}ITqriRqARM#{O)d~VVtP`rc zR=Ak&2|6m9Sk9mMnF$IURq1epB3cg&TeXZZP?2pBHK;qG$}MUb2yBcfTd=*6MX;pE z@HA_wij}Gi(y(N3kzUCN=d0il$#5Sm67*)LUZW8Gc2@d?$>i%SP2 z>2ugYHRZqLa~9V=q8q1I*Z-Q2R_>iMt7-ps;q=?7eHPj|eFd9$Ijl|%c&N@Dol7wymFVQyAE*I!{W}H|XdyMVf zWcLId5U3zHBRC*&Mj&yb5>%oW5I6n<{sFikA%Q5*iDMR&wyTOrj>q;l-}~Ns-^{$* z+q`;uEx$je<$DZ zUcyvFHNu3?Ym+Dev?N_xnnqVM^cuwR=G>S7kX)04*4CCUprpQxBzS~sRi-7Wu*OOZ!<+5FKRH|Es zTz6}_gIvRURyL4c*HB&4O%>@FIoNdN@~1$wlm&RJ{d^e1Z09QH_sy#N#{ztX^TEN}gB27t%&ih0gNMJ}4@4TZqp32MO1< zcqaBz$~*fI@xokKG8DPUhT<-HRG+JC65L8T$wk^1Vl;15Z_XmOT18_T@>APk%)~f* zx(HOx;cb%hreYuisXBtL^$i{C7B(9fk%VvvTdgN&eI+NzB#r22IZ_9q6iiRtLB<0|q$aa&>}Qcp0bxmg%`YAn1F zX3)KZa*15yua~1yC{MkF2`%j2RA|v>&Xn?XxS&qQQ#7L;4>^$DqxmyfCW3rSQocTb znjXhr+THYLWdAk~>T3uxUZ^XwO@x3ONi@d4GB#ic_M z4>;_gn)2ZJ9M84)=*H32^}pt$6?^B*YTAEYIQ@2HpM`c#U%}>G469QE9;$PP$55&i zPL;{UuU~)@>1wyV-e3KR{(0xl+KJ1zZeNkUxV3uf$-jc%f4#B3`NsQ8?X@4adBmt I?)qDQ1N)6aoB#j- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/glowing_sphere_4.png b/src/main/resources/assets/betterend/textures/particle/glowing_sphere_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0774c57c5338d855da6c2525dcadc2fb0f9bc30b GIT binary patch literal 1858 zcmb_dO^6&t80|H%#0?<_6_$Y5bS_4%>FWQfB9qN#X3P%Q>#!Nv%`Mec)icdbceUNU zJ2QI<9u$d!S49tkS4F{_paFAGuO2-J9=z&Nh?rE*PrJ$_S%L#SUETfaeee6eS5@zH zx38UDJHMtV%Gu6VYe(Ksm)Gf4`G5D^H@D^O>2&Kxt|(`oDX$gf!;jV#W%ZM&w^!`> zuVE_U8et;fwQ-zEw4z+v7^j5p^Fj@HKS~Ti^Ma`3c$nmP+|Z`HSdPorx~5Jc#ePHEECZ^0ephXZjH^z~1=O%j z)k8JIg~+sDQB7!gI`nkI0?@$F#THWMKTSr18=N>d=C6)ruU_v!o)o#n8WmPn$@eSxQrbAK(0S25l#1rLEk)|n?F7g(?;oIDoFC=Nvy z6IrMzCVj4_Nq-v6_i-o53zAUYX*Dz{wH8GTyAGnnGZ|oY<^g2c4hZUX3TzK~mV-PV zhTdX+OVER|iRJv6pP8VNqbeOHrbiJq5imlB0qEKc)ax(=h5@OE0@HSaS?*HJ>sch1 z6d4|8EmbkeNK8_93^xE_-Ex2fZ3qI7OZyWOI>d4fo*D~p zMY-(WWWGeM^Ec+BVWdvIgb6L}-q2{-XU??w>u5=xPNrx^I~s6F`iSPwV7Um35y|*w zU)J;_{?Z?&KPQKeQ4a|XZI1!hg$_W>wg94BRyH7%QWjD#AdBpms&}w~7H)h(_4DG= z0ZIB??x4E%^P7V1`ojW{{ zrOM=~a_?vGn>>-Oby}Of^`Gcp_wR3t|m0JN)yH+ndc>@2#|c`F@wT zot2k9IQ40M>#Nnbp6h;`p8sy`{V%WlaIxF=ZvOi2v-h4-!XKZXe8%?PE>F2md%N}d I)thfV084~J`Tzg` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/glowing_sphere_5.png b/src/main/resources/assets/betterend/textures/particle/glowing_sphere_5.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab7a8d8fc27dc83708538cf8b0eb17b1bb167aa GIT binary patch literal 1860 zcmb_d&yU+g7#dTsq{NH}z+Z*EceA2m`Nz%zv#dS>j_>*NxTKGKdZRK0u zyNK|phAH=1Z5$;6ElKBB#t9}nESG)O595aN=QrOea!4D>rsY8|X|h4sIY`;1gS8$x z*dZ=eRxZfr$4C%FEXVRV8patKHl;azSB@vi-7W$w=Oq%%4Dl%1EQI_ zTz6}l4PD)QQ`VtYS7BY%3;;C*ZDhD|`BOx+lm=*{^>!Icyfu_To+n6EN25_~WYl=t zS2fplRj8}F4g>;Z`*DuPAkNOt7+NeNX_(|8kL7|9`+PTVC?eBo2~kqf##t$o5KJB8 zMAd4rC}{$uq{1b;>2MO95|s^E#Ns>?Sgpbel{~M4&!vr`3Z3QcJ&{pa+gxQyj_Pw&O@f*!!#PiToDXM>TA#7V&1TUUM}BQHj42;w zuNQ&JIjn_q)=+e)L!d#?wVtja%|wQC4jKr;Dby2Ipg6~K!4@*KhrpbM!TuAWl%Rm8 z5f(y)5$-cJiTjgio`R1=(*zC)0stYdI~sFs zhxoJkElzfeCKmIjex{rVj!HUIH*wu|pamReGJu)s00(M5fI(meIx)qtGh=%%4aJhe z!^5maR#Y%z9Xpn0`yg-(3s}&Ez^^l5f2>0b8@A@!t|C8(+vG!@dYlT)jl$3qW1&u% ziSF%}OXL!JzkC{o^2AFBlfv!|g%o{eR4IqUIXWFJqbcoZzy#@Inm>hQJjh2lWvhLm z=~4WpJ}UnV?>!-Vh)H19DX?wP9G98~a0wI2`j`+x15)?#topgxTS#+fZhXq@OL55n z$9*PtP*r*QdXDDW$8_WH>UyU2sKwqnwVL{W7f!w%+Gj;OCqrWME*`5>L%dYy4vU3U zsW?@dOTYXoPNZ(Pwc1<$nf!DA{>t$Sw{BmQzP`15^31<~+`Dt*`?V_{eQ>OE=BG_| z@8%cM8QsKa6DKY+-L2DL#<8bmX28Q%sw&;t>7-(k zp6(ehi?FhbpyKL96x5S~DC})g!aR|w_9cd{KC~mrIVwELS zG)gAGimr-ftE8CFQuQZ96)I&JmSsf)P_dzDYnC|vNjzFYe7jkDdK`;CIZ`LfVq2E` z{eG#hl~~f270a?@sLHAeI0B@*QHBN}N*5*!HJaiih_ir2V$O&>*2^4;D;=c}#szJZ zj?2UgCJ#_7D@rd=A+C`&n3DX_dsu3NyT(uQGyPP6(BS2WIT zDmrcL##C<7l=Tu!>pMK+!bDiyVHrz1>^gZAuZwJAyP8mxv82UVchab}35!^*=8dU{ zCpLnJuzq?n4>VpwYbc|Rq(T(}1@f-7RK-?wTdO<{H5-o$+U$j^jf&QX-kRxL=0uR)+u4}yxWW8nFU3JCUfq*Z)V zBmP9qb4kEIDbzj4nyVt55vizRD5eMeie>-<>JWHk%I%L-Xdum0EYp(2f8thImnAME zyyjYN=%KOfl_2Ha+Z}%*>-44Zs2hkwFWCs^c6TJ4_n8uDJRMA_)8Q12X!{+?NpH~n z5iDhX)<+3lYV(>N#$WRF^rvX&Ch8&L9VioEn$Q3i(KTRU$}8(3j4|Z~b z##>ZBE-vn%s7?6}DoeMX&*5BqgKqq9`N;X+IkKAkUl$JF9oT1iJBL$z^UjCGslgwL zbB9K}R0%&-E_~U`kF=deZK*Z?!?`yu&z*&L*B{=0{;fwp{$y*`_a69OGH338;q9O9 z`}v_y&(Ai0x%SAV?#1RupKp9u{_CQ&jq9jrwZs Jv*pvT{0*1)R^b2u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/glowing_sphere_7.png b/src/main/resources/assets/betterend/textures/particle/glowing_sphere_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9731544b8c93029ded50af0bd46ea713c1ed3b26 GIT binary patch literal 1490 zcmbVMTWHi+7|w#It%``?r69)irJ|XfWGwpyzdL}tD6FSMsCa0Zg z5y2Z?MiFJ%2QSDz?2DJ`!h(vTFzn)+h`S*AAYL96c0p7SpTv{7gk^EnHE?on-}(Og ze`t7UU_pCFJI8SgGK1+6HqQ;l+}Z5^+rpbwHnq8f+kB3jw>TKza3@bMk6Xu|s`^l|wA^lCFpFkJ8$9i1um!B-5yA+eguU zcFM)l2=>W@XW;%xCb6@nm|G;2_(k#`c7)fVH7-nf7*XP72`RM#HQZw1Q>h>@Nxo~V z<(Q=GuMPw?-{3T&SQ8YW08s`kYFR~watub3Yd{nN(17YJ6--3Ymw}0C<)=OiH4T_2 zo{gBJEE^TDwgO<y{dpIy)Mp-6Yu7uTzBsz!;?F1EUi#~&MQ3}_fzJH> uE3fX(o3ldSd~7`S!@DK7lIK?q9K>_331hY5g~W-V>t_0g(lhJE_Iv=rl-^bV literal 0 HcmV?d00001