From 31306bb1168ee2ae7b35b6ae177574f4e6ac668c Mon Sep 17 00:00:00 2001 From: Jenny Date: Sat, 25 Jan 2025 23:56:13 +0100 Subject: [PATCH] custom particles --- gradle.properties | 2 +- .../EnhancedExplosives.java | 2 + .../entities/arrows/baseArrow.java | 2 +- .../entities/arrows/concussiveArrow.java | 14 ++-- .../entities/arrows/tntArrow.java | 14 ++-- .../entities/client/TNTArrowRenderer.java | 2 +- .../enhancedexplosives/eventBusEvents.java | 21 ++++++ .../particles/arrow/ArrowParticle.java | 62 ++++++++++++++++++ .../particles/particles.java | 26 ++++++++ .../particles/particle_concussive_arrow.json | 5 ++ .../particles/particle_tnt_arrow.json | 5 ++ .../particle/particle_concussive_arrow.png | Bin 0 -> 123 bytes .../textures/particle/particle_tnt_arrow.png | Bin 0 -> 123 bytes 13 files changed, 140 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java create mode 100644 src/main/java/com/jenny/enhancedexplosives/particles/arrow/ArrowParticle.java create mode 100644 src/main/java/com/jenny/enhancedexplosives/particles/particles.java create mode 100644 src/main/resources/assets/enhancedexplosives/particles/particle_concussive_arrow.json create mode 100644 src/main/resources/assets/enhancedexplosives/particles/particle_tnt_arrow.json create mode 100644 src/main/resources/assets/enhancedexplosives/textures/particle/particle_concussive_arrow.png create mode 100644 src/main/resources/assets/enhancedexplosives/textures/particle/particle_tnt_arrow.png diff --git a/gradle.properties b/gradle.properties index 52f83eb..4d4fa1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ mod_name=Enhanced Explosives # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=0.8.3 +mod_version=0.8.4 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java b/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java index 3a5b9ae..400689a 100644 --- a/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java +++ b/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java @@ -1,6 +1,7 @@ package com.jenny.enhancedexplosives; import com.jenny.enhancedexplosives.blocks.blocks; +import com.jenny.enhancedexplosives.particles.particles; import com.jenny.enhancedexplosives.config.ConfigClient; import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.items.items; @@ -30,6 +31,7 @@ public class EnhancedExplosives { modEventBus.addListener(this::commonSetup); + particles.register(modEventBus); blocks.register(modEventBus); items.register(modEventBus); creativeTab.register(modEventBus); diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java index 56c1559..f1c92d3 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java @@ -230,7 +230,7 @@ public class baseArrow extends AbstractArrow { } - public void spawnParticles() { + public void spawnParticles(float partialTicks) { } diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/concussiveArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/concussiveArrow.java index a23d7f5..fb85ae3 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/concussiveArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/concussiveArrow.java @@ -3,12 +3,13 @@ package com.jenny.enhancedexplosives.entities.arrows; import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.items.items; import com.jenny.enhancedexplosives.config.ConfigClient; +import com.jenny.enhancedexplosives.particles.particles; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; public class concussiveArrow extends baseArrow{ @@ -43,12 +44,13 @@ public class concussiveArrow extends baseArrow{ } @Override - public void spawnParticles() { + public void spawnParticles(float partialTicks) { for (int i = 1; i <= ConfigClient.arrowParticleCount; i++) { - double x = getX() + (double) level().getRandom().nextInt(-10, 11) / 10; - double y = getY() + (double) level().getRandom().nextInt(-10, 11) / 10; - double z = getZ() + (double) level().getRandom().nextInt(-10, 11) / 10; - level().addParticle(ParticleTypes.WAX_ON, x, y, z, this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z); + Vec3 pos = getPosition(partialTicks); + double x = pos.x + (double) level().getRandom().nextInt(-5, 6) / 10; + double y = pos.y + (double) level().getRandom().nextInt(-5, 6) / 10; + double z = pos.z + (double) level().getRandom().nextInt(-5, 6) / 10; + level().addParticle(particles.CONCUSSIVE_ARROW_PARTICLE.get(), x, y, z, this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z); } } } diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tntArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tntArrow.java index b8f6ed7..6b2e8b4 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tntArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tntArrow.java @@ -4,11 +4,12 @@ import com.jenny.enhancedexplosives.config.ConfigClient; import com.jenny.enhancedexplosives.items.items; import com.jenny.enhancedexplosives.entities.entities; -import net.minecraft.core.particles.ParticleTypes; +import com.jenny.enhancedexplosives.particles.particles; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; public class tntArrow extends baseArrow { @@ -44,12 +45,13 @@ public class tntArrow extends baseArrow { } @Override - public void spawnParticles() { + public void spawnParticles(float partialTicks) { for (int i = 1; i <= ConfigClient.arrowParticleCount; i++) { - double x = getX() + (double) level().getRandom().nextInt(-10, 11) / 10; - double y = getY() + (double) level().getRandom().nextInt(-10, 11) / 10; - double z = getZ() + (double) level().getRandom().nextInt(-10, 11) / 10; - level().addParticle(ParticleTypes.WAX_ON, x, y, z, this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z); + Vec3 pos = getPosition(partialTicks); + double x = pos.x + (double) level().getRandom().nextInt(-5, 6) / 10; + double y = pos.y + (double) level().getRandom().nextInt(-5, 6) / 10; + double z = pos.z + (double) level().getRandom().nextInt(-5, 6) / 10; + level().addParticle(particles.TNT_ARROW_PARTICLE.get(), x, y, z, this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z); } } } diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/client/TNTArrowRenderer.java b/src/main/java/com/jenny/enhancedexplosives/entities/client/TNTArrowRenderer.java index 600cddd..23c1ea2 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/client/TNTArrowRenderer.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/client/TNTArrowRenderer.java @@ -35,7 +35,7 @@ public class TNTArrowRenderer extends EntityRenderer { pPoseStack.translate(-0.5F, -0.5F, 0.5F); pPoseStack.mulPose(Axis.YP.rotationDegrees(90.0F)); if (renderParticles) { - pEntity.spawnParticles(); + pEntity.spawnParticles(pPartialTicks); } TntMinecartRenderer.renderWhiteSolidBlock(this.blockRenderer, Blocks.TNT.defaultBlockState(), pPoseStack, pBuffer, pPackedLight, i / 5 % 2 == 0); pPoseStack.popPose(); diff --git a/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java b/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java new file mode 100644 index 0000000..9502de2 --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java @@ -0,0 +1,21 @@ +package com.jenny.enhancedexplosives; + +import com.jenny.enhancedexplosives.particles.particles; +import com.jenny.enhancedexplosives.particles.arrow.*; +import net.minecraft.client.Minecraft; +import net.minecraftforge.client.event.RegisterParticleProvidersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import static com.jenny.enhancedexplosives.EnhancedExplosives.MODID; + +@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class eventBusEvents { + @SubscribeEvent + public static void registerParticleFactories(final RegisterParticleProvidersEvent event) { + Minecraft.getInstance().particleEngine.register(particles.CONCUSSIVE_ARROW_PARTICLE.get(), + ArrowParticle.Provider::new); + Minecraft.getInstance().particleEngine.register(particles.TNT_ARROW_PARTICLE.get(), + ArrowParticle.Provider::new); + } +} diff --git a/src/main/java/com/jenny/enhancedexplosives/particles/arrow/ArrowParticle.java b/src/main/java/com/jenny/enhancedexplosives/particles/arrow/ArrowParticle.java new file mode 100644 index 0000000..386892a --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/particles/arrow/ArrowParticle.java @@ -0,0 +1,62 @@ +package com.jenny.enhancedexplosives.particles.arrow; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.*; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; + +public class ArrowParticle extends TextureSheetParticle { + private final float quadSizeStart; + + protected ArrowParticle(ClientLevel level, double xCoord, double yCoord, double zCoord, + SpriteSet spriteSet, double xd, double yd, double zd) { + super(level, xCoord, yCoord, zCoord, xd, yd, zd); + + this.friction = 0.8F; + this.xd = xd; + this.yd = yd; + this.zd = zd; + this.quadSize *= 0.85F; + this.quadSizeStart = this.quadSize; + this.lifetime = 20; + this.setSpriteFromAge(spriteSet); + + this.rCol = 1f; + this.gCol = 1f; + this.bCol = 1f; + } + + @Override + public void tick() { + super.tick(); + fadeOut(); + } + + private void fadeOut() { + this.alpha = (-(1/(float)lifetime) * age + 1); + this.quadSize = this.quadSizeStart * ((float) age / lifetime); + } + + @Override + @NotNull + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + @OnlyIn(Dist.CLIENT) + public static class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet spriteSet) { + this.sprites = spriteSet; + } + + public Particle createParticle(@NotNull SimpleParticleType particleType, @NotNull ClientLevel level, + double x, double y, double z, + double dx, double dy, double dz) { + return new ArrowParticle(level, x, y, z, this.sprites, dx, dy, dz); + } + } +} diff --git a/src/main/java/com/jenny/enhancedexplosives/particles/particles.java b/src/main/java/com/jenny/enhancedexplosives/particles/particles.java new file mode 100644 index 0000000..0301147 --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/particles/particles.java @@ -0,0 +1,26 @@ +package com.jenny.enhancedexplosives.particles; + +import net.minecraft.client.particle.Particle; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.world.item.Item; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import static com.jenny.enhancedexplosives.EnhancedExplosives.MODID; + +public class particles { + public static final DeferredRegister> PARTICLES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, MODID); + + public static final RegistryObject CONCUSSIVE_ARROW_PARTICLE = + PARTICLES.register("particle_concussive_arrow", () -> new SimpleParticleType(true)); + public static final RegistryObject TNT_ARROW_PARTICLE = + PARTICLES.register("particle_tnt_arrow", () -> new SimpleParticleType(true)); + + public static void register(IEventBus bus) { + PARTICLES.register(bus); + } +} diff --git a/src/main/resources/assets/enhancedexplosives/particles/particle_concussive_arrow.json b/src/main/resources/assets/enhancedexplosives/particles/particle_concussive_arrow.json new file mode 100644 index 0000000..513eb77 --- /dev/null +++ b/src/main/resources/assets/enhancedexplosives/particles/particle_concussive_arrow.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "enhancedexplosives:particle_concussive_arrow" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/enhancedexplosives/particles/particle_tnt_arrow.json b/src/main/resources/assets/enhancedexplosives/particles/particle_tnt_arrow.json new file mode 100644 index 0000000..e70b6fd --- /dev/null +++ b/src/main/resources/assets/enhancedexplosives/particles/particle_tnt_arrow.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "enhancedexplosives:particle_tnt_arrow" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/enhancedexplosives/textures/particle/particle_concussive_arrow.png b/src/main/resources/assets/enhancedexplosives/textures/particle/particle_concussive_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..b160df51752e94d775fa2bf07a647aab04a8e4fa GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|Og&v3LnNjq zn{2H3F`tp^+?)yNDGtm!FPM0M;KZyM8#Eo*B-|FwKG31p@Q$x3Od!NTfPq1vhG$uR SuuKln00vK2KbLh*2~7YYjv+_@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/enhancedexplosives/textures/particle/particle_tnt_arrow.png b/src/main/resources/assets/enhancedexplosives/textures/particle/particle_tnt_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2bf8a6710db95bea51d46e0d1b6fb86ea67f13a4 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|Og&v3LnNjq z$E;oYaXurL)B3v!DGtm!FPM0M;KZyM8#Eo*B-|FwKG31p@Q$x3Od!NTfPrDIFAtmW S5ubdZ0Sun5elF{r5}E)gl_6yS literal 0 HcmV?d00001