aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/AspectDefinitionCompatEnabled.java2
-rw-r--r--src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java27
-rw-r--r--src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/ePrimalAspectDefinition.java5
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDecay.java4
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDefinitionStackMap.java4
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java58
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalMutableDefinitionStackMap.java32
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalStackMap.java2
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalDefinitionStack.java16
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalInstanceStack.java146
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iElementalDefinition.java13
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iHasElementalDefinition.java6
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java14
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dAtomDefinition.java826
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dHadronDefinition.java105
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/iaea/iaeaNuclide.java103
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/cPrimitiveDefinition.java16
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java10
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eLeptonDefinition.java19
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eNeutrinoDefinition.java35
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eQuarkDefinition.java13
-rw-r--r--src/main/java/com/github/technus/tectech/loader/RecipeLoader.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java11
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java3
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo6
30 files changed, 1126 insertions, 366 deletions
diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/AspectDefinitionCompatEnabled.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/AspectDefinitionCompatEnabled.java
index da0bb07ff0..07603114ed 100644
--- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/AspectDefinitionCompatEnabled.java
+++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/AspectDefinitionCompatEnabled.java
@@ -30,7 +30,7 @@ public final class AspectDefinitionCompatEnabled extends AspectDefinitionCompat
ArrayList<Aspect> list=Aspect.getCompoundAspects();
Aspect[] array=list.toArray(new Aspect[0]);
- while (!list.isEmpty()) {
+ while (list.size()>0) {
for (Aspect aspect : array) {
if (list.contains(aspect)) {
Aspect[] content = aspect.getComponents();
diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java
index 3b4a08c703..034aa55642 100644
--- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java
+++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java
@@ -63,11 +63,11 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme
//public but u can just try{}catch(){} the constructor it still calls this method
private static boolean canTheyBeTogether(cElementalDefinitionStackMap stacks) {
- int amount = 0;
+ long amount = 0;
for (cElementalDefinitionStack aspects : stacks.values()) {
- if (aspects.definition instanceof dComplexAspectDefinition || aspects.definition instanceof ePrimalAspectDefinition)
- amount += aspects.amount;
- else return false;
+ if (!(aspects.definition instanceof dComplexAspectDefinition) && !(aspects.definition instanceof ePrimalAspectDefinition))
+ return false;
+ amount += aspects.amount;
}
return amount==2;
}
@@ -126,11 +126,16 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme
}
@Override
- public float getRawLifeTime() {
+ public float getRawTimeSpan(long currentEnergy) {
return -1;
}
@Override
+ public boolean isTimeSpanHalfLife() {
+ return false;
+ }
+
+ @Override
public int getCharge() {
return 0;
}
@@ -151,11 +156,21 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme
}
@Override
- public cElementalDecay[] getEnergeticDecayInstant() {
+ public cElementalDecay[] getEnergyInducedDecay(long energyLevel) {
return new cElementalDecay[]{new cElementalDecay(0.75F, aspectStacks), eBosonDefinition.deadEnd};
}
@Override
+ public float getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) {
+ return DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-currentEnergyLevel);
+ }
+
+ @Override
+ public boolean usesSpecialEnergeticDecayHandling() {
+ return false;
+ }
+
+ @Override
public cElementalDecay[] getNaturalDecayInstant() {
return noDecay;
}
diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/ePrimalAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/ePrimalAspectDefinition.java
index 1131c2a4ce..6205055967 100644
--- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/ePrimalAspectDefinition.java
+++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/ePrimalAspectDefinition.java
@@ -38,5 +38,10 @@ public final class ePrimalAspectDefinition extends cElementalPrimitive implement
public Object materializeIntoAspect() {
return aspectDefinitionCompat.getAspect(this);
}
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return false;
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDecay.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDecay.java
index ae38be4d3e..b6a8b4c2d0 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDecay.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDecay.java
@@ -48,11 +48,11 @@ public final class cElementalDecay {
this.probability = probability;
}
- public cElementalInstanceStackMap getResults(float lifeMult, long age, int energy, int amountDecaying) {
+ public cElementalInstanceStackMap getResults(float lifeMult, long age, long energy, long amountDecaying) {
cElementalInstanceStackMap decayResult = new cElementalInstanceStackMap();
if (outputStacks == null) return decayResult;//This is to prevent null pointer exceptions.
//Deny decay code is in instance!
- int qtty = 0;
+ long qtty = 0;
for (cElementalDefinitionStack stack : outputStacks.values()) qtty += stack.amount;
if (qtty <= 0) return decayResult;
//energy /= qtty;
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDefinitionStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDefinitionStackMap.java
index c46df6c826..823dbfecdf 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDefinitionStackMap.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalDefinitionStackMap.java
@@ -32,6 +32,10 @@ public final class cElementalDefinitionStackMap/*IMMUTABLE*/ extends cElementalS
map = new TreeMap<>(in);
}
+ cElementalDefinitionStackMap(cElementalMutableDefinitionStackMap unsafeMap){
+ map=unsafeMap.map;
+ }
+
//IMMUTABLE DON'T NEED IT
@Override
public final cElementalDefinitionStackMap clone() {
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java
index b0edc510b6..5891d4e252 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java
@@ -7,6 +7,7 @@ import com.github.technus.tectech.elementalMatter.core.interfaces.iHasElementalD
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
+import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
@@ -16,7 +17,7 @@ import static com.github.technus.tectech.elementalMatter.definitions.primitive.c
* Created by danie_000 on 22.01.2017.
*/
public final class cElementalInstanceStackMap implements Comparable<cElementalInstanceStackMap> {
- private TreeMap<iElementalDefinition, cElementalInstanceStack> map;
+ TreeMap<iElementalDefinition, cElementalInstanceStack> map;
//Constructors
public cElementalInstanceStackMap() {
@@ -125,7 +126,7 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn
if (testOnly)
return target.amount >= instance.amount;
else {
- final int diff = target.amount - instance.amount;
+ final long diff = target.amount - instance.amount;
if (diff > 0) {
target.amount = diff;
return true;
@@ -144,7 +145,7 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn
if (testOnly)
return target.amount >= stack.getAmount();
else {
- final int diff = target.amount - stack.getAmount();
+ final long diff = target.amount - stack.getAmount();
if (diff > 0) {
target.amount = diff;
return true;
@@ -190,15 +191,35 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn
}
public boolean removeAllAmounts(boolean testOnly, cElementalStackMap container) {
- return removeAllAmounts(testOnly, container.values());
+ boolean test=true;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalDefinitionStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalDefinitionStack> entry = entries.next();
+ test &= removeAmount(true, entry.getValue());
+ }
+ if (testOnly || !test) return test;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalDefinitionStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalDefinitionStack> entry = entries.next();
+ removeAmount(false, entry.getValue());
+ }
+ return true;
}
public boolean removeAllAmounts(boolean testOnly, cElementalInstanceStackMap container) {
- return removeAllAmounts(testOnly, container.values());
+ boolean test=true;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalInstanceStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalInstanceStack> entry = entries.next();
+ test &= removeAmount(true, entry.getValue());
+ }
+ if (testOnly || !test) return test;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalInstanceStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalInstanceStack> entry = entries.next();
+ test &= removeAmount(false, entry.getValue());
+ }
+ return true;
}
//Remove overflow
- public float removeOverflow(int stacksCount, int stackCapacity) {
+ public float removeOverflow(int stacksCount, long stackCapacity) {
float massRemoved = 0;
if (map.size() > stacksCount) {
@@ -320,32 +341,23 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn
}
//Tick Content
- public void tickContent(float lifeTimeMult, int postEnergize) {
- for (cElementalInstanceStack instance : this.values()) {
- cElementalInstanceStackMap newThings = instance.decay(lifeTimeMult, instance.age += 20, postEnergize);
- if (newThings == null) {
- instance.nextColor();
- } else {
- map.remove(instance.definition);
- for (cElementalInstanceStack newInstance : newThings.values())
- putUnify(newInstance);
- }
- }
-
+ public void tickContentByOneSecond(float lifeTimeMult, int postEnergize) {
+ tickContent(lifeTimeMult,postEnergize,1);
}
- public void tickContent(int postEnergize) {
+ public void tickContent(float lifeTimeMult, int postEnergize, int seconds){
for (cElementalInstanceStack instance : this.values()) {
- cElementalInstanceStackMap newThings = instance.decay(instance.age += 20, postEnergize);
- if (newThings == null) {
+ cElementalInstanceStackMap newInstances = instance.decay(lifeTimeMult, instance.age += seconds, postEnergize);
+ if (newInstances == null) {
instance.nextColor();
} else {
map.remove(instance.definition);
- for (cElementalInstanceStack newInstance : newThings.values())
+ for (cElementalInstanceStack newInstance : newInstances.values()) {
putUnify(newInstance);
+ newInstance.nextColor();
+ }
}
}
-
}
//NBT
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalMutableDefinitionStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalMutableDefinitionStackMap.java
index 2873dfefd2..846a1cf410 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalMutableDefinitionStackMap.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalMutableDefinitionStackMap.java
@@ -6,6 +6,7 @@ import com.github.technus.tectech.elementalMatter.core.interfaces.iElementalDefi
import com.github.technus.tectech.elementalMatter.core.interfaces.iHasElementalDefinition;
import net.minecraft.nbt.NBTTagCompound;
+import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
@@ -53,6 +54,9 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa
public cElementalDefinitionStackMap toImmutable() {
return new cElementalDefinitionStackMap(map);
}
+ public cElementalDefinitionStackMap toImmutable_unsafeMightLeaveExposedElementalTree() {
+ return new cElementalDefinitionStackMap(this);
+ }
@Override
@Deprecated
@@ -94,7 +98,7 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa
if (testOnly)
return target.amount >= instance.amount;
else {
- final int diff = target.amount - instance.amount;
+ final long diff = target.amount - instance.amount;
if (diff > 0) {
map.put(target.definition, new cElementalDefinitionStack(target.definition, diff));
return true;
@@ -113,7 +117,7 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa
if (testOnly)
return target.amount >= stack.getAmount();
else {
- final int diff = target.amount - stack.getAmount();
+ final long diff = target.amount - stack.getAmount();
if (diff > 0) {
map.put(target.definition, new cElementalDefinitionStack(target.definition, diff));
return true;
@@ -159,11 +163,31 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa
}
public boolean removeAllAmounts(boolean testOnly, cElementalStackMap container) {
- return removeAllAmounts(testOnly, container.values());
+ boolean test=true;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalDefinitionStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalDefinitionStack> entry = entries.next();
+ test &= removeAmount(true, entry.getValue());
+ }
+ if (testOnly || !test) return test;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalDefinitionStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalDefinitionStack> entry = entries.next();
+ removeAmount(false, entry.getValue());
+ }
+ return true;
}
public boolean removeAllAmounts(boolean testOnly, cElementalInstanceStackMap container) {
- return removeAllAmounts(testOnly, container.values());
+ boolean test=true;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalInstanceStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalInstanceStack> entry = entries.next();
+ test &= removeAmount(true, entry.getValue());
+ }
+ if (testOnly || !test) return test;
+ for (Iterator<Map.Entry<iElementalDefinition, cElementalInstanceStack>> entries = container.map.entrySet().iterator(); entries.hasNext(); ) {
+ Map.Entry<iElementalDefinition, cElementalInstanceStack> entry = entries.next();
+ test &= removeAmount(false, entry.getValue());
+ }
+ return true;
}
//Put replace
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalStackMap.java
index 408e62621d..55446e9c93 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalStackMap.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalStackMap.java
@@ -118,7 +118,7 @@ abstract class cElementalStackMap implements Comparable<cElementalStackMap> {
}
@Override
- public int hashCode() {//Hash only definitions to compare contents not amounts or data
+ public final int hashCode() {//Hash only definitions to compare contents not amounts or data
int hash = -(map.size() << 4);
for (cElementalDefinitionStack s : map.values()) {
hash += s.definition.hashCode();
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalDefinitionStack.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalDefinitionStack.java
index 8a9d855e7e..1e3f79573e 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalDefinitionStack.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalDefinitionStack.java
@@ -12,9 +12,9 @@ import static com.github.technus.tectech.elementalMatter.definitions.primitive.c
*/
public final class cElementalDefinitionStack implements iHasElementalDefinition {
public final iElementalDefinition definition;
- public final int amount;
+ public final long amount;
- public cElementalDefinitionStack(iElementalDefinition def, int amount) {
+ public cElementalDefinitionStack(iElementalDefinition def, long amount) {
this.definition = def == null ? null__ : def;
this.amount = amount;
}
@@ -30,11 +30,11 @@ public final class cElementalDefinitionStack implements iHasElementalDefinition
}
@Override
- public int getAmount() {
+ public long getAmount() {
return amount;
}
- public int getCharge() {
+ public long getCharge() {
return definition.getCharge() * amount;
}
@@ -45,24 +45,24 @@ public final class cElementalDefinitionStack implements iHasElementalDefinition
public NBTTagCompound toNBT() {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setTag("d", definition.toNBT());
- nbt.setInteger("q", amount);
+ nbt.setLong("q", amount);
return nbt;
}
public static cElementalDefinitionStack fromNBT(NBTTagCompound nbt) {
return new cElementalDefinitionStack(
cElementalDefinition.fromNBT(nbt.getCompoundTag("d")),
- nbt.getInteger("q"));
+ nbt.getLong("q"));
}
- public cElementalDefinitionStack addAmountIntoNewInstance(int amount) {
+ public cElementalDefinitionStack addAmountIntoNewInstance(long amount) {
if(amount==0) return this;
return new cElementalDefinitionStack(definition, amount + this.amount);
}
public cElementalDefinitionStack addAmountIntoNewInstance(cElementalDefinitionStack... other) {
if (other == null || other.length == 0) return this;
- int i = 0;
+ long i = 0;
for (cElementalDefinitionStack stack : other)
i += stack.amount;
return addAmountIntoNewInstance(i);
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalInstanceStack.java
index 9864376c25..a28fed340e 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalInstanceStack.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/containers/cElementalInstanceStack.java
@@ -16,11 +16,11 @@ import static com.github.technus.tectech.elementalMatter.definitions.primitive.c
public final class cElementalInstanceStack implements iHasElementalDefinition {
public final iElementalDefinition definition;
//energy - if positive then particle should try to decay
- public int energy;
+ private long energy;
//byte color; 0=Red 1=Green 2=Blue 0=Cyan 1=Magenta 2=Yellow, else ignored (-1 - uncolorable)
private byte color;
public long age;
- public int amount;
+ public long amount;
private float lifeTime;
private float lifeTimeMult;
@@ -28,15 +28,15 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
this(stackSafe.definition, stackSafe.amount, 1F, 0, 0);
}
- public cElementalInstanceStack(cElementalDefinitionStack stackSafe, float lifeTimeMult, long age, int energy) {
+ public cElementalInstanceStack(cElementalDefinitionStack stackSafe, float lifeTimeMult, long age, long energy) {
this(stackSafe.definition, stackSafe.amount, lifeTimeMult, age, energy);
}
- public cElementalInstanceStack(iElementalDefinition defSafe, int amount) {
+ public cElementalInstanceStack(iElementalDefinition defSafe, long amount) {
this(defSafe, amount, 1F, 0, 0);
}
- public cElementalInstanceStack(iElementalDefinition defSafe, int amount, float lifeTimeMult, long age, int energy) {
+ public cElementalInstanceStack(iElementalDefinition defSafe, long amount, float lifeTimeMult, long age, long energy) {
this.definition = defSafe == null ? null__ : defSafe;
byte color = definition.getColor();
if (color < 0 || color > 2) {//transforms colorable??? into proper color
@@ -45,9 +45,9 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
this.color = (byte) (TecTech.Rnd.nextInt(3));
}
this.lifeTimeMult = lifeTimeMult;
- this.lifeTime = definition.getRawLifeTime() * this.lifeTimeMult;
- this.age = age;
this.energy = energy;
+ this.lifeTime = definition.getRawTimeSpan(energy) * this.lifeTimeMult;
+ this.age = age;
this.amount = amount;
}
@@ -68,11 +68,11 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
}
@Override
- public int getAmount() {
+ public long getAmount() {
return amount;
}
- public int getCharge() {
+ public long getCharge() {
return definition.getCharge() * amount;
}
@@ -80,6 +80,25 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
return definition.getMass() * amount;
}
+ public long getEnergy() {
+ return energy;
+ }
+
+ public void setEnergy(long newEnergyLevel){
+ energy=newEnergyLevel;
+ setLifeTimeMultipleOfBaseValue(getLifeTimeMult());
+ }
+
+ @Deprecated //can be done from definition
+ public float getEnergySettingCost(long currentEnergyLevel, long newEnergyLevel){
+ return definition.getEnergyDiffBetweenStates(currentEnergyLevel,newEnergyLevel);
+ }
+
+ @Deprecated //can be done from definition
+ public float getEnergySettingCost(long newEnergyLevel){
+ return definition.getEnergyDiffBetweenStates(energy,newEnergyLevel);
+ }
+
public cElementalDefinitionStack getDefinitionStack() {
return new cElementalDefinitionStack(definition, amount);
}
@@ -107,9 +126,12 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
return lifeTime;
}
- public float multLifeTime(float mult) {
+ public float setLifeTimeMultipleOfBaseValue(float mult) {
+ if(mult<=0) //since infinity*0=nan
+ throw new IllegalArgumentException("mult must be >0");
this.lifeTimeMult = mult;
- this.lifeTime = definition.getRawLifeTime() * mult;
+ if (definition.getRawTimeSpan(energy) <= 0) return this.lifeTime;
+ this.lifeTime = definition.getRawTimeSpan(energy) * this.lifeTimeMult;
return this.lifeTime;
}
@@ -121,41 +143,80 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
return decay(1F, age, 0);//try to decay without changes
}
- public cElementalInstanceStackMap decay(long apparentAge, int postEnergize) {
+ public cElementalInstanceStackMap decay(long apparentAge, long postEnergize) {
return decay(1F,apparentAge,postEnergize);
}
- public cElementalInstanceStackMap decay(Float lifeTimeMult, long apparentAge, int postEnergize) {
- if (this.energy > 0) {
- this.energy--;
- return decayCompute(definition.getEnergeticDecayInstant(), lifeTimeMult, 0, postEnergize + this.energy);
- } else if (definition.getRawLifeTime() < 0) {
+ public cElementalInstanceStackMap decay(Float lifeTimeMult, long apparentAge, long postEnergize) {
+ long newEnergyLevel=postEnergize+this.energy;
+ if(newEnergyLevel>0) newEnergyLevel-=1;
+ else if(newEnergyLevel<0) newEnergyLevel+=1;
+ if (this.energy > 0 && !definition.usesSpecialEnergeticDecayHandling()) {
+ setLifeTimeMultipleOfBaseValue(getLifeTimeMult());
+ return decayCompute(definition.getEnergyInducedDecay(this.energy), lifeTimeMult, -1, newEnergyLevel);
+ }else if (definition.getRawTimeSpan(energy) < 0) {
return null;//return null, decay cannot be achieved
- } else if (1F > this.lifeTime) {
- return decayCompute(definition.getNaturalDecayInstant(), lifeTimeMult, 0, postEnergize + this.energy);
- } else if (((float) apparentAge) > this.lifeTime) {
- return decayCompute(definition.getDecayArray(), lifeTimeMult, 0, postEnergize + this.energy);
+ } else if(definition.isTimeSpanHalfLife()){
+ return exponentialDecayCompute(energy>0?definition.getEnergyInducedDecay(this.energy):definition.getDecayArray(), lifeTimeMult, -1, newEnergyLevel);
+ } else{
+ if (1F > this.lifeTime) {
+ return decayCompute(energy>0?definition.getEnergyInducedDecay(this.energy):definition.getNaturalDecayInstant(), lifeTimeMult, 0, newEnergyLevel);
+ } else if (((float) apparentAge) > this.lifeTime) {
+ return decayCompute(energy>0?definition.getEnergyInducedDecay(this.energy):definition.getDecayArray(), lifeTimeMult, 0, newEnergyLevel);
+ }
}
return null;//return null since decay cannot be achieved
}
//Use to get direct decay output providing correct decay array
- public cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, int energy) {
+ private cElementalInstanceStackMap exponentialDecayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, long energy) {
+ double decayInverseRatio=Math.pow(2d,1d/* 1 second *//(double)lifeTime);
+ double newAmount=(double)amount/decayInverseRatio;
+ long amountRemaining=((long)Math.floor(newAmount))+(TecTech.Rnd.nextDouble()<=newAmount-Math.floor(newAmount)?1:0);
+ if(amountRemaining==amount) return null;//nothing decayed
+ else if(amountRemaining<=0) return decayCompute(decays,lifeTimeMult,newProductsAge,energy);
+ //split to non decaying and decaying part
+ long amount=this.amount;
+ this.amount-=amountRemaining;
+ cElementalInstanceStackMap products=decayCompute(decays,lifeTimeMult,newProductsAge,energy);
+ this.amount=amountRemaining;
+ products.putUnify(this.clone());
+ this.amount=amount;