И вновь регистрация obj блока...

Версия Minecraft
1.12.2
344
1
47
here we go again
Окей, я перешёл к регистрациям ВСЕХ блоков... это самоубийство, но выполнимо. И, неожиданно получаю в лицо краш. "One of more entry values did not copy to the correct id. Check log for details!"

Класс с регистрацией...

OBJ_blocks:
package core.erumind.side.init;

import static core.Settings.MODID;

import java.util.HashSet;
import java.util.Set;

import core.Engine;
import core.Settings;
import core.erumind.block.aTwenty.*;
import core.erumind.block.aForty.*;
import core.erumind.block.aSixty.*;
import core.erumind.block.aEighty.*;
import core.erumind.block.aHundred.*;
import core.erumind.block.aHTwenty.*;
import core.erumind.block.aHTwenty.*;
import core.erumind.block.aHForty.*;
import core.erumind.block.aHSixty.*;
import core.erumind.block.s.listreg.Multiblock;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.registries.IForgeRegistry;


@Mod.EventBusSubscriber(modid = MODID)
public class OBJ_blocks {
    private static OBJ_blocks INSTANCE;

  
  
    public static OBJ_blocks getInstance() {
        if (INSTANCE == null) synchronized (OBJ_blocks.class) {
            if (INSTANCE == null) INSTANCE = new OBJ_blocks();
        }
        return INSTANCE;
    }

  

    //public static final setcolission collision = new setcolission(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
    public static final Block1 Block1 = new Block1("erblock1", Engine.objTab);
    public static final Block2 Block2 = new Block2("erblock2", Engine.objTab);
    public static final Block3 Block3 = new Block3("erblock3", Engine.objTab);
    public static final Block4 Block4 = new Block4("erblock4", Engine.objTab);
    public static final Block5 Block5 = new Block5("erblock3", Engine.objTab);
    public static final Block6 Block6 = new Block6("erblock6", Engine.objTab);
    public static final Block7 Block7 = new Block7("erblock7", Engine.objTab);
    public static final Block8 Block8 = new Block8("erblock8", Engine.objTab);
    public static final Block9 Block9 = new Block9("erblock9", Engine.objTab);
    public static final Block10 Block10 = new Block10("erblock10", Engine.objTab);
    public static final Block11 Block11 = new Block11("erblock11", Engine.objTab);
    public static final Block12 Block12 = new Block12("erblock12", Engine.objTab);
    public static final Block13 Block13 = new Block13("erblock13", Engine.objTab);
    public static final Block14 Block14 = new Block14("erblock14", Engine.objTab);
    public static final Block15 Block15 = new Block15("erblock15", Engine.objTab);
    public static final Block16 Block16 = new Block16("erblock16", Engine.objTab);
    public static final Block17 Block17 = new Block17("erblock17", Engine.objTab);
    public static final Block18 Block18 = new Block18("erblock18", Engine.objTab);
    public static final Block19 Block19 = new Block19("erblock19", Engine.objTab);
  
    private OBJ_blocks() {
      
      
      
    }



    private static Item itemRegister(Item item, String regName, String unlocalizedName) {
        item.setUnlocalizedName(new StringBuilder(Settings.Resources).append(".").append(unlocalizedName).toString());
        item.setRegistryName(new ResourceLocation(Settings.Resources, regName));
        return item;
    }


  
  
  //====================================================================
    @Mod.EventBusSubscriber(modid = Settings.MODID)
    public static class RegistrationHandler {
        public static final Set<ItemBlock> ITEM_BLOCKS = new HashSet<>();

        @SubscribeEvent
        public static void registerBlocks(final RegistryEvent.Register<Block> event) {
            final IForgeRegistry<Block> registry = event.getRegistry();
            final Block[] blocks = {
                    Block1,Block2,Block3,Block4,Block5,Block6,Block7,Block8,Block9,Block10,
                    Block11, Block12,Block13,Block14,Block15,Block16,Block17,Block18,Block19,
                  
            };  registry.registerAll(blocks);
          }

  

  
        @SubscribeEvent
        public static void registerItemBlocks(final RegistryEvent.Register<Item> event) {
            final ItemBlock[] items = {
                    new ItemBlock(Block1), new ItemBlock(Block2), new ItemBlock(Block3),
                    new ItemBlock(Block4), new ItemBlock(Block5), new ItemBlock(Block6), new ItemBlock(Block7),
                    new ItemBlock(Block8), new ItemBlock(Block9), new ItemBlock(Block10), new ItemBlock(Block11),
                    new ItemBlock(Block12), new ItemBlock(Block13), new ItemBlock(Block14), new ItemBlock(Block15),
                    new ItemBlock(Block16), new ItemBlock(Block17), new ItemBlock(Block18), new ItemBlock(Block19),
            };

            final IForgeRegistry<Item> registry = event.getRegistry();

            for (final ItemBlock item : items) {
                final Block block = item.getBlock();
                final ResourceLocation registryName = block.getRegistryName();
                registry.register(item.setRegistryName(registryName));
                ITEM_BLOCKS.add(item);
            }

            registerTileEntities();
        }
      
      
        private static void registerTileEntities() {
            //registerTileEntity(TileEntitySurvivalCommandBlock.class, "survival_command_block");
     }

