So I created a mod with a wave entity but the bounding box doesn't match with the collidings, anyone know how to fix this, I did try setting the BoundingBox even bigger, didn't work, and I don't know what else to do.
Here's the code :
Entity code:
public class WaveEntity extends Projectile {
private LivingEntity shootingEntity;
private int ticksbeforedeath = 0;
private double accelerationX;
private final float pickRadius = (float) Math.sqrt(122);
private double accelerationY;
private double accelerationZ;
private Vec3 FirstAccel = new Vec3(0, 0, 0);
public WaveEntity(Level level, LivingEntity shooter, double accelX, double accelY, double accelZ) {
super(EntityInit.WAVE_ENTITY.get(), level);
this.shootingEntity = shooter;
this.moveTo(shooter.getX(), shooter.getEyeY() - 0.1d, shooter.getZ(), shooter.yRotO, shooter.xRotO);
this.setPos(this.getX(), this.getY(), this.getZ());
level.playSound(null, new BlockPos(shooter.getX(), shooter.getEyeY(), shooter.getZ()), SoundEvents.FISHING_BOBBER_SPLASH, SoundSource.AMBIENT, 3.0f, 1.0f);
this.setDeltaMovement(accelX, accelY, accelZ);
this.FirstAccel = new Vec3(accelX, accelY, accelZ);
this.setBoundingBox(new AABB(new Vec3(this.getX() - 2 * 5, this.getY(), this.getZ() - 4.5 * 5), new Vec3(this.getX() + 2 * 5, this.getY() + 4 * 5, this.getZ() + 4.5 * 5)));
}
public WaveEntity(EntityType<? extends WaveEntity> entityType, Level level) {
super(entityType, level);
}
@Override
protected void defineSynchedData() {
}
@Override
public boolean shouldRenderAtSqrDistance(double distance) {
double d0 = this.getBoundingBox().getSize() * 4.0D;
if (Double.isNaN(d0)) {
d0 = 4.0D;
}
d0 = d0 * 64.0D;
return distance < d0 * d0;
}
@Override
public void tick() {
super.tick();
ticksbeforedeath++;
if (ticksbeforedeath >= 40) {
this.discard();
}
HitResult hitResult = ProjectileUtil.getHitResult(this, entity -> entity.isAlive() && entity != this.shootingEntity);
if (hitResult.getType() != HitResult.Type.MISS) {
this.onImpact(hitResult);
}
this.setPos(FirstAccel.add(this.getX(), this.getY(), this.getZ()));
System.out.println(this.getBbHeight());
}
public void onImpact(HitResult result) {
if (this.level.isClientSide()) {
return;
}
if (result instanceof EntityHitResult entityHitResult) {
Entity entity = entityHitResult.getEntity();
entity.hurt(DamageSource.indirectMagic(this, this.shootingEntity), 4f);
entity.setDeltaMovement(entity.getDeltaMovement().add(0f, 3f, 0f));
} else if (result.getType() == HitResult.Type.BLOCK) {
if (this.level.getBlockState(new BlockPos(result.getLocation())) == Blocks.FIRE.defaultBlockState()) {
this.level.setBlock(new BlockPos(result.getLocation()), Blocks.AIR.defaultBlockState(), 1);
}
if (this.level.getBlockState(new BlockPos(result.getLocation())) == Blocks.LAVA.defaultBlockState()) {
this.level.setBlock(new BlockPos(result.getLocation()), Blocks.OBSIDIAN.defaultBlockState(), 1);
}
}
}
@Override
public boolean isPickable() {
return true;
}
@Override
public float getPickRadius() {
return this.pickRadius;
}
@Override
public boolean hurt(@Nonnull DamageSource source, float amount) {
if (this.isInvulnerableTo(source)) {
return false;
}
this.markHurt();
if (source.getEntity() != null) {
Vec3 vec3 = source.getEntity().getLookAngle();
this.setDeltaMovement(vec3);
this.accelerationX = vec3.x * 0.1D;
this.accelerationY = vec3.y * 0.1D;
this.accelerationZ = vec3.z * 0.1D;
if (source.getEntity() instanceof LivingEntity livingEntity) {
this.shootingEntity = livingEntity;
}
return true;
}
return false;
}
}
EntityInit
public class EntityInit {
private EntityInit(){}
public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, main.MOD_ID);
public static final RegistryObject<EntityType<WaveEntity>> WAVE_ENTITY = ENTITIES.register("wave_entity", () -> EntityType.Builder.<WaveEntity>of(WaveEntity::new, MobCategory.MISC).sized(4f, 9f/*Normally setting the good Bounding Box*/).clientTrackingRange(64).updateInterval(1).build(new ResourceLocation(main.MOD_ID, "wave_entity").toString()));
public static void register (IEventBus eventBus) {
ENTITIES.register(eventBus);
}
}