- 40
- 1
- 7
Всем добра!
Делаю предмет по учебнику, но оно не работает. Модель не отображается, текстура не накладывается. Помогите решить.
Использую idea 2024.3.1.1 (Community Edition)
В настройках Gradle Project выставлял "Build and Runs using" -> idea (фикс idea)
В build.gradle писал:
Ничего пока не помогло 
При запуске игры после стадии инициализации создаются следующие ошибки:

Я также пробовал использовать стандартные текстуры, к примеру:
Это тоже не работает..
Структура проекта:

Полный build.gradle:
текстуру которую использую (просто рандомную взял):

Делаю предмет по учебнику, но оно не работает. Модель не отображается, текстура не накладывается. Помогите решить.
Использую idea 2024.3.1.1 (Community Edition)
В настройках Gradle Project выставлял "Build and Runs using" -> idea (фикс idea)
В build.gradle писал:
build.gradle:
apply plugin: 'idea'
idea.module.inheritOutputDirs = true
При запуске игры после стадии инициализации создаются следующие ошибки:

MoringTechMod.java:
package moringtech;
import moringtech.api.Values;
import moringtech.common.CommonProxy;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@Mod(
modid = Values.MODID,
name = Values.NAME,
acceptedMinecraftVersions = Values.MINECRAFT_VERSION,
version = Values.VERSION
)
public class MoringTechMod {
@Mod.Instance(Values.MODID)
public static MoringTechMod instance;
@SidedProxy(
modId = Values.MODID,
clientSide = Values.CLIENT_PROXY,
serverSide = Values.COMMON_PROXT
)
public static CommonProxy proxy;
@Mod.EventHandler
public static void onPreInit(FMLPreInitializationEvent event) {
// Регистрация блоков и предметов
// Регистрация Tile Entity
// Регистрация сущностей
// Присвоение имен в Ore Dictionary
proxy.onPreInit(event);
};
@Mod.EventHandler
public static void onInit(FMLInitializationEvent event) {
// Регистрация генераторов структур
// Регистрация рецептов
// Регистрация обработчиков действий
proxy.onInit(event);
};
@Mod.EventHandler
public static void onPostInit(FMLPostInitializationEvent event) {
// Действия связанные с другими модами
proxy.onPostInit(event);
};
}
ClientProxy.java:
package moringtech.common;
import moringtech.common.items.ItemsRegistry;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
public class ClientProxy extends CommonProxy {
@Override
public void onPreInit(FMLPreInitializationEvent event)
{
super.onPreInit(event);
}
@Override
public void onInit(FMLInitializationEvent event)
{
super.onInit(event);
}
@Override
public void onPostInit(FMLPostInitializationEvent event)
{
super.onPostInit(event);
}
}
ItemKey.java:
package moringtech.common.items;
import net.minecraft.item.Item;
public class ItemKey extends Item {
public ItemKey() {
this.setRegistryName("key");
this.setUnlocalizedName("key");
}
}
ItemRegistry.java:
package moringtech.common.items;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
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;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import moringtech.api.Values;
/*
* Указывает ModId для других ObjectHolder в классе
* Если не добавлять аннотацию над классом, то каждый раз придётся прописывать ModId вручную.
* Подробнее см. https://mcforge.readthedocs.io/en/latest/concepts/registries/#injecting-registry-values-into-fields
*/
@GameRegistry.ObjectHolder(Values.MODID)
@Mod.EventBusSubscriber// Автоматическая регистрация статичных обработчиков событий
public class ItemsRegistry {
/*
* Получение предмета по ключу. Вы также можете использовать данную аннотацию для получения ванильных предметов
* Если вы не добавляли аннотация над классом, то в таком случаи вам нужно прописать вместо [ICODE]key[/ICODE] -> [ICODE]tut:key[/ICODE]
*/
@GameRegistry.ObjectHolder("key")
public static final Item KEY = null;
/*
* Начиная с 1.12 регистрацию предметов/блоков/моделей и т.п. следует проводить в специальном событии.
* Событие Register<IForgeRegistryEntry> поддерживает регистрацию: Block, Item, Potion, Biome, SoundEvent,
* PotionType, Enchantment, IRecipe, VillagerProfession, EntityEntry.
* Обратите внимание! Метод является статичным, так как мы используем EventBusSubscriber
*/
@SubscribeEvent
public static void onRegistryItem(RegistryEvent.Register<Item> e) {
// Также вместо [ICODE]register[/ICODE] можно использовать [ICODE]registerAll[/ICODE], чтобы прописать все предметы разом
e.getRegistry().register(new ItemKey());
}
/*
* Начиная с 1.11 регистрацию моделей для предметов/блоков следует проводить в специальном событии.
* Обратите внимание! Метод является статичным, так как мы используем EventBusSubscriber
*/
@SubscribeEvent
@SideOnly(Side.CLIENT)
public static void onRegistryModel(ModelRegistryEvent e) {
ItemsRegistry.registryModel(KEY);
}
@SideOnly(Side.CLIENT)
public static void registryModel(Item item) {
final ResourceLocation regName = item.getRegistryName();// Не забываем, что getRegistryName может вернуть Null!
// assert regName != null;
final ModelResourceLocation mrl = new ModelResourceLocation(regName, "inventory");
ModelBakery.registerItemVariants(item, mrl);// Регистрация вариантов предмета. Это нужно если мы хотим использовать подтипы предметов/блоков(см. статью подтипы)
ModelLoader.setCustomModelResourceLocation(item, 0, mrl);// Устанавливаем вариант модели для нашего предмета. Без регистрации варианта модели, сама модель не будет установлена для предмета/блока(см. статью подтипы)
}
}
key.json:
{
"parent": "item/generated",
"textures": {
"layer0": "moringtech:items/key"
}
}
Я также пробовал использовать стандартные текстуры, к примеру:
"layer0": "items/charcoal"Это тоже не работает..
Структура проекта:

