From 022260e51e78dd69db2e676ba0b5ef47af1b3c0a Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 14 Dec 2020 13:47:35 +0300 Subject: [PATCH] Tenanea petals --- .../betterend/blocks/BlockTenaneaFlowers.java | 17 +++ .../particle/ParticleTenaneaPetal.java | 119 ++++++++++++++++++ .../ru/betterend/registry/EndParticles.java | 3 + src/main/java/ru/betterend/util/MHelper.java | 2 +- .../materialmaps/particle/tenanea_petal.json | 3 + .../betterend/particles/tenanea_petal.json | 6 + .../textures/particle/tenanea_petal_0.png | Bin 0 -> 1665 bytes .../textures/particle/tenanea_petal_1.png | Bin 0 -> 1872 bytes 8 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java create mode 100644 src/main/resources/assets/betterend/materialmaps/particle/tenanea_petal.json create mode 100644 src/main/resources/assets/betterend/particles/tenanea_petal.json create mode 100644 src/main/resources/assets/betterend/textures/particle/tenanea_petal_0.png create mode 100644 src/main/resources/assets/betterend/textures/particle/tenanea_petal_1.png diff --git a/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java b/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java index 4c9c394b..fbd09f88 100644 --- a/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java +++ b/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +import java.util.Random; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.block.BlockState; import net.minecraft.client.color.block.BlockColorProvider; import net.minecraft.client.color.item.ItemColorProvider; @@ -7,8 +11,10 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3i; import net.minecraft.world.BlockView; +import net.minecraft.world.World; import ru.betterend.blocks.basis.BlockVine; import ru.betterend.interfaces.IColorProvider; +import ru.betterend.registry.EndParticles; import ru.betterend.util.MHelper; public class BlockTenaneaFlowers extends BlockVine implements IColorProvider { @@ -52,6 +58,17 @@ public class BlockTenaneaFlowers extends BlockVine implements IColorProvider { return false; } + @Environment(EnvType.CLIENT) + public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { + super.randomDisplayTick(state, world, pos, random); + if (random.nextInt(32) == 0) { + double x = (double) pos.getX() + random.nextGaussian() + 0.5; + double z = (double) pos.getZ() + random.nextGaussian() + 0.5; + double y = (double) pos.getY() + random.nextDouble(); + world.addParticle(EndParticles.TENANEA_PETAL, x, y, z, 0, 0, 0); + } + } + static { COLORS = new Vec3i[] { new Vec3i(250, 111, 222), diff --git a/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java b/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java new file mode 100644 index 00000000..a24e1b16 --- /dev/null +++ b/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java @@ -0,0 +1,119 @@ +package ru.betterend.particle; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.ParticleTextureSheet; +import net.minecraft.client.particle.SpriteBillboardParticle; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particle.DefaultParticleType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import ru.betterend.interfaces.IColorProvider; +import ru.betterend.registry.EndBlocks; +import ru.betterend.util.MHelper; + +@Environment(EnvType.CLIENT) +public class ParticleTenaneaPetal extends SpriteBillboardParticle { + private static BlockColorProvider provider; + + private double preVX; + private double preVY; + private double preVZ; + private double nextVX; + private double nextVY; + private double nextVZ; + private float angleSpeed; + + protected ParticleTenaneaPetal(ClientWorld world, double x, double y, double z, double r, double g, double b, SpriteProvider sprites) { + super(world, x, y, z, r, g, b); + setSprite(sprites); + + if (provider == null) { + IColorProvider block = (IColorProvider) EndBlocks.TENANEA_FLOWERS; + provider = block.getProvider(); + } + int color = provider.getColor(null, null, new BlockPos(x, y, z), 0); + this.colorRed = ((color >> 16) & 255) / 255F; + this.colorGreen = ((color >> 8) & 255) / 255F; + this.colorBlue = ((color) & 255) / 255F; + + this.maxAge = MHelper.randRange(120, 200, random); + this.scale = MHelper.randRange(0.05F, 0.15F, random); + this.setColorAlpha(0); + this.angle = 0.1F;//random.nextFloat() * MHelper.PI2; + + preVX = 0; + preVY = 0; + preVZ = 0; + + nextVX = random.nextGaussian() * 0.02; + nextVY = -random.nextDouble() * 0.02 - 0.02; + nextVZ = random.nextGaussian() * 0.02; + + angleSpeed = random.nextFloat() * 0.0001F + 0.0001F; + if (random.nextBoolean()) { + angleSpeed = -angleSpeed; + } + } + + @Override + public int getColorMultiplier(float tint) { + return 15728880; + } + + @Override + public void tick() { + int ticks = this.age & 63; + if (ticks == 0) { + preVX = nextVX; + preVY = nextVY; + preVZ = nextVZ; + nextVX = random.nextGaussian() * 0.02; + nextVY = -random.nextDouble() * 0.02 - 0.02; + nextVZ = random.nextGaussian() * 0.02; + } + double delta = (double) ticks / 63.0; + + if (this.age <= 40) { + this.setColorAlpha(this.age / 40F); + } + else if (this.age >= this.maxAge - 40) { + this.setColorAlpha((this.maxAge - this.age) / 40F); + } + + 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); + //this.angle += angleSpeed; + + super.tick(); + } + + @Override + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; + } + + @Environment(EnvType.CLIENT) + public static class FactoryTenaneaPetal implements ParticleFactory { + + private final SpriteProvider sprites; + + public FactoryTenaneaPetal(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 ParticleTenaneaPetal(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 c04c279c..50b08fe7 100644 --- a/src/main/java/ru/betterend/registry/EndParticles.java +++ b/src/main/java/ru/betterend/registry/EndParticles.java @@ -14,6 +14,7 @@ import ru.betterend.particle.ParticleGeyser; import ru.betterend.particle.ParticleGlowingSphere; import ru.betterend.particle.ParticleSnowflake; import ru.betterend.particle.ParticleSulphur; +import ru.betterend.particle.ParticleTenaneaPetal; import ru.betterend.particle.PaticlePortalSphere; public class EndParticles { @@ -25,6 +26,7 @@ public class EndParticles { 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 final DefaultParticleType TENANEA_PETAL = register("tenanea_petal"); public static void register() { ParticleFactoryRegistry.getInstance().register(GLOWING_SPHERE, ParticleGlowingSphere.FactoryGlowingSphere::new); @@ -35,6 +37,7 @@ public class EndParticles { ParticleFactoryRegistry.getInstance().register(SNOWFLAKE, ParticleSnowflake.FactorySnowflake::new); ParticleFactoryRegistry.getInstance().register(AMBER_SPHERE, ParticleGlowingSphere.FactoryGlowingSphere::new); ParticleFactoryRegistry.getInstance().register(BLACK_SPORE, ParticleBlackSpore.FactoryBlackSpore::new); + ParticleFactoryRegistry.getInstance().register(TENANEA_PETAL, ParticleTenaneaPetal.FactoryTenaneaPetal::new); } private static DefaultParticleType register(String name) { diff --git a/src/main/java/ru/betterend/util/MHelper.java b/src/main/java/ru/betterend/util/MHelper.java index de241a06..3b6aa1a7 100644 --- a/src/main/java/ru/betterend/util/MHelper.java +++ b/src/main/java/ru/betterend/util/MHelper.java @@ -201,7 +201,7 @@ public class MHelper { } } - return ALPHA | red << 16 | green << 8 | blue << 0; + return ALPHA | red << 16 | green << 8 | blue; } public static float[] fromRGBtoHSB(int r, int g, int b) { diff --git a/src/main/resources/assets/betterend/materialmaps/particle/tenanea_petal.json b/src/main/resources/assets/betterend/materialmaps/particle/tenanea_petal.json new file mode 100644 index 00000000..ab909d8e --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/particle/tenanea_petal.json @@ -0,0 +1,3 @@ +{ + "material": "canvas:emissive_no_diffuse" +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/particles/tenanea_petal.json b/src/main/resources/assets/betterend/particles/tenanea_petal.json new file mode 100644 index 00000000..a9724371 --- /dev/null +++ b/src/main/resources/assets/betterend/particles/tenanea_petal.json @@ -0,0 +1,6 @@ +{ + "textures": [ + "betterend:tenanea_petal_0", + "betterend:tenanea_petal_1" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/particle/tenanea_petal_0.png b/src/main/resources/assets/betterend/textures/particle/tenanea_petal_0.png new file mode 100644 index 0000000000000000000000000000000000000000..efdb1ba5d4e90424003ad42d9395b25c4727ad6d GIT binary patch literal 1665 zcmbVNO>f*p7hGr!kqI5-r#G$h@<6SFjk83;G zO-?8vqzI%+94ih~a7Nsb_>iKiry|53;1mf72@o6#LWFmAy(U3viCC@I_V}6SdEO7d zySKV>b@sw@7bHoVZ7;Xh;CxOT=bnV${b#;-4^HRP&K(v^i#ipd5m zl@8h2ATCuF=H)9R4+vsbV0jb|lH42l%9z)KYq6{;@)%NV_{yRXl-Gk*xydso*K4*) zbjy$(x2D_3HLMq91L=;298EV>q2sPhM3OrJi{Nj|M#d4BGX%X>67L2&dHw#|@r;`xkw4zP&GEI;$ zZG=-zuOSiA7)VKlOEaOX|o{ zEyqQwWm{Cm4c1UGH5?;!ta{jB)BP<@Hbrs8{z;!xPJrVdRYdC{qQq6}rXH%OVG*_4 zb%4!wiAh{X*Bh0a*Rlv+H9R=VDqK-uL?NS`F&&j!mZNq}tgAM%7`8BFup}CK z+#}v{ltcBl%U9$YyIEchB6-{v9wwsQeT9fRGpdx!(FyrDm2$a%*k?fch~iJwa~>8$ zoUz3o6r9I4lj<+7|{&dxx*gEe1gns;=?#twmK2CZJCa9)}cr-CNjZY_4^z9WAg9xj}n|7!mw>7&b|KYsh+ z@Z+nu{`%(Ly$84MNSA*9{_C^vn!WpI|L)!H?Vlg~LO%OsZ}0ruyStCQd1mH=+4m0) n4h|Wmb8kJ}duL|t#~CSl{L)kRf1SS}{v_H|uUHxP%a5*#Qu-sHz@(6+3A$d2vtH{bi-d!J|C z-dKNedFi1gMNyU;Yqd?dF3NLp0sgNY|Mn7G?oZavXNq#{ggoz2KD}~MQ5HTATU+^7 z^W}hws6?1(^U^3v0Ieu1r$-5)eV(gr-VNi5c5DATO$}K^JLfcUGpX`kxVD$_GkfbT zy4R;Z(@sC9u8aa8h+lki1{fR%JkStGS_8MaosDT^|mIrJ+?4 zX;(LV-`BCJn)lGSQeHm0mTaW0IR z7-ml%n8Rx%=M~MwCPs#du+x%_gTsCrTLH!sXj8DTvpWwp?3Q5#a9HLX6kNkdPW})x0 zm28_6aUDx!>s6#CeFRrohQwQ6~_I!+>bqtX*FC)TC&+K@%(<$>=_Vel|e#B0I3qSr# z_0!_e9*MggR#0905BVI)ofDylyEw%9e` zq1bnL45dn8SLvSbzXdzetBu-f>*VDx-rrwV9(ka8q4afqY3tq3>c3oF$ZkLNXs>tu z@*7v#$Jds>cWxZ}X84|A|Ge_pkM-C3?5B_3S$uZstFwxEV)(dr{l3Q8mp