PegBeard Posted July 16, 2017 Posted July 16, 2017 (edited) This is the first time I have done meta items. Everything works, except the first subitem appears in in the creative inventory 'Delete Item' slot, and at the end of every creative tab. For testing purposes, I stripped the class down to the essentials, but the error persists. public static ItemStack item1; public static ItemStack item2; public DTTest(String name) { this.setUnlocalizedName(Reference.MOD_ID + ":" + name); this.setCreativeTab(DTCreativeTab.DT_TAB); this.setMaxDamage(0); setContainerItem(this); setHasSubtypes(true); item1 = new ItemStack(this); item1.setItemDamage(0); item2 = new ItemStack(this); item2.setItemDamage(1); } @SideOnly(Side.CLIENT) @Override public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) { items.add(item1); items.add(item2); } The item is registered thusly, and called during preInit (haven't switched to events yet): public static Item test = new DTTest(Names.Items.TEST); ForgeRegistries.ITEMS.register(test.setRegistryName(Names.Items.TEST)); Edited July 16, 2017 by PegBeard Quote
Choonster Posted July 16, 2017 Posted July 16, 2017 Item#getSubItems is now called for every Item on every creative tab, you need to call Item#isInCreativeTab and only add the items to the list if it returns true. It's also no longer a client-only method, you should remove the @SideOnly annotation from it. Quote Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
Sataniq Posted December 17, 2017 Posted December 17, 2017 Okay, so I would really like to know why people use # in front of function calls when describing them, instead of the period you ACTUALLY use. But regardless, Item.isInCreativeTab does not appear to exist in forge-1.12-14.21.1.2443. How does one go about resolving this problem? - As I'm having it too. Quote
Draco18s Posted December 17, 2017 Posted December 17, 2017 24 minutes ago, Sataniq said: Okay, so I would really like to know why people use # in front of function calls when describing them, instead of the period you ACTUALLY use. Because the method is not a static method: Item.isInCreativeTab() can't be invoked directly. You need an instance: Item i = ...; i.isInCreativeTab(); Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
Sataniq Posted December 18, 2017 Posted December 18, 2017 (edited) Ah, I see. I have a reference to an item but the function still doesn't show in the IDE's suggestions list. I've found it in the Item class, but it's protected. My item does extend a class that extends net.minecraft.item.Item, so surely this should be visible to me? I'm not sure if IDEA is being strange, or I'm just being stupid. Also, how do we actually get the single ItemStack in the getSubItems() function? It's passing a NonNullList<ItemStack> EDIT: I figured I had to cast the item to the class type to get access to the function. This is why you don't program at 8am Edited December 18, 2017 by Sataniq I derped Quote
Sataniq Posted December 18, 2017 Posted December 18, 2017 I resolved this, like so: @Override public void getSubItems (CreativeTabs tab, NonNullList<ItemStack> items) { if (getCreativeTab() != tab) return; super.getSubItems(tab, items); items.add(new ItemStack(this, 1, 1)); } 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.