mirror of
https://github.com/GTNewHorizons/JustEnoughCalculation.git
synced 2026-11-14 01:04:06 +00:00
Fix crash when transferring recipe
This commit is contained in:
1 parent
29565d8b16
commit
903743d0a3
6 files changed
+48
-19
No files matched your search
@@ -147,9 +147,8 @@ public class CostList {
|
||||
addCatalyst(next.one.getLabel(Recipe.IO.CATALYST));
|
||||
next = find(true);
|
||||
}
|
||||
if (count++ > 1000 && player != null) {
|
||||
player.addChatMessage(
|
||||
new ChatComponentTranslation("jecalculation.chat.max_loop"));
|
||||
if (count++ > 1000) {
|
||||
Utilities.addChatMessage(Utilities.ChatMessage.MAX_LOOP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,8 +83,14 @@ public class Adapter {
|
||||
if (resultStack != null)
|
||||
outputs.add(resultStack.items);
|
||||
|
||||
for (IAdapter adapter : adapters) {
|
||||
adapter.handleRecipe(recipe, index, inputs, outputs);
|
||||
try {
|
||||
for (IAdapter adapter : adapters) {
|
||||
adapter.handleRecipe(recipe, index, inputs, outputs);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Utilities.addChatMessage(Utilities.ChatMessage.RECIPE_TRANSFER_ERROR);
|
||||
JustEnoughCalculation.logger.error("Exception when handling recipe: " + recipe.getClass().getName());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
@@ -52,10 +53,10 @@ public class Utilities {
|
||||
// FLOAT FORMATTING
|
||||
public static char[] suffix = new char[]{'K', 'M', 'B', 'G', 'T', 'P'};
|
||||
public static DecimalFormat[] format = new DecimalFormat[]{new DecimalFormat("#."),
|
||||
new DecimalFormat("#.#"),
|
||||
new DecimalFormat("#.##"),
|
||||
new DecimalFormat("#.###"),
|
||||
new DecimalFormat("#.####")};
|
||||
new DecimalFormat("#.#"),
|
||||
new DecimalFormat("#.##"),
|
||||
new DecimalFormat("#.###"),
|
||||
new DecimalFormat("#.####")};
|
||||
|
||||
public static String cutNumber(float f, int size) {
|
||||
BiFunction<Float, Integer, String> form = (fl, len) -> format[len - 1 - (int) Math.log10(fl)].format(fl);
|
||||
@@ -153,6 +154,27 @@ public class Utilities {
|
||||
return Objects.requireNonNull(ClientUtils.mc().thePlayer);
|
||||
}
|
||||
|
||||
public static void addChatMessage(ChatMessage cm) {
|
||||
EntityClientPlayerMP player = Utilities.getPlayer();
|
||||
if (player != null)
|
||||
player.addChatMessage(new ChatComponentTranslation(cm.get()));
|
||||
}
|
||||
|
||||
public enum ChatMessage {
|
||||
MAX_LOOP, RECIPE_TRANSFER_ERROR;
|
||||
|
||||
private String get() {
|
||||
switch (this) {
|
||||
case MAX_LOOP:
|
||||
return "jecalculation.chat.max_loop";
|
||||
case RECIPE_TRANSFER_ERROR:
|
||||
return "jecalculation.chat.recipe_transfer_error";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class Relation<K, V> {
|
||||
public HashMap<Pair<K, K>, V> data = new HashMap<>();
|
||||
@@ -287,8 +309,8 @@ public class Utilities {
|
||||
|
||||
public static List<String> wrap(String s, int width) {
|
||||
return new TextWrapper().wrap(s,
|
||||
ClientUtils.mc().getLanguageManager().getCurrentLanguage().getLanguageCode(),
|
||||
i -> TextWrapper.renderer.getCharWidth(i), width);
|
||||
ClientUtils.mc().getLanguageManager().getCurrentLanguage().getLanguageCode(),
|
||||
i -> TextWrapper.renderer.getCharWidth(i), width);
|
||||
}
|
||||
|
||||
static class TextWrapper {
|
||||
|
||||
@@ -11,6 +11,7 @@ jecalculation.chat.max_loop=Sorry, it seems the calculation does not converge in
|
||||
jecalculation.chat.server_mode=The mod is not working in client mode, so you cannot open the interface without an calculator item
|
||||
jecalculation.chat.export=Selected recipes has been exported to "%s".
|
||||
jecalculation.chat.help=/jeca craft - open crafting calculator\n/jeca math - open math calculator
|
||||
jecalculation.chat.recipe_transfer_error=Calculator: Sorry, the recipe cannot be transferred to the calculator. It would be great if you could provide log files to help us fix it
|
||||
jecalculation.gui.craft.inventory_enabled=Inventory detection enabled
|
||||
jecalculation.gui.craft.inventory_disabled=Inventory detection disabled
|
||||
jecalculation.gui.craft.recipe=New recipe
|
||||
@@ -35,7 +36,7 @@ jecalculation.gui.recipe.label=Add label
|
||||
jecalculation.gui.recipe.confirm.enabled=Confirm
|
||||
jecalculation.gui.recipe.confirm.disabled=Cannot use empty string as group name
|
||||
jecalculation.gui.recipe.disamb.enabled=Open disambiguate settings
|
||||
jecalculation.gui.recipe.disamb.disabled=Disambiguation settings are only\navailable when transferring recipes\nwith multiple options from JEI
|
||||
jecalculation.gui.recipe.disamb.disabled=Disambiguation settings are only\navailable when transferring recipes\nwith multiple options from NEI
|
||||
jecalculation.gui.recipe.new=New group
|
||||
|
||||
jecalculation.gui.recipe.pick=Pick label
|
||||
@@ -45,7 +46,7 @@ jecalculation.gui.recipe.to_percent=Change to percentage
|
||||
jecalculation.gui.recipe.to_amount=Change to amount
|
||||
|
||||
jecalculation.gui.recipe.title=Recipe Editing
|
||||
jecalculation.gui.recipe.help=This interface allows you to create or edit recipes. To create one recipe, you can pick items from the JEI item list, then put it into the slots. When finished, simply click the save button. You can also fast transer recipes from JEI by clicking "+" when openning recipe view.\fTo edit one label, you can simply click it, then a toolbar will pop up to help you, where you can switch between amount and percentage mode, type the amount, or remove the label. In addition, you can use mouse scroll to quickly change the amount. Clicking the "Clear" button will remove all of the labels.\fUsing recipe fast transfer, some labels will automatically setup for you, like oreDict labels. If you do not want this behavoir, simply use "Disambiguous" button to select manually. You can also add labels by ckicking the "Add label" button. By the way, normally you shouldn't put fuzzy labels as output.\fYou can easily manage recipes using groups. Click the "New group" button, type the group name and hit the tick, you are done. The new group name will show in the top bar. If you already have groups set up and you want to use an existing one, you can use the arrows to select between them.\fWhen you are editing an existing recipe, you will have two extra buttons, "Save as" and "Delete". "Save as" allows you to save the current recipe as a new recipe, without changing the existing one. "Delete" simply allows you to delete the recipe.
|
||||
jecalculation.gui.recipe.help=This interface allows you to create or edit recipes. To create one recipe, you can pick items from the NEI item list, then put it into the slots. When finished, simply click the save button. You can also fast transer recipes from NEI by clicking "+" when openning recipe view.\fTo edit one label, you can simply click it, then a toolbar will pop up to help you, where you can switch between amount and percentage mode, type the amount, or remove the label. In addition, you can use mouse scroll to quickly change the amount. Clicking the "Clear" button will remove all of the labels.\fUsing recipe fast transfer, some labels will automatically setup for you, like oreDict labels. If you do not want this behavoir, simply use "Disambiguous" button to select manually. You can also add labels by ckicking the "Add label" button. By the way, normally you shouldn't put fuzzy labels as output.\fYou can easily manage recipes using groups. Click the "New group" button, type the group name and hit the tick, you are done. The new group name will show in the top bar. If you already have groups set up and you want to use an existing one, you can use the arrows to select between them.\fWhen you are editing an existing recipe, you will have two extra buttons, "Save as" and "Delete". "Save as" allows you to save the current recipe as a new recipe, without changing the existing one. "Delete" simply allows you to delete the recipe.
|
||||
jecalculation.gui.label.title=Label Editing
|
||||
jecalculation.gui.label.help=This interface allows you to create labels. This mod provides 4 types of labels: fluid, oreDict, placeholder and item. To create fluid and oreDict label, you can just search and pick. Item labels represent an item stack, but with fuzzy options for meta, nbt and capalibity.\fAs is indicated by the name, Placeholder labels do not hold any content. It is just a string to connect recipes. You can use it for anything, like structure or event energy. To create one, simply type in the name, then hit the tick. You can also search and pick from existing ones.
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ jecalculation.gui.craft.inventory_enabled=Обнаружение инвента
|
||||
jecalculation.gui.craft.inventory_disabled=Обнаружение инвентаря выключено
|
||||
jecalculation.gui.craft.recipe=Новый рецепт
|
||||
jecalculation.gui.craft.history=История
|
||||
jecalculation.gui.craft.help=Добро пожаловать в основной интерфейс мода. Первое, что предлагается сделать, это использовать две кнопки в правом верхнем углу для ввода рецептов, что позволяет создавать и редактировать рецепты. Все расчеты требуют записи рецептов.\fДля расчета стоимости предмета просто выберите предмет из списка предметов JEI, затем поместите его в слот в левом верхнем углу интерфейса со всеми рецептами для использования записи. Результат будет отображаться в нижних слотах интерфейса. Четыре кнопки предоставляют опции для отображения этапов ввода, вывода, катализатора и создания.\fКнопка в левом верхнем углу позволяет редактировать и получать метку. Ярлыки являются очень важной частью мода. В основном это вещи, которые могут быть помещены в слот, включая ItemStack, FluidStack, запись словаря руды или просто заполнитель. Метки используются в процессе расчета. В большинстве случаев они достаточно умны, если вы правильно их настроите.
|
||||
jecalculation.gui.craft.help=Добро пожаловать в основной интерфейс мода. Первое, что предлагается сделать, это использовать две кнопки в правом верхнем углу для ввода рецептов, что позволяет создавать и редактировать рецепты. Все расчеты требуют записи рецептов.\fДля расчета стоимости предмета просто выберите предмет из списка предметов NEI, затем поместите его в слот в левом верхнем углу интерфейса со всеми рецептами для использования записи. Результат будет отображаться в нижних слотах интерфейса. Четыре кнопки предоставляют опции для отображения этапов ввода, вывода, катализатора и создания.\fКнопка в левом верхнем углу позволяет редактировать и получать метку. Ярлыки являются очень важной частью мода. В основном это вещи, которые могут быть помещены в слот, включая ItemStack, FluidStack, запись словаря руды или просто заполнитель. Метки используются в процессе расчета. В большинстве случаев они достаточно умны, если вы правильно их настроите.
|
||||
jecalculation.gui.craft.title=Калькулятор создания
|
||||
jecalculation.gui.craft.label=Добавить метку
|
||||
jecalculation.gui.craft.step=Этапы
|
||||
@@ -35,7 +35,7 @@ jecalculation.gui.recipe.label=Добавить метку
|
||||
jecalculation.gui.recipe.confirm.enabled=Подтвердить
|
||||
jecalculation.gui.recipe.confirm.disabled=Нельзя использовать пустую строку в качестве имени группы
|
||||
jecalculation.gui.recipe.disamb.enabled=Открыть настройки устранения неоднозначности
|
||||
jecalculation.gui.recipe.disamb.disabled=Настройки неоднозначности доступны только\nпри переносе рецептов\nс несколькими вариантами из JEI
|
||||
jecalculation.gui.recipe.disamb.disabled=Настройки неоднозначности доступны только\nпри переносе рецептов\nс несколькими вариантами из NEI
|
||||
jecalculation.gui.recipe.new=Новая группа
|
||||
|
||||
#jecalculation.gui.recipe.pick=Pick label
|
||||
@@ -45,7 +45,7 @@ jecalculation.gui.recipe.new=Новая группа
|
||||
#jecalculation.gui.recipe.to_amount=Change to amount
|
||||
|
||||
jecalculation.gui.recipe.title=Редактирование рецепта
|
||||
jecalculation.gui.recipe.help=Этот интерфейс позволяет создавать или редактировать рецепты. Чтобы создать один рецепт, вы можете выбрать предметы из списка предметов JEI, а затем поместить их в слоты. Когда закончите, просто нажмите кнопку Сохранить. Вы также можете быстро пересылать рецепты из JEI, нажимая "+" при открытии представления рецептов.\fДля редактирования одной метки вы можете просто щелкнуть его, после чего появится всплывающая панель инструментов, где вы можете переключаться между режимом количества и процента, введите сумму или удалите метку. Кроме того, вы можете использовать прокрутку мыши, чтобы быстро изменить сумму. Нажатие кнопки "Очистить" удалит все метки.\fПри использовании быстрого переноса рецепта некоторые метки будут автоматически настроены для вас, например, метки словаря руды. Если вы не хотите этого поведения, просто используйте кнопку "Однозначный", чтобы выбрать вручную. Вы также можете добавить метки, нажав кнопку "Добавить метку". Кстати, обычно вы не должны помещать нечеткие метки в качестве вывода.\fВы можете легко управлять рецептами, используя группы. Нажмите кнопку "Новая группа", введите имя группы и нажмите галочку, все готово. Имя новой группы будет отображаться в верхней панели. Если у вас уже настроены группы и вы хотите использовать существующую, вы можете использовать стрелки для выбора между ними.\fПри редактировании существующего рецепта у вас будут две дополнительные кнопки: "Сохранить как" и "Удалить". "Сохранить как" позволяет сохранить текущий рецепт как новый рецепт, не меняя существующий. "Удалить" просто позволяет удалить рецепт.
|
||||
jecalculation.gui.recipe.help=Этот интерфейс позволяет создавать или редактировать рецепты. Чтобы создать один рецепт, вы можете выбрать предметы из списка предметов NEI, а затем поместить их в слоты. Когда закончите, просто нажмите кнопку Сохранить. Вы также можете быстро пересылать рецепты из NEI, нажимая "+" при открытии представления рецептов.\fДля редактирования одной метки вы можете просто щелкнуть его, после чего появится всплывающая панель инструментов, где вы можете переключаться между режимом количества и процента, введите сумму или удалите метку. Кроме того, вы можете использовать прокрутку мыши, чтобы быстро изменить сумму. Нажатие кнопки "Очистить" удалит все метки.\fПри использовании быстрого переноса рецепта некоторые метки будут автоматически настроены для вас, например, метки словаря руды. Если вы не хотите этого поведения, просто используйте кнопку "Однозначный", чтобы выбрать вручную. Вы также можете добавить метки, нажав кнопку "Добавить метку". Кстати, обычно вы не должны помещать нечеткие метки в качестве вывода.\fВы можете легко управлять рецептами, используя группы. Нажмите кнопку "Новая группа", введите имя группы и нажмите галочку, все готово. Имя новой группы будет отображаться в верхней панели. Если у вас уже настроены группы и вы хотите использовать существующую, вы можете использовать стрелки для выбора между ними.\fПри редактировании существующего рецепта у вас будут две дополнительные кнопки: "Сохранить как" и "Удалить". "Сохранить как" позволяет сохранить текущий рецепт как новый рецепт, не меняя существующий. "Удалить" просто позволяет удалить рецепт.
|
||||
jecalculation.gui.label.title=Редактирование метки
|
||||
jecalculation.gui.label.help=Этот интерфейс позволяет создавать метки. Этот мод предоставляет 4 типа меток: жидкость, словарь руды, заполнитель и предмет. Чтобы создать жидкостную и словарь руды метки, вы можете просто искать и выбирать. Метки предметво представляют стак предметов, но с нечеткими опциями для мета, nbt и возможность.\fКак указано именем, метки заполнитель не содержат никакого содержимого. Это просто строка для подключения рецептов. Вы можете использовать его для чего угодно, например, для структуры или энергии события. Чтобы создать его, просто введите имя, а затем нажмите галочку. Вы также можете искать и выбирать из существующих.
|
||||
|
||||
|
||||
@@ -11,11 +11,12 @@ jecalculation.chat.max_loop=抱歉,由于计算过程已经超过1000次迭代
|
||||
jecalculation.chat.server_mode=抱歉,本模组目前不在客户端模式下运行,所以你无法使用右击计算器以外的方式打开界面。
|
||||
jecalculation.chat.export=选中的配方已经导出到“%s”。
|
||||
jecalculation.chat.help=/jeca craft - 打开合成计算器\n/jeca math - 打开数学计算器
|
||||
jecalculation.chat.recipe_transfer_error=计算器: 抱歉,无法将该配方导出到计算器。你可以提供日志文件帮助我们修复这个问题。
|
||||
jecalculation.gui.craft.inventory_enabled=启用物品栏检测
|
||||
jecalculation.gui.craft.inventory_disabled=禁用物品栏检测
|
||||
jecalculation.gui.craft.recipe=新建配方
|
||||
jecalculation.gui.craft.history=历史记录
|
||||
jecalculation.gui.craft.help=欢迎来到本模组的主界面!首先,我建议你使用右上角的两个按钮来添加/编辑配方。配方是本模组的核心,而且,抱歉,只能手动载入。当你添加了计算所需的所有配方,你只需要从JEI物品列表中抓取所需计算的物品,放入左上角的槽位,结果就会自动显示在下方的列表中。通过下方的四个按钮,你可以在输入,额外输出,催化剂和合成步骤中切换。\f你可以使用左上角的按钮来插入标签。“标签”是本模组运算的的核心,本质上任何可以放入物品槽的东西都是一种标签。最简单的是物品栈,但是你还可以创建更高级的标签,诸如流体栈,矿物词典或者仅仅是一个占位符。在运算过程中,相同的标签会自动关联。除此之外,矿物词典标签或者带有模糊设定的物品栈标签还会智能地与其他匹配的标签相关联。
|
||||
jecalculation.gui.craft.help=欢迎来到本模组的主界面!首先,我建议你使用右上角的两个按钮来添加/编辑配方。配方是本模组的核心,而且,抱歉,只能手动载入。当你添加了计算所需的所有配方,你只需要从NEI物品列表中抓取所需计算的物品,放入左上角的槽位,结果就会自动显示在下方的列表中。通过下方的四个按钮,你可以在输入,额外输出,催化剂和合成步骤中切换。\f你可以使用左上角的按钮来插入标签。“标签”是本模组运算的的核心,本质上任何可以放入物品槽的东西都是一种标签。最简单的是物品栈,但是你还可以创建更高级的标签,诸如流体栈,矿物词典或者仅仅是一个占位符。在运算过程中,相同的标签会自动关联。除此之外,矿物词典标签或者带有模糊设定的物品栈标签还会智能地与其他匹配的标签相关联。
|
||||
jecalculation.gui.craft.title=合成计算器
|
||||
jecalculation.gui.craft.label=添加算子
|
||||
jecalculation.gui.craft.step=步骤
|
||||
@@ -35,7 +36,7 @@ jecalculation.gui.recipe.label=添加算子
|
||||
jecalculation.gui.recipe.confirm.enabled=确认
|
||||
jecalculation.gui.recipe.confirm.disabled=组名不能为空
|
||||
jecalculation.gui.recipe.disamb.enabled=打开消歧义设定
|
||||
jecalculation.gui.recipe.disamb.disabled=消歧义设定只在从JEI转移配方\n并且含有歧义项时生效
|
||||
jecalculation.gui.recipe.disamb.disabled=消歧义设定只在从NEI转移配方\n并且含有歧义项时生效
|
||||
jecalculation.gui.recipe.new=新建编组
|
||||
|
||||
jecalculation.gui.recipe.pick=抓取算子
|
||||
@@ -45,7 +46,7 @@ jecalculation.gui.recipe.to_percent=切换至百分比
|
||||
jecalculation.gui.recipe.to_amount=切换至数量
|
||||
|
||||
jecalculation.gui.recipe.title=编辑配方
|
||||
jecalculation.gui.recipe.help=你可以使用本界面编辑或者创建配方。你可以手动从JEI物品列表抓取物品,然后放入槽位中。除此之外,你也可以使用JEI查询,然后点击“+”来快速转移配方。完成编辑后,点击“保存配方”就可以将该配方添加至你个人的配方库中。\n当你点击一个算子,一个工具栏会弹出来帮助你编辑。你可以使用这个工具栏来输入数量,切换百分比设定,或是删除算子。除此之外,你也可以直接使用鼠标滚轮来编辑算子的数量。\f在你从JEI快速转移配方的时候,系统会帮你自动配置好一些算子,诸如矿辞或是流体之类。如果你不想系统自动匹配,你可以使用消歧义选项来手动选取你需要的算子类型。与此同时,你也可以通过“添加算子”按钮手动选取并添加算子。值得一提的是,虽然本模组不会阻止你在输出列表中使用模糊算子,但是这通常是不必要的。\f你可以使用编组来轻松地管理你的配方。要添加一个新组,你只需要点击“新建编组”,键入名称,再点击确认即可。如果你想要使用已有的编组,可以使用两侧的箭头按钮进行切换。\n在你编辑已有的合成表时,会有两个额外的按钮。使用“另存为”,你可以将当前的合成表保存为新的合成表,而不改动原有合成表。使用“删除”将从合成表库中删除当前合成表。
|
||||
jecalculation.gui.recipe.help=你可以使用本界面编辑或者创建配方。你可以手动从NEI物品列表抓取物品,然后放入槽位中。除此之外,你也可以使用NEI查询,然后点击“+”来快速转移配方。完成编辑后,点击“保存配方”就可以将该配方添加至你个人的配方库中。\n当你点击一个算子,一个工具栏会弹出来帮助你编辑。你可以使用这个工具栏来输入数量,切换百分比设定,或是删除算子。除此之外,你也可以直接使用鼠标滚轮来编辑算子的数量。\f在你从NEI快速转移配方的时候,系统会帮你自动配置好一些算子,诸如矿辞或是流体之类。如果你不想系统自动匹配,你可以使用消歧义选项来手动选取你需要的算子类型。与此同时,你也可以通过“添加算子”按钮手动选取并添加算子。值得一提的是,虽然本模组不会阻止你在输出列表中使用模糊算子,但是这通常是不必要的。\f你可以使用编组来轻松地管理你的配方。要添加一个新组,你只需要点击“新建编组”,键入名称,再点击确认即可。如果你想要使用已有的编组,可以使用两侧的箭头按钮进行切换。\n在你编辑已有的合成表时,会有两个额外的按钮。使用“另存为”,你可以将当前的合成表保存为新的合成表,而不改动原有合成表。使用“删除”将从合成表库中删除当前合成表。
|
||||
jecalculation.gui.label.title=编辑算子
|
||||
jecalculation.gui.label.help=你可以使用该界面创建算子。本模组目前有四类算子:流体栈,矿物词典,占位符和物品栈。要创建流体或矿辞算子,你只需要搜索并抓取即可。物品栈算子可以表示游戏中的物品栈,但是可以对Metadata,NBT和Capability使用额外的模糊选项。\n占位符并不表示任何实际内容,但可以用来链接配方,代表多方块结构,能量,或者任何你能想到的东西。只需要键入名字,就可以创建占位符算子。另外地,你也可以在已有的占位符中直接搜索并抓取。
|
||||
|
||||
|
||||
Reference in new issue
Block a user