From 97166cb2522028460be943b707f69e5cbd558147 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 24 Aug 2016 01:46:26 +0200 Subject: [PATCH] Fix disk drive crash --- .../refinedstorage/block/BlockDiskDrive.java | 1 - .../block/EnumFluidStorageType.java | 4 -- .../block/EnumItemStorageType.java | 4 -- .../refinedstorage/tile/TileDiskDrive.java | 56 +++++++++---------- .../refinedstorage/tile/config/IType.java | 1 + 5 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockDiskDrive.java b/src/main/java/refinedstorage/block/BlockDiskDrive.java index 906554cd4..35aa8c510 100755 --- a/src/main/java/refinedstorage/block/BlockDiskDrive.java +++ b/src/main/java/refinedstorage/block/BlockDiskDrive.java @@ -15,7 +15,6 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileDiskDrive; -// @TODO: Fix bug where it doesn't display correctly public class BlockDiskDrive extends BlockNode { private static final PropertyInteger STORED = PropertyInteger.create("stored", 0, 7); diff --git a/src/main/java/refinedstorage/block/EnumFluidStorageType.java b/src/main/java/refinedstorage/block/EnumFluidStorageType.java index 962941f0c..abe6a8d88 100755 --- a/src/main/java/refinedstorage/block/EnumFluidStorageType.java +++ b/src/main/java/refinedstorage/block/EnumFluidStorageType.java @@ -38,10 +38,6 @@ public enum EnumFluidStorageType implements IStringSerializable { } public static EnumFluidStorageType getById(int id) { - if (id == 5) { - return TYPE_CREATIVE; - } - for (EnumFluidStorageType type : EnumFluidStorageType.values()) { if (type.getId() == id) { return type; diff --git a/src/main/java/refinedstorage/block/EnumItemStorageType.java b/src/main/java/refinedstorage/block/EnumItemStorageType.java index 0ab9a2d94..7c8b2b00f 100755 --- a/src/main/java/refinedstorage/block/EnumItemStorageType.java +++ b/src/main/java/refinedstorage/block/EnumItemStorageType.java @@ -38,10 +38,6 @@ public enum EnumItemStorageType implements IStringSerializable { } public static EnumItemStorageType getById(int id) { - if (id == 5) { - return TYPE_CREATIVE; - } - for (EnumItemStorageType type : EnumItemStorageType.values()) { if (type.getId() == id) { return type; diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index c25982b79..45d9c084a 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -159,8 +159,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl @Override public void update() { if (!worldObj.isRemote) { - if (stored != getStoredForDisplayServer()) { - stored = getStoredForDisplayServer(); + if (stored != getStoredForDisplay()) { + stored = getStoredForDisplay(); updateBlock(); } @@ -317,33 +317,33 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl markDirty(); } - public int getStoredForDisplayServer() { - float stored = 0; - float capacity = 0; - - for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack disk = disks.getStackInSlot(i); - - if (disk != null) { - int diskCapacity = disk.getItem() == RefinedStorageItems.STORAGE_DISK ? EnumItemStorageType.getById(disk.getItemDamage()).getCapacity() : EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); - - if (capacity == -1) { - return 0; - } - - stored += disk.getItem() == RefinedStorageItems.STORAGE_DISK ? ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) : FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()); - capacity += diskCapacity; - } - } - - if (capacity == 0) { - return 0; - } - - return (int) Math.floor((stored / capacity) * 7F); - } - public int getStoredForDisplay() { + if (!worldObj.isRemote) { + float stored = 0; + float capacity = 0; + + for (int i = 0; i < disks.getSlots(); ++i) { + ItemStack disk = disks.getStackInSlot(i); + + if (disk != null) { + int diskCapacity = disk.getItem() == RefinedStorageItems.STORAGE_DISK ? EnumItemStorageType.getById(disk.getItemDamage()).getCapacity() : EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); + + if (diskCapacity == -1) { + return 0; + } + + stored += disk.getItem() == RefinedStorageItems.STORAGE_DISK ? ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) : FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()); + capacity += diskCapacity; + } + } + + if (capacity == 0) { + return 0; + } + + return (int) Math.floor((stored / capacity) * 7F); + } + return stored; } diff --git a/src/main/java/refinedstorage/tile/config/IType.java b/src/main/java/refinedstorage/tile/config/IType.java index 63db8ccdc..c70454210 100755 --- a/src/main/java/refinedstorage/tile/config/IType.java +++ b/src/main/java/refinedstorage/tile/config/IType.java @@ -24,6 +24,7 @@ public interface IType { if (value == 0 || value == 1) { ((IType) tile).setType(value); + // @TODO: This doesn't work serverside tile.getWorld().playerEntities.stream() .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos())) .forEach(p -> p.openContainer.detectAndSendChanges());