Development Assistance Caused by: java.lang.NumberFormatException: For input string: "§01"

Discussion in 'Plugin Help/Development/Requests' started by ICostaEx, Dec 21, 2014.

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

    ICostaEx

    I am updating a plugin i made and i keep getting this error....


    Code:
    Caused by: java.lang.NumberFormatException: For input string: "§01"
    My Code:

    Code:
    package me.ICostaEx.Shop2;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.Server;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.block.Chest;
    import org.bukkit.block.Sign;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.block.SignChangeEvent;
    import org.bukkit.event.inventory.InventoryType;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    
    public class InteractionListener
      implements Listener
    {
      Material D_Block = Material.DIAMOND_BLOCK;
      Material R_Block = Material.REDSTONE_BLOCK;
      Material E_Block = Material.EMERALD_BLOCK;
      private final Shop2 plugin;
     
      public InteractionListener(Shop2 pl)
      {
        this.plugin = pl;
      }
      private String nameParse(Material m){
    
      switch (m){
      case DIAMOND_BLOCK:
      return "Diamond (b)";
      case EMERALD_BLOCK:
      return "Emerald (b)";
      case REDSTONE_BLOCK:
    return "Redstone (b)";
      case IRON_CHESTPLATE:
    return "Iron (c)";
      case DIAMOND_CHESTPLATE:
    return "Diamond (c)";
      case DIAMOND_LEGGINGS:
    return "Diamond (l)";
      case DIAMOND_HELMET:
    return "Diamond (h)";
      case DIAMOND_BOOTS:
    return "Diamond (s)";
      case ENCHANTMENT_TABLE:
    return "Enchant (t)";
      case BREWING_STAND:
    return "Brewing (s)";
      case PUMPKIN_PIE:
    return "Pumpkin (p)";
      case SEA_LANTERN:
    return "Lantern (s)";
      case ARMOR_STAND:
    return "Stand (a)";
      case BANNER:
    return "Banner (a)";
      default:
      return  m.name();
      }
      }
      private Material materialParse(String s){
      switch(s){
      case "Diamond (b)":
      return Material.DIAMOND_BLOCK;
        case "Redstone (b)":
      return Material.REDSTONE_BLOCK;
        case "Emerald (b)":
      return Material.EMERALD_BLOCK;
        case "Iron (c)":
      return Material.IRON_CHESTPLATE;
        case "Diamond (c)":
      return Material.DIAMOND_CHESTPLATE;
        case "Diamond (l)":
      return Material.DIAMOND_LEGGINGS;
        case "Diamond (s)":
      return Material.DIAMOND_BOOTS;
        case "Diamond (h)":
      return Material.DIAMOND_HELMET;
        case "Enchant (t)":
      return Material.ENCHANTMENT_TABLE;
        case "Brewing (s)":
      return Material.BREWING_STAND;
        case "Pumpkin (p)":
      return Material.PUMPKIN_PIE;
        case "Lantern (s)":
      return Material.SEA_LANTERN;
        case "Stand (a)":
      return Material.ARMOR_STAND;
        case "Banner (a)":
      return Material.BANNER;
     
      default:
      return Material.getMaterial(s);
      }
      }
      @EventHandler
      public void onPlacement(SignChangeEvent event)
      {
        if ((event.getBlock().getType() == Material.WALL_SIGN) || (event.getBlock().getType() == Material.SIGN_POST))
        {
          if (event.getLine(0).equalsIgnoreCase(ChatColor.AQUA + this.plugin.getConfig().getString("admin_shop_owner"))) {
            event.setCancelled(true);
          }
          if (((event.getLine(0).equalsIgnoreCase("sell")) || (event.getLine(0).equalsIgnoreCase("adminsell2"))) &&
            (event.getLine(1).matches("^[0-9]+:[0-9]+")))
          {
            int price = Integer.parseInt(event.getLine(1).split(":")[0]);
            int quantity = Integer.parseInt(event.getLine(1).split(":")[1]);
            if (!event.getLine(2).isEmpty())
            {
              Material material = materialParse(event.getLine(2));
              if (material == null) {
                material = Material.getMaterial(Integer.parseInt(event.getLine(2)));
              }
              if (material != null)
              {
                event.getPlayer().sendMessage(this.plugin.getConfig().getString("sell_notice").replace("{quantity}", quantity + "").replace("{material}", material.name()).replace("{price}", price + ""));
                if (event.getLine(0).equalsIgnoreCase("adminsell2"))
                {
                  if (event.getPlayer().hasPermission("mianiteblockshop.asell"))
                  {
                    event.setLine(0, ChatColor.DARK_BLUE + this.plugin.getConfig().getString("admin_shop_owner"));
                  }
                  else
                  {
                    event.getPlayer().sendMessage(ChatColor.RED + this.plugin.getConfig().getString("no_permission"));
                    event.getBlock().breakNaturally();
                    event.setCancelled(true);
                  }
                }
                else {
                  event.setLine(0, ChatColor.AQUA + event.getPlayer().getName());
                }
                event.setLine(1, quantity + "");
                event.setLine(2, ChatColor.GREEN + nameParse(material));
                event.setLine(3, this.plugin.getConfig().getString("price_prefix") + " " + ChatColor.BOLD + price + " " + this.plugin.getConfig().getString("price_unit"));
              }
            }
          }
          /*int data = 0;
          if (Integer.parseInt(event.getLine(3)) >= 0) {
            data = Integer.parseInt(event.getLine(3));
          }
          */
        }
      }
     
      @EventHandler
      public void onInteract(PlayerInteractEvent event)
      {
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK)
        {
        Player p = event.getPlayer();
          Inventory i = this.plugin.getServer().createInventory(null, InventoryType.MERCHANT);
          p.openInventory(i);
          if ((event.getClickedBlock().getType() == Material.WALL_SIGN) || (event.getClickedBlock().getType() == Material.SIGN))
          {
            Sign sign = (Sign)event.getClickedBlock().getState();
            if (sign.getLine(0).equalsIgnoreCase(ChatColor.DARK_BLUE + this.plugin.getConfig().getString("admin_shop_owner")))
            {
              Material currency = Material.getMaterial(this.plugin.getConfig().getString("currency"));
              String author = sign.getLine(0).replace(ChatColor.DARK_BLUE + "", "");
              int quantity = Integer.parseInt(sign.getLine(1));
              if (quantity <= 0)
              {
                event.getPlayer().sendMessage(ChatColor.RED + this.plugin.getConfig().getString("bad_quantity"));
                return;
              }
              String l2=sign.getLine(2);
              l2=l2.replace(ChatColor.GREEN.toString(), "");
              String[] parsed = l2.split(":");
              Material material = materialParse(parsed[0]);
                        if (material == null)
              {
                event.getPlayer().sendMessage(ChatColor.RED + this.plugin.getConfig().getString("bad_material"));
                return;
              }
              ItemStack sold = new ItemStack(material, quantity);
    
              int price = Integer.parseInt(sign.getLine(3).replace(ChatColor.BOLD + "", "").replace(this.plugin.getConfig().getString("price_prefix"), "").replace(this.plugin.getConfig().getString("price_unit"), "").replace(" ", ""));
              if ((price >= 1) && (event.getPlayer().getInventory().contains(currency, price)))
              {
                if (!author.equalsIgnoreCase(this.plugin.getConfig().getString("admin_shop_owner")))
                {
                  Block below = sign.getWorld().getBlockAt(sign.getX(), sign.getY() - 1, sign.getZ());
                  if (below.getType() == Material.CHEST)
                  {
                    Chest chest = (Chest)below.getState();
                    Inventory chestinv = chest.getBlockInventory();
                    if (chestinv.contains(material, quantity))
                    {
                      chestinv.removeItem(new ItemStack[] { sold });
                      chestinv.addItem(new ItemStack[] { new ItemStack(currency, price) });
                    }
                    else
                    {
                      event.getPlayer().sendMessage(ChatColor.RED + this.plugin.getConfig().getString("not_enough_in_chest"));
                    }
                  }
                  else
                  {
                    event.getPlayer().sendMessage(ChatColor.RED + this.plugin.getConfig().getString("below_not_chest"));
                    return;
                  }
                }
                event.getPlayer().getInventory().removeItem(new ItemStack[] { new ItemStack(currency, price) });
                event.getPlayer().getInventory().addItem(new ItemStack[] { sold });
                event.getPlayer().sendMessage(ChatColor.GREEN + this.plugin.getConfig().getString("buy_notice").replace("{quantity}", new StringBuilder(String.valueOf(quantity)).toString()).replace("{material}", material.name()).replace("{price}", new StringBuilder().append(price).toString()));
                event.getPlayer().updateInventory();
              }
              else
              {
                event.getPlayer().sendMessage(ChatColor.RED + this.plugin.getConfig().getString("cannot_pay"));
              }
            }
          }
        }
      }
    }
    
     
  2. Offline

    teej107

    @ICostaEx The chat color character isn't a number.
     
  3. Offline

    ICostaEx

    What do you mean? nowere in my code do i have it as a number
     
  4. Offline

    mythbusterma

    Uhhh...yea you do. Also, post the entire stack trace if you want help.
     
  5. Offline

    teej107

    Stacktrace never lies!
    §01
     
  6. Offline

    ICostaEx

    Code:
    [21:29:11] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to MianiteShop v1.3
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:305) ~[spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at org.bukkit.craftbukkit.v1_8_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:226) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.PlayerInteractManager.interact(PlayerInteractManager.java:459) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:724) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:50) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:80) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_65]
        at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_65]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:683) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
    Caused by: java.lang.NumberFormatException: For input string: "§01"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.7.0_65]
        at java.lang.Integer.parseInt(Integer.java:492) ~[?:1.7.0_65]
        at java.lang.Integer.parseInt(Integer.java:527) ~[?:1.7.0_65]
        at me.ICostaEx.Shop.InteractionListener.onInteract(InteractionListener.java:113) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor78.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_65]
        at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301) ~[spigot-1.8.1-20141213a.jar:git-Spigot-612de46-07c2162]
        ... 16 more
     
  7. Offline

    Skionz

    @ICostaEx
    Code:
    int price = Integer.parseInt(event.getLine(1).split(":")[0]);
    Bam! It has a color code in it which is messing up your parsing.
     
  8. Offline

    teej107

    Skionz likes this.
  9. Offline

    ICostaEx

    I see no Color code in that line nor a line near it... this plugin worked with 1.7.10...
     
  10. Offline

    Skionz

    @ICostaEx getLine(int) returns a line. That line has a color code. Refer to the exception that was thrown if you don't believe me :p
     
  11. Offline

    stoneminer02

    As @Skionz (Sorry for qouting if you don't like it) said:
    Code:
    int price = Integer.parseInt(event.getLine(1).split(":")[0]);
    Try doing something like this if you still get the error tho:
    Code:
    String line1 = ChatColor.stripColor(event.getLine(1));
    int price = Integer.parseInt(line1.split(":")[0]);
     
  12. Offline

    timtower Administrator Administrator Moderator

    Moved to Bukkit alternatives.
     
Thread Status:
Not open for further replies.

Share This Page