Полный build.gradle:
build.gradle:
buildscript {
repositories {
maven { url = 'https://maven.minecraftforge.net/' }
mavenCentral()
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:3.+'
}
}
apply plugin: 'net.minecraftforge.gradle'
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
apply plugin: 'idea'
idea.module.inheritOutputDirs = true
version = '1.0'
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'modid'
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
minecraft {
// The mappings can be changed at any time, and must be in the following format.
// snapshot_YYYYMMDD Snapshot are built nightly.
// stable_# Stables are built at the discretion of the MCP team.
// Use non-default mappings at your own risk. they may not always work.
// Simply re-run your setup task after changing the mappings to update your workspace.
//mappings channel: 'snapshot', version: '20171003-1.12'
mappings channel: 'snapshot', version: '20171003-1.12'
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
workingDirectory project.file('run')
// Recommended logging data for a userdev environment
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
// Recommended logging level for the console
property 'forge.logging.console.level', 'debug'
}
server {
// Recommended logging data for a userdev environment
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
// Recommended logging level for the console
property 'forge.logging.console.level', 'debug'
}
}
}
dependencies {
// Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
// that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2859'
// You may put jars on which you depend on in ./libs or you may define them like so..
// compile "some.group:artifact:version:classifier"
// compile "some.group:artifact:version"
// Real examples
// compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
// compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
// The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
// provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
// These dependencies get remapped to your current MCP mappings
// deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev'
// For more info...
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
}
// Example for how to get properties into the manifest for reading by the runtime..
jar {
manifest {
attributes([
"Specification-Title": "examplemod",
"Specification-Vendor": "examplemodsareus",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"examplemodsareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
// Example configuration to allow publishing using the maven-publish task
// This is the preferred method to reobfuscate your jar file
jar.finalizedBy('reobfJar')
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing
//publish.dependsOn('reobfJar')
publishing {
publications {
mavenJava(MavenPublication) {
artifact jar
}
}
repositories {
maven {
url "file:///${project.projectDir}/mcmodsrepo"
}
}
}
текстуру которую использую (просто рандомную взял):

