Skip to content

Commit

Permalink
Remove brittle carried item auto-store for quick-craft
Browse files Browse the repository at this point in the history
  • Loading branch information
NotRyken committed Nov 6, 2024
1 parent 951f941 commit 5a4b982
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 106 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,21 @@
package dev.terminalmc.moremousetweaks.mixin.gui.other;

import com.llamalad7.mixinextras.sugar.Local;
import dev.terminalmc.moremousetweaks.MoreMouseTweaks;
import dev.terminalmc.moremousetweaks.mixin.accessor.MainAccessor;
import dev.terminalmc.moremousetweaks.util.inject.IRecipeBookResults;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.recipebook.RecipeBookPage;
import net.minecraft.client.gui.screens.recipebook.RecipeButton;
import net.minecraft.client.gui.screens.recipebook.RecipeCollection;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeHolder;
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.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import yalter.mousetweaks.MouseButton;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import static dev.terminalmc.moremousetweaks.config.Config.options;

Expand Down Expand Up @@ -97,90 +88,8 @@ public void mouseClicked(double mouseX, double mouseY, int button, int areaLeft,
if (options().quickCrafting
&& button == MouseButton.RIGHT.getValue()
&& recipeButton.isOnlyOption()) {

// Drop carried item if required
ItemStack carried = minecraft.player.containerMenu.getCarried();
ItemStack result = recipeButton.getRecipe().value().getResultItem(minecraft.level.registryAccess());
if (!carried.isEmpty() && (!ItemStack.isSameItemSameComponents(carried, result)
|| carried.getCount() + result.getCount() > carried.getMaxStackSize())) {
MoreMouseTweaks.LOG.warn("tf1");
mmt$tryPlaceCarried(carried.copy());
}

lastClickedRecipe = recipeButton.getRecipe();
lastClickedRecipeCollection = recipeButton.getCollection();
}
}


@Unique
public void mmt$tryPlaceCarried(ItemStack carried) {
if (carried.isEmpty()) return;

Inventory inv = minecraft.player.getInventory();
int maxStack = inv.getMaxStackSize(carried);
int remaining = carried.getCount();

List<Integer> ignoredSlots = new ArrayList<>();
while (remaining > 0) {
int i = mmt$getSlotForStack(inv, carried, ignoredSlots);
if (i == -1) {
i = mmt$getFreeSlot(inv);
MoreMouseTweaks.LOG.warn("finding free slot");
}
if (i == -1) {
minecraft.gameMode.handleInventoryMouseClick(
minecraft.player.containerMenu.containerId,
AbstractContainerMenu.SLOT_CLICKED_OUTSIDE,
MouseButton.LEFT.getValue(),
ClickType.THROW,
minecraft.player);
break;
}

ignoredSlots.add(i);
remaining -= maxStack - inv.getItem(i).getCount();
MoreMouseTweaks.LOG.warn("placing in slot {} with item {}", i, inv.getItem(i).getDisplayName().getString());
MainAccessor.getHandler().clickSlot(
minecraft.player.containerMenu.getSlot(i), MouseButton.LEFT, false);
}
}

@Unique
public int mmt$getSlotForStack(Inventory inv, ItemStack stack, List<Integer> ignoredSlots) {
if (!ignoredSlots.contains(inv.selected)
&& this.mmt$hasSpace(inv, inv.getItem(inv.selected), stack)) {
return inv.selected;
} else if (!ignoredSlots.contains(Inventory.SLOT_OFFHAND)
&& mmt$hasSpace(inv, inv.getItem(Inventory.SLOT_OFFHAND), stack)) {
return Inventory.SLOT_OFFHAND;
} else {
for (int i = 0; i < inv.items.size(); i++) {
if (!ignoredSlots.contains(i) && mmt$hasSpace(inv, inv.items.get(i), stack)) {
return i;
}
}
return -1;
}
}

@Unique
private boolean mmt$hasSpace(Inventory inv, ItemStack destination, ItemStack origin) {
return !destination.isEmpty()
&& ItemStack.isSameItemSameComponents(destination, origin)
&& destination.isStackable()
&& destination.getCount() < inv.getMaxStackSize(destination);
}

@Unique
public int mmt$getFreeSlot(Inventory inv) {
for(
int i = 4;
i < inv.items.size() + 5;
++i
) {
if (inv.items.get(i).isEmpty()) return i;
}
return -1;
}
}
1 change: 0 additions & 1 deletion common/src/main/resources/moremousetweaks.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
"mixins": [
],
"client": [
"accessor.MainAccessor",
"MixinClientPacketListener",
"MixinLocalPlayer",
"gui.other.MixinAbstractWidget",
Expand Down

0 comments on commit 5a4b982

Please sign in to comment.