diff --git a/src/api/java/appeng/api/config/Settings.java b/src/api/java/appeng/api/config/Settings.java index aa030321ad4..7fe7de1aac6 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 cef2babfd1e..79fdb1b9aff 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 64b5dcfd6c7..3a974382090 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 86f9aa63255..4d64b77f45e 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 e74ff1a29de..6287d09183a 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 void detectAndSendChanges() { 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 StorageFilter getStorageFilter() { 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 107b816d074..ce142644182 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -364,15 +364,19 @@ void postInit(final FMLPostInitializationEvent event) { // 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 @@ void postInit(final FMLPostInitializationEvent event) { 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 d2ef20cf87e..e5959944998 100644 --- a/src/main/java/appeng/core/api/ApiClientHelper.java +++ b/src/main/java/appeng/core/api/ApiClientHelper.java @@ -60,6 +60,10 @@ public > void addCellInformation(ICellInventoryHandler 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 4a86f8fce82..6e97e673c7b 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 void customize(IItemRendering rendering) { 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 IItemDefinition cardCrafting() { 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 88b97ce9a20..b0d74fa4cf8 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 3c5b5440369..86b1d441182 100644 --- a/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java +++ b/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java @@ -437,6 +437,10 @@ public MEInventoryHandler getInternalHandler() { } } + 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 505d6c7f818..775fdd0205c 100644 --- a/src/main/java/appeng/items/materials/ItemMaterial.java +++ b/src/main/java/appeng/items/materials/ItemMaterial.java @@ -166,6 +166,8 @@ public Upgrades getType(final ItemStack itemstack) { 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 67f7fc912b3..a9894adfb54 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 046d70b21c8..d28295a543f 100644 --- a/src/main/java/appeng/me/helpers/MEMonitorHandler.java +++ b/src/main/java/appeng/me/helpers/MEMonitorHandler.java @@ -160,4 +160,8 @@ public boolean validForPass(final int i) { 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 69850300e18..78022d7651a 100644 --- a/src/main/java/appeng/me/storage/BasicCellInventoryHandler.java +++ b/src/main/java/appeng/me/storage/BasicCellInventoryHandler.java @@ -56,6 +56,7 @@ public BasicCellInventoryHandler(final IMEInventory c, final IStorageChannel 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 BasicCellInventoryHandler(final IMEInventory c, final IStorageChannel case INVERTER: hasInverter = true; break; + case STICKY: + hasSticky = true; + break; default: } } @@ -87,6 +91,10 @@ public BasicCellInventoryHandler(final IMEInventory c, final IStorageChannel 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 3c2f20d22c7..eb6c5740a9a 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 T extractItems(final T request, final Actionable type, final IActionSourc 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 16c853da9b5..af17d6e2160 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 boolean validForPass(final int i) { 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 c90f7a215a9..32b8936da70 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.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 T injectItems(T input, final Actionable type, final IActionSource src) { 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 T extractItems(T request, final Actionable mode, final IActionSource src) } } + 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 IItemList getAvailableItems(IItemList out) { 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 87799513aee..d8bfd910b69 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 int getInstalledUpgrades(final Upgrades u) { return this.magnetUpgrades; case QUANTUM_LINK: return this.quantumUpgrades; + case STICKY: + return this.stickyUpgrades; default: return 0; } @@ -94,7 +97,7 @@ public int getInstalledUpgrades(final Upgrades u) { 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 @@ private void updateUpgradeInfo() { break; case QUANTUM_LINK: this.quantumUpgrades++; + break; + case STICKY: + this.stickyUpgrades++; + break; default: break; } @@ -143,6 +150,7 @@ private void updateUpgradeInfo() { 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 b782e1f77be..450bb799b65 100644 --- a/src/main/java/appeng/parts/misc/PartStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartStorageBus.java @@ -113,6 +113,7 @@ public PartStorageBus(final ItemStack is) { 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 MEInventoryHandler getInternalHandler() { } } + 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 49c545c3fe7..a32e63b6865 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 00000000000..1ee1c6e2e33 --- /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 00000000000..8dfa1e7aeec --- /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 00000000000..5178aec5b5d Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/items/material_card_sticky.png differ