        private static void registerTileEntity(final Class<? extends TileEntity> tileEntityClass, final String name) {
            //GameRegistry.registerTileEntity(tileEntityClass, Constants.RESOURCE_PREFIX + name);
        }
      
    }
//====================================================================

  
  
  
}
 
Краш-лог
// I'm sorry, Dave.



Time: 10/4/19 12:52 PM

Description: Initializing game



java.lang.RuntimeException: One of more entry values did not copy to the correct id. Check log for details!

at net.minecraftforge.registries.ForgeRegistry.sync(ForgeRegistry.java:556)

at net.minecraftforge.registries.GameData.loadRegistry(GameData.java:598)

at net.minecraftforge.registries.GameData.freezeData(GameData.java:251)

at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:758)

at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336)

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

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(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

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(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

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.ForgeRegistry.sync(ForgeRegistry.java:556)

at net.minecraftforge.registries.GameData.loadRegistry(GameData.java:598)

at net.minecraftforge.registries.GameData.freezeData(GameData.java:251)

at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:758)

at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336)

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



-- 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(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

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(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

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

at GradleStart.main(GradleStart.java:25)
Краш-лог:
// I'm sorry, Dave.



Time: 10/4/19 12:52 PM

Description: Initializing game



java.lang.RuntimeException: One of more entry values did not copy to the correct id. Check log for details!

    at net.minecraftforge.registries.ForgeRegistry.sync(ForgeRegistry.java:556)

    at net.minecraftforge.registries.GameData.loadRegistry(GameData.java:598)

    at net.minecraftforge.registries.GameData.freezeData(GameData.java:251)

    at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:758)

    at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336)

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

    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(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    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(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    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.ForgeRegistry.sync(ForgeRegistry.java:556)

    at net.minecraftforge.registries.GameData.loadRegistry(GameData.java:598)

    at net.minecraftforge.registries.GameData.freezeData(GameData.java:251)

    at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:758)

    at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336)

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



-- 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(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    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(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

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

    at GradleStart.main(GradleStart.java:25)
Последнее редактирование модератором:
Решение
Господи, где ж ты такое откопал...
Java:
public static OBJ_blocks getInstance() {
        if (INSTANCE == null) synchronized (OBJ_blocks.class) {
            if (INSTANCE == null) INSTANCE = new OBJ_blocks();
        }
        return INSTANCE;
    }

По теме:
У тебя Block3 и Block5 имеют одинаковое имя("erblock3").
Господи, где ж ты такое откопал...
Java:
public static OBJ_blocks getInstance() {
        if (INSTANCE == null) synchronized (OBJ_blocks.class) {
            if (INSTANCE == null) INSTANCE = new OBJ_blocks();
        }
        return INSTANCE;
    }

По теме:
У тебя Block3 и Block5 имеют одинаковое имя("erblock3").
 
Ну, копал-копал, получилось.

Это для регистрации более продвинутого рендера, с тайлом

А, точно. QWEQ Исправлено и закрыто :D Вот, что значит - не выспаться ночью и решить поработать с самого утра..
 
Господи, где ж ты такое откопал...
В этом есть определенный смысл.
Возможно такое, что 2 потока зайдут в этот метод и проверку одновременно, и тем самым два раза иниацилизируют поле. Чтобы этого избежать, тут помещают проверку и инициализацию поля в синхронизированный блок. Но синхронизация затратна, а вот проверка на сохраненную в кэше переменную - нет. Посему выгоднее сначала проверить, инициализирована ли переменная в кеше текущего потока(пока другой поток не сделал флуш, состояние неопределенно), далее зайти в синхронизированный блок, и там уже со 100% вероятностью проверить, была ли действительно инициализирована переменная, если нет - присвоить значение и сделать флуш. И уже следующий поток у которого даже сработает первая проверка, зайдет в блок и синхронизирует настоящее значение этого поля.
 
Назад
Сверху