(1.7.10) Аналог лампы из ванила

Версия Minecraft
1.7.10
Есть такая проблема... Лично мне не нравится лампа в ваниле , поэтому я решил сделать такой же блок, но с другой текстуркой. Я учусь всего неделю поэтому можно поподробнее пожалуйста.
Вот что я написал(и наделал наверное кучу ошибок). При запуске конечно вылетает.


В главном классе написано:

AdvancedLamp = new AdvancedLamp (Material.rock);
GameRegistry.registerBlock(AdvancedLamp,"AdvancedLamp");
 

Вложения

  • памагите.png
    памагите.png
    21.2 KB · Просмотры: 29
Решение
1) Ты в новый экземпляр передаешь Material, а нужно передавать boolean (отвечает за вкл\выкл обновление блока).
2) Наследоваться нужно от BlockRedstoneLight, а не от факела.

Но проще сделать так:
Java:
public class BlockAdvancedLamp extends Block
{
    private final boolean isEnable;

    public BlockRedstoneLight(boolean status)
    {
        super(Material.redstoneLight);
        this.isEnable = status;

        if (status)
        {
            this.setLightLevel(1.0F);
        }
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World world, int x, int y, int z)
    {
        if (!world.isRemote)
        {
            if (this.isEnable &&...
1,057
50
234
1) Ты в новый экземпляр передаешь Material, а нужно передавать boolean (отвечает за вкл\выкл обновление блока).
2) Наследоваться нужно от BlockRedstoneLight, а не от факела.

Но проще сделать так:
Java:
public class BlockAdvancedLamp extends Block
{
    private final boolean isEnable;

    public BlockRedstoneLight(boolean status)
    {
        super(Material.redstoneLight);
        this.isEnable = status;

        if (status)
        {
            this.setLightLevel(1.0F);
        }
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World world, int x, int y, int z)
    {
        if (!world.isRemote)
        {
            if (this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.scheduleBlockUpdate(x, y, z, this, 4);
            }
            else if (!this.isEnable && world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.setBlock(x, y, z, YOUR_ON_LAMP_BLOCK, 0, 2);
            }
        }
    }

    /**
     * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
     * their own) Args: x, y, z, neighbor Block
     */
    public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
    {
        if (!world.isRemote)
        {
            if (this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.scheduleBlockUpdate(x, y, z, this, 4);
            }
            else if (!this.isEnable && world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.setBlock(x, y, z, YOUR_ON_LAMP_BLOCK, 0, 2);
            }
        }
    }

    /**
     * Ticks the block if it's been scheduled
     */
    public void updateTick(World world, int x, int y, int z, Random rand)
    {
        if (!world.isRemote && this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
        {
            world.setBlock(x, y, z, YOUR_OFF_LAMP_BLOCK, 0, 2);
        }
    }

    public Item getItemDropped(int p_149650_1_, Random rand, int fortune)
    {
        return Item.getItemFromBlock(YOUR_OFF_LAMP_BLOCK);
    }

    /**
     * Gets an item for the block being called on. Args: world, x, y, z
     */
    @SideOnly(Side.CLIENT)
    public Item getItem(World world, int x, int y, int z)
    {
        return Item.getItemFromBlock(YOUR_OFF_LAMP_BLOCK);
    }

    /**
     * Returns an item stack containing a single instance of the current block type. 'i' is the block's subtype/damage
     * and is ignored for blocks which do not support subtypes. Blocks which cannot be harvested should return null.
     */
    protected ItemStack createStackedBlock(int p_149644_1_)
    {
        return new ItemStack(YOUR_OFF_LAMP_BLOCK);
    }
}
 
Последнее редактирование:
1) Ты в новый экземпляр передаешь Material, а нужно передавать boolean (отвечает за вкл\выкл обновление блока).
2) Наследоваться нужно от BlockRedstoneLight, а не от факела.

Но проще сделать так:
Java:
public class BlockAdvancedLamp extends Block
{
    private final boolean isEnable;

    public BlockRedstoneLight(boolean status)
    {
        super(Material.redstoneLight);
        this.isEnable = status;

        if (status)
        {
            this.setLightLevel(1.0F);
        }
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World world, int x, int y, int z)
    {
        if (!world.isRemote)
        {
            if (this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.scheduleBlockUpdate(x, y, z, this, 4);
            }
            else if (!this.isEnable && world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.setBlock(x, y, z, YOUR_ON_LAMP_BLOCK, 0, 2);
            }
        }
    }

