Jump to content

[1.6.4] -=[Solved]=- Arrow rendering


Atheera

Recommended Posts

Hi there!

 

I have this problem where my arrow entitys render as a purple arrow.

I have registered the arrow but it's not working.

 

Rendering class:

package extendedobsidian.atheera.com;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

@SideOnly(Side.CLIENT)
public class RenderObsidianInfusedArrow extends Render {

    @SideOnly(Side.CLIENT)
    private Icon icon0;

    private static final ResourceLocation arrowTextures = new ResourceLocation(Core.modid.toLowerCase() + ":ObsidianInfusedArrowEntity");

    public void renderArrow(EntityObsidianInfusedArrow par1EntityArrow, double par2, double par4, double par6, float par8, float par9) {
        this.bindEntityTexture(par1EntityArrow);
        GL11.glPushMatrix();
        GL11.glTranslatef((float)par2, (float)par4, (float)par6);
        GL11.glRotatef(par1EntityArrow.prevRotationYaw + (par1EntityArrow.rotationYaw - par1EntityArrow.prevRotationYaw) * par9 - 90.0F, 0.0F, 1.0F, 0.0F);
        GL11.glRotatef(par1EntityArrow.prevRotationPitch + (par1EntityArrow.rotationPitch - par1EntityArrow.prevRotationPitch) * par9, 0.0F, 0.0F, 1.0F);
        Tessellator tessellator = Tessellator.instance;
        byte b0 = 0;
        float f2 = 0.0F;
        float f3 = 0.5F;
        float f4 = (float)(0 + b0 * 10) / 32.0F;
        float f5 = (float)(5 + b0 * 10) / 32.0F;
        float f6 = 0.0F;
        float f7 = 0.15625F;
        float f8 = (float)(5 + b0 * 10) / 32.0F;
        float f9 = (float)(10 + b0 * 10) / 32.0F;
        float f10 = 0.05625F;
        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
        float f11 = (float)par1EntityArrow.arrowShake - par9;

        if (f11 > 0.0F) {
            float f12 = -MathHelper.sin(f11 * 3.0F) * f11;
            GL11.glRotatef(f12, 0.0F, 0.0F, 1.0F);
        }

        GL11.glRotatef(45.0F, 1.0F, 0.0F, 0.0F);
        GL11.glScalef(f10, f10, f10);
        GL11.glTranslatef(-4.0F, 0.0F, 0.0F);
        GL11.glNormal3f(f10, 0.0F, 0.0F);
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(-7.0D, -2.0D, -2.0D, (double)f6, (double)f8);
        tessellator.addVertexWithUV(-7.0D, -2.0D, 2.0D, (double)f7, (double)f8);
        tessellator.addVertexWithUV(-7.0D, 2.0D, 2.0D, (double)f7, (double)f9);
        tessellator.addVertexWithUV(-7.0D, 2.0D, -2.0D, (double)f6, (double)f9);
        tessellator.draw();
        GL11.glNormal3f(-f10, 0.0F, 0.0F);
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(-7.0D, 2.0D, -2.0D, (double)f6, (double)f8);
        tessellator.addVertexWithUV(-7.0D, 2.0D, 2.0D, (double)f7, (double)f8);
        tessellator.addVertexWithUV(-7.0D, -2.0D, 2.0D, (double)f7, (double)f9);
        tessellator.addVertexWithUV(-7.0D, -2.0D, -2.0D, (double)f6, (double)f9);
        tessellator.draw();

        for (int i = 0; i < 4; ++i)
        {
            GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
            GL11.glNormal3f(0.0F, 0.0F, f10);
            tessellator.startDrawingQuads();
            tessellator.addVertexWithUV(-8.0D, -2.0D, 0.0D, (double)f2, (double)f4);
            tessellator.addVertexWithUV(8.0D, -2.0D, 0.0D, (double)f3, (double)f4);
            tessellator.addVertexWithUV(8.0D, 2.0D, 0.0D, (double)f3, (double)f5);
            tessellator.addVertexWithUV(-8.0D, 2.0D, 0.0D, (double)f2, (double)f5);
            tessellator.draw();
        }

        GL11.glDisable(GL12.GL_RESCALE_NORMAL);
        GL11.glPopMatrix();
    }
    
    protected ResourceLocation getArrowTextures(EntityObsidianInfusedArrow par1EntityArrow) {
        return arrowTextures;
    }
    @Override
    protected ResourceLocation getEntityTexture(Entity par1Entity) {
        return this.getArrowTextures((EntityObsidianInfusedArrow)par1Entity);
    }
    @Override
    public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) {
        this.renderArrow((EntityObsidianInfusedArrow)par1Entity, par2, par4, par6, par8, par9);
    }
    
    public String entitytexture = Core.modid.toLowerCase() + ":ObsidianInfusedArrowEntity";

    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister) {
    icon0 = par1IconRegister.registerIcon(entitytexture);
    }
}

 

Entity arrow:

