Bukkit/Bukkit — pull request #973 by tehbeard (2013-12-02 00:32:05+00:00)
Title: [B] Add string Id mapping to Material, Adds BUKKIT-4944

**The Issue:**

Bukkit lacks a way to map the Material enum to the new string Ids in 1.7 (minecraft:cobblestone).
This makes the Bukkit "vanilla" /give command differ from vanilla in two game breaking ways:
1. Does not respect the minecraft: prefix.
2. The current method of matching against the Material name breaks due to significant differences
in naming convention (as an example, Material.IRON_BARDING represents the item "minecraft:iron_horse_armor")

**Justification for this PR:**

This PR makes the /give command behave similar to the vanilla one, and allows developers to make use of
the string Ids in commands or configuration in place of Bukkit specific Material names or integer ids.

**PR Breakdown:**

This PR does the following:
* Adds a stringId field to Material, constructors to set it and a getter to retrieve a Material's stringId.
* Adds two static methods to Material, getItemMaterial(String) and getBlockMaterial(String). These return the
material associated with the string Id, in it's correct form (see below for examples to illustrate this.)
* Modifies the /give command to use the stringId for lookup and for tab completion.

**Example of difference between getItemMaterial and getBlockMaterial.**
As an example of why these two static methods are needed:
Sugarcane occupies two ids, block form (id 83( and item form (id 338)
Vanilla maps both ids to "minecraft:reeds".

`Material.getItemMaterial("minecraft:reeds")` will return the material associated with the item form, Material.SUGAR_CANE. This is useful for code concerning ItemStacks/inventories.

`Material.getIBlockMaterial("minecraft:reeds")` will return the material associated with the block form,Material.SUGAR_CANE_BLOCK, this is the Material needed to place sugarcane blocks in a world, but cannot be placed in a inventory.

In the case of cobblestone and other blocks that are also there item, both methods return the same Material. For item only materials, getBlockMaterial will return null.

**JIRA Ticket:** BUKKIT-4944