From ae172a1517e6001366709ee624674fd1adb2341a Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 14 Dec 2020 13:03:21 +0300 Subject: [PATCH] Black spore particle --- .../ru/betterend/blocks/BlockShadowGrass.java | 4 +- .../particle/ParticleBlackSpore.java | 92 ++++++++++++++++++ .../ru/betterend/registry/EndParticles.java | 3 + .../world/features/CrashedShipFeature.java | 2 - .../betterend/particles/black_spore.json | 10 ++ .../textures/particle/black_spore_0.png | Bin 0 -> 1608 bytes .../textures/particle/black_spore_1.png | Bin 0 -> 1624 bytes .../textures/particle/black_spore_2.png | Bin 0 -> 1640 bytes .../textures/particle/black_spore_3.png | Bin 0 -> 1649 bytes .../textures/particle/black_spore_4.png | Bin 0 -> 1639 bytes .../textures/particle/black_spore_5.png | Bin 0 -> 1636 bytes 11 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ru/betterend/particle/ParticleBlackSpore.java create mode 100644 src/main/resources/assets/betterend/particles/black_spore.json create mode 100644 src/main/resources/assets/betterend/textures/particle/black_spore_0.png create mode 100644 src/main/resources/assets/betterend/textures/particle/black_spore_1.png create mode 100644 src/main/resources/assets/betterend/textures/particle/black_spore_2.png create mode 100644 src/main/resources/assets/betterend/textures/particle/black_spore_3.png create mode 100644 src/main/resources/assets/betterend/textures/particle/black_spore_4.png create mode 100644 src/main/resources/assets/betterend/textures/particle/black_spore_5.png diff --git a/src/main/java/ru/betterend/blocks/BlockShadowGrass.java b/src/main/java/ru/betterend/blocks/BlockShadowGrass.java index 819526e9..9fd872b9 100644 --- a/src/main/java/ru/betterend/blocks/BlockShadowGrass.java +++ b/src/main/java/ru/betterend/blocks/BlockShadowGrass.java @@ -6,9 +6,9 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.block.BlockState; import net.minecraft.block.MaterialColor; -import net.minecraft.particle.ParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import ru.betterend.registry.EndParticles; public class BlockShadowGrass extends BlockTerrain { public BlockShadowGrass() { @@ -19,7 +19,7 @@ public class BlockShadowGrass extends BlockTerrain { public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { super.randomDisplayTick(state, world, pos, random); if (random.nextInt(32) == 0) { - world.addParticle(ParticleTypes.SMOKE, (double) pos.getX() + random.nextDouble(), (double) pos.getY() + 1.1D, (double) pos.getZ() + random.nextDouble(), 0.0D, 0.0D, 0.0D); + world.addParticle(EndParticles.BLACK_SPORE, (double) pos.getX() + random.nextDouble(), (double) pos.getY() + 1.1D, (double) pos.getZ() + random.nextDouble(), 0.0D, 0.0D, 0.0D); } } } diff --git a/src/main/java/ru/betterend/particle/ParticleBlackSpore.java b/src/main/java/ru/betterend/particle/ParticleBlackSpore.java new file mode 100644 index 00000000..be4164ed --- /dev/null +++ b/src/main/java/ru/betterend/particle/ParticleBlackSpore.java @@ -0,0 +1,92 @@ +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.ParticleTextureSheet; +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 ParticleBlackSpore extends AnimatedParticle { + private double preVX; + private double preVY; + private double preVZ; + private double nextVX; + private double nextVY; + private double nextVZ; + + protected ParticleBlackSpore(ClientWorld world, double x, double y, double z, double r, double g, double b, SpriteProvider sprites) { + super(world, x, y, z, sprites, 0); + setSprite(sprites.getSprite(random)); + + this.maxAge = MHelper.randRange(30, 60, random); + this.scale = MHelper.randRange(0.05F, 0.15F, random); + this.setColor(1, 1, 1); + this.setColorAlpha(0); + + preVX = random.nextGaussian() * 0.015; + preVY = 0; + preVZ = random.nextGaussian() * 0.015; + + nextVX = random.nextGaussian() * 0.015; + nextVY = random.nextFloat() * 0.02 + 0.01; + nextVZ = random.nextGaussian() * 0.015; + } + + @Override + public void tick() { + int ticks = this.age & 15; + if (ticks == 0) { + preVX = nextVX; + preVY = nextVY; + preVZ = nextVZ; + nextVX = random.nextGaussian() * 0.015; + nextVY = random.nextFloat() * 0.02 + 0.01; + nextVZ = random.nextGaussian() * 0.015; + } + double delta = (double) ticks / 15.0; + + if (this.age <= 15) { + this.setColorAlpha(this.age / 15F); + } + else if (this.age >= this.maxAge - 15) { + this.setColorAlpha((this.maxAge - this.age) / 15F); + } + + if (this.age >= this.maxAge) { + this.markDead(); + } + + this.velocityX = MathHelper.lerp(delta, preVX, nextVX); + this.velocityY = MathHelper.lerp(delta, preVY, nextVY); + this.velocityZ = MathHelper.lerp(delta, preVZ, nextVZ); + + super.tick(); + } + + @Override + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; + } + + @Environment(EnvType.CLIENT) + public static class FactoryBlackSpore implements ParticleFactory { + + private final SpriteProvider sprites; + + public FactoryBlackSpore(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 ParticleBlackSpore(world, x, y, z, 1, 1, 1, sprites); + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/registry/EndParticles.java b/src/main/java/ru/betterend/registry/EndParticles.java index e77affbe..c04c279c 100644 --- a/src/main/java/ru/betterend/registry/EndParticles.java +++ b/src/main/java/ru/betterend/registry/EndParticles.java @@ -9,6 +9,7 @@ import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; import ru.betterend.particle.InfusionParticle; import ru.betterend.particle.InfusionParticleType; +import ru.betterend.particle.ParticleBlackSpore; import ru.betterend.particle.ParticleGeyser; import ru.betterend.particle.ParticleGlowingSphere; import ru.betterend.particle.ParticleSnowflake; @@ -23,6 +24,7 @@ public class EndParticles { public static final DefaultParticleType GEYSER_PARTICLE = registerFar("geyser_particle"); public static final DefaultParticleType SNOWFLAKE = register("snowflake"); public static final DefaultParticleType AMBER_SPHERE = register("amber_sphere"); + public static final DefaultParticleType BLACK_SPORE = register("black_spore"); public static void register() { ParticleFactoryRegistry.getInstance().register(GLOWING_SPHERE, ParticleGlowingSphere.FactoryGlowingSphere::new); @@ -32,6 +34,7 @@ public class EndParticles { ParticleFactoryRegistry.getInstance().register(GEYSER_PARTICLE, ParticleGeyser.FactoryGeyser::new); ParticleFactoryRegistry.getInstance().register(SNOWFLAKE, ParticleSnowflake.FactorySnowflake::new); ParticleFactoryRegistry.getInstance().register(AMBER_SPHERE, ParticleGlowingSphere.FactoryGlowingSphere::new); + ParticleFactoryRegistry.getInstance().register(BLACK_SPORE, ParticleBlackSpore.FactoryBlackSpore::new); } private static DefaultParticleType register(String name) { diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index a69ba91d..23577c2d 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -61,8 +61,6 @@ public class CrashedShipFeature extends NBTStructureFeature { return false; } - System.out.println(center); - Structure structure = getStructure(world, center, random); BlockRotation rotation = getRotation(world, center, random); BlockMirror mirror = getMirror(world, center, random); diff --git a/src/main/resources/assets/betterend/particles/black_spore.json b/src/main/resources/assets/betterend/particles/black_spore.json new file mode 100644 index 00000000..bdb5cca0 --- /dev/null +++ b/src/main/resources/assets/betterend/particles/black_spore.json @@ -0,0 +1,10 @@ +{ + "textures": [ + "betterend:black_spore_0", + "betterend:black_spore_1", + "betterend:black_spore_2", + "betterend:black_spore_3", + "betterend:black_spore_4", + "betterend:black_spore_5" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/particle/black_spore_0.png b/src/main/resources/assets/betterend/textures/particle/black_spore_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fbe2463be549f72568e1691c8e73105b9ff947 GIT binary patch literal 1608 zcmcIkO^@3|7&b*krP7uwYK1g%rK(k#cszF2AF8|BCR-8-FRN{&E=ZM_%uEt%V~??C zH`%>Z<%Z}Leg=O42{`n^5%DKDfw&{eJNYmbYFD{n$@Xjed7t-rKm2}mu>aB4)$3O+ z%i8Mqx`%MTV$Lh?!1cv@KYR_hcgx`&yRT|?4A4Q z-aH0^Txy2q`Lw9xd15bkW3bI@$3_c?K2Gdi6A&Gx2dJYeiQ27g%w3i&V=qFh!-i;;7{!O(hpSldl-Luk%h+*dvsr8AwNy2B+$f41LLEvm zAaH$FXg0@1eRIvwl{K%jQfI0_hLH``iB4=#x=bN28``2?l?e*w%vtHUEn-qy1Jm?k zXr4FdTJN1gl$GAs64!&XQaXpSRwosgd#AF{H`l=gZ+y#>YP!f&a7RvM4zL=8xlO2Y zqO__f>J51`pPOvTxKl}{RW(p*x^C3Lngw+_rZFM9{WvRxn$>rVsFjcGGA$FE5=yX3 zvFi_9FD3+fcb6Dr2~A-X1k-FYuoBtmY!hgj#{Ht!tl+ZWO>7X=$}$l%Mnji{3=3~K z!eQt$9MaGOi~FIVBkB6v3tiyfRs6(M(D*MWS11k~O_5^hF_*|N!ZeT(9&(@HND7LH z3_|J+qqd}C&Gt!^!Oz2{ud*6d0vM?;1mh9MgtY_g4}B06jVPv+GgtUQJBk7u2_BDB zl`|NXEN5fsl*QOa|ElSzsj5;Xpyr+#XkdpddRYzKJ6ruCkK`9CYnq|O+{KKWaZhY+ z`Yb{3@^$u_>TRZT=|7uDAibdZOIWQ&dd4cbJBCVcGGES{^w;e4V)dK#{{L0KDlVU} zVk}{UI=0EjF}r5j8t1=VTYP(EFRkIQ?2OrLS$Jsnv@C$Sf-U@a(7y#6{DXdXckuqN x{I8cUciz7LQ}4;;=g-maPaj_YZ1>ws)}`NW{P{E9dS-Tge{aA0-Gk4+{0EG7@t^}$k-A^g=d~Br_3_OgzEHQ9^1;WYVQfCu=f;EEn{OD#3%@3#IA!Ety9da@9p-Et8ljs-eii@2s| zId22YBpqyaFtL$IeAD%957Y-#(Fz{>NB#XemU;@{q^fcs2wKTvB;|C~sKXTt==F4Cy5Oz*Nyg=@yro6edqkgBB7l}@ znTS}3I3r^Frs)&swy76OXsAYk(~7PKmOP2i*MWwiKg`OCW=stG0aT(|Ny7cuHf`D_ zZN!D>peS+(qFv8Movzo7O%Yk`SS)m@{e8(!bp`eQ<>Ye76h~7eKPJNNx~_vd)aJB9vU!+|~oF*i{yTq*UEIuYZwy;?sIHO~7LA ze9H8=2axGL3l8ho$y2Jgp3WuhY$6ot70qA5N*Px(T8Q1Ts`NVZg`cIrq-R&FU$6K7 zull;UY(lfKP!5Wr&IfC+S+)lMw`+@UPx#UbuFOs^8<$lNjZceAQ5VXEU-|u;ua$$N zVSjhD^??0-dAala-Jb?uJ-5IA%jH&NZjSzX?dA72e%^X?%lPoS@Zp!+k2Z`~Z@&5G UNAkCa+WUul2mNo~`Q)>I0Pf*p7&b*kC2ATj6$lPkE<&I%>+#p_+Nu-6I*^rc8YL?=oalIFylZ9cacysQ z6LCUZ5L`I)7jOjijD!SK3I`-OaO=OQdXFgY?1x*SHrfl8Y>z$9`@GNl;n!d9?S8Vl z^5%-7D68F_U?1*R28mn9#NNR zn;YuQi3bEJuZTKHhgs=Od~M3>!CJo7HFXN9j(lxPI#dtCJ+&hWt~!k-qK0j%Ew^Db zv1{5Ns3taAI&SHPg|Ok_rf0e8{LsK#!D4Se_;~IMo_uXkRk^3@xS#P zIyQCFM1Vl$Nmh{w%E}uHhJcr}Nb)KXnJO7cBu165fznwBXSo($Wwro zAk3&;$8s@)hR_O(RAf1@U`c$k3^WYAZdO(#qr4mV8i;Bn3G)oj zW81+^6vZtEF~{b}b=w5BnvucmIC5HTHq{08fuJLqL1{nhTqY=R)JgK(xJ_D|VT7?A zAt$z*sO>nwW;;<78?N0lW>Es$ts;SshYX)(m8uvpQp3bFqA_wTW+B_MW8`wvMYL^N zZGx%gwqs3Y)Qd%t5@?kqC4H{vSzlA1s_BTKC_=#?=ay_}U*P7vTTbW9emvkndO`7Luu{a;m=t`g51C%3zw{UBFUj%6 z>X)ni|EqqUTsk0GpTh*zH5rdCXU(iM`hTl7-Fs#(E#NThv!Jy=;Yy0|Sq5K#|B=Ag1xQb{^VCv05D?pddGGY&HiJ9-c+Rh8~Aom4id zneLed4}u3#S5WriQSh<{@h-TRJ?u#k1TUThk1B{)A65N`i|h`4F_5H^`u^|#{zv}2 zzrFR!*)va_(KPLBf3vqE@2Ayy`T=>p_3$?z$lHVE<{P!9wQi~NzU${&Pixx!-(`b6 zu@_$o3C|5odBTioUP`p4oxdAOk|t34J88BM}@#sSk!Avh90X)m6amn1yGDQ;RhnprP6r_dD+kw^&(9&VdfN< zrez=%(h?ZQCqwhRLDypAPy23bD3yMoD8^9#rF5q?DL! z%yJ2&d19_Z7*3sx2p=%0nc5|3d$$-^Gejh zhV`&uk!~X!LCc0#dtf;sLZO4sA+?x8W7!H63%nYb(=0t&1sca;zo-Q+2Vu$mr-nHwXELJ;uG0r zR~D;r24;O1VxrnT(ut}wlX~Z`v%6$(HJx+&$%skP6N*2F)jSmwT(R|`%=9Y#W!_7F zjSo*&zgq48U-gURk`XS3OioZ!SMiu?*33&|{PK*p*X1eE;Y(mwx}_@n8K9tE*4^_0H|DTro-Dr#FnlkDgtds-HrCW2^V&%WuE? E55T_#WB>pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/black_spore_4.png b/src/main/resources/assets/betterend/textures/particle/black_spore_4.png new file mode 100644 index 0000000000000000000000000000000000000000..43d71225743f1c02b70d3378315601a665958b52 GIT binary patch literal 1639 zcmcIlO>5jn7*-lmQj=_Lgl*7(zx{E*_qL<@Jgdd zWAECzgd7?|2;`EV&}$C8^iXJf@E_=+*P>t#2-` zTwO5?<8pVivjg{w`n>otTu(mz;|1J4$v1y24Wo9V&vUPD)vg)Fg};;DuG)>hB}}F^ z<+3mANty%NFmB(SY z_l|jcLVzF@ikg#jl$B%>T2o#EYyH}>%qc|eht`^QXzoVaW?L4*Y}if2T;DTWf$cVN z;Q3#h9(G#}ZaHopVVB@0sR!o#u)tfvW3toPnEQgK&>AY06UP~k$M(2x%VOZTK@d3D zb36|L0+mOZq7#&rHx>*XQL-Y*RU$J}Gt$01P@x4%XCb6{MVpoLG(p0g3C$hX#yX@0 zFpAEGrfG#P)%qcLnd^NgaoIb{g|j0{c~CI1ekd|^W8sXm$~HeJM$jY!sySK1j%%Bmp0;h^D2bMgEkCuT(5$R^7q8St2PH2HBJ4rZUoY6k! z7{v@XP=omlQ9tI$qqNy{aid@N`BWF!cO*N|8PxW(&gGH;N0lTJd(EK1>KIY4(L$8^ zaPd|>#Db=vlrm4mbiwvrk-*18M{l!gRU8;G$NB}wT(IC(a(%>UH1`Do^VKLZr+r5# z)9oHwOxIaJ^t0E=JF>T&&YAsqD1h{g;?H2EjMbPHVr>AKUZ%gC_vtU`;o0h!tNn*n zKTj?j(rh4Lf;yIt$I-K9RvPF3Rh#a;HJ27}7(zy+J#{tIu9;{P5(;lh5(m%kbHk<63A(21{doWY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/particle/black_spore_5.png b/src/main/resources/assets/betterend/textures/particle/black_spore_5.png new file mode 100644 index 0000000000000000000000000000000000000000..145844e32bdb87d3c192c17d79d3f7abf3c73317 GIT binary patch literal 1636 zcmcIlO>Epm7&WaLN~DG>f{Qh|q-tk9{@b;!nl`MHW+j|P>57J)GCMQ7Yh~>*_9VN> z32{LcXT+8ETve6ehE%8&aYcv&SB~6J??_>0*XveQ8|?*4W6yZryzhNK{`_EP`}URP z50^DfyVBW;cIET38kd*k{q+53-^j;%`PS#9rmdW+@y@r`RzA|SOTQ=GJ+T*m8W5f~ zFy%egn54NxYub&QlN^%+CiET~Bv}al`RQk%Co}~2+!)1qn+=n#lY-qn+3u2)1L9L~ z^JD$SB#;Ct6Ih?5qpS=jA(-+8a;{z*K%YXyK?v5BL47aY(c8RWy4z?%Vmg-I@*8Fo z`Id8Cw~*N~P|GlFh|B;r1KZcD3rK4P?FYNjW@SsRLNF8}4-8{G9yi8zgBJtC^nKqz zmSI^?B4Bx(2|R&WxjJWvSV@W`7YWaF#fW?SP=r7#ow<a+P_F`9ZxiNQuJm9SC@ zGiy`%kPBW8`CI&`w`*_mpj|L5c+us2G*8sdoJDW9Rbo7S?Ou{mJ}$2+QPmk1VZlOR zAqzp%f~M0o?Es;`@vb2?nL%S&3KR>x7?{(ff4m4Zj)P8C3Y-zvi9#SnHIjq|)O39t z5gWP)^&w)84Si}e*pyYqD5k{2&QzB?A8~T1BB;*KDwlF1IqDz<$aPo~wM=NYtUk0_ zjt4!85M+MOWrSjzSnizdPLaru2ajH5RjR0D^e{%O)nl+ls1KRvxX|kn3O&!lo{O3Y zyM3Tj67+eIVp%FliU-WdvjNaws%i5PFJew*%xzWBl3jYSm6S4j$JHltmwi#qMu|SH zy8sha?jay5&y0fVb@GPjEv9ouJ03DgdQS3Zu#)%17#D1PAS1m};@4X@oB(tD8$}UoJm-`rI*>|N0eNeEiw>SAY5O!gm+` feRk{52P@jcwOcQ~{^8(n^&jYLY)4N%+5hT4VfFu` literal 0 HcmV?d00001