吞噬盘实现分区功能
This commit is contained in:
parent
c8ae498808
commit
b7a3f60979
|
|
@ -1,6 +1,8 @@
|
||||||
package com.extendedae_plus.api.storage;
|
package com.extendedae_plus.api.storage;
|
||||||
|
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
|
import appeng.api.config.FuzzyMode;
|
||||||
|
import appeng.api.config.IncludeExclude;
|
||||||
import appeng.api.networking.security.IActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.stacks.AEItemKey;
|
import appeng.api.stacks.AEItemKey;
|
||||||
import appeng.api.stacks.AEKey;
|
import appeng.api.stacks.AEKey;
|
||||||
|
|
@ -8,7 +10,11 @@ import appeng.api.stacks.KeyCounter;
|
||||||
import appeng.api.storage.cells.CellState;
|
import appeng.api.storage.cells.CellState;
|
||||||
import appeng.api.storage.cells.ISaveProvider;
|
import appeng.api.storage.cells.ISaveProvider;
|
||||||
import appeng.api.storage.cells.StorageCell;
|
import appeng.api.storage.cells.StorageCell;
|
||||||
|
import appeng.api.upgrades.IUpgradeInventory;
|
||||||
import appeng.core.AELog;
|
import appeng.core.AELog;
|
||||||
|
import appeng.core.definitions.AEItems;
|
||||||
|
import appeng.util.ConfigInventory;
|
||||||
|
import appeng.util.prioritylist.IPartitionList;
|
||||||
import com.extendedae_plus.ExtendedAEPlus;
|
import com.extendedae_plus.ExtendedAEPlus;
|
||||||
import com.extendedae_plus.items.InfinityBigIntegerCellItem;
|
import com.extendedae_plus.items.InfinityBigIntegerCellItem;
|
||||||
import com.extendedae_plus.util.storage.InfinityConstants;
|
import com.extendedae_plus.util.storage.InfinityConstants;
|
||||||
|
|
@ -37,6 +43,8 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
||||||
private final ItemStack self;
|
private final ItemStack self;
|
||||||
// AE2 提供的保存提供者,用于在容器中批量保存时触发回调
|
// AE2 提供的保存提供者,用于在容器中批量保存时触发回调
|
||||||
private final ISaveProvider container;
|
private final ISaveProvider container;
|
||||||
|
private final IPartitionList partitionList;
|
||||||
|
private final IncludeExclude partitionListMode;
|
||||||
// 存储物品键和数量的映射
|
// 存储物品键和数量的映射
|
||||||
private Object2ObjectMap<AEKey, BigInteger> AEKey2AmountsMap;
|
private Object2ObjectMap<AEKey, BigInteger> AEKey2AmountsMap;
|
||||||
// 存储的物品种类数量
|
// 存储的物品种类数量
|
||||||
|
|
@ -59,6 +67,17 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
||||||
this.container = saveProvider;
|
this.container = saveProvider;
|
||||||
// 初始化 storedAmounts 为 null,延迟加载物品数据
|
// 初始化 storedAmounts 为 null,延迟加载物品数据
|
||||||
this.AEKey2AmountsMap = null;
|
this.AEKey2AmountsMap = null;
|
||||||
|
var builder = IPartitionList.builder();
|
||||||
|
var upgrades = this.getUpgradesInventory();
|
||||||
|
var config = this.getConfigInventory();
|
||||||
|
boolean hasInverter = upgrades.isInstalled(AEItems.INVERTER_CARD);
|
||||||
|
boolean isFuzzy = upgrades.isInstalled(AEItems.FUZZY_CARD);
|
||||||
|
if (isFuzzy) {
|
||||||
|
builder.fuzzyMode(this.getFuzzyMode());
|
||||||
|
}
|
||||||
|
builder.addAll(config.keySet());
|
||||||
|
this.partitionListMode = hasInverter ? IncludeExclude.BLACKLIST : IncludeExclude.WHITELIST;
|
||||||
|
this.partitionList = builder.build();
|
||||||
// 初始化磁盘数据
|
// 初始化磁盘数据
|
||||||
initData();
|
initData();
|
||||||
}
|
}
|
||||||
|
|
@ -146,6 +165,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
||||||
// backward compat: also remove internal cell item count key if present
|
// backward compat: also remove internal cell item count key if present
|
||||||
tag.remove(InfinityConstants.INFINITY_CELL_ITEM_COUNT);
|
tag.remove(InfinityConstants.INFINITY_CELL_ITEM_COUNT);
|
||||||
}
|
}
|
||||||
|
this.isPersisted = true;
|
||||||
initData();
|
initData();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
@ -195,7 +215,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
||||||
// 获取存储单元的描述(此处返回null,可自定义)
|
// 获取存储单元的描述(此处返回null,可自定义)
|
||||||
@Override
|
@Override
|
||||||
public Component getDescription() {
|
public Component getDescription() {
|
||||||
return null;
|
return self.getHoverName();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 静态方法,创建存储单元库存
|
// 静态方法,创建存储单元库存
|
||||||
|
|
@ -311,6 +331,18 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
||||||
return ExtendedAEPlus.STORAGE_INSTANCE;
|
return ExtendedAEPlus.STORAGE_INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ConfigInventory getConfigInventory() {
|
||||||
|
return this.cell.getConfigInventory(this.self);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IUpgradeInventory getUpgradesInventory() {
|
||||||
|
return this.cell.getUpgrades(this.self);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FuzzyMode getFuzzyMode() {
|
||||||
|
return this.cell.getFuzzyMode(this.self);
|
||||||
|
}
|
||||||
|
|
||||||
// 标记数据需要保存,并通知容器或直接持久化
|
// 标记数据需要保存,并通知容器或直接持久化
|
||||||
private void saveChanges() {
|
private void saveChanges() {
|
||||||
// 更新存储的物品种类数量
|
// 更新存储的物品种类数量
|
||||||
|
|
@ -339,6 +371,9 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
||||||
if (amount == 0){
|
if (amount == 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (!this.partitionList.matchesFilter(what, this.partitionListMode)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// 不允许存储有物品的无限单元
|
// 不允许存储有物品的无限单元
|
||||||
if (what instanceof AEItemKey itemKey &&
|
if (what instanceof AEItemKey itemKey &&
|
||||||
itemKey.getItem() instanceof InfinityBigIntegerCellItem &&
|
itemKey.getItem() instanceof InfinityBigIntegerCellItem &&
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,10 @@ public final class UpgradeCards {
|
||||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.EXPORT_BUS, 1, ioBusGroup);
|
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.EXPORT_BUS, 1, ioBusGroup);
|
||||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.STORAGE_BUS, 1, storageGroup);
|
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.STORAGE_BUS, 1, storageGroup);
|
||||||
|
|
||||||
|
String storageCellGroup = GuiText.StorageCells.getTranslationKey();
|
||||||
|
Upgrades.add(AEItems.FUZZY_CARD, ModItems.INFINITY_BIGINTEGER_CELL.get(), 1, storageCellGroup);
|
||||||
|
Upgrades.add(AEItems.INVERTER_CARD, ModItems.INFINITY_BIGINTEGER_CELL.get(), 1, storageCellGroup);
|
||||||
|
|
||||||
//EAE 的扩展输入/输出总线支持频道卡(部件)
|
//EAE 的扩展输入/输出总线支持频道卡(部件)
|
||||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_IMPORT_BUS, 1, ioBusGroup);
|
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_IMPORT_BUS, 1, ioBusGroup);
|
||||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_EXPORT_BUS, 1, ioBusGroup);
|
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_EXPORT_BUS, 1, ioBusGroup);
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@ package com.extendedae_plus.items;
|
||||||
|
|
||||||
import appeng.api.config.FuzzyMode;
|
import appeng.api.config.FuzzyMode;
|
||||||
import appeng.api.storage.cells.ICellWorkbenchItem;
|
import appeng.api.storage.cells.ICellWorkbenchItem;
|
||||||
|
import appeng.api.upgrades.IUpgradeInventory;
|
||||||
|
import appeng.api.upgrades.UpgradeInventories;
|
||||||
|
import appeng.items.contents.CellConfig;
|
||||||
|
import appeng.util.ConfigInventory;
|
||||||
import com.extendedae_plus.api.storage.InfinityBigIntegerCellInventory;
|
import com.extendedae_plus.api.storage.InfinityBigIntegerCellInventory;
|
||||||
import com.extendedae_plus.util.storage.InfinityConstants;
|
import com.extendedae_plus.util.storage.InfinityConstants;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
|
|
@ -94,12 +98,31 @@ public class InfinityBigIntegerCellItem extends Item implements ICellWorkbenchIt
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IUpgradeInventory getUpgrades(ItemStack itemStack) {
|
||||||
|
return UpgradeInventories.forItem(itemStack, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConfigInventory getConfigInventory(ItemStack itemStack) {
|
||||||
|
return CellConfig.create(itemStack);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FuzzyMode getFuzzyMode(ItemStack itemStack) {
|
public FuzzyMode getFuzzyMode(ItemStack itemStack) {
|
||||||
return null;
|
final String fz = itemStack.getOrCreateTag().getString("FuzzyMode");
|
||||||
|
if (fz.isEmpty()) {
|
||||||
|
return FuzzyMode.IGNORE_ALL;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return FuzzyMode.valueOf(fz);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
return FuzzyMode.IGNORE_ALL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setFuzzyMode(ItemStack itemStack, FuzzyMode fuzzyMode) {
|
public void setFuzzyMode(ItemStack itemStack, FuzzyMode fuzzyMode) {
|
||||||
|
itemStack.getOrCreateTag().putString("FuzzyMode", fuzzyMode.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user