Jump to content

[SOLVED][1.8] Shootable entity that heals living entities


skyfir3

Recommended Posts

Thought that this would work

 

 

 

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

        if (movingobjectposition.entityHit instanceof EntityLivingBase) {

EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

        entity.heal(4.0F);

        }

}

 

 

 

Sadly it didn't :(

Link to comment
Share on other sites

Thought that this would work

 

 

 

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

        if (movingobjectposition.entityHit instanceof EntityLivingBase) {

EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

        entity.heal(4.0F);

        }

}

 

 

 

Sadly it didn't :(

 

Look at the EntityArrow class, there is an example, when the arrow is burning and hits a entity, the entity will be set on fire just look at that and you'll understand.

"My Crew is World Wide." 「ヤング • エルトウ」

Link to comment
Share on other sites

  • 1 month later...

 

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

if (movingobjectposition.entityHit instanceof EntityLiving) {

 

        movingobjectposition.entityHit.setFire(seconds);

        }

}

 

 

Not even close, there are no methods that heals in that class

Link to comment
Share on other sites

I tried this but did not work

 

 

 

  @Override

  protected void onImpact(MovingObjectPosition movingobjectposition) {

        if (movingobjectposition.entityHit instanceof EntityLivingBase) {

        EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

        entity.heal(4.0F);

        }

  }

 

Link to comment
Share on other sites

There is no crash log, but i take the advice

 

 

 

  @Override

  protected void onImpact(MovingObjectPosition movingobjectposition) {

          if (movingobjectposition.entityHit != null)

          {

              if (movingobjectposition.entityHit instanceof EntityLivingBase) {

              EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

              entity.heal(4.0F);

              }

          }

  }

 

Link to comment
Share on other sites

There is no crash log, but i take the advice

 

 

 

  @Override

  protected void onImpact(MovingObjectPosition movingobjectposition) {

          if (movingobjectposition.entityHit != null)

          {

              if (movingobjectposition.entityHit instanceof EntityLivingBase) {

              EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

              entity.heal(4.0F);

              }

          }

  }

 

 

Remove it, I realized diesieben is right and I missed a part. If your mod is crashing in mp only your proxies are probbly broken

Link to comment
Share on other sites

I have worked hours with this mod and everything works :P except those two things. I really do not want to read my 400 page java book just to call this code :P

 

Yeah I need to look over my guis and see if have done something wrong with my proxies

 

I only need help with this healing projectile entity

Link to comment
Share on other sites

Question tho - where exacly is your problem? Is it not healing or crashing?

 

@Override
protected void onImpact(MovingObjectPosition mop)
{
  if (mop != null)
  {
    if (mop.entityHit instanceof EntityLivingBase)
    {
      EntityLivingBase entity = (EntityLivingBase) mop.entityHit;
      entity.heal(4.0F);
    }
  }
}

 

This doesn't work?

 

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

Both calling a method ;)

 

 

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

      if (movingobjectposition.entityHit instanceof EntityLivingBase) {

      heal(movingobjectposition);

    }

}

 

public static void heal(MovingObjectPosition movingobjectposition) {

EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

    entity.heal(4.0F);

}

 

 

And simply just

 

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

      if (movingobjectposition.entityHit instanceof EntityLivingBase) {

      EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

    entity.heal(4.0F);

    }

}

 

 

Does not heal a living entity

Link to comment
Share on other sites

Seems that sometimes when i shoot the entity, I get hit instead of what I aim at

 

 

package com.skyfir3.drugsnalcoholics.entity;

 

import io.netty.buffer.ByteBuf;

 

import java.util.List;

 

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.block.state.IBlockState;

import net.minecraft.enchantment.EnchantmentHelper;

import net.minecraft.entity.Entity;

import net.minecraft.entity.EntityLiving;

import net.minecraft.entity.EntityLivingBase;

import net.minecraft.entity.IProjectile;

import net.minecraft.entity.monster.EntityBlaze;

import net.minecraft.entity.monster.EntityEnderman;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.entity.player.EntityPlayerMP;

