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; + } + }; }