diff --git a/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeLogic.java b/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeLogic.java index 4557d28a9df..073d662369b 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeLogic.java +++ b/src/main/java/gregtech/common/metatileentities/storage/CraftingRecipeLogic.java @@ -30,6 +30,7 @@ import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.IntArraySet; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; import it.unimi.dsi.fastutil.objects.Object2BooleanOpenCustomHashMap; @@ -43,7 +44,7 @@ public class CraftingRecipeLogic extends SyncHandler { // client only public static final int UPDATE_INGREDIENTS = 1; public static final int RESET_INGREDIENTS = 2; - public static final int SYNC_STACK = 4; + public static final int SYNC_STACK = 3; // server only public static final int UPDATE_MATRIX = 0; @@ -71,7 +72,7 @@ public class CraftingRecipeLogic extends SyncHandler { private final Int2IntMap compactedIndexes = new Int2IntArrayMap(9); private final Int2IntMap slotMap = new Int2IntArrayMap(); - private final Map> replaceAttemptMap = new Int2ObjectArrayMap<>(); + private final Int2ObjectMap> replaceAttemptMap = new Int2ObjectArrayMap<>(); private final InventoryCrafting craftingMatrix; private final IInventory craftingResultInventory = new InventoryCraftResult(); private final CachedRecipeData cachedRecipeData; diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java index 3e00c251170..d837e3bcd80 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java @@ -152,12 +152,12 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) widgets.get(i).add(new ItemSlot().slot(SyncHandlers.itemSlot(inventory, index) .slotGroup("item_inv") .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (!onlyAmountChanged && !client && !init) { - for (var facing : EnumFacing.VALUES) { - var neighbor = getNeighbor(facing); - if (neighbor instanceof IGregTechTileEntity gregTechTileEntity) { - gregTechTileEntity.getMetaTileEntity().onNeighborChanged(); - } + if (client || init) return; + + for (var facing : EnumFacing.VALUES) { + var neighbor = getNeighbor(facing); + if (neighbor instanceof IGregTechTileEntity gtte) { + gtte.getMetaTileEntity().onNeighborChanged(); } } }))); diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java index e234161aa73..6da4abc4031 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java @@ -325,7 +325,6 @@ 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 on mui2 rc3 return Flow.column() .size(54) @@ -418,8 +417,7 @@ public void readHandler(PacketBuffer buf) { this.toolInventory, this.connectedInventory)); - getCraftingRecipeLogic() - .updateInventory(this.combinedInventory); + getCraftingRecipeLogic().updateInventory(this.combinedInventory); } @Override diff --git a/src/main/java/gregtech/common/mui/widget/workbench/CraftingInputSlot.java b/src/main/java/gregtech/common/mui/widget/workbench/CraftingInputSlot.java index 0d45bdd1355..b1521bfe39f 100644 --- a/src/main/java/gregtech/common/mui/widget/workbench/CraftingInputSlot.java +++ b/src/main/java/gregtech/common/mui/widget/workbench/CraftingInputSlot.java @@ -43,6 +43,7 @@ private CraftingInputSlot(IItemHandlerModifiable handler, int index) { tooltip.addFromItem(stack); }); + // for hovering with items in hand listenGuiAction((IGuiAction.MouseDrag) (m, t) -> { if (isHovering() && dragging && syncHandler.isValid()) { var player = syncHandler.getSyncManager().getCursorItem(); @@ -53,6 +54,7 @@ private CraftingInputSlot(IItemHandlerModifiable handler, int index) { return false; }); + // dragging has stopped listenGuiAction((IGuiAction.MouseReleased) mouseButton -> { dragging = false; return true; @@ -162,7 +164,7 @@ public InputSyncHandler(IItemHandlerModifiable handler, int index) { @Override public void init(String key, PanelSyncManager syncHandler) { super.init(key, syncHandler); - this.lastStoredItem = this.handler.getStackInSlot(this.index).copy(); + this.lastStoredItem = getStack().copy(); } @Override @@ -185,16 +187,9 @@ public void readOnServer(int id, PacketBuffer buf) { public void detectAndSendChanges(boolean init) { ItemStack itemStack = getStack(); if (itemStack.isEmpty() && this.lastStoredItem.isEmpty()) return; - boolean onlyAmountChanged = false; - if (init || - !ItemHandlerHelper.canItemStacksStack(this.lastStoredItem, itemStack) || - (onlyAmountChanged = itemStack.getCount() != this.lastStoredItem.getCount())) { - this.listener.onChange(itemStack, onlyAmountChanged, false, init); - if (onlyAmountChanged) { - this.lastStoredItem.setCount(itemStack.getCount()); - } else { - this.lastStoredItem = itemStack.isEmpty() ? ItemStack.EMPTY : itemStack.copy(); - } + if (init || !ItemHandlerHelper.canItemStacksStack(this.lastStoredItem, itemStack)) { + this.listener.onChange(itemStack, false, false, init); + this.lastStoredItem = itemStack.isEmpty() ? ItemStack.EMPTY : itemStack.copy(); syncToClient(SLOT_CHANGED, buffer -> NetworkUtils.writeItemStack(buffer, itemStack)); } } diff --git a/src/main/java/gregtech/mixins/mui2/ModularPanelMixin.java b/src/main/java/gregtech/mixins/mui2/ModularPanelMixin.java index 05d287c9610..16e4a2b6b8c 100644 --- a/src/main/java/gregtech/mixins/mui2/ModularPanelMixin.java +++ b/src/main/java/gregtech/mixins/mui2/ModularPanelMixin.java @@ -68,9 +68,9 @@ public abstract class ModularPanelMixin extends ParentWidget imple loop: for (LocatedWidget widget : this.hovering) { widget.applyMatrix(getContext()); + GhostIngredientDrag drag = gregTech$getGhostDrag(); if (widget.getElement() instanceof JeiGhostIngredientSlotghostSlot && Mods.JustEnoughItems.isModLoaded()) { - GhostIngredientDrag drag = gregTech$getGhostDrag(); if (drag != null && gregTech$insertGhostIngredient(drag, ghostSlot)) { gregTech$stopDrag(); pressed = LocatedWidget.EMPTY; @@ -79,7 +79,7 @@ public abstract class ModularPanelMixin extends ParentWidget imple break; } } - if (widget.getElement() instanceof Interactable interactable) { + if (drag == null && widget.getElement() instanceof Interactable interactable) { switch (interactable.onMousePressed(mouseButton)) { case IGNORE: break;