diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e4d72053..f9a30de9f 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@
- Increased the speed of autocrafting (raoulvdberge)
- Fixed External Storage sending storage updates when it is disabled (raoulvdberge)
- Fixed slight performance issue with loading Crafters from disk (raoulvdberge)
+- Fixed storage GUIs overflowing on large numbers (raoulvdberge)
- Added a completion percentage to the Crafting Monitor (raoulvdberge)
- Updated Russian translation (kellixon)
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IQuantityFormatter.java b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IQuantityFormatter.java
index ca91e4804..efbe63457 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IQuantityFormatter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IQuantityFormatter.java
@@ -16,6 +16,18 @@ public interface IQuantityFormatter {
*/
String formatWithUnits(int qty);
+ /**
+ * Formats a quantity as they are formatted in the Grid.
+ * Formatted as following: "####0.#".
+ *
+ * If the quantity is equal to or bigger than 1000 it will be displayed as the quantity divided by 1000 (without any decimals) and a "K" appended.
+ * If the quantity is equal to or bigger than 1000000 it will be displayed as the quantity divided by 1000000 (without any decimals) and a "M" appended.
+ *
+ * @param qty the quantity
+ * @return the formatted quantity
+ */
+ String formatWithUnits(long qty);
+
/**
* Formats a quantity as they are formatted on the disk tooltips.
* Formatted as following: "#,###".
@@ -25,6 +37,15 @@ public interface IQuantityFormatter {
*/
String format(int qty);
+ /**
+ * Formats a quantity as they are formatted on the disk tooltips.
+ * Formatted as following: "#,###".
+ *
+ * @param qty the quantity
+ * @return the formatted quantity
+ */
+ String format(long qty);
+
/**
* Divides quantity by 1000 and appends "B".
*
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiStorage.java
index 8383d5bca..6e1a45b5f 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiStorage.java
@@ -18,7 +18,7 @@ public interface IGuiStorage {
TileDataParameter getAccessTypeParameter();
- int getStored();
+ long getStored();
- int getCapacity();
+ long getCapacity();
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java
index cad19d00a..dfeba81c2 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java
@@ -293,12 +293,12 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
}
@Override
- public int getStored() {
+ public long getStored() {
return TileExternalStorage.STORED.getValue();
}
@Override
- public int getCapacity() {
+ public long getCapacity() {
return TileExternalStorage.CAPACITY.getValue();
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java
index 69904819b..6ecbd8346 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java
@@ -304,12 +304,12 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS
}
@Override
- public int getStored() {
+ public long getStored() {
return TileDiskDrive.STORED.getValue();
}
@Override
- public int getCapacity() {
+ public long getCapacity() {
return TileDiskDrive.CAPACITY.getValue();
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java
index 912bc2d88..1af09a446 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java
@@ -252,12 +252,12 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage,
}
@Override
- public int getStored() {
+ public long getStored() {
return TileFluidStorage.STORED.getValue();
}
@Override
- public int getCapacity() {
+ public long getCapacity() {
return getType().getCapacity();
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java
index ecf38fc21..edca438c1 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java
@@ -251,12 +251,12 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto
}
@Override
- public int getStored() {
+ public long getStored() {
return TileStorage.STORED.getValue();
}
@Override
- public int getCapacity() {
+ public long getCapacity() {
return getType().getCapacity();
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/QuantityFormatter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/QuantityFormatter.java
index 4e8f838f5..fc5407439 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/QuantityFormatter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/QuantityFormatter.java
@@ -20,6 +20,11 @@ public class QuantityFormatter implements IQuantityFormatter {
@Override
public String formatWithUnits(int qty) {
+ return formatWithUnits((long) qty);
+ }
+
+ @Override
+ public String formatWithUnits(long qty) {
if (qty >= 1_000_000) {
float qtyShort = (float) qty / 1_000_000F;
@@ -46,6 +51,11 @@ public class QuantityFormatter implements IQuantityFormatter {
return formatter.format(qty);
}
+ @Override
+ public String format(long qty) {
+ return formatter.format(qty);
+ }
+
@Override
public String formatInBucketForm(int qty) {
return bucketFormatter.format((float) qty / (float) Fluid.BUCKET_VOLUME) + " B";
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java
index b520160a6..20162a71d 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java
@@ -5,9 +5,9 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive;
import com.raoulvdberge.refinedstorage.render.constants.ConstantsDisk;
import com.raoulvdberge.refinedstorage.tile.config.*;
+import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -23,8 +23,8 @@ public class TileDiskDrive extends TileNode {
public static final TileDataParameter MODE = IFilterable.createParameter();
public static final TileDataParameter TYPE = IType.createParameter();
public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter();
- public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> {
- int stored = 0;
+ public static final TileDataParameter STORED = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> {
+ long stored = 0;
for (IStorageDisk storage : t.getNode().getItemDisks()) {
if (storage != null) {
@@ -40,13 +40,13 @@ public class TileDiskDrive extends TileNode {
return stored;
});
- public static final TileDataParameter CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> {
- int capacity = 0;
+ public static final TileDataParameter CAPACITY = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> {
+ long capacity = 0;
for (IStorageDisk storage : t.getNode().getItemDisks()) {
if (storage != null) {
if (storage.getCapacity() == -1) {
- return -1;
+ return -1L;
}
capacity += storage.getCapacity();
@@ -56,7 +56,7 @@ public class TileDiskDrive extends TileNode {
for (IStorageDisk storage : t.getNode().getFluidDisks()) {
if (storage != null) {
if (storage.getCapacity() == -1) {
- return -1;
+ return -1L;
}
capacity += storage.getCapacity();
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java
index 0efdeaf1f..695280fba 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java
@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeExternalStorage;
import com.raoulvdberge.refinedstorage.tile.config.*;
+import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.item.ItemStack;
-import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
@@ -19,8 +19,8 @@ public class TileExternalStorage extends TileNode {
public static final TileDataParameter MODE = IFilterable.createParameter();
public static final TileDataParameter TYPE = IType.createParameter();
public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter();
- public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> {
- int stored = 0;
+ public static final TileDataParameter STORED = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> {
+ long stored = 0;
for (IStorageExternal storage : t.getNode().getItemStorages()) {
stored += storage.getStored();
@@ -32,8 +32,8 @@ public class TileExternalStorage extends TileNode {
return stored;
});
- public static final TileDataParameter CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> {
- int capacity = 0;
+ public static final TileDataParameter CAPACITY = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> {
+ long capacity = 0;
for (IStorageExternal storage : t.getNode().getItemStorages()) {
capacity += storage.getCapacity();
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java
index ef3ee9f41..27e592eae 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java
@@ -6,8 +6,8 @@ import com.raoulvdberge.refinedstorage.tile.config.IAccessType;
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import com.raoulvdberge.refinedstorage.tile.config.IPrioritizable;
+import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
-import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -18,7 +18,7 @@ public class TileFluidStorage extends TileNode {
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter();
- public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getStorage().getStored());
+ public static final TileDataParameter STORED = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> (long) t.getNode().getStorage().getStored());
public TileFluidStorage() {
dataManager.addWatchedParameter(PRIORITY);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java
index 7d6de7f10..b6dae9269 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java
@@ -6,8 +6,8 @@ import com.raoulvdberge.refinedstorage.tile.config.IAccessType;
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import com.raoulvdberge.refinedstorage.tile.config.IPrioritizable;
+import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
-import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -18,7 +18,7 @@ public class TileStorage extends TileNode {
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter();
- public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getStorage().getStored());
+ public static final TileDataParameter STORED = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> (long) t.getNode().getStorage().getStored());
public TileStorage() {
dataManager.addWatchedParameter(PRIORITY);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java
index 91677290f..971671cd8 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java
@@ -109,4 +109,26 @@ public final class RSSerializers {
return value;
}
};
+
+ public static final DataSerializer LONG_SERIALIZER = new DataSerializer() {
+ @Override
+ public void write(PacketBuffer buf, Long value) {
+ buf.writeLong(value);
+ }
+
+ @Override
+ public Long read(PacketBuffer buf) throws IOException {
+ return buf.readLong();
+ }
+
+ @Override
+ public DataParameter createKey(int id) {
+ return null;
+ }
+
+ @Override
+ public Long copyValue(Long value) {
+ return value;
+ }
+ };
}