From a8f0bbe06b37db20537225f4c75ae65a6946d8d3 Mon Sep 17 00:00:00 2001 From: Serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Mon, 15 Jan 2024 19:27:13 -0600 Subject: [PATCH] Add Sticky Card (#371) Co-authored-by: NotMyWing --- src/api/java/appeng/api/config/Settings.java | 6 +- src/api/java/appeng/api/config/Upgrades.java | 1 + .../appeng/api/definitions/IMaterials.java | 2 + .../api/storage/IMEInventoryHandler.java | 8 +++ .../implementations/ContainerStorageBus.java | 12 ++++ src/main/java/appeng/core/Registration.java | 6 ++ .../java/appeng/core/api/ApiClientHelper.java | 4 ++ .../core/api/definitions/ApiMaterials.java | 7 +++ .../appeng/core/localization/GuiText.java | 1 + .../fluids/parts/PartFluidStorageBus.java | 4 ++ .../appeng/items/materials/ItemMaterial.java | 2 + .../appeng/items/materials/MaterialType.java | 4 +- .../appeng/me/helpers/MEMonitorHandler.java | 4 ++ .../me/storage/BasicCellInventoryHandler.java | 8 +++ .../java/appeng/me/storage/DriveWatcher.java | 10 +++- .../appeng/me/storage/MEInventoryHandler.java | 10 ++++ .../me/storage/NetworkInventoryHandler.java | 55 +++++++++++++++--- .../parts/automation/UpgradeInventory.java | 10 +++- .../appeng/parts/misc/PartStorageBus.java | 5 ++ .../appliedenergistics2/lang/en_us.lang | 2 + .../models/item/material_card_sticky.json | 6 ++ .../recipes/materials/cardsticky.json | 31 ++++++++++ .../textures/items/material_card_sticky.png | Bin 0 -> 448 bytes 23 files changed, 187 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/assets/appliedenergistics2/models/item/material_card_sticky.json create mode 100644 src/main/resources/assets/appliedenergistics2/recipes/materials/cardsticky.json create mode 100644 src/main/resources/assets/appliedenergistics2/textures/items/material_card_sticky.png diff --git a/src/api/java/appeng/api/config/Settings.java b/src/api/java/appeng/api/config/Settings.java index aa030321a..7fe7de1aa 100644 --- a/src/api/java/appeng/api/config/Settings.java +++ b/src/api/java/appeng/api/config/Settings.java @@ -81,7 +81,11 @@ public enum Settings PLACE_BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ), - SCHEDULING_MODE( EnumSet.allOf( SchedulingMode.class ) ); + SCHEDULING_MODE( EnumSet.allOf( SchedulingMode.class ) ), + + STICKY_MODE( EnumSet.of( YesNo.YES, YesNo.NO ) ), + + ; private final EnumSet> values; diff --git a/src/api/java/appeng/api/config/Upgrades.java b/src/api/java/appeng/api/config/Upgrades.java index cef2babfd..79fdb1b9a 100644 --- a/src/api/java/appeng/api/config/Upgrades.java +++ b/src/api/java/appeng/api/config/Upgrades.java @@ -40,6 +40,7 @@ public enum Upgrades { REDSTONE(0), CRAFTING(0), MAGNET(0), + STICKY(0), /** * Diamond Tier Upgrades. diff --git a/src/api/java/appeng/api/definitions/IMaterials.java b/src/api/java/appeng/api/definitions/IMaterials.java index 64b5dcfd6..3a9743820 100644 --- a/src/api/java/appeng/api/definitions/IMaterials.java +++ b/src/api/java/appeng/api/definitions/IMaterials.java @@ -100,6 +100,8 @@ public interface IMaterials { IItemDefinition cardCrafting(); + IItemDefinition cardSticky(); + IItemDefinition enderDust(); IItemDefinition flour(); diff --git a/src/api/java/appeng/api/storage/IMEInventoryHandler.java b/src/api/java/appeng/api/storage/IMEInventoryHandler.java index 86f9aa632..4d64b77f4 100644 --- a/src/api/java/appeng/api/storage/IMEInventoryHandler.java +++ b/src/api/java/appeng/api/storage/IMEInventoryHandler.java @@ -89,4 +89,12 @@ public interface IMEInventoryHandler> extends IMEInventory * @return true, if this inventory is valid for this pass. */ boolean validForPass( int i ); + + /** + * Gets whether an inventory is "Sticky" i.e. only it and other sticky storages that have partitions with certain + * items are allowed to be put into sticky storages. + */ + default boolean isSticky() { + return false; + } } diff --git a/src/main/java/appeng/container/implementations/ContainerStorageBus.java b/src/main/java/appeng/container/implementations/ContainerStorageBus.java index e74ff1a29..6287d0918 100644 --- a/src/main/java/appeng/container/implementations/ContainerStorageBus.java +++ b/src/main/java/appeng/container/implementations/ContainerStorageBus.java @@ -50,6 +50,9 @@ public class ContainerStorageBus extends ContainerUpgradeable { @GuiSync(4) public StorageFilter storageFilter = StorageFilter.EXTRACTABLE_ONLY; + @GuiSync(7) + public YesNo stickyMode = YesNo.NO; + public ContainerStorageBus(final InventoryPlayer ip, final PartStorageBus te) { super(ip, te); this.storageBus = te; @@ -111,6 +114,7 @@ public class ContainerStorageBus extends ContainerUpgradeable { this.setFuzzyMode((FuzzyMode) this.getUpgradeable().getConfigManager().getSetting(Settings.FUZZY_MODE)); this.setReadWriteMode((AccessRestriction) this.getUpgradeable().getConfigManager().getSetting(Settings.ACCESS)); this.setStorageFilter((StorageFilter) this.getUpgradeable().getConfigManager().getSetting(Settings.STORAGE_FILTER)); + this.setStickyMode((YesNo) this.getUpgradeable().getConfigManager().getSetting(Settings.STICKY_MODE)); } this.standardDetectAndSendChanges(); @@ -168,4 +172,12 @@ public class ContainerStorageBus extends ContainerUpgradeable { private void setStorageFilter(final StorageFilter storageFilter) { this.storageFilter = storageFilter; } + + public YesNo getStickyMode() { + return this.stickyMode; + } + + private void setStickyMode(final YesNo stickyMode) { + this.stickyMode = stickyMode; + } } diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 107b816d0..ce1426441 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -364,15 +364,19 @@ final class Registration { // Storage Cells Upgrades.FUZZY.registerItem(items.cell1k(), 1); Upgrades.INVERTER.registerItem(items.cell1k(), 1); + Upgrades.STICKY.registerItem(items.cell1k(), 1); Upgrades.FUZZY.registerItem(items.cell4k(), 1); Upgrades.INVERTER.registerItem(items.cell4k(), 1); + Upgrades.STICKY.registerItem(items.cell4k(), 1); Upgrades.FUZZY.registerItem(items.cell16k(), 1); Upgrades.INVERTER.registerItem(items.cell16k(), 1); + Upgrades.STICKY.registerItem(items.cell16k(), 1); Upgrades.FUZZY.registerItem(items.cell64k(), 1); Upgrades.INVERTER.registerItem(items.cell64k(), 1); + Upgrades.STICKY.registerItem(items.cell64k(), 1); Upgrades.FUZZY.registerItem(items.portableCell(), 1); Upgrades.INVERTER.registerItem(items.portableCell(), 1); @@ -387,10 +391,12 @@ final class Registration { Upgrades.FUZZY.registerItem(parts.storageBus(), 1); Upgrades.INVERTER.registerItem(parts.storageBus(), 1); Upgrades.CAPACITY.registerItem(parts.storageBus(), 5); + Upgrades.STICKY.registerItem(parts.storageBus(), 1); // Storage Bus Fluids Upgrades.INVERTER.registerItem(parts.fluidStorageBus(), 1); Upgrades.CAPACITY.registerItem(parts.fluidStorageBus(), 5); + Upgrades.STICKY.registerItem(parts.fluidStorageBus(), 1); // Formation Plane Upgrades.FUZZY.registerItem(parts.formationPlane(), 1); diff --git a/src/main/java/appeng/core/api/ApiClientHelper.java b/src/main/java/appeng/core/api/ApiClientHelper.java index d2ef20cf8..e59599449 100644 --- a/src/main/java/appeng/core/api/ApiClientHelper.java +++ b/src/main/java/appeng/core/api/ApiClientHelper.java @@ -60,6 +60,10 @@ public class ApiClientHelper implements IClientHelper { lines.add("[" + GuiText.Partitioned.getLocal() + "]" + " - " + list + ' ' + GuiText.Precise.getLocal()); } + if (handler.isSticky()) { + lines.add(GuiText.Sticky.getLocal()); + } + if (Minecraft.getMinecraft().gameSettings.advancedItemTooltips || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) { IItemHandler inv = cellInventory.getConfigInventory(); cellInventory.getAvailableItems((IItemList) itemList); diff --git a/src/main/java/appeng/core/api/definitions/ApiMaterials.java b/src/main/java/appeng/core/api/definitions/ApiMaterials.java index 4a86f8fce..6e97e673c 100644 --- a/src/main/java/appeng/core/api/definitions/ApiMaterials.java +++ b/src/main/java/appeng/core/api/definitions/ApiMaterials.java @@ -90,6 +90,7 @@ public final class ApiMaterials implements IMaterials { private final IItemDefinition cardFuzzy; private final IItemDefinition cardInverter; private final IItemDefinition cardCrafting; + private final IItemDefinition cardSticky; private final IItemDefinition enderDust; private final IItemDefinition flour; @@ -208,6 +209,7 @@ public final class ApiMaterials implements IMaterials { this.cardFuzzy = new DamagedItemDefinition("material.card.fuzzy", materials.createMaterial(MaterialType.CARD_FUZZY)); this.cardInverter = new DamagedItemDefinition("material.card.inverter", materials.createMaterial(MaterialType.CARD_INVERTER)); this.cardCrafting = new DamagedItemDefinition("material.card.crafting", materials.createMaterial(MaterialType.CARD_CRAFTING)); + this.cardSticky = new DamagedItemDefinition("material.card.sticky", materials.createMaterial(MaterialType.CARD_STICKY)); this.enderDust = new DamagedItemDefinition("material.dust.ender", materials.createMaterial(MaterialType.ENDER_DUST)); this.flour = new DamagedItemDefinition("material.flour", materials.createMaterial(MaterialType.FLOUR)); @@ -425,6 +427,11 @@ public final class ApiMaterials implements IMaterials { return this.cardCrafting; } + @Override + public IItemDefinition cardSticky() { + return this.cardSticky; + } + @Override public IItemDefinition enderDust() { return this.enderDust; diff --git a/src/main/java/appeng/core/localization/GuiText.java b/src/main/java/appeng/core/localization/GuiText.java index 88b97ce9a..b0d74fa4c 100644 --- a/src/main/java/appeng/core/localization/GuiText.java +++ b/src/main/java/appeng/core/localization/GuiText.java @@ -195,6 +195,7 @@ public enum GuiText { Partitioned, Precise, Fuzzy, + Sticky, // Used in a terminal to indicate that an item is craftable SmallFontCraft, diff --git a/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java b/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java index 3c5b54403..86b1d4411 100644 --- a/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java +++ b/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java @@ -437,6 +437,10 @@ public class PartFluidStorageBus extends PartUpgradeable implements IGridTickabl } } + if (this.getInstalledUpgrades(Upgrades.STICKY) > 0) { + this.handler.setSticky(true); + } + if (this.getInstalledUpgrades(Upgrades.FUZZY) > 0) { this.handler.setPartitionList(new FuzzyPriorityList(priorityList, (FuzzyMode) this.getConfigManager().getSetting(Settings.FUZZY_MODE))); } else { diff --git a/src/main/java/appeng/items/materials/ItemMaterial.java b/src/main/java/appeng/items/materials/ItemMaterial.java index 505d6c7f8..775fdd020 100644 --- a/src/main/java/appeng/items/materials/ItemMaterial.java +++ b/src/main/java/appeng/items/materials/ItemMaterial.java @@ -166,6 +166,8 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, return Upgrades.MAGNET; case CARD_QUANTUM_LINK: return Upgrades.QUANTUM_LINK; + case CARD_STICKY: + return Upgrades.STICKY; default: return null; } diff --git a/src/main/java/appeng/items/materials/MaterialType.java b/src/main/java/appeng/items/materials/MaterialType.java index 67f7fc912..a9894adfb 100644 --- a/src/main/java/appeng/items/materials/MaterialType.java +++ b/src/main/java/appeng/items/materials/MaterialType.java @@ -120,7 +120,9 @@ public enum MaterialType { CARD_PATTERN_EXPANSION(58, "material_card_pattern_expansion", EnumSet.of(AEFeature.ADVANCED_CARDS)), CARD_QUANTUM_LINK(59, "material_card_quantum_link", EnumSet.of(AEFeature.ADVANCED_CARDS, AEFeature.QUANTUM_LINKING_CARD)), - CARD_MAGNET(60, "material_card_magnet", EnumSet.of(AEFeature.BASIC_CARDS)); + CARD_MAGNET(60, "material_card_magnet", EnumSet.of(AEFeature.BASIC_CARDS)), + CARD_STICKY(61, "material_card_sticky", EnumSet.of(AEFeature.BASIC_CARDS)), + ; private final Set features; diff --git a/src/main/java/appeng/me/helpers/MEMonitorHandler.java b/src/main/java/appeng/me/helpers/MEMonitorHandler.java index 046d70b21..d28295a54 100644 --- a/src/main/java/appeng/me/helpers/MEMonitorHandler.java +++ b/src/main/java/appeng/me/helpers/MEMonitorHandler.java @@ -160,4 +160,8 @@ public class MEMonitorHandler> implements IMEMonitor { return this.getHandler().validForPass(i); } + @Override + public boolean isSticky() { + return this.internalHandler.isSticky(); + } } diff --git a/src/main/java/appeng/me/storage/BasicCellInventoryHandler.java b/src/main/java/appeng/me/storage/BasicCellInventoryHandler.java index 69850300e..78022d765 100644 --- a/src/main/java/appeng/me/storage/BasicCellInventoryHandler.java +++ b/src/main/java/appeng/me/storage/BasicCellInventoryHandler.java @@ -56,6 +56,7 @@ public class BasicCellInventoryHandler> extends MEInventor boolean hasInverter = false; boolean hasFuzzy = false; + boolean hasSticky = false; for (int x = 0; x < upgrades.getSlots(); x++) { final ItemStack is = upgrades.getStackInSlot(x); @@ -69,6 +70,9 @@ public class BasicCellInventoryHandler> extends MEInventor case INVERTER: hasInverter = true; break; + case STICKY: + hasSticky = true; + break; default: } } @@ -87,6 +91,10 @@ public class BasicCellInventoryHandler> extends MEInventor this.setWhitelist(hasInverter ? IncludeExclude.BLACKLIST : IncludeExclude.WHITELIST); + if (hasSticky) { + setSticky(true); + } + if (!priorityList.isEmpty()) { if (hasFuzzy) { this.setPartitionList(new FuzzyPriorityList<>(priorityList, fzMode)); diff --git a/src/main/java/appeng/me/storage/DriveWatcher.java b/src/main/java/appeng/me/storage/DriveWatcher.java index 3c2f20d22..eb6c5740a 100644 --- a/src/main/java/appeng/me/storage/DriveWatcher.java +++ b/src/main/java/appeng/me/storage/DriveWatcher.java @@ -40,7 +40,6 @@ public class DriveWatcher> extends MEInventoryHandler { private final ICellHandler handler; private final TileDrive drive; private final IActionSource source; - public DriveWatcher(final ICellInventoryHandler i, final ItemStack is, final ICellHandler han, final TileDrive drive) { super(i, i.getChannel()); this.is = is; @@ -100,4 +99,13 @@ public class DriveWatcher> extends MEInventoryHandler { return extractable; } + + @Override + public boolean isSticky() { + if (this.getInternal() instanceof ICellInventoryHandler cellInventoryHandler) { + return cellInventoryHandler.isSticky(); + } + + return super.isSticky(); + } } diff --git a/src/main/java/appeng/me/storage/MEInventoryHandler.java b/src/main/java/appeng/me/storage/MEInventoryHandler.java index 16c853da9..af17d6e21 100644 --- a/src/main/java/appeng/me/storage/MEInventoryHandler.java +++ b/src/main/java/appeng/me/storage/MEInventoryHandler.java @@ -43,6 +43,7 @@ public class MEInventoryHandler> implements IMEInventoryHa private AccessRestriction cachedAccessRestriction; private boolean hasReadAccess; private boolean hasWriteAccess; + private boolean isSticky; public MEInventoryHandler(final IMEInventory i, final IStorageChannel channel) { if (i instanceof IMEInventoryHandler) { @@ -166,4 +167,13 @@ public class MEInventoryHandler> implements IMEInventoryHa public IMEInventory getInternal() { return this.internal; } + + @Override + public boolean isSticky() { + return isSticky; + } + + public void setSticky(boolean isSticky) { + this.isSticky = isSticky; + } } diff --git a/src/main/java/appeng/me/storage/NetworkInventoryHandler.java b/src/main/java/appeng/me/storage/NetworkInventoryHandler.java index c90f7a215..32b8936da 100644 --- a/src/main/java/appeng/me/storage/NetworkInventoryHandler.java +++ b/src/main/java/appeng/me/storage/NetworkInventoryHandler.java @@ -31,6 +31,7 @@ import appeng.api.storage.IStorageChannel; import appeng.api.storage.data.IAEStack; import appeng.api.storage.data.IItemList; import appeng.me.cache.SecurityCache; +import net.minecraft.network.Packet; import java.util.*; @@ -45,19 +46,24 @@ public class NetworkInventoryHandler> implements IMEInvent private final IStorageChannel myChannel; private final SecurityCache security; private final NavigableMap>> priorityInventory; + private final NavigableMap>> stickyPriorityInventory; private int myPass = 0; public NetworkInventoryHandler(final IStorageChannel chan, final SecurityCache security) { this.myChannel = chan; this.security = security; this.priorityInventory = new TreeMap<>(PRIORITY_SORTER); + this.stickyPriorityInventory = new TreeMap<>(PRIORITY_SORTER); } public void addNewStorage(final IMEInventoryHandler h) { final int priority = h.getPriority(); - List> list = this.priorityInventory.get(priority); - if (list == null) { - this.priorityInventory.put(priority, list = new ArrayList<>()); + + final List> list; + if (h.isSticky()) { + list = this.stickyPriorityInventory.computeIfAbsent(priority, $ -> new ArrayList<>()); + } else { + list = this.priorityInventory.computeIfAbsent(priority, $ -> new ArrayList<>()); } list.add(h); @@ -74,6 +80,25 @@ public class NetworkInventoryHandler> implements IMEInvent return input; } + boolean stickyInventoryFound = false; + // For this pass we do return input if the item is able to go into a sticky inventory. We NEVER want to try and + // insert the item into a non-sticky inventory if it could already go into a sticky inventory. + for (final List> stickyInvList : this.stickyPriorityInventory.values()) { + Iterator> ii = stickyInvList.iterator(); + while (ii.hasNext() && input != null) { + final IMEInventoryHandler inv = ii.next(); + if (inv.validForPass(1) && inv.canAccept(input) && (inv.isPrioritized(input) || inv.extractItems(input, Actionable.SIMULATE, src) != null)) { + input = inv.injectItems(input, type, src); + stickyInventoryFound = true; + } + } + } + + if (stickyInventoryFound) { + this.surface(this, type); + return input; + } + for (final List> invList : this.priorityInventory.values()) { Iterator> ii = invList.iterator(); while (ii.hasNext() && input != null) { @@ -186,6 +211,16 @@ public class NetworkInventoryHandler> implements IMEInvent } } + for (List> invList : this.stickyPriorityInventory.descendingMap().values()) { + final Iterator> jj = invList.iterator(); + while (jj.hasNext() && output.getStackSize() < req) { + final IMEInventoryHandler inv = jj.next(); + + request.setStackSize(req - output.getStackSize()); + output.add(inv.extractItems(request, mode, src)); + } + } + this.surface(this, mode); if (output.getStackSize() <= 0) { @@ -201,15 +236,21 @@ public class NetworkInventoryHandler> implements IMEInvent return out; } - // for (Entry> h : priorityInventory.entries()) - for (final List> i : this.priorityInventory.values()) { + out = iterateInventories(out, priorityInventory); + out = iterateInventories(out, stickyPriorityInventory); + + this.surface(this, Actionable.SIMULATE); + + return out; + } + + private IItemList iterateInventories(IItemList out, final NavigableMap>> map) { + for (final List> i : map.values()) { for (final IMEInventoryHandler j : i) { out = j.getAvailableItems(out); } } - this.surface(this, Actionable.SIMULATE); - return out; } diff --git a/src/main/java/appeng/parts/automation/UpgradeInventory.java b/src/main/java/appeng/parts/automation/UpgradeInventory.java index 87799513a..d8bfd910b 100644 --- a/src/main/java/appeng/parts/automation/UpgradeInventory.java +++ b/src/main/java/appeng/parts/automation/UpgradeInventory.java @@ -48,6 +48,7 @@ public abstract class UpgradeInventory extends AppEngInternalInventory implement private int patternExpansionUpgrades = 0; private int magnetUpgrades = 0; private int quantumUpgrades = 0; + private int stickyUpgrades = 0; public UpgradeInventory(final IAEAppEngInventory parent, final int s) { super(null, s, 1); @@ -85,6 +86,8 @@ public abstract class UpgradeInventory extends AppEngInternalInventory implement return this.magnetUpgrades; case QUANTUM_LINK: return this.quantumUpgrades; + case STICKY: + return this.stickyUpgrades; default: return 0; } @@ -94,7 +97,7 @@ public abstract class UpgradeInventory extends AppEngInternalInventory implement private void updateUpgradeInfo() { this.cached = true; - this.patternExpansionUpgrades = this.inverterUpgrades = this.capacityUpgrades = this.redstoneUpgrades = this.speedUpgrades = this.fuzzyUpgrades = this.craftingUpgrades = magnetUpgrades = quantumUpgrades = 0; + this.patternExpansionUpgrades = this.inverterUpgrades = this.capacityUpgrades = this.redstoneUpgrades = this.speedUpgrades = this.fuzzyUpgrades = this.craftingUpgrades = magnetUpgrades = quantumUpgrades = stickyUpgrades = 0; for (final ItemStack is : this) { if (is == null || is.getItem() == Items.AIR || !(is.getItem() instanceof IUpgradeModule)) { @@ -129,6 +132,10 @@ public abstract class UpgradeInventory extends AppEngInternalInventory implement break; case QUANTUM_LINK: this.quantumUpgrades++; + break; + case STICKY: + this.stickyUpgrades++; + break; default: break; } @@ -143,6 +150,7 @@ public abstract class UpgradeInventory extends AppEngInternalInventory implement this.patternExpansionUpgrades = Math.min(this.patternExpansionUpgrades, this.getMaxInstalled(Upgrades.PATTERN_EXPANSION)); this.magnetUpgrades = Math.min(this.magnetUpgrades, this.getMaxInstalled(Upgrades.MAGNET)); this.quantumUpgrades = Math.min(this.quantumUpgrades, this.getMaxInstalled(Upgrades.QUANTUM_LINK)); + this.stickyUpgrades = Math.min(this.stickyUpgrades, this.getMaxInstalled(Upgrades.STICKY)); } @Override diff --git a/src/main/java/appeng/parts/misc/PartStorageBus.java b/src/main/java/appeng/parts/misc/PartStorageBus.java index b782e1f77..450bb799b 100644 --- a/src/main/java/appeng/parts/misc/PartStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartStorageBus.java @@ -113,6 +113,7 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC this.getConfigManager().registerSetting(Settings.ACCESS, AccessRestriction.READ_WRITE); this.getConfigManager().registerSetting(Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); this.getConfigManager().registerSetting(Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY); + this.getConfigManager().registerSetting(Settings.STICKY_MODE, YesNo.NO); this.mySrc = new MachineSource(this); } @@ -467,6 +468,10 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC } } + if (this.getInstalledUpgrades(Upgrades.STICKY) > 0) { + this.handler.setSticky(true); + } + if (this.getInstalledUpgrades(Upgrades.FUZZY) > 0) { this.handler.setPartitionList(new FuzzyPriorityList<>(priorityList, (FuzzyMode) this.getConfigManager().getSetting(Settings.FUZZY_MODE))); } else { diff --git a/src/main/resources/assets/appliedenergistics2/lang/en_us.lang b/src/main/resources/assets/appliedenergistics2/lang/en_us.lang index 49c545c3f..a32e63b68 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/en_us.lang +++ b/src/main/resources/assets/appliedenergistics2/lang/en_us.lang @@ -253,6 +253,7 @@ gui.appliedenergistics2.Renamer=Custom Name: (Enter to set) gui.appliedenergistics2.Nothing=Nothing gui.appliedenergistics2.CraftingToastDone=Crafting Done! gui.appliedenergistics2.CraftingToastCancelled=Crafting Cancelled! +gui.appliedenergistics2.Sticky=Sticky // GUI Tooltips gui.tooltips.appliedenergistics2.Stash=Store Items @@ -524,6 +525,7 @@ item.appliedenergistics2.material.silicon_print.name=Printed Silicon item.appliedenergistics2.material.name_press.name=Inscriber Name Press item.appliedenergistics2.material.sky_dust.name=Sky Stone Dust item.appliedenergistics2.material.card_crafting.name=Crafting Card +item.appliedenergistics2.material.card_sticky.name=Sticky Card item.appliedenergistics2.multi_part.annihilation_plane.name=ME Annihilation Plane item.appliedenergistics2.multi_part.fluid_annihilation_plane.name=ME Fluid Annihilation Plane diff --git a/src/main/resources/assets/appliedenergistics2/models/item/material_card_sticky.json b/src/main/resources/assets/appliedenergistics2/models/item/material_card_sticky.json new file mode 100644 index 000000000..1ee1c6e2e --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/item/material_card_sticky.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "appliedenergistics2:items/material_card_sticky" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/recipes/materials/cardsticky.json b/src/main/resources/assets/appliedenergistics2/recipes/materials/cardsticky.json new file mode 100644 index 000000000..8dfa1e7ae --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/recipes/materials/cardsticky.json @@ -0,0 +1,31 @@ +{ + "conditions": [ + { + "type": "forge:and", + "values": [ + { + "type": "appliedenergistics2:material_exists", + "material": "material.card_sticky" + }, + { + "type": "appliedenergistics2:material_exists", + "material": "material.basic_card" + } + ] + } + ], + "result": { + "type": "appliedenergistics2:part", + "part": "material.card_sticky" + }, + "type": "appliedenergistics2:part_shapeless", + "ingredients": [ + { + "item": "minecraft:slime_ball" + }, + { + "type": "appliedenergistics2:part", + "part": "material.basic_card" + } + ] +} diff --git a/src/main/resources/assets/appliedenergistics2/textures/items/material_card_sticky.png b/src/main/resources/assets/appliedenergistics2/textures/items/material_card_sticky.png new file mode 100644 index 0000000000000000000000000000000000000000..5178aec5b5d4b4de81600d208576366a01953519 GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_s6=PZ!4!i{7P^H+mlq5NO}u6_VpEI9*8d)iuZ6J3AM6u)0p@`N6;id zmQDy#YT@`=rN7>1UDo3>zf7j3W_~_&ON8O+-$`vHy#W&Kz1y-rh0b2zznWps4&GyF z!6N=;H4JwTUV9r}n6@{*zH;|2&%3z-{Vj@?2VNX8XctcvySz+3K%)J5S)BJ?A?eJg zrP~<~unTmzRIcA&Z-3~T?wf6<8DEmqH_dq)zc5R$cA`Q4fxmZ!`OW)v&fmPN%wiqj zm6*OsMB7^BvNMCt9h*tUpEZ{5V&puoc=6ohAf=^840wvt;^Je@oe}Pl54YUm5m)lA z;XPkdVOD;(B literal 0 HcmV?d00001