Jump to content

Ore Dictionary Question


ShetiPhian

Recommended Posts

My block uses the texture of the planks used in the recipe. This requires the planks used to be the same ones.

I want to support mod added planks, and for the most part it already works well.

 

The issue I've ran into involves planks registered with OreDictionary.WILDCARD_VALUE as its damage.

 

If I use it as is, mixed planks can be used and I get several recipes with an output only uses the first plank texture.

If I use only the first plank I get rid of the extra recipes but still only have one of the many planks used.

Adding all 16 metadata results in many extra unused blocks getting a recipe.

 

What worked well (at first) was getting the sub items from the item. This worked perfectly..... until I launched a server and realized getSubItems is client side only :(

 

What I'm currently doing is checking the unlocalized name:

List<ItemStack> stackList = new ArrayList<ItemStack>();
if (dictionaryItemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
    List<String> stackNames = new ArrayList<String>();
    for (byte metadata = 0; metadata < 16; metadata++) {
        ItemStack singleItem = dictionaryItemStack.copy();
        singleItem.setItemDamage(metadata);
        String stackName = singleItem.getUnlocalizedName();
        if (!stackNames.contains(stackName)) {
            stackNames.add(stackName);
            stackList.add(singleItem);
        }
    }
} else {
    stackList.add(dictionaryItemStack);
}

 

This results in a few extra recipes if the metadata has a different name but is unused, and could result in missing ones due to having the same name.

 

I looked at using ItemCraftedEvent but I don't seem to be able to change the output until crafting is attempted, this results in the output icon not displaying changes and gives the appearance mixed planks can be used.

 

So basically is there a way to use the Ore Dictionary in recipes and flag blocks that must be the same? or is there a cleaner/better way to do what I'm doing now?

 

EDIT:

My other option is making a crafting block that would use only the one planks.

And the more I think about it this might be the better way to go, because adding many mods with several planks would result in a massive amount of recipes.

Link to comment
Share on other sites

It's actually very simple.

 

OreDictionary.registerOre("toolShovel", new ItemStack(Items.diamond_shovel, 1, OreDictionary.WILDCARD_VALUE));

 

This registers any 'ore' of this type with any itemdamage to the common denominator "toolshovel".

 

you can use it simply by calling

"toolShovel"

 

for a particular slot.

Example:

GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Pruner, 1),
		"I I", " F ", "P P", 'P', new ItemStack(BasePlank, 1), 'I', "ingotIron", 'F', "gemDiamond"
		));

 

Once you load up minecraft and, for instance, use NEI to look at the recipes you'll see one with the iron and diamond changing with other items registered to the same denominator.

Technically you could use your planks with any itemdamage to create this item then but if they don't exist, you can't use them.

 

I hope this helps.

Link to comment
Share on other sites

Looks like the wall of text caused the problem to be lost :)

 

Say I have a recipe that looks like this

 

Plank | Plank | Plank

Stick | Plank | Plank

 

With a normal recipe just using "plankWood" works perfectly, (in fact I make heavy use of it in my other recipes)

 

But what I'm trying to do is restrict mixing (because the planks used change the look of the block), the three planks on the top must be the same type, and the two on the bottom must be the same type. But what planks you use for each type are up to you.

 

I needed to register a recipe for every combo, and to do that and support mods I needed to grab the list of planks from the ore dictionary.

While getting "plankWood" from the OreDictionary does give me all of the planks, any registered using the wild card value are merged into one item.

 

The issue I was having was getting the separate planks from the merged item.

The method that worked the best was client only, and the alternatives had several flaws.

 

 

I did decide on making my own crafting block:

- it gets around my issue

- is simple to use

- doesn't register a ton of recipes.

Seriously with forestry in I was just over 1000 per block type and I had two. I don't know what Minecraft's limit is but a single mod adding over 2000 recipes sounds wrong :)

Link to comment
Share on other sites

My apologies, it seems I misread your problem.

 

Another solution is a custom craftingHandler.

It does check everytime something is crafted but the impact is really negligible.

It suffices that everytime something is crafted you check if the first slot contains a plank with an if and then look at the other matrixslots inside. Once you have checked that the planks are indeed the same, pass the metadata to the crafted item or if isn't the same, cancel the crafting.

Link to comment
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.
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.