From 1ee268c39d69417f55157c024b4ea8044c3871e8 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Fri, 16 Aug 2024 12:49:26 +0200 Subject: [PATCH] Almost Done --- .../github/projectet/ae2things/AE2Things.java | 37 ++++++++++++--- .../projectet/ae2things/command/Command.java | 24 ++++------ .../projectet/ae2things/item/DISKDrive.java | 15 ++----- .../mixin/CursedInternalSlotMixin.java | 33 +++++++------- .../ae2things/storage/DISKCellInventory.java | 45 +++++++++---------- .../projectet/ae2things/util/Constants.java | 1 - .../projectet/ae2things/util/DataStorage.java | 18 ++++---- .../ae2things/util/StorageManager.java | 10 +++-- 8 files changed, 96 insertions(+), 87 deletions(-) diff --git a/src/main/java/io/github/projectet/ae2things/AE2Things.java b/src/main/java/io/github/projectet/ae2things/AE2Things.java index a94371c..71abe1f 100644 --- a/src/main/java/io/github/projectet/ae2things/AE2Things.java +++ b/src/main/java/io/github/projectet/ae2things/AE2Things.java @@ -1,11 +1,19 @@ package io.github.projectet.ae2things; +import appeng.api.config.FuzzyMode; +import appeng.api.ids.AECreativeTabIds; +import appeng.api.storage.StorageCells; +import appeng.api.upgrades.Upgrades; +import appeng.core.definitions.AEItems; +import com.mojang.serialization.Codec; import io.github.projectet.ae2things.client.AE2ThingsClient; import io.github.projectet.ae2things.command.Command; import io.github.projectet.ae2things.item.AETItems; import io.github.projectet.ae2things.storage.DISKCellHandler; import io.github.projectet.ae2things.util.StorageManager; - +import net.minecraft.core.UUIDUtil; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.neoforged.api.distmarker.Dist; @@ -17,10 +25,8 @@ import net.neoforged.neoforge.event.tick.LevelTickEvent; import net.neoforged.neoforge.registries.DeferredRegister; -import appeng.api.ids.AECreativeTabIds; -import appeng.api.storage.StorageCells; -import appeng.api.upgrades.Upgrades; -import appeng.core.definitions.AEItems; +import java.util.UUID; +import java.util.function.Consumer; @Mod(AE2Things.MOD_ID) public class AE2Things { @@ -31,12 +37,25 @@ public class AE2Things { public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MOD_ID); + public static final DeferredRegister.DataComponents COMPONENTS = DeferredRegister.createDataComponents(MOD_ID); + + public static final DataComponentType DATA_DISK_ID = registerDataComponentType("disk_id", builder -> { + builder.persistent(UUIDUtil.CODEC).networkSynchronized(UUIDUtil.STREAM_CODEC); + }); + public static final DataComponentType DATA_DISK_ITEM_COUNT = registerDataComponentType("disk_item_count", builder -> { + builder.persistent(Codec.LONG).networkSynchronized(ByteBufCodecs.VAR_LONG); + }); + public static final DataComponentType DATA_FUZZY_MODE = registerDataComponentType("fuzzy_mode", builder -> { + builder.persistent(FuzzyMode.CODEC).networkSynchronized(FuzzyMode.STREAM_CODEC); + }); + public static ResourceLocation id(String path) { return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); } public AE2Things(IEventBus modEventBus, Dist dist) { ITEMS.register(modEventBus); + COMPONENTS.register(modEventBus); AETItems.init(); @@ -84,4 +103,12 @@ public static void worldTick(LevelTickEvent.Pre event) { STORAGE_INSTANCE = StorageManager.getInstance(serverLevel.getServer()); } } + + private static DataComponentType registerDataComponentType(String name, Consumer> customizer) { + var builder = DataComponentType.builder(); + customizer.accept(builder); + var componentType = builder.build(); + COMPONENTS.register(name, () -> componentType); + return componentType; + } } diff --git a/src/main/java/io/github/projectet/ae2things/command/Command.java b/src/main/java/io/github/projectet/ae2things/command/Command.java index 1ec613d..bb4277c 100644 --- a/src/main/java/io/github/projectet/ae2things/command/Command.java +++ b/src/main/java/io/github/projectet/ae2things/command/Command.java @@ -1,22 +1,15 @@ package io.github.projectet.ae2things.command; -import java.util.UUID; - import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.tree.LiteralCommandNode; - import io.github.projectet.ae2things.AE2Things; import io.github.projectet.ae2things.item.AETItems; -import io.github.projectet.ae2things.storage.DISKCellInventory; import io.github.projectet.ae2things.storage.IDISKCellItem; -import io.github.projectet.ae2things.util.Constants; - import net.minecraft.ChatFormatting; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.arguments.UuidArgument; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; @@ -24,6 +17,8 @@ import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.event.RegisterCommandsEvent; +import java.util.UUID; + public class Command { public static void commandRegister(RegisterCommandsEvent event) { @@ -52,10 +47,10 @@ public static void commandRegister(RegisterCommandsEvent event) { private static int help(CommandContext context) { context.getSource().sendSuccess(() -> Component.literal("Available Argument(s): "), false); context.getSource().sendSuccess(() -> Component.literal( - "/ae2things recover - Spawns a drive with the given UUID, if it doesn't exist, does not spawn any item."), + "/ae2things recover - Spawns a drive with the given UUID, if it doesn't exist, does not spawn any item."), false); context.getSource().sendSuccess(() -> Component.literal( - "/ae2things getuuid - Gets the UUID of the drive in the player's hand if it has a UUID. Returns the DISKS uuid."), + "/ae2things getuuid - Gets the UUID of the drive in the player's hand if it has a UUID. Returns the DISKS uuid."), false); return 0; } @@ -65,11 +60,9 @@ private static int spawnDrive(CommandContext context, UUID u if (AE2Things.STORAGE_INSTANCE.hasUUID(uuid)) { ItemStack stack = new ItemStack(AETItems.DISK_DRIVE_256K.get()); - CompoundTag nbt = new CompoundTag(); - nbt.putUUID(Constants.DISKUUID, uuid); - nbt.putLong(DISKCellInventory.ITEM_COUNT_TAG, AE2Things.STORAGE_INSTANCE.getOrCreateDisk(uuid).itemCount); - stack.setTag(nbt); + stack.set(AE2Things.DATA_DISK_ID, uuid); + stack.set(AE2Things.DATA_DISK_ITEM_COUNT, AE2Things.STORAGE_INSTANCE.getOrCreateDisk(uuid).itemCount); player.addItem(stack); @@ -87,8 +80,9 @@ private static int getUUID(CommandContext context) throws Co Player player = context.getSource().getPlayerOrException(); ItemStack mainStack = player.getMainHandItem(); if (mainStack.getItem() instanceof IDISKCellItem) { - if (mainStack.hasTag() && mainStack.getTag().contains(Constants.DISKUUID)) { - Component text = copyToClipboard(mainStack.getTag().getUUID(Constants.DISKUUID).toString()); + var diskId = mainStack.get(AE2Things.DATA_DISK_ID); + if (diskId != null) { + Component text = copyToClipboard(diskId.toString()); context.getSource().sendSuccess(() -> Component.translatable("command.ae2things.getuuid_success", text), false); return 0; diff --git a/src/main/java/io/github/projectet/ae2things/item/DISKDrive.java b/src/main/java/io/github/projectet/ae2things/item/DISKDrive.java index 2b4eb6d..df1f76e 100644 --- a/src/main/java/io/github/projectet/ae2things/item/DISKDrive.java +++ b/src/main/java/io/github/projectet/ae2things/item/DISKDrive.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Set; +import io.github.projectet.ae2things.AE2Things; import org.jetbrains.annotations.Nullable; import io.github.projectet.ae2things.storage.DISKCellHandler; @@ -74,20 +75,12 @@ public ConfigInventory getConfigInventory(ItemStack is) { @Override public FuzzyMode getFuzzyMode(final ItemStack is) { - final String fz = is.getOrCreateTag().getString("FuzzyMode"); - if (fz.isEmpty()) { - return FuzzyMode.IGNORE_ALL; - } - try { - return FuzzyMode.valueOf(fz); - } catch (final Throwable t) { - return FuzzyMode.IGNORE_ALL; - } + return is.getOrDefault(AE2Things.DATA_FUZZY_MODE, FuzzyMode.IGNORE_ALL); } @Override public void setFuzzyMode(final ItemStack is, final FuzzyMode fzMode) { - is.getOrCreateTag().putString("FuzzyMode", fzMode.name()); + is.set(AE2Things.DATA_FUZZY_MODE, fzMode); } @Override @@ -143,7 +136,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { } @Override - public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag context) { + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { tooltip.add(Component.literal("Deep Item Storage disK - Storage for dummies") .withStyle(ChatFormatting.DARK_GRAY, ChatFormatting.ITALIC)); addCellInformationToTooltip(stack, tooltip); diff --git a/src/main/java/io/github/projectet/ae2things/mixin/CursedInternalSlotMixin.java b/src/main/java/io/github/projectet/ae2things/mixin/CursedInternalSlotMixin.java index 3ecbc1e..69358fe 100644 --- a/src/main/java/io/github/projectet/ae2things/mixin/CursedInternalSlotMixin.java +++ b/src/main/java/io/github/projectet/ae2things/mixin/CursedInternalSlotMixin.java @@ -1,26 +1,22 @@ package io.github.projectet.ae2things.mixin; -import java.util.UUID; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Slice; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - import io.github.projectet.ae2things.AE2Things; -import io.github.projectet.ae2things.storage.DISKCellInventory; -import io.github.projectet.ae2things.util.Constants; import io.github.projectet.ae2things.util.DataStorage; - import net.minecraft.core.NonNullList; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Slice; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.UUID; @Mixin(AbstractContainerMenu.class) public abstract class CursedInternalSlotMixin { @@ -32,13 +28,14 @@ public abstract class CursedInternalSlotMixin { @Inject(method = "doClick", at = @At(value = "INVOKE", target = "net/minecraft/world/item/ItemStack.copyWithCount (I)Lnet/minecraft/world/item/ItemStack;"), slice = @Slice(from = @At(value = "INVOKE", target = "net/minecraft/world/inventory/Slot.hasItem()Z", ordinal = 1)), cancellable = true) public void CLONE(int slotIndex, int button, ClickType actionType, Player player, CallbackInfo ci) { Slot i = this.slots.get(slotIndex); - if (DISKCellInventory.hasDiskUUID(i.getItem())) { - DataStorage storage = AE2Things.STORAGE_INSTANCE - .getOrCreateDisk(i.getItem().getOrCreateTag().getUUID(Constants.DISKUUID)); + + var diskId = i.getItem().get(AE2Things.DATA_DISK_ID); + if (diskId != null) { + DataStorage storage = AE2Things.STORAGE_INSTANCE.getOrCreateDisk(diskId); ItemStack newStack = new ItemStack(i.getItem().getItem()); UUID id = UUID.randomUUID(); - newStack.getOrCreateTag().putUUID(Constants.DISKUUID, id); - newStack.getOrCreateTag().putLong(DISKCellInventory.ITEM_COUNT_TAG, storage.itemCount); + newStack.set(AE2Things.DATA_DISK_ID, id); + newStack.set(AE2Things.DATA_DISK_ITEM_COUNT, storage.itemCount); AE2Things.STORAGE_INSTANCE.updateDisk(id, storage); newStack.setCount(newStack.getMaxStackSize()); diff --git a/src/main/java/io/github/projectet/ae2things/storage/DISKCellInventory.java b/src/main/java/io/github/projectet/ae2things/storage/DISKCellInventory.java index ae30973..2b078a1 100644 --- a/src/main/java/io/github/projectet/ae2things/storage/DISKCellInventory.java +++ b/src/main/java/io/github/projectet/ae2things/storage/DISKCellInventory.java @@ -5,12 +5,13 @@ import io.github.projectet.ae2things.AE2Things; import io.github.projectet.ae2things.item.DISKDrive; -import io.github.projectet.ae2things.util.Constants; import io.github.projectet.ae2things.util.DataStorage; import io.github.projectet.ae2things.util.StorageManager; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.ListTag; import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.ai.goal.BreedGoal; import net.minecraft.world.item.ItemStack; import it.unimi.dsi.fastutil.longs.LongArrayList; @@ -34,16 +35,15 @@ import appeng.util.ConfigInventory; import appeng.util.prioritylist.FuzzyPriorityList; import appeng.util.prioritylist.IPartitionList; +import org.jetbrains.annotations.Nullable; public class DISKCellInventory implements StorageCell { private final IDISKCellItem cellType; - public static final String ITEM_COUNT_TAG = "ic"; - public static final String STACK_KEYS = "keys"; - public static final String STACK_AMOUNTS = "amts"; private final ISaveProvider container; private final AEKeyType keyType; + private final HolderLookup.Provider registries; private IPartitionList partitionList; private IncludeExclude partitionListMode; private int storedItems; @@ -52,11 +52,12 @@ public class DISKCellInventory implements StorageCell { private final ItemStack i; private boolean isPersisted = true; - public DISKCellInventory(IDISKCellItem cellType, ItemStack stack, ISaveProvider saveProvider) { + public DISKCellInventory(IDISKCellItem cellType, ItemStack stack, ISaveProvider saveProvider, HolderLookup.Provider registries) { this.cellType = cellType; this.i = stack; this.container = saveProvider; this.keyType = cellType.getKeyType(); + this.registries = registries; this.storedAmounts = null; initData(); @@ -157,8 +158,8 @@ public void persist() { if (storedItemCount == 0) { if (hasDiskUUID()) { getStorageInstance().removeDisk(getDiskUUID()); - i.getTag().remove(Constants.DISKUUID); - i.getTag().remove(DISKCellInventory.ITEM_COUNT_TAG); + i.remove(AE2Things.DATA_DISK_ID); + i.remove(AE2Things.DATA_DISK_ITEM_COUNT); initData(); } return; @@ -175,7 +176,7 @@ public void persist() { if (amount > 0) { itemCount += amount; - keys.add(entry.getKey().toTagGeneric()); + keys.add(entry.getKey().toTagGeneric(registries)); amounts.add(amount); } } @@ -189,7 +190,7 @@ public void persist() { this.storedItems = (short) this.storedAmounts.size(); this.storedItemCount = itemCount; - i.getOrCreateTag().putLong(DISKCellInventory.ITEM_COUNT_TAG, itemCount); + i.set(AE2Things.DATA_DISK_ITEM_COUNT, itemCount); this.isPersisted = true; } @@ -199,7 +200,7 @@ public Component getDescription() { return null; } - public static DISKCellInventory createInventory(ItemStack stack, ISaveProvider saveProvider) { + public static DISKCellInventory createInventory(ItemStack stack, ISaveProvider saveProvider, HolderLookup.Provider registries) { Objects.requireNonNull(stack, "Cannot create cell inventory for null itemstack"); if (!(stack.getItem()instanceof IDISKCellItem cellType)) { @@ -212,25 +213,23 @@ public static DISKCellInventory createInventory(ItemStack stack, ISaveProvider s } // The cell type's channel matches, so this cast is safe - return new DISKCellInventory(cellType, stack, saveProvider); + return new DISKCellInventory(cellType, stack, saveProvider, registries); } public boolean hasDiskUUID() { - return i.hasTag() && i.getOrCreateTag().contains(Constants.DISKUUID); + return i.has(AE2Things.DATA_DISK_ID); } public static boolean hasDiskUUID(ItemStack disk) { if (disk.getItem() instanceof IDISKCellItem) { - return disk.hasTag() && disk.getOrCreateTag().contains(Constants.DISKUUID); + return disk.has(AE2Things.DATA_DISK_ID); } return false; } + @Nullable public UUID getDiskUUID() { - if (hasDiskUUID()) - return i.getOrCreateTag().getUUID(Constants.DISKUUID); - else - return null; + return i.get(AE2Things.DATA_DISK_ID); } private boolean isStorageCell(AEItemKey key) { @@ -272,10 +271,6 @@ public void getAvailableStacks(KeyCounter out) { private void loadCellItems() { boolean corruptedTag = false; - if (!i.hasTag()) { - return; - } - var amounts = getDiskStorage().stackAmounts; var tags = getDiskStorage().stackKeys; if (amounts.length != tags.size()) { @@ -285,7 +280,7 @@ private void loadCellItems() { for (int i = 0; i < amounts.length; i++) { var amount = amounts[i]; - AEKey key = AEKey.fromTagGeneric(tags.getCompound(i)); + AEKey key = AEKey.fromTagGeneric(registries, tags.getCompound(i)); if (amount <= 0 || key == null) { corruptedTag = true; @@ -345,14 +340,14 @@ public long insert(AEKey what, long amount, Actionable mode, IActionSource sourc // any NBT data for empty cells instead of relying on an empty IAEStackList if (what instanceof AEItemKey itemKey && this.isStorageCell(itemKey)) { // TODO: make it work for any cell, and not just BasicCellInventory! - var meInventory = createInventory(itemKey.toStack(), null); + var meInventory = createInventory(itemKey.toStack(), null, registries); if (!isCellEmpty(meInventory)) { return 0; } } if (!hasDiskUUID()) { - i.getOrCreateTag().putUUID(Constants.DISKUUID, UUID.randomUUID()); + i.set(AE2Things.DATA_DISK_ID, UUID.randomUUID()); getStorageInstance().getOrCreateDisk(getDiskUUID()); loadCellItems(); } @@ -409,7 +404,7 @@ public long getFreeBytes() { public long getNbtItemCount() { if (hasDiskUUID()) { - return i.getTag().getLong(DISKCellInventory.ITEM_COUNT_TAG); + return i.getOrDefault(AE2Things.DATA_DISK_ITEM_COUNT, 0L); } return 0; } diff --git a/src/main/java/io/github/projectet/ae2things/util/Constants.java b/src/main/java/io/github/projectet/ae2things/util/Constants.java index 7a96a68..12c127b 100644 --- a/src/main/java/io/github/projectet/ae2things/util/Constants.java +++ b/src/main/java/io/github/projectet/ae2things/util/Constants.java @@ -2,7 +2,6 @@ public interface Constants { - String DISKUUID = "diskuuid"; String MANAGER_NAME = "disk_manager"; String DISKDATA = "diskdata"; String DISKLIST = "disklist"; diff --git a/src/main/java/io/github/projectet/ae2things/util/DataStorage.java b/src/main/java/io/github/projectet/ae2things/util/DataStorage.java index 0d84198..2152bec 100644 --- a/src/main/java/io/github/projectet/ae2things/util/DataStorage.java +++ b/src/main/java/io/github/projectet/ae2things/util/DataStorage.java @@ -8,6 +8,10 @@ public class DataStorage { + private static final String STACK_KEYS = "keys"; + private static final String STACK_AMOUNTS = "amts"; + private static final String ITEM_COUNT_TAG = "item_count"; + public static final DataStorage EMPTY = new DataStorage(); public ListTag stackKeys; @@ -28,20 +32,18 @@ public DataStorage(ListTag stackKeys, long[] stackAmounts, long itemCount) { public CompoundTag toNbt() { CompoundTag nbt = new CompoundTag(); - nbt.put(DISKCellInventory.STACK_KEYS, stackKeys); - nbt.putLongArray(DISKCellInventory.STACK_AMOUNTS, stackAmounts); + nbt.put(STACK_KEYS, stackKeys); + nbt.putLongArray(STACK_AMOUNTS, stackAmounts); if (itemCount != 0) - nbt.putLong(DISKCellInventory.ITEM_COUNT_TAG, itemCount); + nbt.putLong(ITEM_COUNT_TAG, itemCount); return nbt; } public static DataStorage fromNbt(CompoundTag nbt) { - long itemCount = 0; - ListTag stackKeys = nbt.getList(DISKCellInventory.STACK_KEYS, Tag.TAG_COMPOUND); - long[] stackAmounts = nbt.getLongArray(DISKCellInventory.STACK_AMOUNTS); - if (nbt.contains(DISKCellInventory.ITEM_COUNT_TAG)) - itemCount = nbt.getLong(DISKCellInventory.ITEM_COUNT_TAG); + ListTag stackKeys = nbt.getList(STACK_KEYS, Tag.TAG_COMPOUND); + long[] stackAmounts = nbt.getLongArray(STACK_AMOUNTS); + long itemCount = nbt.getLong(ITEM_COUNT_TAG); return new DataStorage(stackKeys, stackAmounts, itemCount); } diff --git a/src/main/java/io/github/projectet/ae2things/util/StorageManager.java b/src/main/java/io/github/projectet/ae2things/util/StorageManager.java index d5c217a..3d7c4a4 100644 --- a/src/main/java/io/github/projectet/ae2things/util/StorageManager.java +++ b/src/main/java/io/github/projectet/ae2things/util/StorageManager.java @@ -4,6 +4,7 @@ import java.util.Map; import java.util.UUID; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.server.MinecraftServer; @@ -12,6 +13,7 @@ public class StorageManager extends SavedData { private static final Factory FACTORY = new Factory<>(StorageManager::new, StorageManager::readNbt); + private static final String DISKUUID = "disk_id"; private final Map disks; public StorageManager() { @@ -25,12 +27,12 @@ private StorageManager(Map disks) { } @Override - public CompoundTag save(CompoundTag nbt) { + public CompoundTag save(CompoundTag nbt, HolderLookup.Provider registries) { ListTag diskList = new ListTag(); for (Map.Entry entry : disks.entrySet()) { CompoundTag disk = new CompoundTag(); - disk.putUUID(Constants.DISKUUID, entry.getKey()); + disk.putUUID(DISKUUID, entry.getKey()); disk.put(Constants.DISKDATA, entry.getValue().toNbt()); diskList.add(disk); } @@ -39,12 +41,12 @@ public CompoundTag save(CompoundTag nbt) { return nbt; } - public static StorageManager readNbt(CompoundTag nbt) { + public static StorageManager readNbt(CompoundTag nbt, HolderLookup.Provider registries) { Map disks = new HashMap<>(); ListTag diskList = nbt.getList(Constants.DISKLIST, CompoundTag.TAG_COMPOUND); for (int i = 0; i < diskList.size(); i++) { CompoundTag disk = diskList.getCompound(i); - disks.put(disk.getUUID(Constants.DISKUUID), DataStorage.fromNbt(disk.getCompound(Constants.DISKDATA))); + disks.put(disk.getUUID(DISKUUID), DataStorage.fromNbt(disk.getCompound(Constants.DISKDATA))); } return new StorageManager(disks); }