package extendedobsidian.atheera.com;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.enchantment.EnchantmentThorns;
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.EntityEnderman;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet70GameEvent;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class EntityObsidianInfusedArrow extends Entity implements IProjectile
{
    private int xTile = -1;
    private int yTile = -1;
    private int zTile = -1;
    private int inTile = 0;
    private int inData = 0;
    private boolean inGround = false;

    public int canBePickedUp = 0;

    public int arrowShake = 0;

    public Entity shootingEntity;
    private int ticksInGround;
    private int ticksInAir = 0;
    private double damage = 7.5D;

    private int knockbackStrength;
    
    public EntityObsidianInfusedArrow(World par1World) {
        super(par1World);
        this.renderDistanceWeight = 10.0D;
        this.setSize(0.5F, 0.5F);
    }

    public EntityObsidianInfusedArrow(World par1World, double par2, double par4, double par6) {
        super(par1World);
        this.renderDistanceWeight = 10.0D;
        this.setSize(0.5F, 0.5F);
        this.setPosition(par2, par4, par6);
        this.yOffset = 0.0F;
    }

    public EntityObsidianInfusedArrow(World par1World, EntityLivingBase par2EntityLiving, EntityLiving par3EntityLiving, float par4, float par5) {
        super(par1World);
        this.renderDistanceWeight = 10.0D;
        this.shootingEntity = par2EntityLiving;

        if (par2EntityLiving instanceof EntityPlayer) {
            this.canBePickedUp = 1;
        }

        this.posY = par2EntityLiving.posY + (double)par2EntityLiving.getEyeHeight() - 0.10000000149011612D;
        double d0 = par3EntityLiving.posX - par2EntityLiving.posX;
        double d1 = par3EntityLiving.boundingBox.minY + (double)(par3EntityLiving.height / 3.0F) - this.posY;
        double d2 = par3EntityLiving.posZ - par2EntityLiving.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(par2EntityLiving.posX + d4, this.posY, par2EntityLiving.posZ + d5, f2, f3);
            this.yOffset = 0.0F;
            float f4 = (float)d3 * 0.2F;
            this.setThrowableHeading(d0, d1 + (double)f4, d2, par4, par5);
        }
    }

    public EntityObsidianInfusedArrow(World par1World, EntityLivingBase par2EntityLiving, float par3) {
        super(par1World);
        this.renderDistanceWeight = 10.0D;
        this.shootingEntity = par2EntityLiving;

        if (par2EntityLiving instanceof EntityPlayer) {
            this.canBePickedUp = 1;
        }

        this.setSize(0.5F, 0.5F);
        this.setLocationAndAngles(par2EntityLiving.posX, par2EntityLiving.posY + (double)par2EntityLiving.getEyeHeight(), par2EntityLiving.posZ, par2EntityLiving.rotationYaw, par2EntityLiving.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.yOffset = 0.0F;
        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, par3 * 1.5F, 1.0F);
    }
    @Override
    protected void entityInit() {
        this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
    }
    @Override
    public void setThrowableHeading(double par1, double par3, double par5, float par7, float par8) {
        float f2 = MathHelper.sqrt_double(par1 * par1 + par3 * par3 + par5 * par5);
        par1 /= (double)f2;
        par3 /= (double)f2;
        par5 /= (double)f2;
        par1 += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)par8;
        par3 += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)par8;
        par5 += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)par8;
        par1 *= (double)par7;
        par3 *= (double)par7;
        par5 *= (double)par7;
        this.motionX = par1;
        this.motionY = par3;
        this.motionZ = par5;
        float f3 = MathHelper.sqrt_double(par1 * par1 + par5 * par5);
        this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(par1, par5) * 180.0D / Math.PI);
        this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(par3, (double)f3) * 180.0D / Math.PI);
        this.ticksInGround = 0;
    }
    @Override
    @SideOnly(Side.CLIENT)
    public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9) {
        this.setPosition(par1, par3, par5);
        this.setRotation(par7, par8);
    }
    @Override
    @SideOnly(Side.CLIENT)
    public void setVelocity(double par1, double par3, double par5) {
        this.motionX = par1;
        this.motionY = par3;
        this.motionZ = par5;

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) {
            float f = MathHelper.sqrt_double(par1 * par1 + par5 * par5);
            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(par1, par5) * 180.0D / Math.PI);
            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(par3, (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;
        }
    }
    @Override
    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);
        }

        int i = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile);

        if (i > 0) {
            Block.blocksList[i].setBlockBoundsBasedOnState(this.worldObj, this.xTile, this.yTile, this.zTile);
            AxisAlignedBB axisalignedbb = Block.blocksList[i].getCollisionBoundingBoxFromPool(this.worldObj, this.xTile, this.yTile, this.zTile);

            if (axisalignedbb != null && axisalignedbb.isVecInside(this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ))) {
                this.inGround = true;
            }
        }

        if (this.arrowShake > 0) {
            --this.arrowShake;
        }

        if (this.inGround) {
            int j = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile);
            int k = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile);

            if (j == this.inTile && k == 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 vec3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ);
            Vec3 vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
            MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks_do_do(vec3, vec31, false, true);
            vec3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ);
            vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);

            if (movingobjectposition != null) {
                vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);
            }

            Entity entity = null;
            List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
            double d0 = 0.0D;
            int l;
            float f1;

            for (l = 0; l < list.size(); ++l) {
                Entity entity1 = (Entity)list.get(l);

                if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) {
                    f1 = 0.3F;
                    AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1);
                    MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec3, vec31);

                    if (movingobjectposition1 != null) {
                        double d1 = vec3.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;

            if (movingobjectposition != null) {
                if (movingobjectposition.entityHit != null) {
                    f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                    int i1 = MathHelper.ceiling_double_int((double)f2 * this.damage);

                    if (this.getIsCritical()) {
                        i1 += this.rand.nextInt(i1 / 2 + 2);
                    }

                    DamageSource damagesource = null;

                    if (this.shootingEntity == null) {
                        damagesource = DamageSource.causeThrownDamage(this, this);
                    }
                    else {
                        damagesource = DamageSource.causeThrownDamage(this, this.shootingEntity);
                    }

                    if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) {
                        movingobjectposition.entityHit.setFire(5);
                    }

                    if (movingobjectposition.entityHit.attackEntityFrom(damagesource, i1)) {
                        if (movingobjectposition.entityHit instanceof EntityLiving) {
                            EntityLiving entityliving = (EntityLiving)movingobjectposition.entityHit;

                            if (!this.worldObj.isRemote) {
                                entityliving.setArrowCountInEntity(entityliving.getArrowCountInEntity() + 1);
                            }

                            if (this.knockbackStrength > 0) {
                                f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

                                if (f3 > 0.0F) {
                                    movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f3, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f3);
                                }
                            }

                            if (this.shootingEntity != null) {
                                EnchantmentThorns.func_92096_a(this.shootingEntity, entityliving, this.rand);
                            }

                            if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) {
                                ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(6, 0));
                            }
                        }

                        this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));

                        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 {
                    this.xTile = movingobjectposition.blockX;
                    this.yTile = movingobjectposition.blockY;
                    this.zTile = movingobjectposition.blockZ;
                    this.inTile = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile);
                    this.inData = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile);
                    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));
                    f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                    this.posX -= this.motionX / (double)f2 * 0.05000000074505806D;
                    this.posY -= this.motionY / (double)f2 * 0.05000000074505806D;
                    this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D;
                    this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                    this.inGround = true;
                    this.arrowShake = 7;
                    this.setIsCritical(false);

                    if (this.inTile != 0) {
                        Block.blocksList[this.inTile].onEntityCollidedWithBlock(this.worldObj, this.xTile, this.yTile, this.zTile, this);
                    }
                }
            }

            if (this.getIsCritical()) {
                for (l = 0; l < 4; ++l) {
                    this.worldObj.spawnParticle("crit", this.posX + this.motionX * (double)l / 4.0D, this.posY + this.motionY * (double)l / 4.0D, this.posZ + this.motionZ * (double)l / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ);
                }
            }

            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;
            float f4 = 0.99F;
            f1 = 0.05F;

            if (this.isInWater()) {
                for (int j1 = 0; j1 < 4; ++j1) {
                    f3 = 0.25F;
                    this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f3, this.posY - this.motionY * (double)f3, this.posZ - this.motionZ * (double)f3, this.motionX, this.motionY, this.motionZ);
                }

                f4 = 0.8F;
            }

            this.motionX *= (double)f4;
            this.motionY *= (double)f4;
            this.motionZ *= (double)f4;
            this.motionY -= (double)f1;
            this.setPosition(this.posX, this.posY, this.posZ);
            this.doBlockCollisions();
        }
    }
    @Override
    public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) {
        par1NBTTagCompound.setShort("xTile", (short)this.xTile);
        par1NBTTagCompound.setShort("yTile", (short)this.yTile);
        par1NBTTagCompound.setShort("zTile", (short)this.zTile);
        par1NBTTagCompound.setByte("inTile", (byte)this.inTile);
        par1NBTTagCompound.setByte("inData", (byte)this.inData);
        par1NBTTagCompound.setByte("shake", (byte)this.arrowShake);
        par1NBTTagCompound.setByte("inGround", (byte)(this.inGround ? 1 : 0));
        par1NBTTagCompound.setByte("pickup", (byte)this.canBePickedUp);
        par1NBTTagCompound.setDouble("damage", this.damage);
    }
    @Override
    public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) {
        this.xTile = par1NBTTagCompound.getShort("xTile");
        this.yTile = par1NBTTagCompound.getShort("yTile");
        this.zTile = par1NBTTagCompound.getShort("zTile");
        this.inTile = par1NBTTagCompound.getByte("inTile") & 255;
        this.inData = par1NBTTagCompound.getByte("inData") & 255;
        this.arrowShake = par1NBTTagCompound.getByte("shake") & 255;
        this.inGround = par1NBTTagCompound.getByte("inGround") == 1;

        if (par1NBTTagCompound.hasKey("damage")) {
            this.damage = par1NBTTagCompound.getDouble("damage");
        }

        if (par1NBTTagCompound.hasKey("pickup")) {
            this.canBePickedUp = par1NBTTagCompound.getByte("pickup");
        }
        else if (par1NBTTagCompound.hasKey("player")) {
            this.canBePickedUp = par1NBTTagCompound.getBoolean("player") ? 1 : 0;
        }
    }
    @Override
    public void onCollideWithPlayer(EntityPlayer par1EntityPlayer) {
        if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0) {
            boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && par1EntityPlayer.capabilities.isCreativeMode;

            if (this.canBePickedUp == 1 && !par1EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Core.itemObsidianInfusedArrow, 1))) {
                flag = false;
            }

            if (flag) {
                this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                par1EntityPlayer.onItemPickup(this, 1);
                this.setDead();
            }
        }
    }
    @Override
    protected boolean canTriggerWalking() {
        return false;
    }
    @Override
    @SideOnly(Side.CLIENT)
    public float getShadowSize() {
        return 0.0F;
    }

    public void setDamage(double par1) {
        this.damage = par1;
    }

    public double getDamage() {
        return this.damage;
    }

    public void setKnockbackStrength(int par1) {
        this.knockbackStrength = par1;
    }
    @Override
    public boolean canAttackWithItem() {
        return false;
    }

    public void setIsCritical(boolean par1) {
        byte b0 = this.dataWatcher.getWatchableObjectByte(16);

        if (par1) {
            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));
        }
        else {
            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));
        }
    }

    public boolean getIsCritical() {
        byte b0 = this.dataWatcher.getWatchableObjectByte(16);
        return (b0 & 1) != 0;
    }
}
[code]

