Add blood particle effect and CompressedBedrock block functionality and fixed Datagen

Signed-off-by: IM23a-cernik <cernik@bzz.ch>
This commit is contained in:
KrisHD1337
2025-05-14 14:07:38 +02:00
committed by IM23a-cernik
parent 0f9c530b39
commit 8c4745d452
9 changed files with 116 additions and 15 deletions
@@ -2,6 +2,8 @@ package net.krituximon.stalinium;
import net.krituximon.stalinium.block.ModBlocks; import net.krituximon.stalinium.block.ModBlocks;
import net.krituximon.stalinium.item.ModItems; import net.krituximon.stalinium.item.ModItems;
import net.krituximon.stalinium.particle.BloodParticle;
import net.krituximon.stalinium.particle.ModParticles;
import net.krituximon.stalinium.sound.ModSounds; import net.krituximon.stalinium.sound.ModSounds;
import net.krituximon.stalinium.worldgen.ModFeatures; import net.krituximon.stalinium.worldgen.ModFeatures;
import net.krituximon.stalinium.worldgen.StaliniumVeinFeature; import net.krituximon.stalinium.worldgen.StaliniumVeinFeature;
@@ -9,6 +11,7 @@ import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
import com.mojang.logging.LogUtils; import com.mojang.logging.LogUtils;
@@ -51,6 +54,7 @@ public class Stalinium
ModItems.register(modEventBus); ModItems.register(modEventBus);
ModBlocks.register(modEventBus); ModBlocks.register(modEventBus);
ModSounds.register(modEventBus); ModSounds.register(modEventBus);
ModParticles.register(modEventBus);
// Register ourselves for server and other game events we are interested in. // Register ourselves for server and other game events we are interested in.
// Note that this is necessary if and only if we want *this* class (Stalinium) to respond directly to events. // Note that this is necessary if and only if we want *this* class (Stalinium) to respond directly to events.
@@ -102,5 +106,10 @@ public class Stalinium
LOGGER.info("HELLO FROM CLIENT SETUP"); LOGGER.info("HELLO FROM CLIENT SETUP");
LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName()); LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName());
} }
@SubscribeEvent
public static void registerParticleFactories(RegisterParticleProvidersEvent event) {
event.registerSpriteSet(ModParticles.BLOOD_PARTICLE.get(), BloodParticle.Provider::new);
}
} }
} }
@@ -1,6 +1,7 @@
package net.krituximon.stalinium.block; package net.krituximon.stalinium.block;
import net.krituximon.stalinium.Stalinium; import net.krituximon.stalinium.Stalinium;
import net.krituximon.stalinium.block.custom.CompressedBedrock;
import net.krituximon.stalinium.item.ModItems; import net.krituximon.stalinium.item.ModItems;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
@@ -18,7 +19,7 @@ public class ModBlocks {
DeferredRegister.createBlocks(Stalinium.MODID); DeferredRegister.createBlocks(Stalinium.MODID);
public static final DeferredBlock<Block> COMPRESSED_BEDROCK = registerBlock("compressed_bedrock", public static final DeferredBlock<Block> COMPRESSED_BEDROCK = registerBlock("compressed_bedrock",
() -> new NetheriteOnlyBlock(BlockBehaviour.Properties.of() () -> new CompressedBedrock(BlockBehaviour.Properties.of()
.strength(120f, 1200f) .strength(120f, 1200f)
.requiresCorrectToolForDrops() .requiresCorrectToolForDrops()
.sound(SoundType.STONE))); .sound(SoundType.STONE)));
@@ -0,0 +1,32 @@
package net.krituximon.stalinium.block.custom;
import net.krituximon.stalinium.block.NetheriteOnlyBlock;
import net.krituximon.stalinium.particle.ModParticles;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
public class CompressedBedrock extends NetheriteOnlyBlock {
public CompressedBedrock(Properties properties) {
super(properties);
}
public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) {
if (random.nextInt(5) == 0) {
Direction direction = Direction.getRandom(random);
if (direction != Direction.UP) {
BlockPos blockpos = pos.relative(direction);
BlockState blockstate = level.getBlockState(blockpos);
if (!state.canOcclude() || !blockstate.isFaceSturdy(level, blockpos, direction.getOpposite())) {
double d0 = direction.getStepX() == 0 ? random.nextDouble() : (double) 0.5F + (double) direction.getStepX() * 0.6;
double d1 = direction.getStepY() == 0 ? random.nextDouble() : (double) 0.5F + (double) direction.getStepY() * 0.6;
double d2 = direction.getStepZ() == 0 ? random.nextDouble() : (double) 0.5F + (double) direction.getStepZ() * 0.6;
level.addParticle(ModParticles.BLOOD_PARTICLE.get(), (double) pos.getX() + d0, (double) pos.getY() + d1, (double) pos.getZ() + d2, (double) 0.0F, (double) 0.0F, (double) 0.0F);
}
}
}
}
}
@@ -14,12 +14,9 @@ public class ModBlockStateProvider extends BlockStateProvider {
@Override @Override
protected void registerStatesAndModels() { protected void registerStatesAndModels() {
simpleBlock(ModBlocks.COMPRESSED_BEDROCK.get(), blockWithItem(ModBlocks.COMPRESSED_BEDROCK);
models().cubeAll("compressed_bedrock", modLoc("block/compressed_bedrock"))); blockWithItem(ModBlocks.STALINIUM_BLOCK);
simpleBlock(ModBlocks.STALINIUM_ORE.get(), blockWithItem(ModBlocks.STALINIUM_ORE);
models().cubeAll("stalinium_ore", modLoc("block/stalinium_ore")));
simpleBlock(ModBlocks.STALINIUM_BLOCK.get(),
models().cubeAll("stalinium_block", modLoc("block/stalinium_block")));
} }
@@ -13,13 +13,8 @@ public class ModItemModelProvider extends ItemModelProvider {
@Override @Override
protected void registerModels() { protected void registerModels() {
withExistingParent("compressed_bedrock", modLoc("block/compressed_bedrock")); basicItem(ModItems.STALINIUM_INGOT.get());
withExistingParent("stalinium_ore", modLoc("block/stalinium_ore")); basicItem(ModItems.SOVIET_ANTHEM_MUSIC_DISC.get());
withExistingParent("stalinium_block", modLoc("block/stalinium_block")); basicItem(ModItems.STALINIUM_NUGGET.get());
singleTexture("stalinium_ingot",
mcLoc("item/generated"),
"layer0",
modLoc("item/stalinium_ingot"));
singleTexture("stalinium_nugget", mcLoc("item/generated"), "layer0", modLoc("item/stalinium_nugget"));
} }
} }
@@ -0,0 +1,40 @@
package net.krituximon.stalinium.particle;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.particle.*;
import net.minecraft.core.particles.SimpleParticleType;
import org.jetbrains.annotations.Nullable;
public class BloodParticle extends TextureSheetParticle {
protected BloodParticle(ClientLevel level, double x, double y, double z, SpriteSet spriteSet, double xSpeed, double ySpeed, double zSpeed) {
super(level, x, y, z, xSpeed, ySpeed, zSpeed);
this.friction = 0.5f;
this.lifetime = 80;
this.setSpriteFromAge(spriteSet);
this.rCol = 1f;
this.gCol = 0f;
this.bCol = 0f;
}
@Override
public ParticleRenderType getRenderType() {
return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT;
}
public static class Provider implements ParticleProvider<SimpleParticleType> {
private final SpriteSet spriteSet;
public Provider(SpriteSet spriteSet) {
this.spriteSet = spriteSet;
}
@Override
public @Nullable Particle createParticle(SimpleParticleType simpleParticleType, ClientLevel clientLevel, double v, double v1, double v2, double v3, double v4, double v5) {
return new BloodParticle(clientLevel, v, v1, v2, this.spriteSet, v3, v4, v5);
}
}
}
@@ -0,0 +1,22 @@
package net.krituximon.stalinium.particle;
import net.krituximon.stalinium.Stalinium;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraft.core.registries.BuiltInRegistries;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredRegister;
import java.util.function.Supplier;
public class ModParticles {
public static final DeferredRegister<ParticleType<?>> PARTICLE_TYPES =
DeferredRegister.create(BuiltInRegistries.PARTICLE_TYPE, Stalinium.MODID);
public static final Supplier<SimpleParticleType> BLOOD_PARTICLE =
PARTICLE_TYPES.register("blood_particle", () -> new SimpleParticleType(true));
public static void register(IEventBus eventBus) {
PARTICLE_TYPES.register(eventBus);
}
}
@@ -0,0 +1,5 @@
{
"textures": [
"stalinium:blood_particle"
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 84 B