Регистрация предмета и ObjectHolder

Версия Minecraft
1.12.2
769
1
42
Доброго времени суток. Решил я перейти на 1.12 и, как обычно, без проблем никуда. Пытаюсь зарегистрировать предмет используя события, все как по уроку, однако у меня получается такой краш. Не знаю, вроде все правильно сделано, пишу на котлине. Вот класс регистрации:
Kotlin:
@ObjectHolder(VacuumHorizon.MOD_ID)
@EventBusSubscriber
object ObjectData {
    val emaHelmet: Item? = null
    val emaChestplate: Item? = null
    val emaLeggings: Item? = null
    val emaBoots: Item? = null

    @SubscribeEvent
    fun registerItems(event: RegistryEvent.Register<Item>) {
        event.registry.registerAll(
                CoreEMA(ItemArmor.ArmorMaterial.DIAMOND, EntityEquipmentSlot.HEAD, "emaHelmet", "emaHelmet"),
                CoreEMA(ItemArmor.ArmorMaterial.DIAMOND, EntityEquipmentSlot.CHEST, "emaChestplate", "emaChestplate"),
                CoreEMA(ItemArmor.ArmorMaterial.DIAMOND, EntityEquipmentSlot.LEGS, "emaLeggings", "emaLeggings"),
                CoreEMA(ItemArmor.ArmorMaterial.DIAMOND, EntityEquipmentSlot.FEET, "emaBoots", "emaBoots")
        )
    }

    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    fun registerModels(event: ModelRegistryEvent) {
        registryModel(emaHelmet!!)
        registryModel(emaChestplate!!)
        registryModel(emaLeggings!!)
        registryModel(emaBoots!!)
    }

    @SideOnly(Side.CLIENT)
    private fun registryModel(item: Item) {
        val regName = item.registryName!!
        val mrl = ModelResourceLocation(regName, "inventory")
        ModelBakery.registerItemVariants(item, mrl)
        ModelLoader.setCustomModelResourceLocation(item, 0, mrl)
    }
}
Буду рад любой помощи.
 
Краш-лог
Time: 4/2/20 8:24 PM

Description: Initializing game



java.lang.IllegalStateException: The ObjectHolder annotation cannot apply to a field that does not map to a registry. Ensure the registry was created during the RegistryEvent.NewRegistry event. (found : vacuum.common.ObjectData at vacuum.common.ObjectData.INSTANCE)

at net.minecraftforge.registries.ObjectHolderRef.<init>(ObjectHolderRef.java:85)

at net.minecraftforge.registries.ObjectHolderRegistry.scanClassForFields(ObjectHolderRegistry.java:153)

at net.minecraftforge.registries.ObjectHolderRegistry.scanTarget(ObjectHolderRegistry.java:115)

at net.minecraftforge.registries.ObjectHolderRegistry.findObjectHolders(ObjectHolderRegistry.java:68)

at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:626)

at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252)

at net.minecraft.client.Minecraft.init(Minecraft.java:514)

at net.minecraft.client.Minecraft.run(Minecraft.java:422)

at net.minecraft.client.main.Main.main(Main.java:118)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)

at GradleStart.main(GradleStart.java:25)





A detailed walkthrough of the error, its code path and all known details is as follows:

---------------------------------------------------------------------------------------



-- Head --

Thread: Client thread

Stacktrace:

at net.minecraftforge.registries.ObjectHolderRef.<init>(ObjectHolderRef.java:85)

at net.minecraftforge.registries.ObjectHolderRegistry.scanClassForFields(ObjectHolderRegistry.java:153)

at net.minecraftforge.registries.ObjectHolderRegistry.scanTarget(ObjectHolderRegistry.java:115)

at net.minecraftforge.registries.ObjectHolderRegistry.findObjectHolders(ObjectHolderRegistry.java:68)

at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:626)

at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252)

at net.minecraft.client.Minecraft.init(Minecraft.java:514)



-- Initialization --

Details:

Stacktrace:

at net.minecraft.client.Minecraft.run(Minecraft.java:422)

at net.minecraft.client.main.Main.main(Main.java:118)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)

at GradleStart.main(GradleStart.java:25)



