diff --git a/src/main/java/li/cil/oc2/common/block/ComputerBlock.java b/src/main/java/li/cil/oc2/common/block/ComputerBlock.java index 34e313cf..dd47d0d9 100644 --- a/src/main/java/li/cil/oc2/common/block/ComputerBlock.java +++ b/src/main/java/li/cil/oc2/common/block/ComputerBlock.java @@ -143,12 +143,16 @@ public final class ComputerBlock extends HorizontalBlock { @Override public void onBlockHarvested(final World world, final BlockPos pos, final BlockState state, final PlayerEntity player) { final TileEntity tileEntity = world.getTileEntity(pos); - if (tileEntity instanceof ComputerTileEntity) { + if (!world.isRemote() && tileEntity instanceof ComputerTileEntity) { final ComputerTileEntity computer = (ComputerTileEntity) tileEntity; - if (!world.isRemote() && player.isCreative() && !computer.isEmpty()) { - final ItemStack stack = new ItemStack(Items.COMPUTER_ITEM.get()); - computer.exportToItemStack(stack); - spawnAsEntity(world, pos, stack); + if (!computer.isEmpty()) { + computer.exportDeviceDataToItemStacks(); + + if (player.isCreative()) { + final ItemStack stack = new ItemStack(Items.COMPUTER_ITEM.get()); + computer.exportToItemStack(stack); + spawnAsEntity(world, pos, stack); + } } } diff --git a/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java b/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java index 09b2aa3d..94d7ba9d 100644 --- a/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java +++ b/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java @@ -35,15 +35,11 @@ public class ItemHandlerDeviceBusElement extends AbstractGroupingItemDeviceBusEl } } - public void handleBeforeItemRemoved(final int slot, final ItemStack stack) { - if (!stack.isEmpty()) { - exportDeviceDataToItemStack(slot, stack); + public void exportDeviceDataToItemStack(final int slot, final ItemStack stack) { + if (stack.isEmpty()) { + return; } - } - /////////////////////////////////////////////////////////////////// - - private void exportDeviceDataToItemStack(final int slot, final ItemStack stack) { final CompoundNBT exportedNbt = new CompoundNBT(); for (final ItemDeviceInfo info : groups.get(slot)) { ItemDeviceUtils.getItemDeviceDataKey(info.provider).ifPresent(key -> { @@ -58,6 +54,8 @@ public class ItemHandlerDeviceBusElement extends AbstractGroupingItemDeviceBusEl ItemDeviceUtils.setItemDeviceData(stack, exportedNbt); } + /////////////////////////////////////////////////////////////////// + private void importDeviceDataFromItemStack(final ItemStack stack, final HashSet devices) { ItemDeviceUtils.getItemDeviceData(stack).ifPresent(exportedNbt -> { for (final ItemDeviceInfo info : devices) { diff --git a/src/main/java/li/cil/oc2/common/container/DeviceItemStackHandler.java b/src/main/java/li/cil/oc2/common/container/DeviceItemStackHandler.java index 9b823e73..7bd11b59 100644 --- a/src/main/java/li/cil/oc2/common/container/DeviceItemStackHandler.java +++ b/src/main/java/li/cil/oc2/common/container/DeviceItemStackHandler.java @@ -36,6 +36,12 @@ public class DeviceItemStackHandler extends ItemStackHandler { return busElement; } + public void exportDeviceDataToItemStacks() { + for (int slot = 0; slot < getSlots(); slot++) { + busElement.exportDeviceDataToItemStack(slot, getStackInSlot(slot)); + } + } + @Override public CompoundNBT serializeNBT() { final CompoundNBT nbt = super.serializeNBT(); @@ -56,7 +62,7 @@ public class DeviceItemStackHandler extends ItemStackHandler { @Override public ItemStack extractItem(final int slot, final int amount, final boolean simulate) { if (!simulate && amount > 0) { - busElement.handleBeforeItemRemoved(slot, getStackInSlot(slot)); + busElement.exportDeviceDataToItemStack(slot, getStackInSlot(slot)); } return super.extractItem(slot, amount, simulate); diff --git a/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java b/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java index 6a127aa5..29769870 100644 --- a/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java +++ b/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java @@ -469,6 +469,13 @@ public final class ComputerTileEntity extends AbstractTileEntity implements ITic return true; } + public void exportDeviceDataToItemStacks() { + memoryItemHandler.exportDeviceDataToItemStacks(); + hardDriveItemHandler.exportDeviceDataToItemStacks(); + flashMemoryItemHandler.exportDeviceDataToItemStacks(); + cardItemHandler.exportDeviceDataToItemStacks(); + } + public void exportToItemStack(final ItemStack stack) { final CompoundNBT items = new CompoundNBT(); items.put(MEMORY_TAG_NAME, memoryItemHandler.serializeNBT());