private Item createItem() throws InstantiationException,
            IllegalAccessException, ClassNotFoundException {
        Element itemDesc = dom.getDocumentElement();

        item = (Item) Class.forName(
                Item.class.getPackage().getName() + '.'
                        + itemDesc.getAttribute("type")).newInstance();

        Color color = null;
        Rarity rarity = Rarity.MUNDANE;
        try {
            color = ReflectionUtil.stringToStaticClassField(
                    itemDesc.getAttribute("color"), Color.class);
            rarity = ReflectionUtil.stringToStaticClassField(
                    itemDesc.getAttribute("rarity"), Rarity.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

        String value = itemDesc.getAttribute("value");
        if (value != null && value != "" && !value.equals("random")) {
            item.setValue(Integer.parseInt(value));
        }

        item.setName(itemDesc.getAttribute("name"));
        item.setColor(color);
        item.setRarity(rarity);

        Element onUseElement = (Element) dom.getDocumentElement()
                .getElementsByTagName("onUse").item(0);

        if (onUseElement != null) {
            String temp = onUseElement.getAttribute("cooldown");
            if (temp != "") {
                item.setCooldown(Integer.parseInt(temp));
            }

            temp = onUseElement.getAttribute("charges");
            if (temp != "") {
                item.setCharges(temp);
            }
        }

        for (Action action : getActions(dom.getDocumentElement(), "onUse")) {
            item.addUseAction(action);
        }

        for (Action action : getActions(dom.getDocumentElement(), "onPickedUp")) {
            item.addPickedUpAction(action);
        }

        return item;
    }