Skip to content

Commit 687c978

Browse files
KaupenjoeKaupenjoe
authored andcommitted
custom particle type
1 parent c897b15 commit 687c978

8 files changed

Lines changed: 85 additions & 0 deletions

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import net.kaupenjoe.tutorialmod.entity.custom.MantisEntity;
1717
import net.kaupenjoe.tutorialmod.item.ModItemGroups;
1818
import net.kaupenjoe.tutorialmod.item.ModItems;
19+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
1920
import net.kaupenjoe.tutorialmod.potion.ModPotions;
2021
import net.kaupenjoe.tutorialmod.sound.ModSounds;
2122
import net.kaupenjoe.tutorialmod.util.HammerUsageEvent;
@@ -59,6 +60,8 @@ public void onInitialize() {
5960
ModEntities.registerModEntities();
6061
ModVillagers.registerVillagers();
6162

63+
ModParticles.registerParticles();
64+
6265
FuelRegistry.INSTANCE.add(ModItems.STARLIGHT_ASHES, 600);
6366

6467
PlayerBlockBreakEvents.BEFORE.register(new HammerUsageEvent());

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

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

33
import net.fabricmc.api.ClientModInitializer;
44
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
5+
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry;
56
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
67
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
78
import net.kaupenjoe.tutorialmod.block.ModBlocks;
89
import net.kaupenjoe.tutorialmod.entity.ModEntities;
910
import net.kaupenjoe.tutorialmod.entity.client.*;
11+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
12+
import net.kaupenjoe.tutorialmod.particle.PinkGarnetParticle;
1013
import net.kaupenjoe.tutorialmod.util.ModModelPredicates;
1114
import net.minecraft.client.render.RenderLayer;
1215

@@ -30,5 +33,7 @@ public void onInitializeClient() {
3033
EntityRendererRegistry.register(ModEntities.TOMAHAWK, TomahawkProjectileRenderer::new);
3134

3235
EntityRendererRegistry.register(ModEntities.CHAIR, ChairRenderer::new);
36+
37+
ParticleFactoryRegistry.getInstance().register(ModParticles.PINK_GARNET_PARTICLE, PinkGarnetParticle.Factory::new);
3338
}
3439
}

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

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

33
import net.kaupenjoe.tutorialmod.item.ModItems;
4+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
45
import net.kaupenjoe.tutorialmod.util.ModTags;
56
import net.minecraft.block.Block;
67
import net.minecraft.block.BlockState;
@@ -29,6 +30,9 @@ public MagicBlock(Settings settings) {
2930
@Override
3031
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player,
3132
BlockHitResult hit) {
33+
world.addParticle(ModParticles.PINK_GARNET_PARTICLE, pos.getX() + 0.5, pos.getY() + 1,
34+
pos.getZ() + 0.5, 0, 1, 0);
35+
3236
world.playSound(player, pos, SoundEvents.BLOCK_AMETHYST_BLOCK_CHIME, SoundCategory.BLOCKS, 1f, 1f);
3337
return ActionResult.SUCCESS;
3438
}

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.ModDataComponentTypes;
5+
import net.kaupenjoe.tutorialmod.particle.ModParticles;
56
import net.kaupenjoe.tutorialmod.sound.ModSounds;
67
import net.minecraft.block.Block;
78
import net.minecraft.block.Blocks;
@@ -66,6 +67,10 @@ public ActionResult useOnBlock(ItemUsageContext context) {
6667
context.getBlockPos().getX() + 0.5, context.getBlockPos().getY() + 1.5,
6768
context.getBlockPos().getZ() + 0.5, 10, 0, 0, 0, 3);
6869

70+
((ServerWorld) world).spawnParticles(ModParticles.PINK_GARNET_PARTICLE,
71+
context.getBlockPos().getX() + 0.5, context.getBlockPos().getY() + 1.0,
72+
context.getBlockPos().getZ() + 0.5, 8, 0, 0, 0, 2);
73+
6974

7075

7176
context.getStack().set(ModDataComponentTypes.COORDINATES, context.getBlockPos());
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.kaupenjoe.tutorialmod.particle;
2+
3+
import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes;
4+
import net.kaupenjoe.tutorialmod.TutorialMod;
5+
import net.minecraft.particle.SimpleParticleType;
6+
import net.minecraft.registry.Registries;
7+
import net.minecraft.registry.Registry;
8+
import net.minecraft.util.Identifier;
9+
10+
public class ModParticles {
11+
public static final SimpleParticleType PINK_GARNET_PARTICLE =
12+
registerParticle("pink_garnet_particle", FabricParticleTypes.simple());
13+
14+
private static SimpleParticleType registerParticle(String name, SimpleParticleType particleType) {
15+
return Registry.register(Registries.PARTICLE_TYPE, Identifier.of(TutorialMod.MOD_ID, name), particleType);
16+
}
17+
18+
public static void registerParticles() {
19+
TutorialMod.LOGGER.info("Registering Particles for " + TutorialMod.MOD_ID);
20+
}
21+
}
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.particle.*;
4+
import net.minecraft.client.world.ClientWorld;
5+
import net.minecraft.particle.SimpleParticleType;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
public class PinkGarnetParticle extends SpriteBillboardParticle {
9+
public PinkGarnetParticle(ClientWorld clientWorld, double x, double y, double z,
10+
SpriteProvider spriteProvider, double xSpeed, double ySpeed, double zSpeed) {
11+
super(clientWorld, x, y, z, xSpeed, ySpeed, zSpeed);
12+
13+
this.velocityMultiplier = 0.8f;
14+
15+
this.maxAge = 40;
16+
this.setSpriteForAge(spriteProvider);
17+
18+
this.red = 1f;
19+
this.green = 1f;
20+
this.blue = 1f;
21+
}
22+
23+
@Override
24+
public ParticleTextureSheet getType() {
25+
return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT;
26+
}
27+
28+
public static class Factory implements ParticleFactory<SimpleParticleType> {
29+
private final SpriteProvider spriteProvider;
30+
31+
public Factory(SpriteProvider spriteProvider) {
32+
this.spriteProvider = spriteProvider;
33+
}
34+
35+
@Nullable
36+
@Override
37+
public Particle createParticle(SimpleParticleType parameters, ClientWorld world, double x, double y, double z,
38+
double velocityX, double velocityY, double velocityZ) {
39+
return new PinkGarnetParticle(world, x, y, z, this.spriteProvider, velocityX, velocityY, velocityZ);
40+
}
41+
}
42+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"textures": [
3+
"tutorialmod:pink_garnet"
4+
]
5+
}
362 Bytes
Loading

0 commit comments

Comments
 (0)