Re-add shift clicking to regain storage part on empty disk.

This commit is contained in:
raoulvdberge
2018-06-02 16:39:38 +02:00
parent 8330a36858
commit f6f2635649
8 changed files with 142 additions and 9 deletions

View File

@@ -6,6 +6,7 @@
- Removed Project E integration (raoulvdberge)
- Removed Storage Drawers integration (you can still attach an External Storage to drawers, though) (raoulvdberge)
- Removed blocking mode in autocrafting (raoulvdberge)
- Added new storage disk system where the storage disk data (items, fluids) are stored off the disk itself, in another file (refinedstorage_disks.dat). The disk itself only stores its ID (raoulvdberge)
- You can no longer put a Filter in filter slots to gain additional filter slots (raoulvdberge)
- You can now re-insert Processing Patterns in the Pattern Grid and have the inputs and outputs be completed (raoulvdberge)
- Fixed bug where pattern was recipe pattern was creatable when there was no recipe output (raoulvdberge)

View File

@@ -13,6 +13,7 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeRegistry;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandlerRegistry;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskManager;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskRegistry;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskSync;
@@ -123,12 +124,39 @@ public interface IRSAPI {
@Nonnull
IWirelessGridRegistry getWirelessGridRegistry();
/**
* @return the storage disk registry
*/
@Nonnull
IStorageDiskRegistry getStorageDiskRegistry();
/**
* @param world the world
* @return the storage disk manager
*/
@Nonnull
IStorageDiskManager getStorageDiskManager(World world);
/**
* @return the storage disk sync manager
*/
@Nonnull
IStorageDiskSync getStorageDiskSync();
/**
* @param world the world
* @param capacity the capacity
* @return a storage disk
*/
IStorageDisk<ItemStack> createDefaultItemDisk(World world, int capacity);
/**
* @param world the world
* @param capacity the capacity in mB
* @return a fluid storage disk
*/
IStorageDisk<FluidStack> createDefaultFluidDisk(World world, int capacity);
/**
* Opens a wireless grid for the given player.
*

View File

@@ -35,6 +35,13 @@ public interface IStorageDiskManager {
*/
void set(UUID id, IStorageDisk disk);
/**
* Removes a storage disk.
*
* @param id the id
*/
void remove(UUID id);
/**
* Marks this manager for saving.
*/

View File

@@ -17,6 +17,7 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeRegistry;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandlerRegistry;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskManager;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskRegistry;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskSync;
@@ -33,9 +34,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless.WirelessGri
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterChannel;
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskManager;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskSync;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.*;
import com.raoulvdberge.refinedstorage.apiimpl.util.Comparer;
import com.raoulvdberge.refinedstorage.apiimpl.util.QuantityFormatter;
import com.raoulvdberge.refinedstorage.apiimpl.util.StackListFluid;
@@ -195,11 +194,13 @@ public class API implements IRSAPI {
return gridRegistry;
}
@Nonnull
@Override
public IStorageDiskRegistry getStorageDiskRegistry() {
return storageDiskRegistry;
}
@Nonnull
@Override
public IStorageDiskManager getStorageDiskManager(World world) {
if (world.isRemote) {
@@ -220,11 +221,22 @@ public class API implements IRSAPI {
return instance;
}
@Nonnull
@Override
public IStorageDiskSync getStorageDiskSync() {
return storageDiskSync;
}
@Override
public IStorageDisk<ItemStack> createDefaultItemDisk(World world, int capacity) {
return new StorageDiskItem(world, capacity);
}
@Override
public IStorageDisk<FluidStack> createDefaultFluidDisk(World world, int capacity) {
return new StorageDiskFluid(world, capacity);
}
@Override
public void openWirelessGrid(EntityPlayer player, EnumHand hand, int networkDimension, int id) {
player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.getEntityWorld(), hand.ordinal(), networkDimension, id);

View File

@@ -99,11 +99,23 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
@Override
public void removeNode(BlockPos pos) {
if (pos == null) {
throw new IllegalArgumentException("Position cannot be null");
}
nodes.remove(pos);
}
@Override
public void setNode(BlockPos pos, INetworkNode node) {
if (pos == null) {
throw new IllegalArgumentException("Position cannot be null");
}
if (node == null) {
throw new IllegalArgumentException("Node cannot be null");
}
nodes.put(pos, node);
}

View File

@@ -58,6 +58,14 @@ public class StorageDiskManager extends WorldSavedData implements IStorageDiskMa
@Override
public void set(UUID id, IStorageDisk disk) {
if (id == null) {
throw new IllegalArgumentException("Id cannot be null");
}
if (disk == null) {
throw new IllegalArgumentException("Disk cannot be null");
}
if (disks.containsKey(id)) {
throw new IllegalArgumentException("Disks already contains id '" + id + "'");
}
@@ -65,6 +73,15 @@ public class StorageDiskManager extends WorldSavedData implements IStorageDiskMa
disks.put(id, disk);
}
@Override
public void remove(UUID id) {
if (id == null) {
throw new IllegalArgumentException("Id cannot be null");
}
disks.remove(id);
}
@Override
public void markForSaving() {
markDirty();

View File

@@ -1,17 +1,23 @@
package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskSyncData;
import com.raoulvdberge.refinedstorage.api.storage.disk.StorageDiskType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskFluid;
import com.raoulvdberge.refinedstorage.block.FluidStorageType;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.world.World;
@@ -57,7 +63,7 @@ public class ItemFluidStorageDisk extends ItemBase implements IStorageDiskProvid
stack.setTagCompound(new NBTTagCompound());
stack.getTagCompound().setUniqueId(NBT_ID, id);
API.instance().getStorageDiskManager(world).set(id, new StorageDiskFluid(world, FluidStorageType.getById(stack.getItemDamage()).getCapacity()));
API.instance().getStorageDiskManager(world).set(id, API.instance().createDefaultFluidDisk(world, FluidStorageType.getById(stack.getItemDamage()).getCapacity()));
API.instance().getStorageDiskManager(world).markForSaving();
}
}
@@ -86,7 +92,29 @@ public class ItemFluidStorageDisk extends ItemBase implements IStorageDiskProvid
}
}
// TODO: onItemRightClick
@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
ItemStack diskStack = player.getHeldItem(hand);
if (!world.isRemote && player.isSneaking() && diskStack.getMetadata() != TYPE_CREATIVE) {
IStorageDisk disk = API.instance().getStorageDiskManager(world).getByStack(diskStack);
if (disk != null && disk.getStored() == 0) {
ItemStack storagePart = new ItemStack(RSItems.FLUID_STORAGE_PART, 1, diskStack.getMetadata());
if (!player.inventory.addItemStackToInventory(storagePart.copy())) {
InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), storagePart);
}
API.instance().getStorageDiskManager(world).remove(getId(diskStack));
API.instance().getStorageDiskManager(world).markForSaving();
return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RSItems.STORAGE_HOUSING));
}
}
return new ActionResult<>(EnumActionResult.PASS, diskStack);
}
@Override
public int getEntityLifespan(ItemStack stack, World world) {

View File

@@ -1,17 +1,23 @@
package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskSyncData;
import com.raoulvdberge.refinedstorage.api.storage.disk.StorageDiskType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskItem;
import com.raoulvdberge.refinedstorage.block.ItemStorageType;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.world.World;
@@ -57,7 +63,7 @@ public class ItemStorageDisk extends ItemBase implements IStorageDiskProvider {
stack.setTagCompound(new NBTTagCompound());
stack.getTagCompound().setUniqueId(NBT_ID, id);
API.instance().getStorageDiskManager(world).set(id, new StorageDiskItem(world, ItemStorageType.getById(stack.getItemDamage()).getCapacity())); //TODO: create factory in API
API.instance().getStorageDiskManager(world).set(id, API.instance().createDefaultItemDisk(world, ItemStorageType.getById(stack.getItemDamage()).getCapacity()));
API.instance().getStorageDiskManager(world).markForSaving();
}
}
@@ -86,7 +92,29 @@ public class ItemStorageDisk extends ItemBase implements IStorageDiskProvider {
}
}
// TODO: onItemRightClick
@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
ItemStack diskStack = player.getHeldItem(hand);
if (!world.isRemote && player.isSneaking() && diskStack.getMetadata() != TYPE_CREATIVE) {
IStorageDisk disk = API.instance().getStorageDiskManager(world).getByStack(diskStack);
if (disk != null && disk.getStored() == 0) {
ItemStack storagePart = new ItemStack(RSItems.STORAGE_PART, 1, diskStack.getMetadata());
if (!player.inventory.addItemStackToInventory(storagePart.copy())) {
InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), storagePart);
}
API.instance().getStorageDiskManager(world).remove(getId(diskStack));
API.instance().getStorageDiskManager(world).markForSaving();
return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RSItems.STORAGE_HOUSING));
}
}
return new ActionResult<>(EnumActionResult.PASS, diskStack);
}
@Override
public int getEntityLifespan(ItemStack stack, World world) {