在java中键入不匹配错误

时间:2011-10-12 01:11:24

标签: java minecraft

我在以下代码中一直遇到第3行的类型不匹配错误:

    try
    {
      int l = item.b(itemstack);
      String s = itemstack.l() + "@" + l;
      if (!hashset.contains(s))
      {
        list.add(itemstack);
        hashset.add(s);
      }
    }

我不知道如何解决这个问题(使用IDE的建议打破了代码的功能)。

以下是我正在处理的完整类文件:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.text.FieldPosition;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.minecraft.client.Minecraft;

public class TMIUtils
{
  public static final String CONFIG_FILENAME = "TooManyItems.txt";

  public static Minecraft getMinecraft()
  {
    try
    {
      Field field = Minecraft.class.getDeclaredField("a");
      field.setAccessible(true);
      return (Minecraft)field.get(null);
    }
    catch (IllegalAccessException illegalaccessexception)
    {
      illegalaccessexception.printStackTrace();
    }
    catch (NoSuchFieldException nosuchfieldexception)
    {
      nosuchfieldexception.printStackTrace();
    }
    return null;
  }

  public static void loadPreferences(TMIConfig tmiconfig)
  {
    try
    {
      Map map = tmiconfig.getSettings();
      File file = new File(Minecraft.a("minecraft"), "TooManyItems.txt");
      if (file.exists())
      {
        BufferedReader bufferedreader = new BufferedReader(new FileReader(file));
        String s;
        while ((s = bufferedreader.readLine()) != null)
        {
          String[] as = s.split(":", 2);
          if ((as.length > 1) && (map.containsKey(as[0])))
          {
            map.put(as[0], as[1]);
          }
        }
        bufferedreader.close();
        for (int i = 0; i < tmiconfig.getNumSaves(); i++)
        {
          tmiconfig.decodeState(i, (String)map.get("save" + (i + 1)));
        }
      }

    }
    catch (Exception exception)
    {
      System.out.println(exception);
    }
  }

  public static void savePreferences(TMIConfig tmiconfig)
  {
    try
    {
      Map map = tmiconfig.getSettings();
      File file = new File(Minecraft.a("minecraft"), "TooManyItems.txt");
      PrintWriter printwriter = new PrintWriter(new FileWriter(file));
      String s;
      for (Iterator iterator = map.keySet().iterator(); iterator.hasNext(); printwriter.println(s + ":" + (String)map.get(s)))
      {
        s = (String)iterator.next();
      }

      printwriter.close();
    }
    catch (Exception exception)
    {
      System.out.println(exception);
    }
  }

  public static void loadItems(TMIConfig tmiconfig)
  {
    List list = tmiconfig.getItems();
    list.clear();
    sv[] aitem = sv.f;
    int i = aitem.length;
    int WiringID = 0;
    try
    {
      Class.forName("mod_RedPowerWiring");
      WiringID = ((Integer)ModLoader.getPrivateValue(mod_RedPowerWiring.class, null, "WiringID")).intValue();
    }
    catch (Exception exception)
    {
    }

    for (int j = 0; j < i; j++)
    {
      sv item = aitem[j];
      if (item == null)
      {
        continue;
      }
      TMIConfig _tmp = tmiconfig;
      if (!TMIConfig.isItemIncluded(item.br))
      {
        continue;
      }
      HashSet hashset = new HashSet();

      short byte0 = (short)(tmiconfig.areDamageVariantsShown() ? 32767 : 0);
      for (int k = 0; k <= byte0; k++)
      {
        ul itemstack = new ul(item, item.d(), k);
        if ((k > 15) && (item.br != WiringID))
        {
          break;
        }
        try
        {
          int l = item.b(itemstack);
          String s = itemstack.l() + "@" + l;
          if (!hashset.contains(s))
          {
            list.add(itemstack);
            hashset.add(s);
          }
        }
        catch (NullPointerException nullpointerexception)
        {
        }
        catch (IndexOutOfBoundsException indexoutofboundsexception)
        {
        }
      }
    }
  }

  public static void safeReportException(Exception exception) {
    try {
      SimpleDateFormat simpledateformat = new SimpleDateFormat(".yyyyMMdd.HHmmss");
      StringBuffer stringbuffer = new StringBuffer();
      simpledateformat.format(new Date(), stringbuffer, new FieldPosition(1));
      String s = "tmi" + stringbuffer.toString() + ".txt";
      File file = new File(Minecraft.a("minecraft"), s);
      PrintWriter printwriter = new PrintWriter(new FileWriter(file));
      printwriter.print("[code]TMI Version: 1.7.2 2011-07-01\n");
      exception.printStackTrace(printwriter);
      printwriter.println("[/code]");
      printwriter.close();
      getMinecraft().v.a("Error written to " + s);
    }
    catch (Exception exception1)
    {
      System.out.println("Error during safeReportException:");
      exception1.printStackTrace();
    }
  }