import net.minecraft.entity.projectile.EntityThrowable;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.network.play.server.S2BPacketChangeGameState;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.BlockPos;

import net.minecraft.util.DamageSource;

import net.minecraft.util.EntityDamageSourceIndirect;

import net.minecraft.util.EnumParticleTypes;

import net.minecraft.util.MathHelper;

import net.minecraft.util.MovingObjectPosition;

import net.minecraft.util.ResourceLocation;

import net.minecraft.util.Vec3;

import net.minecraft.world.World;

import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;

import net.minecraftforge.fml.relauncher.Side;

import net.minecraftforge.fml.relauncher.SideOnly;

 

public class EntityStimpak extends EntityThrowable implements IProjectile, IEntityAdditionalSpawnData

{

    private int xTile = -1;

    private int yTile = -1;

    private int zTile = -1;

    private Block inTile;

    private int inData;

    private boolean inGround;

    /** Seems to be some sort of timer for animating an arrow. */

    public int arrowShake;

    /** The owner of this arrow. */

    public Entity shootingEntity;

    private int ticksInGround;

    private int ticksInAir;

    private double damage = 0.0D;

    /** The amount of knockback an arrow applies when it hits a mob. */

    private int knockbackStrength;

 

    public EntityStimpak(World worldIn)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.setSize(0.5F, 0.5F);

    }

 

    public EntityStimpak(World worldIn, double x, double y, double z)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.setSize(0.5F, 0.5F);

        this.setPosition(x, y, z);

    }

 

    public EntityStimpak(World worldIn, EntityLivingBase shooter, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.shootingEntity = shooter;

 

        this.posY = shooter.posY + (double)shooter.getEyeHeight() - 0.10000000149011612D;

        double d0 = p_i1755_3_.posX - shooter.posX;

        double d1 = p_i1755_3_.getEntityBoundingBox().minY + (double)(p_i1755_3_.height / 3.0F) - this.posY;

        double d2 = p_i1755_3_.posZ - shooter.posZ;

        double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);

 

        if (d3 >= 1.0E-7D)

        {

            float f2 = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;

            float f3 = (float)(-(Math.atan2(d1, d3) * 180.0D / Math.PI));

            double d4 = d0 / d3;

            double d5 = d2 / d3;

            this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f2, f3);

            float f4 = (float)(d3 * 0.20000000298023224D);

            this.setThrowableHeading(d0, d1 + (double)f4, d2, p_i1755_4_, p_i1755_5_);

        }

    }

 

    public EntityStimpak(World worldIn, EntityLivingBase shooter)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.shootingEntity = shooter;

 

        this.setSize(0.5F, 0.5F);

        this.setLocationAndAngles(shooter.posX, shooter.posY + (double)shooter.getEyeHeight(), shooter.posZ, shooter.rotationYaw, shooter.rotationPitch);

        this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);

        this.posY -= 0.10000000149011612D;

        this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);

        this.setPosition(this.posX, this.posY, this.posZ);

        this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));

        this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));

        this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));

        this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, 3.0F, 1.0F);

    }

 

    protected void entityInit()

    {

        this.dataWatcher.addObject(16, Byte.valueOf((byte)0));

    }

 

    /**

    * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.

    * 

    * @param inaccuracy Higher means more error.

    */

    public void setThrowableHeading(double x, double y, double z, float velocity, float inaccuracy)

    {

        float f2 = MathHelper.sqrt_double(x * x + y * y + z * z);

        x /= (double)f2;

        y /= (double)f2;

        z /= (double)f2;

        x += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;

        y += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;

        z += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;

        x *= (double)velocity;

        y *= (double)velocity;

        z *= (double)velocity;

        this.motionX = x;

        this.motionY = y;

        this.motionZ = z;

        float f3 = MathHelper.sqrt_double(x * x + z * z);

        this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(x, z) * 180.0D / Math.PI);

        this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(y, (double)f3) * 180.0D / Math.PI);

        this.ticksInGround = 0;

    }

 

    @SideOnly(Side.CLIENT)

    public void func_180426_a(double p_180426_1_, double p_180426_3_, double p_180426_5_, float p_180426_7_, float p_180426_8_, int p_180426_9_, boolean p_180426_10_)

    {

        this.setPosition(p_180426_1_, p_180426_3_, p_180426_5_);

        this.setRotation(p_180426_7_, p_180426_8_);

    }

 

    /**

    * Sets the velocity to the args. Args: x, y, z

    */

    @SideOnly(Side.CLIENT)

    public void setVelocity(double x, double y, double z)

    {

        this.motionX = x;

        this.motionY = y;

        this.motionZ = z;

 

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)

        {

            float f = MathHelper.sqrt_double(x * x + z * z);

            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(x, z) * 180.0D / Math.PI);

            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(y, (double)f) * 180.0D / Math.PI);

            this.prevRotationPitch = this.rotationPitch;

            this.prevRotationYaw = this.rotationYaw;

            this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);

            this.ticksInGround = 0;

        }

    }

 

    /**

    * Called to update the entity's position/logic.

    */

    public void onUpdate()

    {

        super.onUpdate();

 

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)

        {

            float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);

            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI);

        }

 

        BlockPos blockpos = new BlockPos(this.xTile, this.yTile, this.zTile);

        IBlockState iblockstate = this.worldObj.getBlockState(blockpos);

        Block block = iblockstate.getBlock();

 

        if (block.getMaterial() != Material.air)

        {

            block.setBlockBoundsBasedOnState(this.worldObj, blockpos);

            AxisAlignedBB axisalignedbb = block.getCollisionBoundingBox(this.worldObj, blockpos, iblockstate);

 

            if (axisalignedbb != null && axisalignedbb.isVecInside(new Vec3(this.posX, this.posY, this.posZ)))

            {

                this.inGround = true;

            }

        }

 

        if (this.arrowShake > 0)

        {

            --this.arrowShake;

        }

 

        if (this.inGround)

        {

            int j = block.getMetaFromState(iblockstate);

 

            if (block == this.inTile && j == this.inData)

            {

                ++this.ticksInGround;

 

                if (this.ticksInGround >= 1200)

                {

                    this.setDead();

                }

            }

            else

            {

                this.inGround = false;

                this.motionX *= (double)(this.rand.nextFloat() * 0.2F);

                this.motionY *= (double)(this.rand.nextFloat() * 0.2F);

                this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);

                this.ticksInGround = 0;

                this.ticksInAir = 0;

            }

        }

        else

        {

            ++this.ticksInAir;

            Vec3 vec31 = new Vec3(this.posX, this.posY, this.posZ);

            Vec3 vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);

            MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec31, vec3, false, true, false);

            vec31 = new Vec3(this.posX, this.posY, this.posZ);

            vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);

 

            if (movingobjectposition != null)

            {

                vec3 = new Vec3(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);

            }

 

            Entity entity = null;

            List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));

            double d0 = 0.0D;

            int i;

            float f1;

 

            for (i = 0; i < list.size(); ++i)

            {

                Entity entity1 = (Entity)list.get(i);

 

                if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5))

                {

                    f1 = 0.3F;

                    AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().expand((double)f1, (double)f1, (double)f1);

                    MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);

 

                    if (movingobjectposition1 != null)

                    {

                        double d1 = vec31.distanceTo(movingobjectposition1.hitVec);

 

                        if (d1 < d0 || d0 == 0.0D)

                        {

                            entity = entity1;

                            d0 = d1;

                        }

                    }

                }

            }

 

            if (entity != null)

            {

                movingobjectposition = new MovingObjectPosition(entity);

            }

 

            if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer)

            {

                EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit;

 

                if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))

                {

                    movingobjectposition = null;

                }

            }

 

            float f2;

            float f3;

            float f4;

 

            if (movingobjectposition != null)

            {

                if (movingobjectposition.entityHit != null)

                {

                    f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);

                    int k = MathHelper.ceiling_double_int((double)f2 * this.damage);

 

                    if (this.getIsCritical())

                    {

                        k += this.rand.nextInt(k / 2 + 2);

                    }

 

                    DamageSource damagesource;

 

                    if (this.shootingEntity == null)

                    {

                        damagesource = this.causeArrowDamage(this, this);

                    }

                    else

                    {

                        damagesource = this.causeArrowDamage(this, this.shootingEntity);

                    }

 

                    if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman))

                    {

                        movingobjectposition.entityHit.setFire(5);

                    }

 

                    if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k))

                    {

                        if (movingobjectposition.entityHit instanceof EntityLivingBase)

                        {

                            EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit;

 

                            if (!this.worldObj.isRemote)

                            {

                                entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1);

                            }

 

                            if (this.knockbackStrength > 0)

                            {

                                f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

 

                                if (f4 > 0.0F)

                                {

                                    movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4);

                                }

                            }

 

                            if (this.shootingEntity instanceof EntityLivingBase)

                            {

                                EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity);

                                EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase);

                            }

 

                            if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP)

                            {

                                ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));

                            }

                        }

 

                        if (!(movingobjectposition.entityHit instanceof EntityEnderman))

                        {

                            this.setDead();

                        }

                    }

                    else

                    {

                        this.motionX *= -0.10000000149011612D;

                        this.motionY *= -0.10000000149011612D;

                        this.motionZ *= -0.10000000149011612D;

                        this.rotationYaw += 180.0F;

                        this.prevRotationYaw += 180.0F;

                        this.ticksInAir = 0;

                    }

                }

                else

                {

                    BlockPos blockpos1 = movingobjectposition.getBlockPos();

                    this.xTile = blockpos1.getX();

                    this.yTile = blockpos1.getY();

                    this.zTile = blockpos1.getZ();

                    iblockstate = this.worldObj.getBlockState(blockpos1);

                    this.inTile = iblockstate.getBlock();

                    this.inData = this.inTile.getMetaFromState(iblockstate);

                    this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX));

                    this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY));

                    this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ));

                    f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);

                    this.posX -= this.motionX / (double)f3 * 0.05000000074505806D;

                    this.posY -= this.motionY / (double)f3 * 0.05000000074505806D;

                    this.posZ -= this.motionZ / (double)f3 * 0.05000000074505806D;

                    this.inGround = true;

                    this.arrowShake = 7;

                    this.setIsCritical(false);

 

                    if (this.inTile.getMaterial() != Material.air)

                    {

                        this.inTile.onEntityCollidedWithBlock(this.worldObj, blockpos1, iblockstate, this);

                    }

                }

            }

 

            if (this.getIsCritical())

            {

                for (i = 0; i < 4; ++i)

                {

                    this.worldObj.spawnParticle(EnumParticleTypes.CRIT, this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ, new int[0]);

                }

            }

 

            this.posX += this.motionX;

            this.posY += this.motionY;

            this.posZ += this.motionZ;

            f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

            this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);

 

            for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)

            {

                ;

            }

 

            while (this.rotationPitch - this.prevRotationPitch >= 180.0F)

            {

                this.prevRotationPitch += 360.0F;

            }

 

            while (this.rotationYaw - this.prevRotationYaw < -180.0F)

            {

                this.prevRotationYaw -= 360.0F;

            }

 

            while (this.rotationYaw - this.prevRotationYaw >= 180.0F)

            {

                this.prevRotationYaw += 360.0F;

            }

 

            this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;

            this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;

            f3 = 0.99F;

            f1 = 0.05F;

 

            if (this.isInWater())

            {

                for (int l = 0; l < 4; ++l)

                {

                    f4 = 0.25F;

                    this.worldObj.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ, new int[0]);

                }

 

                f3 = 0.6F;

            }

 

            if (this.isWet())

            {

                this.extinguish();

            }

 

            this.motionX *= (double)f3;

            this.motionY *= (double)f3;

            this.motionZ *= (double)f3;

            this.motionY -= (double)f1;

            this.setPosition(this.posX, this.posY, this.posZ);

            this.doBlockCollisions();

        }

 

        if(this.inGround) {

            this.setDead();

        }

    }

 

    /**

    * (abstract) Protected helper method to write subclass entity data to NBT.

    */

    public void writeEntityToNBT(NBTTagCompound tagCompound)

    {

        tagCompound.setShort("xTile", (short)this.xTile);

        tagCompound.setShort("yTile", (short)this.yTile);

        tagCompound.setShort("zTile", (short)this.zTile);

        tagCompound.setShort("life", (short)this.ticksInGround);

        ResourceLocation resourcelocation = (ResourceLocation)Block.blockRegistry.getNameForObject(this.inTile);

        tagCompound.setString("inTile", resourcelocation == null ? "" : resourcelocation.toString());

        tagCompound.setByte("inData", (byte)this.inData);

        tagCompound.setByte("shake", (byte)this.arrowShake);

        tagCompound.setByte("inGround", (byte)(this.inGround ? 1 : 0));

        tagCompound.setDouble("damage", this.damage);

    }

 

    /**

    * (abstract) Protected helper method to read subclass entity data from NBT.

    */

    public void readEntityFromNBT(NBTTagCompound tagCompund)

    {

        this.xTile = tagCompund.getShort("xTile");

        this.yTile = tagCompund.getShort("yTile");

        this.zTile = tagCompund.getShort("zTile");

        this.ticksInGround = tagCompund.getShort("life");

 

        if (tagCompund.hasKey("inTile", 8))

        {

            this.inTile = Block.getBlockFromName(tagCompund.getString("inTile"));

        }

        else

        {

            this.inTile = Block.getBlockById(tagCompund.getByte("inTile") & 255);

        }

 

        this.inData = tagCompund.getByte("inData") & 255;

        this.arrowShake = tagCompund.getByte("shake") & 255;

        this.inGround = tagCompund.getByte("inGround") == 1;

 

        if (tagCompund.hasKey("damage", 99))

        {

            this.damage = tagCompund.getDouble("damage");

        }

    }

 

    /**

    * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to

    * prevent them from trampling crops

    */

    protected boolean canTriggerWalking()

    {

        return false;

    }

 

    public void setDamage(double p_70239_1_)

    {

        this.damage = p_70239_1_;

    }

 

    public double getDamage()

    {

        return this.damage;

    }

 

    /**

    * Sets the amount of knockback the arrow applies when it hits a mob.

    */

    public void setKnockbackStrength(int p_70240_1_)

    {

        this.knockbackStrength = p_70240_1_;

    }

 

    /**

    * If returns false, the item will not inflict any damage against entities.

    */

    public boolean canAttackWithItem()

    {

        return false;

    }

 

    /**

    * Whether the arrow has a stream of critical hit particles flying behind it.

    */

    public void setIsCritical(boolean p_70243_1_)

    {

        byte b0 = this.dataWatcher.getWatchableObjectByte(16);

 

        if (p_70243_1_)

        {

            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));

        }

        else

        {

            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));

        }

    }

 

    /**

    * Whether the arrow has a stream of critical hit particles flying behind it.

    */

    public boolean getIsCritical()

    {

        byte b0 = this.dataWatcher.getWatchableObjectByte(16);

        return (b0 & 1) != 0;

    }

 

 

    /**

    * returns EntityDamageSourceIndirect of an arrow

    */

    public static DamageSource causeArrowDamage(EntityStimpak arrow, Entity p_76353_1_)

    {

        return (new EntityDamageSourceIndirect("arrow", arrow, p_76353_1_)).setProjectile();

    }

 

 

