Ello, was playing around on this old source and got bored so I added an item db lookup type command for those of us who are too lazy to go to itemdb.biz 
Thought someone out there might enjoy it as well, nothing much just a simple command.
Uses:
::itemn dragon dag $noted #400
::itemn dragon $list
Looks like this (kinda color coded)

Can easily be converted to whatever source you use I guess if you don't like your current version of it. Cheers m8.
Code:
package com.xeno.packethandler.commands;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.xeno.model.ItemDefinition;
import com.xeno.model.player.Player;
/**
* <b>Creation:</b> 1/24/16<br><br>
* Item search and spawn command.
* @author Phillip
*/
public class ItemSearch implements Command {
/**
* Conducts a search from the database by name given.
* @param spawn If the first result should be spawned.
* @param name The given attributes for finding the item.
*/
private void search(Player player, String... name) {
StringBuilder sb = new StringBuilder("");
int quantitySpecification = 1;
boolean noted = false;
boolean listResults = false;
for (int i = 0; i < name.length; i++) {
if (name[i].startsWith("#")) {
quantitySpecification = Integer.valueOf(name[i].substring(1));
continue;
} else if (name[i].equals("$noted")) {
noted = true;
continue;
} else if (name[i].equals("$list")) {
listResults = true;
continue;
}
sb.append(name[i] + " ");
}
System.out.println("Search Terms: Contains '" + sb.toString().trim() + "' Qty: " + quantitySpecification + " Noted: " + noted + " Listing Results: " + listResults);
List<ItemDefinition> list = find(sb.toString().trim());
for (Iterator<ItemDefinition> iterator = list.iterator(); iterator.hasNext();) {
ItemDefinition def = iterator.next();
if (def == null)
continue;
if (!listResults) {
player.getActionSender().sendMessage("Spawned " + quantitySpecification + "x " + def.getName() + (noted ? " (noted)" : "") + " <col=880000>(" + def.getId() + ")"
+ "</col>. Search Result: (1/" + list.size() + ")");
spawn(player, def.getId(), quantitySpecification, noted);
return;
} else {
player.getActionSender().sendMessage("Found " + def.getName() + " <col=880000>(" + def.getId() + ")");
}
System.out.println("Found " + def.getName() + " (" + def.getId() + ")");
}
}
private void spawn(Player player, int id, int amount, boolean noted) {
ItemDefinition defs = ItemDefinition.forId(id);
int finalId = noted ? (defs.isNoted() || defs.isStackable() ? id : id + 1) : id;
if (ItemDefinition.forId(finalId).getName().equals(defs.getName()))
player.getInventory().addItem(finalId, amount);
else {
player.getActionSender().sendMessage("There was a problem finding the note id for this item!");
player.getInventory().addItem(id, amount);
}
}
/**
* Returns a database lookup from the id.
*/
private List<ItemDefinition> find(String str) {
List<ItemDefinition> list = new ArrayList<>();
for (ItemDefinition def : ItemDefinition.getDefinitions().values()) {
if (def.getName().toLowerCase().contains(str.toLowerCase())) {
list.add(def);
}
}
return list;
}
@Override
public void execute(Player player, String command) {
if (command.length() < 7)
return;
command = command.substring(6);
String cmd[] = command.split(" ");
if (cmd.length < 1) {
return;
}
search(player, cmd);
}
@Override
public int minimumRightsNeeded() {
return 0;
}
}