Bow class:
[code]
package extendedobsidian.atheera.com;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ObsidianInfusedBow extends Item {

    public static final String[] bowPullIconNameArray = new String[] {"ObsidianInfusedBow_pulling_0", "ObsidianInfusedBow_pulling_1", "ObsidianInfusedBow_pulling_2"};
    @SideOnly(Side.CLIENT)
    private Icon[] iconArray;

    @SideOnly(Side.CLIENT)
    private Icon icon0;
    private Icon icon1;
    private Icon icon2;
    
    public ObsidianInfusedBow(int par1) {
        super(par1);
        this.maxStackSize = 1;
        this.setMaxDamage(8192);
    }
    @Override
    public boolean hasEffect(ItemStack itemstack) {
    	return true;
    }
    @Override
    public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4) {
        int j = this.getMaxItemUseDuration(par1ItemStack) - par4;

        ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled()) {
            return;
        }
        j = event.charge;

        boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;

        if (flag || par3EntityPlayer.inventory.hasItem(Core.itemObsidianInfusedArrow.itemID)) {
            float f = (float)j / 20.0F;
            f = (f * f + f * 2.0F) / 3.0F;

            if ((double)f < 0.1D) {
                return;
            }

            if (f > 1.0F) {
                f = 1.0F;
            }

            EntityObsidianInfusedArrow entityarrow = new EntityObsidianInfusedArrow(par2World, par3EntityPlayer, f * 2.0F);

            if (f == 1.0F) {
                entityarrow.setIsCritical(true);
            }

            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);

            if (k > 0) {
                entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
            }

            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);

            if (l > 0) {
                entityarrow.setKnockbackStrength(l);
            }

            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0) {
                entityarrow.setFire(100);
            }

            par1ItemStack.damageItem(1, par3EntityPlayer);
            par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

            if (flag) {
                entityarrow.canBePickedUp = 2;
            }else{
                par3EntityPlayer.inventory.consumeInventoryItem(Core.itemObsidianInfusedArrow.itemID);
            }

            if (!par2World.isRemote) {
                par2World.spawnEntityInWorld(entityarrow);
            }
        }
    }
    @Override
    public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
        return par1ItemStack;
    }
    @Override
    public int getMaxItemUseDuration(ItemStack par1ItemStack) {
        return 36000;
    }
    @Override
    public EnumAction getItemUseAction(ItemStack par1ItemStack) {
        return EnumAction.bow;
    }
    @Override
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
        ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled()) {
            return event.result;
        }

        if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Core.itemObsidianInfusedArrow.itemID)) {
            par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
        }

        return par1ItemStack;
    }
    @Override
    public int getItemEnchantability() {
        return 30;
    }
    
    public String STANDBY = Core.modid.toLowerCase() + ":ObsidianInfusedBow_standby";
    public String TEXTURE0 = Core.modid.toLowerCase() + ":ObsidianInfusedBow_pulling_0";
    public String TEXTURE1 = Core.modid.toLowerCase() + ":ObsidianInfusedBow_pulling_1";
    public String TEXTURE2 = Core.modid.toLowerCase() + ":ObsidianInfusedBow_pulling_2";
    
    @Override
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister) {
    itemIcon = par1IconRegister.registerIcon(STANDBY);
    icon0 = par1IconRegister.registerIcon(TEXTURE0);
    icon1 = par1IconRegister.registerIcon(TEXTURE1);
    icon2 = par1IconRegister.registerIcon(TEXTURE2);
    }
    
    @Override
    @SideOnly(Side.CLIENT)
    public Icon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
    if(player.getItemInUse() == null) return this.itemIcon;
    int Pulling = stack.getMaxItemUseDuration() - useRemaining;
    
    if (Pulling >= 18) {
    return icon2;
    }else if (Pulling > 13) {
    return icon1;
    }else if (Pulling > 0) {
    return icon0;
    }	
    return itemIcon;
    }
} 

Link to comment
Share on other sites

You need to bind the texture between the GL11.glPushMatrix(); and GL11.glPopMatrix() method.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

You need to bind the texture between the GL11.glPushMatrix(); and GL11.glPopMatrix() method.

Does not matter where you bind the texture (as long as it's before the texture drawing)

 

1. Why do you have an Icon in your render file? It does not belong there.

2. Can we see how you registered your Arrow entity (and the render)?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

You need to bind the texture between the GL11.glPushMatrix(); and GL11.glPopMatrix() method.

Does not matter where you bind the texture (as long as it's before the texture drawing)

 

1. Why do you have an Icon in your render file? It does not belong there.

2. Can we see how you registered your Arrow entity (and the render)?

 

Client Proxy:

package extendedobsidian.atheera.com;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.registry.GameRegistry;

public class ClientProxy extends CommonProxy{

@Override
public void registerRenderThings() {

	GameRegistry.registerTileEntity(TileEntityFusionFurnace.class, "tileentityfusionfurnace");
	RenderingRegistry.registerEntityRenderingHandler(EntityObsidianInfusedArrow.class, new RenderObsidianInfusedArrow());

}

public int addArmor(String armor) {
	return RenderingRegistry.addNewArmourRendererPrefix(armor);
}

}

 

I forgot this also:

Main class

 

EntityRegistry.registerModEntity(EntityObsidianInfusedArrow.class, "ObsidianInfusedArrow", 2, Core.instance, 128, 1, true);

LanguageRegistry.instance().addStringLocalization("entity.ObsidianInfusedArrow.name", "Obsidian Infused Arrow");

 

EntityRegistry.registerGlobalEntityID(EntityObsidianInfusedArrow.class, "ObsidianInfusedArrow", EntityRegistry.findGlobalUniqueEntityId());

Link to comment
Share on other sites

The only thing left is now the class where you register the entity itself.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

The only thing left is now the class where you register the entity itself.

 

Isn't that done in the bow class?

 

package extendedobsidian.atheera.com;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ObsidianInfusedBow extends Item {

    public static final String[] bowPullIconNameArray = new String[] {"ObsidianInfusedBow_pulling_0", "ObsidianInfusedBow_pulling_1", "ObsidianInfusedBow_pulling_2"};
    @SideOnly(Side.CLIENT)
    private Icon[] iconArray;

    @SideOnly(Side.CLIENT)
    private Icon icon0;
    private Icon icon1;
    private Icon icon2;
    
    public ObsidianInfusedBow(int par1) {
        super(par1);
        this.maxStackSize = 1;
        this.setMaxDamage(8192);
    }
    @Override
    public boolean hasEffect(ItemStack itemstack) {
    	return true;
    }
    @Override
    public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4) {
        int j = this.getMaxItemUseDuration(par1ItemStack) - par4;

        ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled()) {
            return;
        }
        j = event.charge;

        boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;

        if (flag || par3EntityPlayer.inventory.hasItem(Core.itemObsidianInfusedArrow.itemID)) {
            float f = (float)j / 20.0F;
            f = (f * f + f * 2.0F) / 3.0F;

            if ((double)f < 0.1D) {
                return;
            }

            if (f > 1.0F) {
                f = 1.0F;
            }

            EntityObsidianInfusedArrow entityarrow = new EntityObsidianInfusedArrow(par2World, par3EntityPlayer, f * 2.0F);

            if (f == 1.0F) {
                entityarrow.setIsCritical(true);
            }

            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);

            if (k > 0) {
                entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
            }

            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);

            if (l > 0) {
                entityarrow.setKnockbackStrength(l);
            }

            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0) {
                entityarrow.setFire(100);
            }

            par1ItemStack.damageItem(1, par3EntityPlayer);
            par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

            if (flag) {
                entityarrow.canBePickedUp = 2;
            }else{
                par3EntityPlayer.inventory.consumeInventoryItem(Core.itemObsidianInfusedArrow.itemID);
            }

            if (!par2World.isRemote) {
                par2World.spawnEntityInWorld(entityarrow);
            }
        }
    }
    @Override
    public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
        return par1ItemStack;
    }
    @Override
    public int getMaxItemUseDuration(ItemStack par1ItemStack) {
        return 36000;
    }
    @Override
    public EnumAction getItemUseAction(ItemStack par1ItemStack) {
        return EnumAction.bow;
    }
    @Override
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
        ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled()) {
            return event.result;
        }

        if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Core.itemObsidianInfusedArrow.itemID)) {
            par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
        }

        return par1ItemStack;
    }
    @Override
    public int getItemEnchantability() {
        return 30;
    }
    
    public String STANDBY = Core.modid.toLowerCase() + ":ObsidianInfusedBow_standby";
    public String TEXTURE0 = Core.modid.toLowerCase() + ":ObsidianInfusedBow_pulling_0";
    public String TEXTURE1 = Core.modid.toLowerCase() + ":ObsidianInfusedBow_pulling_1";
    public String TEXTURE2 = Core.modid.toLowerCase() + ":ObsidianInfusedBow_pulling_2";
    
    @Override
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister) {
    itemIcon = par1IconRegister.registerIcon(STANDBY);
    icon0 = par1IconRegister.registerIcon(TEXTURE0);
    icon1 = par1IconRegister.registerIcon(TEXTURE1);
    icon2 = par1IconRegister.registerIcon(TEXTURE2);
    }
    
    @Override
    @SideOnly(Side.CLIENT)
    public Icon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
    if(player.getItemInUse() == null) return this.itemIcon;
    int Pulling = stack.getMaxItemUseDuration() - useRemaining;
    
    if (Pulling >= 18) {
    return icon2;
    }else if (Pulling > 13) {
    return icon1;
    }else if (Pulling > 0) {
    return icon0;
    }	
    return itemIcon;
    }
} 

