From c868eadb3c922a3cf4d0188b17dbd838c79ae43f Mon Sep 17 00:00:00 2001 From: NotRyken <127091011+NotRyken@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:13:33 +0800 Subject: [PATCH] Update to mc1.21.3 --- common/build.gradle | 17 ++ .../moremousetweaks/MoreMouseTweaks.java | 10 +- .../mixin/MixinClientPacketListener.java | 6 +- .../other/MixinOverlayRecipeComponent.java | 50 ++++-- .../gui/other/MixinRecipeBookComponent.java | 147 +++++++++++------- .../mixin/gui/other/MixinRecipeBookPage.java | 18 ++- .../screen/MixinAbstractFurnaceScreen.java | 51 ------ ...ava => MixinAbstractRecipeBookScreen.java} | 22 +-- .../mixin/gui/screen/MixinCraftingScreen.java | 50 ------ .../MixinCreativeModeInventoryScreen.java | 4 +- .../resources/moremousetweaks.accesswidener | 2 +- .../resources/moremousetweaks.mixins.json | 4 +- gradle.properties | 40 ++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 14 files changed, 204 insertions(+), 219 deletions(-) delete mode 100644 common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractFurnaceScreen.java rename common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/{MixinInventoryScreen.java => MixinAbstractRecipeBookScreen.java} (70%) delete mode 100644 common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCraftingScreen.java diff --git a/common/build.gradle b/common/build.gradle index 32808f6..6bbd576 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -3,7 +3,24 @@ plugins { id("net.neoforged.moddev") } +// Vanilla depends on ASM 9.3, MDG makes that a 'strict' version constraint, +// but Mixin and MixinExtras needs newer ASM so we override that here. +configurations.configureEach { + resolutionStrategy.eachDependency { details -> + if (details.requested.group == "org.ow2.asm") { + details.useVersion(asm_version) + details.because("Mixin requires new ASM") + } + } +} + dependencies { + compileOnly "org.ow2.asm:asm:${asm_version}" + compileOnly "org.ow2.asm:asm-analysis:${asm_version}" + compileOnly "org.ow2.asm:asm-commons:${asm_version}" + compileOnly "org.ow2.asm:asm-tree:${asm_version}" + compileOnly "org.ow2.asm:asm-util:${asm_version}" + compileOnly("org.spongepowered:mixin:${mixin_version}") compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixinextras_version}")) diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/MoreMouseTweaks.java b/common/src/main/java/dev/terminalmc/moremousetweaks/MoreMouseTweaks.java index b18095d..7d1a98b 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/MoreMouseTweaks.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/MoreMouseTweaks.java @@ -22,6 +22,8 @@ import dev.terminalmc.moremousetweaks.util.ModLogger; import net.minecraft.client.Minecraft; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; public class MoreMouseTweaks { public static final String MOD_ID = "moremousetweaks"; @@ -29,6 +31,7 @@ public class MoreMouseTweaks { public static final ModLogger LOG = new ModLogger(MOD_NAME); public static int lastUpdatedSlot = -1; + public static @Nullable ItemStack resultStack = null; public static void init() { Config.getAndSave(); @@ -44,14 +47,13 @@ public static void onConfigSaved(Config config) { } else { InteractionManager.setTickRate(config.options.interactionRateClient); } - updateItemTags(config); } public static void updateItemTags(Config config) { config.options.typeMatchItems.clear(); - BuiltInRegistries.ITEM.getTags().forEach((pair) -> { - if (config.options.typeMatchTags.contains(pair.getFirst().location().getPath())) { - pair.getSecond().forEach((itemHolder) -> + BuiltInRegistries.ITEM.getTags().forEach((named) -> { + if (config.options.typeMatchTags.contains(named.key().location().getPath())) { + named.forEach((itemHolder) -> config.options.typeMatchItems.add(itemHolder.value())); } }); diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/MixinClientPacketListener.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/MixinClientPacketListener.java index eb85424..01f2fb8 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/MixinClientPacketListener.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/MixinClientPacketListener.java @@ -27,7 +27,7 @@ import net.minecraft.network.Connection; import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.ClientboundLoginPacket; -import net.minecraft.network.protocol.game.ClientboundSetCarriedItemPacket; +import net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -48,8 +48,8 @@ private void onLogin(ClientboundLoginPacket packet, CallbackInfo ci) { MoreMouseTweaks.updateItemTags(Config.get()); } - @Inject(method = "handleSetCarriedItem", at = @At("HEAD")) - public void onHeldItemChangeBegin(ClientboundSetCarriedItemPacket packet, CallbackInfo ci) { + @Inject(method = "handleSetCursorItem", at = @At("HEAD")) + public void onHeldItemChangeBegin(ClientboundSetCursorItemPacket packet, CallbackInfo ci) { InteractionManager.triggerSend(InteractionManager.TriggerType.HELD_ITEM_CHANGE); } diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinOverlayRecipeComponent.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinOverlayRecipeComponent.java index 1d71ed0..bed7ab5 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinOverlayRecipeComponent.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinOverlayRecipeComponent.java @@ -16,19 +16,27 @@ package dev.terminalmc.moremousetweaks.mixin.gui.other; +import com.llamalad7.mixinextras.sugar.Local; +import dev.terminalmc.moremousetweaks.MoreMouseTweaks; import dev.terminalmc.moremousetweaks.config.Config; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.recipebook.OverlayRecipeComponent; +import net.minecraft.client.gui.screens.recipebook.RecipeCollection; +import net.minecraft.util.context.ContextMap; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.display.RecipeDisplayEntry; +import net.minecraft.world.item.crafting.display.RecipeDisplayId; 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 yalter.mousetweaks.MouseButton; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -44,9 +52,26 @@ public class MixinOverlayRecipeComponent { @Shadow @Final private List recipeButtons; @Shadow - private RecipeHolder lastRecipeClicked; - @Shadow - private Minecraft minecraft; + private RecipeDisplayId lastRecipeClicked; + + @Unique + private ContextMap mmt$contextMap; + @Unique + private final List mmt$recipes = new ArrayList<>(); + + @Inject( + method = "init", + at = @At( + value = "INVOKE", + target = "Ljava/util/List;add(Ljava/lang/Object;)Z", + shift = At.Shift.AFTER + ) + ) + private void wrapAdd(RecipeCollection $$0, ContextMap contextMap, boolean $$2, int $$3, int $$4, + int $$5, int $$6, float $$7, CallbackInfo ci, @Local RecipeDisplayEntry entry) { + mmt$contextMap = contextMap; + mmt$recipes.add(entry); + } @Inject( method = "mouseClicked", @@ -59,20 +84,23 @@ private void onMouseClicked(double mouseX, double mouseY, int button, options().quickCrafting && button == MouseButton.RIGHT.getValue() ) { - Iterator iter = this.recipeButtons.iterator(); + Iterator buttonIter = this.recipeButtons.iterator(); OverlayRecipeComponent.OverlayRecipeButton overlayButton; + Iterator recipeIter = mmt$recipes.iterator(); + RecipeDisplayEntry recipe; do { - if (!iter.hasNext()) { + if (!buttonIter.hasNext() || !recipeIter.hasNext()) { cir.setReturnValue(false); return; // Crash prevention } - overlayButton = iter.next(); + overlayButton = buttonIter.next(); + recipe = recipeIter.next(); } while(!overlayButton.mouseClicked(mouseX, mouseY, MouseButton.LEFT.getValue())); // Optionally prevent clicking past a full carried stack - ItemStack carried = minecraft.player.containerMenu.getCarried(); - ItemStack result = overlayButton.recipe.value().getResultItem( - minecraft.level.registryAccess()); + Minecraft mc = Minecraft.getInstance(); + ItemStack carried = mc.player.containerMenu.getCarried(); + ItemStack result = recipe.display().result().resolveForFirstStack(mmt$contextMap); if ( !options().qcOverflowMode.equals(Config.QcOverflowMode.NONE) || carried.isEmpty() @@ -83,6 +111,8 @@ private void onMouseClicked(double mouseX, double mouseY, int button, ) { // Quick-craft this.lastRecipeClicked = overlayButton.recipe; + // Notify of result stack + MoreMouseTweaks.resultStack = result; cir.setReturnValue(true); } } diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookComponent.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookComponent.java index 16fd035..09959c9 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookComponent.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookComponent.java @@ -30,11 +30,10 @@ import net.minecraft.client.gui.screens.recipebook.RecipeCollection; import net.minecraft.network.protocol.game.ServerboundPlaceRecipePacket; import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.StackedContents; -import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.inventory.RecipeBookMenu; +import net.minecraft.world.entity.player.StackedItemContents; +import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.display.RecipeDisplayId; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -44,6 +43,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import yalter.mousetweaks.MouseButton; +import java.util.Collection; import java.util.List; import static dev.terminalmc.moremousetweaks.config.Config.options; @@ -64,7 +64,7 @@ public abstract class MixinRecipeBookComponent implements IRecipeBookWidget { @Shadow private RecipeBookTabButton selectedTab; @Shadow - protected abstract void updateCollections(boolean resetPageNumber); + protected abstract void updateCollections(boolean resetPageNumber, boolean flag); @Shadow private int height; @Shadow @@ -74,9 +74,23 @@ public abstract class MixinRecipeBookComponent implements IRecipeBookWidget { @Shadow protected Minecraft minecraft; @Shadow - @Final private StackedContents stackedContents; - @Shadow - protected RecipeBookMenu menu; + @Final private StackedItemContents stackedContents; + @Shadow + @Final protected RecipeBookMenu menu; + + @Shadow + protected abstract boolean isFiltering(); + + @Shadow + protected abstract boolean isCraftingSlot(Slot slot); + + @Shadow + @Final + public static int IMAGE_HEIGHT; + + @Shadow + @Final + public static int IMAGE_WIDTH; /** * Recipe book page and tab scrolling. @@ -108,7 +122,7 @@ else if (mouseX >= left - 30 && mouseX < left) { selectedTab.setStateTriggered(false); selectedTab = tabButtons.get(newIndex); selectedTab.setStateTriggered(true); - updateCollections(true); + updateCollections(true, this.isFiltering()); } return ScrollAction.SUCCESS; } @@ -122,25 +136,21 @@ else if (mouseX >= left - 30 && mouseX < left) { method = "mouseClicked", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;handlePlaceRecipe(ILnet/minecraft/world/item/crafting/RecipeHolder;Z)V", + target = "Lnet/minecraft/client/gui/screens/recipebook/RecipeBookComponent;isOffsetNextToMainGUI()Z", shift = At.Shift.AFTER ) ) public void mouseClicked(double mouseX, double mouseY, int mouseButton, CallbackInfoReturnable cir) { - if (options().quickCrafting & mouseButton == MouseButton.RIGHT.getValue()) { - int resSlot = menu.getResultSlotIndex(); - RecipeHolder recipe = recipeBookPage.getLastClickedRecipe(); - if (mmt$canCraftMore(recipe)) { - InteractionManager.clear(); - InteractionManager.setWaiter((triggerType) -> - MoreMouseTweaks.lastUpdatedSlot >= menu.getSize()); - } - + if (options().quickCrafting && mouseButton == MouseButton.RIGHT.getValue()) { + // Result is set by the call to RecipeBookPage#mouseClicked earlier + // in the target method. + ItemStack result = MoreMouseTweaks.resultStack; + if (result == null || result.isEmpty()) return; + // Quick-move if bulk crafting or overflowing to inventory, otherwise pickup ClickType clickType = ClickType.PICKUP; ItemStack carried = minecraft.player.containerMenu.getCarried(); - ItemStack result = recipe.value().getResultItem(minecraft.level.registryAccess()); if ( options().wholeStackModifier.isDown() || ( @@ -154,8 +164,8 @@ public void mouseClicked(double mouseX, double mouseY, int mouseButton, ) { clickType = ClickType.QUICK_MOVE; } - InteractionManager.pushClickEvent( - menu.containerId, resSlot, MouseButton.LEFT.getValue(), clickType); + InteractionManager.pushClickEvent(menu.containerId, mmt$getResultSlotIndex(menu), + MouseButton.LEFT.getValue(), clickType); } } @@ -169,68 +179,93 @@ public void mouseClicked(double mouseX, double mouseY, int mouseButton, ) public void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { if (!options().quickCrafting || !isVisible() || minecraft.player.isSpectator()) return; - if (!Minecraft.getInstance().options.keyDrop.matches(keyCode, scanCode)) return; - + if (!minecraft.options.keyDrop.matches(keyCode, scanCode)) return; + ignoreTextInput = false; - RecipeHolder oldRecipeEntry = recipeBookPage.getLastClickedRecipe(); + RecipeDisplayId oldRecipeEntry = recipeBookPage.getLastClickedRecipe(); + if (this.recipeBookPage.mouseClicked(MoreMouseTweaks.getMouseX(), MoreMouseTweaks.getMouseY(), - MouseButton.LEFT.getValue(), (this.width - 147) / 2 - this.xOffset, - (this.height - 166) / 2, 147, 166)) { - RecipeHolder recipeEntry = recipeBookPage.getLastClickedRecipe(); + MouseButton.LEFT.getValue(), (this.width - IMAGE_WIDTH) / 2 - this.xOffset, + (this.height - IMAGE_HEIGHT) / 2, IMAGE_WIDTH, IMAGE_HEIGHT)) { + + RecipeDisplayId recipeId = recipeBookPage.getLastClickedRecipe(); RecipeCollection resultCollection = recipeBookPage.getLastClickedRecipeCollection(); - if (!resultCollection.isCraftable(recipeEntry)) { - return; - } - int resSlot = menu.getResultSlotIndex(); + + if (!resultCollection.isCraftable(recipeId)) return; + int resSlot = mmt$getResultSlotIndex(menu); + if (options().allOfKindModifier.isDown()) { if ( - oldRecipeEntry != recipeEntry + oldRecipeEntry != recipeId || menu.slots.get(resSlot).getItem().isEmpty() - || mmt$canCraftMore(recipeEntry) + || mmt$canCraftMore(recipeId) ) { InteractionManager.push(new InteractionManager.PacketEvent( - new ServerboundPlaceRecipePacket(menu.containerId, recipeEntry, true), - (triggerType) -> MoreMouseTweaks.lastUpdatedSlot >= menu.getSize())); + new ServerboundPlaceRecipePacket(menu.containerId, recipeId, true), + (triggerType) -> !mmt$isCraftingSlot(MoreMouseTweaks.lastUpdatedSlot))); } - int cnt = stackedContents.getBiggestCraftableStack(recipeEntry, recipeEntry.value() - .getResultItem(minecraft.level.registryAccess()).getMaxStackSize(), null); - for (int i = 1; i < cnt; i++) { - InteractionManager.pushClickEvent(menu.containerId, resSlot, - MouseButton.RIGHT.getValue(), ClickType.THROW); - } - } else { - if (oldRecipeEntry != recipeEntry || menu.slots.get(resSlot).getItem().isEmpty()) { + InteractionManager.pushClickEvent(menu.containerId, resSlot, + MouseButton.RIGHT.getValue(), ClickType.THROW); + + } + else { + if (oldRecipeEntry != recipeId || menu.slots.get(resSlot).getItem().isEmpty()) { InteractionManager.push(new InteractionManager.PacketEvent( - new ServerboundPlaceRecipePacket(menu.containerId, recipeEntry, false), - (triggerType) -> MoreMouseTweaks.lastUpdatedSlot >= menu.getSize())); + new ServerboundPlaceRecipePacket(menu.containerId, recipeId, false), + (triggerType) -> !mmt$isCraftingSlot(MoreMouseTweaks.lastUpdatedSlot))); } } + InteractionManager.push(new InteractionManager.CallbackEvent(() -> { minecraft.gameMode.handleInventoryMouseClick(menu.containerId, - menu.getResultSlotIndex(), MouseButton.LEFT.getValue(), + mmt$getResultSlotIndex(menu), MouseButton.LEFT.getValue(), ClickType.THROW, minecraft.player); - updateCollections(false); + updateCollections(false, isFiltering()); return InteractionManager.TICK_WAITER; }, true)); + + cir.setReturnValue(true); } } + @Unique + private boolean mmt$isCraftingSlot(int index) { + if (index < 0 || index >= menu.slots.size()) return false; + return isCraftingSlot(menu.getSlot(index)); + } + @Unique - private boolean mmt$canCraftMore(RecipeHolder recipeEntry) { - return mmt$getBiggestCraftingStackSize() < stackedContents.getBiggestCraftableStack( - recipeEntry, recipeEntry.value().getResultItem(minecraft.level.registryAccess()) - .getMaxStackSize(), null); + private boolean mmt$canCraftMore(RecipeDisplayId recipeEntry) { + return true; +// return mmt$getBiggestCraftingStackSize() < stackedContents.getBiggestCraftableStack( +// recipeEntry, recipeEntry.value().getResultItem(minecraft.level.registryAccess()) +// .getMaxStackSize(), null); } @Unique private int mmt$getBiggestCraftingStackSize() { - int resSlot = menu.getResultSlotIndex(); int cnt = 0; - for (int i = 0; i < menu.getSize(); i++) { - if (i == resSlot) continue; - cnt = Math.max(cnt, menu.slots.get(i).getItem().getCount()); + for (Slot slot : mmt$getInputSlots()) { + cnt = Math.max(cnt, slot.getItem().getCount()); } return cnt; } + + @Unique + private int mmt$getResultSlotIndex(RecipeBookMenu menu) { + return switch(menu) { + case AbstractCraftingMenu m -> m.getResultSlot().index; + case AbstractFurnaceMenu m -> m.getResultSlot().index; + default -> 0; + }; + } + + @Unique + public Collection mmt$getInputSlots() { + return switch(menu) { + case AbstractCraftingMenu m -> m.getInputGridSlots(); + default -> List.of(); + }; + } } diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookPage.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookPage.java index 6da13d4..56bfe98 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookPage.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/other/MixinRecipeBookPage.java @@ -18,6 +18,7 @@ package dev.terminalmc.moremousetweaks.mixin.gui.other; import com.llamalad7.mixinextras.sugar.Local; +import dev.terminalmc.moremousetweaks.MoreMouseTweaks; import dev.terminalmc.moremousetweaks.config.Config; import dev.terminalmc.moremousetweaks.util.inject.IRecipeBookResults; import net.minecraft.client.Minecraft; @@ -25,7 +26,7 @@ import net.minecraft.client.gui.screens.recipebook.RecipeButton; import net.minecraft.client.gui.screens.recipebook.RecipeCollection; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.display.RecipeDisplayId; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -52,7 +53,7 @@ public abstract class MixinRecipeBookPage implements IRecipeBookResults { @Shadow protected abstract void updateButtonsForPage(); @Shadow - private RecipeHolder lastClickedRecipe; + private RecipeDisplayId lastClickedRecipe; @Shadow private RecipeCollection lastClickedRecipeCollection; @Shadow @@ -86,9 +87,9 @@ public abstract class MixinRecipeBookPage implements IRecipeBookResults { ), locals = LocalCapture.CAPTURE_FAILSOFT ) - public void mouseClicked(double mouseX, double mouseY, int button, int areaLeft, int areaTop, - int areaWidth, int areaHeight, CallbackInfoReturnable cir, - Iterator iterator, @Local RecipeButton recipeButton) { + public void mouseClicked(double mouseX, double mouseY, int button, int areaLeft, int areaTop, + int areaWidth, int areaHeight, CallbackInfoReturnable cir, + @Local Iterator iterator, @Local RecipeButton recipeButton) { if ( options().quickCrafting && button == MouseButton.RIGHT.getValue() @@ -96,8 +97,7 @@ public void mouseClicked(double mouseX, double mouseY, int button, int areaLeft, ) { // Optionally prevent clicking past a full carried stack ItemStack carried = minecraft.player.containerMenu.getCarried(); - ItemStack result = recipeButton.getRecipe().value().getResultItem( - minecraft.level.registryAccess()); + ItemStack result = recipeButton.getDisplayStack(); if ( !options().qcOverflowMode.equals(Config.QcOverflowMode.NONE) || carried.isEmpty() @@ -107,8 +107,10 @@ public void mouseClicked(double mouseX, double mouseY, int button, int areaLeft, ) ) { // Quick-craft - lastClickedRecipe = recipeButton.getRecipe(); + lastClickedRecipe = recipeButton.getCurrentRecipe(); lastClickedRecipeCollection = recipeButton.getCollection(); + // Notify of result stack + MoreMouseTweaks.resultStack = result; } } } diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractFurnaceScreen.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractFurnaceScreen.java deleted file mode 100644 index 1ec4f48..0000000 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractFurnaceScreen.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2022 Siphalor - * Copyright 2024 TerminalMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dev.terminalmc.moremousetweaks.mixin.gui.screen; - -import dev.terminalmc.moremousetweaks.util.ScrollAction; -import dev.terminalmc.moremousetweaks.util.inject.IRecipeBookWidget; -import dev.terminalmc.moremousetweaks.util.inject.IScrollableRecipeBook; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.gui.screens.inventory.AbstractFurnaceScreen; -import net.minecraft.client.gui.screens.recipebook.AbstractFurnaceRecipeBookComponent; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.AbstractFurnaceMenu; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -/** - * Recipe book scrolling helper for furnace screens. - */ -@Mixin(AbstractFurnaceScreen.class) -public abstract class MixinAbstractFurnaceScreen - extends AbstractContainerScreen implements IScrollableRecipeBook { - @Shadow - @Final public AbstractFurnaceRecipeBookComponent recipeBookComponent; - - public MixinAbstractFurnaceScreen( - AbstractFurnaceMenu container, Inventory playerInventory, Component name) { - super(container, playerInventory, name); - } - - @Override - public ScrollAction mmt$onMouseScrollRecipeBook(double mouseX, double mouseY, double scrollAmount) { - return ((IRecipeBookWidget)recipeBookComponent).mmt$scrollRecipeBook(mouseX, mouseY, scrollAmount); - } -} diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinInventoryScreen.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractRecipeBookScreen.java similarity index 70% rename from common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinInventoryScreen.java rename to common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractRecipeBookScreen.java index f5561d6..08b4737 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinInventoryScreen.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinAbstractRecipeBookScreen.java @@ -20,12 +20,12 @@ import dev.terminalmc.moremousetweaks.util.ScrollAction; import dev.terminalmc.moremousetweaks.util.inject.IRecipeBookWidget; import dev.terminalmc.moremousetweaks.util.inject.IScrollableRecipeBook; -import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen; -import net.minecraft.client.gui.screens.inventory.InventoryScreen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.AbstractRecipeBookScreen; import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.inventory.RecipeBookMenu; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,17 +33,17 @@ /** * Recipe book scrolling helper for inventory screens. */ -@Mixin(InventoryScreen.class) -public abstract class MixinInventoryScreen - extends EffectRenderingInventoryScreen implements IScrollableRecipeBook { +@Mixin(AbstractRecipeBookScreen.class) +public abstract class MixinAbstractRecipeBookScreen + extends AbstractContainerScreen implements IScrollableRecipeBook { @Shadow - @Final private RecipeBookComponent recipeBookComponent; + @Final private RecipeBookComponent recipeBookComponent; - public MixinInventoryScreen(InventoryMenu container, Inventory playerInventory, Component text) { - super(container, playerInventory, text); - } + public MixinAbstractRecipeBookScreen(RecipeBookMenu menu, Inventory playerInventory, Component title) { + super(menu, playerInventory, title); + } - @Override + @Override public ScrollAction mmt$onMouseScrollRecipeBook(double mouseX, double mouseY, double scrollAmount) { return ((IRecipeBookWidget) recipeBookComponent).mmt$scrollRecipeBook(mouseX, mouseY, scrollAmount); } diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCraftingScreen.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCraftingScreen.java deleted file mode 100644 index 8f886a0..0000000 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCraftingScreen.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2022 Siphalor - * Copyright 2024 TerminalMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dev.terminalmc.moremousetweaks.mixin.gui.screen; - -import dev.terminalmc.moremousetweaks.util.ScrollAction; -import dev.terminalmc.moremousetweaks.util.inject.IRecipeBookWidget; -import dev.terminalmc.moremousetweaks.util.inject.IScrollableRecipeBook; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.gui.screens.inventory.CraftingScreen; -import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.CraftingMenu; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -/** - * Recipe book scrolling helper for crafting screens. - */ -@Mixin(CraftingScreen.class) -public abstract class MixinCraftingScreen - extends AbstractContainerScreen implements IScrollableRecipeBook { - @Shadow - @Final private RecipeBookComponent recipeBookComponent; - - public MixinCraftingScreen(CraftingMenu menu, Inventory playerInventory, Component title) { - super(menu, playerInventory, title); - } - - @Override - public ScrollAction mmt$onMouseScrollRecipeBook(double mouseX, double mouseY, double scrollAmount) { - return ((IRecipeBookWidget)recipeBookComponent).mmt$scrollRecipeBook(mouseX, mouseY, scrollAmount); - } -} diff --git a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCreativeModeInventoryScreen.java b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCreativeModeInventoryScreen.java index bcca3f4..7308a34 100644 --- a/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCreativeModeInventoryScreen.java +++ b/common/src/main/java/dev/terminalmc/moremousetweaks/mixin/gui/screen/MixinCreativeModeInventoryScreen.java @@ -19,8 +19,8 @@ import dev.terminalmc.moremousetweaks.util.ScrollAction; import dev.terminalmc.moremousetweaks.util.inject.ISpecialScrollableScreen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; -import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen; import net.minecraft.network.chat.Component; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Inventory; @@ -41,7 +41,7 @@ */ @Mixin(CreativeModeInventoryScreen.class) public abstract class MixinCreativeModeInventoryScreen - extends EffectRenderingInventoryScreen + extends AbstractContainerScreen implements ISpecialScrollableScreen { @Shadow diff --git a/common/src/main/resources/moremousetweaks.accesswidener b/common/src/main/resources/moremousetweaks.accesswidener index 8e7d305..be19c77 100644 --- a/common/src/main/resources/moremousetweaks.accesswidener +++ b/common/src/main/resources/moremousetweaks.accesswidener @@ -1,4 +1,4 @@ accessWidener v2 named # https://fabricmc.net/wiki/tutorial:accesswideners accessible class net/minecraft/client/gui/screens/recipebook/OverlayRecipeComponent$OverlayRecipeButton -accessible field net/minecraft/client/gui/screens/recipebook/OverlayRecipeComponent$OverlayRecipeButton recipe Lnet/minecraft/world/item/crafting/RecipeHolder; +accessible field net/minecraft/client/gui/screens/recipebook/OverlayRecipeComponent$OverlayRecipeButton recipe Lnet/minecraft/world/item/crafting/display/RecipeDisplayId; diff --git a/common/src/main/resources/moremousetweaks.mixins.json b/common/src/main/resources/moremousetweaks.mixins.json index 0d06ee6..0debfeb 100644 --- a/common/src/main/resources/moremousetweaks.mixins.json +++ b/common/src/main/resources/moremousetweaks.mixins.json @@ -14,10 +14,8 @@ "gui.other.MixinRecipeBookComponent", "gui.other.MixinRecipeBookPage", "gui.other.MixinTradeOfferButton", - "gui.screen.MixinAbstractFurnaceScreen", - "gui.screen.MixinCraftingScreen", "gui.screen.MixinCreativeModeInventoryScreen", - "gui.screen.MixinInventoryScreen", + "gui.screen.MixinAbstractRecipeBookScreen", "gui.screen.MixinMerchantScreen", "gui.other.MixinSlot", "mousetweaks.MixinGuiContainerHandler", diff --git a/gradle.properties b/gradle.properties index 1c79e24..84bccc2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ # Neo/Forge version ranges: https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html # Project -mod_version=1.0.0+1.21-beta.2 +mod_version=1.0.0+1.21.3-beta.2 mod_group=dev.terminalmc mod_id=moremousetweaks mod_id_alt=mmt @@ -25,44 +25,44 @@ java_versions_fabric=>=21 java_versions_neoforge=[21,) # Minecraft -minecraft_version=1.21 -minecraft_versions_fabric=>1.20.6 <1.22 -minecraft_versions_neoforge=(1.20.6, 1.22) +minecraft_version=1.21.3 +minecraft_versions_fabric=>1.21.1 <1.22 +minecraft_versions_neoforge=(1.21.1, 1.22) # Parchment https://parchmentmc.org/docs/getting-started#choose-a-version parchment_minecraft_version=1.21 -parchment_version=2024.07.28 +parchment_version=2024.11.10 # Fabric https://fabricmc.net/develop -fabric_loader_version=0.16.5 +fabric_loader_version=0.16.9 fabric_loader_versions=>=0.15.0 -fabric_api_version=0.102.0+1.21 +fabric_api_version=0.108.0+1.21.3 fabric_api_versions=* # NeoForge https://projects.neoforged.net/neoforged/neoforge neoforge_loader_versions=[1,) -neoforge_version=21.0.167 -neoforge_versions=[21.0.143, 22) +neoforge_version=21.3.33-beta +neoforge_versions=[21.2.0, 22) # NeoForm https://projects.neoforged.net/neoforged/neoform -neoform_version=1.21-20240613.152323 +neoform_version=1.21.3-20241023.131943 # MouseTweaks https://modrinth.com/mod/aC3cM3Vq/versions -mousetweaks_version_fabric=1.21-2.26-fabric +mousetweaks_version_fabric=1.21.3-2.27-fabric mousetweaks_versions_fabric=* -mousetweaks_version_neoforge=1.21-2.26.1-neoforge +mousetweaks_version_neoforge=1.21.3-2.26.1-neoforge mousetweaks_versions_neoforge=[1,) # Cloth Config https://modrinth.com/mod/9s6osm5g/versions -clothconfig_version=15.0.140 +clothconfig_version=16.0.141 clothconfig_versions_fabric=>=15 clothconfig_versions_neoforge=[15,) # ModMenu https://modrinth.com/mod/mOgUt4GM/versions -modmenu_version=11.0.2 -modmenu_versions_fabric=>10 +modmenu_version=12.0.0-beta.1 +modmenu_versions_fabric=>11 # https://modrinth.com/mod/tJzrFuyy/versions -itemlocks_version=1.21-1.3.9 +itemlocks_version=1.21.2-1.3.9 # GitHub, Modrinth, CurseForge releases # Plural properties expect CSV lists @@ -87,12 +87,14 @@ release_required_dep_ids_neoforge_cf=mouse-tweaks,cloth-config mixin_version=0.8.7 # MixinExtras https://github.com/LlamaLad7/MixinExtras/releases mixinextras_version=0.4.1 +# ASM https://mvnrepository.com/artifact/org.ow2.asm/asm +asm_version=9.7 # Plugins # Fabric Loom https://mvnrepository.com/artifact/net.fabricmc/fabric-loom -loom_version=1.7.4 +loom_version=1.8.12 # ModDev https://plugins.gradle.org/plugin/net.neoforged.moddev -moddev_version=1.0.19 +moddev_version=2.0.44-beta # Minotaur https://plugins.gradle.org/plugin/com.modrinth.minotaur minotaur_version=2.8.7 # CurseForgeGradle https://plugins.gradle.org/plugin/net.darkhax.curseforgegradle @@ -100,7 +102,7 @@ curseforgegradle_version=1.1.25 # github-release https://plugins.gradle.org/plugin/com.github.breadmoirai.github-release githubrelease_version=2.5.2 # grgit-service https://github.com/ajoberstar/grgit/releases -grgitservice_version=5.2.2 +grgitservice_version=5.3.0 # licenser https://plugins.gradle.org/plugin/org.cadixdev.licenser licenser_version=0.6.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a441313..94113f2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME