Jump to content

Recommended Posts

Posted (edited)

I know that similar questions have been asked and I followed the steps given in those answers but my Item still doesn't display a proper name.

I followed a somewhat outdated tutorial while building the bases for my mod. Since then I added most of what my Item is supposed to do.  

The only thing left is the item name, I already have a texture.  

Maybe someone can find a mistake I made in the folder setup, or maybe I used the wrong name. I checked everything and can't find my error.  

 

My folder structure with location of en_us.lang (I also tried naming it en_US.lang, still didn't work):  

folder_structure_mc.thumb.PNG.3640c25d95c3932ee974a9269541dbf7.PNG

Also classes:  

 

Main mod class:

Spoiler

package me.opkekz.imagespawner;

import me.opkekz.imagespawner.configuration.ConfigurationHandler;
import me.opkekz.imagespawner.init.ModItems;
import me.opkekz.imagespawner.item.ImageSpawnerItem;
import me.opkekz.imagespawner.proxy.IProxy;
import me.opkekz.imagespawner.reference.Reference;
import me.opkekz.imagespawner.utility.ImageSpawnerCommand;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
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;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;

@Mod(modid=Reference.MOD_ID, name=Reference.MOD_NAME, version=Reference.VERSION)
public class ImageSpawner {
    
    @Mod.Instance(Reference.MOD_ID)
    public static ImageSpawner instance;
    
    @SidedProxy(clientSide=Reference.CLIENT_PROXY, serverSide=Reference.SERVER_PROXY)
    public static IProxy proxy;
    
    @EventHandler
    public void serverStarting(FMLServerStartingEvent event) {
        event.registerServerCommand(new ImageSpawnerCommand());
    }

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        //ConfigurationHandler.init(event.getSuggestedConfigurationFile());
        ModItems.init();
        
    }
    
    @Mod.EventHandler
    public void init(FMLInitializationEvent event) {
        //proxy.init();
    }
    
    @Mod.EventHandler
    public void postInit(FMLPostInitializationEvent event) {
        
    }
    
}

 

Reference.java:  

Spoiler

package me.opkekz.imagespawner.reference;

public class Reference {
    
    public static final String MOD_ID = "imagespawner";
    public static final String MOD_NAME = "ImageSpawner";
    public static final String VERSION = "1.12.2-1.0";
    public static final String CLIENT_PROXY = "me.opkekz.imagespawner.proxy.ClientProxy";
    public static final String SERVER_PROXY = "me.opkekz.imagespawner.proxy.ServerProxy";
    
    public static enum ImageSpawnerEnum {
        IMAGESPAWNER("imagespawner", "imagespawner");
        
        private String unlocalizedName;
        private String registryName;
        
        ImageSpawnerEnum(String unlocalizedName, String registryName) {
            this.unlocalizedName = unlocalizedName;
            this.registryName = registryName;
        }
        
        public String getRegistryName() {
            return registryName;
        }
        
        public String getUnlocalizedName() {
            return unlocalizedName;
        }
    }

}
 

 

ModItems.java:

Spoiler

package me.opkekz.imagespawner.init;

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

import me.opkekz.imagespawner.item.ImageSpawnerItem;
import me.opkekz.imagespawner.reference.Reference;
import net.minecraft.client.Minecraft;
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.ForgeRegistries;
import net.minecraftforge.registries.IForgeRegistry;

@Mod.EventBusSubscriber(modid=Reference.MOD_ID)
public class ModItems {
    
    public static ImageSpawnerItem imagespawner;
    
    public static void init() {
        
        imagespawner = new ImageSpawnerItem();
        //ForgeRegistries.ITEMS.register(imagespawner);
        
    }
    
    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(imagespawner);
    }
    
    @SubscribeEvent
    public static void registerRenders(ModelRegistryEvent event) {
        registerRender(imagespawner);
    }
    
    private static void registerRender(Item item) {
        ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation( item.getRegistryName(), "inventory"));
    }
    
}

 

The first part of the item class:  

Spoiler

package me.opkekz.imagespawner.item;

import com.google.common.eventbus.Subscribe;

