Прежде всего, вы, вероятно, должны проверить, какого типа Object
s в массиве, перед тем как вы их приведете, так что часть, которая в данный момент имеет значение
Item item = (Item)recipeItems[j + 1][i];
в цикле, следует заменить на что-то вроде этого:
Object itemObj = recipeItems[j + 1][i];
if(itemObj instanceof Item)
{
// The current element is an Item
Item item = (Item)recipeItems[j + 1][i];
craftingmanager.addRecipe(new ItemStack(item), new Object[]
{
recipePatterns[j], Character.valueOf('#'), Item.stick, Character.valueOf('X'), obj
});
}
else if(itemObj instanceof Block)
{
// The current element is a Block
Block block = (Block)recipeItems[j + 1][i];
craftingmanager.addRecipe(new ItemStack(block), new Object[]
{
recipePatterns[j], Character.valueOf('#'), Item.stick, Character.valueOf('X'), obj
});
}
else
{
// The current element is none of the types above
// TODO Throw an exception, print a message or quit the game
}
потому что, я почти уверен, что вы не можете разыграть Item
до Block
. Это не решит эту проблему, это был просто совет, потому что код, который вы использовали там раньше, может вызвать ошибки в будущем.
Решение вашей текущей проблемы - это то, что Mat и nicholas.hauschild уже ответили. Первые два элемента массива recipeItems
(recipeItems[0]
и recipeItems[1]
) имеют 6 элементов, но остальные элементы имеют только 5 элементов. В вашем цикле вы берете длину только первого элемента и используете его для циклического прохождения остальных элементов, но они меньше первого.
Что произойдет, если вы попытаетесь получить доступ к элементу 6 в массиве из 5 элементов?
Вы можете заменить цикл на что-то вроде этого:
for(int i = 0; i < recipeItems.length - 1; i++)
{
for(int j = 0; j < recipeItems[i].length; j++)
{
Object obj = recipeItems[0][j];
Object itemObj = recipeItems[i + 1][j];
if(itemObj instanceof Item)
{
// The current element is an Item
Item item = (Item)recipeItems[j + 1][i];
craftingmanager.addRecipe(new ItemStack(item), new Object[]
{
recipePatterns[j], Character.valueOf('#'), Item.stick, Character.valueOf('X'), obj
});
}
else if(itemObj instanceof Block)
{
// The current element is a Block
Block block = (Block)recipeItems[j + 1][i];
craftingmanager.addRecipe(new ItemStack(block), new Object[]
{
recipePatterns[j], Character.valueOf('#'), Item.stick, Character.valueOf('X'), obj
});
}
else
{
// The current element is none of the types above
// TODO Throw an exception, print a message or quit the game
}
}
}
Надеюсь, это поможет!