MineDen Posted February 16, 2018 Posted February 16, 2018 (edited) Hello, I need to get maximum meta value of block. I created a creative tab and returning random block as icon, but I have colored blocks. And I want to return random meta. But I don't know how to get maximum meta value of block. Now my creative tab code looks like this: public static CreativeTabs decoration = new CreativeTabs("mtest_decoration") { @Override public ItemStack getTabIconItem() { int index = (int) Math.round(Math.random() * (MBlocks.BLOCKS.size() - 1)); Block block = MBlocks.BLOCKS.get(index); int meta = 0; ItemStack is = new ItemStack(block, 1, meta); return is; } }; Edited February 18, 2018 by MineDen Quote
sir_titi Posted February 16, 2018 Posted February 16, 2018 meta data is limited to 16, ranging from 0 to 15. Quote Always looking for new challenges, and happy to help the people where ever I can
MineDen Posted February 16, 2018 Author Posted February 16, 2018 1 minute ago, sir_titi said: meta data is limited to 16, ranging from 0 to 15. But what if i have other block with only one variant? Quote
MineDen Posted February 16, 2018 Author Posted February 16, 2018 9 minutes ago, diesieben07 said: Call getSubItems to get all variants of an item. This method requires NonNullList of ItemStacks. But why? I trying to call this method from an instance of Item. Quote
jabelar Posted February 16, 2018 Posted February 16, 2018 18 minutes ago, MineDen said: This method requires NonNullList of ItemStacks. But why? I trying to call this method from an instance of Item. It's just a coding style thing. That was probably convenient to the person who needed that method in the first place since they were using it for making creative tabs. Like you could pass in an existing list for the creative tab and this method would add to it then you could get the list containing the subitems of multiple item types and if they are itemstacks that makes it super easy to put into the gui container inventory. Quote Check out my tutorials here: http://jabelarminecraft.blogspot.com/
MineDen Posted February 16, 2018 Author Posted February 16, 2018 7 minutes ago, jabelar said: It's just a coding style thing. That was probably convenient to the person who needed that method in the first place since they were using it for making creative tabs. Like you could pass in an existing list for the creative tab and this method would add to it then you could get the list containing the subitems of multiple item types and if they are itemstacks that makes it super easy to put into the gui container inventory. Okay, I'll try this now. Quote
MineDen Posted February 16, 2018 Author Posted February 16, 2018 Sorry, but I can't understand this chain getSubItems>NonNullList>List>ItemStack, CreativeTabs... It is better to make own game on LWJGL 3 with bulit-in modloader always return random block with metadata 0. Quote
Draco18s Posted February 16, 2018 Posted February 16, 2018 Watch out for SideOnly(CLIENT), I believe getSubItems is client side only (as it is only used for the creative inventory). Instead use: BlockStateContainer bsc = block.getBlockState(); ImmutableList<IBlockState> values = bsc.getValidStates(); That will result in a list of IBlockStates that you can then ask for a pickBlock item. 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.
Draco18s Posted February 16, 2018 Posted February 16, 2018 1 hour ago, diesieben07 said: Not anymore. Oh? Since what version? 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.
Choonster Posted February 16, 2018 Posted February 16, 2018 1 hour ago, Draco18s said: Oh? Since what version? Since this commit for 1.12. It was then done by Vanilla in 1.12.1. 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.
Draco18s Posted February 16, 2018 Posted February 16, 2018 51 minutes ago, Choonster said: Since this commit for 1.12. It was then done by Vanilla in 1.12.1. Ok cool. My code is likely holdover from when I did things in 1.11 (that is: I made it work without getSubItems and when I updated to 1.12, it still worked) 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.
MineDen Posted February 18, 2018 Author Posted February 18, 2018 On 16.02.2018 at 8:42 PM, diesieben07 said: You create an empty NonNullList using NonNullList.create. Then you call getSubItems with that list and CreativeTabs.SEARCH. Afterwards you will have all sub items of that item in the list. Seriously, this is not hard. This method returns void, what I can do? Quote
Choonster Posted February 18, 2018 Posted February 18, 2018 16 minutes ago, MineDen said: This method returns void, what I can do? It adds the items to the list that you pass as an argument. 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.
MineDen Posted February 18, 2018 Author Posted February 18, 2018 Just now, Choonster said: It adds the items to the list that you pass as an argument. OK, I'll try that. Quote
MineDen Posted February 18, 2018 Author Posted February 18, 2018 10 minutes ago, Choonster said: It adds the items to the list that you pass as an argument. Is this code right? It works. public static CreativeTabs decoration = new CreativeTabs("mtest_decoration") { @Override public ItemStack getTabIconItem() { int index = (int) Math.round(Math.random() * (MBlocks.BLOCKS.size() - 1)); Block block = MBlocks.BLOCKS.get(index); NonNullList<ItemStack> subBlocks = NonNullList.create(); block.getSubBlocks(CreativeTabs.SEARCH, subBlocks); System.out.println(subBlocks); int meta = (int) Math.round(Math.random() * (subBlocks.size() - 1)); ItemStack is = new ItemStack(block, 1, meta); return is; } }; Quote
Choonster Posted February 18, 2018 Posted February 18, 2018 Use Random#nextInt(int) to generate a random integer between 0 (inclusive) and the argument (exclusive) instead of the multiplication, subtraction and rounding you're doing now. 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.
MineDen Posted February 18, 2018 Author Posted February 18, 2018 Just now, Choonster said: Use Random#nextInt(int) to generate a random integer between 0 (inclusive) and the argument (exclusive) instead of the multiplication, subtraction and rounding you're doing now. Math.round(Math.random() * <count> - 1) is the JavaScript arrays way, and it's my favourite way, so shut up i will use this way. Quote
Draco18s Posted February 18, 2018 Posted February 18, 2018 2 hours ago, MineDen said: Is this code right? It works. public static CreativeTabs decoration = new CreativeTabs("mtest_decoration") { @Override public ItemStack getTabIconItem() { int index = (int) Math.round(Math.random() * (MBlocks.BLOCKS.size() - 1)); Block block = MBlocks.BLOCKS.get(index); NonNullList<ItemStack> subBlocks = NonNullList.create(); block.getSubBlocks(CreativeTabs.SEARCH, subBlocks); System.out.println(subBlocks); int meta = (int) Math.round(Math.random() * (subBlocks.size() - 1)); ItemStack is = new ItemStack(block, 1, meta); return is; } }; Why are you creating a random metadata? What if the only valid values are 0, 1, 3, 7, and 12? 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.
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.