diff --git a/CHANGELOG.md b/CHANGELOG.md index 723b59c97..6fa120ae5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # Refined Storage Changelog ### 1.9.5 -- Re-implemented the /refinedstorage createdisk command (raoulvdberge) +- Re-implemented the /refinedstorage disk create command (raoulvdberge) +- Added the /refinedstorage disk list command (raoulvdberge) +- Added the /refinedstorage disk list command (raoulvdberge) - Added JEI ghost ingredient dragging support (raoulvdberge) ### 1.9.4 diff --git a/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java b/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java index 3822da857..8f094f6b9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java @@ -22,12 +22,14 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.api.util.IQuantityFormatter; import com.refinedmods.refinedstorage.api.util.IStackList; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.List; import java.util.Set; @@ -154,18 +156,20 @@ public interface IRSAPI { /** * @param world the world * @param capacity the capacity + * @param owner the owner or null if no owner * @return a storage disk */ @Nonnull - IStorageDisk createDefaultItemDisk(ServerWorld world, int capacity); + IStorageDisk createDefaultItemDisk(ServerWorld world, int capacity, @Nullable PlayerEntity owner); /** * @param world the world * @param capacity the capacity in mB + * @param owner the owner or null if no owner * @return a fluid storage disk */ @Nonnull - IStorageDisk createDefaultFluidDisk(ServerWorld world, int capacity); + IStorageDisk createDefaultFluidDisk(ServerWorld world, int capacity, @Nullable PlayerEntity owner); /** * Creates crafting request info for an item. diff --git a/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDisk.java index 9054aff11..b50fea531 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDisk.java @@ -5,6 +5,7 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ResourceLocation; import javax.annotation.Nullable; +import java.util.UUID; /** * Represents a storage disk. @@ -17,6 +18,12 @@ public interface IStorageDisk extends IStorage { */ int getCapacity(); + /** + * @return the id of the owner, or null if not present + */ + @Nullable + UUID getOwner(); + /** * When this storage disk is inserted into a storage disk container, it has to adjust to the container's settings * and use the following parameters instead. diff --git a/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDiskFactory.java b/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDiskFactory.java index 09ebe2cb1..1616737a3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDiskFactory.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/storage/disk/IStorageDiskFactory.java @@ -4,6 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.world.server.ServerWorld; +import javax.annotation.Nullable; import java.util.UUID; /** @@ -35,7 +36,8 @@ public interface IStorageDiskFactory { * * @param world the world * @param capacity the capacity + * @param owner the owner, or null if no owner * @return the storage disk */ - IStorageDisk create(ServerWorld world, int capacity); + IStorageDisk create(ServerWorld world, int capacity, @Nullable UUID owner); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java index 1e925abe0..59c809410 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java @@ -39,6 +39,7 @@ import com.refinedmods.refinedstorage.apiimpl.util.Comparer; import com.refinedmods.refinedstorage.apiimpl.util.FluidStackList; import com.refinedmods.refinedstorage.apiimpl.util.ItemStackList; import com.refinedmods.refinedstorage.apiimpl.util.QuantityFormatter; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.INBT; @@ -52,6 +53,7 @@ import org.apache.logging.log4j.Logger; import org.objectweb.asm.Type; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -215,22 +217,22 @@ public class API implements IRSAPI { @Override @Nonnull - public IStorageDisk createDefaultItemDisk(ServerWorld world, int capacity) { + public IStorageDisk createDefaultItemDisk(ServerWorld world, int capacity, @Nullable PlayerEntity owner) { if (world == null) { throw new IllegalArgumentException("World cannot be null"); } - return new ItemStorageDisk(world, capacity); + return new ItemStorageDisk(world, capacity, owner == null ? null : owner.getGameProfile().getId()); } @Override @Nonnull - public IStorageDisk createDefaultFluidDisk(ServerWorld world, int capacity) { + public IStorageDisk createDefaultFluidDisk(ServerWorld world, int capacity, @Nullable PlayerEntity owner) { if (world == null) { throw new IllegalArgumentException("World cannot be null"); } - return new FluidStorageDisk(world, capacity); + return new FluidStorageDisk(world, capacity, owner == null ? null : owner.getGameProfile().getId()); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java index ae41ab486..6c9784119 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java @@ -79,8 +79,8 @@ public class CraftingTask implements ICraftingTask, NodeListener { this.id = UUID.randomUUID(); this.nodes = nodes; - this.internalStorage = new ItemStorageDisk(null, -1); - this.internalFluidStorage = new FluidStorageDisk(null, -1); + this.internalStorage = new ItemStorageDisk(null, -1, null); + this.internalFluidStorage = new FluidStorageDisk(null, -1, null); this.toExtractInitial = toExtractInitial; this.toExtractInitialFluids = toExtractInitialFluids; diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/FluidDriveWrapperStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/FluidDriveWrapperStorageDisk.java index f554be166..5defbf65c 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/FluidDriveWrapperStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/FluidDriveWrapperStorageDisk.java @@ -15,6 +15,7 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class FluidDriveWrapperStorageDisk implements IStorageDisk { private final DiskDriveNetworkNode diskDrive; @@ -85,6 +86,12 @@ public class FluidDriveWrapperStorageDisk implements IStorageDisk { return parent.getCapacity(); } + @Nullable + @Override + public UUID getOwner() { + return parent.getOwner(); + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { parent.setSettings(listener, context); @@ -99,4 +106,4 @@ public class FluidDriveWrapperStorageDisk implements IStorageDisk { public ResourceLocation getFactoryId() { return parent.getFactoryId(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/ItemDriveWrapperStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/ItemDriveWrapperStorageDisk.java index f291bcf0d..46c079b73 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/ItemDriveWrapperStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskdrive/ItemDriveWrapperStorageDisk.java @@ -15,6 +15,7 @@ import net.minecraftforge.items.ItemHandlerHelper; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class ItemDriveWrapperStorageDisk implements IStorageDisk { private final DiskDriveNetworkNode diskDrive; @@ -85,6 +86,12 @@ public class ItemDriveWrapperStorageDisk implements IStorageDisk { return parent.getCapacity(); } + @Nullable + @Override + public UUID getOwner() { + return parent.getOwner(); + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { parent.setSettings(listener, context); @@ -99,4 +106,4 @@ public class ItemDriveWrapperStorageDisk implements IStorageDisk { public ResourceLocation getFactoryId() { return parent.getFactoryId(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskmanipulator/StorageDiskFluidManipulatorWrapper.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskmanipulator/StorageDiskFluidManipulatorWrapper.java index fa706409c..1d1860a5b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskmanipulator/StorageDiskFluidManipulatorWrapper.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/diskmanipulator/StorageDiskFluidManipulatorWrapper.java @@ -16,6 +16,7 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class StorageDiskFluidManipulatorWrapper implements IStorageDisk { private final DiskManipulatorNetworkNode diskManipulator; @@ -44,6 +45,12 @@ public class StorageDiskFluidManipulatorWrapper implements IStorageDisk { private final DiskManipulatorNetworkNode diskManipulator; @@ -45,6 +46,12 @@ public class StorageDiskItemManipulatorWrapper implements IStorageDisk> storages) { if (storage == null) { - loadStorage(); + loadStorage(null); } storages.add(storage); @@ -134,15 +136,15 @@ public class FluidStorageNetworkNode extends NetworkNode implements IStorageScre if (tag.hasUniqueId(NBT_ID)) { storageId = tag.getUniqueId(NBT_ID); - loadStorage(); + loadStorage(null); } } - public void loadStorage() { + public void loadStorage(@Nullable PlayerEntity owner) { IStorageDisk disk = API.instance().getStorageDiskManager((ServerWorld) world).get(storageId); if (disk == null) { - API.instance().getStorageDiskManager((ServerWorld) world).set(storageId, disk = API.instance().createDefaultFluidDisk((ServerWorld) world, type.getCapacity())); + API.instance().getStorageDiskManager((ServerWorld) world).set(storageId, disk = API.instance().createDefaultFluidDisk((ServerWorld) world, type.getCapacity(), owner)); API.instance().getStorageDiskManager((ServerWorld) world).markForSaving(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/FluidStorageWrapperStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/FluidStorageWrapperStorageDisk.java index cf4f09f2d..f39160c5d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/FluidStorageWrapperStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/FluidStorageWrapperStorageDisk.java @@ -14,6 +14,7 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class FluidStorageWrapperStorageDisk implements IStorageDisk { private final FluidStorageNetworkNode storage; @@ -71,6 +72,12 @@ public class FluidStorageWrapperStorageDisk implements IStorageDisk return parent.getCapacity(); } + @Nullable + @Override + public UUID getOwner() { + return parent.getOwner(); + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { parent.setSettings(listener, context); @@ -85,4 +92,4 @@ public class FluidStorageWrapperStorageDisk implements IStorageDisk public ResourceLocation getFactoryId() { return parent.getFactoryId(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/ItemStorageWrapperStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/ItemStorageWrapperStorageDisk.java index 8e18dd2bc..d7d8d8e7f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/ItemStorageWrapperStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/ItemStorageWrapperStorageDisk.java @@ -14,6 +14,7 @@ import net.minecraftforge.items.ItemHandlerHelper; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class ItemStorageWrapperStorageDisk implements IStorageDisk { private final StorageNetworkNode storage; @@ -71,6 +72,12 @@ public class ItemStorageWrapperStorageDisk implements IStorageDisk { return parent.getCapacity(); } + @Nullable + @Override + public UUID getOwner() { + return parent.getOwner(); + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { parent.setSettings(listener, context); @@ -85,4 +92,4 @@ public class ItemStorageWrapperStorageDisk implements IStorageDisk { public ResourceLocation getFactoryId() { return parent.getFactoryId(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/StorageNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/StorageNetworkNode.java index 235493000..4741c5a24 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/StorageNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/storage/StorageNetworkNode.java @@ -25,6 +25,7 @@ import com.refinedmods.refinedstorage.tile.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.util.AccessTypeUtils; import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StorageBlockUtils; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ResourceLocation; @@ -37,6 +38,7 @@ import net.minecraftforge.fluids.FluidStack; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import javax.annotation.Nullable; import java.util.List; import java.util.UUID; @@ -102,7 +104,7 @@ public class StorageNetworkNode extends NetworkNode implements IStorageScreen, I @Override public void addItemStorages(List> storages) { if (storage == null) { - loadStorage(); + loadStorage(null); } storages.add(storage); @@ -134,15 +136,15 @@ public class StorageNetworkNode extends NetworkNode implements IStorageScreen, I if (tag.hasUniqueId(NBT_ID)) { storageId = tag.getUniqueId(NBT_ID); - loadStorage(); + loadStorage(null); } } - public void loadStorage() { + public void loadStorage(@Nullable PlayerEntity owner) { IStorageDisk disk = API.instance().getStorageDiskManager((ServerWorld) world).get(storageId); if (disk == null) { - API.instance().getStorageDiskManager((ServerWorld) world).set(storageId, disk = API.instance().createDefaultItemDisk((ServerWorld) world, type.getCapacity())); + API.instance().getStorageDiskManager((ServerWorld) world).set(storageId, disk = API.instance().createDefaultItemDisk((ServerWorld) world, type.getCapacity(), owner)); API.instance().getStorageDiskManager((ServerWorld) world).markForSaving(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java index a95aeec31..e08dc02e1 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java @@ -20,25 +20,29 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class FluidStorageDisk implements IStorageDisk { public static final String NBT_VERSION = "Version"; public static final String NBT_CAPACITY = "Capacity"; public static final String NBT_FLUIDS = "Fluids"; + public static final String NBT_OWNER = "Owner"; public static final int VERSION = 1; @Nullable private final ServerWorld world; private final int capacity; private final Multimap stacks = ArrayListMultimap.create(); + private final UUID owner; @Nullable private IStorageDiskListener listener; private IStorageDiskContainerContext context; - public FluidStorageDisk(@Nullable ServerWorld world, int capacity) { + public FluidStorageDisk(@Nullable ServerWorld world, int capacity, @Nullable UUID owner) { this.world = world; this.capacity = capacity; + this.owner = owner; } @Override @@ -55,6 +59,10 @@ public class FluidStorageDisk implements IStorageDisk { tag.put(NBT_FLUIDS, list); tag.putInt(NBT_CAPACITY, capacity); + if (owner != null) { + tag.putUniqueId(NBT_OWNER, owner); + } + return tag; } @@ -173,6 +181,12 @@ public class FluidStorageDisk implements IStorageDisk { return capacity; } + @Nullable + @Override + public UUID getOwner() { + return owner; + } + @Override public int getCacheDelta(int storedPreInsertion, int size, @Nullable FluidStack remainder) { if (getAccessType() == AccessType.INSERT) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java index a0bf5cc6e..0a13d838f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java @@ -21,25 +21,29 @@ import net.minecraftforge.items.ItemHandlerHelper; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class ItemStorageDisk implements IStorageDisk { public static final String NBT_VERSION = "Version"; public static final String NBT_CAPACITY = "Capacity"; public static final String NBT_ITEMS = "Items"; + public static final String NBT_OWNER = "Owner"; public static final int VERSION = 1; @Nullable private final ServerWorld world; private final int capacity; private final Multimap stacks = ArrayListMultimap.create(); + private final UUID owner; @Nullable private IStorageDiskListener listener; private IStorageDiskContainerContext context; - public ItemStorageDisk(@Nullable ServerWorld world, int capacity) { + public ItemStorageDisk(@Nullable ServerWorld world, int capacity, @Nullable UUID owner) { this.world = world; this.capacity = capacity; + this.owner = owner; } @Override @@ -56,6 +60,10 @@ public class ItemStorageDisk implements IStorageDisk { tag.put(NBT_ITEMS, list); tag.putInt(NBT_CAPACITY, capacity); + if (owner != null) { + tag.putUniqueId(NBT_OWNER, owner); + } + return tag; } @@ -179,6 +187,12 @@ public class ItemStorageDisk implements IStorageDisk { return capacity; } + @Nullable + @Override + public UUID getOwner() { + return owner; + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { this.listener = listener; @@ -207,4 +221,4 @@ public class ItemStorageDisk implements IStorageDisk { API.instance().getStorageDiskManager(world).markForSaving(); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableFluidStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableFluidStorageDisk.java index 2112c453f..384562e53 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableFluidStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableFluidStorageDisk.java @@ -13,6 +13,7 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class PortableFluidStorageDisk implements IStorageDisk { private final IStorageDisk parent; @@ -28,6 +29,12 @@ public class PortableFluidStorageDisk implements IStorageDisk { return parent.getCapacity(); } + @Nullable + @Override + public UUID getOwner() { + return parent.getOwner(); + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { parent.setSettings(listener, context); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableItemStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableItemStorageDisk.java index baa278f07..c6f7993ff 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableItemStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/PortableItemStorageDisk.java @@ -13,6 +13,7 @@ import net.minecraft.util.ResourceLocation; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; +import java.util.UUID; public class PortableItemStorageDisk implements IStorageDisk { private final IStorageDisk parent; @@ -28,6 +29,12 @@ public class PortableItemStorageDisk implements IStorageDisk { return parent.getCapacity(); } + @Nullable + @Override + public UUID getOwner() { + return parent.getOwner(); + } + @Override public void setSettings(@Nullable IStorageDiskListener listener, IStorageDiskContainerContext context) { parent.setSettings(listener, context); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java index 2b5ecd96d..e4cec314b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java @@ -14,6 +14,7 @@ import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; +import javax.annotation.Nullable; import java.util.UUID; public class FluidStorageDiskFactory implements IStorageDiskFactory { @@ -21,7 +22,11 @@ public class FluidStorageDiskFactory implements IStorageDiskFactory @Override public IStorageDisk createFromNbt(ServerWorld world, CompoundNBT tag) { - FluidStorageDisk disk = new FluidStorageDisk(world, tag.getInt(FluidStorageDisk.NBT_CAPACITY)); + FluidStorageDisk disk = new FluidStorageDisk( + world, + tag.getInt(FluidStorageDisk.NBT_CAPACITY), + tag.contains(FluidStorageDisk.NBT_OWNER) ? tag.getUniqueId(FluidStorageDisk.NBT_OWNER) : null + ); ListNBT list = tag.getList(FluidStorageDisk.NBT_FLUIDS, Constants.NBT.TAG_COMPOUND); @@ -63,7 +68,7 @@ public class FluidStorageDiskFactory implements IStorageDiskFactory } @Override - public IStorageDisk create(ServerWorld world, int capacity) { - return new FluidStorageDisk(world, capacity); + public IStorageDisk create(ServerWorld world, int capacity, @Nullable UUID owner) { + return new FluidStorageDisk(world, capacity, owner); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java index f468c2fbd..5e174ce8b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java @@ -4,12 +4,9 @@ import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.RSItems; import com.refinedmods.refinedstorage.api.storage.disk.IStorageDisk; import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskFactory; -import com.refinedmods.refinedstorage.apiimpl.API; -import com.refinedmods.refinedstorage.apiimpl.storage.ItemStorageType; import com.refinedmods.refinedstorage.apiimpl.storage.disk.ItemStorageDisk; import com.refinedmods.refinedstorage.item.StorageDiskItem; import com.refinedmods.refinedstorage.util.StackUtils; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; @@ -17,6 +14,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.util.Constants; +import javax.annotation.Nullable; import java.util.UUID; public class ItemStorageDiskFactory implements IStorageDiskFactory { @@ -24,7 +22,11 @@ public class ItemStorageDiskFactory implements IStorageDiskFactory { @Override public IStorageDisk createFromNbt(ServerWorld world, CompoundNBT tag) { - ItemStorageDisk disk = new ItemStorageDisk(world, tag.getInt(ItemStorageDisk.NBT_CAPACITY)); + ItemStorageDisk disk = new ItemStorageDisk( + world, + tag.getInt(ItemStorageDisk.NBT_CAPACITY), + tag.contains(ItemStorageDisk.NBT_OWNER) ? tag.getUniqueId(ItemStorageDisk.NBT_OWNER) : null + ); ListNBT list = tag.getList(ItemStorageDisk.NBT_ITEMS, Constants.NBT.TAG_COMPOUND); @@ -66,7 +68,7 @@ public class ItemStorageDiskFactory implements IStorageDiskFactory { } @Override - public IStorageDisk create(ServerWorld world, int capacity) { - return new ItemStorageDisk(world, capacity); + public IStorageDisk create(ServerWorld world, int capacity, @Nullable UUID owner) { + return new ItemStorageDisk(world, capacity, owner); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/block/FluidStorageBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/FluidStorageBlock.java index 3afee5007..3338c2b64 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/FluidStorageBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/FluidStorageBlock.java @@ -48,7 +48,7 @@ public class FluidStorageBlock extends NetworkNodeBlock { storage.setStorageId(stack.getTag().getUniqueId(FluidStorageNetworkNode.NBT_ID)); } - storage.loadStorage(); + storage.loadStorage(player instanceof PlayerEntity ? (PlayerEntity) player : null); } // Call this after loading the storage, so the network discovery can use the loaded storage. diff --git a/src/main/java/com/refinedmods/refinedstorage/block/StorageBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/StorageBlock.java index ab37ee741..6a59b06d2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/StorageBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/StorageBlock.java @@ -48,7 +48,7 @@ public class StorageBlock extends NetworkNodeBlock { storage.setStorageId(stack.getTag().getUniqueId(StorageNetworkNode.NBT_ID)); } - storage.loadStorage(); + storage.loadStorage(entity instanceof PlayerEntity ? (PlayerEntity) entity : null); } // Call this after loading the storage, so the network discovery can use the loaded storage. diff --git a/src/main/java/com/refinedmods/refinedstorage/command/CreateDiskCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/disk/CreateDiskCommand.java similarity index 95% rename from src/main/java/com/refinedmods/refinedstorage/command/CreateDiskCommand.java rename to src/main/java/com/refinedmods/refinedstorage/command/disk/CreateDiskCommand.java index 25c55a544..0d7f13434 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/CreateDiskCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/disk/CreateDiskCommand.java @@ -1,4 +1,4 @@ -package com.refinedmods.refinedstorage.command; +package com.refinedmods.refinedstorage.command.disk; import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.ArgumentBuilder; @@ -7,6 +7,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.refinedmods.refinedstorage.api.storage.disk.IStorageDisk; import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskFactory; import com.refinedmods.refinedstorage.apiimpl.API; +import com.refinedmods.refinedstorage.command.StorageDiskIdSuggestionProvider; import com.refinedmods.refinedstorage.render.Styles; import net.minecraft.command.CommandSource; import net.minecraft.command.Commands; @@ -24,7 +25,7 @@ import java.util.UUID; public class CreateDiskCommand implements Command { public static ArgumentBuilder register() { - return Commands.literal("createdisk") + return Commands.literal("create") .requires(cs -> cs.hasPermissionLevel(2)) .then(Commands.argument("player", EntityArgument.player()) .then(Commands.argument("id", UUIDArgument.func_239194_a_()).suggests(new StorageDiskIdSuggestionProvider()) diff --git a/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java new file mode 100644 index 000000000..901b8d361 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java @@ -0,0 +1,26 @@ +package com.refinedmods.refinedstorage.command.disk; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.refinedmods.refinedstorage.apiimpl.API; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraft.util.text.StringTextComponent; + +public class ListDiskCommand implements Command { + public static ArgumentBuilder register() { + return Commands.literal("list").executes(new ListDiskCommand()).then(ListDiskForPlayerCommand.register()); + } + + @Override + public int run(CommandContext context) { + API.instance().getStorageDiskManager(context.getSource().getWorld()) + .getAll() + .keySet() + .forEach(id -> context.getSource().sendFeedback(new StringTextComponent(id.toString()), false)); + + return 0; + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskForPlayerCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskForPlayerCommand.java new file mode 100644 index 000000000..ddcc9dbaf --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskForPlayerCommand.java @@ -0,0 +1,35 @@ +package com.refinedmods.refinedstorage.command.disk; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.refinedmods.refinedstorage.apiimpl.API; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraft.command.arguments.EntityArgument; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.text.StringTextComponent; + +import java.util.Map; + +public class ListDiskForPlayerCommand implements Command { + public static ArgumentBuilder register() { + return Commands.argument("player", EntityArgument.player()).executes(new ListDiskForPlayerCommand()); + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException { + PlayerEntity player = EntityArgument.getPlayer(context, "player"); + + API.instance().getStorageDiskManager(context.getSource().getWorld()) + .getAll() + .entrySet() + .stream() + .filter(entry -> player.getGameProfile().getId().equals(entry.getValue().getOwner())) + .map(Map.Entry::getKey) + .forEach(id -> context.getSource().sendFeedback(new StringTextComponent(id.toString()), false)); + + return 0; + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/PatternDumpCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java similarity index 98% rename from src/main/java/com/refinedmods/refinedstorage/command/PatternDumpCommand.java rename to src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java index dd7b24266..4c6efab76 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/PatternDumpCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java @@ -1,4 +1,4 @@ -package com.refinedmods.refinedstorage.command; +package com.refinedmods.refinedstorage.command.pattern; import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.ArgumentBuilder; @@ -17,7 +17,7 @@ import net.minecraftforge.fluids.FluidStack; public class PatternDumpCommand implements Command { public static ArgumentBuilder register() { - return Commands.literal("patterndump") + return Commands.literal("dump") .requires(cs -> cs.hasPermissionLevel(0)) .executes(new PatternDumpCommand()); } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/FluidStorageDiskItem.java b/src/main/java/com/refinedmods/refinedstorage/item/FluidStorageDiskItem.java index e80c42563..e20be772d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/FluidStorageDiskItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/FluidStorageDiskItem.java @@ -46,10 +46,10 @@ public class FluidStorageDiskItem extends Item implements IStorageDiskProvider { public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - if (!world.isRemote && !stack.hasTag()) { + if (!world.isRemote && !stack.hasTag() && entity instanceof PlayerEntity) { UUID id = UUID.randomUUID(); - API.instance().getStorageDiskManager((ServerWorld) world).set(id, API.instance().createDefaultFluidDisk((ServerWorld) world, getCapacity(stack))); + API.instance().getStorageDiskManager((ServerWorld) world).set(id, API.instance().createDefaultFluidDisk((ServerWorld) world, getCapacity(stack), (PlayerEntity) entity)); API.instance().getStorageDiskManager((ServerWorld) world).markForSaving(); setId(stack, id); diff --git a/src/main/java/com/refinedmods/refinedstorage/item/StorageDiskItem.java b/src/main/java/com/refinedmods/refinedstorage/item/StorageDiskItem.java index 575b46497..ac909e7b6 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/StorageDiskItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/StorageDiskItem.java @@ -46,10 +46,10 @@ public class StorageDiskItem extends Item implements IStorageDiskProvider { public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - if (!world.isRemote && !stack.hasTag()) { + if (!world.isRemote && !stack.hasTag() && entity instanceof PlayerEntity) { UUID id = UUID.randomUUID(); - API.instance().getStorageDiskManager((ServerWorld) world).set(id, API.instance().createDefaultItemDisk((ServerWorld) world, getCapacity(stack))); + API.instance().getStorageDiskManager((ServerWorld) world).set(id, API.instance().createDefaultItemDisk((ServerWorld) world, getCapacity(stack), (PlayerEntity) entity)); API.instance().getStorageDiskManager((ServerWorld) world).markForSaving(); setId(stack, id); diff --git a/src/main/java/com/refinedmods/refinedstorage/setup/ServerSetup.java b/src/main/java/com/refinedmods/refinedstorage/setup/ServerSetup.java index fc7876d25..896a43e7e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/setup/ServerSetup.java +++ b/src/main/java/com/refinedmods/refinedstorage/setup/ServerSetup.java @@ -1,8 +1,9 @@ package com.refinedmods.refinedstorage.setup; import com.refinedmods.refinedstorage.RS; -import com.refinedmods.refinedstorage.command.CreateDiskCommand; -import com.refinedmods.refinedstorage.command.PatternDumpCommand; +import com.refinedmods.refinedstorage.command.disk.CreateDiskCommand; +import com.refinedmods.refinedstorage.command.disk.ListDiskCommand; +import com.refinedmods.refinedstorage.command.pattern.PatternDumpCommand; import net.minecraft.command.Commands; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -10,7 +11,9 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class ServerSetup { @SubscribeEvent public void onRegisterCommands(RegisterCommandsEvent e) { - e.getDispatcher().register(Commands.literal(RS.ID).then(PatternDumpCommand.register())); - e.getDispatcher().register(Commands.literal(RS.ID).then(CreateDiskCommand.register())); + e.getDispatcher().register(Commands.literal(RS.ID).then(Commands.literal("pattern").then(PatternDumpCommand.register()))); + e.getDispatcher().register(Commands.literal(RS.ID).then(Commands.literal("disk") + .then(CreateDiskCommand.register()) + .then(ListDiskCommand.register()))); } }