-- System Details --

Details:

Minecraft Version: 1.12.2

Operating System: Windows 10 (amd64) version 10.0

Java Version: 1.8.0_191, Oracle Corporation

Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation

Memory: 93623168 bytes (89 MB) / 589824000 bytes (562 MB) up to 1884815360 bytes (1797 MB)

JVM Flags: 0 total;

IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0

FML: MCP 9.42 Powered by Forge 14.23.5.2847 9 mods loaded, 9 mods active

States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored



| State | ID | Version | Source | Signature |

|:----- |:------------------- |:------------ |:--------------------------------------------- |:--------- |

| LC | minecraft | 1.12.2 | minecraft.jar | None |

| LC | mcp | 9.42 | minecraft.jar | None |

| LC | FML | 8.0.99.99 | forgeSrc-1.12.2-14.23.5.2847.jar | None |

| LC | forge | 14.23.5.2847 | forgeSrc-1.12.2-14.23.5.2847.jar | None |

| LC | micdoodlecore | | minecraft.jar | None |

| LC | vacuumhorizon | 0.7 | main | None |

| LC | galacticraftcore | 4.0.2.244 | GalacticraftCore-Dev-1.12.2-4.0.2.244.jar | None |

| LC | galacticraftplanets | 4.0.2.244 | Galacticraft-Planets-Dev-1.12.2-4.0.2.244.jar | None |

| LC | jei | 4.8.5.147 | jei_1.12.2-4.8.5.147.jar | None |



Loaded coremods (and transformers):

MicdoodlePlugin (MicdoodleCore-Dev-1.12.2-4.0.2.244.jar)

micdoodle8.mods.miccore.MicdoodleTransformer

GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 20.19.15.4703' Renderer: 'Intel(R) HD Graphics 4600'

Launched Version: 1.12.2

LWJGL: 2.9.4

OpenGL: Intel(R) HD Graphics 4600 GL version 4.3.0 - Build 20.19.15.4703, Intel

GL Caps: Using GL 1.3 multitexturing.

Using GL 1.3 texture combiners.

Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.

Shaders are available because OpenGL 2.1 is supported.

VBOs are available because OpenGL 1.5 is supported.

Using VBOs: Yes

Is Modded: Definitely; Client brand changed to 'fml,forge'

Type: Client (map_client.txt)

Resource Packs:

Current Language: English (US)

Profiler Position: N/A (disabled)

CPU: 4x Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz

[20:24:16] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: #@!@# Game crashed! Crash report saved to: #@!@# D:\VacuumHorizon\run\.\crash-reports\crash-2020-04-02_20.24.16-client.txt

Disconnected from the target VM, address: '127.0.0.1:53585', transport: 'socket'



Process finished with exit code -1
Краш-лог:
Time: 4/2/20 8:24 PM

Description: Initializing game



java.lang.IllegalStateException: The ObjectHolder annotation cannot apply to a field that does not map to a registry. Ensure the registry was created during the RegistryEvent.NewRegistry event. (found : vacuum.common.ObjectData at vacuum.common.ObjectData.INSTANCE)

    at net.minecraftforge.registries.ObjectHolderRef.<init>(ObjectHolderRef.java:85)

    at net.minecraftforge.registries.ObjectHolderRegistry.scanClassForFields(ObjectHolderRegistry.java:153)

    at net.minecraftforge.registries.ObjectHolderRegistry.scanTarget(ObjectHolderRegistry.java:115)

    at net.minecraftforge.registries.ObjectHolderRegistry.findObjectHolders(ObjectHolderRegistry.java:68)

    at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:626)

    at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252)

    at net.minecraft.client.Minecraft.init(Minecraft.java:514)

    at net.minecraft.client.Minecraft.run(Minecraft.java:422)

    at net.minecraft.client.main.Main.main(Main.java:118)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:498)

    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:498)

    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)

    at GradleStart.main(GradleStart.java:25)





A detailed walkthrough of the error, its code path and all known details is as follows:

---------------------------------------------------------------------------------------



-- Head --

Thread: Client thread

