Kekz Posted April 28, 2019 Posted April 28, 2019 (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): 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 April 28, 2019 by Kekz Quote
DavidM Posted April 28, 2019 Posted April 28, 2019 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? Quote 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.
winnetrie Posted April 29, 2019 Posted April 29, 2019 (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 April 29, 2019 by winnetrie Quote Try out my new Modpack for MC 1.15.2 https://www.curseforge.com/minecraft/modpacks/terran-civilization
Kekz Posted April 29, 2019 Author Posted April 29, 2019 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()); ? Quote
Kekz Posted April 29, 2019 Author Posted April 29, 2019 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 Quote
Kekz Posted April 29, 2019 Author Posted April 29, 2019 (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 April 29, 2019 by Kekz Quote
DavidM Posted April 29, 2019 Posted April 29, 2019 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. 1 Quote 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.
Kekz Posted April 29, 2019 Author Posted April 29, 2019 (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 April 29, 2019 by Kekz Quote
Recommended Posts
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.