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 30e93fb6f..b1fa869bd 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 @@ -587,6 +587,18 @@ public void onGuiClosed() { memoryText = this.searchField.getText(); } + @Override + public void handleKeyboardInput() { + super.handleKeyboardInput(); + + // Pause the terminal when holding shift + this.repo.setPaused(hasShiftDown()); + } + + private boolean hasShiftDown() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + } + public void bindTextureBack(final String file) { final ResourceLocation loc = new ResourceLocation(FluidCraft.MODID, "textures/" + file); this.mc.getTextureManager().bindTexture(loc); 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 d0dce0312..dc750422b 100644 --- a/src/main/java/com/glodblock/github/client/me/EssentiaRepo.java +++ b/src/main/java/com/glodblock/github/client/me/EssentiaRepo.java @@ -1,11 +1,11 @@ package com.glodblock.github.client.me; -import java.util.Iterator; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Pattern; -import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; import com.glodblock.github.common.item.ItemFluidDrop; import com.glodblock.github.crossmod.thaumcraft.AspectUtil; @@ -15,7 +15,6 @@ import appeng.api.config.Settings; import appeng.api.config.SortOrder; import appeng.api.config.ViewItems; -import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.client.gui.widgets.IScrollSource; import appeng.client.gui.widgets.ISortSource; @@ -30,12 +29,61 @@ public EssentiaRepo(final IScrollSource src, final ISortSource sortSrc) { @SuppressWarnings("deprecation") @Override public void updateView() { - this.view.clear(); - this.dsp.clear(); + if (this.paused) { + // Update existing view with new data + for (int i = 0; i < this.view.size(); i++) { + IAEItemStack entry = this.view.get(i); + IAEItemStack serverEntry = this.list.findPrecise(entry); + if (serverEntry == null) { + entry.setStackSize(0); + } else { + this.view.set(i, serverEntry); + } + } - this.view.ensureCapacity(this.list.size()); + // Append newly added item stacks to the end of the view + Set viewSet = new HashSet<>(this.view); + ArrayList entriesToAdd = new ArrayList<>(); + for (IAEItemStack serverEntry : this.list) { + if (!viewSet.contains(serverEntry)) { + entriesToAdd.add(serverEntry); + } + } + addEntriesToView(entriesToAdd); + } else { + this.view.clear(); + this.view.ensureCapacity(this.list.size()); + addEntriesToView(this.list); + } + + // Do not sort if paused + if (!this.paused) { + final Enum SortBy = this.sortSrc.getSortBy(); + final Enum SortDir = this.sortSrc.getSortDir(); + + 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); + } else { + this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); + } + } + + // Update the display + this.dsp.clear(); this.dsp.ensureCapacity(this.list.size()); + for (final IAEItemStack is : this.view) { + this.dsp.add(is.getItemStack()); + } + } + private void addEntriesToView(Iterable entries) { final Enum viewMode = this.sortSrc.getSortDisplay(); final Enum searchMode = AEConfig.instance.settings.getSetting(Settings.SEARCH_MODE); if (searchMode == SearchBoxMode.NEI_AUTOSEARCH || searchMode == SearchBoxMode.NEI_MANUAL_SEARCH) { @@ -59,7 +107,11 @@ public void updateView() { } } - for (IAEItemStack is : this.list) { + for (IAEItemStack is : entries) { + if (!AspectUtil.isEssentiaGas(ItemFluidDrop.getAeFluidStack(is))) { + continue; + } + if (this.myPartitionList != null) { if (!this.myPartitionList.isListed(is)) { continue; @@ -88,40 +140,6 @@ public void updateView() { this.view.add(is); } } - - final Enum SortBy = this.sortSrc.getSortBy(); - final Enum SortDir = this.sortSrc.getSortDir(); - - 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); - } else { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); - } - - for (final IAEItemStack is : this.view) { - this.dsp.add(is.getItemStack()); - } - Iterator it1 = this.view.iterator(); - while (it1.hasNext()) { - IAEFluidStack fluid = ItemFluidDrop.getAeFluidStack(it1.next()); - if (!AspectUtil.isEssentiaGas(fluid)) { - it1.remove(); - } - } - Iterator it2 = this.dsp.iterator(); - while (it2.hasNext()) { - FluidStack fluid = ItemFluidDrop.getFluidStack(it2.next()); - if (!AspectUtil.isEssentiaGas(fluid)) { - it2.remove(); - } - } } } 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 a58466c0d..4dc6c7490 100644 --- a/src/main/java/com/glodblock/github/client/me/FluidRepo.java +++ b/src/main/java/com/glodblock/github/client/me/FluidRepo.java @@ -13,6 +13,8 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Pattern; import javax.annotation.Nonnull; @@ -52,6 +54,7 @@ public class FluidRepo implements IDisplayRepo { protected String searchString = ""; protected IPartitionList myPartitionList; + protected boolean paused = false; private String NEIWord = null; private boolean hasPower; @@ -100,12 +103,60 @@ public void setViewCell(final ItemStack[] list) { @SuppressWarnings("deprecation") @Override public void updateView() { - this.view.clear(); - this.dsp.clear(); + if (this.paused) { + // Update existing view with new data + for (int i = 0; i < this.view.size(); i++) { + IAEItemStack entry = this.view.get(i); + IAEItemStack serverEntry = this.list.findPrecise(entry); + if (serverEntry == null) { + entry.setStackSize(0); + } else { + this.view.set(i, serverEntry); + } + } + + // Append newly added item stacks to the end of the view + Set viewSet = new HashSet<>(this.view); + ArrayList entriesToAdd = new ArrayList<>(); + for (IAEItemStack serverEntry : this.list) { + if (!viewSet.contains(serverEntry)) { + entriesToAdd.add(serverEntry); + } + } + addEntriesToView(entriesToAdd); + } else { + this.view.clear(); + this.view.ensureCapacity(this.list.size()); + addEntriesToView(this.list); + } + + // Do not sort if paused + if (!paused) { + final Enum SortBy = this.sortSrc.getSortBy(); + final Enum SortDir = this.sortSrc.getSortDir(); + + FluidSorters.setDirection((appeng.api.config.SortDir) SortDir); + FluidSorters.init(); - this.view.ensureCapacity(this.list.size()); + 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); + } + } + + this.dsp.clear(); this.dsp.ensureCapacity(this.list.size()); + for (final IAEItemStack is : this.view) { + this.dsp.add(is.getItemStack()); + } + } + private void addEntriesToView(Iterable entries) { final Enum viewMode = this.sortSrc.getSortDisplay(); final Enum searchMode = AEConfig.instance.settings.getSetting(Settings.SEARCH_MODE); if (searchMode == SearchBoxMode.NEI_AUTOSEARCH || searchMode == SearchBoxMode.NEI_MANUAL_SEARCH) { @@ -131,7 +182,7 @@ public void updateView() { } } - for (IAEItemStack is : this.list) { + for (IAEItemStack is : entries) { if (this.myPartitionList != null) { if (!this.myPartitionList.isListed(is)) { continue; @@ -168,26 +219,6 @@ public void updateView() { } } } - - final Enum SortBy = this.sortSrc.getSortBy(); - final Enum SortDir = this.sortSrc.getSortDir(); - - 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); - } else { - this.view.sort(FluidSorters.CONFIG_BASED_SORT_BY_NAME); - } - - for (final IAEItemStack is : this.view) { - this.dsp.add(is.getItemStack()); - } } protected void updateNEI(final String filter) { @@ -245,4 +276,21 @@ public String getSearchString() { public void setSearchString(@Nonnull final String searchString) { this.searchString = searchString; } + + @Override + public boolean isPaused() { + return this.paused; + } + + @Override + public void setPaused(boolean paused) { + if (this.paused != paused) { + this.paused = paused; + + // Update view when un-paused + if (!paused) { + updateView(); + } + } + } }