Stacktrace:

    at net.minecraftforge.registries.ObjectHolderRef.<init>(ObjectHolderRef.java:85)

    at net.minecraftforge.registries.ObjectHolderRegistry.scanClassForFields(ObjectHolderRegistry.java:153)

    at net.minecraftforge.registries.ObjectHolderRegistry.scanTarget(ObjectHolderRegistry.java:115)

    at net.minecraftforge.registries.ObjectHolderRegistry.findObjectHolders(ObjectHolderRegistry.java:68)

    at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:626)

    at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252)

    at net.minecraft.client.Minecraft.init(Minecraft.java:514)



-- Initialization --

Details:

Stacktrace:

    at net.minecraft.client.Minecraft.run(Minecraft.java:422)

    at net.minecraft.client.main.Main.main(Main.java:118)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:498)

    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:498)

    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)

    at GradleStart.main(GradleStart.java:25)



-- System Details --

Details:

    Minecraft Version: 1.12.2

    Operating System: Windows 10 (amd64) version 10.0

    Java Version: 1.8.0_191, Oracle Corporation

    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation

    Memory: 93623168 bytes (89 MB) / 589824000 bytes (562 MB) up to 1884815360 bytes (1797 MB)

    JVM Flags: 0 total;

    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0

    FML: MCP 9.42 Powered by Forge 14.23.5.2847 9 mods loaded, 9 mods active

    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored



    | State | ID                  | Version      | Source                                        | Signature |

    |:----- |:------------------- |:------------ |:--------------------------------------------- |:--------- |

    | LC    | minecraft           | 1.12.2       | minecraft.jar                                 | None      |

    | LC    | mcp                 | 9.42         | minecraft.jar                                 | None      |

    | LC    | FML                 | 8.0.99.99    | forgeSrc-1.12.2-14.23.5.2847.jar              | None      |

    | LC    | forge               | 14.23.5.2847 | forgeSrc-1.12.2-14.23.5.2847.jar              | None      |

    | LC    | micdoodlecore       |              | minecraft.jar                                 | None      |

    | LC    | vacuumhorizon       | 0.7          | main                                          | None      |

    | LC    | galacticraftcore    | 4.0.2.244    | GalacticraftCore-Dev-1.12.2-4.0.2.244.jar     | None      |

    | LC    | galacticraftplanets | 4.0.2.244    | Galacticraft-Planets-Dev-1.12.2-4.0.2.244.jar | None      |

    | LC    | jei                 | 4.8.5.147    | jei_1.12.2-4.8.5.147.jar                      | None      |



    Loaded coremods (and transformers):

MicdoodlePlugin (MicdoodleCore-Dev-1.12.2-4.0.2.244.jar)

  micdoodle8.mods.miccore.MicdoodleTransformer

    GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 20.19.15.4703' Renderer: 'Intel(R) HD Graphics 4600'

    Launched Version: 1.12.2

    LWJGL: 2.9.4

    OpenGL: Intel(R) HD Graphics 4600 GL version 4.3.0 - Build 20.19.15.4703, Intel

    GL Caps: Using GL 1.3 multitexturing.

Using GL 1.3 texture combiners.

Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.

Shaders are available because OpenGL 2.1 is supported.

VBOs are available because OpenGL 1.5 is supported.

    Using VBOs: Yes

    Is Modded: Definitely; Client brand changed to 'fml,forge'

    Type: Client (map_client.txt)

    Resource Packs:

    Current Language: English (US)

    Profiler Position: N/A (disabled)

    CPU: 4x Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz

[20:24:16] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: #@!@# Game crashed! Crash report saved to: #@!@# D:\VacuumHorizon\run\.\crash-reports\crash-2020-04-02_20.24.16-client.txt

Disconnected from the target VM, address: '127.0.0.1:53585', transport: 'socket'



Process finished with exit code -1
7,099
324
1,510
val emaHelmet: Item? = null val emaChestplate: Item? = null val emaLeggings: Item? = null val emaBoots: Item? = null
Неправильно используешь ObjectHolder. А лучше его ваще не юзать, багливая хрень, вынуждает загрузку классов когда не надо
1585851853744.png
 
