Jump to content

Recommended Posts

Posted

I need to register a group of item with a for loop. I just need it for registering of some items that are multicolored like spawn eggs, but there's a bunch in an array. I need a way to register the entire array of items.

Item array

 

public static Item[] seedrods = {

//new ItemSeedRod(hex, "name", isItPlural)

new ItemSeedRod(0xFFF32D, "Blaze Rod", false),

new ItemSeedRod(0x2B3DA, "Diamond", false),

new ItemSeedRod(0x496BC9, "Lapis Lazuli", true),

new ItemSeedRod(0x40DE58, "Emerald", false),

new ItemSeedRod(0xFA0714, "Redstone", true),

new ItemSeedRod(0xEEEEEE, "Blaze Rod", false),

};

 

Posted

If you hold off the array assignment until inside your preInit method, then you can have the seedRod constructor do its own registration for each instance. It's the style I use for my items and blocks, but it's a matter of taste (other people love initializers). YMMV.

 

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Posted

For my mod Armed, I use a Map to cache a string key and an item type value - string being both the key and unlocalized name for the item. I add new elements to the map in a static block (the Map is a constant) and have methods that iterate through the Map, using a lambda iterator ( Java 8 ), registering the item, setting the unlocalized name with the Map's key, and finally initializing its render. (Registering called on Common, rendering called on Client). That is just how I like to do it - it's very fast when adding new instances / items by having it automatically setup. There are many other ways you can do this, this is a more efficient way.

 

EDIT:

Your looking to do something like this with your code, considering your using an array. You should not use exactly this code, I wrote this quick just to give you an example - reason is because it gets an item from the array based on a given integer index - you're better off grabbing your item instances from an actual static instance.


private static final Item[] ITEMINSTANCES = 
	{
			new Item().setUnlocalizedName("test"),
			new Item().setUnlocalizedName("test2")
	};

public static final Item getItem(int index)
{
	return ITEMINSTANCES[index];
}

public static final void registerItemInstances()
{
	for(Item item : ITEMINSTANCES)
	{
		GameRegistry.registerItem(item, item.getUnlocalizedName().substring(5));
	}
}

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Posted

You can only use a loop if there is something "regular" (i.e. predictable or possible to calculate) about the sequence, or if all the information is already stored in a collection/array. But if you just had the items in the array but not the egg color then a loop won't help because it wouldn't be able to figure out the egg color.

 

In other words, you can't save much typing with a loop for spawn eggs because for every item you'll still need to type somewhere the unlocalized name and the egg color and associate that with each actual item. Whether you type that in the preinit handler, or within the item constructor won't avoid the fact you have to type it.

 

Now if the colors could be calculated -- like you could randomize them from a fixed seed so they always turned out the same -- then a loop makes sense.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

...

You add the GameRegistry.register(Block|Item) call to the item/block's constructor.

If you don't know what a constructor is or how to invoke a method, you need to learn Java.

Indeed... Inside the ItemSeedRod constructor, after setting unlocalized name. Where the register function needs an item, pass in "this", the constructor's way of referring to it's own new instance.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

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



×
×
  • Create New...

Important Information

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