Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Particle effect of bohr plate #819

Merged
merged 13 commits into from
Nov 15, 2023
2 changes: 2 additions & 0 deletions src/client/java/be/minelabs/client/MinelabsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import be.minelabs.client.gui.screen.Screens;
import be.minelabs.client.item.ItemModels;
import be.minelabs.client.network.ClientNetworking;
import be.minelabs.client.particle.Particles;
import be.minelabs.client.renderer.block.entity.BlockEntityRenderers;
import be.minelabs.client.renderer.entity.EntityRenderers;
import be.minelabs.client.renderer.entity.model.EntityModelLayers;
Expand All @@ -31,6 +32,7 @@ public void onInitializeClient() {
BlockEntityRenderers.onInitializeClient();

Screens.onInitializeClient();
Particles.onInitializeClient();

ModelLoadingRegistry.INSTANCE.registerModelProvider(new ModelProvider.Requester());
ModelLoadingRegistry.INSTANCE.registerResourceProvider(ModelProvider::new);
Expand Down
73 changes: 73 additions & 0 deletions src/client/java/be/minelabs/client/particle/BohrPlateParticle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package be.minelabs.client.particle;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.particle.*;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.particle.DefaultParticleType;
import net.minecraft.util.math.random.Random;
import org.jetbrains.annotations.Nullable;
import org.joml.Quaternionf;
import org.joml.Vector3f;

class BohrPlateParticle extends SpriteBillboardParticle {
protected BohrPlateParticle(ClientWorld clientWorld, double x, double y, double z, double vx, double vy, double vz, float angle) {
super(clientWorld, x, y, z, vx, vy, vz);
this.velocityMultiplier = 0.94f;
this.velocityX = velocityX * 0.01f + vx;
this.velocityY = velocityY * 0.01f + vy;
this.velocityZ = velocityZ * 0.01f + vz;
this.angle = angle;
this.prevAngle = angle;
maxAge = 17;
scale *= 0.45f;
updateAlpha();
}

private void updateAlpha(){
alpha = 0.8f * (float) Math.exp(-Math.pow((age-7f)/6f, 2));
}

@Override
public void tick() {
super.tick();
updateAlpha();
}

@Override
public ParticleTextureSheet getType() {
return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT;
}

public static class Factory implements ParticleFactory<DefaultParticleType> {
private final SpriteProvider spriteProvider;

public Factory(SpriteProvider spriteProvider) {
this.spriteProvider = spriteProvider;
}

@Nullable
@Override
public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double vx, double vy, double vz) {
// Note: usually vx, vy and vz should be kept at zero and this factory provides the correct velocity.
Random random = world.getRandom();

// Offset is random position in projected plane around camera
Vector3f offset = new Vector3f(0, 0.25f, 0);
Camera camera = MinecraftClient.getInstance().gameRenderer.getCamera();
Quaternionf rotation = new Quaternionf(camera.getRotation());
float angle = (float) (random.nextFloat() * 2 * Math.PI);
rotation.rotateZ(angle);
offset.rotate(rotation);

// Move towards center
Vector3f velocity = new Vector3f(offset).mul(-0.06f);

BohrPlateParticle particle = new BohrPlateParticle(world, x + offset.x, y + offset.y, z + offset.z, vx + velocity.x, vy + velocity.y, vz + velocity.z, angle);
particle.setSprite(this.spriteProvider);
return particle;
}
}

}
15 changes: 15 additions & 0 deletions src/client/java/be/minelabs/client/particle/Particles.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package be.minelabs.client.particle;

import be.minelabs.particle.ParticleTypes;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry;

@Environment(EnvType.CLIENT)
public class Particles {

public static void onInitializeClient() {
ParticleFactoryRegistry.getInstance().register(ParticleTypes.BOHR_PLATE_PARTICLE, BohrPlateParticle.Factory::new);
}

}
15 changes: 7 additions & 8 deletions src/main/java/be/minelabs/Minelabs.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,19 @@

import be.minelabs.advancement.criterion.Criteria;
import be.minelabs.block.Blocks;
import be.minelabs.recipe.CraftingRecipes;
import be.minelabs.world.MinelabsGameRules;
import be.minelabs.science.coulomb.CoulombResource;
import be.minelabs.world.MinelabsGameRules;
import be.minelabs.world.dimension.ModDimensions;
import be.minelabs.entity.Entities;
import be.minelabs.village.Villagers;
import be.minelabs.event.ServerModEvents;
import be.minelabs.fluid.Fluids;
import be.minelabs.item.Items;
import be.minelabs.particle.Particles;
import be.minelabs.particle.ParticleTypes;
import be.minelabs.recipe.CraftingRecipes;
import be.minelabs.science.coulomb.CoulombResource;
import be.minelabs.screen.ScreenHandlers;
import be.minelabs.sound.SoundEvents;
import be.minelabs.util.NucleusStabilityTable;
import be.minelabs.village.Villagers;
import be.minelabs.world.MinelabsGameRules;
import be.minelabs.world.dimension.ModDimensions;
import be.minelabs.world.gen.WorldGeneration;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
Expand All @@ -42,7 +41,7 @@ public void onInitialize() {
Entities.onInitialize();

SoundEvents.onInitialize();
Particles.onInitialize();
ParticleTypes.onInitialize();
ScreenHandlers.onInitialize();

WorldGeneration.onInitialize();
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/be/minelabs/entity/BohrBlueprintEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import be.minelabs.item.items.AtomItem;
import be.minelabs.item.Items;
import be.minelabs.mixin.FishingBobberEntityAccessor;
import be.minelabs.particle.ParticleTypes;
import be.minelabs.util.AtomConfiguration;
import be.minelabs.world.MinelabsGameRules;
import net.minecraft.block.BlockState;
Expand All @@ -28,7 +29,6 @@
import net.minecraft.network.listener.ClientPlayPacketListener;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
Expand Down Expand Up @@ -105,7 +105,7 @@ public void tick() {
*/
private void clientTick() {
if (getProtons() == 0 && getNeutrons() == 0) {
this.world.addParticle(ParticleTypes.ELECTRIC_SPARK, this.getX(), this.getY() + 0.5f * getHeight(), this.getZ(), 0, 0, 0);
this.world.addParticle(ParticleTypes.BOHR_PLATE_PARTICLE, this.getX(), this.getY() + 0.5f * getHeight(), this.getZ(), 0, 0, 0);
}
}

Expand Down
22 changes: 22 additions & 0 deletions src/main/java/be/minelabs/particle/ParticleTypes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package be.minelabs.particle;

import be.minelabs.Minelabs;
import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes;
import net.minecraft.particle.DefaultParticleType;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;


public class ParticleTypes {

public static final DefaultParticleType BOHR_PLATE_PARTICLE = register(FabricParticleTypes.simple(), "bohrplate");

private static DefaultParticleType register(DefaultParticleType particle, String path){
return Registry.register(Registries.PARTICLE_TYPE, new Identifier(Minelabs.MOD_ID, path), particle);
}


public static void onInitialize() {
}
}
22 changes: 0 additions & 22 deletions src/main/java/be/minelabs/particle/Particles.java

This file was deleted.

3 changes: 3 additions & 0 deletions src/main/resources/assets/minelabs/particles/bohrplate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"textures": ["minelabs:bohr/bohrparticle"]
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.