Текстуры блока

Версия Minecraft
1.12.2
Имею такой код:

RegistryEventHandler.java
Java:
package com.hekumok.testmod;

import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

@Mod.EventBusSubscriber
public class RegistryEventHandler {

    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().register(ModBlocks.TEST_BLOCK);

        TestMod.logger.info("Registered blocks");
    }

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().register(new ItemBlock(ModBlocks.TEST_BLOCK).setRegistryName(ModBlocks.TEST_BLOCK.getRegistryName()));

        TestMod.logger.info("Registered items");
    }

    @SubscribeEvent
    public static void registerModels(ModelRegistryEvent event) {
        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(ModBlocks.TEST_BLOCK), 0,
            new ModelResourceLocation(ModBlocks.TEST_BLOCK.getRegistryName(), "inventory"));

        TestMod.logger.info("Registered models");
    }
}

ModBlocks.java
Java:
package com.hekumok.testmod;

import net.minecraft.block.Block;

public class ModBlocks {
    public static Block TEST_BLOCK = new TestBlock("test_block");
}

TestBlock.java
Java:
package com.hekumok.testmod;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;

public class TestBlock extends Block  {
    public TestBlock(String name) {
        super(Material.ROCK);
        this.setRegistryName(name);
        this.setUnlocalizedName(name);
        this.setCreativeTab(CreativeTabs.REDSTONE);
    }
}

blockstates/test_block.json
JSON:
{
  "variants": {
    "normal": {
      "model": "testmod:test_block"
    }
  }
}

models/block/test_block.json
JSON:
{
  "parent": "block/cube_all",
  "textures": {
    "all": "testmod:blocks/test_block"
  }
}

models/item/test_block.json
JSON:
{
  "parent": "testmod:block/test_block"
}

Структура проекта:
1.jpg

Получаю ошибку:

[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: The following texture errors were found.
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: ==================================================
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: DOMAIN testmod
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: --------------------------------------------------
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: domain testmod is missing 1 texture
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: domain testmod has 1 location:
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: mod testmod resources at C:\Users\Hekumok\Downloads\TestMod\out\production\TestMod_main
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: -------------------------
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: The missing resources for domain testmod are:
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: textures/blocks/test_block.png
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: -------------------------
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: No other errors exist for domain testmod
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: ==================================================
[19:52:20] [main/ERROR] [FML.TEXTURE_ERRORS]: +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

Что не так?
 
@Maxik001 , а где здесь самописные костыли? Registries - Forge Documentation Тем более я уже говорил выше, что изначально и делал как написано в учебнике на этом сайте (используя прокси), но была та же самая ошибка, что и в первом сообщении. Это уже позже в поисках того, как ее исправить, я переписывал код, используя шину событий (кажется так это называется), но тем не менее ошибка так и осталась.
 
Вернись к истокам, как делал в начале. Это - убожество, которое выглядит по говнокодерски.
***
Проверь, нет ли в json файлах
1)Транслит-букв("c" и "c")
2) Больших букв
3) Иных знаков кроме маленьких букв\цифр\подчеркиваний
4) Проверь каждую строчку в json-файле

И еще. - Если у тебя в логе выдается ошибка что "не найдено чтото" - это уже означает, что в коде у тебя скорее всего все верно . Т.е, ничего переделывать не нужно было. В таких случаях сперва всегда ищи проблему в ресурсах мода
 
