From 0bf904f2a4e8a3c8d818fae5a5ff3d47e08450ea Mon Sep 17 00:00:00 2001 From: asdflj <33802162+asdflj@users.noreply.github.com> Date: Tue, 2 Jan 2024 18:45:23 +0800 Subject: [PATCH] hold the shift to stop sort items (#188) Co-authored-by: zy <854865755@163.com> --- dependencies.gradle | 2 +- .../github/client/gui/base/FCGuiMonitor.java | 11 +++++ .../github/client/me/EssentiaRepo.java | 32 ++++++++------ .../glodblock/github/client/me/FluidRepo.java | 44 +++++++++++++------ 4 files changed, 60 insertions(+), 29 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index fd8d7780..905ec6a7 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -35,7 +35,7 @@ */ dependencies { api('com.github.GTNewHorizons:NotEnoughItems:2.4.13-GTNH:dev') - api('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-306-GTNH:dev') + api('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-307-GTNH:dev') api('curse.maven:cofh-core-69162:2388751') api('com.github.GTNewHorizons:waila:1.6.5:dev') diff --git a/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java b/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java index 0919d022..f331106b 100644 --- a/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java @@ -101,6 +101,7 @@ public abstract class FCGuiMonitor> extends FCBaseMEGui protected GuiImgButton terminalStyleBox; protected GuiImgButton searchStringSave; protected GuiImgButton typeFilter; + protected boolean hasShiftKeyDown = false; @SuppressWarnings("unchecked") public FCGuiMonitor(final InventoryPlayer inventoryPlayer, final ITerminalHost te, final FCContainerMonitor c) { @@ -772,4 +773,14 @@ public abstract class FCGuiMonitor> extends FCBaseMEGui public boolean isOverTextField(int mousex, int mousey) { return searchField.isMouseIn(mousex, mousey); } + + @Override + public void handleKeyboardInput() { + super.handleKeyboardInput(); + hasShiftKeyDown |= isShiftKeyDown(); + if (hasShiftKeyDown && !Keyboard.getEventKeyState()) { // keyup + this.repo.updateView(); + hasShiftKeyDown = false; + } + } } diff --git a/src/main/java/com/glodblock/github/client/me/EssentiaRepo.java b/src/main/java/com/glodblock/github/client/me/EssentiaRepo.java index fe8496cd..aadfd4f8 100644 --- a/src/main/java/com/glodblock/github/client/me/EssentiaRepo.java +++ b/src/main/java/com/glodblock/github/client/me/EssentiaRepo.java @@ -29,7 +29,7 @@ public class EssentiaRepo extends FluidRepo { @Override public void updateView() { - this.view.clear(); + if (needUpdateView()) this.view.clear(); this.dsp.clear(); this.view.ensureCapacity(this.list.size()); @@ -58,7 +58,7 @@ public class EssentiaRepo extends FluidRepo { } } - for (IAEItemStack is : this.list) { + for (IAEItemStack is : needUpdateView() ? this.list : this.cache) { if (this.myPartitionList != null) { if (!this.myPartitionList.isListed(is)) { continue; @@ -87,26 +87,30 @@ public class EssentiaRepo extends FluidRepo { this.view.add(is); } } + if (needUpdateView()) { + final Enum SortBy = this.sortSrc.getSortBy(); + final Enum SortDir = this.sortSrc.getSortDir(); - final Enum SortBy = this.sortSrc.getSortBy(); - final Enum SortDir = this.sortSrc.getSortDir(); + FluidSorters.setDirection((appeng.api.config.SortDir) SortDir); + FluidSorters.init(); - FluidSorters.setDirection((appeng.api.config.SortDir) SortDir); - FluidSorters.init(); - - if (SortBy == SortOrder.MOD) { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_MOD); - } else if (SortBy == SortOrder.AMOUNT) { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_SIZE); - } else if (SortBy == SortOrder.INVTWEAKS) { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS); + if (SortBy == SortOrder.MOD) { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_MOD); + } else if (SortBy == SortOrder.AMOUNT) { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_SIZE); + } else if (SortBy == SortOrder.INVTWEAKS) { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS); + } else { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); + } } else { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); + this.cache.clear(); } for (final IAEItemStack is : this.view) { this.dsp.add(is.getItemStack()); } + this.lastSearchString = this.searchString; Iterator it1 = this.view.iterator(); while (it1.hasNext()) { IAEFluidStack fluid = ItemFluidDrop.getAeFluidStack(it1.next()); diff --git a/src/main/java/com/glodblock/github/client/me/FluidRepo.java b/src/main/java/com/glodblock/github/client/me/FluidRepo.java index 02b5405d..a3acb4f5 100644 --- a/src/main/java/com/glodblock/github/client/me/FluidRepo.java +++ b/src/main/java/com/glodblock/github/client/me/FluidRepo.java @@ -10,6 +10,8 @@ package com.glodblock.github.client.me; +import static net.minecraft.client.gui.GuiScreen.isShiftKeyDown; + import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; @@ -45,12 +47,14 @@ public class FluidRepo implements IDisplayRepo { protected final IItemList list = AEApi.instance().storage().createItemList(); protected final ArrayList view = new ArrayList<>(); protected final ArrayList dsp = new ArrayList<>(); + protected final ArrayList cache = new ArrayList<>(); protected final IScrollSource src; protected final ISortSource sortSrc; protected int rowSize = 9; protected String searchString = ""; + protected String lastSearchString = ""; protected IPartitionList myPartitionList; private String NEIWord = null; private boolean hasPower; @@ -86,11 +90,19 @@ public class FluidRepo implements IDisplayRepo { if (st != null) { st.reset(); st.add(is); + if (isShiftKeyDown() && this.view.contains(st)) { + this.view.get(this.view.indexOf(st)).setStackSize(st.getStackSize()); + } } else { + if (isShiftKeyDown()) this.cache.add(is); this.list.add(is); } } + protected boolean needUpdateView() { + return !isShiftKeyDown() || !this.lastSearchString.equals(this.searchString); + } + @Override public void setViewCell(final ItemStack[] list) { this.myPartitionList = ItemViewCell.createFilter(list); @@ -99,7 +111,7 @@ public class FluidRepo implements IDisplayRepo { @Override public void updateView() { - this.view.clear(); + if (needUpdateView()) this.view.clear(); this.dsp.clear(); this.view.ensureCapacity(this.list.size()); @@ -130,7 +142,7 @@ public class FluidRepo implements IDisplayRepo { } } - for (IAEItemStack is : this.list) { + for (IAEItemStack is : needUpdateView() ? this.list : this.cache) { if (this.myPartitionList != null) { if (!this.myPartitionList.isListed(is)) { continue; @@ -167,26 +179,30 @@ public class FluidRepo implements IDisplayRepo { } } } + if (needUpdateView()) { + final Enum SortBy = this.sortSrc.getSortBy(); + final Enum SortDir = this.sortSrc.getSortDir(); - final Enum SortBy = this.sortSrc.getSortBy(); - final Enum SortDir = this.sortSrc.getSortDir(); + FluidSorters.setDirection((appeng.api.config.SortDir) SortDir); + FluidSorters.init(); - FluidSorters.setDirection((appeng.api.config.SortDir) SortDir); - FluidSorters.init(); - - if (SortBy == SortOrder.MOD) { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_MOD); - } else if (SortBy == SortOrder.AMOUNT) { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_SIZE); - } else if (SortBy == SortOrder.INVTWEAKS) { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS); + if (SortBy == SortOrder.MOD) { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_MOD); + } else if (SortBy == SortOrder.AMOUNT) { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_SIZE); + } else if (SortBy == SortOrder.INVTWEAKS) { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS); + } else { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); + } } else { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); + this.cache.clear(); } for (final IAEItemStack is : this.view) { this.dsp.add(is.getItemStack()); } + this.lastSearchString = this.searchString; } protected void updateNEI(final String filter) {