From 37bd06605aec13c58ae1c15dd05b683dbd4e3675 Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:22:21 +0700 Subject: [PATCH] please --- .github/workflows/publish.yml | 2 +- CHANGELOG.md | 7 +-- build.gradle | 4 ++ gradle.properties | 2 +- .../RecipeBookIsPainClient.java | 17 +++--- .../mixin/ClientRecipeBookMixin.java | 59 +++++-------------- .../mixin/MouseWheelieCompatMixin.java | 2 + .../mixin/RecipeBookGroupMixin.java | 20 ------- .../mixin/RecipeBookWidgetMixin.java | 4 +- .../mixin/RecipeGroupButtonMixin.java | 27 +++++---- src/main/resources/fabric.mod.json | 3 +- src/main/resources/rbip.accesswidener | 3 + .../resources/recipe-book-is-pain.mixins.json | 3 +- 13 files changed, 58 insertions(+), 95 deletions(-) delete mode 100644 src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java create mode 100644 src/main/resources/rbip.accesswidener diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a23a99b..0bcf1ae 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,7 +23,7 @@ jobs: - name: Publish Minecraft Mods uses: Kir-Antipov/mc-publish@v3.2 with: - version-type: alpha + version-type: beta modrinth-id: etNS9OnA modrinth-token: ${{ secrets.MODRINTH_TOKEN }} modrinth-featured: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 86d3c95..ac6f667 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,7 @@ -## 0.8.0-1.19.3 +## 0.8.1-1.19.3 ### What's new: -* Updated to 1.19.3 -* Added very shaky compat for owo-lib's item group icons. +* Switched to CrackerUtil -### This is the first 1.19.3 release, so there might be some, or a lot of, bugs. \ No newline at end of file +### Likely maybe mostly stable. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 36fd5be..7944c9b 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,10 @@ dependencies { modCompileOnly("maven.modrinth:mouse-wheelie:1.8.8+mc1.18-pre5") } +loom { + accessWidenerPath = file("src/main/resources/rbip.accesswidener") +} + processResources { inputs.property "version", project.version filteringCharset "UTF-8" diff --git a/gradle.properties b/gradle.properties index 816e106..6a295d1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.19.3-pre2 yarn_mappings=1.19.3-pre2+build.11 loader_version=0.14.10 # Mod Properties -mod_version=0.8.0-1.19.3 +mod_version=0.8.1-1.19.3 maven_group=me.melontini archives_base_name=recipe-book-is-pain cracker_util=8bd13da7fd diff --git a/src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java index d7e35f2..688cddd 100644 --- a/src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java +++ b/src/main/java/me/melontini/recipebookispain/RecipeBookIsPainClient.java @@ -1,6 +1,7 @@ package me.melontini.recipebookispain; +import io.wispforest.owo.itemgroup.OwoItemGroup; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -26,15 +27,13 @@ public class RecipeBookIsPainClient implements ClientModInitializer { public static Map RECIPE_BOOK_GROUP_TO_ITEM_GROUP = new HashMap<>(); public static Map ITEM_GROUP_TO_RECIPE_BOOK_GROUP = new HashMap<>(); - public static boolean rbip$renderOwo(MatrixStack matrices, int i, RecipeGroupButtonWidget widget) { - if (RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.containsKey(widget.getCategory())) { - if (RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.get(widget.getCategory()) instanceof io.wispforest.owo.itemgroup.OwoItemGroup owoItemGroup) { - MinecraftClient client = MinecraftClient.getInstance(); - double e = client.mouse.getX() * client.getWindow().getScaledWidth() / client.getWindow().getWidth(); - double f = client.mouse.getY() * client.getWindow().getScaledHeight() / client.getWindow().getHeight(); - owoItemGroup.icon().render(matrices, widget.getX() + 9 + i, widget.getY() + 5, (int) e, (int) f, client.getTickDelta()); - return true; - } + public static boolean rbip$renderOwo(MatrixStack matrices, int i, RecipeGroupButtonWidget widget, ItemGroup group) { + if (group instanceof OwoItemGroup owoItemGroup) { + MinecraftClient client = MinecraftClient.getInstance(); + double e = client.mouse.getX() * client.getWindow().getScaledWidth() / client.getWindow().getWidth(); + double f = client.mouse.getY() * client.getWindow().getScaledHeight() / client.getWindow().getHeight(); + owoItemGroup.icon().render(matrices, widget.getX() + 9 + i, widget.getY() + 5, (int) e, (int) f, client.getTickDelta()); + return true; } return false; } diff --git a/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java index 8ecd658..eca158b 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/ClientRecipeBookMixin.java @@ -18,12 +18,8 @@ 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; - -import static me.melontini.recipebookispain.client.RecipeBookIsPainClient.CRAFTING_LIST; -import static me.melontini.recipebookispain.client.RecipeBookIsPainClient.CRAFTING_SEARCH_LIST; +import static me.melontini.recipebookispain.RecipeBookIsPainClient.CRAFTING_LIST; +import static me.melontini.recipebookispain.RecipeBookIsPainClient.CRAFTING_SEARCH_LIST; @Mixin(value = ClientRecipeBook.class, priority = 999) public class ClientRecipeBookMixin { @@ -31,58 +27,35 @@ public class ClientRecipeBookMixin { private static void rbip$setupGroups(CallbackInfo ci) { long i = System.currentTimeMillis(); ItemGroups.updateDisplayParameters(FeatureSet.of(FeatureFlags.BUNDLE, FeatureFlags.UPDATE_1_20, FeatureFlags.VANILLA), true); - for (ItemGroup group : ItemGroups.getGroups()) { - if (group.getType() != ItemGroup.Type.INVENTORY && group.getType() != ItemGroup.Type.HOTBAR && group.getType() != ItemGroup.Type.SEARCH) { - group.getSearchTabStacks().forEach(stack -> { + + ItemGroups.getGroups().stream().filter(group -> group.getType() != ItemGroup.Type.INVENTORY && group.getType() != ItemGroup.Type.HOTBAR && group.getType() != ItemGroup.Type.SEARCH) + .forEach(group -> group.getSearchTabStacks().forEach(stack -> { if (((ItemAccess) stack.getItem()).rbip$getPossibleGroup() == ItemGroups.getDefaultTab()) { ((ItemAccess) stack.getItem()).rbip$setPossibleGroup(group); } - }); - } - } + })); - for (ItemGroup group : ItemGroups.getGroups()) { - if (group.getType() != ItemGroup.Type.INVENTORY && group.getType() != ItemGroup.Type.HOTBAR && group.getType() != ItemGroup.Type.SEARCH) { - String name = "P_CRAFTING_" + ItemGroups.getGroups().indexOf(group); + ItemGroups.getGroups().stream().filter(group -> group.getType() != ItemGroup.Type.INVENTORY && group.getType() != ItemGroup.Type.HOTBAR && group.getType() != ItemGroup.Type.SEARCH) + .forEach(group -> { + String name = "P_CRAFTING_" + ItemGroups.getGroups().indexOf(group); - RecipeBookGroup recipeBookGroup = (RecipeBookGroup) RecipeBookGroup.CRAFTING_SEARCH.extend(name, (Object[]) new ItemStack[]{group.getIcon()}); - RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.put(recipeBookGroup, group); - RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.put(group, recipeBookGroup); - - CRAFTING_LIST.add(recipeBookGroup); - CRAFTING_SEARCH_LIST.add(recipeBookGroup); - } - } - CRAFTING_LIST.add(0, RecipeBookGroup.CRAFTING_SEARCH); - CRAFTING_LIST.add(RecipeBookGroup.CRAFTING_MISC); - CRAFTING_SEARCH_LIST.add(RecipeBookGroup.CRAFTING_MISC); - - RecipeBookGroup.SEARCH_MAP.get(RecipeBookGroup.CRAFTING_SEARCH).clear(); - RecipeBookGroup.SEARCH_MAP.get(RecipeBookGroup.CRAFTING_SEARCH).addAll(CRAFTING_SEARCH_LIST); - CrackerLog.info("done preparing recipe book groups in {}", System.currentTimeMillis() - i); - - @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); + RecipeBookGroup recipeBookGroup = (RecipeBookGroup) RecipeBookGroup.CRAFTING_SEARCH.extend(name, (Object[]) new ItemStack[]{group.getIcon()}); + RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.put(recipeBookGroup, group); + RecipeBookIsPainClient.ITEM_GROUP_TO_RECIPE_BOOK_GROUP.put(group, recipeBookGroup); CRAFTING_LIST.add(recipeBookGroup); CRAFTING_SEARCH_LIST.add(recipeBookGroup); }); + CRAFTING_LIST.add(0, RecipeBookGroup.CRAFTING_SEARCH); + CRAFTING_LIST.add(RecipeBookGroup.CRAFTING_MISC); + CRAFTING_SEARCH_LIST.add(RecipeBookGroup.CRAFTING_MISC); 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!"); + CrackerLog.info("done preparing recipe book groups in {} ms", System.currentTimeMillis() - i); } @Inject(at = @At("HEAD"), method = "getGroupForRecipe", cancellable = true) diff --git a/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java index 790a0f2..8fb2ca1 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/MouseWheelieCompatMixin.java @@ -30,6 +30,8 @@ public abstract class MouseWheelieCompatMixin { RecipeBookWidget bookWidget = (RecipeBookWidget) (Object) this; if (bookWidget.getPage() != currentTab.getPage()) { bookWidget.setPage(currentTab.getPage()); + bookWidget.updatePages(); + bookWidget.updatePageSwitchButtons(); } } } 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 4291d9a..0000000 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookGroupMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.melontini.recipebookispain.mixin; - -import net.minecraft.client.recipebook.RecipeBookGroup; -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.List; - -import static me.melontini.recipebookispain.client.RecipeBookIsPainClient.CRAFTING_LIST; - -@Mixin(RecipeBookGroup.class) -@Unique -public class RecipeBookGroupMixin { - @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/recipebook/RecipeBookGroup;CRAFTING:Ljava/util/List;"), method = "getGroups") - private static List recipe_book_is_pain$getGroups() { - return CRAFTING_LIST; - } -} \ No newline at end of file diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java index be98a43..174c63a 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/RecipeBookWidgetMixin.java @@ -5,7 +5,7 @@ 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.util.math.MatrixStack; -import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemGroups; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -29,7 +29,7 @@ public abstract class RecipeBookWidgetMixin { if (client.currentScreen != null) { this.tabButtons.stream().filter(widget -> widget.visible && widget.isHovered()).forEach(widget -> { if (widget.getCategory().name().contains("_SEARCH")) { - client.currentScreen.renderTooltip(matrices, ItemGroup.SEARCH.getDisplayName(), mouseX, mouseY); + client.currentScreen.renderTooltip(matrices, ItemGroups.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(); diff --git a/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java b/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java index 4451b26..9704cf3 100644 --- a/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java +++ b/src/main/java/me/melontini/recipebookispain/mixin/RecipeGroupButtonMixin.java @@ -1,15 +1,13 @@ - package me.melontini.recipebookispain.mixin; -import me.melontini.crackerutil.interfaces.AnimatedItemGroup; -import me.melontini.recipebookispain.access.RecipeGroupButtonAccess; -import me.melontini.recipebookispain.client.RecipeBookIsPainClient; +import me.melontini.recipebookispain.RecipeBookIsPainClient; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.screen.recipebook.RecipeGroupButtonWidget; import net.minecraft.client.gui.widget.ToggleButtonWidget; import net.minecraft.client.recipebook.RecipeBookGroup; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemGroup; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -17,10 +15,11 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import static me.melontini.recipebookispain.client.RecipeBookIsPainClient.rbip$renderOwo; +import static me.melontini.recipebookispain.RecipeBookIsPainClient.rbip$renderOwo; @Mixin(RecipeGroupButtonWidget.class) -public abstract class RecipeGroupButtonMixin extends ToggleButtonWidget implements RecipeGroupButtonAccess { +public abstract class RecipeGroupButtonMixin extends ToggleButtonWidget { + private static final boolean isOwOLoaded = FabricLoader.getInstance().isModLoaded("owo"); @Shadow @Final private RecipeBookGroup category; @@ -33,8 +32,12 @@ public abstract class RecipeGroupButtonMixin extends ToggleButtonWidget implemen @Inject(at = @At("HEAD"), method = "renderIcons", cancellable = true) private void rbip$render(ItemRenderer itemRenderer, CallbackInfo ci) { + ItemGroup group = RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.get(this.category); + if (group == null) return; + int i = this.toggled ? -2 : 0; MatrixStack matrices = new MatrixStack(); + if (this.bounce > 0.0F) { float f = 1.0F + 0.1F * (float) Math.sin(this.bounce / 15.0F * (float) Math.PI); matrices.push(); @@ -42,17 +45,15 @@ public abstract class RecipeGroupButtonMixin extends ToggleButtonWidget implemen matrices.scale(1.0F, f, 1.0F); matrices.translate((float) (-(this.getX() + 8)), (float) (-(this.getY() + 12)), 0.0F); } - if (FabricLoader.getInstance().isModLoaded("owo")) { - if (rbip$renderOwo(matrices, i, (RecipeGroupButtonWidget) (Object) this)) { + if (isOwOLoaded) { + if (rbip$renderOwo(matrices, i, (RecipeGroupButtonWidget) (Object) this, group)) { ci.cancel(); return; } } - if (RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.containsKey(this.category)) { - if (RecipeBookIsPainClient.RECIPE_BOOK_GROUP_TO_ITEM_GROUP.get(this.category) instanceof AnimatedItemGroup animatedItemGroup) { - animatedItemGroup.animateIcon(matrices, this.getX() + 9 + i, this.getY() + 5); - ci.cancel(); - } + if (group.shouldAnimateIcon()) { + group.getIconAnimation().animateIcon(matrices, this.getX() + 9 + i, this.getY() + 5); + ci.cancel(); } } } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 974c2be..a1642f0 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,9 +13,10 @@ "environment": "client", "entrypoints": { "client": [ - "me.melontini.recipebookispain.RecipeBookIsPain" + "me.melontini.recipebookispain.RecipeBookIsPainClient" ] }, + "accessWidener": "rbip.accesswidener", "mixins": [ "recipe-book-is-pain.mixins.json" ], diff --git a/src/main/resources/rbip.accesswidener b/src/main/resources/rbip.accesswidener new file mode 100644 index 0000000..b3cb6fd --- /dev/null +++ b/src/main/resources/rbip.accesswidener @@ -0,0 +1,3 @@ +accessWidener v2 named + +accessible field net/minecraft/item/ItemGroups SEARCH Lnet/minecraft/item/ItemGroup; \ No newline at end of file diff --git a/src/main/resources/recipe-book-is-pain.mixins.json b/src/main/resources/recipe-book-is-pain.mixins.json index 435fc02..2c31371 100644 --- a/src/main/resources/recipe-book-is-pain.mixins.json +++ b/src/main/resources/recipe-book-is-pain.mixins.json @@ -10,7 +10,8 @@ "ClientRecipeBookMixin", "ItemMixin", "MouseWheelieCompatMixin", - "RecipeBookWidgetMixin" + "RecipeBookWidgetMixin", + "RecipeGroupButtonMixin" ], "injectors": { "defaultRequire": 1 -- 2.51.2