Проблемы связанные с незнанием структуры Minecraft ): 1.7.10

В общем, решил сделать хитровыделанный костер, который был бы как блок, но одновременно и энтити. Код следующий, можете наблюдать ниже. С ним возникли проблемы.

EntityFireplace - в этом классе ругается на ... как это решить? Сам класс ниже.

Код:
if(super.worldObj.getBlock(this.blockX, this.blockY, this.blockZ) == LDItems.fireplace) {
    ((BlockLightTile)super.worldObj.getTileEntity(this.blockX, this.blockY, this.blockZ)).timer = 0;
} else {
    super.worldObj.setBlock(this.blockX, this.blockY, this.blockZ, LDItems.fireplace);
}



Код:
public class EntityFireplace extends Entity {

    public boolean isFire;
    int fireTime;
    public int blockX;
    public int blockY;
    public int blockZ;


    public EntityFireplace(World w) {
        super(w);
        this.isFire = false;
        this.fireTime = 0;
        this.setSize(2.0F, 0.4F);
    }

    public EntityFireplace(World w, double X, double Y, double Z, float rotation) {
        this(w);
        this.setPositionAndRotation(X, Y, Z, rotation, 0.0F);
    }

    protected void entityInit() {}

    protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
        this.isFire = nbttagcompound.getBoolean("isFire");
        this.fireTime = nbttagcompound.getInteger("fireTime");
        this.blockX = nbttagcompound.getInteger("bX");
        this.blockY = nbttagcompound.getInteger("bY");
        this.blockZ = nbttagcompound.getInteger("bZ");
    }

    protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
        nbttagcompound.setBoolean("isFire", this.isFire);
        nbttagcompound.setInteger("fireTime", this.fireTime);
        nbttagcompound.setInteger("bX", this.blockX);
        nbttagcompound.setInteger("bY", this.blockY);
        nbttagcompound.setInteger("bZ", this.blockZ);
    }

    public AxisAlignedBB getBoundingBox() {
        return super.boundingBox;
    }

    public boolean interactFirst(EntityPlayer p) {
        if(!super.worldObj.isRemote && p.getCurrentEquippedItem() != null) {
            ItemStack is = p.getCurrentEquippedItem();
            /*if(!this.isFire && is.itemID == Item.flintAndSteel.itemID) {
                this.isFire = true;
                super.worldObj.playSoundAtEntity(this, "fire.ignite", 1.0F, 1.8F);
                p.getCurrentEquippedItem().damageItem(1, p);
                return true;
            }

            EntityItem rnd;
            if(this.isFire && is.itemID == Item.porkRaw.itemID) {
                --is.stackSize;
                rnd = p.dropPlayerItem(new ItemStack(Item.porkCooked));
                rnd.delayBeforeCanPickup = 0;
                return true;
            }

            if(this.isFire && is.itemID == Item.beefRaw.itemID) {
                --is.stackSize;
                rnd = p.dropPlayerItem(new ItemStack(Item.beefCooked));
                rnd.delayBeforeCanPickup = 0;
                return true;
            }

            if(this.isFire && is.itemID == Item.chickenRaw.itemID) {
                --is.stackSize;
                rnd = p.dropPlayerItem(new ItemStack(Item.chickenCooked));
                rnd.delayBeforeCanPickup = 0;
                return true;
            }

            if(this.isFire && is.itemID == Item.fishRaw.itemID) {
                --is.stackSize;
                rnd = p.dropPlayerItem(new ItemStack(Item.fishCooked));
                rnd.delayBeforeCanPickup = 0;
                return true;
            }*/
        }

        return false;
    }

    public boolean canBeCollidedWith() {
        return !super.isDead;
    }

    public void onUpdate() {
        if(!super.worldObj.isRemote && this.isFire) {
            if(++this.fireTime > '\ubb80') {
                this.setDead();
            }

            if(super.worldObj.getBlock(this.blockX, this.blockY, this.blockZ) == LDItems.fireplace) {
                ((BlockLightTile)super.worldObj.getTileEntity(this.blockX, this.blockY, this.blockZ)).timer = 0;
            } else {
                super.worldObj.setBlock(this.blockX, this.blockY, this.blockZ, LDItems.fireplace);
            }

        }
    }

Едем дальше. Класс итема.
ItemFireplace. Здесь ругается на w.getWorldVec3Pool(), w.rayTraceBlocks_do_do(vec3, vec31, false, true).
Сам класс:

Код:
public class ItemFireplace extends Item {

    public ItemFireplace() {
        this.setCreativeTab(CreativeTabs.tabRedstone);
        this.setMaxStackSize(1);
    }

