Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.12.1] How to get variants count
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 1
MineDen

[1.12.1] How to get variants count

By MineDen, February 16, 2018 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

sir_titi    10

sir_titi

sir_titi    10

  • Stone Miner
  • sir_titi
  • Members
  • 10
  • 58 posts
Posted February 16, 2018

meta data is limited to 16, ranging from 0 to 15.

  • Quote

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

diesieben07    6687

diesieben07

diesieben07    6687

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6687
  • 45707 posts
Posted February 16, 2018

Call getSubItems to get all variants of an item.

  • Quote

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

jabelar    591

jabelar

jabelar    591

  • Reality Controller
  • jabelar
  • Members
  • 591
  • 3266 posts
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

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

diesieben07    6687

diesieben07

diesieben07    6687

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6687
  • 45707 posts
Posted February 16, 2018
1 hour ago, MineDen said:

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.

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.

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14027 posts
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

Share this post


Link to post
Share on other sites

diesieben07    6687

diesieben07

diesieben07    6687

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6687
  • 45707 posts
Posted February 16, 2018
8 minutes ago, Draco18s said:

Watch out for SideOnly(CLIENT), I believe getSubItems is client side only (as it is only used for the creative inventory).

Not anymore.

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14027 posts
Posted February 16, 2018
1 hour ago, diesieben07 said:

Not anymore.

Oh? Since what version?

  • Quote

Share this post


Link to post
Share on other sites

Choonster    1624

Choonster

Choonster    1624

  • Reality Controller
  • Choonster
  • Forge Modder
  • 1624
  • 5050 posts
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

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14027 posts
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

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

Choonster    1624

Choonster

Choonster    1624

  • Reality Controller
  • Choonster
  • Forge Modder
  • 1624
  • 5050 posts
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

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

diesieben07    6687

diesieben07

diesieben07    6687

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6687
  • 45707 posts
Posted February 18, 2018

No, you can't mangle about with metadata like that. You must use getSubItems on the ItemBlock and it will provide the correct item stacks.

  • Quote

Share this post


Link to post
Share on other sites

Choonster    1624

Choonster

Choonster    1624

  • Reality Controller
  • Choonster
  • Forge Modder
  • 1624
  • 5050 posts
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

Share this post


Link to post
Share on other sites

MineDen    0

MineDen

MineDen    0

  • Tree Puncher
  • MineDen
  • Members
  • 0
  • 47 posts
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

Share this post


Link to post
Share on other sites

diesieben07    6687

diesieben07

diesieben07    6687

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6687
  • 45707 posts
Posted February 18, 2018 (edited)
1 hour ago, MineDen said:

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.

Mods are not written in JavaScript.

Edited February 18, 2018 by diesieben07
  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14027 posts
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 1
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Simon_kungen
      [1.14.4] Sync ItemStack Capability Data + Multi-Capability Provider casting error

      By Simon_kungen · Posted 5 minutes ago

      So yeah... looks like none of my questions has been answered lately. Should I give up on capabilities for now?
    • TheGreenSquarez
      Forge 28.1.10 won't show on launcher + 28.1.0 fails to work

      By TheGreenSquarez · Posted 44 minutes ago

      here's the screenshot.
    • TheGreenSquarez
      Forge 28.1.10 won't show on launcher + 28.1.0 fails to work

      By TheGreenSquarez · Posted 46 minutes ago

      I'm quite sure it just updated to the latest version.
    • DragonITA
      [1.14.4] How to get Minecraft Horse model/texture to make a custom unicorn?

      By DragonITA · Posted 1 hour ago

      Ok, i want try Something, pls wait.
    • diesieben07
      Game crashing when the block is activated

      By diesieben07 · Posted 1 hour ago

      Ah, if only you had posted the class that is actually crashing....
  • Topics

    • Simon_kungen
      1
      [1.14.4] Sync ItemStack Capability Data + Multi-Capability Provider casting error

      By Simon_kungen
      Started 22 hours ago

    • TheGreenSquarez
      3
      Forge 28.1.10 won't show on launcher + 28.1.0 fails to work

      By TheGreenSquarez
      Started Yesterday at 11:21 AM

    • DragonITA
      33
      [1.14.4] How to get Minecraft Horse model/texture to make a custom unicorn?

      By DragonITA
      Started Monday at 10:06 AM

    • jun2040
      1
      Game crashing when the block is activated

      By jun2040
      Started 1 hour ago

    • Prasodym
      7
      produces unregistered item minecraft:wooden_door

      By Prasodym
      Started April 28

  • Who's Online (See full list)

    • Cerandior
    • Choonster
    • Simon_kungen
    • DragonITA
    • DaemonUmbra
    • KitKatTheKandy
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.12.1] How to get variants count
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community