mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
different RBMK reactivity functions per fuel type
This commit is contained in:
parent
6003279d27
commit
8b0e5b4ef2
@ -11,6 +11,7 @@ import com.hbm.items.armor.*;
|
||||
import com.hbm.items.bomb.*;
|
||||
import com.hbm.items.food.*;
|
||||
import com.hbm.items.machine.*;
|
||||
import com.hbm.items.machine.ItemRBMKRod.EnumBurnFunc;
|
||||
import com.hbm.items.special.*;
|
||||
import com.hbm.items.tool.*;
|
||||
import com.hbm.items.tool.ItemToolAbility.EnumToolType;
|
||||
@ -3297,18 +3298,21 @@ public class ModItems {
|
||||
rbmk_fuel_ueu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ueu)
|
||||
.setYield(100000000D)
|
||||
.setStats(75)
|
||||
.setFunction(EnumBurnFunc.PLATEU)
|
||||
.setMeltingPoint(2865)
|
||||
.addRadiation(ItemHazard.u * ItemHazard.rod_rbmk).toItem()
|
||||
.setUnlocalizedName("rbmk_fuel_ueu").setTextureName(RefStrings.MODID + ":rbmk_fuel_ueu");
|
||||
rbmk_fuel_meu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_meu)
|
||||
.setYield(100000000D)
|
||||
.setStats(150)
|
||||
.setFunction(EnumBurnFunc.LOG_TEN)
|
||||
.setMeltingPoint(2865)
|
||||
.addRadiation(ItemHazard.uf * ItemHazard.rod_rbmk).toItem()
|
||||
.setUnlocalizedName("rbmk_fuel_meu").setTextureName(RefStrings.MODID + ":rbmk_fuel_meu");
|
||||
rbmk_fuel_thmeu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_thmeu)
|
||||
.setYield(100000000D)
|
||||
.setStats(75)
|
||||
.setFunction(EnumBurnFunc.LOG_TEN)
|
||||
.setMeltingPoint(3350)
|
||||
.addRadiation(ItemHazard.thf * ItemHazard.rod_rbmk).toItem()
|
||||
.setUnlocalizedName("rbmk_fuel_thmeu").setTextureName(RefStrings.MODID + ":rbmk_fuel_thmeu");
|
||||
@ -3321,6 +3325,7 @@ public class ModItems {
|
||||
rbmk_fuel_mep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mep)
|
||||
.setYield(100000000D)
|
||||
.setStats(215, 20)
|
||||
.setFunction(EnumBurnFunc.SQUARE_ROOT)
|
||||
.setHeat(1.25D)
|
||||
.setMeltingPoint(2744)
|
||||
.addRadiation(ItemHazard.purg * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3328,6 +3333,7 @@ public class ModItems {
|
||||
rbmk_fuel_hep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep239)
|
||||
.setYield(100000000D)
|
||||
.setStats(250)
|
||||
.setFunction(EnumBurnFunc.LINEAR)
|
||||
.setHeat(1.5D)
|
||||
.setMeltingPoint(2744)
|
||||
.addRadiation(ItemHazard.pu239 * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3335,6 +3341,7 @@ public class ModItems {
|
||||
rbmk_fuel_hep241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep241)
|
||||
.setYield(100000000D)
|
||||
.setStats(280)
|
||||
.setFunction(EnumBurnFunc.LINEAR)
|
||||
.setHeat(1.75D)
|
||||
.setMeltingPoint(2744)
|
||||
.addRadiation(ItemHazard.pu241 * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3342,6 +3349,7 @@ public class ModItems {
|
||||
rbmk_fuel_men = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_men)
|
||||
.setYield(100000000D)
|
||||
.setStats(175)
|
||||
.setFunction(EnumBurnFunc.SQUARE_ROOT)
|
||||
.setMeltingPoint(2800)
|
||||
.setNeutronTypes(NType.FAST, NType.FAST)
|
||||
.addRadiation(ItemHazard.npf * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3349,6 +3357,7 @@ public class ModItems {
|
||||
rbmk_fuel_mox = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mox)
|
||||
.setYield(100000000D)
|
||||
.setStats(130)
|
||||
.setFunction(EnumBurnFunc.LOG_TEN)
|
||||
.setHeat(1.5D)
|
||||
.setMeltingPoint(2815)
|
||||
.addRadiation(ItemHazard.mox * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3356,6 +3365,7 @@ public class ModItems {
|
||||
rbmk_fuel_les = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_les)
|
||||
.setYield(100000000D)
|
||||
.setStats(150)
|
||||
.setFunction(EnumBurnFunc.SQUARE_ROOT)
|
||||
.setHeat(1.25D)
|
||||
.setMeltingPoint(2500)
|
||||
.addRadiation(ItemHazard.saf * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3363,6 +3373,7 @@ public class ModItems {
|
||||
rbmk_fuel_mes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mes)
|
||||
.setYield(100000000D)
|
||||
.setStats(200)
|
||||
.setFunction(EnumBurnFunc.ARCH)
|
||||
.setHeat(1.5D)
|
||||
.setMeltingPoint(2750)
|
||||
.addRadiation(ItemHazard.saf * ItemHazard.rod_rbmk).toItem()
|
||||
@ -3370,23 +3381,27 @@ public class ModItems {
|
||||
rbmk_fuel_hes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hes)
|
||||
.setYield(100000000D)
|
||||
.setStats(250)
|
||||
.setFunction(EnumBurnFunc.LINEAR)
|
||||
.setHeat(1.75D)
|
||||
.setMeltingPoint(3000)
|
||||
.addRadiation(ItemHazard.saf * ItemHazard.rod_rbmk).toItem()
|
||||
.setUnlocalizedName("rbmk_fuel_hes").setTextureName(RefStrings.MODID + ":rbmk_fuel_hes");
|
||||
rbmk_fuel_leaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_leaus)
|
||||
.setYield(100000000D)
|
||||
.setStats(100)
|
||||
.setFunction(EnumBurnFunc.SIGMOID)
|
||||
.setHeat(1.5D)
|
||||
.setMeltingPoint(7029)
|
||||
.setStats(100).setUnlocalizedName("rbmk_fuel_leaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_leaus");
|
||||
.setMeltingPoint(7029).setUnlocalizedName("rbmk_fuel_leaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_leaus");
|
||||
rbmk_fuel_heaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heaus)
|
||||
.setYield(100000000D)
|
||||
.setStats(100)
|
||||
.setFunction(EnumBurnFunc.SQUARE_ROOT)
|
||||
.setHeat(2D)
|
||||
.setMeltingPoint(5211)
|
||||
.setStats(100).setUnlocalizedName("rbmk_fuel_heaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_heaus");
|
||||
.setMeltingPoint(5211).setUnlocalizedName("rbmk_fuel_heaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_heaus");
|
||||
rbmk_fuel_po210be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_po210be)
|
||||
.setYield(100000000D)
|
||||
.setStats(70, 50)
|
||||
.setFunction(EnumBurnFunc.SQUARE_ROOT)
|
||||
.setHeat(0.5D)
|
||||
.setDiffusion(0.2D)
|
||||
.setMeltingPoint(1287)
|
||||
@ -3395,6 +3410,7 @@ public class ModItems {
|
||||
rbmk_fuel_ra226be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ra226be)
|
||||
.setYield(100000000D)
|
||||
.setStats(0D, 40)
|
||||
.setFunction(EnumBurnFunc.PLATEU)
|
||||
.setHeat(0.1D)
|
||||
.setDiffusion(0.5D)
|
||||
.setMeltingPoint(700)
|
||||
@ -3403,6 +3419,7 @@ public class ModItems {
|
||||
rbmk_fuel_pu238be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_pu238be)
|
||||
.setYield(100000000D)
|
||||
.setStats(60, 35)
|
||||
.setFunction(EnumBurnFunc.PLATEU)
|
||||
.setHeat(0.5D)
|
||||
.setDiffusion(0.2D)
|
||||
.setMeltingPoint(1287)
|
||||
@ -3411,12 +3428,14 @@ public class ModItems {
|
||||
rbmk_fuel_balefire_gold = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire_gold)
|
||||
.setYield(100000000D)
|
||||
.setStats(10, 50)
|
||||
.setFunction(EnumBurnFunc.ARCH)
|
||||
.setMeltingPoint(2000)
|
||||
.addRadiation(ItemHazard.au198 * ItemHazard.rod_rbmk).toItem()
|
||||
.setUnlocalizedName("rbmk_fuel_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire_gold");
|
||||
rbmk_fuel_balefire = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire)
|
||||
.setYield(100000000D)
|
||||
.setStats(300, 35)
|
||||
.setFunction(EnumBurnFunc.LINEAR)
|
||||
.setHeat(3D)
|
||||
.setMeltingPoint(3652)
|
||||
.addRadiation(800000F).toItem()
|
||||
@ -3424,6 +3443,7 @@ public class ModItems {
|
||||
rbmk_fuel_drx = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_drx)
|
||||
.setYield(1000000D)
|
||||
.setStats(10000)
|
||||
.setFunction(EnumBurnFunc.QUADRATIC)
|
||||
.setHeat(0.1D)
|
||||
.setMeltingPoint(100000)
|
||||
.addDigamma(0.1F).toItem().setUnlocalizedName("rbmk_fuel_drx").setTextureName(RefStrings.MODID + ":rbmk_fuel_drx");
|
||||
|
||||
@ -24,8 +24,9 @@ public class ItemRBMKRod extends Item implements IItemHazard {
|
||||
|
||||
public ItemRBMKPellet pellet;
|
||||
public String fullName = ""; //full name of the fuel rod
|
||||
public double funcEnd; //endpoint of the function
|
||||
public double reactivity; //endpoint of the function
|
||||
public double selfRate; //self-inflicted flux from self-igniting fuels
|
||||
public EnumBurnFunc function = EnumBurnFunc.LOG_TEN;
|
||||
public double xGen = 0.5D; //multiplier for xenon production
|
||||
public double xBurn = 50D; //divider for xenon burnup
|
||||
public double heat = 1D; //heat produced per outFlux
|
||||
@ -80,11 +81,16 @@ public class ItemRBMKRod extends Item implements IItemHazard {
|
||||
}
|
||||
|
||||
public ItemRBMKRod setStats(double funcEnd, double selfRate) {
|
||||
this.funcEnd = funcEnd;
|
||||
this.reactivity = funcEnd;
|
||||
this.selfRate = selfRate;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemRBMKRod setFunction(EnumBurnFunc func) {
|
||||
this.function = func;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemRBMKRod setHeat(double heat) {
|
||||
this.heat = heat;
|
||||
return this;
|
||||
@ -201,13 +207,59 @@ public class ItemRBMKRod extends Item implements IItemHazard {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static enum EnumBurnFunc {
|
||||
LOG_TEN(EnumChatFormatting.YELLOW + "MEDIUM / LOGARITHMIC"), //log10(x + 1) * reactivity * 50
|
||||
PLATEU(EnumChatFormatting.GREEN + "SAFE / EULER"), //(1 - e^(-x/25)) * reactivity * 100
|
||||
ARCH(EnumChatFormatting.YELLOW + "MEDIUM / NEGATIVE-QUADRATIC"), //x-(x²/1000) * reactivity
|
||||
SIGMOID(EnumChatFormatting.GREEN + "SAFE / SIGMOID"), //100 / (1 + e^(-(x - 50) / 10)) <- tiny amount of reactivity at x=0 !
|
||||
SQUARE_ROOT(EnumChatFormatting.YELLOW + "MEDIUM / SQUARE ROOT"), //sqrt(x) * 10 * reactivity
|
||||
LINEAR(EnumChatFormatting.RED + "DANGEROUS / LINEAR"), //x * reactivity
|
||||
QUADRATIC(EnumChatFormatting.RED + "DANGEROUS / QUADRATIC"); //x^2 / 100 * reactivity
|
||||
|
||||
public String title = "";
|
||||
|
||||
private EnumBurnFunc(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param flux [0;100] ...or at least those are sane levels
|
||||
* @return the amount of reactivity yielded, unmodified by xenon
|
||||
*/
|
||||
public double reactivityFunc(double flux) {
|
||||
return Math.log10(flux + 1) * funcEnd * 0.1D;
|
||||
//TODO: alternate functions for NU and THMEU, peaking at 25%
|
||||
|
||||
switch(this.function) {
|
||||
case LOG_TEN: return Math.log10(flux + 1) * 0.1D * reactivity;
|
||||
case PLATEU: return (1 - Math.pow(Math.E, -flux / 25D)) * 100D * reactivity;
|
||||
case ARCH: return flux - (flux * flux / 1000D) * reactivity;
|
||||
case SIGMOID: return 100D / (1 + Math.pow(Math.E, -(flux - 50D) / 10D)) * reactivity;
|
||||
case SQUARE_ROOT: return Math.sqrt(flux) * reactivity;
|
||||
case LINEAR: return flux * reactivity;
|
||||
case QUADRATIC: return flux * flux / 100D * reactivity;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String getFuncDescription() {
|
||||
|
||||
String x = "x";
|
||||
|
||||
if(selfRate > 0)
|
||||
x = "(x" + EnumChatFormatting.RED + " + " + selfRate + "" + EnumChatFormatting.WHITE + ")";
|
||||
|
||||
switch(this.function) {
|
||||
case LOG_TEN: return "log10(x + 1" + (selfRate > 0 ? (EnumChatFormatting.RED + " + " + selfRate) : "") + EnumChatFormatting.WHITE + ") * " + reactivity;
|
||||
case PLATEU: return "(1 - e^-" + x + " / 25)) * 100 * " + reactivity;
|
||||
case ARCH: return "(" + x + " - " + x + "² / 1000) * " + reactivity;
|
||||
case SIGMOID: return "100 / (1 + e^(-(" + x + " - 50) / 10) * " + reactivity;
|
||||
case SQUARE_ROOT: return "sqrt(" + x + ") * " + reactivity;
|
||||
case LINEAR: return x + " * " + reactivity;
|
||||
case QUADRATIC: return x + "² / 100 * " + reactivity;
|
||||
}
|
||||
|
||||
return "ERROR";
|
||||
}
|
||||
|
||||
/**
|
||||
@ -259,7 +311,8 @@ public class ItemRBMKRod extends Item implements IItemHazard {
|
||||
list.add(EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("trait.rbmx.xenon", ((int)(getPoison(stack) * 1000D) / 1000D) + "%"));
|
||||
list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("trait.rbmx.splitsWith", I18nUtil.resolveKey(nType.unlocalized + ".x")));
|
||||
list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("trait.rbmx.splitsInto", I18nUtil.resolveKey(rType.unlocalized + ".x")));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.fluxFunc", EnumChatFormatting.WHITE + "log10(x + 1" + (selfRate > 0 ? (EnumChatFormatting.RED + " + " + selfRate) : "") + EnumChatFormatting.WHITE + ") * " + funcEnd));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.fluxFunc", EnumChatFormatting.WHITE + getFuncDescription()));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.funcType", this.function.title));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.xenonGen", EnumChatFormatting.WHITE + "x * " + xGen));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.xenonBurn", EnumChatFormatting.WHITE + "x² * " + xBurn));
|
||||
list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("trait.rbmx.heat", heat + "°C"));
|
||||
@ -278,7 +331,8 @@ public class ItemRBMKRod extends Item implements IItemHazard {
|
||||
list.add(EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("trait.rbmk.xenon", ((int)(getPoison(stack) * 1000D) / 1000D) + "%"));
|
||||
list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("trait.rbmk.splitsWith", I18nUtil.resolveKey(nType.unlocalized)));
|
||||
list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("trait.rbmk.splitsInto", I18nUtil.resolveKey(rType.unlocalized)));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.fluxFunc", EnumChatFormatting.WHITE + "log10(x + 1" + (selfRate > 0 ? (EnumChatFormatting.RED + " + " + selfRate) : "") + EnumChatFormatting.WHITE + ") * " + funcEnd));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.fluxFunc", EnumChatFormatting.WHITE + getFuncDescription()));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.funcType", this.function.title));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.xenonGen", EnumChatFormatting.WHITE + "x * " + xGen));
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.xenonBurn", EnumChatFormatting.WHITE + "x² * " + xBurn));
|
||||
list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("trait.rbmk.heat", heat + "°C"));
|
||||
|
||||
@ -3104,6 +3104,7 @@ trait.rbmk.coreTemp=Kerntemperatur: %s
|
||||
trait.rbmk.depletion=Erschöpfung: %s
|
||||
trait.rbmk.diffusion=Diffusion: %s
|
||||
trait.rbmk.fluxFunc=Flux-Funktion: %s
|
||||
trait.rbmk.funcType=Funktionstyp: %s
|
||||
trait.rbmk.heat=Hitze pro Tick bei voller Kraft: %s
|
||||
trait.rbmk.melt=Schmelzpunkt: %s
|
||||
trait.rbmk.neutron.any=Alle Neutronen
|
||||
@ -3121,6 +3122,7 @@ trait.rbmx.coreTemp=Kernentropie: %s
|
||||
trait.rbmx.depletion=Verkrustungsgraad: %s
|
||||
trait.rbmx.diffusion=Fluss: %s
|
||||
trait.rbmx.fluxFunc=Zerstörungsfunktion: %s
|
||||
trait.rbmk.funcType=Funktionsspezifikation: %s
|
||||
trait.rbmx.heat=Verkrustung pro Tick bei voller Kraft: %s
|
||||
trait.rbmx.melt=Kollapstiefe: %s
|
||||
trait.rbmk.neutron.any.x=Alle nicht-euklidischen Formen
|
||||
|
||||
@ -3188,6 +3188,7 @@ trait.rbmk.coreTemp=Core temp: %s
|
||||
trait.rbmk.depletion=Depletion: %s
|
||||
trait.rbmk.diffusion=Diffusion: %s
|
||||
trait.rbmk.fluxFunc=Flux function: %s
|
||||
trait.rbmk.funcType=Function type: %s
|
||||
trait.rbmk.heat=Heat per tick at full power: %s
|
||||
trait.rbmk.melt=Melting point: %s
|
||||
trait.rbmk.neutron.any=All Neutrons
|
||||
@ -3205,6 +3206,7 @@ trait.rbmx.coreTemp=Core entropy: %s
|
||||
trait.rbmx.depletion=Crustyness: %s
|
||||
trait.rbmx.diffusion=Flow: %s
|
||||
trait.rbmx.fluxFunc=Doom function: %s
|
||||
trait.rbmx.funcType=Function specification: %s
|
||||
trait.rbmx.heat=Crust per tick at full power: %s
|
||||
trait.rbmx.melt=Crush depth: %s
|
||||
trait.rbmk.neutron.any.x=All non-euclidean shapes
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user