From fc58c6e80b95509ff8e16b776f609ee1bb8dcbb2 Mon Sep 17 00:00:00 2001 From: melontini Date: Thu, 15 Dec 2022 14:14:14 +0700 Subject: [PATCH] If you obfuscate all of your code in an included util, your code will look a lot cleaner. --- .github/workflows/publish.yml | 41 ++++ build.gradle | 9 +- gradle.properties | 9 +- .../recipebookispain/RecipeBookIsPain.java | 9 - .../{client => }/RecipeBookIsPainClient.java | 2 +- .../access/RecipeBookWidgetAccess.java | 7 - .../access/RecipeGroupButtonAccess.java | 7 - .../mixin/ClientRecipeBookMixin.java | 44 ++++- .../mixin/MouseWheelieCompatMixin.java | 11 +- .../mixin/RecipeBookGroupMixin.java | 83 -------- .../mixin/RecipeBookWidgetMixin.java | 177 +----------------- .../mixin/RecipeGroupButtonMixin.java | 22 --- src/main/resources/fabric.mod.json | 5 +- .../resources/recipe-book-is-pain.mixins.json | 4 +- 14 files changed, 102 insertions(+), 328 deletions(-) create mode 100644 .github/workflows/publish.yml delete mode 100644 src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java rename src/main/java/me/melontini/recipebookispain/{client => }/RecipeBookIsPainClient.java (94%) delete mode 100644 src/main/java/me/melontini/recipebookispain/access/RecipeBookWidgetAccess.java delete mode 100644 src/main/java/me/melontini/recipebookispain/access/RecipeGroupButtonAccess.java delete mode 100644 src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java delete mode 100644 src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..c6f6927 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,41 @@ +on: + push: + tags: + - 'v*' + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: checkout repository + uses: actions/checkout@v2 + - name: validate gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: setup jdk 17 + uses: actions/setup-java@v2 + with: + distribution: adopt + java-version: 17 + - name: make gradle wrapper executable + run: chmod +x ./gradlew + - name: build + run: ./gradlew build + - name: Publish Minecraft Mods + uses: Kir-Antipov/mc-publish@v3.2 + with: + version-type: alpha + modrinth-id: etNS9OnA + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + modrinth-featured: true + modrinth-unfeature-mode: subset + + curseforge-id: 643246 + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + + game-versions: | + 1.19.2 + + loaders: | + fabric + + changelog-file: CHANGELOG.md \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0973d98..4df6bf1 100644 --- a/build.gradle +++ b/build.gradle @@ -8,11 +8,6 @@ version = project.mod_version group = project.maven_group repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. maven { name = "Modrinth" url = "https://api.modrinth.com/maven" @@ -20,6 +15,9 @@ repositories { includeGroup "maven.modrinth" } } + maven { + url 'https://jitpack.io' + } } dependencies { @@ -29,6 +27,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modCompileOnly("maven.modrinth:mouse-wheelie:1.8.8+mc1.18-pre5") + modImplementation include("com.github.melontini:cracker-util:${project.cracker_util}") } processResources { diff --git a/gradle.properties b/gradle.properties index 208d63a..cfec85f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,11 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.18 -yarn_mappings=1.18+build.1 -loader_version=0.14.8 +minecraft_version=1.19.2 +yarn_mappings=1.19.2+build.28 +loader_version=0.14.11 # Mod Properties -mod_version=0.7.1-1.18 +mod_version=0.8.0-1.19.2 maven_group=me.melontini archives_base_name=recipe-book-is-pain +cracker_util=v0.1.2-1.19.2 diff --git a/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java deleted file mode 100644 index e95991f..0000000 --- a/src/main/java/me/melontini/recipebookispain/RecipeBookIsPain.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.melontini.recipebookispain; - -import net.fabricmc.api.ModInitializer; - -public class RecipeBookIsPain implements ModInitializer { - @Override - public void onInitialize() { - } -} diff --git a/src/main/java/me/melontini/recipebookispain/client/RecipeBookIsPainClient.java b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java similarity index 94% rename from src/main/java/me/melontini/recipebookispain/client/RecipeBookIsPainClient.java rename to src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java index 6ea3030..12c61c6 100644 --- a/src/main/java/me/melontini/recipebookispain/client/RecipeBookIsPainClient.java +++ b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java @@ -1,4 +1,4 @@ -package me.melontini.recipebookispain.client; +package me.melontini.recipebookispain; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; diff --git a/src/main/java/me/melontini/recipebookispain/access/RecipeBookWidgetAccess.java b/src/main/java/me/melontini/recipebookispain/access/RecipeBookWidgetAccess.java deleted file mode 100644 index e2cbb25..0000000 --- a/src/main/java/me/melontini/recipebookispain/access/RecipeBookWidgetAccess.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.melontini.recipebookispain.access; - -public interface RecipeBookWidgetAccess { - int getBookPage(); - - void setBookPage(int page); -} diff --git a/src/main/java/me/melontini/recipebookispain/access/RecipeGroupButtonAccess.java b/src/main/java/me/melontini/recipebookispain/access/RecipeGroupButtonAccess.java deleted file mode 100644 index 7e6c2a4..0000000 --- a/src/main/java/me/melontini/recipebookispain/access/RecipeGroupButtonAccess.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.melontini.recipebookispain.access; - -public interface RecipeGroupButtonAccess { - int getPage(); - - void setPage(int page); -} diff --git a/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java index 591fa42..a31a845 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java @@ -1,6 +1,7 @@ package me.melontini.recipebookispain.mixin; -import me.melontini.recipebookispain.client.RecipeBookIsPainClient; +import me.melontini.crackerutil.CrackerLog; +import me.melontini.recipebookispain.RecipeBookIsPainClient; import net.minecraft.client.recipebook.ClientRecipeBook; import net.minecraft.client.recipebook.RecipeBookGroup; import net.minecraft.item.ItemGroup; @@ -10,13 +11,38 @@ import net.minecraft.recipe.RecipeType; import org.spongepowered.asm.mixin.Mixin; 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 = ClientRecipeBook.class, priority = 999) public class ClientRecipeBookMixin { - static { - //noinspection ResultOfMethodCallIgnored - RecipeBookGroup.values(); + + @Inject(at = @At("HEAD"), method = "") + private static void recipe_book_is_pain$clinit(CallbackInfo ci) { + List CRAFTING_LIST = new ArrayList<>(); + List CRAFTING_SEARCH_LIST = new ArrayList<>(); + + Arrays.stream(ItemGroup.GROUPS).filter(itemGroup -> itemGroup != ItemGroup.HOTBAR && itemGroup != ItemGroup.INVENTORY && itemGroup != ItemGroup.SEARCH) + .forEach(itemGroup -> { + String name = "P_CRAFTING_" + itemGroup.getIndex(); + RecipeBookGroup recipeBookGroup = (RecipeBookGroup) RecipeBookGroup.CRAFTING_SEARCH.extend(name, (Object[]) new ItemStack[]{itemGroup.getIcon()}); + RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.put(recipeBookGroup, itemGroup); + RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.put(itemGroup, recipeBookGroup); + + CRAFTING_LIST.add(recipeBookGroup); + CRAFTING_SEARCH_LIST.add(recipeBookGroup); + }); + CRAFTING_LIST.add(0, RecipeBookGroup.CRAFTING_SEARCH); + + RecipeBookGroup.SEARCH_MAP.get(RecipeBookGroup.CRAFTING_SEARCH).clear(); + RecipeBookGroup.SEARCH_MAP.get(RecipeBookGroup.CRAFTING_SEARCH).addAll(CRAFTING_SEARCH_LIST); + RecipeBookGroup.CRAFTING.clear(); + RecipeBookGroup.CRAFTING.addAll(CRAFTING_LIST); + CrackerLog.info("Finished setting up recipe book groups!"); } @Inject(at = @At("HEAD"), method = "getGroupForRecipe", cancellable = true) @@ -26,12 +52,14 @@ public class ClientRecipeBookMixin { ItemStack itemStack = recipe.getOutput(); ItemGroup group = itemStack.getItem().getGroup(); if (group != null) { - if (group != ItemGroup.HOTBAR && group != ItemGroup.INVENTORY && group != ItemGroup.SEARCH) - if (RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.get(group) != null) + if (group != ItemGroup.HOTBAR && group != ItemGroup.INVENTORY && group != ItemGroup.SEARCH) { + if (RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.containsKey(group)) { cir.setReturnValue(RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.get(group)); - else - cir.setReturnValue(RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.get(ItemGroup.MISC)); + return; + } + } } + cir.setReturnValue(RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.get(ItemGroup.MISC)); } } } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java index d07d9a6..790a0f2 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java @@ -2,8 +2,6 @@ package me.melontini.recipebookispain.mixin; import de.siphalor.mousewheelie.client.mixin.gui.other.MixinRecipeBookWidget; import de.siphalor.mousewheelie.client.util.ScrollAction; -import me.melontini.recipebookispain.access.RecipeBookWidgetAccess; -import me.melontini.recipebookispain.access.RecipeGroupButtonAccess; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.screen.recipebook.RecipeGroupButtonWidget; import org.jetbrains.annotations.Nullable; @@ -27,12 +25,11 @@ public abstract class MouseWheelieCompatMixin { @Dynamic(mixin = MixinRecipeBookWidget.class) @Inject(at = @At(value = "INVOKE", target = "net/minecraft/client/gui/screen/recipebook/RecipeGroupButtonWidget.setToggled (Z)V", ordinal = 1, shift = At.Shift.AFTER), method = "mouseWheelie_scrollRecipeBook") private void inject(double mouseX, double mouseY, double scrollAmount, CallbackInfoReturnable cir) { + if (currentTab == null) return;//how tho? + RecipeBookWidget bookWidget = (RecipeBookWidget) (Object) this; - RecipeBookWidgetAccess access = ((RecipeBookWidgetAccess) bookWidget); - RecipeGroupButtonAccess accessCT = ((RecipeGroupButtonAccess) this.currentTab); - assert accessCT != null; - if (access.getBookPage() != accessCT.getPage()) { - access.setBookPage(accessCT.getPage()); + if (bookWidget.getPage() != currentTab.getPage()) { + bookWidget.setPage(currentTab.getPage()); } } } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java deleted file mode 100644 index 54b5554..0000000 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java +++ /dev/null @@ -1,83 +0,0 @@ -package me.melontini.recipebookispain.mixin; - -import com.google.common.collect.ImmutableList; -import me.melontini.recipebookispain.client.RecipeBookIsPainClient; -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.*; -import org.spongepowered.asm.mixin.gen.Invoker; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -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(RecipeBookGroup.class) -@Unique -public class RecipeBookGroupMixin { - //me when I can't use Fabric ASM - - @Invoker("") - static RecipeBookGroup newGroup(String internalName, int internalId, ItemStack... stacks) { - throw new AssertionError(); - } - - @Shadow - @Final - @Mutable - private static RecipeBookGroup[] field_1805; - - @Unique - private static List CRAFTING_SEARCH_LIST; - @Unique - private static List CRAFTING_LIST; - - // 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 = "") - private static ImmutableList listOf(E e1, E e2, E e3, E e4) { - if (e1 == RecipeBookGroup.CRAFTING_EQUIPMENT) { - return (ImmutableList) ImmutableList.copyOf(CRAFTING_SEARCH_LIST); - } - return ImmutableList.of(e1, e2, e3, e4); - } - - @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) { - var groups = new ArrayList<>(Arrays.asList(field_1805)); - var last = groups.get(groups.size() - 1); - - CRAFTING_SEARCH_LIST = new ArrayList<>(); - CRAFTING_LIST = new ArrayList<>(); - - for (ItemGroup itemGroup : ItemGroup.GROUPS) { - if (itemGroup != ItemGroup.HOTBAR && itemGroup != ItemGroup.INVENTORY && itemGroup != ItemGroup.SEARCH) { - String name = "P_CRAFTING_" + itemGroup.getIndex(); - var recipeBookGroup = newGroup(name, last.ordinal() + 1, itemGroup.getIcon()); - RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.put(recipeBookGroup, itemGroup); - RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.put(itemGroup, recipeBookGroup); - - CRAFTING_LIST.add(recipeBookGroup); - CRAFTING_SEARCH_LIST.add(recipeBookGroup); - - groups.add(recipeBookGroup); - } - } - CRAFTING_LIST.add(0, RecipeBookGroup.CRAFTING_SEARCH); - - field_1805 = groups.toArray(RecipeBookGroup[]::new); - RecipeBookIsPainClient.LOGGER.info("[RBIP] recipe book init complete"); - } - - @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_LIST); - } -} diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java index 9355844..be98a43 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java @@ -1,203 +1,44 @@ package me.melontini.recipebookispain.mixin; -import me.melontini.recipebookispain.access.RecipeBookWidgetAccess; -import me.melontini.recipebookispain.access.RecipeGroupButtonAccess; -import me.melontini.recipebookispain.client.RecipeBookIsPainClient; +import me.melontini.recipebookispain.RecipeBookIsPainClient; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.screen.recipebook.RecipeGroupButtonWidget; -import net.minecraft.client.gui.widget.ToggleButtonWidget; -import net.minecraft.client.recipebook.ClientRecipeBook; -import net.minecraft.client.recipebook.RecipeBookGroup; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemGroup; -import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -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.List; @Mixin(RecipeBookWidget.class) -public abstract class RecipeBookWidgetMixin implements RecipeBookWidgetAccess { - @Shadow - @Final - protected static Identifier TEXTURE; +public abstract class RecipeBookWidgetMixin { @Shadow protected MinecraftClient client; @Shadow - protected AbstractRecipeScreenHandler craftingScreenHandler; - @Unique - private int page = 0; - @Shadow - private int parentHeight; - @Shadow - private int leftOffset; - @Shadow - private ClientRecipeBook recipeBook; - @Shadow @Final private List tabButtons; - @Shadow - private int parentWidth; - @Unique - private int pages; - @Unique - private ToggleButtonWidget nextPageButton; - @Unique - private ToggleButtonWidget prevPageButton; - @Shadow - @Nullable - private RecipeGroupButtonWidget currentTab; - - @Shadow - public abstract boolean isOpen(); - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/recipebook/RecipeGroupButtonWidget;setToggled(Z)V", shift = At.Shift.BEFORE), method = "reset") - private void recipe_book_is_pain$init(CallbackInfo ci) { - int a = (this.parentWidth - 147) / 2 - this.leftOffset; - int s = (this.parentHeight + 166) / 2; - this.nextPageButton = new ToggleButtonWidget(a + 14, s, 12, 17, false); - this.nextPageButton.setTextureUV(1, 208, 13, 18, TEXTURE); - this.prevPageButton = new ToggleButtonWidget(a - 35, s, 12, 17, true); - this.prevPageButton.setTextureUV(1, 208, 13, 18, TEXTURE); - page = 0; - } @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;pop()V", shift = At.Shift.BEFORE), method = "render") private void recipe_book_is_pain$render(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { - renderPageText(matrices); - for (RecipeGroupButtonWidget widget : tabButtons) { - if (widget.visible) { + if (client.currentScreen != null) { + this.tabButtons.stream().filter(widget -> widget.visible && widget.isHovered()).forEach(widget -> { if (widget.getCategory().name().contains("_SEARCH")) { - if (widget.isHovered()) - client.currentScreen.renderTooltip(matrices, ItemGroup.SEARCH.getDisplayName(), mouseX, mouseY); + client.currentScreen.renderTooltip(matrices, ItemGroup.SEARCH.getDisplayName(), mouseX, mouseY); } else { if (RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.get(widget.getCategory()) != null) { Text text = RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.get(widget.getCategory()).getDisplayName(); - if (text != null) - if (widget.isHovered()) client.currentScreen.renderTooltip(matrices, text, mouseX, mouseY); + if (text != null) { + client.currentScreen.renderTooltip(matrices, text, mouseX, mouseY); + } } } - } - } - this.prevPageButton.render(matrices, mouseX, mouseY, delta); - this.nextPageButton.render(matrices, mouseX, mouseY, delta); - } - - @Unique - private void renderPageText(MatrixStack matrices) { - int x = (this.parentWidth - 135) / 2 - this.leftOffset - 30; - int y = (this.parentHeight + 169) / 2 + 3; - int displayPage = page + 1; - int displayPages = pages + 1; - if (this.pages > 0) { - String string = "" + displayPage + "/" + displayPages; - int textLength = this.client.textRenderer.getWidth(string); - this.client.textRenderer.draw(matrices, string, (x - textLength / 2F + 20F), y, -1); - } - } - - @Unique //mmm spaghettio - private void updatePages() { - for (RecipeGroupButtonWidget widget : tabButtons) { - if (((RecipeGroupButtonAccess) widget).getPage() == page) { - RecipeBookGroup recipeBookGroup = widget.getCategory(); - if (client.currentScreen != null) if (recipeBookGroup.name().contains("_SEARCH")) { - widget.visible = true; - } else if (widget.hasKnownRecipes(recipeBook)) { - widget.visible = true; - widget.checkForNewRecipes(this.client); - } - } else { - widget.visible = false; - } - } - } - - @Inject(at = @At("HEAD"), method = "mouseClicked", cancellable = true) - private void recipe_book_is_pain$mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { - if (this.client.player != null) if (this.isOpen() && !this.client.player.isSpectator()) { - if (nextPageButton.mouseClicked(mouseX, mouseY, button)) { - if (this.page <= this.pages) ++this.page; - updatePages(); - updatePageSwitchButtons(); - cir.setReturnValue(true); - } else if (prevPageButton.mouseClicked(mouseX, mouseY, button)) { - if (this.page > 0) --this.page; - updatePages(); - updatePageSwitchButtons(); - cir.setReturnValue(true); - } - } - } - - @Unique - private void updatePageSwitchButtons() { - this.nextPageButton.visible = this.pages > 0 && this.page < this.pages; - this.prevPageButton.visible = this.pages > 0 && this.page != 0; - } - - - @SuppressWarnings("IntegerDivisionInFloatingPointContext") - @Inject(at = @At("HEAD"), method = "refreshTabButtons", cancellable = true) - private void recipe_book_is_pain$refresh(CallbackInfo ci) { - this.pages = 0; - int p = 0; - int c = (this.parentWidth - 147) / 2 - this.leftOffset - 30; - int b = (this.parentHeight - 166) / 2 + 3; - int l = 0; - - this.tabButtons.clear(); - for (RecipeBookGroup group : RecipeBookGroup.getGroups(this.craftingScreenHandler.getCategory())) { - var widget = new RecipeGroupButtonWidget(group); - if (group.name().contains("_SEARCH") || widget.hasKnownRecipes(recipeBook)) this.tabButtons.add(widget); - } - - if (this.currentTab != null) { - this.currentTab = this.tabButtons.stream().filter((button) -> - button.getCategory().equals(this.currentTab.getCategory())).findFirst().orElse(null); - } - if (this.currentTab == null) { - this.currentTab = this.tabButtons.get(0); - } - this.currentTab.setToggled(true); - - for (RecipeGroupButtonWidget widget : this.tabButtons) { - RecipeBookGroup recipeBookGroup = widget.getCategory(); - if (recipeBookGroup.name().contains("_SEARCH") || widget.hasKnownRecipes(recipeBook)) { - ((RecipeGroupButtonAccess) widget).setPage((int) Math.ceil(p / 6)); - widget.setPos(c, b + 27 * l++); - widget.visible = ((RecipeGroupButtonAccess) widget).getPage() == page; - if (l == 6) { - l = 0; - } - p++; - } + }); } - - --p; - this.pages = (int) Math.ceil(p / 6); - updatePages(); - updatePageSwitchButtons(); - ci.cancel(); - } - - @Override - public int getBookPage() { - return page; - } - - @Override - public void setBookPage(int page) { - this.page = page; } } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java deleted file mode 100644 index e852265..0000000 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.melontini.recipebookispain.mixin; - -import me.melontini.recipebookispain.access.RecipeGroupButtonAccess; -import net.minecraft.client.gui.screen.recipebook.RecipeGroupButtonWidget; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(RecipeGroupButtonWidget.class) -public class RecipeGroupButtonMixin implements RecipeGroupButtonAccess { - @Unique - private int page = -1; - - @Override - public int getPage() { - return page; - } - - @Override - public void setPage(int page) { - this.page = page; - } -} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f51a77f..c156a15 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,10 +13,7 @@ "environment": "client", "entrypoints": { "client": [ - "me.melontini.recipebookispain.client.RecipeBookIsPainClient" - ], - "main": [ - "me.melontini.recipebookispain.RecipeBookIsPain" + "me.melontini.recipebookispain.RecipeBookIsPainClient" ] }, "mixins": [ diff --git a/src/main/resources/recipe-book-is-pain.mixins.json b/src/main/resources/recipe-book-is-pain.mixins.json index 41c12ea..b1e549c 100644 --- a/src/main/resources/recipe-book-is-pain.mixins.json +++ b/src/main/resources/recipe-book-is-pain.mixins.json @@ -9,9 +9,7 @@ "client": [ "ClientRecipeBookMixin", "MouseWheelieCompatMixin", - "RecipeBookGroupMixin", - "RecipeBookWidgetMixin", - "RecipeGroupButtonMixin" + "RecipeBookWidgetMixin" ], "injectors": { "defaultRequire": 1 -- 2.51.2