Getting different item names?

Discussion in 'Plugin Development' started by sgavster, Oct 30, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    sgavster

    Hi everyone! I was wondering how I could do something like what essentials does: You can do something like '/i dpick' and it gives you a DIAMOND_PICKAXE. I can't seem to figure it out. I was gonna do something like

    Code:java
    1. public ItemStack getMaterial(String args, Player p, int amount)
    2. {
    3. if(args.equalsIgnoreCase("cobble"))
    4. {
    5. return new ItemStack(Material.COBBLESTONE, amount);
    6. }
    7. else if(args.equalsIgnoreCase("dpick"))
    8. {
    9. return new ItemStack(Material.DIAMOND_PICKAXE);
    10. }
    11. }
    12. }

    But it'd take wayyy to long.

    Thanks!
     
  2. Offline

    RealDope

    To some extent you can use:
    Code:JAVA
    1.  
    2. Material m = Material.matchMaterial(string);
    3.  


    But I don't think that will pick up things like "dpick".
     
  3. Offline

    sgavster

    iBo3oF But it makes no sense at all..
    PHP:
    package com.earth2me.essentials;
     
    import static com.earth2me.essentials.I18n._;
    import com.earth2me.essentials.utils.NumberUtil;
    import com.earth2me.essentials.utils.StringUtil;
    import java.util.*;
    import java.util.regex.Pattern;
    import net.ess3.api.IEssentials;
    import org.bukkit.Material;
    import org.bukkit.inventory.ItemStack;
     
     
    public class 
    ItemDb implements IConfnet.ess3.api.IItemDb
    {
            private final 
    transient IEssentials ess;
     
            public 
    ItemDb(final IEssentials ess)
            {
                    
    this.ess ess;
                    
    file = new ManagedFile("items.csv"ess);
            }
            private final 
    transient Map<StringIntegeritems = new HashMap<StringInteger>();
            private final 
    transient Map<ItemData, List<String>> names = new HashMap<ItemData, List<String>>();
            private final 
    transient Map<ItemDataStringprimaryName = new HashMap<ItemDataString>();
            private final 
    transient Map<StringShortdurabilities = new HashMap<StringShort>();
            private final 
    transient ManagedFile file;
            private final 
    transient Pattern splitPattern Pattern.compile("[:+',;.]");
     
            @
    Override
            
    public void reloadConfig()
            {
                    final List<
    Stringlines file.getLines();
     
                    if (
    lines.isEmpty())
                    {
                            return;
                    }
     
                    
    durabilities.clear();
                    
    items.clear();
                    
    names.clear();
                    
    primaryName.clear();
     
                    for (
    String line lines)
                    {
                            
    line line.trim().toLowerCase(Locale.ENGLISH);
                            if (
    line.length() > && line.charAt(0) == '#')
                            {
                                    continue;
                            }
     
                            final 
    String[] parts line.split("[^a-z0-9]");
                            if (
    parts.length 2)
                            {
                                    continue;
                            }
     
                            final 
    int numeric Integer.parseInt(parts[1]);
                            final 
    short data parts.length && !parts[2].equals("0") ? Short.parseShort(parts[2]) : 0;
                            
    String itemName parts[0].toLowerCase(Locale.ENGLISH);
     
                            
    durabilities.put(itemNamedata);
                            
    items.put(itemNamenumeric);
     
                            
    ItemData itemData = new ItemData(numericdata);
                            if (
    names.containsKey(itemData))
                            {
                                    List<
    StringnameList names.get(itemData);
                                    
    nameList.add(itemName);
                                    
    Collections.sort(nameList, new LengthCompare());
                            }
                            else
                            {                               
                                    List<
    StringnameList = new ArrayList<String>();
                                    
    nameList.add(itemName);
                                    
    names.put(itemDatanameList);
                                    
    primaryName.put(itemDataitemName);
                            }
                    }
            }
     
            @
    Override
            
    public ItemStack get(final String id, final int quantitythrows Exception
            
    {
                    final 
    ItemStack retval get(id.toLowerCase(Locale.ENGLISH));
                    
    retval.setAmount(quantity);
                    return 
    retval;
            }
     
            @
    Override
            
    public ItemStack get(final String idthrows Exception
            
    {
                    
    int itemid 0;
                    
    String itemname null;
                    
    short metaData 0;
                    
    String[] parts splitPattern.split(id);
                    if (
    id.matches("^\\d+[:+',;.]\\d+$"))
                    {
                            
    itemid Integer.parseInt(parts[0]);
                            
    metaData Short.parseShort(parts[1]);
                    }
                    else if (
    NumberUtil.isInt(id))
                    {
                            
    itemid Integer.parseInt(id);
                    }
                    else if (
    id.matches("^[^:+',;.]+[:+',;.]\\d+$"))
                    {
                            
    itemname parts[0].toLowerCase(Locale.ENGLISH);
                            
    metaData Short.parseShort(parts[1]);
                    }
                    else
                    {
                            
    itemname id.toLowerCase(Locale.ENGLISH);
                    }
     
                    if (
    itemname != null)
                    {
                            if (
    items.containsKey(itemname))
                            {
                                    
    itemid items.get(itemname);
                                    if (
    durabilities.containsKey(itemname) && metaData == 0)
                                    {
                                            
    metaData durabilities.get(itemname);
                                    }
                            }
                            else if (
    Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)) != null)
                            {
                                    
    itemid Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)).getId();
                                    
    metaData 0;
                            }
                            else
                            {
                                    throw new 
    Exception(_("unknownItemName"id));
                            }
                    }
     
                    final 
    Material mat Material.getMaterial(itemid);
                    if (
    mat == null)
                    {
                            throw new 
    Exception(_("unknownItemId"itemid));
                    }
                    final 
    ItemStack retval = new ItemStack(mat);
                    
    retval.setAmount(mat.getMaxStackSize());
                    
    retval.setDurability(metaData);
                    return 
    retval;
            }
     
            @
    Override
            
    public List<ItemStackgetMatching(User userString[] argsthrows Exception
            
    {
                    List<
    ItemStackis = new ArrayList<ItemStack>();
     
                    if (
    args.length 1)
                    {
                            
    is.add(user.getItemInHand());
                    }
                    else if (
    args[0].equalsIgnoreCase("hand"))
                    {
                            
    is.add(user.getItemInHand());
                    }
                    else if (
    args[0].equalsIgnoreCase("inventory") || args[0].equalsIgnoreCase("invent") || args[0].equalsIgnoreCase("all"))
                    {
                            for (
    ItemStack stack user.getInventory().getContents())
                            {
                                    if (
    stack == null || stack.getType() == Material.AIR)
                                    {
                                            continue;
                                    }
                                    
    is.add(stack);
                            }
                    }
                    else if (
    args[0].equalsIgnoreCase("blocks"))
                    {
                            for (
    ItemStack stack user.getInventory().getContents())
                            {
                                    if (
    stack == null || stack.getTypeId() > 255 || stack.getType() == Material.AIR)
                                    {
                                            continue;
                                    }
                                    
    is.add(stack);
                            }
                    }
                    else
                    {
                            
    is.add(get(args[0]));
                    }
                   
                    if (
    is.isEmpty() || is.get(0).getType() == Material.AIR)
                    {
                            throw new 
    Exception(_("itemSellAir"));
                    }
                   
                    return 
    is;
            }
     
            @
    Override
            
    public String names(ItemStack item)
            {
                    
    ItemData itemData = new ItemData(item.getTypeId(), item.getDurability());
                    List<
    StringnameList names.get(itemData);
                    if (
    nameList == null)
                    {
                            
    itemData = new ItemData(item.getTypeId(), (short)0);
                            
    nameList names.get(itemData);
                            if (
    nameList == null)
                            {
                                    return 
    null;
                            }
                    }
     
                    if (
    nameList.size() > 15)
                    {
                            
    nameList nameList.subList(014);
                    }
                    return 
    StringUtil.joinList(", "nameList);
            }
           
    @
    Override
            
    public String name(ItemStack item)
            {
                    
    ItemData itemData = new ItemData(item.getTypeId(), item.getDurability());
                    
    String name primaryName.get(itemData);
                    if (
    name == null)
                    {
                            
    itemData = new ItemData(item.getTypeId(), (short)0);
                            
    name primaryName.get(itemData);
                            if (
    name == null)
                            {
                                    return 
    null;
                            }
                    }
                    return 
    name;
            }
           
            static class 
    ItemData
            
    {
                    final private 
    int itemNo;
                    final private 
    short itemData;
     
                    
    ItemData(final int itemNo, final short itemData)
                    {
                            
    this.itemNo itemNo;
                            
    this.itemData itemData;
                    }
     
                    public 
    int getItemNo()
                    {
                            return 
    itemNo;
                    }
     
                    public 
    short getItemData()
                    {
                            return 
    itemData;
                    }
     
                    @
    Override
                    
    public int hashCode()
                    {
                            return (
    31 itemNo) ^ itemData;
                    }
     
                    @
    Override
                    
    public boolean equals(Object o)
                    {
                            if (
    == null)
                            {
                                    return 
    false;
                            }
                            if (!(
    instanceof ItemData))
                            {
                                    return 
    false;
                            }
                            
    ItemData pairo = (ItemData)o;
                            return 
    this.itemNo == pairo.getItemNo()
                                      && 
    this.itemData == pairo.getItemData();
                    }
            }
     
     
            class 
    LengthCompare implements java.util.Comparator<String>
            {
                    public 
    LengthCompare()
                    {
                            
    super();
                    }
     
                    @
    Override
                    
    public int compare(String s1String s2)
                    {
                            return 
    s1.length() - s2.length();
                    }
            }
    }
    Bump.
     
  4. hard to understand, but it makes a little.
     
Thread Status:
Not open for further replies.

Share This Page