  public static String itemDisplayName(ul itemstack)
  {
    try
    {
      String s = wv.a().b(itemstack.l());
      if (!s.trim().equals(""))
      {
        return s;
      }
    } catch (NullPointerException nullpointerexception) {
    }
    return "Unnamed";
  }

  public static boolean isValidItem(ul itemstack)
  {
    return (itemstack == null) || ((itemstack.c >= 0) && (itemstack.c < sv.f.length) && (sv.f[itemstack.c] != null));
  }

  public static ul getValidItem(ul itemstack)
  {
    if (isValidItem(itemstack))
    {
      return itemstack;
    }

    return new ul(lr.at);
  }

  public static String getValidItemDisplayName(ul itemstack)
  {
    if (isValidItem(itemstack))
    {
      return itemDisplayName(itemstack);
    }

    return "Undefined Item";
  }

  public static void deleteHeldItem()
  {
    getMinecraft().h.as.b((ul)null);
  }

  public static ul getHeldItem()
  {
    return getMinecraft().h.as.j();
  }

  public static void giveStack(ul itemstack, TMIConfig tmiconfig)
  {
    giveStack(itemstack, tmiconfig, itemstack.a);
  }

  public static void giveStack(ul itemstack, TMIConfig tmiconfig, int i)
  {
    ul itemstack1 = copyStack(itemstack, i);
    Minecraft minecraft = getMinecraft();
    if (TMIConfig.isMultiplayer())
    {
      NumberFormat numberformat = NumberFormat.getIntegerInstance();
      numberformat.setGroupingUsed(false);
      MessageFormat messageformat = new MessageFormat((String)tmiconfig.getSettings().get("give-command"));
      messageformat.setFormatByArgumentIndex(1, numberformat);
      messageformat.setFormatByArgumentIndex(2, numberformat);
      messageformat.setFormatByArgumentIndex(3, numberformat);
      Object[] aobj = { minecraft.h.l, Integer.valueOf(itemstack1.c), Integer.valueOf(itemstack1.a), Integer.valueOf(itemstack1.i()) };

      minecraft.h.a(messageformat.format(aobj));
    }
    else {
      minecraft.h.as.a(itemstack1);
    }
  }

  public static ul copyStack(ul itemstack, int i)
  {
    if (itemstack == null)
    {
      return null;
    }

    itemstack.a += i;
    return itemstack.a(i);
  }

  public static ul copyStack(ul itemstack)
  {
    if (itemstack == null)
    {
      return null;
    }

    return copyStack(itemstack, itemstack.a);
  }

  public static void updateUnlimitedItems()
  {
    if ((TMIConfig.isMultiplayer()) || (!TMIConfig.getInstance().isEnabled()))
    {
      return;
    }
    ul[] aitemstack = getMinecraft().h.as.a;
    int i = aitemstack.length;
    for (int j = 0; j < i; j++)
    {
      ul itemstack1 = aitemstack[j];
      if (itemstack1 == null)
      {
        continue;
      }
      if ((itemstack1.a < 0) || (itemstack1.a > 64))
      {
        itemstack1.a = 111;
      }
      if (itemstack1.i() >= 0)
        continue;
      setStackDamage(itemstack1, -32000);
    }

    ul itemstack = getHeldItem();
    if ((itemstack != null) && (itemstack.a > 64))
    {
      itemstack.a = -1;
    }
  }

  public static void setStackDamage(ul itemstack, int i)
  {
    try
    {
      Field[] afield = ul.class.getDeclaredFields();
      int j = afield.length;
      int k = 0;

      while (k < j)
      {
        Field field = afield[k];
        if (field.getName().equals("d"))
        {
          field.setAccessible(true);
          field.setInt(itemstack, i);
          break;
        }
        k++;
      }
    }
    catch (Exception exception)
    {
      System.out.println(exception);
    }
  }
}

1 个答案:

答案 0 :(得分:2)

是哪条线?

int l = item.b(itemstack);

如果是,这意味着无法将item.b(itemstack)分配给int并导致错误,因为可能会丢失精度。这意味着item.b(itemstack)可能是long

检查item.b(itemstack)返回的内容。然后,如果确实返回long,请将l的类型更改为long

long l = item.b(itemstack);