aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTechnus <daniel112092@gmail.com>2017-12-12 22:07:49 +0100
committerTechnus <daniel112092@gmail.com>2017-12-12 22:07:49 +0100
commit59f659ad868e21f78dc26c18b093d8b58c0d5237 (patch)
treef58a8b47a929fe952a371e9d3ddf6d0e06993325
parentbce02aacb936f4c87085f1cc58551477f1c81564 (diff)
parent92f600c303efb7ca5c9bfb5272ca959a4dabbbe7 (diff)
downloadGT5-Unofficial-59f659ad868e21f78dc26c18b093d8b58c0d5237.tar.gz
GT5-Unofficial-59f659ad868e21f78dc26c18b093d8b58c0d5237.tar.bz2
GT5-Unofficial-59f659ad868e21f78dc26c18b093d8b58c0d5237.zip
Merge branch 'master' into nh-recipes
# Conflicts: # build.properties
-rw-r--r--README.md5
-rw-r--r--build.properties2
-rw-r--r--libs/GTNewHorizonsCoreMod-1.7.10-1.5.10.jar (renamed from libs/GTNewHorizonsCoreMod-1.7.10-1.5.8 (1).jar)bin3287712 -> 3287685 bytes
-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
-rw-r--r--src/main/resources/assets/tectech/energyLevels.csv2
-rw-r--r--src/main/resources/assets/tectech/nuclidesTable.csv2
35 files changed, 1132 insertions, 371 deletions
diff --git a/README.md b/README.md
index 70513c22ef..f13e1a6d91 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,12 @@
-# TecTech [![Build Status](https://jenkins.datamats.com/buildStatus/icon?job=TecTech)](https://jenkins.datamats.com/job/TecTech)
+# TecTech [![Build Status](http://jenkins.usrv.de:8081/buildStatus/icon?job=Tec%20Tech)](http://jenkins.usrv.de:8081/job/Tec%20Tech)
GT additions EXTREME
# Jenkins Builds
+http://jenkins.usrv.de:8081/job/Tec%20Tech/
https://jenkins.datamats.com/job/TecTech/
# Runtime Dependencies?
-https://github.com/Technus/TecTech/blob/master/src/main/java/com/github/technus/tectech/TecTech.java#L26
+https://github.com/Technus/TecTech/blob/master/src/main/java/com/github/technus/tectech/TecTech.java#L30
- Required After
diff --git a/build.properties b/build.properties
index 2dafd14fee..f530931fa2 100644
--- a/build.properties
+++ b/build.properties
@@ -1,6 +1,6 @@
minecraft.version=1.7.10
forge.version=10.13.4.1614-1.7.10
-tectech.version=3.5.3
+tectech.version=3.6.0
ic2.version=2.2.790-experimental
codechickenlib.version=1.1.3.140
diff --git a/libs/GTNewHorizonsCoreMod-1.7.10-1.5.8 (1).jar b/libs/GTNewHorizonsCoreMod-1.7.10-1.5.10.jar
index 09bcdc7dae..45d7dc3183 100644
--- a/libs/GTNewHorizonsCoreMod-1.7.10-1.5.8 (1).jar
+++ b/libs/GTNewHorizonsCoreMod-1.7.10-1.5.10.jar
Binary files differ
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;
+ return products;
+ }
+
+ //Use to get direct decay output providing correct decay array
+ public cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, long energy) {
if (decays == null) return null;//Can not decay so it wont
else if (decays.length == 0)
return new cElementalInstanceStackMap();//provide non null 0 length array for annihilation
else if (decays.length == 1) {//only one type of decay :D, doesn't need dead end
- return decays[0].getResults(lifeTimeMult, newProductsAge, energy, this.amount);
+ cElementalInstanceStackMap products=decays[0].getResults(lifeTimeMult, newProductsAge, energy, this.amount);
+ if(newProductsAge<0){
+ for(cElementalInstanceStack s:products.values()){
+ if(s.definition.equals(definition)){
+ s.age=this.age;
+ s.energy=this.energy;
+ }
+ }
+ }else{
+ for(cElementalInstanceStack s:products.values()){
+ if(s.definition.equals(definition)){
+ s.energy=this.energy;
+ }
+ }
+ }
+ return products;
} else {
cElementalInstanceStackMap output = new cElementalInstanceStackMap();
final int differentDecays = decays.length;
- int[] qttyOfDecay = new int[differentDecays];
- int amountRemaining = this.amount, amount = this.amount;
+ long[] qttyOfDecay = new long[differentDecays];
+ long amountRemaining = this.amount, amount = this.amount;
float remainingProbability = 1F;
for (int i = 0; i < differentDecays; i++) {
if (decays[i].probability > 1F) {
- int thisDecayAmount = (int) (Math.floor(remainingProbability * (float) amount));
+ long thisDecayAmount = (long) (Math.floor(remainingProbability * (double) amount));
if (thisDecayAmount == 0) {
//remainingProbability=something;
break;
@@ -170,7 +231,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
//remainingProbability=0;
break;
}
- int thisDecayAmount = (int) (Math.floor(decays[i].probability * (float) amount));
+ long thisDecayAmount = (long) (Math.floor(decays[i].probability * (double) amount));
if (thisDecayAmount <= amountRemaining && thisDecayAmount > 0) {//some was made
remainingProbability -= (decays[i].probability);
amountRemaining -= thisDecayAmount;
@@ -184,9 +245,9 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
}
for (int i = 0; i < amountRemaining; i++) {
- double rand = (double) (TecTech.Rnd.nextFloat());
+ double rand = TecTech.Rnd.nextDouble();
for (int j = 0; j < differentDecays; j++) {//looking for the thing it decayed into
- rand -= (double) (decays[j].probability);
+ rand -= decays[j].probability;
if (rand <= 0D) {
qttyOfDecay[j]++;
break;
@@ -198,6 +259,21 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
if (qttyOfDecay[i] > 0)
output.putUnifyAll(decays[i].getResults(lifeTimeMult, newProductsAge, energy, qttyOfDecay[i]));
}
+
+ if(newProductsAge<0){
+ for(cElementalInstanceStack s:output.values()){
+ if(s.definition.equals(definition)){
+ s.age=this.age;
+ s.energy=this.energy;
+ }
+ }
+ }else{
+ for(cElementalInstanceStack s:output.values()){
+ if(s.definition.equals(definition)){
+ s.energy=this.energy;
+ }
+ }
+ }
return output;
}
}
@@ -205,7 +281,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
public cElementalInstanceStack unifyIntoThis(cElementalInstanceStack... instances) {
if (instances == null) return this;
//returns with the definition from the first object passed
- int energy = this.energy * this.amount;
+ long energy = this.energy * this.amount;
float lifeTimeMul = this.lifeTimeMult;
for (cElementalInstanceStack instance : instances) {
@@ -220,15 +296,15 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
if (amount != 0) energy /= Math.abs(amount);
this.energy = energy;
- this.multLifeTime(lifeTimeMul);
+ this.setLifeTimeMultipleOfBaseValue(lifeTimeMul);
return this;
}
public NBTTagCompound toNBT() {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setTag("d", definition.toNBT());
- nbt.setInteger("q", amount);
- nbt.setInteger("e", energy);
+ nbt.setLong("q", amount);
+ nbt.setLong("e", energy);
nbt.setByte("c", color);
nbt.setLong("a", age);
nbt.setFloat("m", lifeTimeMult);
@@ -239,10 +315,10 @@ public final class cElementalInstanceStack implements iHasElementalDefinition {
NBTTagCompound definition = nbt.getCompoundTag("d");
cElementalInstanceStack instance = new cElementalInstanceStack(
cElementalDefinition.fromNBT(definition),
- nbt.getInteger("q"),
+ nbt.getLong("q"),
nbt.getFloat("m"),
nbt.getLong("a"),
- nbt.getInteger("e"));
+ nbt.getLong("e"));
instance.setColor(nbt.getByte("c"));
return instance;
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iElementalDefinition.java
index e40e2c0a46..33432bad5d 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iElementalDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iElementalDefinition.java
@@ -13,6 +13,9 @@ import net.minecraft.nbt.NBTTagCompound;
*/
public interface iElementalDefinition extends Comparable<iElementalDefinition>,Cloneable {//IMMUTABLE
float STABLE_RAW_LIFE_TIME =1.5e36f;
+ float NO_DECAY_RAW_LIFE_TIME=-1;
+ long DEFAULT_ENERGY_LEVEL=0;
+ float DEFAULT_ENERGY_REQUIREMENT=25000f;
//Nomenclature
String getName();
@@ -30,7 +33,11 @@ public interface iElementalDefinition extends Comparable<iElementalDefinition>,C
cElementalDecay[] getNaturalDecayInstant();//natural decay if lifespan <1tick
- cElementalDecay[] getEnergeticDecayInstant();//energetic decay if lifespan <1tick
+ cElementalDecay[] getEnergyInducedDecay(long energyLevel);//energetic decay
+
+ boolean usesSpecialEnergeticDecayHandling();
+
+ float getEnergyDiffBetweenStates(long currentEnergy, long newEnergyLevel);//positive or negative
float getMass();//mass... MeV/c^2
@@ -39,7 +46,9 @@ public interface iElementalDefinition extends Comparable<iElementalDefinition>,C
//dynamically changing stuff
byte getColor();//-1 nope cannot 0 it can but undefined
- float getRawLifeTime();//defined in static fields or generated
+ float getRawTimeSpan(long currentEnergy);//defined in static fields or generated
+
+ boolean isTimeSpanHalfLife();
cElementalDefinitionStackMap getSubParticles();//contents... null if none
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iHasElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iHasElementalDefinition.java
index 815af67974..92aac40bf8 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iHasElementalDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/interfaces/iHasElementalDefinition.java
@@ -6,11 +6,11 @@ package com.github.technus.tectech.elementalMatter.core.interfaces;
public interface iHasElementalDefinition extends Comparable<iHasElementalDefinition>,Cloneable {
iElementalDefinition getDefinition();
- int getAmount();
+ long getAmount();
- float getMass();
+ long getCharge();
- int getCharge();
+ float getMass();
iHasElementalDefinition clone();
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java
index 5f250888b2..2a2a3459c2 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java
@@ -108,18 +108,28 @@ public abstract class cElementalPrimitive extends cElementalDefinition {
}
@Override
- public cElementalDecay[] getEnergeticDecayInstant() {
+ public cElementalDecay[] getEnergyInducedDecay(long energyLevel) {
if (energeticDecayInstant < 0) return elementalDecays;
return new cElementalDecay[]{elementalDecays[energeticDecayInstant]};
}
@Override
+ public float getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) {
+ return DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-currentEnergyLevel);
+ }
+
+ @Override
+ public boolean usesSpecialEnergeticDecayHandling() {
+ return false;
+ }
+
+ @Override
public cElementalDecay[] getDecayArray() {
return elementalDecays;
}
@Override
- public float getRawLifeTime() {
+ public float getRawTimeSpan(long currentEnergy) {
return rawLifeTime;
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dAtomDefinition.java
index 3fc042f0d9..92ba693889 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dAtomDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dAtomDefinition.java
@@ -10,7 +10,10 @@ import com.github.technus.tectech.elementalMatter.core.containers.cElementalDefi
import com.github.technus.tectech.elementalMatter.core.interfaces.iElementalDefinition;
import com.github.technus.tectech.elementalMatter.core.tElementalException;
import com.github.technus.tectech.elementalMatter.core.templates.cElementalDefinition;
-import com.github.technus.tectech.elementalMatter.core.transformations.*;
+import com.github.technus.tectech.elementalMatter.core.transformations.aFluidDequantizationInfo;
+import com.github.technus.tectech.elementalMatter.core.transformations.aItemDequantizationInfo;
+import com.github.technus.tectech.elementalMatter.core.transformations.aOredictDequantizationInfo;
+import com.github.technus.tectech.elementalMatter.core.transformations.bTransformationInfo;
import com.github.technus.tectech.elementalMatter.definitions.complex.iaea.iaeaNuclide;
import com.github.technus.tectech.elementalMatter.definitions.primitive.eBosonDefinition;
import com.github.technus.tectech.elementalMatter.definitions.primitive.eLeptonDefinition;
@@ -19,7 +22,6 @@ import cpw.mods.fml.common.Loader;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraftforge.oredict.OreDictionary;
import java.util.*;
@@ -33,6 +35,9 @@ import static gregtech.api.enums.OrePrefixes.dust;
* Created by danie_000 on 18.11.2016.
*/
public final class dAtomDefinition extends cElementalDefinition {
+ public static final long ATOM_COMPLEXITY_LIMIT=65536L;
+ private static final byte BYTE_OFFSET=32;
+
private final int hash;
public static final bTransformationInfo transformation=new bTransformationInfo(16,0,64);
public static float refMass, refUnstableMass;
@@ -43,8 +48,7 @@ public final class dAtomDefinition extends cElementalDefinition {
private static final Map<Integer, dAtomDefinition> stableAtoms = new HashMap<>();
private static Map<Integer, TreeMap<Float, Integer>> mostStableUnstableIsotopes = new HashMap<>();
private static final Map<Integer, dAtomDefinition> unstableAtoms = new HashMap<>();
- private static cElementalDefinitionStack alpha;
-
+ private static cElementalDefinitionStack alpha,deuterium,tritium,helium_3,beryllium_8,carbon_14,neon_24,silicon_34;
private static final HashMap<dAtomDefinition,Float> lifetimeOverrides = new HashMap<>();
public static final ArrayList<Runnable> overrides = new ArrayList<>();
@@ -60,16 +64,18 @@ public final class dAtomDefinition extends cElementalDefinition {
public final int charge;
//int -electric charge in 1/3rds of electron charge for optimization
public final int chargeLeptons;
- public final float rawLifeTime;
+ private float rawLifeTime;
//generation max present inside - minus if contains any anti quark
public final byte type;
public final byte decayMode;//t neutron to proton+,0,f proton to neutron
- public final boolean stable;
+ //public final boolean stable;
public final int neutralCount;
public final int element;
+ private final boolean iaeaDefinitionExistsAndHasEnergyLevels;
+
private final cElementalDefinitionStackMap elementalStacks;
//stable is rawLifeTime>=10^9
@@ -108,7 +114,7 @@ public final class dAtomDefinition extends cElementalDefinition {
boolean containsAnti = false;
for (cElementalDefinitionStack stack : elementalStacks.values()) {
iElementalDefinition def = stack.definition;
- int amount = stack.amount;
+ int amount = (int)stack.amount;
mass += stack.getMass();
if (def.getType() < 0) containsAnti = true;
type = Math.max(type, Math.abs(def.getType()));
@@ -123,7 +129,7 @@ public final class dAtomDefinition extends cElementalDefinition {
}
}
this.type = containsAnti ? (byte) -type : (byte) type;
- this.mass = mass;
+ //this.mass = mass;
this.chargeLeptons = cLeptons;
this.charge = cNucleus + cLeptons;
this.neutralCount = neutralCount;
@@ -131,40 +137,56 @@ public final class dAtomDefinition extends cElementalDefinition {
element = Math.abs(element);
-
//stability curve
int StableIsotope = stableIzoCurve(element);
int izoDiff = neutralCount - StableIsotope;
int izoDiffAbs = Math.abs(izoDiff);
- hash=super.hashCode();
-
- iaea=iaeaNuclide.get(element,neutralCount);
+ xstr.setSeed((element + 1L) * (neutralCount + 100L));
+ this.iaea=iaeaNuclide.get(element,neutralCount);
if(iaea!=null){
- xstr.setSeed((long) (element + 1) * (neutralCount + 100));
- this.rawLifeTime=containsAnti ? iaea.Thalf * 1.5514433E-21f * (1f + xstr.nextFloat() * 9f):iaea.Thalf;
+ if(Float.isNaN(iaea.mass)) this.mass=mass;
+ else this.mass=iaea.mass;
+
+ if(Float.isNaN(iaea.halfTime)) {
+ Float overriddenLifeTime=lifetimeOverrides.get(this);
+ float rawLifeTimeTemp;
+ if(overriddenLifeTime!=null)
+ rawLifeTimeTemp = overriddenLifeTime;
+ else {
+ rawLifeTimeTemp = calculateLifeTime(izoDiff, izoDiffAbs, element, neutralCount, containsAnti);
+ }
+ this.rawLifeTime=rawLifeTimeTemp> STABLE_RAW_LIFE_TIME ? STABLE_RAW_LIFE_TIME :rawLifeTimeTemp;
+ }else {
+ this.rawLifeTime = containsAnti ? iaea.halfTime * 1.5514433E-21f * (1f + xstr.nextFloat() * 9f) : iaea.halfTime;
+ }
+ this.iaeaDefinitionExistsAndHasEnergyLevels =iaea.energeticStatesArray.length>1;
}else{
+ this.mass=mass;
+
Float overriddenLifeTime=lifetimeOverrides.get(this);
float rawLifeTimeTemp;
if(overriddenLifeTime!=null)
rawLifeTimeTemp = overriddenLifeTime;
else {
- xstr.setSeed((long) (element + 1) * (neutralCount + 100));
rawLifeTimeTemp = calculateLifeTime(izoDiff, izoDiffAbs, element, neutralCount, containsAnti);
}
this.rawLifeTime=rawLifeTimeTemp> STABLE_RAW_LIFE_TIME ? STABLE_RAW_LIFE_TIME :rawLifeTimeTemp;
- }
+ this.iaeaDefinitionExistsAndHasEnergyLevels =false;
+ }
- if(iaea==null || iaea.energeticStates==null || iaea.energeticStates.get(0f)==null) {
+ if(iaea==null || iaea.energeticStatesArray[0].energy!=0) {
if (izoDiff == 0)
this.decayMode = 0;
else
this.decayMode = izoDiff > 0 ? (byte) Math.min(2, 1 + izoDiffAbs / 4) : (byte) -Math.min(2, 1 + izoDiffAbs / 4);
}else{
- this.decayMode=Byte.MAX_VALUE;
+ this.decayMode = izoDiff > 0 ? (byte) (Math.min(2, 1 + izoDiffAbs / 4)+ BYTE_OFFSET) : (byte) (-Math.min(2, 1 + izoDiffAbs / 4) + BYTE_OFFSET);
}
- this.stable = this.rawLifeTime >= STABLE_RAW_LIFE_TIME;
+ //this.stable = this.rawLifeTime >= STABLE_RAW_LIFE_TIME;
+
+ hash=super.hashCode();
}
private static int stableIzoCurve(int element) {
@@ -227,12 +249,15 @@ public final class dAtomDefinition extends cElementalDefinition {
private static boolean canTheyBeTogether(cElementalDefinitionStackMap stacks) {
boolean nuclei = false;
- for (cElementalDefinitionStack stack : stacks.values())
+ long qty=0;
+ for (cElementalDefinitionStack stack : stacks.values()) {
if (stack.definition instanceof dHadronDefinition) {
if (((dHadronDefinition) stack.definition).amount != 3) return false;
nuclei = true;
} else if (!(stack.definition instanceof eLeptonDefinition)) return false;
- return nuclei;
+ qty+=stack.amount;
+ }
+ return nuclei && qty<ATOM_COMPLEXITY_LIMIT;
}
@Override
@@ -263,8 +288,20 @@ public final class dAtomDefinition extends cElementalDefinition {
}
@Override
- public float getRawLifeTime() {
- return rawLifeTime;
+ public float getRawTimeSpan(long currentEnergy) {
+ if(currentEnergy<=0) return rawLifeTime;
+ if(iaeaDefinitionExistsAndHasEnergyLevels){
+ if(currentEnergy>=iaea.energeticStatesArray.length){
+ return iaea.energeticStatesArray[iaea.energeticStatesArray.length-1].Thalf/(currentEnergy-iaea.energeticStatesArray.length+1);
+ }
+ return iaea.energeticStatesArray[(int)currentEnergy].Thalf;
+ }
+ return rawLifeTime/(currentEnergy+1);
+ }
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return true;
}
@Override
@@ -278,7 +315,7 @@ public final class dAtomDefinition extends cElementalDefinition {
final boolean negative = element < 0;
try {
if (type != 1) return (negative ? "~? " : "? ") + nomenclature.Name[element];
- return negative ? "~" + nomenclature.Name[element] : nomenclature.Name[element];
+ return negative ? "~" + nomenclature.Name[-element] : nomenclature.Name[element];
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
return (negative ? "Element: ~" : "Element: ") + element;
@@ -310,136 +347,607 @@ public final class dAtomDefinition extends cElementalDefinition {
@Override
public cElementalDecay[] getDecayArray() {
+ ArrayList<cElementalDecay> decaysList=new ArrayList<>(4);
+ return getDecayArray(decaysList,decayMode,true);
+ }
+
+ private cElementalDecay[] getDecayArray(ArrayList<cElementalDecay> decaysList,int decayMode,boolean tryAnti) {
if (this.type == 1) {
switch (decayMode) {
case -2:
- return PbetaDecay();
+ if(TecTech.Rnd.nextBoolean() && ElectronCapture(decaysList))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ else if(PbetaDecay(decaysList))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ break;
case -1:
- return Emmision(dHadronDefinition.hadron_p1);
+ if(Emmision(decaysList, dHadronDefinition.hadron_p1))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ break;
case 0:
- return alphaDecay();
+ if(alphaDecay(decaysList))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ break;
case 1:
- return Emmision(dHadronDefinition.hadron_n1);
+ if(Emmision(decaysList, dHadronDefinition.hadron_n1))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ break;
case 2:
- return MbetaDecay();
- case Byte.MAX_VALUE:
- return iaeaDecay();
+ if(MbetaDecay(decaysList))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ break;
default:
- return getNaturalDecayInstant();
+ if(decayMode>8){
+ if(iaeaDecay(decaysList,0))
+ return decaysList.toArray(new cElementalDecay[decaysList.size()]);
+ return getDecayArray(decaysList,decayMode-BYTE_OFFSET,false);
+ }
}
- } else {
- return getNaturalDecayInstant();
+ return cElementalDecay.noDecay;
+ }else if(this.type==-1){
+ dAtomDefinition anti=getAnti();
+ if(anti!=null) return anti.getDecayArray(decaysList,decayMode,false);
}
+ return getNaturalDecayInstant();
}
- private cElementalDecay[] iaeaDecay(){
- return null;
+ private boolean iaeaDecay(ArrayList<cElementalDecay> decaysList,long energy){
+ iaeaNuclide.energeticState state;
+ if(energy>iaea.energeticStatesArray.length) state = iaea.energeticStatesArray[iaea.energeticStatesArray.length-1];
+ else if(energy<=0) state = iaea.energeticStatesArray[0];
+ else state=iaea.energeticStatesArray[(int)energy];
+ for (int i=0;i<state.decaymodes.length;i++){
+ if(!getDecay(decaysList,state.decaymodes[i])) {
+ decaysList.clear();
+ return false;
+ }
+ }
+ return true;
}
- private cElementalDecay[] Emmision(cElementalDefinitionStack emit) {
- final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values());
+ private boolean getDecay(ArrayList<cElementalDecay> decaysList,iaeaNuclide.iaeaDecay decay){
+ cElementalMutableDefinitionStackMap withThis=elementalStacks.toMutable(),newStuff=new cElementalMutableDefinitionStackMap();
+ switch (decay.decayName){
+ case "D": {
+ if (withThis.removeAllAmounts(false, deuterium.definition.getSubParticles())){
+ withThis.putReplace(deuterium);
+ decaysList.add(new cElementalDecay(decay.chance,withThis.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }
+ } break;
+ case "3H": {
+ if (withThis.removeAllAmounts(false, tritium.definition.getSubParticles())){
+ withThis.putReplace(tritium);
+ decaysList.add(new cElementalDecay(decay.chance,withThis.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }
+ } break;
+ case "3HE": {
+ if (withThis.removeAllAmounts(false, helium_3.definition.getSubParticles())){
+ withThis.putReplace(helium_3);
+ decaysList.add(new cElementalDecay(decay.chance,withThis.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }
+ } break;
+ case "8BE": {
+ if (withThis.removeAllAmounts(false, beryllium_8.definition.getSubParticles())){
+ withThis.putReplace(beryllium_8);
+ decaysList.add(new cElementalDecay(decay.chance,withThis.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }
+ } break;
+ case "14C": {
+ if (withThis.removeAllAmounts(false, carbon_14.definition.getSubParticles())){
+ newStuff.putReplace(carbon_14);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "24NE": {
+ if (withThis.removeAllAmounts(false, neon_24.definition.getSubParticles())){
+ newStuff.putReplace(neon_24);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "34SI": {
+ if (withThis.removeAllAmounts(false, silicon_34.definition.getSubParticles())){
+ newStuff.putReplace(silicon_34);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "A": case "A?": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n2,dHadronDefinition.hadron_p2)){
+ newStuff.putReplace(alpha);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B+": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p1)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "2B+": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2)){
+ withThis.putUnify(dHadronDefinition.hadron_n2);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_2);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B-": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n1)){
+ withThis.putUnify(dHadronDefinition.hadron_p1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "2B-": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n2)){
+ withThis.putUnify(dHadronDefinition.hadron_p2);
+ newStuff.putReplace(eLeptonDefinition.lepton_e2);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "EC": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p1,eLeptonDefinition.lepton_e1)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "2EC": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2,eLeptonDefinition.lepton_e2)){
+ withThis.putUnify(dHadronDefinition.hadron_n2);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B++EC": case "EC+B+": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2,eLeptonDefinition.lepton_e1)){
+ withThis.putUnify(dHadronDefinition.hadron_n2);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B+A": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p3, dHadronDefinition.hadron_n1)){
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(alpha);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B+P": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(dHadronDefinition.hadron_p1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B+2P": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p3)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(dHadronDefinition.hadron_p2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B-A": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n3, dHadronDefinition.hadron_p1)){
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ newStuff.putReplace(alpha);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B-N": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n2)){
+ withThis.putUnify(dHadronDefinition.hadron_p1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ newStuff.putReplace(dHadronDefinition.hadron_n1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B-2N": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n3)){
+ withThis.putUnify(dHadronDefinition.hadron_p1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ newStuff.putReplace(dHadronDefinition.hadron_n2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "B-P": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n1)){
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ newStuff.putReplace(dHadronDefinition.hadron_p1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "ECA": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n1,eLeptonDefinition.lepton_e1,dHadronDefinition.hadron_p3)){
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(alpha);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "ECP": {
+ if (withThis.removeAllAmounts(false, eLeptonDefinition.lepton_e1,dHadronDefinition.hadron_p2)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(dHadronDefinition.hadron_p1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "EC2P": {
+ if (withThis.removeAllAmounts(false, eLeptonDefinition.lepton_e1,dHadronDefinition.hadron_p3)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(dHadronDefinition.hadron_p2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "ECP+EC2P": {//todo look at branching ratios
+ if (withThis.removeAllAmounts(false, eLeptonDefinition.lepton_e2,dHadronDefinition.hadron_p5)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve2);
+ newStuff.putReplace(dHadronDefinition.hadron_p3);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "N": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n1)){
+ newStuff.putReplace(dHadronDefinition.hadron_n1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "2N": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n2)){
+ newStuff.putReplace(dHadronDefinition.hadron_n2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "P": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p1)){
+ newStuff.putReplace(dHadronDefinition.hadron_p1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "2P": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2)){
+ newStuff.putReplace(dHadronDefinition.hadron_p2);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "SF":
+ if(Fission(decaysList,withThis,newStuff,decay.chance,false)) return true;
+ case "B-F": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_n1)){
+ withThis.putUnify(dHadronDefinition.hadron_p1);
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ try{
+ if(Fission(decaysList,withThis,newStuff,decay.chance,false)) return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "ECF": case "ECSF": case "EC(+SF)": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p1,eLeptonDefinition.lepton_e1)){
+ withThis.putUnify(dHadronDefinition.hadron_n1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ try{
+ if(Fission(decaysList,withThis,newStuff,decay.chance,false)) return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "SF(+EC+B+)": case "SF+EC+B+": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2,eLeptonDefinition.lepton_e1)){
+ withThis.putUnify(dHadronDefinition.hadron_n2);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve2);
+ try{
+ if(Fission(decaysList,withThis,newStuff,decay.chance,false)) return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "SF+EC+B-": {
+ if (withThis.removeAllAmounts(false, eLeptonDefinition.lepton_e1)){
+ newStuff.putReplace(eLeptonDefinition.lepton_e1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve_1);
+ try{
+ if(Fission(decaysList,withThis,newStuff,decay.chance,false)) return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "IT": case "IT?": case "G":
+ decaysList.add(new cElementalDecay(decay.chance, this, eBosonDefinition.boson_Y__));
+ return true;
+ case "IT+EC+B+": {
+ if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2,eLeptonDefinition.lepton_e1)){
+ withThis.putUnify(dHadronDefinition.hadron_n2);
+ newStuff.putReplace(eLeptonDefinition.lepton_e_1);
+ newStuff.putReplace(eNeutrinoDefinition.lepton_Ve2);
+ newStuff.putReplace(eBosonDefinition.boson_Y__1);
+ try{
+ newStuff.putReplace(new dAtomDefinition(withThis.toImmutable_unsafeMightLeaveExposedElementalTree()).getStackForm(1));
+ decaysList.add(new cElementalDecay(decay.chance,newStuff.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
+ }catch (Exception e){
+ if(DEBUG_MODE) e.printStackTrace();
+ }
+ }
+ } break;
+ case "DEAD_END":
+ decaysList.add(deadEnd);
+ return true;
+ default: throw new Error("Unsupported decay mode: " + decay.decayName + " "+ neutralCount+" "+element);
+ }
+ if(DEBUG_MODE) TecTech.Logger.info("Failed to decay "+element+" "+neutralCount+" "+decay.decayName);
+ return false;
+ }
+
+ private boolean Emmision(ArrayList<cElementalDecay> decaysList, cElementalDefinitionStack emit) {
+ final cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable();
if (tree.removeAmount(false, emit)) {
try {
- return new cElementalDecay[]{
- new cElementalDecay(0.5f, this),
- new cElementalDecay(0.5f, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable()), 1), emit),
- deadEnd
- };
+ decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_unsafeMightLeaveExposedElementalTree()), 1), emit));
+ return true;
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
}
}
- return getNaturalDecayInstant();
+ return false;
}
- private cElementalDecay[] alphaDecay() {
- final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values());
- if (tree.removeAllAmounts(false, dHadronDefinition.hadron_n2, dHadronDefinition.hadron_p2)) {
+ private boolean alphaDecay(ArrayList<cElementalDecay> decaysList) {
+ final cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable();
+ if (tree.removeAllAmounts(false, alpha.definition.getSubParticles())) {
try {
- return new cElementalDecay[]{
- new cElementalDecay(0.5f, this),
- new cElementalDecay(0.5f, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable()), 1), alpha),
- deadEnd
- };
+ decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_unsafeMightLeaveExposedElementalTree()), 1), alpha));
+ return true;
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
}
}
- return getNaturalDecayInstant();
+ return false;
}
- private cElementalDecay[] MbetaDecay() {
- final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values());
+ private boolean MbetaDecay(ArrayList<cElementalDecay> decaysList) {
+ final cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable();
if (tree.removeAmount(false, dHadronDefinition.hadron_n1)) {
try {
tree.putUnify(dHadronDefinition.hadron_p1);
- return new cElementalDecay[]{
- new cElementalDecay(0.5f, this),
- new cElementalDecay(0.5f, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable()), 1), eLeptonDefinition.lepton_e1, eNeutrinoDefinition.lepton_Ve_1),
- deadEnd
- };
+ decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_unsafeMightLeaveExposedElementalTree()), 1), eLeptonDefinition.lepton_e1, eNeutrinoDefinition.lepton_Ve_1));
+ return true;
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
}
}
- return getNaturalDecayInstant();
+ return false;
}
- private cElementalDecay[] PbetaDecay() {
- final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values());
+ private boolean PbetaDecay(ArrayList<cElementalDecay> decaysList) {
+ final cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable();
if (tree.removeAmount(false, dHadronDefinition.hadron_p1)) {
try {
tree.putUnify(dHadronDefinition.hadron_n1);
- return new cElementalDecay[]{
- new cElementalDecay(0.5f, this),
- new cElementalDecay(0.5f, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable()), 1), eLeptonDefinition.lepton_e_1, eNeutrinoDefinition.lepton_Ve1),
- deadEnd
- };
+ decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_unsafeMightLeaveExposedElementalTree()), 1), eLeptonDefinition.lepton_e_1, eNeutrinoDefinition.lepton_Ve1));
+ return true;
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
}
}
- return getNaturalDecayInstant();
+ return false;
}
- private cElementalDecay[] ElectronCapture() {
- final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values());
- if (tree.removeAmount(false, eLeptonDefinition.lepton_e1) && tree.removeAmount(false, dHadronDefinition.hadron_p1)) {
+ private boolean ElectronCapture(ArrayList<cElementalDecay> decaysList) {
+ final cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable();
+ if (tree.removeAllAmounts(false, dHadronDefinition.hadron_p1,eLeptonDefinition.lepton_e1)) {
try {
tree.putUnify(dHadronDefinition.hadron_n1);
- return new cElementalDecay[]{
- new cElementalDecay(0.5f, this),
- new cElementalDecay(0.5f, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable()), 1), eNeutrinoDefinition.lepton_Ve1),
- deadEnd
- };
+ decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_unsafeMightLeaveExposedElementalTree()), 1), eNeutrinoDefinition.lepton_Ve1));
+ return true;
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
}
}
- return getNaturalDecayInstant();
+ return false;
}
- private cElementalDecay[] Fission(boolean spontaneousCheck) {
- final cElementalMutableDefinitionStackMap light = new cElementalMutableDefinitionStackMap(elementalStacks.values());
+ private boolean Fission(ArrayList<cElementalDecay> decaysList, cElementalMutableDefinitionStackMap fissile, cElementalMutableDefinitionStackMap particles,float probability,boolean spontaneousCheck) {
final cElementalMutableDefinitionStackMap heavy = new cElementalMutableDefinitionStackMap();
- final ArrayList<cElementalDefinitionStack> particles = new ArrayList<>(4);
final double[] liquidDrop=liquidDropFunction(Math.abs(element)<=97);
- for(cElementalDefinitionStack stack:light.values()){
+ for(cElementalDefinitionStack stack: fissile.values()){
if(spontaneousCheck && stack.definition instanceof dHadronDefinition &&
(stack.amount<=80 || (stack.amount<90 && XSTR_INSTANCE.nextInt(10)<stack.amount-80)))
- return getNaturalDecayInstant();
+ return false;
if(stack.definition.getCharge()==0){
//if(stack.definition instanceof dHadronDefinition){
double neutrals=stack.amount*liquidDrop[2];
int neutrals_cnt=(int)Math.floor(neutrals);
neutrals_cnt+=neutrals-neutrals_cnt>XSTR_INSTANCE.nextDouble()?1:0;
- particles.add(new cElementalDefinitionStack(stack.definition, neutrals_cnt));
+ particles.putUnify(new cElementalDefinitionStack(stack.definition, neutrals_cnt));
int heavy_cnt=(int)Math.ceil(stack.amount*liquidDrop[1]);
while(heavy_cnt+neutrals_cnt>stack.amount)
heavy_cnt--;
- light.removeAmount(false,new cElementalDefinitionStack(stack.definition,heavy_cnt+neutrals_cnt));
+ fissile.removeAmount(false,new cElementalDefinitionStack(stack.definition,heavy_cnt+neutrals_cnt));
heavy.putReplace(new cElementalDefinitionStack(stack.definition, heavy_cnt));
//}else{
// particles.add(stack);
@@ -450,23 +958,20 @@ public final class dAtomDefinition extends cElementalDefinition {
if(heavy_cnt%2==1 && XSTR_INSTANCE.nextFloat()>0.05f)
heavy_cnt--;
cElementalDefinitionStack new_stack=new cElementalDefinitionStack(stack.definition, heavy_cnt);
- light.removeAmount(false,new_stack);
+ fissile.removeAmount(false,new_stack);
heavy.putReplace(new_stack);
}
}
try {
- particles.add(new cElementalDefinitionStack(new dAtomDefinition(light.toImmutable()),1));
- particles.add(new cElementalDefinitionStack(new dAtomDefinition(heavy.toImmutable()),1));
- return new cElementalDecay[]{
- new cElementalDecay(0.5f,this),
- new cElementalDecay(0.5f, particles.toArray(new cElementalDefinitionStack[0])),
- deadEnd
- };
+ particles.putReplace(new cElementalDefinitionStack(new dAtomDefinition(fissile.toImmutable_unsafeMightLeaveExposedElementalTree()),1));
+ particles.putReplace(new cElementalDefinitionStack(new dAtomDefinition(heavy.toImmutable_unsafeMightLeaveExposedElementalTree()),1));
+ decaysList.add(new cElementalDecay(probability, particles.toImmutable_unsafeMightLeaveExposedElementalTree()));
+ return true;
} catch (Exception e) {
- if (DEBUG_MODE) e.printStackTrace();
+ if(DEBUG_MODE) e.printStackTrace();
}
- return getNaturalDecayInstant();
+ return false;
}
private static double[] liquidDropFunction(boolean asymmetric) {
@@ -501,31 +1006,48 @@ public final class dAtomDefinition extends cElementalDefinition {
}
@Override
- public cElementalDecay[] getEnergeticDecayInstant() {
- //strip leptons
- boolean doIt = true;
- ArrayList<cElementalDefinitionStack> decaysInto = new ArrayList<cElementalDefinitionStack>();
- ArrayList<cElementalDefinitionStack> newAtom = new ArrayList<cElementalDefinitionStack>();
- for (cElementalDefinitionStack elementalStack : elementalStacks.values()) {
- if (elementalStack.definition instanceof eLeptonDefinition && doIt) {
- doIt = false;
- if (elementalStack.amount > 1)
- newAtom.add(new cElementalDefinitionStack(elementalStack.definition, elementalStack.amount - 1));
- decaysInto.add(new cElementalDefinitionStack(elementalStack.definition, 1));
- } else {
- newAtom.add(elementalStack);
+ public cElementalDecay[] getEnergyInducedDecay(long energyLevel) {
+ if (iaeaDefinitionExistsAndHasEnergyLevels) {
+ ArrayList<cElementalDecay> decays=new ArrayList<>(4);
+ if(iaeaDecay(decays,energyLevel)){
+ return decays.toArray(new cElementalDecay[decays.size()]);
}
}
- try {
- decaysInto.add(new cElementalDefinitionStack(new dAtomDefinition(newAtom.toArray(new cElementalDefinitionStack[newAtom.size()])), 1));
- return new cElementalDecay[]{new cElementalDecay(0.95F, decaysInto.toArray(new cElementalDefinitionStack[decaysInto.size()])), eBosonDefinition.deadEnd};
- } catch (tElementalException e) {
- if (DEBUG_MODE) e.printStackTrace();
- for (cElementalDefinitionStack things : newAtom) {
- decaysInto.add(things);
+ if(energyLevel< Math.abs(charge)/3+neutralCount) {
+ return new cElementalDecay[]{new cElementalDecay(1, this, eBosonDefinition.boson_Y__)};
+ }
+ return getNaturalDecayInstant();
+ }
+
+ @Override
+ public float getEnergyDiffBetweenStates(long currentEnergyLevel,long newEnergyLevel) {
+ if(iaeaDefinitionExistsAndHasEnergyLevels){
+ float result=0;
+ boolean backwards=newEnergyLevel<currentEnergyLevel;
+ if(backwards){
+ long temp=currentEnergyLevel;
+ currentEnergyLevel=newEnergyLevel;
+ newEnergyLevel=temp;
}
- return new cElementalDecay[]{new cElementalDecay(0.75F, decaysInto.toArray(new cElementalDefinitionStack[decaysInto.size()])), eBosonDefinition.deadEnd};
+
+ if(currentEnergyLevel<=0){
+ if(newEnergyLevel<=0) return DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-currentEnergyLevel);
+ else result+=DEFAULT_ENERGY_REQUIREMENT*(-currentEnergyLevel);
+ }else result-=iaea.energeticStatesArray[(int)Math.min(iaea.energeticStatesArray.length-1,currentEnergyLevel)].energy;
+ if(newEnergyLevel>=iaea.energeticStatesArray.length){
+ if(currentEnergyLevel>=iaea.energeticStatesArray.length) return DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-currentEnergyLevel);
+ else result+=DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-iaea.energeticStatesArray.length+1);
+ result+=iaea.energeticStatesArray[iaea.energeticStatesArray.length-1].energy;
+ }else result+=iaea.energeticStatesArray[(int)Math.max(0,newEnergyLevel)].energy;
+
+ return backwards?-result:result;
}
+ return DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-currentEnergyLevel);
+ }
+
+ @Override
+ public boolean usesSpecialEnergeticDecayHandling() {
+ return iaeaDefinitionExistsAndHasEnergyLevels;
}
@Override
@@ -560,12 +1082,12 @@ public final class dAtomDefinition extends cElementalDefinition {
//}
@Override
- public iElementalDefinition getAnti() {
+ public dAtomDefinition getAnti() {
cElementalMutableDefinitionStackMap anti = new cElementalMutableDefinitionStackMap();
for (cElementalDefinitionStack stack : elementalStacks.values())
anti.putReplace(new cElementalDefinitionStack(stack.definition.getAnti(), stack.amount));
try {
- return new dAtomDefinition(anti.toImmutable());
+ return new dAtomDefinition(anti.toImmutable_unsafeMightLeaveExposedElementalTree());
} catch (tElementalException e) {
if (DEBUG_MODE) e.printStackTrace();
return null;
@@ -588,6 +1110,7 @@ public final class dAtomDefinition extends cElementalDefinition {
}
private final static class nomenclature {
+ private nomenclature(){}
static final private String[] Symbol = new String[]{"Nt", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og"};
static final private String[] Name = new String[]{"Neutronium", "Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine", "Neon", "Sodium", "Magnesium", "Aluminium", "Silicon", "Phosphorus", "Sulfur", "Chlorine", "Argon", "Potassium", "Calcium", "Scandium", "Titanium", "Vanadium", "Chromium", "Manganese", "Iron", "Cobalt", "Nickel", "Copper", "Zinc", "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", "Krypton", "Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium", "Molybdenum", "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver", "Cadmium", "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon", "Caesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium", "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium", "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium", "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinum", "Gold", "Mercury", "Thallium", "Lead", "Bismuth", "Polonium", "Astatine", "Radon", "Francium", "Radium", "Actinium", "Thorium", "Protactinium", "Uranium", "Neptunium", "Plutonium", "Americium", "Curium", "Berkelium", "Californium", "Einsteinium", "Fermium", "Mendelevium", "Nobelium", "Lawrencium", "Rutherfordium", "Dubnium", "Seaborgium", "Bohrium", "Hassium", "Meitnerium", "Darmstadtium", "Roentgenium", "Copernicium", "Nihonium", "Flerovium", "Moscovium", "Livermorium", "Tennessine", "Oganesson"};
static final private String[] SymbolIUPAC = new String[]{"n", "u", "b", "t", "q", "p", "h", "s", "o", "e", "N", "U", "B", "T", "Q", "P", "H", "S", "O", "E"};
@@ -637,7 +1160,7 @@ public final class dAtomDefinition extends cElementalDefinition {
final int izoDiffAbs = Math.abs(izoDiff);
final float rawLifeTime = calculateLifeTime(izoDiff, izoDiffAbs, element, isotope, false);
iaeaNuclide nuclide=iaeaNuclide.get(element,isotope);
- if (rawLifeTime>= STABLE_RAW_LIFE_TIME || (nuclide!=null && nuclide.Thalf>=STABLE_RAW_LIFE_TIME)) {
+ if (rawLifeTime>= STABLE_RAW_LIFE_TIME || (nuclide!=null && nuclide.halfTime >=STABLE_RAW_LIFE_TIME)) {
TreeSet<Integer> isotopes = stableIsotopes.get(element);
if (isotopes == null) stableIsotopes.put(element, isotopes = new TreeSet<>());
isotopes.add(isotope);
@@ -675,11 +1198,37 @@ public final class dAtomDefinition extends cElementalDefinition {
if (DEBUG_MODE)
TecTech.Logger.info("Added Unstable Atom:" + key + " " + mostStableUnstableIsotopes.get(key).lastEntry().getValue() + " " + unstableAtoms.get(key).getMass());
}
- alpha = new cElementalDefinitionStack(
- new dAtomDefinition(
- new cElementalDefinitionStack(dHadronDefinition.hadron_p, 2),
- new cElementalDefinitionStack(dHadronDefinition.hadron_n, 2))
- , 1);
+ deuterium=new dAtomDefinition(
+ dHadronDefinition.hadron_p1,
+ dHadronDefinition.hadron_n1,
+ eLeptonDefinition.lepton_e1).getStackForm(1);
+ tritium=new dAtomDefinition(
+ dHadronDefinition.hadron_p1,
+ dHadronDefinition.hadron_n2,
+ eLeptonDefinition.lepton_e1).getStackForm(1);
+ helium_3=new dAtomDefinition(
+ dHadronDefinition.hadron_p2,
+ dHadronDefinition.hadron_n1,
+ eLeptonDefinition.lepton_e2).getStackForm(1);
+ alpha = new dAtomDefinition(
+ dHadronDefinition.hadron_p2,
+ dHadronDefinition.hadron_n2).getStackForm(1);
+ beryllium_8=new dAtomDefinition(
+ new cElementalDefinitionStack(dHadronDefinition.hadron_p, 4),
+ new cElementalDefinitionStack(dHadronDefinition.hadron_n, 4),
+ new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 4)).getStackForm(1);
+ carbon_14=new dAtomDefinition(
+ new cElementalDefinitionStack(dHadronDefinition.hadron_p, 6),
+ new cElementalDefinitionStack(dHadronDefinition.hadron_n, 8),
+ new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 6)).getStackForm(1);
+ neon_24=new dAtomDefinition(
+ new cElementalDefinitionStack(dHadronDefinition.hadron_p, 10),
+ new cElementalDefinitionStack(dHadronDefinition.hadron_n, 14),
+ new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 10)).getStackForm(1);
+ silicon_34=new dAtomDefinition(
+ new cElementalDefinitionStack(dHadronDefinition.hadron_p, 14),
+ new cElementalDefinitionStack(dHadronDefinition.hadron_n, 20),
+ new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 14)).getStackForm(1);
} catch (Exception e) {
if (DEBUG_MODE) e.printStackTrace();
}
@@ -797,36 +1346,13 @@ public final class dAtomDefinition extends cElementalDefinition {
////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(94),144), dust, Materials.Plutonium,1);
transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(95),144), dust, Materials.Americium,1);
- /* ... */
- cElementalDefinitionStack neutrons=new cElementalDefinitionStack(dHadronDefinition.hadron_n, 100000);
- transformation.oredictDequantization.put(neutrons.definition,new aOredictDequantizationInfo(neutrons, dust,Materials.Neutronium,1));
- bTransformationInfo.oredictQuantization.put(
- OreDictionary.getOreID(OrePrefixes.ingotHot.name()+Materials.Neutronium.mName),
- new aOredictQuantizationInfo(OrePrefixes.ingotHot,Materials.Neutronium,1 ,neutrons)
- );
-
try {
dAtomDefinition temp;
- temp=new dAtomDefinition(
- eLeptonDefinition.lepton_e1,
- dHadronDefinition.hadron_p1,
- dHadronDefinition.hadron_n1
- );
- transformation.addFluid(new cElementalDefinitionStack(temp, 144),Materials.Deuterium.mGas.getID(), 144);
+ transformation.addFluid(new cElementalDefinitionStack(deuterium.definition, 144),Materials.Deuterium.mGas.getID(), 144);
- temp=new dAtomDefinition(
- eLeptonDefinition.lepton_e1,
- dHadronDefinition.hadron_p1,
- dHadronDefinition.hadron_n2
- );
- transformation.addFluid(new cElementalDefinitionStack(temp, 144),Materials.Tritium.mGas.getID(), 144);
+ transformation.addFluid(new cElementalDefinitionStack(tritium.definition, 144),Materials.Tritium.mGas.getID(), 144);
- temp=new dAtomDefinition(
- new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 2),
- dHadronDefinition.hadron_p2,
- new cElementalDefinitionStack(dHadronDefinition.hadron_n, 3)
- );
- transformation.addFluid(new cElementalDefinitionStack(temp, 144),Materials.Helium_3.mGas.getID(), 144);
+ transformation.addFluid(new cElementalDefinitionStack(helium_3.definition, 144),Materials.Helium_3.mGas.getID(), 144);
temp=new dAtomDefinition(
new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 92),
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dHadronDefinition.java
index d473abcb6d..f7bb9c7f5d 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dHadronDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/dHadronDefinition.java
@@ -1,23 +1,28 @@
package com.github.technus.tectech.elementalMatter.definitions.complex;
import com.github.technus.tectech.TecTech;
+import com.github.technus.tectech.auxiliary.TecTechConfig;
import com.github.technus.tectech.elementalMatter.core.cElementalDecay;
import com.github.technus.tectech.elementalMatter.core.cElementalDefinitionStackMap;
+import com.github.technus.tectech.elementalMatter.core.cElementalMutableDefinitionStackMap;
import com.github.technus.tectech.elementalMatter.core.containers.cElementalDefinitionStack;
import com.github.technus.tectech.elementalMatter.core.interfaces.iElementalDefinition;
import com.github.technus.tectech.elementalMatter.core.tElementalException;
import com.github.technus.tectech.elementalMatter.core.templates.cElementalDefinition;
-import com.github.technus.tectech.elementalMatter.core.transformations.aFluidDequantizationInfo;
-import com.github.technus.tectech.elementalMatter.core.transformations.aItemDequantizationInfo;
-import com.github.technus.tectech.elementalMatter.core.transformations.aOredictDequantizationInfo;
+import com.github.technus.tectech.elementalMatter.core.transformations.*;
import com.github.technus.tectech.elementalMatter.definitions.primitive.eBosonDefinition;
import com.github.technus.tectech.elementalMatter.definitions.primitive.eQuarkDefinition;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
import static com.github.technus.tectech.auxiliary.TecTechConfig.DEBUG_MODE;
+import static com.github.technus.tectech.elementalMatter.definitions.complex.dAtomDefinition.transformation;
import static com.github.technus.tectech.elementalMatter.definitions.primitive.eBosonDefinition.boson_Y__;
+import static gregtech.api.enums.OrePrefixes.dust;
/**
* Created by danie_000 on 17.11.2016.
@@ -28,7 +33,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
private static final byte nbtType = (byte) 'h';
//Helpers
public static dHadronDefinition hadron_p, hadron_n, hadron_p_, hadron_n_;
- public static cElementalDefinitionStack hadron_p1, hadron_n1, hadron_p2, hadron_n2;
+ public static cElementalDefinitionStack hadron_p1, hadron_n1, hadron_p2, hadron_n2, hadron_p3, hadron_n3, hadron_p5;
private static float protonMass = 0F;
private static float neutronMass = 0F;
@@ -106,13 +111,12 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
//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 quarks : stacks.values()) {
if (!(quarks.definition instanceof eQuarkDefinition)) return false;
amount += quarks.amount;
}
- if (amount < 2 || amount > 12) return false;
- return true;
+ return amount >= 2 && amount <= 12;
}
@Override
@@ -164,11 +168,14 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
@Override
public cElementalDecay[] getNaturalDecayInstant() {
+ cElementalDefinitionStack[] quarkStacks = this.quarkStacks.values();
+ if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType())
+ return cElementalDecay.noProduct;
ArrayList<cElementalDefinitionStack> decaysInto = new ArrayList<>();
- for (cElementalDefinitionStack quarkStack : quarkStacks.values()) {
- if (quarkStack.definition.getType() == 1 || quarkStack.definition.getType() == -1) {
+ for (cElementalDefinitionStack quarks : quarkStacks) {
+ if (quarks.definition.getType() == 1 || quarks.definition.getType() == -1) {
//covers both quarks and antiquarks
- decaysInto.add(quarkStack);
+ decaysInto.add(quarks);
} else {
//covers both quarks and antiquarks
decaysInto.add(new cElementalDefinitionStack(boson_Y__, 2));
@@ -181,18 +188,28 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
}
@Override
- public cElementalDecay[] getEnergeticDecayInstant() {
+ public cElementalDecay[] getEnergyInducedDecay(long energyLevel) {
cElementalDefinitionStack[] quarkStacks = this.quarkStacks.values();
if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType())
- return new cElementalDecay[]{eBosonDefinition.deadEnd};
+ return cElementalDecay.noProduct;
return new cElementalDecay[]{new cElementalDecay(0.75F, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks
}
@Override
+ public float getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) {
+ return DEFAULT_ENERGY_REQUIREMENT*(newEnergyLevel-currentEnergyLevel);
+ }
+
+ @Override
+ public boolean usesSpecialEnergeticDecayHandling() {
+ return false;
+ }
+
+ @Override
public cElementalDecay[] getDecayArray() {
cElementalDefinitionStack[] quarkStacks = this.quarkStacks.values();
if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType())
- return new cElementalDecay[]{eBosonDefinition.deadEnd};
+ return cElementalDecay.noProduct;
else if (amount != 3)
return new cElementalDecay[]{new cElementalDecay(0.95F, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks
else {
@@ -221,9 +238,9 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
try {
return new cElementalDecay[]{
- new cElementalDecay(0.98F, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1]),
+ new cElementalDecay(0.99F, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1]),
new cElementalDecay(0.001F, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1], boson_Y__),
- eBosonDefinition.deadEnd}; //decay into quarks
+ eBosonDefinition.deadEnd};
} catch (tElementalException e) {
if (DEBUG_MODE) e.printStackTrace();
return new cElementalDecay[]{eBosonDefinition.deadEnd};
@@ -242,44 +259,49 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
}
@Override
- public float getRawLifeTime() {
+ public float getRawTimeSpan(long currentEnergy) {
return rawLifeTime;
}
@Override
- public byte getType() {
- return type;
+ public boolean isTimeSpanHalfLife() {
+ return true;
}
@Override
- public iElementalDefinition getAnti() {
- cElementalDefinitionStack[] stacks = this.quarkStacks.values();
- cElementalDefinitionStack[] antiElements = new cElementalDefinitionStack[stacks.length];
- for (int i = 0; i < antiElements.length; i++) {
- antiElements[i] = new cElementalDefinitionStack(stacks[i].definition.getAnti(), stacks[i].amount);
- }
- try {
- return new dHadronDefinition(false, antiElements);
- } catch (tElementalException e) {
- if (DEBUG_MODE) e.printStackTrace();
- return null;
- }
+ public byte getType() {
+ return type;
}
//@Override
//public iElementalDefinition getAnti() {
- // cElementalMutableDefinitionStackMap anti = new cElementalMutableDefinitionStackMap();
- // for (cElementalDefinitionStack stack : quarkStacks.values())
- // anti.putReplace(new cElementalDefinitionStack(stack.definition.getAnti(), stack.amount));
+ // cElementalDefinitionStack[] stacks = this.quarkStacks.values();
+ // cElementalDefinitionStack[] antiElements = new cElementalDefinitionStack[stacks.length];
+ // for (int i = 0; i < antiElements.length; i++) {
+ // antiElements[i] = new cElementalDefinitionStack(stacks[i].definition.getAnti(), stacks[i].amount);
+ // }
// try {
- // return new dHadronDefinition(anti.toImmutable());
+ // return new dHadronDefinition(false, antiElements);
// } catch (tElementalException e) {
- // if (TecTechConfig.DEBUG_MODE) e.printStackTrace();
+ // if (DEBUG_MODE) e.printStackTrace();
// return null;
// }
//}
@Override
+ public iElementalDefinition getAnti() {
+ cElementalMutableDefinitionStackMap anti = new cElementalMutableDefinitionStackMap();
+ for (cElementalDefinitionStack stack : quarkStacks.values())
+ anti.putReplace(new cElementalDefinitionStack(stack.definition.getAnti(), stack.amount));
+ try {
+ return new dHadronDefinition(anti.toImmutable_unsafeMightLeaveExposedElementalTree());
+ } catch (tElementalException e) {
+ if (TecTechConfig.DEBUG_MODE) e.printStackTrace();
+ return null;
+ }
+ }
+
+ @Override
public aFluidDequantizationInfo someAmountIntoFluidStack() {
return null;
}
@@ -338,6 +360,9 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
hadron_n1 = new cElementalDefinitionStack(hadron_n, 1);
hadron_p2 = new cElementalDefinitionStack(hadron_p, 2);
hadron_n2 = new cElementalDefinitionStack(hadron_n, 2);
+ hadron_p3 = new cElementalDefinitionStack(hadron_p, 3);
+ hadron_n3 = new cElementalDefinitionStack(hadron_n, 3);
+ hadron_p5 = new cElementalDefinitionStack(hadron_p, 5);
try {
cElementalDefinition.addCreatorFromNBT(nbtType, dHadronDefinition.class.getMethod("fromNBT", NBTTagCompound.class),(byte)-64);
@@ -348,6 +373,16 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi
TecTech.Logger.info("Registered Elemental Matter Class: Hadron "+nbtType+" "+(-64));
}
+ public static void setTransformations(){
+ //Added to atom map, but should be in its own
+ cElementalDefinitionStack neutrons=new cElementalDefinitionStack(dHadronDefinition.hadron_n, 100000);
+ transformation.oredictDequantization.put(neutrons.definition,new aOredictDequantizationInfo(neutrons, dust, Materials.Neutronium,1));
+ bTransformationInfo.oredictQuantization.put(
+ OreDictionary.getOreID(OrePrefixes.ingotHot.name()+Materials.Neutronium.mName),
+ new aOredictQuantizationInfo(OrePrefixes.ingotHot,Materials.Neutronium,1 ,neutrons)
+ );
+ }
+
@Override
public byte getClassType() {
return -64;
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/iaea/iaeaNuclide.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/iaea/iaeaNuclide.java
index d9cdf8db4e..d08ec62256 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/iaea/iaeaNuclide.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/iaea/iaeaNuclide.java
@@ -12,6 +12,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.TreeMap;
+import static com.github.technus.tectech.auxiliary.TecTechConfig.DEBUG_MODE;
import static com.github.technus.tectech.elementalMatter.core.interfaces.iElementalDefinition.STABLE_RAW_LIFE_TIME;
public final class iaeaNuclide {
@@ -34,13 +35,13 @@ public final class iaeaNuclide {
while((line=reader.readLine())!=null) {
String[] split= Util.splitButDifferent(line,",");
if(split.length!=19) throw new Error("Invalid count ("+split.length+") of separators in IAEA nuclides database " + line);
- if(split[1].length()>0 && !blockOfData.isEmpty()) {
+ if(split[1].length()>0 && blockOfData.size()>0) {
new iaeaNuclide(blockOfData.toArray(new String[0][]));
blockOfData.clear();
}
blockOfData.add(split);
}
- if(!blockOfData.isEmpty()) {
+ if(blockOfData.size()>0) {
new iaeaNuclide(blockOfData.toArray(new String[0][]));
blockOfData.clear();
}
@@ -75,9 +76,8 @@ public final class iaeaNuclide {
e.printStackTrace();
}
- for(String s:decays){
- System.out.println(s);
- }
+ for(iaeaNuclide nuclide:NUCLIDES.values())
+ nuclide.makeArrayOfEnergyStates();
}
public static iaeaNuclide get(int protons, int neutrons){
@@ -85,10 +85,11 @@ public final class iaeaNuclide {
}
public final short N,Z;
- public final float Thalf;//sec
+ public final float halfTime;//sec
public final float mass;//eV/c^2
public final short discovery;//year
- public TreeMap<Float,energeticState> energeticStates;
+ private TreeMap<Float,energeticState> energeticStates;
+ public energeticState[] energeticStatesArray;
private iaeaNuclide(String[][] rows){
@@ -104,36 +105,34 @@ public final class iaeaNuclide {
discovery=(short)doubleOrNaN(rows[0][18],"discovery");
if(rows[0][3].contains("STABLE")){
- Thalf= STABLE_RAW_LIFE_TIME;
+ halfTime = STABLE_RAW_LIFE_TIME;
}else{
parts = Util.splitButDifferent(rows[0][4], "|");
- Thalf = (float)doubleOrNaN(parts[0],"half life");
- //if(Thalf>STABLE_RAW_LIFE_TIME) System.out.println("KEK KEK"+N+" "+Z+" "+Thalf);
+ halfTime = (float)doubleOrNaN(parts[0],"half life");
}
+ }
- for(int i=0;i<rows.length;i++){
- add(rows[i][5]);
+ private void getMoreData(String[] cells){
+ if(DEBUG_MODE) {
+ if (add(cells[14])) System.out.println(N + " " + Z);
+ if (add(cells[17])) System.out.println(N + " " + Z);
+ if (add(cells[20])) System.out.println(N + " " + Z);
}
-
-
- //for(String[] S:rows) {
- // for(String s:S)System.out.print(s+" ");
- // System.out.println();
- //}
- //System.out.println("KEKEKEK");
+ new energeticState(this, halfTime,getDecaysFixed(cells[14],doubleOrNaN(cells[15],"chance1"),cells[17],doubleOrNaN(cells[18],"chance1"),cells[20],doubleOrNaN(cells[21],"chance1")));
}
- private void getMoreData(String[] cells){
- add(cells[14]);
- add(cells[17]);
- add(cells[20]);
+ private static final energeticState[] empty=new energeticState[0];
+ private void makeArrayOfEnergyStates(){
+ if(energeticStates==null || energeticStates.size()==0)energeticStatesArray=empty;
+ else energeticStatesArray=energeticStates.values().toArray(new energeticState[energeticStates.size()]);
}
private double doubleOrNaN(String s, String name){
s=s.replaceAll("#","");
if(s.length()>0) {
try {
- return Double.parseDouble(s);
+ double value=Double.parseDouble(s);
+ return value != 0 ?value:Float.NaN;
} catch (Exception e) {
System.out.println("Invalid Value " + name + " " + N + " " + Z + " " + s);
e.printStackTrace();
@@ -145,9 +144,9 @@ public final class iaeaNuclide {
public static class energeticState{
public final float energy;
public final float Thalf;
- public TreeMap<Float,String> decaymodes;
+ public final iaeaDecay[] decaymodes;
- private energeticState(iaeaNuclide nuclide,float Thalf,TreeMap<Float,String> decaymodes){
+ private energeticState(iaeaNuclide nuclide,float Thalf,iaeaDecay[] decaymodes){
energy=0;
this.Thalf=Thalf;
this.decaymodes=decaymodes;
@@ -160,15 +159,20 @@ public final class iaeaNuclide {
iaeaNuclide nuclide=get((int)doubleOrNaN(cells[0],"protons"),(int)doubleOrNaN(cells[1],"neutrons"));
if(nuclide==null)
throw new Error("Missing nuclide "+(int)doubleOrNaN(cells[0],"protons")+" "+(int)doubleOrNaN(cells[1],"neutrons"));
- this.energy=(float) (doubleOrNaN(cells[3],"energy level",nuclide)*1000);//to eV
+ this.energy=(float) (doubleOrNaN(cells[3],"energy level",nuclide)*1000f);//to eV
+ if(energy<0) throw new Error("Invalid energy "+ nuclide.N +" "+nuclide.Z+ " "+cells[3]);
this.Thalf=(float) doubleOrNaN(cells[10],"half life",nuclide);
- if(nuclide.energeticStates==null)
- nuclide.energeticStates=new TreeMap<>();
+ if(nuclide.energeticStates==null) {
+ new Exception("Should be initialized before doing this... "+ nuclide.N +" "+nuclide.Z).printStackTrace();
+ nuclide.energeticStates = new TreeMap<>();
+ }
nuclide.energeticStates.put(energy,this);
-
- add(cells[12]);
- add(cells[15]);
- add(cells[18]);
+ if(DEBUG_MODE) {
+ if (add(cells[12])) System.out.println(nuclide.N + " " + nuclide.Z);
+ if (add(cells[15])) System.out.println(nuclide.N + " " + nuclide.Z);
+ if (add(cells[18])) System.out.println(nuclide.N + " " + nuclide.Z);
+ }
+ this.decaymodes=getDecaysFixed(cells[12],doubleOrNaN(cells[13],"chance 1",nuclide),cells[15],doubleOrNaN(cells[16],"chance 2",nuclide),cells[18],doubleOrNaN(cells[19],"chance 3",nuclide));
}
private double doubleOrNaN(String s, String name){
@@ -194,18 +198,33 @@ public final class iaeaNuclide {
}
private static HashSet<String> decays=new HashSet<>();
- private static void add(String s){
- int len=decays.size();
- decays.add(s);
- if(decays.size()>len){
+ private static boolean add(String s){
+ if(decays.add(s)){
System.out.println(s);
+ return true;
}
+ return false;
}
- public enum decayType{
- ;
- public final String name;
- decayType(String name){
- this.name=name;
+
+ private static iaeaDecay[] getDecaysFixed(String decay1, double chance1,String decay2, double chance2,String decay3, double chance3){
+ TreeMap<Double,iaeaDecay> decays=new TreeMap<>();
+ if(decay1.length()>0)
+ decays.put(chance1/100D,new iaeaDecay((float)(chance1/100D),decay1));
+ if(decay2.length()>0)
+ decays.put(chance2/100D,new iaeaDecay((float)(chance2/100D),decay3));
+ if(decay3.length()>0)
+ decays.put(chance3/100D,new iaeaDecay((float)(chance3/100D),decay3));
+ decays.put(1D,iaeaDecay.DEAD_END);
+ return decays.values().toArray(new iaeaDecay[decays.size()]);
+ }
+
+ public static class iaeaDecay{
+ public final float chance;
+ public final String decayName;
+ public static final iaeaDecay DEAD_END=new iaeaDecay(1f,"DEAD_END");
+ private iaeaDecay(float chance,String decayName){
+ this.chance=chance;
+ this.decayName=decayName;
}
}
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/cPrimitiveDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/cPrimitiveDefinition.java
index cef87b5a39..1a4582386b 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/cPrimitiveDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/cPrimitiveDefinition.java
@@ -3,7 +3,6 @@ package com.github.technus.tectech.elementalMatter.definitions.primitive;
import com.github.technus.tectech.elementalMatter.core.templates.cElementalPrimitive;
import static com.github.technus.tectech.elementalMatter.core.cElementalDecay.noDecay;
-import static com.github.technus.tectech.elementalMatter.core.cElementalDecay.noProduct;
/**
* Created by danie_000 on 22.10.2016.
@@ -21,15 +20,20 @@ public final class cPrimitiveDefinition extends cElementalPrimitive {
}
public static void run() {
- nbtE__.init(null__, -1F, -1, -1, noDecay);
- null__.init(null__, -1F, -1, -1, noProduct);
- space__.init(space__, -1F, -1, -1, noProduct);
- magic.init(magic_, -1F, -1, -1, noDecay);
- magic_.init(magic, -1F, -1, -1, noDecay);
+ nbtE__.init(null__, NO_DECAY_RAW_LIFE_TIME, -1, -1, noDecay);
+ null__.init(null__, NO_DECAY_RAW_LIFE_TIME, -1, -1, noDecay);
+ space__.init(space__, NO_DECAY_RAW_LIFE_TIME, -1, -1, noDecay);
+ magic.init(magic_, NO_DECAY_RAW_LIFE_TIME, -1, -1, noDecay);
+ magic_.init(magic, NO_DECAY_RAW_LIFE_TIME, -1, -1, noDecay);
}
@Override
public String getName() {
return "Primitive: " + name;
}
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return false;
+ }
} \ No newline at end of file
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java
index d52d5505c1..3b9ecc8433 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java
@@ -14,15 +14,14 @@ public final class eBosonDefinition extends cElementalPrimitive {
//deadEnd
public static final cElementalDecay deadEnd = new cElementalDecay(boson_Y__, boson_Y__);
public static final cElementalDecay deadEndHalf = new cElementalDecay(boson_Y__);
+ public static final cElementalDefinitionStack boson_Y__1=new cElementalDefinitionStack(boson_Y__,1);
private eBosonDefinition(String name, String symbol, int type, float mass, int charge, int color, int ID) {
super(name, symbol, type, mass, charge, color, ID);
}
public static void run() {
- boson_Y__.init(null, -1F, 0, 1,
- new cElementalDecay(boson_Y__),
- deadEnd);
+ boson_Y__.init(null, NO_DECAY_RAW_LIFE_TIME, -1, -1, cElementalDecay.noDecay);
boson_H__.init(null, 1.56e-22F, 0, 0,
new cElementalDecay(0.96F, new cElementalDefinitionStack(boson_Y__, 4)),
new cElementalDecay(0.02F, eLeptonDefinition.lepton_t, eLeptonDefinition.lepton_t_),
@@ -34,4 +33,9 @@ public final class eBosonDefinition extends cElementalPrimitive {
public String getName() {
return "Boson: " + name;
}
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return false;
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eLeptonDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eLeptonDefinition.java
index 4d66a7cae2..2f13fae24f 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eLeptonDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eLeptonDefinition.java
@@ -17,7 +17,9 @@ public final class eLeptonDefinition extends cElementalPrimitive {
lepton_t_ = new eLeptonDefinition("Antitauon", "\u03c4+", -3, 1776.83e6F, 3, -1, 20);
public static final cElementalDefinitionStack lepton_e1 = new cElementalDefinitionStack(lepton_e, 1);
+ public static final cElementalDefinitionStack lepton_e2 = new cElementalDefinitionStack(lepton_e, 2);
public static final cElementalDefinitionStack lepton_e_1 = new cElementalDefinitionStack(lepton_e_, 1);
+ public static final cElementalDefinitionStack lepton_e_2 = new cElementalDefinitionStack(lepton_e_, 2);
private eLeptonDefinition(String name, String symbol, int type, float mass, int charge, int color, int ID) {
super(name, symbol, type, mass, charge, color, ID);
@@ -26,9 +28,7 @@ public final class eLeptonDefinition extends cElementalPrimitive {
}
public static void run() {
- lepton_e.init(lepton_e_, 100000F, 2, 3,
- new cElementalDecay(0.9F, lepton_e),
- new cElementalDecay(0.05F, nothing),
+ lepton_e.init(lepton_e_, STABLE_RAW_LIFE_TIME, 0, 1,
eBosonDefinition.deadEnd,//makes photons and don't care
new cElementalDecay(lepton_e, eBosonDefinition.boson_Y__));
lepton_m.init(lepton_m_, 2.197019e-6F, 0, 1,
@@ -40,15 +40,13 @@ public final class eLeptonDefinition extends cElementalPrimitive {
new cElementalDecay(0.05F, lepton_m, eNeutrinoDefinition.lepton_Vm_, eNeutrinoDefinition.lepton_Vt, eBosonDefinition.boson_H__),
eBosonDefinition.deadEnd);//makes photons and don't care
- lepton_e_.init(lepton_e, 100000F, 2, 3,
- new cElementalDecay(0.9F, lepton_e_),
- new cElementalDecay(0.05F, nothing),
+ lepton_e_.init(lepton_e, STABLE_RAW_LIFE_TIME, 0, 1,
eBosonDefinition.deadEnd,//makes photons and don't care
new cElementalDecay(lepton_e_, eBosonDefinition.boson_Y__));
- lepton_m_.init(lepton_m, 2.197e-6F, 0, 1,
+ lepton_m_.init(lepton_m, 2.197019e-6F, 0, 1,
new cElementalDecay(0.9F, lepton_e_, eNeutrinoDefinition.lepton_Ve, eNeutrinoDefinition.lepton_Vm_),
eBosonDefinition.deadEnd);//makes photons and don't care
- lepton_t_.init(lepton_t, 2.9e-13F, 1, 3,
+ lepton_t_.init(lepton_t, 2.906e-13F, 1, 3,
new cElementalDecay(0.8F, lepton_m_, eNeutrinoDefinition.lepton_Vm, eNeutrinoDefinition.lepton_Vt_, eBosonDefinition.boson_Y__),
new cElementalDecay(0.1F, lepton_e_, eNeutrinoDefinition.lepton_Ve, eNeutrinoDefinition.lepton_Vm_),
new cElementalDecay(0.05F, lepton_m_, eNeutrinoDefinition.lepton_Vm, eNeutrinoDefinition.lepton_Vt_, eBosonDefinition.boson_H__),
@@ -59,4 +57,9 @@ public final class eLeptonDefinition extends cElementalPrimitive {
public String getName() {
return "Lepton: " + name;
}
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return true;
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eNeutrinoDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eNeutrinoDefinition.java
index df9b081e9b..673dba7b77 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eNeutrinoDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eNeutrinoDefinition.java
@@ -17,42 +17,41 @@ public final class eNeutrinoDefinition extends cElementalPrimitive {
lepton_Vt_ = new eNeutrinoDefinition("Antitauon neutrino", "~\u03bd\u03c4", -3, 15e6F, 0, -1, 26);
public static final cElementalDefinitionStack lepton_Ve1 = new cElementalDefinitionStack(lepton_Ve, 1);
+ public static final cElementalDefinitionStack lepton_Ve2 = new cElementalDefinitionStack(lepton_Ve, 2);
public static final cElementalDefinitionStack lepton_Ve_1 = new cElementalDefinitionStack(lepton_Ve_, 1);
+ public static final cElementalDefinitionStack lepton_Ve_2 = new cElementalDefinitionStack(lepton_Ve_, 2);
private eNeutrinoDefinition(String name, String symbol, int type, float mass, int charge, int color, int ID) {
super(name, symbol, type, mass, charge, color, ID);
}
public static void run() {
- lepton_Ve.init(lepton_Ve_, 1F, 1, 0,
- new cElementalDecay(0.95F, nothing),
- new cElementalDecay(0.1F, lepton_Ve),
- eBosonDefinition.deadEndHalf);
+ lepton_Ve.init(lepton_Ve_, 1F, 0, 0,
+ cElementalDecay.noProduct);
lepton_Vm.init(lepton_Vm_, 1F, 1, 0,
- new cElementalDecay(0.9F, nothing),
- new cElementalDecay(0.1F, lepton_Vm),
+ new cElementalDecay(0.825F, nothing),
eBosonDefinition.deadEndHalf);
lepton_Vt.init(lepton_Vt_, 1F, 1, 0,
- new cElementalDecay(0.85F, nothing),
- new cElementalDecay(0.1F, lepton_Vt),
- eBosonDefinition.deadEndHalf);
+ new cElementalDecay(0.75F, nothing),
+ eBosonDefinition.deadEnd);
- lepton_Ve_.init(lepton_Ve, 1F, 1, 0,
- new cElementalDecay(0.95F, nothing),
- new cElementalDecay(0.1F, lepton_Ve_),
- eBosonDefinition.deadEndHalf);
+ lepton_Ve_.init(lepton_Ve, 1F, 0, 0,
+ cElementalDecay.noProduct);
lepton_Vm_.init(lepton_Vm, 1F, 1, 0,
- new cElementalDecay(0.9F, nothing),
- new cElementalDecay(0.1F, lepton_Vm_),
+ new cElementalDecay(0.825F, nothing),
eBosonDefinition.deadEndHalf);
lepton_Vt_.init(lepton_Vt, 1F, 1, 0,
- new cElementalDecay(0.85F, nothing),
- new cElementalDecay(0.1F, lepton_Vt_),
- eBosonDefinition.deadEndHalf);
+ new cElementalDecay(0.75F, nothing),
+ eBosonDefinition.deadEnd);
}
@Override
public String getName() {
return "Lepton: " + name;
}
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return true;
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eQuarkDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eQuarkDefinition.java
index a8662f7338..3abf04464f 100644
--- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eQuarkDefinition.java
+++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eQuarkDefinition.java
@@ -26,7 +26,7 @@ public final class eQuarkDefinition extends cElementalPrimitive {
}
public static void run() {
- quark_u.init(quark_u_, 1e35F, 3, -1,
+ quark_u.init(quark_u_, STABLE_RAW_LIFE_TIME, 3, -1,
new cElementalDecay(0.9F, quark_d, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve),
new cElementalDecay(0.050778116F, quark_s/*,lepton_m_,lepton_Vm*/),
new cElementalDecay(1.23201e-5F, quark_b/*,lepton_t_,lepton_Vt*/),
@@ -42,7 +42,7 @@ public final class eQuarkDefinition extends cElementalPrimitive {
new cElementalDecay(7.51689e-5F, quark_d, eLeptonDefinition.lepton_t_, eNeutrinoDefinition.lepton_Vt),
eBosonDefinition.deadEnd);//makes photons and don't care
- quark_d.init(quark_d_, 1e35F, 3, -1,
+ quark_d.init(quark_d_, STABLE_RAW_LIFE_TIME, 3, -1,
new cElementalDecay(0.9F, quark_u, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_),
new cElementalDecay(0.05071504F, quark_c/*,lepton_m,lepton_Vm_*/),
new cElementalDecay(7.51689e-5F, quark_t/*,lepton_t,lepton_Vt_*/),
@@ -58,7 +58,7 @@ public final class eQuarkDefinition extends cElementalPrimitive {
new cElementalDecay(1.23201e-5F, quark_u, eLeptonDefinition.lepton_t, eNeutrinoDefinition.lepton_Vt_),
eBosonDefinition.deadEnd);//makes photons and don't care
- quark_u_.init(quark_u, 88, 3, -1,
+ quark_u_.init(quark_u, STABLE_RAW_LIFE_TIME, 3, -1,
new cElementalDecay(0.9F, quark_d_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_),
new cElementalDecay(0.050778116F, quark_s_/*,lepton_m,lepton_Vm_*/),
new cElementalDecay(1.23201e-5F, quark_b_/*,lepton_t,lepton_Vt_*/),
@@ -74,7 +74,7 @@ public final class eQuarkDefinition extends cElementalPrimitive {
new cElementalDecay(7.51689e-5F, quark_d_, eLeptonDefinition.lepton_t, eNeutrinoDefinition.lepton_Vt_),
eBosonDefinition.deadEnd);//makes photons and don't care
- quark_d_.init(quark_d, 44F, 3, -1,
+ quark_d_.init(quark_d, STABLE_RAW_LIFE_TIME, 3, -1,
new cElementalDecay(0.9F, quark_u_, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve),
new cElementalDecay(0.05071504F, quark_c_/*,lepton_m_,lepton_Vm*/),
new cElementalDecay(7.51689e-5F, quark_t_/*,lepton_t_,lepton_Vt*/),
@@ -95,4 +95,9 @@ public final class eQuarkDefinition extends cElementalPrimitive {
public String getName() {
return "Quark: " + name;
}
+
+ @Override
+ public boolean isTimeSpanHalfLife() {
+ return true;
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/loader/RecipeLoader.java b/src/main/java/com/github/technus/tectech/loader/RecipeLoader.java
index 601552e33e..f4883b10db 100644
--- a/src/main/java/com/github/technus/tectech/loader/RecipeLoader.java
+++ b/src/main/java/com/github/technus/tectech/loader/RecipeLoader.java
@@ -2,6 +2,7 @@ package com.github.technus.tectech.loader;
import com.github.technus.tectech.compatibility.dreamcraft.DreamCraftRecipeLoader;
import com.github.technus.tectech.elementalMatter.definitions.complex.dAtomDefinition;
+import com.github.technus.tectech.elementalMatter.definitions.complex.dHadronDefinition;
import com.github.technus.tectech.thing.casing.TT_Container_Casings;
import cpw.mods.fml.common.Loader;
import gregtech.api.enums.Materials;
@@ -18,6 +19,7 @@ import static gregtech.api.enums.GT_Values.RA;
public class RecipeLoader implements Runnable {
public void run() {
dAtomDefinition.setTransformation();
+ dHadronDefinition.setTransformations();
// ===================================================================================================
// Recipes init - common goes here rest goes into methods below
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java
index 66929ad77a..a469872047 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java
@@ -108,7 +108,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta
byte Tick = (byte) (aTick % 20);
if (DECAY_AT == Tick) {
purgeOverflow();
- content.tickContent(postEnergize);//Hatches don't life time mult things
+ content.tickContentByOneSecond(1,postEnergize);//Hatches don't life time mult things
purgeOverflow();
} else if (OVERFLOW_AT == Tick) {
if (overflowMatter <= 0) {
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java
index 9395d5de37..f00f182de1 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java
@@ -128,7 +128,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase
mMaxProgresstime = 1;//(int)m3;
mEfficiencyIncrease = 10000;
m1 = input.getMass()/input.amount;
- cElementalInstanceStackMap decayed=input.decayCompute(input.getDefinition().getDecayArray(),1,0,0);
+ cElementalInstanceStackMap decayed=input.decay();
m2 = decayed.getMass()/input.amount;
//TecTech.Logger.info("I " + input.toString());
//TecTech.Logger.info("O " + decayed.toString());
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java
index 04d2cea363..92ff23b6bb 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import static com.github.technus.tectech.Util.StructureBuilder;
import static com.github.technus.tectech.Util.V;
+import static com.github.technus.tectech.elementalMatter.core.interfaces.iElementalDefinition.STABLE_RAW_LIFE_TIME;
import static com.github.technus.tectech.elementalMatter.definitions.complex.dAtomDefinition.refMass;
import static com.github.technus.tectech.elementalMatter.definitions.complex.dAtomDefinition.refUnstableMass;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
@@ -89,7 +90,7 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo
if (info != null) {
if (map.removeAllAmounts(false, (iHasElementalDefinition) info.input())) {
mOutputFluids = new FluidStack[]{(FluidStack) info.output()};
- startRecipe((iHasElementalDefinition) info.input());
+ startRecipe((iHasElementalDefinition) info.input(),stack.getEnergy());
return true;
}
}
@@ -98,7 +99,7 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo
if (info != null) {
if (map.removeAllAmounts(false, (iHasElementalDefinition) info.input())) {
mOutputItems = new ItemStack[]{(ItemStack) info.output()};
- startRecipe((iHasElementalDefinition) info.input());
+ startRecipe((iHasElementalDefinition) info.input(),stack.getEnergy());
return true;
}
}
@@ -109,7 +110,7 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo
ArrayList<ItemStack> items = OreDictionary.getOres(((aOredictDequantizationInfo) info).out);
if (items != null && items.size() > 0) {
mOutputItems = new ItemStack[]{items.get(0)};
- startRecipe((iHasElementalDefinition) info.input());
+ startRecipe((iHasElementalDefinition) info.input(),stack.getEnergy());
return true;
}
}
@@ -121,13 +122,13 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo
return false;
}
- private void startRecipe(iHasElementalDefinition from) {
+ private void startRecipe(iHasElementalDefinition from, long energy) {
mMaxProgresstime = 20;
mEfficiencyIncrease = 10000;
float mass = from.getMass();
float euMult = mass / refMass;
eAmpereFlow = (int) Math.ceil(euMult);
- if (mass > refUnstableMass || from.getDefinition().getRawLifeTime() < 1.5e25f) {
+ if (mass > refUnstableMass || from.getDefinition().getRawTimeSpan(energy) < STABLE_RAW_LIFE_TIME) {
mEUt = (int) -V[10];
} else {
mEUt = (int) -V[8];
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java
index f245e63ff5..4ebbc9438b 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java
@@ -22,6 +22,7 @@ import net.minecraftforge.oredict.OreDictionary;
import static com.github.technus.tectech.Util.*;
import static com.github.technus.tectech.auxiliary.TecTechConfig.DEBUG_MODE;
+import static com.github.technus.tectech.elementalMatter.core.interfaces.iElementalDefinition.DEFAULT_ENERGY_LEVEL;
import static com.github.technus.tectech.elementalMatter.definitions.complex.dAtomDefinition.refMass;
import static com.github.technus.tectech.elementalMatter.definitions.complex.dAtomDefinition.refUnstableMass;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
@@ -153,7 +154,7 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock
float mass = into.getMass();
float euMult = mass / refMass;
eAmpereFlow = (int) Math.ceil(euMult);
- if (mass > refUnstableMass || into.getDefinition().getRawLifeTime() < 1.5e25f) {
+ if (mass > refUnstableMass || into.getDefinition().getRawTimeSpan(DEFAULT_ENERGY_LEVEL) < 1.5e25f) {
mEUt = (int) -V[10];
} else {
mEUt = (int) -V[8];
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
index e31626910a..6ee2e7f88f 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
@@ -179,7 +179,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
public boolean checkRecipe_EM(ItemStack itemStack) {
tRecipe=null;
aRecipe=null;
- if(!eHolders.isEmpty() && eHolders.get(0).mInventory[0]!=null) {
+ if(eHolders.size()>0 && eHolders.get(0).mInventory[0]!=null) {
holdItem = eHolders.get(0).mInventory[0].copy();
if(ItemList.Tool_DataStick.isStackEqual(itemStack, false, true)) {
for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) {
@@ -265,7 +265,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
@Override
public void outputAfterRecipe_EM() {
- if(!eHolders.isEmpty()) {
+ if(eHolders.size()>0) {
if (tRecipe != null && ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)){
eHolders.get(0).getBaseMetaTileEntity().setActive(false);
eHolders.get(0).mInventory[0] = null;
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java
index 158293c38d..d43765f7f2 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java
@@ -174,7 +174,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa
@Override
public boolean checkRecipe_EM(ItemStack itemStack) {
eRecipe=null;
- if(!eInputHatches.isEmpty() && eInputHatches.get(0).getContainerHandler().hasStacks() && !eOutputHatches.isEmpty()) {
+ if(eInputHatches.size()>0 && eInputHatches.get(0).getContainerHandler().hasStacks() && !eOutputHatches.isEmpty()) {
cElementalInstanceStackMap researchEM = eInputHatches.get(0).getContainerHandler();
if(ItemList.Tool_DataOrb.isStackEqual(itemStack, false, true)) {
GT_Recipe scannerRecipe=null;
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java
index 3fd05f9eb5..e28e12069e 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java
@@ -578,7 +578,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt
float remaining = voider.overflowMax - voider.getOverflowMatter();
for (GT_MetaTileEntity_Hatch_InputElemental in : eInputHatches) {
for (cElementalInstanceStack instance : in.getContainerHandler().values()) {
- int qty = (int) Math.floor(remaining / instance.definition.getMass());
+ long qty = (long) Math.floor(remaining / instance.definition.getMass());
if (qty > 0) {
qty = Math.min(qty, instance.amount);
if (voider.addOverflowMatter(instance.definition.getMass() * qty))
@@ -589,7 +589,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt
}
for (GT_MetaTileEntity_Hatch_OutputElemental out : eOutputHatches) {
for (cElementalInstanceStack instance : out.getContainerHandler().values()) {
- int qty = (int) Math.floor(remaining / instance.definition.getMass());
+ long qty = (long)Math.floor(remaining / instance.definition.getMass());
if (qty > 0) {
qty = Math.min(qty, instance.amount);
if (voider.addOverflowMatter(instance.definition.getMass() * qty))
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo
index e24b3ff4c9..b255c2013c 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo
@@ -28,3 +28,9 @@ floodlightb
fix eu/t checks if needs maintenance!!!
make microwave grinder cap autosmelting based on power
+
+
+iterative halflife formula:
+
+=prev qty* 2^(-t diff / t half)
+
diff --git a/src/main/resources/assets/tectech/energyLevels.csv b/src/main/resources/assets/tectech/energyLevels.csv
index ec98b17ab2..484768d8b7 100644
--- a/src/main/resources/assets/tectech/energyLevels.csv
+++ b/src/main/resources/assets/tectech/energyLevels.csv
@@ -2917,4 +2917,4 @@
105,152,Db,370,-1,(1/2-),,0.67,6,S,0.67,0.06,A,87,0,SF,13,0,,,,,,,,,
106,159,Sg,152,0,,,8.5,+26-16,S,8.5,2.1,SF,51,0,A,49,0,,,,,,,,,
108,157,Hs,300,-1,,,0.75,+17-12,MS,0.00075,0.00015,A,100,0,SF,1,0,,,,,,,,,
-110,160,Ds,1130,0,,,6.0,+82-22,MS,0.006,0.0052,A,70,0,IT,,0,,,,,,,,,
+110,160,Ds,1130,0,,,6.0,+82-22,MS,0.006,0.0052,A,70,0,IT,,0,,,,,,,,, \ No newline at end of file
diff --git a/src/main/resources/assets/tectech/nuclidesTable.csv b/src/main/resources/assets/tectech/nuclidesTable.csv
index 940dbf0cb1..783276227a 100644
--- a/src/main/resources/assets/tectech/nuclidesTable.csv
+++ b/src/main/resources/assets/tectech/nuclidesTable.csv
@@ -3252,4 +3252,4 @@
116,177,LV,,,0,0,,,53,+62-19,MS,0.053,0.041,A,100,0,,,,,,,,,,,,-3716,1000,-10978,889,10679.42,50,,,5644,996,,,7111,2,293204691,629,190669,586,
117,176,Ts,,,,0,,,14,+11-4,MS,0.014,0.008,A,100,0,SF,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,
117,177,Ts,,,,0,,,,,,,,A,100,0,SF,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,
-118,176,Og,,,0,0,0+,,1.8,+84-8,MS,0.0018,0.0046,A,100,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+118,176,Og,,,0,0,0+,,1.8,+84-8,MS,0.0018,0.0046,A,100,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file