Jump to content

Recommended Posts

Posted

Hi, so I'm looking to add lore (.addInformation) to some of my items, but my problem is, I got 3 class files that serve for over 10 items each, how to I add lore to my items without editting these 3 class files ( if that's possible ), I want it so that I can just add lore to this piece of line

UA3 = (ItemFood)new Sub3( UAID3, 10, 5.0F, false).setAlwaysEdible().setPotionEffect(13, 1800, 1, 1.0F).setCreativeTab(CreativeTabs.tabFood).setUnlocalizedName("UA3");

By the way, lore is when you hover your mouse over an item you get like a second name under the actualy name, some sort of description, if anyone can help me with this I'd thank you in advanced, please note I'm a beginner modder so no expert nano talk please ! Also if you want to help me, please post an example of how you did it, as I said I'm no nano rocket science computer engineer !

Posted

Actually, there is a way to do this xD.

 

here is an example of an Item file that I can use for multiple items with lore:

package rpg.items;

import java.util.List;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

public class ItemMultipleItemWithLore extends Item {

    // this string holds the lore
    String lore;
    
    // this constructor would be for an item with lore
    public ItemMultipleItemWithLore(int par1, String lore) {
        super(par1);
        this.lore = lore;
    }
    
    @Override
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void addInformation(ItemStack par1ItemStack, EntityPlayer player,
            List par3List, boolean par4) {
        par3List.add(lore);
    }
}

 

I hope this helps. whatever you write into the string as lore will apear ONLY for that item, so it can have different lore for each item

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Posted
  On 5/20/2013 at 5:17 AM, Mew said:

Actually, there is a way to do this xD.

 

here is an example of an Item file that I can use for multiple items with lore:

package rpg.items;

import java.util.List;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

public class ItemMultipleItemWithLore extends Item {

    // this string holds the lore
    String lore;
    
    // this constructor would be for an item with lore
    public ItemMultipleItemWithLore(int par1, String lore) {
        super(par1);
        this.lore = lore;
    }
    
    @Override
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void addInformation(ItemStack par1ItemStack, EntityPlayer player,
            List par3List, boolean par4) {
        par3List.add(lore);
    }
}

 

I hope this helps. whatever you write into the string as lore will apear ONLY for that item, so it can have different lore for each item

Could you give me an example ? I'm sorry if I'm a pain in the ass but I'm kinda new and the only way I learn is examples lol.

  • 8 months later...
Posted

I just added lore to my SubType by damage item class.. I have 3 subitems on that ID atm.

I chose to use a single LoreLib static library to keep all the lore centralized and easy for config file to deal with later.

 

in the subtyped item I added the method for addInformation(,,,) but then immediately just passed it along to my library to actually process

public void addInformation(ItemStack pStack, EntityPlayer pPlayer, List pList, boolean pBool) {
LoreLib.getLore( pStack, pList);
}

and the LoreLib class with teh actual strings

public class LoreLib {
public static void getLore( ItemStack pStack, List pList){
int thing = pStack.itemID;
int subtype	= pStack.getItemDamage();
String stx	= "";
	if ( thing == Itemz.bimBows.itemID){
	switch (subtype){
	case 0:
		stx = "Lore for BimBows-0: First of the metabows";
		break;
	case 1:
		stx = "Lore for BimBows-1: Second of the metabows";
		break;
	case 2:
		stx = "Lore for BimBows-2: Third of the metabows";
		break;
	default:
	}
}
pList.add(stx);
return;
}

 

I'm not saying this is any better,

but its another way to do it if you're into this kind of thing.

I would have liked to use another SWITCH on the ItemID, but it wasnt cooperating.

I might be consolidating the text to strings so I will be able to  load them from config file.

Also, I havent vandal proofed it yet with null checks and whatnot

Posted

Yet another method is to use a language file to store your descriptions and make sure each item has the same number of lines of lore:

// just to note, this is in one of my classes that has 5+ different items using it, each with different lore
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
list.add(EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.zss." + getUnlocalizedName().substring(9) + ".desc.0"));
}

 

I use substring(9) because I prefix my items with 'zss.' + 'item.'; anyway, so my language file (named 'en_US' and located in 'assets/lang') would look like this:

tooltip.zss.some_item.desc.0=Some item's lore
tooltip.zss.some_other_item.desc.0=Some other item's lore

 

Obviously you can add as many fields as you want, desc.1, desc.2, etc. and just add them all in the tooltip. Mew's suggestion is easier, but if you plan on adding language support, then you'll need to do this anyway. I'm sure someone with better Java than me could figure out a way to support each item containing different numbers of lore lines as well, but I just standardized all my items.

Posted

Hi

 

The ItemTooltipEvent might also be of some use.

 

If you hook into it, you could use the Item as a key to search your "lore" descriptions for that Item.  All your lore descriptions are then kept in a single class, you can add lore for vanilla items, and you can keep your Item classes completely separate if you want.

 

-TGG

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hey man,    i have only been modding Minecraft for a few days but maybe I can help you. First of all make sure to follow every step of Kaupenjoe's tutorial, I found it to been very helpful and complete. The game uses the raw translation key for the item (in your case "item.testmod.alexandrite") if it can't find the correct lang file. Make sure it's name is "en_us.json" and it is saved under "ressources" -> "assets" -> "testmod".
    • whenever I try to get this item to render into the game it appears with the not texture purple and black squares and calls itself by the lang translation file path instead of the name i gave it.   { "item.testmod.alexandrite": "Alexandrite" } this is the lang json file package net.Hurst.testmod.item; import net.Hurst.testmod.TestMod; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, TestMod.MOD_ID); public static final RegistryObject<Item> ALEXANDRITE = ITEMS.register("alexandrite", () -> new Item(new Item.Properties())); public static void register(IEventBus eventBus){ ITEMS.register(eventBus); } } this is my ModItems.java file package net.Hurst.testmod; import com.mojang.logging.LogUtils; import net.Hurst.testmod.item.ModItems; import net.minecraft.world.item.CreativeModeTabs; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; // The value here should match an entry in the META-INF/mods.toml file @Mod(TestMod.MOD_ID) public class TestMod { public static final String MOD_ID = "testmod"; private static final Logger LOGGER = LogUtils.getLogger(); public TestMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ModItems.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(this::addCreative); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.SPEC); } private void commonSetup(final FMLCommonSetupEvent event) { } // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { if(event.getTabKey() == CreativeModeTabs.INGREDIENTS){ event.accept(ModItems.ALEXANDRITE); } } // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { } // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { } } } this is my TestMod.java file { "parent": "minecraft:item/generated", "textures": { "layer0": "testmod:item/generated" } } this is my model file for the item. I am using intellij 2025.1.2 with fdk 1.21 and java 21 I would appreciate the help.
    • Also remove VS Create Armor, createbigcannons and The Factory Must Grow
    • Add the latest.log (logs-folder) with sites like https://mclo.gs/ and paste the link to it here  
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

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