diff --git a/gradle.properties b/gradle.properties index b9fa270..96bc6d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ loom.platform=forge yarn_mappings=1.19+build.4 # Mod Properties - mod_version=0.7-1.19-forge + mod_version=0.7.1-1.19-forge maven_group=me.melontini archives_base_name=recipe-book-is-pain mod_id=recipe-book-is-pain diff --git a/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java index d21cf6f..7f9e95f 100644 --- a/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java +++ b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java @@ -1,18 +1,18 @@ package me.melontini.recipebookispain; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.recipebook.RecipeBookGroup; import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.client.event.RegisterRecipeBookCategoriesEvent; +import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.asm.RuntimeEnumExtender; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Mod("recipe_book_is_pain") public class RecipeBookIsPain { @@ -21,8 +21,38 @@ public class RecipeBookIsPain { public static Map ADDED_GROUPS = new HashMap<>(); public static Map AAAAAAAA = new HashMap<>(); - public static List CRAFTING_SEARCH_MAP; + public static List CRAFTING_SEARCH_MAP = new ArrayList<>(); + public static List CRAFTING_MAP = new ArrayList<>(); public RecipeBookIsPain() { + FMLJavaModLoadingContext.get().getModEventBus().addListener(EventPriority.LOWEST, false, RegisterRecipeBookCategoriesEvent.class, registerRecipeBookCategoriesEvent -> { + List groups = new ArrayList<>(); + + for (ItemGroup group : ItemGroup.GROUPS) { + if (group != ItemGroup.HOTBAR && group != ItemGroup.INVENTORY && group != ItemGroup.SEARCH) { + String name = "P_CRAFTING_" + group.getIndex(); + var group1 = RecipeBookGroup.create(name, group.getIcon()); + RecipeBookIsPain.ADDED_GROUPS.put(name, group1); + RecipeBookIsPain.AAAAAAAA.put(name, group); + groups.add(group1); + } + } + + List craftingMap = new ArrayList<>(); + List craftingSearchMap = new ArrayList<>(); + craftingMap.add(RecipeBookGroup.CRAFTING_SEARCH); + for (RecipeBookGroup bookGroup : groups) { + if (bookGroup.toString().contains("P_CRAFTING")) { + craftingMap.add(bookGroup); + craftingSearchMap.add(bookGroup); + } + } + RecipeBookIsPain.CRAFTING_SEARCH_MAP.addAll(craftingSearchMap); + CRAFTING_MAP.addAll(craftingMap); + + registerRecipeBookCategoriesEvent.aggregateCategories.remove(RecipeBookGroup.CRAFTING_SEARCH); + registerRecipeBookCategoriesEvent.registerAggregateCategory(RecipeBookGroup.CRAFTING_SEARCH, CRAFTING_SEARCH_MAP); + RecipeBookIsPain.LOGGER.info("[RBIP] recipe book init complete"); + }); } } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java index 30c285c..98baff5 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java @@ -14,9 +14,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(value = ClientRecipeBook.class, priority = 999) public class ClientRecipeBookMixin { - static { - RecipeBookGroup.values(); - } @Inject(at = @At("HEAD"), method = "getGroupForRecipe", cancellable = true) private static void recipe_book_is_pain$getGroupForRecipe(Recipe recipe, CallbackInfoReturnable cir) { RecipeType recipeType = recipe.getType(); @@ -25,8 +22,8 @@ public class ClientRecipeBookMixin { ItemGroup group = itemStack.getItem().getGroup(); if (group != null) { if (group != ItemGroup.HOTBAR && group != ItemGroup.INVENTORY && group != ItemGroup.SEARCH) - if (RecipeBookIsPain.ADDED_GROUPS.get("P_CRAFTING_" + group.getIndex()) != null) - cir.setReturnValue(RecipeBookIsPain.ADDED_GROUPS.get("P_CRAFTING_" + group.getIndex())); + if (RecipeBookIsPain.ADDED_GROUPS.get("P_CRAFTING_" + group.getIndex()) != null) + cir.setReturnValue(RecipeBookIsPain.ADDED_GROUPS.get("P_CRAFTING_" + group.getIndex())); else cir.setReturnValue(RecipeBookIsPain.ADDED_GROUPS.get("P_CRAFTING_" + ItemGroup.MISC.getIndex())); } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/ForgeRecipeBookRegistryMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/ForgeRecipeBookRegistryMixin.java deleted file mode 100644 index 1884880..0000000 --- a/src/main/java/me/melontini/recipebookispain/mixin/ForgeRecipeBookRegistryMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.melontini.recipebookispain.mixin; - -import com.google.common.collect.ImmutableList; -import me.melontini.recipebookispain.RecipeBookIsPain; -import net.minecraft.client.recipebook.RecipeBookGroup; -import net.minecraftforge.client.RecipeBookManager; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(value = RecipeBookManager.class, remap = false) //cope -public class ForgeRecipeBookRegistryMixin { - // pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work pls work - @SuppressWarnings("unchecked") - @Redirect(at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableList;of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;"), remap = false, method = "init") - private static ImmutableList listOf(E e1, E e2, E e3, E e4) { - if (e1 == RecipeBookGroup.CRAFTING_EQUIPMENT) { - return (ImmutableList) ImmutableList.copyOf(RecipeBookIsPain.CRAFTING_SEARCH_MAP); - } - return ImmutableList.of(e1, e2, e3, e4); - } -} diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java index 9913e06..8ae9f79 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java @@ -1,62 +1,23 @@ package me.melontini.recipebookispain.mixin; -import me.melontini.recipebookispain.RecipeBookIsPain; import net.minecraft.client.recipebook.RecipeBookGroup; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; import net.minecraft.recipe.book.RecipeBookCategory; -import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -@Mixin(value = RecipeBookGroup.class, priority = 666) -@Unique -public abstract class RecipeBookGroupMixin { - - @Unique - private static List CRAFTING_MAP; - - @Inject(at = @At(value = "FIELD", opcode = Opcodes.PUTSTATIC, target = "Lnet/minecraft/client/recipebook/RecipeBookGroup;field_1805:[Lnet/minecraft/client/recipebook/RecipeBookGroup;", shift = At.Shift.AFTER), method = "") - private static void recipe_book_is_pain$addCustomGroups(CallbackInfo ci) { - //RecipeBookIsPain.LOGGER.info("Adding to RecipeBookGroup enum"); - for (ItemGroup group : ItemGroup.GROUPS) { - if (group != ItemGroup.HOTBAR && group != ItemGroup.INVENTORY && group != ItemGroup.SEARCH && group != null) { - String name = "P_CRAFTING_" + group.getIndex(); - RecipeBookGroup.create(name, new ItemStack(group.getIcon().getItem())); - var group1 = RecipeBookGroup.valueOf(RecipeBookGroup.class, name); - RecipeBookIsPain.ADDED_GROUPS.put(name, group1); - RecipeBookIsPain.AAAAAAAA.put(name, group); - } - } - - var groups = new ArrayList<>(Arrays.asList(RecipeBookGroup.values())); +import static me.melontini.recipebookispain.RecipeBookIsPain.CRAFTING_MAP; - List craftingMap = new ArrayList<>(); - List craftingSearchMap = new ArrayList<>(); - craftingMap.add(RecipeBookGroup.CRAFTING_SEARCH); - for (RecipeBookGroup bookGroup : groups) { - if (bookGroup.toString().contains("P_CRAFTING")) { - craftingMap.add(bookGroup); - craftingSearchMap.add(bookGroup); - } - } - - RecipeBookIsPain.CRAFTING_SEARCH_MAP = craftingSearchMap; - CRAFTING_MAP = craftingMap; - RecipeBookIsPain.LOGGER.info("recipe book init complete"); - } +@Mixin(RecipeBookGroup.class) +@Unique +public class RecipeBookGroupMixin { @Inject(at = @At("HEAD"), method = "getGroups", cancellable = true) private static void recipe_book_is_pain$getGroups(RecipeBookCategory category, CallbackInfoReturnable> cir) { if (category == RecipeBookCategory.CRAFTING) cir.setReturnValue(CRAFTING_MAP); } - } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java index d2a2857..e852265 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java @@ -1,17 +1,9 @@ package me.melontini.recipebookispain.mixin; -import me.melontini.recipebookispain.RecipeBookIsPain; import me.melontini.recipebookispain.access.RecipeGroupButtonAccess; import net.minecraft.client.gui.screen.recipebook.RecipeGroupButtonWidget; -import net.minecraft.client.recipebook.RecipeBookGroup; -import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Collections; -import java.util.List; @Mixin(RecipeGroupButtonWidget.class) public class RecipeGroupButtonMixin implements RecipeGroupButtonAccess { @@ -27,11 +19,4 @@ public class RecipeGroupButtonMixin implements RecipeGroupButtonAccess { public void setPage(int page) { this.page = page; } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/recipebook/RecipeBookGroup;getIcons()Ljava/util/List;"), method = "renderIcons") - private List render(RecipeBookGroup instance) { - if (RecipeBookIsPain.ADDED_GROUPS.containsValue(instance)) - return Collections.singletonList(RecipeBookIsPain.AAAAAAAA.get(instance.name()).getIcon()); - return instance.getIcons(); - } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index e69de29..8a4c823 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1 @@ +public-f net.minecraftforge.client.event.RegisterRecipeBookCategoriesEvent aggregateCategories \ No newline at end of file diff --git a/src/main/resources/recipebookispain.mixins.json b/src/main/resources/recipebookispain.mixins.json index 9b887fb..1fcad33 100644 --- a/src/main/resources/recipebookispain.mixins.json +++ b/src/main/resources/recipebookispain.mixins.json @@ -6,7 +6,6 @@ "mixins": [ ], "client": [ - "ForgeRecipeBookRegistryMixin", "ClientRecipeBookMixin", "RecipeBookGroupMixin", "RecipeBookWidgetMixin",