@Override

public void writeSpawnData(ByteBuf buffer) {

buffer.writeInt(shootingEntity != null ? shootingEntity.getEntityId() : -1);

}

 

@Override

public void readSpawnData(ByteBuf buffer) {

Entity shooter = worldObj.getEntityByID(buffer.readInt());

if (shooter instanceof EntityLivingBase) {

shootingEntity = (EntityLivingBase) shooter;

}

}

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

      if (movingobjectposition.entityHit instanceof EntityLivingBase) {

      heal(movingobjectposition);

    }

}

 

public void heal(MovingObjectPosition movingobjectposition){

      EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

    entity.heal(10.0F);

}

}

 

 

Link to comment
Share on other sites

Solved!

 

 

 

@Override

protected void onImpact(MovingObjectPosition movingobjectposition) {

if (movingobjectposition.entityHit instanceof EntityLivingBase) {

if (movingobjectposition.entityHit != this.shootingEntity || this.ticksInAir >= 5) {

      heal(movingobjectposition);

    }

    }

}

 

public void heal(MovingObjectPosition movingobjectposition){

      EntityLivingBase entity= (EntityLivingBase)movingobjectposition.entityHit;

    entity.heal(10.0F);

}

 

 

 

(edited)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • https://pastebin.com/VwpAW6PX My game crashes upon launch when trying to implement the Oculus mod to this mod compilation, above is the crash report, I do not know where to begin to attempt to fix this issue and require assistance.
    • https://youtube.com/shorts/gqLTSMymgUg?si=5QOeSvA4TTs-bL46
    • CubeHaven is a SMP server with unique features that can't be found on the majority of other servers! Java: MC.CUBEHAVEN.NET Bedrock: MC.CUBEHAVEN.NET:19132 3 different stores: - CubeHaven Store: Our store to purchase using real money. - Bitcoin Store: Store for Bitcoin. Bitcoin can be earned from playing the server. Giving options for players if they want to spend real money or grind to obtain exclusive packages. - Black Market: A hidden store for trading that operates outside our traditional stores, like custom enchantments, exclusive items and more. Some of our features include: Rank Up: Progress through different ranks to unlock new privileges and perks. 📈 Skills: RPG-style skill system that enhances your gaming experience! 🎮 Leaderboards: Compete and shine! Top players are rewarded weekly! 🏆 Random Teleporter: Travel instantly across different worlds with a click! 🌐 Custom World Generation: Beautifully generated world. 🌍 Dungeons: Explore challenging and rewarding dungeons filled with treasures and monsters. 🏰 Kits: Unlock ranks and gain access to various kits. 🛠️ Fishing Tournament: Compete in a friendly fishing tournament! 🎣 Chat Games: Enjoy games right within the chat! 🎲 Minions: Get some help from your loyal minions. 👥 Piñata Party: Enjoy a festive party with Piñatas! 🎉 Quests: Over 1000 quests that you can complete! 📜 Bounty Hunter: Set a bounty on a player's head. 💰 Tags: Displayed on nametags, in the tab list, and in chat. 🏷️ Coinflip: Bet with other players on coin toss outcomes, victory, or defeat! 🟢 Invisible & Glowing Frames: Hide your frames for a cleaner look or apply a glow to it for a beautiful look. 🔲✨[ Player Warp: Set your own warp points for other players to teleport to. 🌟 Display Shop: Create your own shop and sell to other players! 🛒 Item Skins: Customize your items with unique skins. 🎨 Pets: Your cute loyal companion to follow you wherever you go! 🐾 Cosmetics: Enhance the look of your character with beautiful cosmetics! 💄 XP-Bottle: Store your exp safely in a bottle for later use! 🍶 Chest & Inventory Sorting: Keep your items neatly sorted in your inventory or chest! 📦 Glowing: Stand out from other players with a colorful glow! ✨ Player Particles: Over 100 unique particle effects to show off. 🎇 Portable Inventories: Over virtual inventories with ease. 🧳 And a lot more! Become part of our growing community today! Discord: https://cubehaven.net/discord Java: MC.CUBEHAVEN.NET Bedrock: MC.CUBEHAVEN.NET:19132
    • # Problematic frame: # C [libopenal.so+0x9fb4d] It is always the same issue - this refers to the Linux OS - so your system may prevent Java from working   I am not familiar with Linux - check for similar/related issues  
  • Topics

×
×
  • Create New...

Important Information

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