From 61628613dee68cbdc120f82e0983e77447eb60c3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 1 Feb 2025 00:38:38 -0700 Subject: [PATCH] fix duplicate recipe memory clarify todo --- .../storage/CraftingRecipeMemory.java | 16 +++++++++++++--- .../storage/MetaTileEntityWorkbench.java | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeMemory.java b/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeMemory.java index 013e224f0f3..1d45d9a27e0 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeMemory.java +++ b/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeMemory.java @@ -1,5 +1,7 @@ package gregtech.common.metatileentities.storage; +import gregtech.api.util.ItemStackHashStrategy; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -12,6 +14,7 @@ import com.cleanroommc.modularui.network.NetworkUtils; import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.SyncHandler; +import it.unimi.dsi.fastutil.Hash; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,6 +35,11 @@ public class CraftingRecipeMemory extends SyncHandler { // server only public static final int MOUSE_CLICK = 2; + private final Hash.Strategy strategy = ItemStackHashStrategy.builder() + .compareItem(true) + .compareMetadata(true) + .build(); + private final MemorizedRecipe[] memorizedRecipes; private final IItemHandlerModifiable craftingMatrix; @@ -84,7 +92,7 @@ private MemorizedRecipe findOrCreateRecipe(ItemStack resultItemStack) { MemorizedRecipe existing = null; for (MemorizedRecipe memorizedRecipe : memorizedRecipes) { if (memorizedRecipe != null && - ItemStack.areItemStacksEqual(memorizedRecipe.recipeResult, resultItemStack)) { + strategy.equals(memorizedRecipe.recipeResult, resultItemStack)) { existing = memorizedRecipe; break; } @@ -92,8 +100,10 @@ private MemorizedRecipe findOrCreateRecipe(ItemStack resultItemStack) { // we already have a recipe that matches // move it to the front - if (existing != null && !existing.recipeLocked) { - if (existing.index == 0) return existing; // it's already at the front + if (existing != null) { + // it's already at the front or it's locked + if (existing.index == 0 || existing.recipeLocked) return existing; + int removed = existing.index; removeRecipe(existing.index); syncToClient(REMOVE_RECIPE, buffer -> buffer.writeByte(removed)); diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java index e7380bc3ff9..0b47d420a56 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java @@ -317,7 +317,7 @@ public IWidget createCraftingGrid() { public IWidget createCraftingOutput(PosGuiData guiData, PanelSyncManager syncManager) { var amountCrafted = new IntSyncValue(this::getItemsCrafted, this::setItemsCrafted); syncManager.syncValue("amount_crafted", amountCrafted); - amountCrafted.updateCacheFromSource(true); // todo remove + amountCrafted.updateCacheFromSource(true); // todo remove on mui2 rc3 return Flow.column() .size(54)