Link to comment
Share on other sites

No, within the bow class, you only instantiate it.

You need to register the entity class like any other entity.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

No, within the bow class, you only instantiate it.

You need to register the entity class like any other entity.

 

I have this in the init of my main class

 

EntityRegistry.registerModEntity(EntityObsidianInfusedArrow.class, "ObsidianInfusedArrow", 2, Core.instance, 128, 1, true);

LanguageRegistry.instance().addStringLocalization("entity.ObsidianInfusedArrow.name", "Obsidian Infused Arrow");

 

EntityRegistry.registerGlobalEntityID(EntityObsidianInfusedArrow.class, "ObsidianInfusedArrow", EntityRegistry.findGlobalUniqueEntityId());

 

Shouldn't that do it?

Link to comment
Share on other sites

the registerGlobalEntityId is not needed, you can omit that.

Can you do a System.Out.Println("renderme"); in your doRender method and see if it gets called?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

the registerGlobalEntityId is not needed, you can omit that.

Can you do a System.Out.Println("renderme"); in your doRender method and see if it gets called?

 

Yeah, it gets rendered alright:

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

2014-05-07 13:31:13 [iNFO] [sTDOUT] renderme

Link to comment
Share on other sites

I might see the problem, you're getting an arrow with a missing texture icon, because of this:

new ResourceLocation(Core.modid.toLowerCase() + ":ObsidianInfusedArrowEntity")

 

You can't use the ResourceLocation the same way as you would register icons (since they not only handle textures, but also sounds etc.)

To use it properly, you have to specify a path to the file (with extension), so like:

new ResourceLocation("baseFolder:textures/entity/myArrow.png")

where baseFolder is the folder in the assets folder (here your mod id) and textures/entity/myArrow.png the path to the texture file:

assets/baseFolder/textures/entity/myArrow.png

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

I might see the problem, you're getting an arrow with a missing texture icon, because of this:

new ResourceLocation(Core.modid.toLowerCase() + ":ObsidianInfusedArrowEntity")

 

You can't use the ResourceLocation the same way as you would register icons (since they not only handle textures, but also sounds etc.)

To use it properly, you have to specify a path to the file (with extension), so like:

new ResourceLocation("baseFolder:textures/entity/myArrow.png")

where baseFolder is the folder in the assets folder (here your mod id) and textures/entity/myArrow.png the path to the texture file:

assets/baseFolder/textures/entity/myArrow.png

 

OMG! I love you so much! THANK YOU!!

Well, the texture is rendering correctly, although... The arrow gets stuck in mid-air.

 

2woj7d0.png

Link to comment
Share on other sites

OMG! I love you so much! THANK YOU!!

Well, the texture is rendering correctly, although... The arrow gets stuck in mid-air.

 

does it get stuck after it hits something or during flight?

Another question is what does your EntityArrow do different from the vanilla one? I see a lot of copied code. Can't you just extend the vanilla one and make your changes?

Here's an example from my arrow entity: https://github.com/SanAndreasP/EnderStuffPlus/blob/master/java/de/sanandrew/mods/enderstuffplus/entity/EntityAvisArrow.java

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

OMG! I love you so much! THANK YOU!!

Well, the texture is rendering correctly, although... The arrow gets stuck in mid-air.

 

does it get stuck after it hits something or during flight?

Another question is what does your EntityArrow do different from the vanilla one? I see a lot of copied code. Can't you just extend the vanilla one and make your changes?

Here's an example from my arrow entity: https://github.com/SanAndreasP/EnderStuffPlus/blob/master/java/de/sanandrew/mods/enderstuffplus/entity/EntityAvisArrow.java

 

I am uploading a video now, but when it has hit something, it goes back a bit.

I want it to act exactly like the vanilla arrow but do more damage.

Link to comment
Share on other sites

OMG! I love you so much! THANK YOU!!

Well, the texture is rendering correctly, although... The arrow gets stuck in mid-air.

 

does it get stuck after it hits something or during flight?

Another question is what does your EntityArrow do different from the vanilla one? I see a lot of copied code. Can't you just extend the vanilla one and make your changes?

Here's an example from my arrow entity: https://github.com/SanAndreasP/EnderStuffPlus/blob/master/java/de/sanandrew/mods/enderstuffplus/entity/EntityAvisArrow.java

 

I am uploading a video now, but when it has hit something, it goes back a bit.

I want it to act exactly like the vanilla arrow but do more damage.

 

 

Arrows behaving themselves weird

Link to comment
Share on other sites

If you just want more damage then you can definitely just extend the vanilla arrow entity in fact if you wernt doing custom rendering you wouldn't have to make your own arrow at all (you can modify the damage coursed by a vanilla arrow when you spawn it)

Just dont forget to remove the fields:

public int canBePickedUp;

public int arrowShake;

and

public Entity shootingEntity;

Or you will get the common "Arrow hits shooter" problem

It is also a good idea to replace super.onUpdate() in the onUpdate method with

super.onEntityUpdate(); otherwise both the onUpdate from the vanilla arrow and you custom onUpdate method will run and you probably dont want this.

I am the author of Draconic Evolution

Link to comment
Share on other sites

If you just want more damage then you can definitely just extend the vanilla arrow entity in fact if you wernt doing custom rendering you wouldn't have to make your own arrow at all (you can modify the damage coursed by a vanilla arrow when you spawn it)

Just dont forget to remove the fields:

public int canBePickedUp;

public int arrowShake;

and

public Entity shootingEntity;

Or you will get the common "Arrow hits shooter" problem

It is also a good idea to replace super.onUpdate() in the onUpdate method with

super.onEntityUpdate(); otherwise both the onUpdate from the vanilla arrow and you custom onUpdate method will run and you probably dont want this.

 

I have gotten the texture right and the arrow behaving as I want them to, but the damage is wrong, and I don't know how to fix it.

 

Entity Arrow Class:

package extendedobsidian.atheera.com;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class EntityObsidianInfusedArrow extends EntityArrow {

    public EntityObsidianInfusedArrow(World world) {
        super(world);
    }

    public EntityObsidianInfusedArrow(World world, double x, double y, double z) {
        super(world, x, y, z);
    }

    public EntityObsidianInfusedArrow(World world, EntityLivingBase shooter, EntityLivingBase target, float motionMulti, float precision) {
        super(world, shooter, target, motionMulti, precision);
    }

    public EntityObsidianInfusedArrow(World world, EntityLivingBase shooter, float motionMulti) {
        super(world, shooter, motionMulti);
    }

    @Override
    public void onCollideWithPlayer(EntityPlayer player) {
        if( !this.worldObj.isRemote ) {
            NBTTagCompound origNBT = new NBTTagCompound();
            this.writeEntityToNBT(origNBT);

            if( origNBT.getByte("inGround") == 1 && this.arrowShake <= 0 && ((this.canBePickedUp == 1 && player.inventory.addItemStackToInventory(new ItemStack(Core.itemObsidianInfusedArrow, 1))) || player.capabilities.isCreativeMode)) {
                this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                
                player.onItemPickup(this, 1);
                this.setDead();
            }
        }
    }

    @Override
    public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) {
        par1NBTTagCompound.setDouble("damage", this.damage);
    }

    @Override
    public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) {

        if (par1NBTTagCompound.hasKey("damage")) {
            this.damage = par1NBTTagCompound.getDouble("damage");
        }
    }
    
    private double damage = 6.0D;
    
    @Override
    public void setDamage(double par1) {
        this.damage = par1;
    }
    @Override
    public double getDamage() {
        return this.damage;
    }
}