Последнее редактирование:
@Maxik001 , в документации forge по моей ссылке сказано: The recommended way to register things is through the RegistryEvents. Я все-таки думаю, что разработчикам forge виднее, как лучше пользоваться их "инструментом")
Проверил json файлы, названия папок, файлов - все верно, никаких лишних символов/транслитов.
Пробовал прописать другой путь до текстуры и кидал png в указанную папку, но тоже не помогает, остается та же ошибка, только выводит новый указанный путь.
Нашел также такой вариант решения проблемы - [1.7.10] [SOLVED] Textures not found | IntelliJ IDEA 15 - но тоже не помогло(
 
Это что за самописные костыли? разработчики Forge, что, просто так что ли делали удобные функции для регистрации?
Вообще не вижу с этим проблем. В документации форджа именно так всё и было описано, и на фордж форуме людям предлагали делать именно так. Не знаю всех плюсов-минусов, но от себя добавлю, что когда в моде только блоки и предметы этот способ очень удобен. Не нужно создавать прокси, и главный класс почище. Хотя читабельности это не добавляет.
-----------------------------
Извиняюсь, сразу недочитал, а там уже про это сказано.
-----------------------------
Регистрировать вот так вручную каждый раз Du wirst müde werden
Там есть метод registerAll. Если пораскинуть мозгами, может получится даже компактнее чем с прокси. Что помешает сделать вот так (в данном случае с предметами)
Java:
      Item[] items = ListItem.getItems();
        IForgeRegistry<Item> registry = event.getRegistry();
        for (Item item : items) {
            registry.register(item);
        }
 
Последнее редактирование:
Тоже не увидел эту часть сообщения
Регистрировать вот так вручную каждый раз Du wirst müde werden
Я только в данном случае регистрирую блок через register (потому что он у меня один), а вообще есть метод registerAll, как и сказал @Крокодил , (да и по ссылке, приведенной мною выше, описан этот метод) для регистрации сразу нескольких блоков/итемов. Вот, по-моему, хороший пример использования: [1.11.2] Is using RegistryEvent this way ok?
 
Оказалось, всё дело в самой png, заменил на другую - заработало. Подумал, что дело в том, что текстура "много" весит (~750Кб, а новая весила 4.5Кб), уменьшил ее размер до 16х16, стала весить 0.8Кб, но загружаться все равно не хочет. Не могу понять, что с ней не так - формат png, интересно, в чем с ней может быть проблема?
 
Разобрался, в чем дело, хотя это как-то странно, по-моему. Так вот, я создавал png так: создал файл test_block.png, открыл Paint, накалякал, сохранил посредством Ctrl+S. И хотя редакторы и обычные средства просмотра фото открывают такой png нормально, грузиться как текстура в моде такой png почему-то не хочет. После того, как открыл ее в Paint и сделал "Сохранить как..."->"PNG", она стала грузиться нормально.
 
Последнее редактирование:
О как, эклипс не умеет различать тип контейнера(не имеет отношения к java) и расширение файла. У тебя был jpeg или bmp с .png расширением... Хотя странно, любой графический редактор/просмоторщик (очевидно кроме paint), должен был об этом сообщить.
 
Последнее редактирование:
Это что за самописные костыли? разработчики Forge, что, просто так что ли делали удобные функции для регистрации?
Господи... Какие нахер костыли? Ты зайди в любой популярный мод, везде регистрируют именно так.
Умным хочешь показаться?

Повесив на класс @Mod.EventBusSubscriber ты автоматически определяешь все методы этого класса в эвенты но это не точно
А может ты исходники посмотришь? Он считает ивент как и раньше - если есть аннотация. Только теперь нужно делать методы статическими.
Опять же, все популярные моды делают именно так и никаких проблем. Да даже сам фордж свои ивенты так регает.
 
мне насрать как делают везде. Я говорю свою точку зрения и как я делаю. Это - говнокодерские костыли, я считаю.
А может ты исходники посмотришь? Он считает ивент как и раньше - если есть аннотация. Только теперь нужно делать методы статическими.
Какой в ней прикол тогда?
 
мне насрать как делают везде. Я говорю свою точку зрения и как я делаю. Это - говнокодерские костыли, я считаю.
Ты не самый умный. И если хочешь выразить свою точку зрения - напиши нормально, а не обвиняй всех что они пишут "говнокод". Или ты считаешь, что разрабы форджа и другие топовые мододелы делают неправильно?
Какой в ней прикол тогда?
Чтобы ты, родной, не регал ивенты ручками через MinecraftForge.EVENT_BUS.register(...).
 
Назад
Сверху