From 7b04991a7c627886f9f35209edef2c8703a7499d Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 1 Oct 2020 19:40:47 +0300 Subject: [PATCH] Particles --- .../ru/betterend/client/BetterEndClient.java | 2 + .../mixin/client/BackgroundRendererMixin.java | 1 - .../particle/AnimatedTestParticle.java | 56 +++++++++++++++++++ .../betterend/registry/ParticleRegistry.java | 20 +++++++ .../world/biome/BiomeDefinition.java | 5 +- .../world/biome/BiomeFoggyMushroomland.java | 2 + .../assets/betterend/particles/test.json | 19 +++++++ 7 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/betterend/particle/AnimatedTestParticle.java create mode 100644 src/main/java/ru/betterend/registry/ParticleRegistry.java create mode 100644 src/main/resources/assets/betterend/particles/test.json diff --git a/src/main/java/ru/betterend/client/BetterEndClient.java b/src/main/java/ru/betterend/client/BetterEndClient.java index e5d19664..f1a200ea 100644 --- a/src/main/java/ru/betterend/client/BetterEndClient.java +++ b/src/main/java/ru/betterend/client/BetterEndClient.java @@ -5,6 +5,7 @@ import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.registry.Registry; import ru.betterend.registry.BlockEntityRenderRegistry; +import ru.betterend.registry.ParticleRegistry; import ru.betterend.registry.ScreensRegistry; public class BetterEndClient implements ClientModInitializer { @@ -13,6 +14,7 @@ public class BetterEndClient implements ClientModInitializer { registerRenderLayers(); BlockEntityRenderRegistry.register(); ScreensRegistry.register(); + ParticleRegistry.register(); } private void registerRenderLayers() { diff --git a/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java b/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java index e3a209b8..7f08a136 100644 --- a/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java @@ -23,7 +23,6 @@ import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Category; import ru.betterend.registry.BiomeRegistry; import ru.betterend.util.BackgroundInfo; -import ru.betterend.util.MHelper; import ru.betterend.world.biome.EndBiome; @Mixin(BackgroundRenderer.class) diff --git a/src/main/java/ru/betterend/particle/AnimatedTestParticle.java b/src/main/java/ru/betterend/particle/AnimatedTestParticle.java new file mode 100644 index 00000000..03f53350 --- /dev/null +++ b/src/main/java/ru/betterend/particle/AnimatedTestParticle.java @@ -0,0 +1,56 @@ +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/registry/ParticleRegistry.java b/src/main/java/ru/betterend/registry/ParticleRegistry.java new file mode 100644 index 00000000..2d45d681 --- /dev/null +++ b/src/main/java/ru/betterend/registry/ParticleRegistry.java @@ -0,0 +1,20 @@ +package ru.betterend.registry; + +import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +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; + +public class ParticleRegistry { + public static final DefaultParticleType TEST = register("test"); + + public static void register() { + ParticleFactoryRegistry.getInstance().register(TEST, AnimatedTestParticle.Factory::new); + } + + private static DefaultParticleType register(String name) { + return Registry.register(Registry.PARTICLE_TYPE, BetterEnd.getResId(name), FabricParticleTypes.simple()); + } +} diff --git a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java index 05730723..431b43f3 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java +++ b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java @@ -8,6 +8,7 @@ import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.client.sound.MusicType; import net.minecraft.entity.EntityType; +import net.minecraft.particle.ParticleEffect; import net.minecraft.sound.BiomeAdditionsSound; import net.minecraft.sound.BiomeMoodSound; import net.minecraft.sound.SoundEvent; @@ -83,8 +84,8 @@ public class BiomeDefinition { return this; } - public BiomeDefinition setParticleConfig(BiomeParticleConfig config) { - this.particleConfig = config; + public BiomeDefinition setParticles(ParticleEffect particle, float probability) { + this.particleConfig = new BiomeParticleConfig(particle, probability); return this; } diff --git a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java index e4132ce6..769d8644 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java +++ b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java @@ -2,6 +2,7 @@ package ru.betterend.world.biome; import ru.betterend.registry.BlockRegistry; import ru.betterend.registry.FeatureRegistry; +import ru.betterend.registry.ParticleRegistry; public class BiomeFoggyMushroomland extends EndBiome { public BiomeFoggyMushroomland() { @@ -11,6 +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) .addFeature(FeatureRegistry.ENDER_ORE) .addFeature(FeatureRegistry.END_LAKE) .addFeature(FeatureRegistry.MOSSY_GLOWSHROOM) diff --git a/src/main/resources/assets/betterend/particles/test.json b/src/main/resources/assets/betterend/particles/test.json new file mode 100644 index 00000000..c531c014 --- /dev/null +++ b/src/main/resources/assets/betterend/particles/test.json @@ -0,0 +1,19 @@ +{ + "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