Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 793b8d6655 | |||
| 1f2cdfd843 |
@@ -319,7 +319,6 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
||||
this.searchField.setText(memoryText);
|
||||
this.searchField.selectAll();
|
||||
this.repo.setSearchString(memoryText);
|
||||
this.repo.updateView();
|
||||
this.setScrollBar();
|
||||
}
|
||||
|
||||
@@ -381,7 +380,6 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
||||
if (btn == 1 && this.searchField.isMouseIn(xCoord, yCoord)) {
|
||||
this.searchField.setText("");
|
||||
this.repo.setSearchString("");
|
||||
this.repo.updateView();
|
||||
this.setScrollBar();
|
||||
}
|
||||
|
||||
@@ -476,7 +474,6 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
||||
|
||||
if (this.searchField.textboxKeyTyped(character, key)) {
|
||||
this.repo.setSearchString(this.searchField.getText());
|
||||
this.repo.updateView();
|
||||
this.setScrollBar();
|
||||
// tell forge the key event is handled and should not be sent out
|
||||
this.keyHandled = mouseInGui;
|
||||
|
||||
@@ -37,7 +37,7 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@@ -45,7 +45,7 @@ import java.util.regex.Pattern;
|
||||
public class ItemRepo {
|
||||
|
||||
private final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList();
|
||||
private final ArrayList<IAEItemStack> view = new ArrayList<>();
|
||||
private List<IAEItemStack> view = new ArrayList<>();
|
||||
private final IScrollSource src;
|
||||
private final ISortSource sortSrc;
|
||||
|
||||
@@ -56,6 +56,16 @@ public class ItemRepo {
|
||||
private String innerSearch = "";
|
||||
private boolean hasPower;
|
||||
|
||||
private Enum lastView;
|
||||
private Enum lastSearchMode;
|
||||
private Enum lastSortBy;
|
||||
private Enum lastSortDir;
|
||||
private String lastSearch = "";
|
||||
|
||||
private boolean resort = true;
|
||||
private boolean changed = false;
|
||||
|
||||
|
||||
public ItemRepo(final IScrollSource src, final ISortSource sortSrc) {
|
||||
this.src = src;
|
||||
this.sortSrc = sortSrc;
|
||||
@@ -83,6 +93,8 @@ public class ItemRepo {
|
||||
} else {
|
||||
this.list.add(is);
|
||||
}
|
||||
|
||||
changed = true;
|
||||
}
|
||||
|
||||
public long getItemCount(final IAEItemStack is) {
|
||||
@@ -96,18 +108,84 @@ public class ItemRepo {
|
||||
}
|
||||
|
||||
public void updateView() {
|
||||
this.view.clear();
|
||||
|
||||
this.view.ensureCapacity(this.list.size());
|
||||
|
||||
final Enum viewMode = this.sortSrc.getSortDisplay();
|
||||
|
||||
if (lastView != viewMode) {
|
||||
resort = true;
|
||||
lastView = viewMode;
|
||||
}
|
||||
|
||||
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_MODE);
|
||||
final boolean needsZeroCopy = viewMode == ViewItems.CRAFTABLE;
|
||||
if (lastSearchMode != searchMode) {
|
||||
resort = true;
|
||||
lastSearchMode = searchMode;
|
||||
}
|
||||
|
||||
if (searchMode == SearchBoxMode.JEI_AUTOSEARCH || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH || searchMode == SearchBoxMode.JEI_AUTOSEARCH_KEEP || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH_KEEP) {
|
||||
this.updateJEI(this.searchString);
|
||||
}
|
||||
|
||||
if (!lastSearch.equals(searchString)) {
|
||||
resort = true;
|
||||
lastSearch = searchString;
|
||||
}
|
||||
|
||||
final Enum sortBy = this.sortSrc.getSortBy();
|
||||
final Enum sortDir = this.sortSrc.getSortDir();
|
||||
|
||||
if (lastSortBy != sortBy) {
|
||||
resort = true;
|
||||
lastSortBy = sortBy;
|
||||
}
|
||||
|
||||
if (lastSortDir != sortDir) {
|
||||
resort = true;
|
||||
lastSortDir = sortDir;
|
||||
}
|
||||
|
||||
if (changed || resort) {
|
||||
changed = false;
|
||||
resort = false;
|
||||
|
||||
view = new ArrayList<>();
|
||||
|
||||
ItemSorters.setDirection((appeng.api.config.SortDir) sortDir);
|
||||
ItemSorters.init();
|
||||
|
||||
Comparator<IAEItemStack> c = getComparator(sortBy);
|
||||
|
||||
for (IAEItemStack is : this.list) {
|
||||
addIAE(is, viewMode);
|
||||
}
|
||||
|
||||
view.sort(c);
|
||||
}
|
||||
}
|
||||
|
||||
private static Comparator<IAEItemStack> getComparator(Enum sortBy) {
|
||||
Comparator<IAEItemStack> c;
|
||||
|
||||
if (sortBy == SortOrder.MOD) {
|
||||
c = ItemSorters.CONFIG_BASED_SORT_BY_MOD;
|
||||
} else if (sortBy == SortOrder.AMOUNT) {
|
||||
c = ItemSorters.CONFIG_BASED_SORT_BY_SIZE;
|
||||
} else if (sortBy == SortOrder.INVTWEAKS) {
|
||||
if (InventoryBogoSortModule.isLoaded()) {
|
||||
c = InventoryBogoSortModule.COMPARATOR;
|
||||
} else {
|
||||
c = ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS;
|
||||
}
|
||||
} else {
|
||||
c = ItemSorters.CONFIG_BASED_SORT_BY_NAME;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
private void addIAE(IAEItemStack is, Enum viewMode) {
|
||||
|
||||
final boolean needsZeroCopy = viewMode == ViewItems.CRAFTABLE;
|
||||
|
||||
final boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_TOOLTIPS) != YesNo.NO;
|
||||
|
||||
boolean searchMod = false;
|
||||
@@ -129,76 +207,52 @@ public class ItemRepo {
|
||||
}
|
||||
}
|
||||
|
||||
boolean notDone = false;
|
||||
for (IAEItemStack is : this.list) {
|
||||
if (this.myPartitionList != null) {
|
||||
if (!this.myPartitionList.isListed(is)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (viewMode == ViewItems.CRAFTABLE && !is.isCraftable()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (viewMode == ViewItems.STORED && is.getStackSize() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final String dspName = (searchMod ? Platform.getModId(is) : Platform.getItemDisplayName(is)).toLowerCase();
|
||||
boolean foundMatchingItemStack = true;
|
||||
|
||||
for (String term : innerSearch.split(" ")) {
|
||||
if (term.length() > 1 && (term.startsWith("-") || term.startsWith("!"))) {
|
||||
term = term.substring(1);
|
||||
if (dspName.contains(term)) {
|
||||
foundMatchingItemStack = false;
|
||||
break;
|
||||
}
|
||||
} else if (!dspName.contains(term)) {
|
||||
foundMatchingItemStack = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (terminalSearchToolTips && !foundMatchingItemStack) {
|
||||
final List<String> tooltip = Platform.getTooltip(is);
|
||||
for (final String line : tooltip) {
|
||||
if (m.matcher(line).find()) {
|
||||
foundMatchingItemStack = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (foundMatchingItemStack) {
|
||||
if (needsZeroCopy) {
|
||||
is = is.copy();
|
||||
is.setStackSize(0);
|
||||
}
|
||||
|
||||
this.view.add(is);
|
||||
if (this.myPartitionList != null) {
|
||||
if (!this.myPartitionList.isListed(is)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
final Enum SortBy = this.sortSrc.getSortBy();
|
||||
final Enum SortDir = this.sortSrc.getSortDir();
|
||||
if (viewMode == ViewItems.CRAFTABLE && !is.isCraftable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemSorters.setDirection((appeng.api.config.SortDir) SortDir);
|
||||
ItemSorters.init();
|
||||
if (viewMode == ViewItems.STORED && is.getStackSize() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (SortBy == SortOrder.MOD) {
|
||||
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_MOD);
|
||||
} else if (SortBy == SortOrder.AMOUNT) {
|
||||
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_SIZE);
|
||||
} else if (SortBy == SortOrder.INVTWEAKS) {
|
||||
if (InventoryBogoSortModule.isLoaded()) {
|
||||
Collections.sort(this.view, InventoryBogoSortModule.COMPARATOR);
|
||||
} else {
|
||||
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS);
|
||||
final String dspName = (searchMod ? Platform.getModId(is) : Platform.getItemDisplayName(is)).toLowerCase();
|
||||
boolean foundMatchingItemStack = true;
|
||||
|
||||
for (String term : innerSearch.split(" ")) {
|
||||
if (term.length() > 1 && (term.startsWith("-") || term.startsWith("!"))) {
|
||||
term = term.substring(1);
|
||||
if (dspName.contains(term)) {
|
||||
foundMatchingItemStack = false;
|
||||
break;
|
||||
}
|
||||
} else if (!dspName.contains(term)) {
|
||||
foundMatchingItemStack = false;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_NAME);
|
||||
}
|
||||
|
||||
if (terminalSearchToolTips && !foundMatchingItemStack) {
|
||||
final List<String> tooltip = Platform.getTooltip(is);
|
||||
for (final String line : tooltip) {
|
||||
if (m.matcher(line).find()) {
|
||||
foundMatchingItemStack = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (foundMatchingItemStack) {
|
||||
if (needsZeroCopy) {
|
||||
is = is.copy();
|
||||
is.setStackSize(0);
|
||||
}
|
||||
this.view.add(is);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,14 +32,13 @@ import appeng.core.sync.network.NetworkHandler;
|
||||
import appeng.core.sync.packets.PacketInformPlayer;
|
||||
import appeng.me.cluster.implementations.CraftingCPUCluster;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.item.AEItemStack;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class CraftingTreeNode {
|
||||
@@ -112,16 +111,14 @@ public class CraftingTreeNode {
|
||||
this.what.setStackSize(l);
|
||||
|
||||
if (this.getSlot() >= 0 && this.parent != null && this.parent.details.isCraftable()) {
|
||||
LinkedList<IAEItemStack> itemList = new LinkedList<>();
|
||||
Collection<IAEItemStack> itemList = new ArrayList<>();
|
||||
|
||||
boolean damageableItem = this.what.getItem().isDamageable() || Platform.isGTDamageableItem(this.what.getItem());
|
||||
|
||||
if (this.parent.details.canSubstitute()) {
|
||||
for (IAEItemStack subs : this.parent.details.getSubstituteInputs(this.slot)) {
|
||||
if (damageableItem) {
|
||||
for (IAEItemStack i : inventoryList.findFuzzy(subs, FuzzyMode.IGNORE_ALL)) {
|
||||
itemList.add(i);
|
||||
}
|
||||
itemList.addAll(inventoryList.findFuzzy(subs, FuzzyMode.IGNORE_ALL));
|
||||
}
|
||||
subs = inventoryList.findPrecise(subs);
|
||||
if (subs != null) {
|
||||
@@ -130,9 +127,7 @@ public class CraftingTreeNode {
|
||||
}
|
||||
} else {
|
||||
if (damageableItem) {
|
||||
for (IAEItemStack i : inventoryList.findFuzzy(this.what, FuzzyMode.IGNORE_ALL)) {
|
||||
itemList.add(i);
|
||||
}
|
||||
itemList.addAll(inventoryList.findFuzzy(this.what, FuzzyMode.IGNORE_ALL));
|
||||
} else {
|
||||
final IAEItemStack item = inventoryList.findPrecise(this.what);
|
||||
if (item != null) {
|
||||
@@ -142,25 +137,13 @@ public class CraftingTreeNode {
|
||||
}
|
||||
|
||||
for (IAEItemStack fuzz : itemList) {
|
||||
if (fuzz.getStackSize() == 0) {
|
||||
continue;
|
||||
}
|
||||
if (this.parent.details.isValidItemForSlot(this.getSlot(), fuzz.getDefinition(), this.world)) {
|
||||
if (this.parent.details.isValidItemForSlot(this.getSlot(), fuzz.copy().getCachedItemStack(1), this.world)) {
|
||||
fuzz = fuzz.copy();
|
||||
fuzz.setStackSize(l);
|
||||
|
||||
final IAEItemStack available = inv.extractItems(fuzz, Actionable.MODULATE, src);
|
||||
|
||||
if (available != null) {
|
||||
if (available.getItem().hasContainerItem(available.getDefinition())) {
|
||||
final ItemStack is2 = Platform.getContainerItem(available.createItemStack());
|
||||
final IAEItemStack o = AEItemStack.fromItemStack(is2);
|
||||
|
||||
if (o != null) {
|
||||
this.parent.addContainers(o);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.exhausted) {
|
||||
final IAEItemStack is = this.job.checkUse(available);
|
||||
|
||||
@@ -214,16 +197,6 @@ public class CraftingTreeNode {
|
||||
final IAEItemStack available = inv.extractItems(madeWhat, Actionable.MODULATE, src);
|
||||
|
||||
if (available != null) {
|
||||
|
||||
if (parent != null && available.getItem().hasContainerItem(available.getDefinition())) {
|
||||
final ItemStack is2 = Platform.getContainerItem(available.createItemStack());
|
||||
final IAEItemStack o = AEItemStack.fromItemStack(is2);
|
||||
|
||||
if (o != null) {
|
||||
this.parent.addContainers(o);
|
||||
}
|
||||
}
|
||||
|
||||
this.bytes += available.getStackSize();
|
||||
l -= available.getStackSize();
|
||||
|
||||
@@ -267,14 +240,6 @@ public class CraftingTreeNode {
|
||||
|
||||
if (job.isSimulation()) {
|
||||
this.bytes += l;
|
||||
if (parent != null && this.what.getItem().hasContainerItem(this.what.getDefinition())) {
|
||||
final ItemStack is2 = Platform.getContainerItem(this.what.copy().setStackSize(1).createItemStack());
|
||||
final IAEItemStack o = AEItemStack.fromItemStack(is2);
|
||||
|
||||
if (o != null) {
|
||||
this.parent.addContainers(o);
|
||||
}
|
||||
}
|
||||
this.missing += l;
|
||||
final IAEItemStack rv = this.what.copy();
|
||||
rv.setStackSize(l);
|
||||
|
||||
@@ -27,11 +27,15 @@ import appeng.api.storage.data.IAEItemStack;
|
||||
import appeng.api.storage.data.IItemList;
|
||||
import appeng.core.AEConfig;
|
||||
import appeng.me.cluster.implementations.CraftingCPUCluster;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.item.AEItemStack;
|
||||
import com.google.common.collect.ImmutableCollection;
|
||||
import it.unimi.dsi.fastutil.objects.Object2LongArrayMap;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
|
||||
@@ -46,7 +50,6 @@ public class CraftingTreeProcess {
|
||||
boolean possible = true;
|
||||
private long crafts = 0;
|
||||
private long bytes = 0;
|
||||
private ArrayList<IAEItemStack> containers;
|
||||
|
||||
public CraftingTreeProcess(final ICraftingGrid cc, final CraftingJob job, final ICraftingPatternDetails details, final CraftingTreeNode craftingTreeNode, final int depth) {
|
||||
this.parent = craftingTreeNode;
|
||||
@@ -195,18 +198,32 @@ public class CraftingTreeProcess {
|
||||
void request(final MECraftingInventory inv, final long amountOfTimes, final IActionSource src) throws CraftBranchFailure, InterruptedException {
|
||||
addProcess();
|
||||
this.job.handlePausing();
|
||||
List<IAEItemStack> containerItems = null;
|
||||
|
||||
// request and remove inputs...
|
||||
for (final Entry<CraftingTreeNode, Long> entry : this.nodes.object2LongEntrySet()) {
|
||||
final IAEItemStack stack = entry.getKey().request(inv, entry.getValue() * amountOfTimes, src);
|
||||
|
||||
if (this.details.isCraftable() && stack.getItem().hasContainerItem(stack.getDefinition())) {
|
||||
final ItemStack is = Platform.getContainerItem(stack.createItemStack());
|
||||
final IAEItemStack o = AEItemStack.fromItemStack(is);
|
||||
if (o != null) {
|
||||
if (containerItems == null) {
|
||||
containerItems = new ArrayList<>();
|
||||
}
|
||||
this.bytes++;
|
||||
o.setCachedItemStack(is);
|
||||
containerItems.add(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.containers != null) {
|
||||
for (IAEItemStack iae : containers) {
|
||||
inv.injectItems(iae, Actionable.MODULATE, src);
|
||||
if (containerItems != null) {
|
||||
for (IAEItemStack i : containerItems) {
|
||||
inv.injectItems(i, Actionable.MODULATE, src);
|
||||
}
|
||||
containers = null;
|
||||
}
|
||||
|
||||
// assume its possible.
|
||||
|
||||
// add crafting results..
|
||||
@@ -218,13 +235,6 @@ public class CraftingTreeProcess {
|
||||
this.crafts += amountOfTimes;
|
||||
}
|
||||
|
||||
public void addContainers(IAEItemStack container) {
|
||||
if (this.containers == null) {
|
||||
this.containers = new ArrayList<>();
|
||||
}
|
||||
this.containers.add(container);
|
||||
}
|
||||
|
||||
void dive(final CraftingJob job) {
|
||||
job.addTask(this.getAmountCrafted(this.parent.getStack(1)), this.crafts, this.details, this.depth);
|
||||
for (final Entry<CraftingTreeNode, Long> entry : this.nodes.object2LongEntrySet()) {
|
||||
|
||||
@@ -74,11 +74,13 @@ public class MultiCraftingTracker {
|
||||
|
||||
public boolean handleCrafting(final int x, final long itemToCraft, final IAEItemStack ais, final InventoryAdaptor d, final World w, final IGrid g, final ICraftingGrid cg, final IActionSource mySrc) {
|
||||
if (ais != null) {
|
||||
ItemStack inputStack = ais.createItemStack();
|
||||
ItemStack inputStack = ais.getCachedItemStack(ais.getStackSize());
|
||||
|
||||
ItemStack remaining = d.simulateAdd(inputStack);
|
||||
|
||||
if (remaining.isEmpty()) {
|
||||
ais.setCachedItemStack(inputStack);
|
||||
|
||||
final Future<ICraftingJob> craftingJob = this.getJob(x);
|
||||
|
||||
if (this.getLink(x) != null) {
|
||||
@@ -115,6 +117,8 @@ public class MultiCraftingTracker {
|
||||
this.setJob(x, cg.beginCraftingJob(w, g, mySrc, aisC, null));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ais.setCachedItemStack(remaining);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user