0

ブロックからツールを作成しました。コードにエラーはありませんでした。ビルドをクリックしようとすると、次の端末エラーが表示されます: どうすれば修正できますか? お願いします。RecipesTools.addRecipes のコードは次のとおりです。

package net.minecraft.src;

public class RecipesTools
{
    private String recipePatterns[][] =
    {
        {
            "XXX", " # ", " # "
        }, {
            "X", "#", "#"
        }, {
            "XX", "X#", " #"
        }, {
            "XX", " #", " #"
        }
    };
    private Object recipeItems[][];

    public RecipesTools()
    {
        recipeItems = (new Object[][]
                {
                    new Object[] {
                        Block.planks, Block.cobblestone, Item.ingotIron, Item.diamond, Item.ingotGold,  Block.RadiatedStone
                    }, new Object[] {
                        Item.pickaxeWood, Item.pickaxeStone, Item.pickaxeSteel, Item.pickaxeDiamond, Item.pickaxeGold, Item.pickaxeRadiated
                    }, new Object[] {
                        Item.shovelWood, Item.shovelStone, Item.shovelSteel, Item.shovelDiamond, Item.shovelGold
                    }, new Object[] {
                        Item.axeWood, Item.axeStone, Item.axeSteel, Item.axeDiamond, Item.axeGold
                    }, new Object[] {
                        Item.hoeWood, Item.hoeStone, Item.hoeSteel, Item.hoeDiamond, Item.hoeGold
                    }
                });
    }

    public void addRecipes(CraftingManager craftingmanager)
    {
        for (int i = 0; i < recipeItems[0].length; i++)
        {
            Object obj = recipeItems[0][i];
            for (int j = 0; j < recipeItems.length - 1; j++)
            {
                Item item = (Item)recipeItems[j + 1][i];
                craftingmanager.addRecipe(new ItemStack(item), new Object[]
                        {
                            recipePatterns[j], Character.valueOf('#'), Item.stick, Character.valueOf('X'), obj
                        });
            }
        }

        craftingmanager.addRecipe(new ItemStack(Item.shears), new Object[]
                {
                    " #", "# ", Character.valueOf('#'), Item.ingotIron
                });
    }
}

編集 また、Eclipeに1024MBのRAMを与え、.Minecraftフォルダーを削除しました。

CONFLICT @ 22
27 achievements
Exception in thread "main" java.lang.ExceptionInInitializerError
    at net.minecraft.src.StatList.initCraftableStats(StatList.java:74)
    at net.minecraft.src.StatList.initBreakableStats(StatList.java:55)
    at net.minecraft.src.Block.<clinit>(Block.java:975)
    at net.minecraft.src.TextureWaterFX.<init>(TextureWaterFX.java:13)
    at net.minecraft.client.Minecraft.<init>(Minecraft.java:205)
    at net.minecraft.src.MinecraftImpl.<init>(MinecraftImpl.java:13)
    at net.minecraft.client.Minecraft.startMainThread(Minecraft.java:1984)
    at net.minecraft.client.Minecraft.startMainThread1(Minecraft.java:1970)
    at net.minecraft.client.Minecraft.main(Minecraft.java:2032)
    at Start.main(Start.java:25)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 5
    at net.minecraft.src.RecipesTools.addRecipes(RecipesTools.java:44)
    at net.minecraft.src.CraftingManager.<init>(CraftingManager.java:19)
    at net.minecraft.src.CraftingManager.<clinit>(CraftingManager.java:8)
    ... 10 more
4

3 に答える 3

1

recipeItems[0].lengthは 6 ですがrecipeItems[2]、次の要素は 5 つしかありません。したがって、トップレベルのループがaddRecipes間違っています。

コレクション型 (vector、list、Array...) とイテレータを使用すると、コードがより安全で読みやすくなります (IMO)。

于 2012-01-21T07:53:52.903 に答える
0

の外側のループは、の配列をaddRecipies反復処理しています。最初の子配列には、有効な項目になることを意味する 6 つの要素があります。しかし、これがすべての配列に当てはまるという誤った仮定があります。後の配列の少なくとも 1 つに 6 未満の要素が含まれています。[0]recipeItemsrecipeItems[0][5]recipeItems

最初の配列のサイズではなく、子配列のサイズを反復処理する必要があります。

于 2012-01-21T08:03:11.260 に答える