aboutsummaryrefslogtreecommitdiff
path: root/src/Java/cofh/energy/EnergyStorage.java
blob: e48fc7b8aca28f6abea897788a09f4315e0242c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package cofh.energy;

import net.minecraft.nbt.NBTTagCompound;

public class EnergyStorage
  implements IEnergyStorage
{
  protected int energy;
  protected int capacity;
  protected int maxReceive;
  protected int maxExtract;
  
  public EnergyStorage(int capacity)
  {
    this(capacity, capacity, capacity);
  }
  
  public EnergyStorage(int capacity, int maxTransfer)
  {
    this(capacity, maxTransfer, maxTransfer);
  }
  
  public EnergyStorage(int capacity, int maxReceive, int maxExtract)
  {
    this.capacity = capacity;
    this.maxReceive = maxReceive;
    this.maxExtract = maxExtract;
  }
  
  public EnergyStorage readFromNBT(NBTTagCompound nbt)
  {
    this.energy = nbt.getInteger("Energy");
    if (this.energy > this.capacity) {
      this.energy = this.capacity;
    }
    return this;
  }
  
  public NBTTagCompound writeToNBT(NBTTagCompound nbt)
  {
    if (this.energy < 0) {
      this.energy = 0;
    }
    nbt.setInteger("Energy", this.energy);
    return nbt;
  }
  
  public void setCapacity(int capacity)
  {
    this.capacity = capacity;
    if (this.energy > capacity) {
      this.energy = capacity;
    }
  }
  
  public void setMaxTransfer(int maxTransfer)
  {
    setMaxReceive(maxTransfer);
    setMaxExtract(maxTransfer);
  }
  
  public void setMaxReceive(int maxReceive)
  {
    this.maxReceive = maxReceive;
  }
  
  public void setMaxExtract(int maxExtract)
  {
    this.maxExtract = maxExtract;
  }
  
  public int getMaxReceive()
  {
    return this.maxReceive;
  }
  
  public int getMaxExtract()
  {
    return this.maxExtract;
  }
  
  public void setEnergyStored(int energy)
  {
    this.energy = energy;
    if (this.energy > this.capacity) {
      this.energy = this.capacity;
    } else if (this.energy < 0) {
      this.energy = 0;
    }
  }
  
  public void modifyEnergyStored(int energy)
  {
    this.energy += energy;
    if (this.energy > this.capacity) {
      this.energy = this.capacity;
    } else if (this.energy < 0) {
      this.energy = 0;
    }
  }
  
  public int receiveEnergy(int maxReceive, boolean simulate)
  {
    int energyReceived = Math.min(this.capacity - this.energy, Math.min(this.maxReceive, maxReceive));
    if (!simulate) {
      this.energy += energyReceived;
    }
    return energyReceived;
  }
  
  public int extractEnergy(int maxExtract, boolean simulate)
  {
    int energyExtracted = Math.min(this.energy, Math.min(this.maxExtract, maxExtract));
    if (!simulate) {
      this.energy -= energyExtracted;
    }
    return energyExtracted;
  }
  
  public int getEnergyStored()
  {
    return this.energy;
  }
  
  public int getMaxEnergyStored()
  {
    return this.capacity;
  }
}