ID предмета как у самого minecraft

Версия Minecraft
1.20.4
API
Fabric
18
0
Как мне сделать мод который будет помещать предмет на равне со всеми ванильными предметами, к примеру не вот так: "item.modid.raw_diamond" а вот так: "item.minecraft.raw_diamond". Для аналогии с другими тремя: "item.minecraft.raw_gold", "item.minecraft.raw_iron", "item.minecraft.raw_copper". Также привествую любую помощь в вопросе создании текстур для блоков и предметов рудного алмаза и изумруда а также их рудных блоков.
 
Решение
Ну вы б оба хоть проверили самую банальную вещь. Регистрация итемов, блоков и т.д. работает в fabric также, как и в ванилле.
Иначе говоря,
public static final Block HAHA_LOL = Registry.register(BuiltInRegistries.BLOCK, "lol", new Block(BlockBehaviour.Properties.of()));
Добавляет блок с id minecraft:lol. Проверить можете через setblock.
1,524
138
280
Ну вы б оба хоть проверили самую банальную вещь. Регистрация итемов, блоков и т.д. работает в fabric также, как и в ванилле.
Иначе говоря,
public static final Block HAHA_LOL = Registry.register(BuiltInRegistries.BLOCK, "lol", new Block(BlockBehaviour.Properties.of()));
Добавляет блок с id minecraft:lol. Проверить можете через setblock.
 
1,524
138
280
АХТУНГ, БЕБЕЗЯНА ЗА РАБОТОЙ! Поскольку IDE под fabric у меня с незавершённым портом моего мода из-под forge, я использую не yarn-маппинги, а mojang'овские, ибо я ленивейшая жопа, из-за чего названия некоторых классов, методов и т. д. могут отличаться! АХТУНГ ЗАКОНЧИЛСЯ!

Blocks:
public static final Block HAHA_LOL = Registry.register(BuiltInRegistries.BLOCK, "lol", new Block(BlockBehaviour.Properties.of()));

public static void init() {}
Главный класс мода:
    @Override
    public void onInitialize() {
        //...
        Blocks.init();
        //...
    }

1. Создание статической константы с блоком
2. Регистрация в ванилльный Registry (BuiltInRegistry / Registries) блока new Block(...) с id "minecraft:lol" (поскольку namespace явно не указан, используется ванилльный - minecraft)
3. Создать статический метод init, чтобы инициализация статических полей проводилась адекватно (об этом написано в доках фабрик, насколько нужно - хз, вроде с блоками и предметами и без этого работает).

У меня не работает,
Что конкретно не работает, крашит, в консоли спамит, красным подсвечивает или ещё что?
 
18
0
ModBlocks:
    public static void register(){}
    public static final Block HAHA_LOL = Registry.register(Registries.BLOCK, "lol", new Block(FabricBlockSettings.copyOf(AbstractBlock.Settings.copy(Blocks.STONE))));
Класс мода:
@Override
    public void onInitialize() {
        ModBlocks.register();
    }

Сделал что-то подобное и вроде работает. Если прописать команду /setblock ~ ~ ~ minecraft:lol
спавнится нужный тебе блок с нужным айди правда без текстуры
 
18
0
На вики конечно сложно понять что на что надо заменить своими предметами, но у меня вроде бы вышло как я хотел, благодаря этому коду
Java:
    @Override
    public void onInitialize() {

        ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS)
                .register(content -> { content.addAfter(Items.RAW_GOLD, ModItems.RAW_DIAMOND);});
Screenshot_3541.png
 
18
0
Не уверен, что прям так (после n-го предмета) можно было бы без миксинов, но в доках наверняка что-то да есть на эту тему.
Можете помочь, чтобы блок также был в виде предмета в инвентаре. Через доки не получается
 
1,524
138
280
Добавляй как обычный предмет, но при регистрации передавай BlockItem(Block, Item.Properties) вместо Item(Item.Properties).

Рекомендую сразу сделать метод, который делает все эти действия разом (помним про АХТУНГ выше):

Пример из моего кода:
//У меня тут немного лишнего, под свои нужды.
/*
name - id блока
block - непосредственно блок
props - свойства блока-предмета (в инвентаре)
desc - строки описания
foil - эффект зачарования
*/
public static Block createBlock(String name, Supplier<Block> block, @Nullable Item.Properties props,
                                                    @Nullable List<Component> desc, boolean foil) {
        //Регистрация блока
        Block register = Registry.register(BuiltInRegistries.BLOCK, new ResourceLocation(WizzMod.MODID, name), block.get());
        //Регистрация предмета. Если не назначен свой Item.Properties, делаем заглушку
        //final необходим, т.к. регистрация проходит только для неизменяемых значений
        //Здесь его можно было опустить, т.к. нигде дальше он не меняет, но я оставил, дабы случайно нигде ничего не сломать потом
        final Item.Properties properties = props != null ? props : new Item.Properties();
      
        //Регаем предмет
        //Использую lambda, поскольку мне лень переделывать кучу других итемов
        Items.createItem(name, () -> new BlockItem(register, properties) {
            //Для добавления описания блоку в инвентаре
            @Override
            public void appendHoverText(ItemStack stack, @Nullable Level level,
                                        List<Component> list, TooltipFlag flag) {
                if(desc != null)
                    list.addAll(desc);
                super.appendHoverText(stack, level, list, flag);
            }
          
            //По угару хотел посмотреть как выглядит. Понравилось. Оставил.
            @Override
            public boolean isFoil(ItemStack stack) {
                return foil;
            }
        });
      
        //Возвращаем блок
        return register;
    }


