Skip to content

Commit

Permalink
feat: SonicBoom progress
Browse files Browse the repository at this point in the history
  • Loading branch information
darksonic300 committed Jul 26, 2024
1 parent 3dc5c3c commit 6ffa73f
Show file tree
Hide file tree
Showing 5 changed files with 145 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ public class SeidrRenderers {

public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(SeidrEntityTypes.DRAUGR.get(), DraugrRenderer::new);
event.registerEntityRenderer(SeidrEntityTypes.SONIC_BOOM_PROJECTILE.get(), SoundBoomProjectileRenderer::new);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.github.darksonic300.seidr.client.renderer;

import com.github.darksonic300.seidr.Seidr;
import com.github.darksonic300.seidr.entity.projectile.SoundBoomProjectile;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;

public class SoundBoomProjectileRenderer extends EntityRenderer<SoundBoomProjectile> {
private static final RenderType RENDER_TYPE = RenderType.translucent();

protected SoundBoomProjectileRenderer(EntityRendererProvider.Context pContext) {
super(pContext);
}

@Override
public boolean shouldRender(SoundBoomProjectile pLivingEntity, Frustum pCamera, double pCamX, double pCamY, double pCamZ) {
return false;
}

@Override
public ResourceLocation getTextureLocation(SoundBoomProjectile pEntity) {
return ResourceLocation.fromNamespaceAndPath(Seidr.MODID, "textures/item/scroll_old.png");
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.darksonic300.seidr.entity;

import com.github.darksonic300.seidr.entity.projectile.SoundBoomProjectile;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
Expand All @@ -14,6 +15,10 @@ public class SeidrEntityTypes {
public static final DeferredHolder<EntityType<?>, EntityType<Draugr>> DRAUGR = ENTITY_TYPES.register("draugr",
() -> EntityType.Builder.<Draugr>of(Draugr::new, MobCategory.MONSTER).sized(1.0F, 2.0F).clientTrackingRange(10).build("draugr"));

public static final DeferredHolder<EntityType<?>, EntityType<SoundBoomProjectile>> SONIC_BOOM_PROJECTILE = ENTITY_TYPES.register("sonic_boom_projectile",
() -> EntityType.Builder.<SoundBoomProjectile>of(SoundBoomProjectile::new, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(4).updateInterval(10).build("sonic_boom_projectile"));


public static void registerEntityAttributes(EntityAttributeCreationEvent event) {
event.put(SeidrEntityTypes.DRAUGR.get(), Draugr.createAttributes().build());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package com.github.darksonic300.seidr.entity.projectile;

import com.github.darksonic300.seidr.entity.SeidrEntityTypes;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.AbstractHurtingProjectile;
import net.minecraft.world.entity.projectile.ProjectileUtil;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.event.EventHooks;

public class SoundBoomProjectile extends AbstractHurtingProjectile {
private int ticksInAir;

public SoundBoomProjectile(EntityType<? extends AbstractHurtingProjectile> pEntityType, Level pLevel) {
super(pEntityType, pLevel);
this.setNoGravity(true);
}

public SoundBoomProjectile(Level level, LivingEntity shooter, double accelX, double accelY, double accelZ) {
super(SeidrEntityTypes.SONIC_BOOM_PROJECTILE.get(), shooter, new Vec3(accelX, accelY, accelZ), level);
this.setNoGravity(true);
}

@Override
public void tick() {
if (!this.onGround()) {
++this.ticksInAir;
}
if (this.ticksInAir > 5) {
if (!this.level().isClientSide()) {
this.discard();
}
}
if (this.level().isClientSide() || (this.getOwner() == null || this.getOwner().isAlive()) && this.level().hasChunkAt(this.blockPosition())) {
HitResult hitResult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity);
if (hitResult.getType() != HitResult.Type.MISS && !EventHooks.onProjectileImpact(this, hitResult)) {
this.onHit(hitResult);
}

this.checkInsideBlocks();
Vec3 vec3 = this.getDeltaMovement();
double d0 = this.getX() + vec3.x();
double d1 = this.getY() + vec3.y();
double d2 = this.getZ() + vec3.z();
ProjectileUtil.rotateTowardsMovement(this, 0.2F);
float f = this.getInertia();

this.setDeltaMovement(vec3.add(vec3.normalize().scale(this.accelerationPower)).scale((double)f));
ParticleOptions particleoptions = this.getTrailParticle();
if (particleoptions != null) {
this.level().addParticle(particleoptions, d0, d1 + 0.5, d2, 0.0, 0.0, 0.0);
}

this.setPos(d0, d1, d2);
} else {
this.discard();
}
}

@Override
protected void onHit(HitResult result) {
super.onHit(result);
if (!this.level().isClientSide()) {
this.discard();
}
}

@Override
protected void onHitEntity(EntityHitResult pResult) {
super.onHitEntity(pResult);
if (this.getOwner() instanceof LivingEntity owner)
pResult.getEntity().hurt(damageSources().indirectMagic(owner, this), 20.0f);
}

@Override
public void addAdditionalSaveData(CompoundTag tag) {
super.addAdditionalSaveData(tag);
tag.putInt("TicksInAir", this.ticksInAir);
}

@Override
public void readAdditionalSaveData(CompoundTag tag) {
super.readAdditionalSaveData(tag);
if (tag.contains("TicksInAir")) {
this.ticksInAir = tag.getInt("TicksInAir");
}
}

/**
* Prevents this projectile from being on fire.
*/
@Override
protected boolean shouldBurn() {
return false;
}

@Override
protected ParticleOptions getTrailParticle() {
return ParticleTypes.SONIC_BOOM;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.github.darksonic300.seidr.entity.Draugr;
import com.github.darksonic300.seidr.entity.SeidrEntityTypes;
import com.github.darksonic300.seidr.entity.projectile.SoundBoomProjectile;
import com.github.darksonic300.seidr.item.SeidrScrollItems;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
Expand All @@ -10,6 +11,7 @@
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.event.entity.living.LivingEntityUseItemEvent;

Expand All @@ -36,6 +38,9 @@ public static void checkForSoundBlastScroll(LivingEntityUseItemEvent event) {
}

if (event.getDuration() == 0) {
SoundBoomProjectile projectile = new SoundBoomProjectile(event.getEntity().level(), event.getEntity(), 0f,0f,0f);
projectile.shootFromRotation(event.getEntity(), event.getEntity().getXRot(), event.getEntity().getYRot(), 0.0F, 10.0F, 0.0F);
event.getEntity().level().addFreshEntity(projectile);
event.getEntity().playSound(SoundEvents.WARDEN_SONIC_BOOM, 0.5F, 1.0F);
}
}
Expand Down

0 comments on commit 6ffa73f

Please sign in to comment.