From 9785e38e3f07e3a2c9d98d04cc655476042599c9 Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Tue, 31 Jan 2023 15:29:43 -0300 Subject: [PATCH] magnet filtering --- src/main/java/appeng/core/Registration.java | 4 ++ .../appeng/items/materials/ItemMaterial.java | 37 +++++++++++++++- .../tools/powered/ToolWirelessTerminal.java | 43 ++++++++++++++++++- 3 files changed, 81 insertions(+), 3 deletions(-) diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 7087934a0..25ef37615 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -19,6 +19,7 @@ package appeng.core; +import appeng.api.AEApi; import appeng.api.config.Upgrades; import appeng.api.definitions.IBlocks; import appeng.api.definitions.IItemDefinition; @@ -380,6 +381,9 @@ final class Registration { Upgrades.FUZZY.registerItem(items.viewCell(), 1); Upgrades.INVERTER.registerItem(items.viewCell(), 1); + Upgrades.FUZZY.registerItem(AEApi.instance().definitions().materials().cardMagnet(), 1); + Upgrades.INVERTER.registerItem(AEApi.instance().definitions().materials().cardMagnet(), 1); + // Storage Bus Upgrades.FUZZY.registerItem(parts.storageBus(), 1); Upgrades.INVERTER.registerItem(parts.storageBus(), 1); diff --git a/src/main/java/appeng/items/materials/ItemMaterial.java b/src/main/java/appeng/items/materials/ItemMaterial.java index 25013958e..17250b6c6 100644 --- a/src/main/java/appeng/items/materials/ItemMaterial.java +++ b/src/main/java/appeng/items/materials/ItemMaterial.java @@ -19,6 +19,8 @@ package appeng.items.materials; +import appeng.api.AEApi; +import appeng.api.config.FuzzyMode; import appeng.api.config.Upgrades; import appeng.api.implementations.IUpgradeableHost; import appeng.api.implementations.items.IItemGroup; @@ -27,11 +29,14 @@ import appeng.api.implementations.items.IUpgradeModule; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.parts.IPartHost; import appeng.api.parts.SelectedPart; +import appeng.api.storage.ICellWorkbenchItem; import appeng.core.AEConfig; import appeng.core.features.AEFeature; import appeng.core.features.IStackSrc; import appeng.core.features.MaterialStackSrc; import appeng.items.AEBaseItem; +import appeng.items.contents.CellConfig; +import appeng.items.contents.CellUpgrades; import appeng.util.InventoryAdaptor; import appeng.util.Platform; import appeng.util.inv.AdaptorItemHandler; @@ -63,7 +68,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public final class ItemMaterial extends AEBaseItem implements IStorageComponent, IUpgradeModule { +public final class ItemMaterial extends AEBaseItem implements IStorageComponent, IUpgradeModule, ICellWorkbenchItem { public static ItemMaterial instance; private static final int KILO_SCALAR = 1024; @@ -313,6 +318,36 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, return false; } + @Override + public boolean isEditable(ItemStack is) { + return is.isItemEqual(AEApi.instance().definitions().materials().cardMagnet().maybeStack(1).get()); + } + + @Override + public IItemHandler getUpgradesInventory(final ItemStack is) { + return new CellUpgrades(is, 2); + } + + @Override + public IItemHandler getConfigInventory(final ItemStack is) { + return new CellConfig(is); + } + + @Override + public FuzzyMode getFuzzyMode(final ItemStack is) { + final String fz = Platform.openNbtData(is).getString("FuzzyMode"); + try { + return FuzzyMode.valueOf(fz); + } catch (final Throwable t) { + return FuzzyMode.IGNORE_ALL; + } + } + + @Override + public void setFuzzyMode(final ItemStack is, final FuzzyMode fzMode) { + Platform.openNbtData(is).setString("FuzzyMode", fzMode.name()); + } + private static class SlightlyBetterSort implements Comparator { private final Pattern pattern; diff --git a/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java b/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java index 8311ebc0d..eafdf6895 100644 --- a/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java +++ b/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java @@ -26,6 +26,9 @@ import appeng.api.util.IConfigManager; import appeng.core.AEConfig; import appeng.core.localization.GuiText; import appeng.core.sync.GuiBridge; +import appeng.items.contents.CellConfig; +import appeng.items.contents.CellUpgrades; +import appeng.items.materials.ItemMaterial; import appeng.items.tools.powered.powersink.AEBasePoweredItem; import appeng.util.ConfigManager; import appeng.util.Platform; @@ -154,12 +157,48 @@ public class ToolWirelessTerminal extends AEBasePoweredItem implements IWireless ItemStackHandler siu = new ItemStackHandler(0); siu.deserializeNBT(upgradeNBT); for (int s = 0; s < siu.getSlots(); s++) { - if (siu.getStackInSlot(s).isItemEqual(AEApi.instance().definitions().materials().cardMagnet().maybeStack(1).get())) { + ItemStack is = siu.getStackInSlot(s); + if (is.isItemEqual(AEApi.instance().definitions().materials().cardMagnet().maybeStack(1).get())) { + ItemMaterial im = (ItemMaterial) is.getItem(); + CellConfig c = (CellConfig) im.getConfigInventory(is); + CellUpgrades u = (CellUpgrades) im.getUpgradesInventory(is); + FuzzyMode fz = null; + boolean isFuzzy = u.getInstalledUpgrades(Upgrades.FUZZY) == 1; + if (isFuzzy) { + fz = im.getFuzzyMode(is); + } + boolean inverted = u.getInstalledUpgrades(Upgrades.INVERTER) == 1; + List ei = worldIn.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB( new Vec3d(entityIn.posX + 5, entityIn.posY + 5, entityIn.posZ + 5), new Vec3d(entityIn.posX - 5, entityIn.posY - 5, entityIn.posZ - 5))); + boolean emptyFilter = true; for (EntityItem i : ei) { - i.setPosition(entityIn.posX, entityIn.posY, entityIn.posZ); + boolean matched = false; + for (int ss = 0; ss < c.getSlots(); ss++) { + ItemStack filter = c.getStackInSlot(ss); + if (filter.isEmpty()) continue; + emptyFilter = false; + if (isFuzzy) { + if (Platform.itemComparisons().isFuzzyEqualItem(filter, i.getItem(), fz)) { + matched = true; + break; + } + } else { + if (Platform.itemComparisons().isSameItem(filter, i.getItem())) { + matched = true; + break; + } + } + } + if (emptyFilter) { + i.setPosition(entityIn.posX, entityIn.posY, entityIn.posZ); + } + if (matched && !inverted) { + i.setPosition(entityIn.posX, entityIn.posY, entityIn.posZ); + } else if (!matched && inverted) { + i.setPosition(entityIn.posX, entityIn.posY, entityIn.posZ); + } } } }