Версия Minecraft
1.7.10
API
Forge
Java:
package main.core.additional.common.block;

import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;

public class BResource extends Block
{
  
    public BResource(String BlockName, int BlockType, int Id)
    {
        if (Id == 0) {
        super(Material.anvil);
        setHardness(0.9F);//1.4
           setHarvestLevel("pickaxe", 0);
          setResistance(10.0F);
          setStepSound(soundTypeStone);
        setBlockName(BlockName);
        setBlockTextureName("bestadditional" + ":" + BlockType);
        setCreativeTab(CreativeTabs.tabBlock);
        }
        else if (Id == 1) {
            super(Material.wood);
            setHardness(0.9F);
               setHarvestLevel("axe", 0);
              setResistance(10.0F);
              setStepSound(soundTypeWood);
            setBlockName(BlockName);
            setBlockTextureName("bestadditional" + ":" + BlockType);
            setCreativeTab(CreativeTabs.tabBlock);
        }
    }
ВОПРОС: Почему так не работает? 1699526289752.png
В данном классе BResource хранятся свойства блоков.
В отдельном классе у меня регистрация и объявление 100+ блоков, одни из них твёрдые и помечены с ID 0 - для них должны использоваться свойства камня, другие - блоки дерева с ID = 1, для них должны выбираться свойства дерева. Но почему это так не работает? Как это записать по другому?






другой класс(ModBlocks), в котором хранятся имена и регистрация этих 100+ блоков, пример записи от туда. BResource(название, номер текстуры, айди камня или дерева)
1699526825123.png1699526940771.png
 
Решение
Нет. Часть из тех 100+ блоков будут BResourceWood, а часть BResourceStone, всего их так же и останется 100+, просто одни будут с одними параметрами, другие с другими.
Всё, до меня дошло, о чём ты хочешь сказать. Действительно, твоё решение будет лучше.


Поясню для автора темы.
Создавать блоки можно не только самими классами, но и их экземплярами. Что-то вроде:
Java:
public class ModBlocks {
    //Предположим, что ModBlock конструктор содержит в себе float hardness, Material material и string id.
    //Естественно, это всё можно спокойно расширить.
    final Block WOOD_A = new ModWoodBlock(0.9f, Material.WOOD, "wood_a");
    final Block WOOD_B = new ModWoodBlock(0.9f, Material.WOOD, "wood_b");
    final Block WOOD_C =...
1,383
115
244
А в чём проблема написать два класса, один BResourceWood и BResourceStone?

В отдельном классе у меня регистрация и объявление 100+ блоков
Число блоков умножиться на 2,3,4...n. И не забывай, что на 1.7.10 всё ещё используются числовые id (наравне с именными), из-за чего могут возникнуть конфликты в больших сборках.
 
из-за чего могут возникнуть конфликты в больших сборках.
Уже давно существуют моды исправляющие это.
Число блоков умножиться на 2,3,4...n
Нет. Часть из тех 100+ блоков будут BResourceWood, а часть BResourceStone, всего их так же и останется 100+, просто одни будут с одними параметрами, другие с другими.
 
1,383
115
244
Нет. Часть из тех 100+ блоков будут BResourceWood, а часть BResourceStone, всего их так же и останется 100+, просто одни будут с одними параметрами, другие с другими.
Всё, до меня дошло, о чём ты хочешь сказать. Действительно, твоё решение будет лучше.


Поясню для автора темы.
Создавать блоки можно не только самими классами, но и их экземплярами. Что-то вроде:
Java:
public class ModBlocks {
    //Предположим, что ModBlock конструктор содержит в себе float hardness, Material material и string id.
    //Естественно, это всё можно спокойно расширить.
    final Block WOOD_A = new ModWoodBlock(0.9f, Material.WOOD, "wood_a");
    final Block WOOD_B = new ModWoodBlock(0.9f, Material.WOOD, "wood_b");
    final Block WOOD_C = new ModWoodBlock(0.9f, Material.WOOD, "wood_c");

    final Block STONE_A = new ModStoneBlock(0.9f, Material.STONE, "stone_a");
    final Block STONE_B = new ModStoneBlock(0.9f, Material.STONE, "stone_b");
    final Block STONE_С = new ModStoneBlock(0.9f, Material.STONE, "stone_с") {
        @Override
        public ItemStack onUse(...) {...}
    }; //Если вдруг захочется реализовать ПКМ по блоку
    
    public static void registerBlocks() {
        GameRegistry.register(...);
    }
}
(Писал без IDE, могут быть ошибки. Код может не работать для 1.7.10, ибо писал по памяти. Тем не менее, решение, в общем виде, должно работать)

Тогда тебе не понадобится отдельный класс для каждого отдельного блока/типа блока. Но стоит отметить, что для TileEntity такое уже неактуально, как и для Entity и пр. Использовать подобное решение можно только для блоков и предметов, мб ещё и вкладок креатива.
 
Сверху