Jump to content

elric3179

Members
  • Posts

    1
  • Joined

  • Last visited

Everything posted by elric3179

  1. 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); } }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.