помогите с блоком [1.7.10]

есть блок :
Код:
package net.glider.src.blocks;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.BlockDirectional;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Direction;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class DoorBlock extends BlockMod {

    private boolean Active = false;
    

    public DoorBlock(String uln) {
        super(uln);
    }

    protected int getIS(World world, int x, int y, int z, int par5) {
        int i1 = BlockDirectional.getDirection(par5);
        int j1 = x + Direction.offsetX[i1];
        int k1 = z + Direction.offsetZ[i1];
        int l1 = world.getIndirectPowerLevelTo(j1, y, k1,
                Direction.directionToFacing[i1]);
        return l1 >= 15 ? l1 : Math.max(
                l1,
                world.getBlock(j1, y, k1) == Blocks.redstone_wire ? world
                        .getBlockMetadata(j1, y, k1) : 0);
    }

    public int getISA(World w, int x, int y, int z) {
        if (getIS(w, x, y, z, 1) >= 1) {
            return getIS(w, x, y, z, 1);
        } else if (getIS(w, x, y, z, 2) >= 1) {
            return getIS(w, x, y, z, 2);
        } else if (getIS(w, x, y, z, 3) >= 1) {
            return getIS(w, x, y, z, 3);
        } else if (getIS(w, x, y, z, 4) >= 1) {
            return getIS(w, x, y, z, 4);
        } else if (getIS(w, x, y, z, 5) >= 1) {
            return getIS(w, x, y, z, 5);
        } else if (getIS(w, x, y, z, 6) >= 1) {
            return getIS(w, x, y, z, 6);
        } else {
            return 0;
        }
    }
    
    
    private void spawnitem(Item item,World w,int x,int y,int z)
    {
Entity e = new Entity(w) {
            @Override
            protected void writeEntityToNBT(NBTTagCompound p_70014_1_) {}
            @Override
            protected void readEntityFromNBT(NBTTagCompound p_70037_1_) {}
            @Override
            protected void entityInit() {}
        };
        e.setPosition(x, y+1, z);
        e.dropItem(item, 11);
        e = null;
    }

    @Override
    public void onNeighborBlockChange(World w, int x, int y, int z, Block b) {
        if (getISA(w, x, y, z) >= 1) {
          
            
            if (Active != getISA(w, x, y, z) >= 1) {
            for (int i = 0; i != 3; i++) {
                for (int i2 = 1; i2 != 4; i2++) {

                    if (Active==false && w.getBlock(x + i2, y + i, z)==Blocks.air)
                    {
                       
                    }else{
                        spawnitem(w.getBlock(x + i2, y + i, z).getItem(w, x, y, z),w,x,y,z);
                    }
                //    System.out.println("placing block");
                    w.setBlock(x + i2, y + i, z, Blocks.stone);
                    }
                }
            }
           Active = true;
          } else if(getISA(w, x, y, z) ==0)  {

            if (Active != getISA(w, x, y, z) >= 1) {

                for (int i = 0; i != 3 ; i++) {

                    for (int o = 1; o != 4; o++) {
                    //System.out.println("deliting block");
                        w.setBlock(x + o, y + i, z, Blocks.air);
                    }
                }

                Active = false;
            }
        }
    }

    @Override
    public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z,
            int side) {

        return true;

    }

}
он ставит дверь и убирает ее по сигналу редстоуна.
однако я пытался реализовать функцию возврашения удаленных блоков , частично получилось но даже когда ничего нет при установке блок выкидывает кучу камня(материал двери).
может кто-нибудь помочь ?
 
Нифига себе, я до такого бы никогда не додумался =)
Код:
private void spawnitem(Item item,World w,int x,int y,int z)
    {
Entity e = new Entity(w) {
            @Override
            protected void writeEntityToNBT(NBTTagCompound p_70014_1_) {}
            @Override
            protected void readEntityFromNBT(NBTTagCompound p_70037_1_) {}
            @Override
            protected void entityInit() {}
        };
        e.setPosition(x, y+1, z);
        e.dropItem(item, 11);
        e = null;
    }
Можно же просто world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(item)));
 
Agravaine написал(а):
Нифига себе, я до такого бы никогда не додумался =)
Код:
private void spawnitem(Item item,World w,int x,int y,int z)
    {
Entity e = new Entity(w) {
            @Override
            protected void writeEntityToNBT(NBTTagCompound p_70014_1_) {}
            @Override
            protected void readEntityFromNBT(NBTTagCompound p_70037_1_) {}
            @Override
            protected void entityInit() {}
        };
        e.setPosition(x, y+1, z);
        e.dropItem(item, 11);
        e = null;
    }
Можно же просто world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(item)));
это я методом "тыка"
заменив чудо на нормальный код выпадает нормальное количествою.
спс
 
Назад
Сверху