Skip to content

Commit f459ba9

Browse files
KaupenjoeKaupenjoe
authored andcommitted
custom particle types
1 parent 27a3761 commit f459ba9

7 files changed

Lines changed: 87 additions & 1 deletion

File tree

src/main/java/net/kaupenjoe/tutorialmod/TutorialMod.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010
import net.kaupenjoe.tutorialmod.entity.client.TomahawkProjectileRenderer;
1111
import net.kaupenjoe.tutorialmod.item.ModCreativeModeTabs;
1212
import net.kaupenjoe.tutorialmod.item.ModItems;
13+
import net.kaupenjoe.tutorialmod.particle.BismuthParticles;
14+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
1315
import net.kaupenjoe.tutorialmod.potion.ModPotions;
1416
import net.kaupenjoe.tutorialmod.sound.ModSounds;
1517
import net.kaupenjoe.tutorialmod.util.ModItemProperties;
1618
import net.kaupenjoe.tutorialmod.villager.ModVillagers;
1719
import net.minecraft.client.renderer.entity.EntityRenderers;
1820
import net.minecraft.world.item.CreativeModeTabs;
21+
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
1922
import org.slf4j.Logger;
2023

2124
import com.mojang.logging.LogUtils;
@@ -65,6 +68,7 @@ public TutorialMod(IEventBus modEventBus, ModContainer modContainer) {
6568
ModEntities.register(modEventBus);
6669

6770
ModVillagers.register(modEventBus);
71+
ModParticles.register(modEventBus);
6872

6973
// Register the item to a creative tab
7074
modEventBus.addListener(this::addCreative);
@@ -107,5 +111,10 @@ public static void onClientSetup(FMLClientSetupEvent event) {
107111

108112
EntityRenderers.register(ModEntities.CHAIR_ENTITY.get(), ChairRenderer::new);
109113
}
114+
115+
@SubscribeEvent
116+
public static void registerParticleFactories(RegisterParticleProvidersEvent event) {
117+
event.registerSpriteSet(ModParticles.BISMUTH_PARTICLES.get(), BismuthParticles.Provider::new);
118+
}
110119
}
111120
}

src/main/java/net/kaupenjoe/tutorialmod/block/custom/MagicBlock.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package net.kaupenjoe.tutorialmod.block.custom;
22

3-
import net.kaupenjoe.tutorialmod.item.ModItems;
3+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
44
import net.kaupenjoe.tutorialmod.util.ModTags;
55
import net.minecraft.core.BlockPos;
66
import net.minecraft.network.chat.Component;
@@ -29,6 +29,9 @@ public MagicBlock(Properties properties) {
2929
@Override
3030
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos,
3131
Player player, BlockHitResult hitResult) {
32+
level.addParticle(ModParticles.BISMUTH_PARTICLES.get(), pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5,
33+
0, 1, 0);
34+
3235
level.playSound(player, pos, SoundEvents.AMETHYST_CLUSTER_PLACE, SoundSource.BLOCKS, 1f, 1f);
3336
return InteractionResult.SUCCESS;
3437
}

src/main/java/net/kaupenjoe/tutorialmod/item/custom/ChiselItem.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.kaupenjoe.tutorialmod.block.ModBlocks;
44
import net.kaupenjoe.tutorialmod.component.ModDataComponents;
5+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
56
import net.kaupenjoe.tutorialmod.sound.ModSounds;
67
import net.minecraft.client.gui.screens.Screen;
78
import net.minecraft.client.multiplayer.ClientLevel;
@@ -61,6 +62,10 @@ public InteractionResult useOn(UseOnContext context) {
6162
context.getClickedPos().getX() + 0.5, context.getClickedPos().getY() + 1.5,
6263
context.getClickedPos().getZ() + 0.5, 5, 0, 0, 0, 3);
6364

65+
((ServerLevel) level).sendParticles(ModParticles.BISMUTH_PARTICLES.get(),
66+
context.getClickedPos().getX() + 0.5, context.getClickedPos().getY() + 1.0,
67+
context.getClickedPos().getZ() + 0.5, 5, 0, 0, 0, 3);
68+
6469
context.getItemInHand().set(ModDataComponents.COORDINATES, context.getClickedPos());
6570
}
6671
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package net.kaupenjoe.tutorialmod.particle;
2+
3+
import net.minecraft.client.multiplayer.ClientLevel;
4+
import net.minecraft.client.particle.*;
5+
import net.minecraft.core.particles.SimpleParticleType;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
public class BismuthParticles extends TextureSheetParticle {
9+
protected BismuthParticles(ClientLevel level, double x, double y, double z, SpriteSet spriteSet,
10+
double xSpeed, double ySpeed, double zSpeed) {
11+
super(level, x, y, z, xSpeed, ySpeed, zSpeed);
12+
13+
this.friction = 0.8f;
14+
15+
this.lifetime = 80;
16+
this.setSpriteFromAge(spriteSet);
17+
18+
this.rCol = 1f;
19+
this.gCol = 1f;
20+
this.bCol = 1f;
21+
}
22+
23+
@Override
24+
public ParticleRenderType getRenderType() {
25+
return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT;
26+
}
27+
28+
public static class Provider implements ParticleProvider<SimpleParticleType> {
29+
private final SpriteSet spriteSet;
30+
31+
public Provider(SpriteSet spriteSet) {
32+
this.spriteSet = spriteSet;
33+
}
34+
35+
@Nullable
36+
@Override
37+
public Particle createParticle(SimpleParticleType simpleParticleType, ClientLevel clientLevel,
38+
double pX, double pY, double pZ, double pXSpeed, double pYSpeed, double pZSpeed) {
39+
return new BismuthParticles(clientLevel, pX, pY, pZ, this.spriteSet, pXSpeed, pYSpeed, pZSpeed);
40+
}
41+
}
42+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package net.kaupenjoe.tutorialmod.particle;
2+
3+
import net.kaupenjoe.tutorialmod.TutorialMod;
4+
import net.minecraft.core.particles.ParticleType;
5+
import net.minecraft.core.particles.SimpleParticleType;
6+
import net.minecraft.core.registries.BuiltInRegistries;
7+
import net.neoforged.bus.api.IEventBus;
8+
import net.neoforged.neoforge.registries.DeferredRegister;
9+
10+
import java.util.function.Supplier;
11+
12+
public class ModParticles {
13+
public static final DeferredRegister<ParticleType<?>> PARTICLE_TYPES =
14+
DeferredRegister.create(BuiltInRegistries.PARTICLE_TYPE, TutorialMod.MOD_ID);
15+
16+
public static final Supplier<SimpleParticleType> BISMUTH_PARTICLES =
17+
PARTICLE_TYPES.register("bismuth_particles", () -> new SimpleParticleType(true));
18+
19+
public static void register(IEventBus eventBus) {
20+
PARTICLE_TYPES.register(eventBus);
21+
}
22+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"textures": [
3+
"tutorialmod:bismuth"
4+
]
5+
}
555 Bytes
Loading

0 commit comments

Comments
 (0)