will0376
Токсичная личность
- 2,079
- 55
- 585
Вечера всем. Недавно удалял рецепты и столкнулся с неприятными последствиями - игра крашится при заходе в книгу рецептов. Решил действовать кардинально... Хукнуться в метод, вызывающий краш и убрать вызов краша...
Хукнулся. хук работает, но как-то нестабильно. При загрузке сервера я удаляю рецепты по name:meta из файла - видно, как работает хук по логу
Но в момент захода в "книгу" - майн крашится с
т.е. вызывается метод не хука...
При этом в лог падает [17:12:56] [main/INFO] [STDOUT]: [ru.will0376.mod.Hooks.Hooks:isUnlocked:29]: ret: -1
Что я не так то делаю??
сам хук(переделанный 3-4 раза):
Хукнулся. хук работает, но как-то нестабильно. При загрузке сервера я удаляю рецепты по name:meta из файла - видно, как работает хук по логу
[ru.will0376.mod.Hooks.Hooks:isUnlocked:23]: hook (и еще штук 10 таких.)
Но в момент захода в "книгу" - майн крашится с
Код:
net.minecraft.util.ReportedException: Updating screen events
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1898) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1187) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:441) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_191]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_191]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.lang.IllegalArgumentException: Attempted to get the ID for a unknown recipe: net.minecraft.item.crafting.ShapelessRecipes@4e93d23e Name: minecraft:light_blue_wool
at net.minecraft.stats.RecipeBook.getRecipeId(RecipeBook.java:54) ~[RecipeBook.class:?]
at net.minecraft.stats.RecipeBook.isUnlocked(RecipeBook.java:36) ~[RecipeBook.class:?]
at net.minecraft.client.gui.recipebook.RecipeList.canCraft(RecipeList.java:46) ~[RecipeList.class:?]
at net.minecraft.client.gui.recipebook.GuiRecipeBook.lambda$updateCollections$0(GuiRecipeBook.java:162) ~[GuiRecipeBook.class:?]
at java.util.ArrayList.forEach(ArrayList.java:1257) ~[?:1.8.0_191]
at net.minecraft.client.gui.recipebook.GuiRecipeBook.updateCollections(GuiRecipeBook.java:160) ~[GuiRecipeBook.class:?]
at net.minecraft.client.gui.recipebook.GuiRecipeBook.initVisuals(GuiRecipeBook.java:97) ~[GuiRecipeBook.class:?]
at net.minecraft.client.gui.inventory.GuiCrafting.actionPerformed(GuiCrafting.java:142) ~[GuiCrafting.class:?]
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:494) ~[GuiScreen.class:?]
at net.minecraft.client.gui.inventory.GuiContainer.mouseClicked(GuiContainer.java:361) ~[GuiContainer.class:?]
at net.minecraft.client.gui.inventory.GuiCrafting.mouseClicked(GuiCrafting.java:124) ~[GuiCrafting.class:?]
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:611) ~[GuiScreen.class:?]
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:576) ~[GuiScreen.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1885) ~[Minecraft.class:?]
... 15 more
При этом в лог падает [17:12:56] [main/INFO] [STDOUT]: [ru.will0376.mod.Hooks.Hooks:isUnlocked:29]: ret: -1
Что я не так то делаю??
сам хук(переделанный 3-4 раза):
Java:
@Hook(priority = HookPriority.HIGH)
public static boolean isUnlocked(RecipeBook rb, IRecipe recipe)
{
System.out.println("hook");
try {
int ret = CraftingManager.REGISTRY.getIDForObject(recipe);
if (ret == -1) {
ret = ((net.minecraftforge.registries.ForgeRegistry<IRecipe>) net.minecraftforge.fml.common.registry.ForgeRegistries.RECIPES).getID(recipe.getRegistryName());
if (ret == -1) {
System.out.println("ret: "+ret);
return rb.recipes.get(1);
}
}
return rb.recipes.get(ret);
}catch (Exception e){e.printStackTrace(); return rb.recipes.get(1);}
}