aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kubatech/api/tea/TeaNetwork.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/kubatech/api/tea/TeaNetwork.java')
-rw-r--r--src/main/java/kubatech/api/tea/TeaNetwork.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/main/java/kubatech/api/tea/TeaNetwork.java b/src/main/java/kubatech/api/tea/TeaNetwork.java
new file mode 100644
index 0000000000..68c8275bfd
--- /dev/null
+++ b/src/main/java/kubatech/api/tea/TeaNetwork.java
@@ -0,0 +1,93 @@
+package kubatech.api.tea;
+
+import java.math.BigInteger;
+import java.util.HashSet;
+import java.util.UUID;
+
+import net.minecraft.nbt.NBTTagCompound;
+
+import kubatech.savedata.PlayerData;
+import kubatech.savedata.PlayerDataManager;
+import kubatech.tileentity.TeaStorageTile;
+
+public class TeaNetwork {
+
+ // TODO: Optimize later :P
+ public BigInteger teaAmount = BigInteger.ZERO;
+ public BigInteger teaLimit = BigInteger.valueOf(Long.MAX_VALUE);
+ PlayerData owner;
+ private HashSet<TeaStorageTile> teaStorageExtenders = new HashSet<>();
+
+ public static TeaNetwork getNetwork(UUID player) {
+ PlayerData p = PlayerDataManager.getPlayer(player);
+ if (p == null) return null;
+ TeaNetwork n = p.teaNetwork;
+ if (n == null) {
+ p.teaNetwork = new TeaNetwork();
+ p.teaNetwork.owner = p;
+ return p.teaNetwork;
+ }
+ n.owner = p;
+ return n;
+ }
+
+ public boolean canAfford(long price, boolean take) {
+ return canAfford(BigInteger.valueOf(price), take);
+ }
+
+ public boolean canAfford(BigInteger price, boolean take) {
+ if (teaAmount.compareTo(price) >= 0) {
+ if (take) {
+ teaAmount = teaAmount.subtract(price);
+ markDirty();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public boolean addTea(long toAdd) {
+ return addTea(BigInteger.valueOf(toAdd));
+ }
+
+ public boolean addTea(BigInteger toAdd) {
+ BigInteger newValue = teaAmount.add(toAdd);
+ if (newValue.compareTo(teaLimit) > 0) return false;
+ teaAmount = teaAmount.add(toAdd);
+ markDirty();
+ return true;
+ }
+
+ public boolean canAdd(long toAdd) {
+ return canAdd(BigInteger.valueOf(toAdd));
+ }
+
+ public boolean canAdd(BigInteger toAdd) {
+ return teaAmount.add(toAdd)
+ .compareTo(teaLimit) <= 0;
+ }
+
+ public void registerTeaStorageExtender(TeaStorageTile storageTile) {
+ if (teaStorageExtenders.add(storageTile)) teaLimit = teaLimit.add(storageTile.teaExtendAmount());
+ }
+
+ public void unregisterTeaStorageExtender(TeaStorageTile storageTile) {
+ if (teaStorageExtenders.remove(storageTile)) teaLimit = teaLimit.subtract(storageTile.teaExtendAmount());
+ }
+
+ public void markDirty() {
+ owner.markDirty();
+ }
+
+ public NBTTagCompound toNBT() {
+ NBTTagCompound nbt = new NBTTagCompound();
+ nbt.setByteArray("teaAmount", teaAmount.toByteArray());
+ return nbt;
+ }
+
+ public static TeaNetwork fromNBT(NBTTagCompound nbt) {
+ TeaNetwork teaNetwork = new TeaNetwork();
+ teaNetwork.teaAmount = new BigInteger(nbt.getByteArray("teaAmount"));
+ return teaNetwork;
+ }
+}