    /**
     * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
     * their own) Args: x, y, z, neighbor Block
     */
    public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
    {
        if (!world.isRemote)
        {
            if (this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.scheduleBlockUpdate(x, y, z, this, 4);
            }
            else if (!this.isEnable && world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.setBlock(x, y, z, YOUR_ON_LAMP_BLOCK, 0, 2);
            }
        }
    }

    /**
     * Ticks the block if it's been scheduled
     */
    public void updateTick(World world, int x, int y, int z, Random rand)
    {
        if (!world.isRemote && this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
        {
            world.setBlock(x, y, z, YOUR_OFF_LAMP_BLOCK, 0, 2);
        }
    }

    public Item getItemDropped(int p_149650_1_, Random rand, int fortune)
    {
        return Item.getItemFromBlock(YOUR_OFF_LAMP_BLOCK);
    }

    /**
     * Gets an item for the block being called on. Args: world, x, y, z
     */
    @SideOnly(Side.CLIENT)
    public Item getItem(World world, int x, int y, int z)
    {
        return Item.getItemFromBlock(YOUR_OFF_LAMP_BLOCK);
    }

    /**
     * Returns an item stack containing a single instance of the current block type. 'i' is the block's subtype/damage
     * and is ignored for blocks which do not support subtypes. Blocks which cannot be harvested should return null.
     */
    protected ItemStack createStackedBlock(int p_149644_1_)
    {
        return new ItemStack(YOUR_OFF_LAMP_BLOCK);
    }
}




Код:
public class BlockAdvancedLamp extends Block {

    private boolean isEnable;

    public void BlockRedstoneLight(boolean status){

      

}
protected BlockAdvancedLamp(Material glass) {
    super(glass);
    this.setCreativeTab(HardmineModMain.Hardmine);
    this.setBlockName("advancedLamp");
    this.setBlockTextureName("offlamp");
    this.setHardness(2F);
    this.setResistance(5F);
  
}
    public void onBlockAdded(World world, int x, int y, int z)
    {
        if (!world.isRemote)
        {
            if (this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.scheduleBlockUpdate(x, y, z, this, 4);
            }
            else if (!this.isEnable && world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.setBlock(x, y, z, HardmineModMain.onlamp, 0, 2);
            }
        }
    }
    public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
    {
        if (!world.isRemote)
        {
            if (this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.scheduleBlockUpdate(x, y, z, this, 4);
            }
            else if (!this.isEnable && world.isBlockIndirectlyGettingPowered(x, y, z))
            {
                world.setBlock(x, y, z, HardmineModMain.onlamp, 0, 2);
            }
        }
    }
    public void updateTick(World world, int x, int y, int z, Random rand)
    {
        if (!world.isRemote && this.isEnable && !world.isBlockIndirectlyGettingPowered(x, y, z))
        {
            world.setBlock(x, y, z, HardmineModMain.BlockAdvancedLamp, 0, 2);
        }
    }
    public Item getItemDropped(int p_149650_1_, Random rand, int fortune)
    {
        return Item.getItemFromBlock(HardmineModMain.BlockAdvancedLamp);
    }

    @SideOnly(Side.CLIENT)
    public Item getItem(World world, int x, int y, int z)
    {
        return Item.getItemFromBlock(HardmineModMain.BlockAdvancedLamp);
    }
    protected ItemStack createStackedBlock(int p_149644_1_)
    {
        return new ItemStack(HardmineModMain.BlockAdvancedLamp);
    }
}

Вот что получилось, работает напополам. В включенной лампе прописал что даёт свет(когда его не было, он не светился, поэтому не знаю зачем это:
this.isEnable = status;

if (status)
{
this.setLightLevel(1.0F);
}
Когда включаешь блок-да он включается, но выключится то он не может- заменился на onlamp и всё, при выключении остаётся таким же(не меняется на BlockAdvancedLamp)

Я тупенький и чтобы больше не спрашивать, объясните, что да как работает(что за что отвечает).
 
Сверху