Link to comment
Share on other sites

You don't reference the

damage

field you've declared.

Actually you don't even need to.

 

I recommend just to override setDamage and call the super method with the given parameter multiplied by the value, meaning it has x times more damage than a vanilla arrow would've.

 

Also remove the getDamage method and the damage field

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

You don't reference the

damage

field you've declared.

Actually you don't even need to.

 

I recommend just to override setDamage and call the super method with the given parameter multiplied by the value, meaning it has x times more damage than a vanilla arrow would've.

 

Also remove the getDamage method and the damage field

 

I have tried everything but nothing works. There doesn't seem to be any tutorials online to fix it either.

 

Entity Arrow Class:

package extendedobsidian.atheera.com;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class EntityObsidianInfusedArrow extends EntityArrow {

    public EntityObsidianInfusedArrow(World world) {
        super(world);
        this.setDamage(6.0D);
    }

    public EntityObsidianInfusedArrow(World world, double x, double y, double z) {
        super(world, x, y, z);
    }

    public EntityObsidianInfusedArrow(World world, EntityLivingBase shooter, EntityLivingBase target, float motionMulti, float precision) {
        super(world, shooter, target, motionMulti, precision);
    }

    public EntityObsidianInfusedArrow(World world, EntityLivingBase shooter, float motionMulti) {
        super(world, shooter, motionMulti);
    }

    @Override
    public void onCollideWithPlayer(EntityPlayer player) {
        if( !this.worldObj.isRemote ) {
            NBTTagCompound origNBT = new NBTTagCompound();
            this.writeEntityToNBT(origNBT);

            if( origNBT.getByte("inGround") == 1 && this.arrowShake <= 0 && ((this.canBePickedUp == 1 && player.inventory.addItemStackToInventory(new ItemStack(Core.itemObsidianInfusedArrow, 1))) || player.capabilities.isCreativeMode)) {
                this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                
                player.onItemPickup(this, 1);
                this.setDead();
            }
        }
    }
    
    public double damage = 2.0D;
    
    @Override
    public void setDamage(double damage) {
    	super.setDamage(damage);
    	
    	this.damage = damage * 3.0D;
    	damage = damage * 3.0D;
    }
}

Link to comment
Share on other sites

Again, remove the damage field in your class! It's not referenced anywhere and unlike methods, fields cannot be "overridden"!

Also do your calculations before the super method call, and only on the local variable. Also a tip, you can also do

damage *= 3.0D

, which basically says "re-assign the variable with itself multiplied by 3.0D". You can also use this on any numerical type with any mathematical or bitwise operator.

But what you can also do is to do the calculation within the parameter assignment like

method(variable * [value])

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

Again, remove the damage field in your class! It's not referenced anywhere and unlike methods, fields cannot be "overridden"!

Also do your calculations before the super method call, and only on the local variable. Also a tip, you can also do

damage *= 3.0D

, which basically says "re-assign the variable with itself multiplied by 3.0D". You can also use this on any numerical type with any mathematical or bitwise operator.

But what you can also do is to do the calculation within the parameter assignment like

method(variable * [value])

 

Hey man, I got it working with damage and everything.

I hope you don't mind me using your class.

 

Arrow class:

package extendedobsidian.atheera.com.entity;