    public ItemStack onItemRightClick(ItemStack is, World w, EntityPlayer p) {
        if(w.isRemote) {
            return is;
        } else {
            Vec3 vec3 = w.getWorldVec3Pool().getVecFromPool(p.posX, p.posY + (double)p.getEyeHeight(), p.posZ);
            Vec3 lookVec = p.getLookVec();
            Vec3 vec31 = w.getWorldVec3Pool().getVecFromPool(p.posX + lookVec.xCoord * 4.0D, p.posY + (double)p.getEyeHeight() + lookVec.yCoord * 4.0D, p.posZ + lookVec.zCoord * 4.0D);
            MovingObjectPosition b = w.rayTraceBlocks_do_do(vec3, vec31, false, true);
            if(b != null && b.sideHit == 1) {
                double posX = (double)((int)b.hitVec.xCoord) + (b.hitVec.xCoord > 0.0D?0.5D:-0.5D);
                double posZ = (double)((int)b.hitVec.zCoord) + (b.hitVec.zCoord > 0.0D?0.5D:-0.5D);
                EntityFireplace e = new EntityFireplace(w, posX, b.hitVec.yCoord, posZ, p.rotationYaw);
                if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlockId(b.blockX, b.blockY, b.blockZ) != 2) {
                    return is;
                }

                List list = w.getEntitiesWithinAABBExcludingEntity(p, e.boundingBox.expand(LDEngine.distanceBetweenFireplace, 10.0D, LDEngine.distanceBetweenFireplace));

                for(int l = 0; l < list.size(); ++l) {
                    if(list.get(l) instanceof EntityFireplace) {
                        return is;
                    }
                }

                e.blockX = b.blockX;
                e.blockY = b.blockY + 1;
                e.blockZ = b.blockZ;
                w.spawnEntityInWorld(e);
                --is.stackSize;
            }

            return is;
        }
    }

    public static void KosterClient(ItemStack is, World w, EntityPlayer p) {
        Vec3 vec3 = w.getWorldVec3Pool().getVecFromPool(p.posX, p.posY + (double)p.getEyeHeight(), p.posZ);
        Vec3 lookVec = p.getLookVec();
        Vec3 vec31 = w.getWorldVec3Pool().getVecFromPool(p.posX + lookVec.xCoord * 4.0D, p.posY + (double)p.getEyeHeight() + lookVec.yCoord * 4.0D, p.posZ + lookVec.zCoord * 4.0D);
        MovingObjectPosition b = w.rayTraceBlocks_do_do(vec3, vec31, false, true);
        if(b != null && b.sideHit == 1) {
            double posX = (double)((int)b.hitVec.xCoord) + (b.hitVec.xCoord > 0.0D?0.5D:-0.5D);
            double posZ = (double)((int)b.hitVec.zCoord) + (b.hitVec.zCoord > 0.0D?0.5D:-0.5D);
            EntityFireplaceClient e = null;
            List list = w.getEntitiesWithinAABBExcludingEntity(p, p.boundingBox.expand(12.0D, 6.0D, 12.0D));
            boolean flag = true;

            int l;
            for(l = 0; l < list.size(); ++l) {
                if(list.get(l) instanceof EntityFireplaceClient) {
                    e = (EntityFireplaceClient)list.get(l);
                    break;
                }
            }

            list = w.getEntitiesWithinAABBExcludingEntity(p, p.boundingBox.expand(LDEngine.distanceBetweenFireplace, 10.0D, LDEngine.distanceBetweenFireplace));

            for(l = 0; l < list.size(); ++l) {
                if(list.get(l) instanceof EntityFireplace) {
                    flag = false;
                    break;
                }
            }

            if(e != null) {
                e.age = 0;
                e.setPositionAndRotation(posX, b.hitVec.yCoord, posZ, p.rotationYaw, 0.0F);
                if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlockId(b.blockX, b.blockY, b.blockZ) != 2) {
                    e.placeAllowed = false;
                    return;
                }

                e.placeAllowed = flag;
            } else {
                e = new EntityFireplaceClient(w, posX, b.hitVec.yCoord, posZ, p.rotationYaw);
                w.spawnEntityInWorld(e);
                if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlockId(b.blockX, b.blockY, b.blockZ) != 2) {
                    e.placeAllowed = false;
                    return;
                }

                e.placeAllowed = true;
            }
        }

    }

    /*@SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister reg) {
        super.itemIcon = reg.registerIcon("hcsmod:koster");
    }*/
}

Как решить данные проблемы? Задавайте ваши ответы. Буду очень благодарен вам!
 
Программирование без костылей - не программирование.
[merge_posts_bbcode]Добавлено: 05.10.2015 15:53:03[/merge_posts_bbcode]

Тогда как в данном случае сделать более оптимальный вариант?

[merge_posts_bbcode]Добавлено: 05.10.2015 15:55:37[/merge_posts_bbcode]

Частично вроде бы что-то поправил, но теперь еще вылезло и вот здесь геморроя..

Код:
if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlock(b.blockX, b.blockY, b.blockZ) != 2) {
    e.placeAllowed = false;
    return;
}

А именно ругается на w.getBlock(b.blockX, b.blockY, b.blockZ) != 2
 
Назад
Сверху