import ibxm.Player;
import me.opkekz.imagespawner.reference.Reference;
import me.opkekz.imagespawner.utility.GetRGB;
import me.opkekz.imagespawner.utility.RgbToEnum;
import net.minecraft.block.Block;
import net.minecraft.block.BlockColored;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.client.CPacketChatMessage;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class ImageSpawnerItem extends Item{
    
    IBlockState[][] blockMatrix;
    public static final PropertyEnum<EnumDyeColor> COLOR = PropertyEnum.<EnumDyeColor>create("color", EnumDyeColor.class);
    private String imagePath;
    
    public ImageSpawnerItem() {
        
        super();
        this.setCreativeTab(CreativeTabs.TOOLS);
        setUnlocalizedName(Reference.ImageSpawnerEnum.IMAGESPAWNER.getUnlocalizedName());
        setRegistryName(Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName());
        
        int[][] rgbMatrix = GetRGB.getValues("C:\\Users\\Ale\\Downloads\\forge-1.12.2-14.23.5.2768-mdk\\src\\main\\java\\me\\opkekz\\imagespawner\\utility\\LOLTesti.png");
        EnumDyeColor[][] colorMatrix = RgbToEnum.rgbToEnum(rgbMatrix);
        buildBlockMatrix(colorMatrix);
        
    }

 

My en_us.lang file contains this line:  

item.imagespawner.name=Image Spawner  

 

As far as I understand, after "item." I have to write the unlocalized name, which I did. I also put it in the right folder (as far as I know) but it still won't work.  

 

I would be very thankful for any kind of help.

If you need any more information let me know.

Edited by Kekz
Posted

Your enum is over complicating the process of setting names.

A good practice is to set the unlocalized name to the registry name to avoid conflicts, since the registry name contains the mod id.

this.setUnlocalizedName(this.getRegistryName().toString());

 

Also, define “don’t work”. What is the name currently like?

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Posted (edited)

First of all to answer your question, go ingame and and press F3 + H....This will show advanced tooltips.

Now put your item/block in your inventory and hover with your mouse over it. You should see a gray tekst, that tekst contains your modid followed with ":" and then the name of your item/block

Actually to be short the gray tekst is the registryname of your item/block. So what does it say? …."imagespawner:imagespawner" ?

DavidM is right. Why do you use an enum for naming stuff? Why do you use 2 separate names for registryname and unlocalizedname?

Something i do is passing a resourcelocation in the constructor for example my invar block class in a simple way:

 

public class BlockInvar extends Block{

	public BlockInvar(ResourceLocation registryname) {
		super(Material.IRON, MapColor.IRON);
		setSoundType(SoundType.METAL);
		setHardness(7.0F);
		setResistance(10.0F);
		//setHarvestLevel("pickaxe", 3);
		setUnlocalizedName(registryname.toString());
		setRegistryName(registryname);
		setCreativeTab(Utilities.WINNETRIESEXPANSIONMOD);
	}

}

You can still use an Enum if you like, but just keep 1 name. 

Creating the block would look like this:

ModBlockReference.invar_block = new BlockInvar(new ResourceLocation(References.PREFIX + "block_invar"))

If you want to use your enum naming change "block_invar" to Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName()

But i think that enum thing is just overkill in my opinion

Edited by winnetrie
Posted
10 hours ago, DavidM said:

Your enum is over complicating the process of setting names.

Also, define “don’t work”. What is the name currently like?

The enum was suggested in a tutorial, so I just followed that since I'm new to modding.  

Currently, it says item.imagespawner:imagespawner.name

 

Quote

 

A good practice is to set the unlocalized name to the registry name to avoid conflicts, since the registry name contains the mod id.


this.setUnlocalizedName(this.getRegistryName().toString());

 

So instead of:  

 setUnlocalizedName(Reference.ImageSpawnerEnum.IMAGESPAWNER.getUnlocalizedName());
 setRegistryName(Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName());

I would do:  

setRegistryName(Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName());
setUnlocalizedName(this.getRegistryName().toString());

?

Posted
3 minutes ago, Kekz said:

I would do:  


setRegistryName(Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName());
setUnlocalizedName(this.getRegistryName().toString());

?

I tried this and now the item is called item.imagespawner:imagespawner:imagespawner.name

Posted (edited)

I also have these methods, from the tutorial in my ImageSpawnerItem.java class. Maybe these are causing some problems?  

	@Override
	public String getUnlocalizedName() {
		
		return String.format("item.%s%s", Reference.MOD_ID.toLowerCase() + ":", getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
		
	}
	
	@Override
	public String getUnlocalizedName(ItemStack itemStack) {
		return String.format("item.%s%s", Reference.MOD_ID.toLowerCase() + ":", getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
	}
	
	protected String getUnwrappedUnlocalizedName(String unlocalizedName) {
		return unlocalizedName.substring(unlocalizedName.indexOf(".") + 1);
	}

 

Edit:

I deleted these methods, Item still shows up as: item.imagespawner:imagespawner.name

Edited by Kekz
Posted
26 minutes ago, Kekz said:

I deleted these methods, Item still shows up as: item.imagespawner:imagespawner.name

That is what you want.

Now you should change the translation line in your .lang file into something like:

item.imagespawner:imagespawner.name=Image Spawner

Also, it seems like you are following a rather bad tutorial that writes unnecessary and pointless code. I would suggest ditching it.

  • Thanks 1

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Posted (edited)
4 minutes ago, DavidM said:

Also, it seems like you are following a rather bad tutorial that writes unnecessary and pointless code. I would suggest ditching it.

Yeah, that's what I did. I only needed it to learn how to implement a basic item but the tutorial is 2 years old so some stuff was outdated.  

 

I updated my lang file to: 

item.imagespawner:imagespawner.name=Image Spawner

This combined with renaming the file back to en_US.lang finally worked. Thanks!

Edited by Kekz

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.