import extendedobsidian.atheera.com.Core;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class EntityObsidianInfusedArrow extends EntityArrow {

    public EntityObsidianInfusedArrow(World world) {
        super(world);
    }

    public EntityObsidianInfusedArrow(World world, double x, double y, double z) {
        super(world, x, y, z);
    }

    public EntityObsidianInfusedArrow(World world, EntityLivingBase shooter, EntityLivingBase target, float motionMulti, float precision) {
        super(world, shooter, target, motionMulti, precision);
    }

    public EntityObsidianInfusedArrow(World world, EntityLivingBase shooter, float motionMulti) {
        super(world, shooter, motionMulti);
        this.setDamage(6.0D);
    }

    @Override
    public void onCollideWithPlayer(EntityPlayer player) {
        if( !this.worldObj.isRemote ) {
            NBTTagCompound origNBT = new NBTTagCompound();
            this.writeEntityToNBT(origNBT);

            if( origNBT.getByte("inGround") == 1 && this.arrowShake <= 0 && ((this.canBePickedUp == 1 && player.inventory.addItemStackToInventory(new ItemStack(Core.itemObsidianInfusedArrow, 1))) || player.capabilities.isCreativeMode)) {
                this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                
                player.onItemPickup(this, 1);
                this.setDead();
            }
        }
    }
}

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

    • The game crashed whilst initializing game Error: java.lang.ExceptionInInitializerError: null   https://paste.ee/p/i4PoA
    • I made server version of my modpack, deleted all clientside mods, server starts but latest.log contains many errors and i have no idea how to fix them Latest.log https://mclo.gs/jswh7LP
    • ---- Minecraft Crash Report ---- // Why did you do that? Time: 2024-09-29 13:38:10 Description: Rendering screen java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0     at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)     at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)     at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)     at java.base/java.util.Objects.checkIndex(Objects.java:385)     at java.base/java.util.ArrayList.get(ArrayList.java:427)     at net.replaceitem.symbolchat.gui.widget.DropDownWidget.method_25369(DropDownWidget.java:81)     at net.replaceitem.symbolchat.gui.widget.DropDownWidget.method_48579(DropDownWidget.java:51)     at net.minecraft.class_339.method_25394(class_339.java:66)     at net.minecraft.class_437.method_25394(class_437.java:128)     at net.minecraft.class_408.method_25394(class_408.java:200)     at net.minecraft.class_437.method_47413(class_437.java:117)     at net.minecraft.class_757.mixinextras$bridge$method_47413$257(class_757.java)     at net.minecraft.class_757.wrapOperation$bij000$fabric-screen-api-v1$onRenderScreen(class_757.java:3086)     at net.minecraft.class_757.method_3192(class_757.java:913)     at net.minecraft.class_310.method_1523(class_310.java:1285)     at net.minecraft.class_310.method_1514(class_310.java:882)     at net.minecraft.client.main.Main.main(Main.java:256)     at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480)     at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)     at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)     at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)     at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)     at java.base/java.util.Objects.checkIndex(Objects.java:385)     at java.base/java.util.ArrayList.get(ArrayList.java:427)     at net.replaceitem.symbolchat.gui.widget.DropDownWidget.method_25369(DropDownWidget.java:81)     at net.replaceitem.symbolchat.gui.widget.DropDownWidget.method_48579(DropDownWidget.java:51)     at net.minecraft.class_339.method_25394(class_339.java:66)     at net.minecraft.class_437.method_25394(class_437.java:128)     at net.minecraft.class_408.method_25394(class_408.java:200)     at net.minecraft.class_437.method_47413(class_437.java:117)     at net.minecraft.class_757.mixinextras$bridge$method_47413$257(class_757.java)     at net.minecraft.class_757.wrapOperation$bij000$fabric-screen-api-v1$onRenderScreen(class_757.java:3086) -- Screen render details -- Details:     Screen name: net.minecraft.class_408     Mouse location: Scaled: (213, 120). Absolute: (427.000000, 240.000000)     Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2.000000 Stacktrace:     at net.minecraft.class_757.method_3192(class_757.java:913)     at net.minecraft.class_310.method_1523(class_310.java:1285)     at net.minecraft.class_310.method_1514(class_310.java:882)     at net.minecraft.client.main.Main.main(Main.java:256)     at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480)     at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)     at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) -- Uptime -- Details:     JVM uptime: 52.276s     Wall uptime: 35.737s     High-res time: 684634.710s     Client ticks: 305 ticks / 15.250s Stacktrace:     at net.minecraft.class_310.method_1587(class_310.java:2501)     at net.minecraft.class_310.method_54580(class_310.java:949)     at net.minecraft.class_310.method_1514(class_310.java:902)     at net.minecraft.client.main.Main.main(Main.java:256)     at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480)     at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)     at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) -- Affected level -- Details:     All players: 14 total; [class_746['Snr_Ganapi'/12586, l='ClientLevel', x=-12.50, y=-28.00, z=23.50], class_745['h33nky'/12585, l='ClientLevel', x=-12.50, y=-28.00, z=23.50], class_745['dimasik2009123'/12565, l='ClientLevel', x=-12.50, y=-28.00, z=23.50], class_745['Elik89'/12583, l='ClientLevel', x=-18.46, y=-30.00, z=12.76], class_745['1b123eb8-107a-46'/1, l='ClientLevel', x=-4.50, y=-29.00, z=-11.50], class_745['9e1895c7-120a-4d'/3, l='ClientLevel', x=-12.50, y=-29.00, z=-13.50], class_745['1c7db329-783c-4d'/4, l='ClientLevel', x=-0.50, y=-29.00, z=-9.50], class_745['b6ddb583-f492-48'/9, l='ClientLevel', x=-8.50, y=-29.00, z=-13.50], class_745['2459f82c-f115-49'/7, l='ClientLevel', x=-28.50, y=-29.00, z=-6.50], class_745['2333ac85-73e9-4e'/5, l='ClientLevel', x=-20.50, y=-29.00, z=-11.50], class_745['06fe93b3-6dd2-4c'/2, l='ClientLevel', x=-16.50, y=-29.00, z=-13.50], class_745['ac3f6659-8d12-4c'/6, l='ClientLevel', x=-24.50, y=-29.00, z=-9.50], class_745['54753c0c-908c-44'/8, l='ClientLevel', x=3.50, y=-29.00, z=-6.50], class_745['scaly_toad'/12587, l='ClientLevel', x=-12.50, y=-27.90, z=23.50]]     Chunk stats: 1024, 293 F: 0 L: 0 U: 0 C: 0     Level dimension: minecraft:overworld     Level spawn location: World: (-13,-28,23), Section: (at 3,4,7 in -1,-2,1; chunk contains blocks -16,-64,16 to -1,319,31), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,-64,0 to -1,319,511)     Level time: 321927384 game time, 9000 day time     Server brand: SPWorlds P2: (hub-2)     Server type: Non-integrated multiplayer server     Tracked entity count: 516 -- Last reload -- Details:     Reload number: 1     Reload reason: initial     Finished: No     Packs: vanilla, fabric, betterf3, betterthirdperson, boatiview, bobby, c2me, caffeineconfig, capes, cardinal-components-base, cardinal-components-entity, cicada, cloth-config, dynamic_fps, ears, enhancedblockentities, entity_texture_features, entityculling, explosiveenhancement, fabric-api, fabric-api-base, fabric-api-lookup-api-v1, fabric-biome-api-v1, fabric-block-api-v1, fabric-block-view-api-v2, fabric-blockrenderlayer-v1, fabric-client-tags-api-v1, fabric-command-api-v1, fabric-command-api-v2, fabric-commands-v0, fabric-content-registries-v0, fabric-convention-tags-v1, fabric-convention-tags-v2, fabric-crash-report-info-v1, fabric-data-attachment-api-v1, fabric-data-generation-api-v1, fabric-dimensions-v1, fabric-entity-events-v1, fabric-events-interaction-v0, fabric-game-rule-api-v1, fabric-item-api-v1, fabric-item-group-api-v1, fabric-key-binding-api-v1, fabric-keybindings-v0, fabric-language-kotlin, fabric-lifecycle-events-v1, fabric-loot-api-v2, fabric-loot-api-v3, fabric-message-api-v1, fabric-model-loading-api-v1, fabric-networking-api-v1, fabric-object-builder-api-v1, fabric-particles-v1, fabric-recipe-api-v1, fabric-registry-sync-v0, fabric-renderer-api-v1, fabric-renderer-indigo, fabric-renderer-registries-v1, fabric-rendering-data-attachment-v1, fabric-rendering-fluids-v1, fabric-rendering-v0, fabric-rendering-v1, fabric-resource-conditions-api-v1, fabric-resource-loader-v0, fabric-screen-api-v1, fabric-screen-handler-api-v1, fabric-sound-api-v1, fabric-transfer-api-v1, fabric-transitive-access-wideners-v1, fabricloader, fallingleaves, forcecloseworldloadingscreen, immediatelyfast, indium, iris, lithium, modernfix, modmenu, nvidium, obsidianui, placeholder-api, plasmovoice, reeses-sodium-options, rrls, ryoamiclights, satin, showmeyourskin, skinlayers3d, sodium, sodium-extra, spark, symbol-chat, vmp, voicechat, wakes, xaerominimap, yet_another_config_lib_v3, zoomify, file/iconsv.1.8 (1).zip, file/No Pumpkin Blur 1.20-1.20.1.zip, file/Default-Dark-Mode-1.20-2023.6.0.zip, file/CalvinsSinisterSculk[1.20.4][v1.0].zip -- System Details -- Details:     Minecraft Version: 1.21     Minecraft Version ID: 1.21     Operating System: Windows 10 (amd64) version 10.0     Java Version: 21.0.3, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 225615872 bytes (215 MiB) / 1140850688 bytes (1088 MiB) up to 2147483648 bytes (2048 MiB)     CPUs: 4     Processor Vendor: AuthenticAMD     Processor Name: AMD Ryzen 3 4300U with Radeon Graphics              Identifier: AuthenticAMD Family 23 Model 96 Stepping 1     Microarchitecture: unknown     Frequency (GHz): 2.70     Number of physical packages: 1     Number of physical CPUs: 4     Number of logical CPUs: 4     Graphics card #0 name: AMD Radeon(TM) Graphics     Graphics card #0 vendor: Advanced Micro Devices, Inc.     Graphics card #0 VRAM (MiB): 512.00     Graphics card #0 deviceId: VideoController1     Graphics card #0 versionInfo: 31.0.12044.3     Memory slot #0 capacity (MiB): 8192.00     Memory slot #0 clockSpeed (GHz): 3.20     Memory slot #0 type: DDR4     Virtual memory max (MiB): 12942.09     Virtual memory used (MiB): 9630.07     Swap memory total (MiB): 5376.00     Swap memory used (MiB): 528.52     Space in storage for jna.tmpdir (MiB): available: 166917.31, total: 243558.98     Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): available: 166917.31, total: 243558.98     Space in storage for io.netty.native.workdir (MiB): available: 166917.31, total: 243558.98     Space in storage for java.io.tmpdir (MiB): available: 166917.31, total: 243558.98     Space in storage for workdir (MiB): available: 166917.31, total: 243558.98     JVM Flags: 9 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx2G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M     Fabric Mods:          badoptimizations: BadOptimizations 2.1.4         betterf3: BetterF3 11.0.1         betterthirdperson: Better Third Person 1.9.0         boatiview: Boat Item View Fabric 0.0.5         bobby: Bobby 5.2.3+mc1.21             com_typesafe_config: config 1.4.2             fabric-api-base: Fabric API Base 0.4.42+6573ed8c90             io_leangen_geantyref_geantyref: geantyref 1.3.13             org_spongepowered_configurate-core: configurate-core 4.1.2             org_spongepowered_configurate-hocon: configurate-hocon 4.1.2         c2me: Concurrent Chunk Management Engine 0.2.0+alpha.11.109+1.21             c2me-base: Concurrent Chunk Management Engine (Base) 0.2.0+alpha.11.109+1.21             c2me-client-uncapvd: Concurrent Chunk Management Engine (Client/Uncap View Distance) 0.2.0+alpha.11.109+1.21             c2me-fixes-chunkio-threading-issues: Concurrent Chunk Management Engine (Fixes/Chunk IO/Threading Issues) 0.2.0+alpha.11.109+1.21             c2me-fixes-general-threading-issues: Concurrent Chunk Management Engine (Fixes/General/Threading Issues) 0.2.0+alpha.11.109+1.21             c2me-fixes-worldgen-threading-issues: Concurrent Chunk Management Engine (Fixes/WorldGen/Threading Issues) 0.2.0+alpha.11.109+1.21             c2me-fixes-worldgen-vanilla-bugs: Concurrent Chunk Management Engine (Fixes/WorldGen/Vanilla Bugs) 0.2.0+alpha.11.109+1.21             c2me-notickvd: Concurrent Chunk Management Engine (No Tick View Distance) 0.2.0+alpha.11.109+1.21             c2me-opts-allocs: Concurrent Chunk Management Engine (Optimizations/Memory Allocations) 0.2.0+alpha.11.109+1.21             c2me-opts-chunk-access: Concurrent Chunk Management Engine (Optimizations/Chunk Access) 0.2.0+alpha.11.109+1.21             c2me-opts-chunkio: Concurrent Chunk Management Engine (Optimizations/Chunk IO) 0.2.0+alpha.11.109+1.21             c2me-opts-math: Concurrent Chunk Management Engine (Optimizations/Math) 0.2.0+alpha.11.109+1.21             c2me-opts-scheduling: Concurrent Chunk Management Engine (Optimizations/Scheduling) 0.2.0+alpha.11.109+1.21             c2me-opts-worldgen-general: Concurrent Chunk Management Engine (Optimizations/General WorldGen) 0.2.0+alpha.11.109+1.21             c2me-opts-worldgen-vanilla: Concurrent Chunk Management Engine (Optimizations/Vanilla WorldGen) 0.2.0+alpha.11.109+1.21             c2me-rewrites-chunk-serializer: Concurrent Chunk Management Engine (Rewrites/Chunk Serializer) 0.2.0+alpha.11.109+1.21             c2me-rewrites-chunkio: Concurrent Chunk Management Engine (Rewrites/Chunk IO) 0.2.0+alpha.11.109+1.21             c2me-server-utils: Concurrent Chunk Management Engine (Server Utils) 0.2.0+alpha.11.109+1.21             c2me-threading-chunkio: Concurrent Chunk Management Engine (Threading/WorldGen) 0.2.0+alpha.11.109+1.21             c2me-threading-lighting: Concurrent Chunk Management Engine (Threading/Lighting) 0.2.0+alpha.11.109+1.21             c2me-threading-worldgen: Concurrent Chunk Management Engine (Threading/WorldGen) 0.2.0+alpha.11.109+1.21             com_electronwill_night-config_core: core 3.6.5             com_electronwill_night-config_toml: toml 3.6.5             com_ibm_async_asyncutil: asyncutil 0.1.0             net_objecthunter_exp4j: exp4j 0.4.8             org_threadly_threadly: threadly 7.0         capes: Capes 1.5.4+1.21         cicada: CICADA 0.8.3+1.21-and-above         cloth-config: Cloth Config v15 15.0.128             cloth-basic-math: cloth-basic-math 0.6.1         clumps: Clumps 18.0.0.2         dynamic_fps: Dynamic FPS 3.6.3             net_lostluma_battery: battery 1.1.0         ears: Ears 1.4.6         enhancedblockentities: Enhanced Block Entities 0.10.1+1.21         entity_texture_features: Entity Texture Features 6.1.3             org_apache_httpcomponents_httpmime: httpmime 4.5.10         entityculling: EntityCulling 1.6.6         explosiveenhancement: Explosive Enhancement 1.2.3-1.21.0         fabric-api: Fabric API 0.102.0+1.21             fabric-api-lookup-api-v1: Fabric API Lookup API (v1) 1.6.68+b5597344d1             fabric-biome-api-v1: Fabric Biome API (v1) 13.0.29+5bd9f1bcd1             fabric-block-api-v1: Fabric Block API (v1) 1.0.22+0af3f5a7d1             fabric-block-view-api-v2: Fabric BlockView API (v2) 1.0.10+6573ed8cd1             fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.52+0af3f5a7d1             fabric-client-tags-api-v1: Fabric Client Tags 1.1.15+6573ed8cd1             fabric-command-api-v1: Fabric Command API (v1) 1.2.49+f71b366fd1             fabric-command-api-v2: Fabric Command API (v2) 2.2.28+6ced4dd9d1             fabric-commands-v0: Fabric Commands (v0) 0.2.66+df3654b3d1             fabric-content-registries-v0: Fabric Content Registries (v0) 8.0.16+b5597344d1             fabric-convention-tags-v1: Fabric Convention Tags 2.0.19+7f945d5bd1             fabric-convention-tags-v2: Fabric Convention Tags (v2) 2.5.0+c5e2b5c6d1             fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.2.29+0af3f5a7d1             fabric-data-attachment-api-v1: Fabric Data Attachment API (v1) 1.1.27+6a6dfa19d1             fabric-data-generation-api-v1: Fabric Data Generation API (v1) 20.2.16+16c4ae25d1             fabric-dimensions-v1: Fabric Dimensions API (v1) 4.0.0+6fc22b99d1             fabric-entity-events-v1: Fabric Entity Events (v1) 1.6.12+6fc22b99d1             fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.7.12+ba9dae06d1             fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.53+6ced4dd9d1             fabric-item-api-v1: Fabric Item API (v1) 11.0.0+afdfc921d1             fabric-item-group-api-v1: Fabric Item Group API (v1) 4.1.4+78017270d1             fabric-key-binding-api-v1: Fabric Key Binding API (v1) 1.0.47+0af3f5a7d1             fabric-keybindings-v0: Fabric Key Bindings (v0) 0.2.45+df3654b3d1             fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 2.3.12+6c1df360d1             fabric-loot-api-v2: Fabric Loot API (v2) 3.0.14+3f89f5a5d1             fabric-loot-api-v3: Fabric Loot API (v3) 1.0.2+3f89f5a5d1             fabric-message-api-v1: Fabric Message API (v1) 6.0.13+6573ed8cd1             fabric-model-loading-api-v1: Fabric Model Loading API (v1) 2.0.0+fe474d6bd1             fabric-networking-api-v1: Fabric Networking API (v1) 4.2.2+60c3209bd1             fabric-object-builder-api-v1: Fabric Object Builder API (v1) 15.2.0+a551f7a4d1             fabric-particles-v1: Fabric Particles (v1) 4.0.2+6573ed8cd1             fabric-recipe-api-v1: Fabric Recipe API (v1) 5.0.12+65089712d1             fabric-registry-sync-v0: Fabric Registry Sync (v0) 5.1.2+60c3209bd1             fabric-renderer-api-v1: Fabric Renderer API (v1) 3.4.0+c705a49cd1             fabric-renderer-indigo: Fabric Renderer - Indigo 1.7.0+c705a49cd1             fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 3.2.68+df3654b3d1             fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.3.48+73761d2ed1             fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 3.1.6+b5597344d1             fabric-rendering-v0: Fabric Rendering (v0) 1.1.71+df3654b3d1             fabric-rendering-v1: Fabric Rendering (v1) 5.0.5+df16efd0d1             fabric-resource-conditions-api-v1: Fabric Resource Conditions API (v1) 4.3.0+8dc279b1d1             fabric-resource-loader-v0: Fabric Resource Loader (v0) 1.3.0+56599129d1             fabric-screen-api-v1: Fabric Screen API (v1) 2.0.24+b5597344d1             fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.3.86+b5597344d1             fabric-sound-api-v1: Fabric Sound API (v1) 1.0.23+6573ed8cd1             fabric-transfer-api-v1: Fabric Transfer API (v1) 5.1.16+3dccd343d1             fabric-transitive-access-wideners-v1: Fabric Transitive Access Wideners (v1) 6.1.0+176f9036d1         fabric-language-kotlin: Fabric Language Kotlin 1.12.0+kotlin.2.0.10             org_jetbrains_kotlin_kotlin-reflect: kotlin-reflect 2.0.10             org_jetbrains_kotlin_kotlin-stdlib: kotlin-stdlib 2.0.10             org_jetbrains_kotlin_kotlin-stdlib-jdk7: kotlin-stdlib-jdk7 2.0.10             org_jetbrains_kotlin_kotlin-stdlib-jdk8: kotlin-stdlib-jdk8 2.0.10             org_jetbrains_kotlinx_atomicfu-jvm: atomicfu-jvm 0.25.0             org_jetbrains_kotlinx_kotlinx-coroutines-core-jvm: kotlinx-coroutines-core-jvm 1.8.1             org_jetbrains_kotlinx_kotlinx-coroutines-jdk8: kotlinx-coroutines-jdk8 1.8.1             org_jetbrains_kotlinx_kotlinx-datetime-jvm: kotlinx-datetime-jvm 0.6.0             org_jetbrains_kotlinx_kotlinx-io-bytestring-jvm: kotlinx-io-bytestring-jvm 0.5.1             org_jetbrains_kotlinx_kotlinx-io-core-jvm: kotlinx-io-core-jvm 0.5.1             org_jetbrains_kotlinx_kotlinx-serialization-cbor-jvm: kotlinx-serialization-cbor-jvm 1.7.1             org_jetbrains_kotlinx_kotlinx-serialization-core-jvm: kotlinx-serialization-core-jvm 1.7.1             org_jetbrains_kotlinx_kotlinx-serialization-json-jvm: kotlinx-serialization-json-jvm 1.7.1         fabricloader: Fabric Loader 0.16.5             mixinextras: MixinExtras 0.4.1         fallingleaves: Falling Leaves 1.16.2         ferritecore: FerriteCore 7.0.0         forcecloseworldloadingscreen: kennytv's epic force close loading screen mod for Fabric 2.2.2         immediatelyfast: ImmediatelyFast 1.2.20+1.21.1             net_lenni0451_reflect: Reflect 1.3.4         indium: Indium 1.0.34+mc1.21         iris: Iris 1.7.3+mc1.21             io_github_douira_glsl-transformer: glsl-transformer 2.0.1             org_anarres_jcpp: jcpp 1.4.14             org_antlr_antlr4-runtime: antlr4-runtime 4.13.1         java: OpenJDK 64-Bit Server VM 21         ksyxis: Ksyxis 1.3.2         lithium: Lithium 0.12.7         minecraft: Minecraft 1.21         modernfix: ModernFix 5.19.1+mc1.21         modmenu: Mod Menu 11.0.1         nvidium: Nvidium 0.2.9-beta         obsidianui: ObsidianUI 0.2.7+mc1.21         placeholder-api: Placeholder API 2.4.1+1.21         plasmovoice: Plasmo Voice 2.0.10             aopalliance_aopalliance: aopalliance 1.0             com_google_inject_guice: guice 5.0.1             javax_inject_javax_inject: javax.inject 1         reeses-sodium-options: Reese's Sodium Options 1.7.3+mc1.21         rrls: Remove Reloading Screen 5.0.7+mc1.21-fabric         ryoamiclights: RyoamicLights 0.2.9+mc1.21         showmeyourskin: Show Me Your Skin! 1.11.3+1.21             cardinal-components-base: Cardinal Components API (base) 6.1.0             cardinal-components-entity: Cardinal Components API (entities) 6.1.0         skinlayers3d: 3d-Skin-Layers 1.6.7         sodium: Sodium 0.5.11+mc1.21         sodium-extra: Sodium Extra 0.5.7+mc1.21             caffeineconfig: CaffeineConfig 1.3.0+1.17         spark: spark 1.10.73             fabric-permissions-api-v0: fabric-permissions-api 0.3.1         symbol-chat: Symbol Chat 1.21-1.2.7         vmp: Very Many Players 0.2.0+beta.7.163+1.21         voicechat: Simple Voice Chat 1.21.1-2.5.22         wakes: Wakes 0.3.0+1.21.1             blue_endless_jankson: jankson 1.2.2             com_github_jdiemke_delaunay-triangulator_delaunaytriangulator: DelaunayTriangulator 1.0.0             satin: Satin 2.0.0         xaerominimap: Xaero's Minimap 24.4.0         yet_another_config_lib_v3: YetAnotherConfigLib 3.5.0+1.21-fabric             com_twelvemonkeys_common_common-image: common-image 3.10.0             com_twelvemonkeys_common_common-io: common-io 3.10.0             com_twelvemonkeys_common_common-lang: common-lang 3.10.0             com_twelvemonkeys_imageio_imageio-core: imageio-core 3.10.0             com_twelvemonkeys_imageio_imageio-metadata: imageio-metadata 3.10.0             com_twelvemonkeys_imageio_imageio-webp: imageio-webp 3.10.0             org_quiltmc_parsers_gson: gson 0.2.1             org_quiltmc_parsers_json: json 0.2.1         zoomify: Zoomify 2.14.0+1.21             com_akuleshov7_ktoml-core-jvm: ktoml-core-jvm 0.5.1     Loaded Shaderpack: (off)     Launched Version: fabric-loader-0.16.5-1.21     Launcher name: minecraft-launcher     Backend library: LWJGL version 3.3.3-snapshot     Backend API: AMD Radeon(TM) Graphics GL version 3.2.0 Core Profile Context 22.20.44.221025, ATI Technologies Inc.     Window size: 854x480     GFLW Platform: win32     GL Caps: Using framebuffer using OpenGL 3.2     GL debug messages:      Is Modded: Definitely; Client brand changed to 'fabric'     Universe: 400921fb54442d18     Type: Client (map_client.txt)     Graphics mode: fast     Render Distance: 9/9 chunks     Resource Packs: vanilla, fabric, betterf3, betterthirdperson, boatiview (incompatible), bobby, c2me, caffeineconfig, capes, cardinal-components-base, cardinal-components-entity, cicada, cloth-config, dynamic_fps, ears, enhancedblockentities, entity_texture_features, entityculling, explosiveenhancement, fabric-api, fabric-api-base, fabric-api-lookup-api-v1, fabric-biome-api-v1, fabric-block-api-v1, fabric-block-view-api-v2, fabric-blockrenderlayer-v1, fabric-client-tags-api-v1, fabric-command-api-v1, fabric-command-api-v2, fabric-commands-v0, fabric-content-registries-v0, fabric-convention-tags-v1, fabric-convention-tags-v2, fabric-crash-report-info-v1, fabric-data-attachment-api-v1, fabric-data-generation-api-v1, fabric-dimensions-v1, fabric-entity-events-v1, fabric-events-interaction-v0, fabric-game-rule-api-v1, fabric-item-api-v1, fabric-item-group-api-v1, fabric-key-binding-api-v1, fabric-keybindings-v0, fabric-language-kotlin, fabric-lifecycle-events-v1, fabric-loot-api-v2, fabric-loot-api-v3, fabric-message-api-v1, fabric-model-loading-api-v1, fabric-networking-api-v1, fabric-object-builder-api-v1, fabric-particles-v1, fabric-recipe-api-v1, fabric-registry-sync-v0, fabric-renderer-api-v1, fabric-renderer-indigo, fabric-renderer-registries-v1, fabric-rendering-data-attachment-v1, fabric-rendering-fluids-v1, fabric-rendering-v0, fabric-rendering-v1, fabric-resource-conditions-api-v1, fabric-resource-loader-v0, fabric-screen-api-v1, fabric-screen-handler-api-v1, fabric-sound-api-v1, fabric-transfer-api-v1, fabric-transitive-access-wideners-v1, fabricloader, fallingleaves, forcecloseworldloadingscreen, immediatelyfast, indium, iris, lithium, modernfix (incompatible), modmenu, nvidium, obsidianui, placeholder-api, plasmovoice, reeses-sodium-options, rrls, ryoamiclights, satin, showmeyourskin, skinlayers3d, sodium, sodium-extra, spark (incompatible), symbol-chat, vmp, voicechat, wakes, xaerominimap (incompatible), yet_another_config_lib_v3 (incompatible), zoomify, file/iconsv.1.8 (1).zip (incompatible), file/No Pumpkin Blur 1.20-1.20.1.zip (incompatible), file/Default-Dark-Mode-1.20-2023.6.0.zip (incompatible), file/CalvinsSinisterSculk[1.20.4][v1.0].zip (incompatible)     Current Language: ru_ru     Locale: ru_RU     System encoding: Cp1251     File encoding: UTF-8     CPU: 4x AMD Ryzen 3 4300U with Radeon Graphics 
    • I have no idea - maybe a fabric mod, but just Connector is mentioned
  • Topics

×
×
  • Create New...

Important Information

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