//Пример использования
public static final Block LOL = createBlock("lol", () -> new Block(BlockBehavior.Properties.of()),
                                           null, null, true);
 
18
0
Добавляй как обычный предмет, но при регистрации передавай BlockItem(Block, Item.Properties) вместо Item(Item.Properties).

Рекомендую сразу сделать метод, который делает все эти действия разом (помним про АХТУНГ выше):

Пример из моего кода:
//У меня тут немного лишнего, под свои нужды.
/*
name - id блока
block - непосредственно блок
props - свойства блока-предмета (в инвентаре)
desc - строки описания
foil - эффект зачарования
*/
public static Block createBlock(String name, Supplier<Block> block, @Nullable Item.Properties props,
                                                    @Nullable List<Component> desc, boolean foil) {
        //Регистрация блока
        Block register = Registry.register(BuiltInRegistries.BLOCK, new ResourceLocation(WizzMod.MODID, name), block.get());
        //Регистрация предмета. Если не назначен свой Item.Properties, делаем заглушку
        //final необходим, т.к. регистрация проходит только для неизменяемых значений
        //Здесь его можно было опустить, т.к. нигде дальше он не меняет, но я оставил, дабы случайно нигде ничего не сломать потом
        final Item.Properties properties = props != null ? props : new Item.Properties();
     
        //Регаем предмет
        //Использую lambda, поскольку мне лень переделывать кучу других итемов
        Items.createItem(name, () -> new BlockItem(register, properties) {
            //Для добавления описания блоку в инвентаре
            @Override
            public void appendHoverText(ItemStack stack, @Nullable Level level,
                                        List<Component> list, TooltipFlag flag) {
                if(desc != null)
                    list.addAll(desc);
                super.appendHoverText(stack, level, list, flag);
            }
         
            //По угару хотел посмотреть как выглядит. Понравилось. Оставил.
            @Override
            public boolean isFoil(ItemStack stack) {
                return foil;
            }
        });
     
        //Возвращаем блок
        return register;
    }


//Пример использования
public static final Block LOL = createBlock("lol", () -> new Block(BlockBehavior.Properties.of()),
                                           null, null, true);
Screenshot_3542.png
Я пытаюсь сделать что-то подобное но ничего не выходитScreenshot_3543.png
 
18
0
Добавляй как обычный предмет, но при регистрации передавай BlockItem(Block, Item.Properties) вместо Item(Item.Properties).

Рекомендую сразу сделать метод, который делает все эти действия разом (помним про АХТУНГ выше):

Пример из моего кода:
//У меня тут немного лишнего, под свои нужды.
/*
name - id блока
block - непосредственно блок
props - свойства блока-предмета (в инвентаре)
desc - строки описания
foil - эффект зачарования
*/
public static Block createBlock(String name, Supplier<Block> block, @Nullable Item.Properties props,
                                                    @Nullable List<Component> desc, boolean foil) {
        //Регистрация блока
        Block register = Registry.register(BuiltInRegistries.BLOCK, new ResourceLocation(WizzMod.MODID, name), block.get());
        //Регистрация предмета. Если не назначен свой Item.Properties, делаем заглушку
        //final необходим, т.к. регистрация проходит только для неизменяемых значений
        //Здесь его можно было опустить, т.к. нигде дальше он не меняет, но я оставил, дабы случайно нигде ничего не сломать потом
        final Item.Properties properties = props != null ? props : new Item.Properties();
     
        //Регаем предмет
        //Использую lambda, поскольку мне лень переделывать кучу других итемов
        Items.createItem(name, () -> new BlockItem(register, properties) {
            //Для добавления описания блоку в инвентаре
            @Override
            public void appendHoverText(ItemStack stack, @Nullable Level level,
                                        List<Component> list, TooltipFlag flag) {
                if(desc != null)
                    list.addAll(desc);
                super.appendHoverText(stack, level, list, flag);
            }
         
            //По угару хотел посмотреть как выглядит. Понравилось. Оставил.
            @Override
            public boolean isFoil(ItemStack stack) {
                return foil;
            }
        });
     
        //Возвращаем блок
        return register;
    }


//Пример использования
public static final Block LOL = createBlock("lol", () -> new Block(BlockBehavior.Properties.of()),
                                           null, null, true);
У меня к сожалению не получается, а по вашему коду ничего не понятно. Я все же хочу увидеть yarn вариант кода от вас
 
1,524
138
280
Сверху