7,099
324
1,510
Чувак ) вот эта
registerItems(event: RegistryEvent.Register<Item>) {
замени на
RegistryEvent.NewRegistry
Это регистрация нового события регистрации, о чем ты?

Можно тогда другой пример регистрации итема?
Поля класса EMItems индексируются рефлексией

Это работающий и довольно удобный пример, но не единственный возможный. Можно ваще обойтись без создания статических полей для предметов, просто сразу создавать и пихать экземпляры в registerAll
 

Icosider

Kotliner
Администратор
3,603
99
664
769
1
42
Я пытался, но все также
Kotlin:
import net.minecraft.client.renderer.block.model.ModelBakery
import net.minecraft.client.renderer.block.model.ModelResourceLocation
import net.minecraft.item.Item
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 vacuum.common.items.armor.CoreItem

@GameRegistry.ObjectHolder("vacuumhorizon")
@Mod.EventBusSubscriber
object ObjectData {
    @JvmStatic
    @GameRegistry.ObjectHolder("vacuumhorizon:core_item")
    lateinit var CORE_ITEM: Item

    @SubscribeEvent
    fun registerItems(event: RegistryEvent.Register<Item>) {
        event.registry.register(
                CoreItem("core_item")
        )
    }

    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    fun registerModels(event: ModelRegistryEvent) {
        registryModel(CORE_ITEM)
    }

    @SideOnly(Side.CLIENT)
    private fun registryModel(item: Item) {
        val regName = item.registryName!!
        val mrl = ModelResourceLocation(regName, "inventory")
        ModelBakery.registerItemVariants(item, mrl)
        ModelLoader.setCustomModelResourceLocation(item, 0, mrl)
    }
}
 

Icosider

Kotliner
Администратор
3,603
99
664
Я пытался, но все также
Kotlin:
import net.minecraft.client.renderer.block.model.ModelBakery
import net.minecraft.client.renderer.block.model.ModelResourceLocation
import net.minecraft.item.Item
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 vacuum.common.items.armor.CoreItem

@GameRegistry.ObjectHolder("vacuumhorizon")
@Mod.EventBusSubscriber
object ObjectData {
    @JvmStatic
    @GameRegistry.ObjectHolder("vacuumhorizon:core_item")
    lateinit var CORE_ITEM: Item

    @SubscribeEvent
    fun registerItems(event: RegistryEvent.Register<Item>) {
        event.registry.register(
                CoreItem("core_item")
        )
    }

    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    fun registerModels(event: ModelRegistryEvent) {
        registryModel(CORE_ITEM)
    }

    @SideOnly(Side.CLIENT)
    private fun registryModel(item: Item) {
        val regName = item.registryName!!
        val mrl = ModelResourceLocation(regName, "inventory")
        ModelBakery.registerItemVariants(item, mrl)
        ModelLoader.setCustomModelResourceLocation(item, 0, mrl)
    }
}
Над классом аннотацию убери
 
769
1
42
Понимаю
Код:
Time: 4/3/20 12:24 PM
Description: Initializing game

kotlin.UninitializedPropertyAccessException: lateinit property CORE_ITEM has not been initialized
    at vacuum.common.ObjectData.registerModels(ObjectData.kt:34)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_ObjectData_registerModels_ModelRegistryEvent.invoke(.dynamic)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
    at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144)
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
    at net.minecraftforge.fml.client.FMLClientHandler.fireSidedRegistryEvents(FMLClientHandler.java:1062)
    at net.minecraftforge.fml.common.FMLCommonHandler.fireSidedRegistryEvents(FMLCommonHandler.java:764)
    at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:631)
    at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252)
    at net.minecraft.client.Minecraft.init(Minecraft.java:514)
    at net.minecraft.client.Minecraft.run(Minecraft.java:422)
    at net.minecraft.client.main.Main.main(Main.java:118)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
    at GradleStart.main(GradleStart.java:25)
 

Icosider

Kotliner
Администратор
3,603
99
664
У меня JEI стоит, проверил через него. Потом юзал твою команду, потом поставил его в ванильную вкладку - ничего. У меня подозрение, что у эвентов нужно JvmStatic добавить
Да

Почему ты не сделал CORE_ITEM = YourItemObj?
 
Сверху