Compare commits

...

5 Commits

Author SHA1 Message Date
Tom Dodd 80961678c1
Merge pull request #694 from ghostbird03/master
Update zh_cn.lang to 2o.4.2
2020-09-20 20:17:35 +01:00
Tom Dodd 80ae429454 v2o.4.3 2020-09-20 20:16:09 +01:00
ghostbird03 f370bc2189 * Fix a missing key 2020-09-20 11:02:43 +08:00
ghostbird03 e9f4a0bfbd * Update zh_cn.lang to 2o.4.2
* Remady a missing untranslated word in patchouli book
2020-09-20 10:56:44 +08:00
ghostbird03 54d2372be5
Merge pull request #7 from turbodiesel4598/master
update fork
2020-09-20 10:16:37 +08:00
60 changed files with 428 additions and 238 deletions

View File

@ -1,3 +1,17 @@
v2o.4.3
+ Script addons no longer have to be manually unzipped
+ Added logging of script addons being constructed
* Modified turbine throughput leniency and power bonuses
* Fixed irradiator producing too much radiation
* Fixed Patchouli guide not being given to players with radiation disabled
+ Added backup crafting recipe for the Patchouli guide
* Updated default fission fuel radiation levels to take new waste products into account
v2o.4.2 v2o.4.2
+ Added fission waste products + Added fission waste products

View File

@ -1,7 +1,7 @@
mc_version=1.12.2 mc_version=1.12.2
forge_version=14.23.5.2847 forge_version=14.23.5.2847
mapping_version=stable_39 mapping_version=stable_39
mod_version=2o.4.2 mod_version=2o.4.3
ic2_version=2.8.197-ex112 ic2_version=2.8.197-ex112
jei_version=4.15.0.293 jei_version=4.15.0.293

Binary file not shown.

Binary file not shown.

View File

@ -211,7 +211,7 @@ public class NCConfig {
public static double[] turbine_power_per_mb; public static double[] turbine_power_per_mb;
public static double[] turbine_expansion_level; public static double[] turbine_expansion_level;
public static int turbine_mb_per_blade; public static int turbine_mb_per_blade;
public static double turbine_throughput_efficiency_leniency; public static double[] turbine_throughput_leniency_params;
public static double turbine_tension_throughput_factor; public static double turbine_tension_throughput_factor;
public static double turbine_power_bonus_multiplier; public static double turbine_power_bonus_multiplier;
public static double turbine_sound_volume; public static double turbine_sound_volume;
@ -732,8 +732,8 @@ public class NCConfig {
propertyTurbineExpansionLevel.setLanguageKey("gui.nc.config.turbine_expansion_level"); propertyTurbineExpansionLevel.setLanguageKey("gui.nc.config.turbine_expansion_level");
Property propertyTurbineMBPerBlade = config.get(CATEGORY_TURBINE, "turbine_mb_per_blade", 100, Lang.localise("gui.nc.config.turbine_mb_per_blade.comment"), 1, 32767); Property propertyTurbineMBPerBlade = config.get(CATEGORY_TURBINE, "turbine_mb_per_blade", 100, Lang.localise("gui.nc.config.turbine_mb_per_blade.comment"), 1, 32767);
propertyTurbineMBPerBlade.setLanguageKey("gui.nc.config.turbine_mb_per_blade"); propertyTurbineMBPerBlade.setLanguageKey("gui.nc.config.turbine_mb_per_blade");
Property propertyTurbineThroughputEfficiencyLeniency = config.get(CATEGORY_TURBINE, "turbine_throughput_efficiency_leniency", 1D, Lang.localise("gui.nc.config.turbine_throughput_efficiency_leniency.comment"), 0D, 255D); Property propertyTurbineThroughputLeniencyParams = config.get(CATEGORY_TURBINE, "turbine_throughput_leniency_params", new double[] {0.5D, 0.75D}, Lang.localise("gui.nc.config.turbine_throughput_leniency_params.comment"), 0D, 1D);
propertyTurbineThroughputEfficiencyLeniency.setLanguageKey("gui.nc.config.turbine_throughput_efficiency_leniency"); propertyTurbineThroughputLeniencyParams.setLanguageKey("gui.nc.config.turbine_throughput_leniency_params");
Property propertyTurbineTensionThroughputFactor = config.get(CATEGORY_TURBINE, "turbine_tension_throughput_factor", 2D, Lang.localise("gui.nc.config.turbine_tension_throughput_factor.comment"), 1D, 255D); Property propertyTurbineTensionThroughputFactor = config.get(CATEGORY_TURBINE, "turbine_tension_throughput_factor", 2D, Lang.localise("gui.nc.config.turbine_tension_throughput_factor.comment"), 1D, 255D);
propertyTurbineTensionThroughputFactor.setLanguageKey("gui.nc.config.turbine_tension_throughput_factor"); propertyTurbineTensionThroughputFactor.setLanguageKey("gui.nc.config.turbine_tension_throughput_factor");
Property propertyTurbinePowerBonusMultiplier = config.get(CATEGORY_TURBINE, "turbine_power_bonus_multiplier", 1D, Lang.localise("gui.nc.config.turbine_power_bonus_multiplier.comment"), 0D, 255D); Property propertyTurbinePowerBonusMultiplier = config.get(CATEGORY_TURBINE, "turbine_power_bonus_multiplier", 1D, Lang.localise("gui.nc.config.turbine_power_bonus_multiplier.comment"), 0D, 255D);
@ -1193,7 +1193,7 @@ public class NCConfig {
propertyOrderTurbine.add(propertyTurbinePowerPerMB.getName()); propertyOrderTurbine.add(propertyTurbinePowerPerMB.getName());
propertyOrderTurbine.add(propertyTurbineExpansionLevel.getName()); propertyOrderTurbine.add(propertyTurbineExpansionLevel.getName());
propertyOrderTurbine.add(propertyTurbineMBPerBlade.getName()); propertyOrderTurbine.add(propertyTurbineMBPerBlade.getName());
propertyOrderTurbine.add(propertyTurbineThroughputEfficiencyLeniency.getName()); propertyOrderTurbine.add(propertyTurbineThroughputLeniencyParams.getName());
propertyOrderTurbine.add(propertyTurbineTensionThroughputFactor.getName()); propertyOrderTurbine.add(propertyTurbineTensionThroughputFactor.getName());
propertyOrderTurbine.add(propertyTurbinePowerBonusMultiplier.getName()); propertyOrderTurbine.add(propertyTurbinePowerBonusMultiplier.getName());
propertyOrderTurbine.add(propertyTurbineSoundVolume.getName()); propertyOrderTurbine.add(propertyTurbineSoundVolume.getName());
@ -1519,7 +1519,7 @@ public class NCConfig {
turbine_power_per_mb = readDoubleArrayFromConfig(propertyTurbinePowerPerMB); turbine_power_per_mb = readDoubleArrayFromConfig(propertyTurbinePowerPerMB);
turbine_expansion_level = readDoubleArrayFromConfig(propertyTurbineExpansionLevel); turbine_expansion_level = readDoubleArrayFromConfig(propertyTurbineExpansionLevel);
turbine_mb_per_blade = propertyTurbineMBPerBlade.getInt(); turbine_mb_per_blade = propertyTurbineMBPerBlade.getInt();
turbine_throughput_efficiency_leniency = propertyTurbineThroughputEfficiencyLeniency.getDouble(); turbine_throughput_leniency_params = readDoubleArrayFromConfig(propertyTurbineThroughputLeniencyParams);
turbine_tension_throughput_factor = propertyTurbineTensionThroughputFactor.getDouble(); turbine_tension_throughput_factor = propertyTurbineTensionThroughputFactor.getDouble();
turbine_power_bonus_multiplier = propertyTurbinePowerBonusMultiplier.getDouble(); turbine_power_bonus_multiplier = propertyTurbinePowerBonusMultiplier.getDouble();
turbine_sound_volume = propertyTurbineSoundVolume.getDouble(); turbine_sound_volume = propertyTurbineSoundVolume.getDouble();
@ -1841,7 +1841,7 @@ public class NCConfig {
propertyTurbinePowerPerMB.set(turbine_power_per_mb); propertyTurbinePowerPerMB.set(turbine_power_per_mb);
propertyTurbineExpansionLevel.set(turbine_expansion_level); propertyTurbineExpansionLevel.set(turbine_expansion_level);
propertyTurbineMBPerBlade.set(turbine_mb_per_blade); propertyTurbineMBPerBlade.set(turbine_mb_per_blade);
propertyTurbineThroughputEfficiencyLeniency.set(turbine_throughput_efficiency_leniency); propertyTurbineThroughputLeniencyParams.set(turbine_throughput_leniency_params);
propertyTurbineTensionThroughputFactor.set(turbine_tension_throughput_factor); propertyTurbineTensionThroughputFactor.set(turbine_tension_throughput_factor);
propertyTurbinePowerBonusMultiplier.set(turbine_power_bonus_multiplier); propertyTurbinePowerBonusMultiplier.set(turbine_power_bonus_multiplier);
propertyTurbineSoundVolume.set(turbine_sound_volume); propertyTurbineSoundVolume.set(turbine_sound_volume);
@ -2005,14 +2005,14 @@ public class NCConfig {
fissionPlacement.add(entry.getKey() + " -> " + entry.getValue()); fissionPlacement.add(entry.getKey() + " -> " + entry.getValue());
} }
Property propertyFissionPlacement = info.get(CATEGORY_OUTPUT, "fission_placement", fissionPlacement.toArray(new String[fissionPlacement.size()]));
propertyFissionPlacement.setLanguageKey("gui.nc.config.fission_placement");
List<String> turbinePlacement = new ArrayList<>(); List<String> turbinePlacement = new ArrayList<>();
for (Object2ObjectMap.Entry<String, String> entry : TurbinePlacement.RULE_MAP_RAW.object2ObjectEntrySet()) { for (Object2ObjectMap.Entry<String, String> entry : TurbinePlacement.RULE_MAP_RAW.object2ObjectEntrySet()) {
turbinePlacement.add(entry.getKey() + " -> " + entry.getValue()); turbinePlacement.add(entry.getKey() + " -> " + entry.getValue());
} }
Property propertyFissionPlacement = info.get(CATEGORY_OUTPUT, "fission_placement", fissionPlacement.toArray(new String[fissionPlacement.size()]));
propertyFissionPlacement.setLanguageKey("gui.nc.config.fission_placement");
Property propertyTurbinePlacement = info.get(CATEGORY_OUTPUT, "turbine_placement", turbinePlacement.toArray(new String[turbinePlacement.size()])); Property propertyTurbinePlacement = info.get(CATEGORY_OUTPUT, "turbine_placement", turbinePlacement.toArray(new String[turbinePlacement.size()]));
propertyTurbinePlacement.setLanguageKey("gui.nc.config.turbine_placement"); propertyTurbinePlacement.setLanguageKey("gui.nc.config.turbine_placement");

View File

@ -9,17 +9,15 @@ import nc.util.*;
public class ScriptAddonHandler { public class ScriptAddonHandler {
public static final ObjectSet<File> SCRIPT_ADDON_DIRS = new ObjectOpenHashSet<>();
public static void init() throws IOException { public static void init() throws IOException {
File nc = new File("resources/nuclearcraft"); NCUtil.getLogger().info("Constructing NuclearCraft Script Addons...");
if (!nc.exists()) {
nc.mkdirs(); new File("resources/nuclearcraft").mkdirs();
}
for (String s : new String[] {"addons", "advancements", "blockstates", "lang", "loot_tables", "models/block", "models/item", "patchouli_books/guide", "textures/blocks", "textures/items"}) { for (String s : new String[] {"addons", "advancements", "blockstates", "lang", "loot_tables", "models/block", "models/item", "patchouli_books/guide", "textures/blocks", "textures/items"}) {
File f = new File("resources/nuclearcraft/" + s); new File("resources/nuclearcraft/" + s).mkdirs();
if (!f.exists()) {
f.mkdirs();
}
} }
File scripts = new File("scripts/nc_script_addons"); File scripts = new File("scripts/nc_script_addons");
@ -32,46 +30,75 @@ public class ScriptAddonHandler {
legacy.delete(); legacy.delete();
} }
File temp = new File("resources/nuclearcraft/addons/.temp");
temp.mkdirs();
File addons = new File("resources/nuclearcraft/addons"); File addons = new File("resources/nuclearcraft/addons");
for (File f : addons.listFiles()) {
if (IOHelper.isZip(f)) {
String fileName = f.getName();
if (fileName.endsWith(".zip") || fileName.endsWith(".jar")) {
fileName = StringHelper.removeSuffix(fileName, 4);
}
IOHelper.unzip(f, "resources/nuclearcraft/addons/.temp/" + fileName);
}
}
for (File f : addons.listFiles()) { for (File f : addons.listFiles()) {
if (f.isDirectory()) { if (f.isDirectory()) {
copyAddons(f); copyAddons(f);
} }
} }
FileUtils.deleteDirectory(temp);
for (File f : SCRIPT_ADDON_DIRS) {
NCUtil.getLogger().info("Constructed \"" + f.getName() + "\" Script Addon!");
}
} }
public static final String[] NC_ASSETS = {"advancements", "blockstates", "loot_tables", "models", "patchouli_books", "textures"}; public static final String[] NC_ASSETS = {"advancements", "blockstates", "loot_tables", "models", "patchouli_books", "textures"};
public static final String[] ADDON_ASSETS = {"advancements", "blockstates", "contenttweaker", "lang", "loot_tables", "models", "patchouli_books", "scripts", "textures"}; public static final String[] ADDON_ASSETS = {"advancements", "blockstates", "contenttweaker", "lang", "loot_tables", "models", "patchouli_books", "scripts", "textures"};
public static final String[] IGNORE_SUFFIX = {".ignore", ".disabled"};
public static void copyAddons(File dir) throws IOException { public static void copyAddons(File dir) throws IOException {
if (dir.getName().toLowerCase().endsWith(".disabled")) { String dirName = dir.getName();
String dirNameLowerCase = dirName.toLowerCase();
for (String suffix : IGNORE_SUFFIX) {
if (dirNameLowerCase.endsWith(suffix)) {
return; return;
} }
}
for (File f : dir.listFiles()) { for (File f : dir.listFiles()) {
if (f.isDirectory()) { if (f.isDirectory()) {
for (String s : NC_ASSETS) { for (String s : NC_ASSETS) {
if (f.getName().equals(s)) { if (f.getName().equals(s)) {
FileUtils.copyDirectory(f, new File("resources/nuclearcraft/" + s)); FileUtils.copyDirectory(f, new File("resources/nuclearcraft/" + s));
SCRIPT_ADDON_DIRS.add(dir);
break; break;
} }
} }
if (f.getName().equals("lang")) { if (f.getName().equals("lang")) {
copyLangs(dir, f); copyLangs(dir, f);
SCRIPT_ADDON_DIRS.add(dir);
} }
else if (f.getName().equals("scripts")) { else if (f.getName().equals("scripts")) {
File legacy = new File("scripts/nuclearcraft/" + dir.getName()); File legacy = new File("scripts/nuclearcraft/" + dirName);
if (legacy.exists()) { if (legacy.exists()) {
FileUtils.deleteDirectory(legacy); FileUtils.deleteDirectory(legacy);
} }
FileUtils.copyDirectory(f, new File("scripts/nc_script_addons/" + dir.getName())); FileUtils.copyDirectory(f, new File("scripts/nc_script_addons/" + dirName));
SCRIPT_ADDON_DIRS.add(dir);
} }
else if (f.getName().equals("contenttweaker")) { else if (f.getName().equals("contenttweaker")) {
FileUtils.copyDirectory(f, new File("resources/contenttweaker")); FileUtils.copyDirectory(f, new File("resources/contenttweaker"));
SCRIPT_ADDON_DIRS.add(dir);
} }
else { else {

View File

@ -490,28 +490,28 @@ public class JEIRecipeWrapper {
@Override @Override
protected int getProgressArrowTime() { protected int getProgressArrowTime() {
return (int) (getDecayLifetime() / 4D); return (int) (getDecayGeneratorLifetime() / 4D);
} }
protected double getDecayLifetime() { protected double getDecayGeneratorLifetime() {
if (recipe == null) { if (recipe == null) {
return 1200D; return 1200D;
} }
return recipe.getDecayLifetime(); return recipe.getDecayGeneratorLifetime();
} }
protected double getDecayPower() { protected double getDecayGeneratorPower() {
if (recipe == null) { if (recipe == null) {
return 0D; return 0D;
} }
return recipe.getDecayPower(); return recipe.getDecayGeneratorPower();
} }
protected double getDecayRadiation() { protected double getDecayGeneratorRadiation() {
if (recipe == null) { if (recipe == null) {
return 0D; return 0D;
} }
return recipe.getDecayRadiation(); return recipe.getDecayGeneratorRadiation();
} }
@Override @Override
@ -519,9 +519,9 @@ public class JEIRecipeWrapper {
List<String> tooltip = new ArrayList<>(); List<String> tooltip = new ArrayList<>();
if (mouseX >= 73 - 47 && mouseY >= 34 - 30 && mouseX < 73 - 47 + 37 + 1 && mouseY < 34 - 30 + 18 + 1) { if (mouseX >= 73 - 47 && mouseY >= 34 - 30 && mouseX < 73 - 47 + 37 + 1 && mouseY < 34 - 30 + 18 + 1) {
tooltip.add(TextFormatting.GREEN + BLOCK_LIFETIME + " " + TextFormatting.WHITE + UnitHelper.applyTimeUnitShort(getDecayLifetime(), 3, 1)); tooltip.add(TextFormatting.GREEN + BLOCK_LIFETIME + " " + TextFormatting.WHITE + UnitHelper.applyTimeUnitShort(getDecayGeneratorLifetime(), 3, 1));
tooltip.add(TextFormatting.LIGHT_PURPLE + BLOCK_POWER + " " + TextFormatting.WHITE + UnitHelper.prefix(getDecayPower(), 5, "RF/t")); tooltip.add(TextFormatting.LIGHT_PURPLE + BLOCK_POWER + " " + TextFormatting.WHITE + UnitHelper.prefix(getDecayGeneratorPower(), 5, "RF/t"));
double radiation = getDecayRadiation(); double radiation = getDecayGeneratorRadiation();
if (radiation > 0D) { if (radiation > 0D) {
tooltip.add(TextFormatting.GOLD + BLOCK_RADIATION + " " + RadiationHelper.radsColoredPrefix(radiation, true)); tooltip.add(TextFormatting.GOLD + BLOCK_RADIATION + " " + RadiationHelper.radsColoredPrefix(radiation, true));
} }
@ -614,7 +614,7 @@ public class JEIRecipeWrapper {
} }
double radiation = getIrradiatorBaseProcessRadiation(); double radiation = getIrradiatorBaseProcessRadiation();
if (radiation > 0D) { if (radiation > 0D) {
tooltip.add(TextFormatting.GOLD + FUEL_RADIATION + " " + RadiationHelper.radsColoredPrefix(radiation, true)); tooltip.add(TextFormatting.GOLD + RADIATION_PER_FLUX + " " + RadiationHelper.getRadiationTextColor(radiation) + UnitHelper.prefix(radiation / RecipeStats.getFissionMaxModeratorLineFlux(), 3, "Rad/t/N"));
} }
} }
@ -624,7 +624,7 @@ public class JEIRecipeWrapper {
private static final String FLUX_REQUIRED = Lang.localise("jei.nuclearcraft.irradiator_flux_required"); private static final String FLUX_REQUIRED = Lang.localise("jei.nuclearcraft.irradiator_flux_required");
private static final String HEAT_PER_FLUX = Lang.localise("jei.nuclearcraft.irradiator_heat_per_flux"); private static final String HEAT_PER_FLUX = Lang.localise("jei.nuclearcraft.irradiator_heat_per_flux");
private static final String EFFICIENCY = Lang.localise("jei.nuclearcraft.irradiator_process_efficiency"); private static final String EFFICIENCY = Lang.localise("jei.nuclearcraft.irradiator_process_efficiency");
private static final String FUEL_RADIATION = Lang.localise("jei.nuclearcraft.base_process_radiation"); private static final String RADIATION_PER_FLUX = Lang.localise("jei.nuclearcraft.radiation_per_flux");
} }
public static class PebbleFission extends JEIRecipeWrapperAbstract<PebbleFission> { public static class PebbleFission extends JEIRecipeWrapperAbstract<PebbleFission> {

View File

@ -335,7 +335,7 @@ public class TileFissionIrradiator extends TileFissionPart implements ITileFilte
public void process() { public void process() {
time += getSpeedMultiplier(); time += getSpeedMultiplier();
getRadiationSource().setRadiationLevel(baseProcessRadiation * getSpeedMultiplier()); getRadiationSource().setRadiationLevel(baseProcessRadiation * getSpeedMultiplier() / RecipeStats.getFissionMaxModeratorLineFlux());
while (time >= baseProcessTime) { while (time >= baseProcessTime) {
finishProcess(); finishProcess();
} }

View File

@ -63,7 +63,7 @@ public class GuiTurbineController extends GuiMultiblock<Turbine, ITurbineControl
else { else {
double rateRatio = multiblock.recipeInputRate / (double) multiblock.getLogic().getMaxRecipeRateMultiplier(); double rateRatio = multiblock.recipeInputRate / (double) multiblock.getLogic().getMaxRecipeRateMultiplier();
double rateRatioFP = multiblock.recipeInputRateFP / multiblock.getLogic().getMaxRecipeRateMultiplier(); double rateRatioFP = multiblock.recipeInputRateFP / multiblock.getLogic().getMaxRecipeRateMultiplier();
inputRate = Lang.localise("gui.nc.container.turbine_controller.fluid_rate") + " " + UnitHelper.prefix(multiblock.recipeInputRateFP, 6, "B/t", -1) + " [" + Math.round(100D * rateRatioFP) + (rateRatio > 1D ? "%] [!]" : "%]"); inputRate = Lang.localise("gui.nc.container.turbine_controller.fluid_rate") + " " + UnitHelper.prefix(NCMath.roundTo(multiblock.recipeInputRateFP, 0.1D), 6, "B/t", -1) + " [" + Math.round(100D * rateRatioFP) + (rateRatio > 1D ? "%] [!]" : "%]");
inputRateWidth = inputRateWidth - width(inputRate) > 1 ? width(inputRate) : Math.max(inputRateWidth, width(inputRate)); inputRateWidth = inputRateWidth - width(inputRate) > 1 ? width(inputRate) : Math.max(inputRateWidth, width(inputRate));
} }
fontRenderer.drawString(inputRate, xSize / 2 - (NCUtil.isModifierKeyDown() ? width(inputRate) : inputRateWidth) / 2, 60, multiblock.bearingTension <= 0D ? fontColor : multiblock.isTurbineOn ? 0xFFFFFF - (int) (255D * MathHelper.clamp(2D * multiblock.bearingTension, 0D, 1D)) - 256 * (int) (255D * MathHelper.clamp(2D * multiblock.bearingTension - 1D, 0D, 1D)) : ColorHelper.blend(15641088, 0xFF0000, (float) multiblock.bearingTension)); fontRenderer.drawString(inputRate, xSize / 2 - (NCUtil.isModifierKeyDown() ? width(inputRate) : inputRateWidth) / 2, 60, multiblock.bearingTension <= 0D ? fontColor : multiblock.isTurbineOn ? 0xFFFFFF - (int) (255D * MathHelper.clamp(2D * multiblock.bearingTension, 0D, 1D)) - 256 * (int) (255D * MathHelper.clamp(2D * multiblock.bearingTension - 1D, 0D, 1D)) : ColorHelper.blend(15641088, 0xFF0000, (float) multiblock.bearingTension));

View File

@ -56,7 +56,13 @@ public class Turbine extends CuboidalMultiblock<ITurbinePart, TurbineUpdatePacke
public double rawPower = 0D, rawLimitPower = 0D, rawMaxPower = 0D; public double rawPower = 0D, rawLimitPower = 0D, rawMaxPower = 0D;
public EnumFacing flowDir = null; public EnumFacing flowDir = null;
public int shaftWidth = 0, inertia = 0, bladeLength = 0, noBladeSets = 0, recipeInputRate = 0, dynamoCoilCount = 0, dynamoCoilCountOpposite = 0; public int shaftWidth = 0, inertia = 0, bladeLength = 0, noBladeSets = 0, recipeInputRate = 0, dynamoCoilCount = 0, dynamoCoilCountOpposite = 0;
public double totalExpansionLevel = 1D, idealTotalExpansionLevel = 1D, basePowerPerMB = 0D, recipeInputRateFP = 0D, minBladeExpansionCoefficient = Double.MAX_VALUE, maxBladeExpansionCoefficient = 1D, minStatorExpansionCoefficient = 1D, maxStatorExpansionCoefficient = Double.MIN_VALUE, effectiveMaxLength = turbine_max_size, bearingTension = 0D; public double totalExpansionLevel = 1D, idealTotalExpansionLevel = 1D, basePowerPerMB = 0D, recipeInputRateFP = 0D;
public double minBladeExpansionCoefficient = Double.MAX_VALUE;
public double maxBladeExpansionCoefficient = 1D;
public double minStatorExpansionCoefficient = 1D;
public double maxStatorExpansionCoefficient = Double.MIN_VALUE;
public int effectiveMaxLength = turbine_max_size;
public double bearingTension = 0D;
public DoubleList expansionLevels = new DoubleArrayList(), rawBladeEfficiencies = new DoubleArrayList(); public DoubleList expansionLevels = new DoubleArrayList(), rawBladeEfficiencies = new DoubleArrayList();
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ -221,6 +227,14 @@ public class Turbine extends CuboidalMultiblock<ITurbinePart, TurbineUpdatePacke
return bladeLength + shaftWidth / 2D; return bladeLength + shaftWidth / 2D;
} }
public int getMinimumBladeArea() {
return 4 * Math.max(1, getMinimumInteriorLength() - 2);
}
public int getMinimumBladeVolume() {
return getBladeArea() * getMinimumInteriorLength();
}
// Modified Kurtchekov stuff! // Modified Kurtchekov stuff!
protected ITurbineRotorBlade getBlade(BlockPos pos) { protected ITurbineRotorBlade getBlade(BlockPos pos) {
@ -336,7 +350,7 @@ public class Turbine extends CuboidalMultiblock<ITurbinePart, TurbineUpdatePacke
data.setDouble("maxBladeExpansionCoefficient", maxBladeExpansionCoefficient); data.setDouble("maxBladeExpansionCoefficient", maxBladeExpansionCoefficient);
data.setDouble("minStatorExpansionCoefficient", minStatorExpansionCoefficient); data.setDouble("minStatorExpansionCoefficient", minStatorExpansionCoefficient);
data.setDouble("maxStatorExpansionCoefficient", maxStatorExpansionCoefficient); data.setDouble("maxStatorExpansionCoefficient", maxStatorExpansionCoefficient);
data.setDouble("effectiveMaxLength", effectiveMaxLength); data.setInteger("effectiveMaxLength", effectiveMaxLength);
data.setDouble("bearingTension", bearingTension); data.setDouble("bearingTension", bearingTension);
data.setInteger("expansionLevelsSize", expansionLevels.size()); data.setInteger("expansionLevelsSize", expansionLevels.size());
for (int i = 0; i < expansionLevels.size(); i++) { for (int i = 0; i < expansionLevels.size(); i++) {
@ -383,7 +397,7 @@ public class Turbine extends CuboidalMultiblock<ITurbinePart, TurbineUpdatePacke
maxBladeExpansionCoefficient = data.getDouble("maxBladeExpansionCoefficient"); maxBladeExpansionCoefficient = data.getDouble("maxBladeExpansionCoefficient");
minStatorExpansionCoefficient = data.getDouble("minStatorExpansionCoefficient"); minStatorExpansionCoefficient = data.getDouble("minStatorExpansionCoefficient");
maxStatorExpansionCoefficient = data.getDouble("maxStatorExpansionCoefficient"); maxStatorExpansionCoefficient = data.getDouble("maxStatorExpansionCoefficient");
effectiveMaxLength = data.getDouble("effectiveMaxLength"); effectiveMaxLength = data.getInteger("effectiveMaxLength");
bearingTension = data.getDouble("bearingTension"); bearingTension = data.getDouble("bearingTension");
expansionLevels = new DoubleArrayList(); expansionLevels = new DoubleArrayList();
if (data.hasKey("expansionLevelsSize")) { if (data.hasKey("expansionLevelsSize")) {

View File

@ -274,8 +274,10 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
getTurbine().angVel = getTurbine().rotorAngle = 0F; getTurbine().angVel = getTurbine().rotorAngle = 0F;
getTurbine().flowDir = null; getTurbine().flowDir = null;
getTurbine().shaftWidth = getTurbine().inertia = getTurbine().bladeLength = getTurbine().noBladeSets = getTurbine().recipeInputRate = 0; getTurbine().shaftWidth = getTurbine().inertia = getTurbine().bladeLength = getTurbine().noBladeSets = getTurbine().recipeInputRate = 0;
getTurbine().totalExpansionLevel = getTurbine().idealTotalExpansionLevel = getTurbine().maxBladeExpansionCoefficient = getTurbine().minStatorExpansionCoefficient = 1D; getTurbine().totalExpansionLevel = getTurbine().idealTotalExpansionLevel = 1D;
getTurbine().minBladeExpansionCoefficient = Double.MAX_VALUE; getTurbine().minBladeExpansionCoefficient = Double.MAX_VALUE;
getTurbine().maxBladeExpansionCoefficient = 1D;
getTurbine().minStatorExpansionCoefficient = 1D;
getTurbine().maxStatorExpansionCoefficient = Double.MIN_VALUE; getTurbine().maxStatorExpansionCoefficient = Double.MIN_VALUE;
getTurbine().particleEffect = "cloud"; getTurbine().particleEffect = "cloud";
getTurbine().particleSpeedMult = 1D / 23.2D; getTurbine().particleSpeedMult = 1D / 23.2D;
@ -848,7 +850,7 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
getTurbine().recipeInputRate = Math.min(getTurbine().tanks.get(0).getFluidAmount(), (int) (turbine_tension_throughput_factor * getMaxRecipeRateMultiplier())); getTurbine().recipeInputRate = Math.min(getTurbine().tanks.get(0).getFluidAmount(), (int) (turbine_tension_throughput_factor * getMaxRecipeRateMultiplier()));
recipeInputRateDiff = Math.abs(recipeInputRateDiff - getTurbine().recipeInputRate); recipeInputRateDiff = Math.abs(recipeInputRateDiff - getTurbine().recipeInputRate);
double roundingFactor = Math.max(0D, 2D * Math.log1p(getTurbine().recipeInputRate / (1 + recipeInputRateDiff))); double roundingFactor = Math.max(0D, 1.5D * Math.log1p(getTurbine().recipeInputRate / (1D + recipeInputRateDiff)));
getTurbine().recipeInputRateFP = (roundingFactor * getTurbine().recipeInputRateFP + getTurbine().recipeInputRate) / (1D + roundingFactor); getTurbine().recipeInputRateFP = (roundingFactor * getTurbine().recipeInputRateFP + getTurbine().recipeInputRate) / (1D + roundingFactor);
if (!getTurbine().tanks.get(1).isEmpty()) { if (!getTurbine().tanks.get(1).isEmpty()) {
@ -943,20 +945,18 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
} }
public double getThroughputEfficiency() { public double getThroughputEfficiency() {
double leniencyMult = Math.max(turbine_throughput_efficiency_leniency, getTurbine().idealTotalExpansionLevel <= 1D || getTurbine().maxBladeExpansionCoefficient <= 1D ? Double.MAX_VALUE : Math.ceil(Math.log(getTurbine().idealTotalExpansionLevel) / Math.log(getTurbine().maxBladeExpansionCoefficient))); double effectiveMinLength = getTurbine().idealTotalExpansionLevel <= 1D || getTurbine().maxBladeExpansionCoefficient <= 1D ? getMaximumInteriorLength() : Math.ceil(Math.log(getTurbine().idealTotalExpansionLevel) / Math.log(getTurbine().maxBladeExpansionCoefficient));
double absoluteLeniency = getTurbine().getBladeArea() * leniencyMult * turbine_mb_per_blade; double absoluteLeniency = effectiveMinLength * getTurbine().getMinimumBladeArea() * turbine_mb_per_blade;
return getMaxRecipeRateMultiplier() == 0 ? 1D : Math.min(1D, (getTurbine().recipeInputRateFP + absoluteLeniency) / getMaxRecipeRateMultiplier()); double throughputRatio = getMaxRecipeRateMultiplier() == 0 ? 1D : Math.min(1D, (getTurbine().recipeInputRateFP + absoluteLeniency) / getMaxRecipeRateMultiplier());
return throughputRatio >= turbine_throughput_leniency_params[1] ? 1D : (1D - turbine_throughput_leniency_params[0]) * Math.sin(throughputRatio * Math.PI / (2D * turbine_throughput_leniency_params[1])) + turbine_throughput_leniency_params[0];
} }
public void setEffectiveMaxLength() { public void setEffectiveMaxLength() {
if (getTurbine().minBladeExpansionCoefficient <= 1) { if (getTurbine().minBladeExpansionCoefficient <= 1D || getTurbine().minStatorExpansionCoefficient >= 1D) {
getTurbine().effectiveMaxLength = getMaximumInteriorLength(); getTurbine().effectiveMaxLength = getMaximumInteriorLength();
} }
else if (getTurbine().minStatorExpansionCoefficient >= 1) {
getTurbine().effectiveMaxLength = NCMath.clamp(Math.log(getTurbine().idealTotalExpansionLevel) / Math.log(getTurbine().minBladeExpansionCoefficient), 1D, getMaximumInteriorLength());
}
else { else {
getTurbine().effectiveMaxLength = NCMath.clamp((Math.log(getTurbine().idealTotalExpansionLevel) - getMaximumInteriorLength() * Math.log(getTurbine().minStatorExpansionCoefficient)) / (Math.log(getTurbine().minBladeExpansionCoefficient) - Math.log(getTurbine().minStatorExpansionCoefficient)), 1D, getMaximumInteriorLength()); getTurbine().effectiveMaxLength = NCMath.toInt(Math.ceil(NCMath.clamp((Math.log(getTurbine().idealTotalExpansionLevel) - getMaximumInteriorLength() * Math.log(getTurbine().minStatorExpansionCoefficient)) / (Math.log(getTurbine().minBladeExpansionCoefficient) - Math.log(getTurbine().minStatorExpansionCoefficient)), 1D, getMaximumInteriorLength())));
} }
} }
@ -1191,7 +1191,7 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
for (ITurbineController controller : getParts(ITurbineController.class)) { for (ITurbineController controller : getParts(ITurbineController.class)) {
controller.setIsRenderer(false); controller.setIsRenderer(false);
} }
NCUtil.getLogger().error("The assembly state of the turbine at " + getTurbine().getMiddleCoord().toString() + " is different between the server and client(s). It is recommended that the multiblock is completely disassambled and rebuilt if these errors continue!"); NCUtil.getLogger().error("The assembly state of the turbine at " + getTurbine().getMiddleCoord().toString() + " is different between the server and client(s). It is recommended that the multiblock is completely disassambled and rebuilt if these errors continually appear!");
return; return;
} }

View File

@ -22,7 +22,7 @@ import nc.multiblock.*;
import nc.network.PacketHandler; import nc.network.PacketHandler;
import nc.radiation.*; import nc.radiation.*;
import nc.radiation.environment.RadiationEnvironmentHandler; import nc.radiation.environment.RadiationEnvironmentHandler;
import nc.recipe.NCRecipes; import nc.recipe.*;
import nc.recipe.vanilla.CraftingRecipeHandler; import nc.recipe.vanilla.CraftingRecipeHandler;
import nc.util.*; import nc.util.*;
import nc.worldgen.biome.NCBiomes; import nc.worldgen.biome.NCBiomes;
@ -172,6 +172,8 @@ public class CommonProxy {
MinecraftForge.EVENT_BUS.register(new ItemUseHandler()); MinecraftForge.EVENT_BUS.register(new ItemUseHandler());
RecipeStats.init();
PlacementRule.postInit(); PlacementRule.postInit();
if (ModCheck.projectELoaded() && register_projecte_emc) { if (ModCheck.projectELoaded() && register_projecte_emc) {

View File

@ -508,8 +508,8 @@ public class RadSources {
return (rad1 * amount1 + rad2 * amount2) * INGOT / 9D; return (rad1 * amount1 + rad2 * amount2) * INGOT / 9D;
} }
public static double getDepletedFuelRadiation(double rad1, int amount1, double rad2, int amount2, double rad3, int amount3, double rad4, int amount4) { public static double getDepletedFuelRadiation(double rad1, int amount1, double rad2, int amount2, double rad3, int amount3, double rad4, int amount4, double waste1, double waste2, double m, double r) {
return (rad1 * amount1 + rad2 * amount2 + rad3 * amount3 + rad4 * amount4) * INGOT / 9D; return (rad1 * amount1 + rad2 * amount2 + rad3 * amount3 + rad4 * amount4 + waste1 * m * r + waste2 * m * (1D - r)) * INGOT / 9D;
} }
public static final double TBU = getFuelRadiation(THORIUM, 8.5D, URANIUM_233, 0.5D); public static final double TBU = getFuelRadiation(THORIUM, 8.5D, URANIUM_233, 0.5D);
@ -548,75 +548,75 @@ public class RadSources {
public static final double LECf_251 = getFuelRadiation(CALIFORNIUM_252, 8, CALIFORNIUM_251, 1); public static final double LECf_251 = getFuelRadiation(CALIFORNIUM_252, 8, CALIFORNIUM_251, 1);
public static final double HECf_251 = getFuelRadiation(CALIFORNIUM_252, 6, CALIFORNIUM_251, 3); public static final double HECf_251 = getFuelRadiation(CALIFORNIUM_252, 6, CALIFORNIUM_251, 3);
public static final double DEPLETED_TBU = getDepletedFuelRadiation(URANIUM_233, 1, URANIUM_238, 5, NEPTUNIUM_236, 1, NEPTUNIUM_237, 1); public static final double DEPLETED_TBU = getDepletedFuelRadiation(URANIUM_233, 1, URANIUM_238, 5, NEPTUNIUM_236, 1, NEPTUNIUM_237, 1, STRONTIUM_90, CAESIUM_137, 0.5D, 0.5D);
public static final double DEPLETED_LEU_233 = getDepletedFuelRadiation(URANIUM_238, 5, PLUTONIUM_241, 1, PLUTONIUM_242, 1, AMERICIUM_243, 1); public static final double DEPLETED_LEU_233 = getDepletedFuelRadiation(URANIUM_238, 5, PLUTONIUM_241, 1, PLUTONIUM_242, 1, AMERICIUM_243, 1, STRONTIUM_90, CAESIUM_137, 0.5D, 0.5D);
public static final double DEPLETED_HEU_233 = getDepletedFuelRadiation(URANIUM_235, 1, URANIUM_238, 2, PLUTONIUM_242, 3, AMERICIUM_243, 1); public static final double DEPLETED_HEU_233 = getDepletedFuelRadiation(URANIUM_235, 1, URANIUM_238, 2, PLUTONIUM_242, 3, AMERICIUM_243, 1, STRONTIUM_90, CAESIUM_137, 1.5D, 0.5D);
public static final double DEPLETED_LEU_235 = getDepletedFuelRadiation(URANIUM_238, 4, PLUTONIUM_239, 1, PLUTONIUM_242, 2, AMERICIUM_243, 1); public static final double DEPLETED_LEU_235 = getDepletedFuelRadiation(URANIUM_238, 4, PLUTONIUM_239, 1, PLUTONIUM_242, 2, AMERICIUM_243, 1, 0D, CAESIUM_137, 0.5D, 0.5D);
public static final double DEPLETED_HEU_235 = getDepletedFuelRadiation(URANIUM_238, 3, NEPTUNIUM_236, 1, PLUTONIUM_242, 2, AMERICIUM_243, 1); public static final double DEPLETED_HEU_235 = getDepletedFuelRadiation(URANIUM_238, 3, NEPTUNIUM_236, 1, PLUTONIUM_242, 2, AMERICIUM_243, 1, 0D, CAESIUM_137, 1.5D, 0.5D);
public static final double DEPLETED_LEN_236 = getDepletedFuelRadiation(URANIUM_238, 4, NEPTUNIUM_237, 1, PLUTONIUM_241, 1, PLUTONIUM_242, 2); public static final double DEPLETED_LEN_236 = getDepletedFuelRadiation(URANIUM_238, 4, NEPTUNIUM_237, 1, PLUTONIUM_241, 1, PLUTONIUM_242, 2, 0D, CAESIUM_137, 0.5D, 0.5D);
public static final double DEPLETED_HEN_236 = getDepletedFuelRadiation(URANIUM_238, 4, PLUTONIUM_238, 1, PLUTONIUM_241, 1, PLUTONIUM_242, 1); public static final double DEPLETED_HEN_236 = getDepletedFuelRadiation(URANIUM_238, 4, PLUTONIUM_238, 1, PLUTONIUM_241, 1, PLUTONIUM_242, 1, 0D, CAESIUM_137, 1.5D, 0.5D);
public static final double DEPLETED_LEP_239 = getDepletedFuelRadiation(PLUTONIUM_242, 5, AMERICIUM_242, 1, AMERICIUM_243, 1, CURIUM_246, 1); public static final double DEPLETED_LEP_239 = getDepletedFuelRadiation(PLUTONIUM_242, 5, AMERICIUM_242, 1, AMERICIUM_243, 1, CURIUM_246, 1, STRONTIUM_90, PROMETHIUM_147, 0.5D, 0.5D);
public static final double DEPLETED_HEP_239 = getDepletedFuelRadiation(PLUTONIUM_241, 1, AMERICIUM_242, 1, AMERICIUM_243, 4, CURIUM_243, 1); public static final double DEPLETED_HEP_239 = getDepletedFuelRadiation(PLUTONIUM_241, 1, AMERICIUM_242, 1, AMERICIUM_243, 4, CURIUM_243, 1, STRONTIUM_90, PROMETHIUM_147, 1.5D, 0.5D);
public static final double DEPLETED_LEP_241 = getDepletedFuelRadiation(PLUTONIUM_242, 5, AMERICIUM_243, 1, CURIUM_246, 1, BERKELIUM_247, 1); public static final double DEPLETED_LEP_241 = getDepletedFuelRadiation(PLUTONIUM_242, 5, AMERICIUM_243, 1, CURIUM_246, 1, BERKELIUM_247, 1, STRONTIUM_90, PROMETHIUM_147, 0.5D, 0.5D);
public static final double DEPLETED_HEP_241 = getDepletedFuelRadiation(PLUTONIUM_241, 1, AMERICIUM_242, 1, AMERICIUM_243, 3, CURIUM_246, 2); public static final double DEPLETED_HEP_241 = getDepletedFuelRadiation(PLUTONIUM_241, 1, AMERICIUM_242, 1, AMERICIUM_243, 3, CURIUM_246, 2, STRONTIUM_90, PROMETHIUM_147, 1.5D, 0.5D);
public static final double DEPLETED_MIX_239 = getDepletedFuelRadiation(URANIUM_238, 4, PLUTONIUM_241, 1, PLUTONIUM_242, 2, AMERICIUM_243, 1); public static final double DEPLETED_MIX_239 = getDepletedFuelRadiation(URANIUM_238, 4, PLUTONIUM_241, 1, PLUTONIUM_242, 2, AMERICIUM_243, 1, STRONTIUM_90, PROMETHIUM_147, 0.5D, 0.5D);
public static final double DEPLETED_MIX_241 = getDepletedFuelRadiation(URANIUM_238, 3, PLUTONIUM_241, 1, PLUTONIUM_242, 3, AMERICIUM_243, 1); public static final double DEPLETED_MIX_241 = getDepletedFuelRadiation(URANIUM_238, 3, PLUTONIUM_241, 1, PLUTONIUM_242, 3, AMERICIUM_243, 1, STRONTIUM_90, PROMETHIUM_147, 0.5D, 0.5D);
public static final double DEPLETED_LEA_242 = getDepletedFuelRadiation(AMERICIUM_243, 3, CURIUM_245, 1, CURIUM_246, 3, BERKELIUM_248, 1); public static final double DEPLETED_LEA_242 = getDepletedFuelRadiation(AMERICIUM_243, 3, CURIUM_245, 1, CURIUM_246, 3, BERKELIUM_248, 1, 0D, PROMETHIUM_147, 0.5D, 0.5D);
public static final double DEPLETED_HEA_242 = getDepletedFuelRadiation(AMERICIUM_243, 3, CURIUM_243, 1, CURIUM_246, 2, BERKELIUM_247, 1); public static final double DEPLETED_HEA_242 = getDepletedFuelRadiation(AMERICIUM_243, 3, CURIUM_243, 1, CURIUM_246, 2, BERKELIUM_247, 1, 0D, PROMETHIUM_147, 1.5D, 0.5D);
public static final double DEPLETED_LECm_243 = getDepletedFuelRadiation(CURIUM_246, 4, CURIUM_247, 1, BERKELIUM_247, 2, BERKELIUM_248, 1); public static final double DEPLETED_LECm_243 = getDepletedFuelRadiation(CURIUM_246, 4, CURIUM_247, 1, BERKELIUM_247, 2, BERKELIUM_248, 1, 0D, PROMETHIUM_147, 0.5D, 0.5D);
public static final double DEPLETED_HECm_243 = getDepletedFuelRadiation(CURIUM_245, 1, CURIUM_246, 3, BERKELIUM_247, 2, BERKELIUM_248, 1); public static final double DEPLETED_HECm_243 = getDepletedFuelRadiation(CURIUM_245, 1, CURIUM_246, 3, BERKELIUM_247, 2, BERKELIUM_248, 1, 0D, PROMETHIUM_147, 1.5D, 0.5D);
public static final double DEPLETED_LECm_245 = getDepletedFuelRadiation(CURIUM_246, 4, CURIUM_247, 1, BERKELIUM_247, 2, CALIFORNIUM_249, 1); public static final double DEPLETED_LECm_245 = getDepletedFuelRadiation(CURIUM_246, 4, CURIUM_247, 1, BERKELIUM_247, 2, CALIFORNIUM_249, 1, 0D, EUROPIUM_155, 0.5D, 0.6D);
public static final double DEPLETED_HECm_245 = getDepletedFuelRadiation(CURIUM_246, 3, CURIUM_247, 1, BERKELIUM_247, 2, CALIFORNIUM_249, 1); public static final double DEPLETED_HECm_245 = getDepletedFuelRadiation(CURIUM_246, 3, CURIUM_247, 1, BERKELIUM_247, 2, CALIFORNIUM_249, 1, 0D, EUROPIUM_155, 1.5D, 0.6D);
public static final double DEPLETED_LECm_247 = getDepletedFuelRadiation(CURIUM_246, 5, BERKELIUM_247, 1, BERKELIUM_248, 1, CALIFORNIUM_249, 1); public static final double DEPLETED_LECm_247 = getDepletedFuelRadiation(CURIUM_246, 5, BERKELIUM_247, 1, BERKELIUM_248, 1, CALIFORNIUM_249, 1, 0D, EUROPIUM_155, 0.5D, 0.6D);
public static final double DEPLETED_HECm_247 = getDepletedFuelRadiation(BERKELIUM_247, 4, BERKELIUM_248, 1, CALIFORNIUM_249, 1, CALIFORNIUM_251, 1); public static final double DEPLETED_HECm_247 = getDepletedFuelRadiation(BERKELIUM_247, 4, BERKELIUM_248, 1, CALIFORNIUM_249, 1, CALIFORNIUM_251, 1, 0D, EUROPIUM_155, 1.5D, 0.6D);
public static final double DEPLETED_LEB_248 = getDepletedFuelRadiation(BERKELIUM_247, 5, BERKELIUM_248, 1, CALIFORNIUM_249, 1, CALIFORNIUM_251, 1); public static final double DEPLETED_LEB_248 = getDepletedFuelRadiation(BERKELIUM_247, 5, BERKELIUM_248, 1, CALIFORNIUM_249, 1, CALIFORNIUM_251, 1, RUTHENIUM_106, PROMETHIUM_147, 0.5D, 0.6D);
public static final double DEPLETED_HEB_248 = getDepletedFuelRadiation(BERKELIUM_248, 1, CALIFORNIUM_249, 1, CALIFORNIUM_251, 2, CALIFORNIUM_252, 3); public static final double DEPLETED_HEB_248 = getDepletedFuelRadiation(BERKELIUM_248, 1, CALIFORNIUM_249, 1, CALIFORNIUM_251, 2, CALIFORNIUM_252, 3, RUTHENIUM_106, PROMETHIUM_147, 1.5D, 0.6D);
public static final double DEPLETED_LECf_249 = getDepletedFuelRadiation(CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2); public static final double DEPLETED_LECf_249 = getDepletedFuelRadiation(CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, RUTHENIUM_106, PROMETHIUM_147, 0.5D, 0.6D);
public static final double DEPLETED_HECf_249 = getDepletedFuelRadiation(CALIFORNIUM_250, 1, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2); public static final double DEPLETED_HECf_249 = getDepletedFuelRadiation(CALIFORNIUM_250, 1, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, RUTHENIUM_106, PROMETHIUM_147, 1.5D, 0.6D);
public static final double DEPLETED_LECf_251 = getDepletedFuelRadiation(CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2); public static final double DEPLETED_LECf_251 = getDepletedFuelRadiation(CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, RUTHENIUM_106, EUROPIUM_155, 0.5D, 0.6D);
public static final double DEPLETED_HECf_251 = getDepletedFuelRadiation(CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 1); public static final double DEPLETED_HECf_251 = getDepletedFuelRadiation(CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 2, CALIFORNIUM_252, 1, RUTHENIUM_106, EUROPIUM_155, 1.5D, 0.6D);
public static final double TBU_FISSION = (TBU + DEPLETED_TBU + CAESIUM_137) / 64D; public static final double TBU_FISSION = (TBU + DEPLETED_TBU + CAESIUM_137) / 64D;
public static final double LEU_233_FISSION = (LEU_233 + DEPLETED_LEU_233 + CAESIUM_137) / 64D; public static final double LEU_233_FISSION = (LEU_233 + DEPLETED_LEU_233) / 64D;
public static final double HEU_233_FISSION = (HEU_233 + DEPLETED_HEU_233 + CAESIUM_137) / 64D; public static final double HEU_233_FISSION = (HEU_233 + DEPLETED_HEU_233) / 64D;
public static final double LEU_235_FISSION = (LEU_235 + DEPLETED_LEU_235 + CAESIUM_137) / 64D; public static final double LEU_235_FISSION = (LEU_235 + DEPLETED_LEU_235) / 64D;
public static final double HEU_235_FISSION = (HEU_235 + DEPLETED_HEU_235 + CAESIUM_137) / 64D; public static final double HEU_235_FISSION = (HEU_235 + DEPLETED_HEU_235) / 64D;
public static final double LEN_236_FISSION = (LEN_236 + DEPLETED_LEN_236 + CAESIUM_137) / 64D; public static final double LEN_236_FISSION = (LEN_236 + DEPLETED_LEN_236) / 64D;
public static final double HEN_236_FISSION = (HEN_236 + DEPLETED_HEN_236 + CAESIUM_137) / 64D; public static final double HEN_236_FISSION = (HEN_236 + DEPLETED_HEN_236) / 64D;
public static final double LEP_239_FISSION = (LEP_239 + DEPLETED_LEP_239 + CAESIUM_137) / 64D; public static final double LEP_239_FISSION = (LEP_239 + DEPLETED_LEP_239) / 64D;
public static final double HEP_239_FISSION = (HEP_239 + DEPLETED_HEP_239 + CAESIUM_137) / 64D; public static final double HEP_239_FISSION = (HEP_239 + DEPLETED_HEP_239) / 64D;
public static final double LEP_241_FISSION = (LEP_241 + DEPLETED_LEP_241 + CAESIUM_137) / 64D; public static final double LEP_241_FISSION = (LEP_241 + DEPLETED_LEP_241) / 64D;
public static final double HEP_241_FISSION = (HEP_241 + DEPLETED_HEP_241 + CAESIUM_137) / 64D; public static final double HEP_241_FISSION = (HEP_241 + DEPLETED_HEP_241) / 64D;
public static final double MIX_239_FISSION = (MIX_239 + DEPLETED_MIX_239 + CAESIUM_137) / 64D; public static final double MIX_239_FISSION = (MIX_239 + DEPLETED_MIX_239) / 64D;
public static final double MIX_241_FISSION = (MIX_241 + DEPLETED_MIX_241 + CAESIUM_137) / 64D; public static final double MIX_241_FISSION = (MIX_241 + DEPLETED_MIX_241) / 64D;
public static final double LEA_242_FISSION = (LEA_242 + DEPLETED_LEA_242 + CAESIUM_137) / 64D; public static final double LEA_242_FISSION = (LEA_242 + DEPLETED_LEA_242) / 64D;
public static final double HEA_242_FISSION = (HEA_242 + DEPLETED_HEA_242 + CAESIUM_137) / 64D; public static final double HEA_242_FISSION = (HEA_242 + DEPLETED_HEA_242) / 64D;
public static final double LECm_243_FISSION = (LECm_243 + DEPLETED_LECm_243 + CAESIUM_137) / 64D; public static final double LECm_243_FISSION = (LECm_243 + DEPLETED_LECm_243) / 64D;
public static final double HECm_243_FISSION = (HECm_243 + DEPLETED_HECm_243 + CAESIUM_137) / 64D; public static final double HECm_243_FISSION = (HECm_243 + DEPLETED_HECm_243) / 64D;
public static final double LECm_245_FISSION = (LECm_245 + DEPLETED_LECm_245 + CAESIUM_137) / 64D; public static final double LECm_245_FISSION = (LECm_245 + DEPLETED_LECm_245) / 64D;
public static final double HECm_245_FISSION = (HECm_245 + DEPLETED_HECm_245 + CAESIUM_137) / 64D; public static final double HECm_245_FISSION = (HECm_245 + DEPLETED_HECm_245) / 64D;
public static final double LECm_247_FISSION = (LECm_247 + DEPLETED_LECm_247 + CAESIUM_137) / 64D; public static final double LECm_247_FISSION = (LECm_247 + DEPLETED_LECm_247) / 64D;
public static final double HECm_247_FISSION = (HECm_247 + DEPLETED_HECm_247 + CAESIUM_137) / 64D; public static final double HECm_247_FISSION = (HECm_247 + DEPLETED_HECm_247) / 64D;
public static final double LEB_248_FISSION = (LEB_248 + DEPLETED_LEB_248 + CAESIUM_137) / 64D; public static final double LEB_248_FISSION = (LEB_248 + DEPLETED_LEB_248) / 64D;
public static final double HEB_248_FISSION = (HEB_248 + DEPLETED_HEB_248 + CAESIUM_137) / 64D; public static final double HEB_248_FISSION = (HEB_248 + DEPLETED_HEB_248) / 64D;
public static final double LECf_249_FISSION = (LECf_249 + DEPLETED_LECf_249 + CAESIUM_137) / 64D; public static final double LECf_249_FISSION = (LECf_249 + DEPLETED_LECf_249) / 64D;
public static final double HECf_249_FISSION = (HECf_249 + DEPLETED_HECf_249 + CAESIUM_137) / 64D; public static final double HECf_249_FISSION = (HECf_249 + DEPLETED_HECf_249) / 64D;
public static final double LECf_251_FISSION = (LECf_251 + DEPLETED_LECf_251 + CAESIUM_137) / 64D; public static final double LECf_251_FISSION = (LECf_251 + DEPLETED_LECf_251) / 64D;
public static final double HECf_251_FISSION = (HECf_251 + DEPLETED_HECf_251 + CAESIUM_137) / 64D; public static final double HECf_251_FISSION = (HECf_251 + DEPLETED_HECf_251) / 64D;
} }

View File

@ -51,11 +51,7 @@ public class RadiationHandler {
@SubscribeEvent @SubscribeEvent
public void updatePlayerRadiation(TickEvent.PlayerTickEvent event) { public void updatePlayerRadiation(TickEvent.PlayerTickEvent event) {
if (!radiation_enabled_public) { if (radiation_enabled_public && !radiation_require_counter && event.phase == TickEvent.Phase.START && event.side == Side.CLIENT) {
return;
}
if (!radiation_require_counter && event.phase == TickEvent.Phase.START && event.side == Side.CLIENT) {
playGeigerSound(event.player); playGeigerSound(event.player);
} }
@ -78,6 +74,10 @@ public class RadiationHandler {
} }
} }
if (!radiation_enabled_public) {
return;
}
if (ModCheck.gameStagesLoaded()) { if (ModCheck.gameStagesLoaded()) {
playerRads.setRadiationImmunityStage(default_rad_immunity ^ GameStageHelper.hasAnyOf(player, rad_immunity_stages)); playerRads.setRadiationImmunityStage(default_rad_immunity ^ GameStageHelper.hasAnyOf(player, rad_immunity_stages));
} }
@ -201,6 +201,10 @@ public class RadiationHandler {
} }
} }
else { else {
if (!radiation_enabled_public) {
return;
}
EntityPlayer player = event.player; EntityPlayer player = event.player;
IEntityRads playerRads = RadiationHelper.getEntityRadiation(player); IEntityRads playerRads = RadiationHelper.getEntityRadiation(player);
if (playerRads == null) { if (playerRads == null) {
@ -424,7 +428,7 @@ public class RadiationHandler {
} }
private static void mutateTerrain(World world, Chunk chunk, double radiation) { private static void mutateTerrain(World world, Chunk chunk, double radiation) {
long j = Math.min(radiation_block_effect_max_rate, (long) Math.log(Math.E - 1D + radiation / getBlockMutationThreshold())); long j = Math.min(radiation_block_effect_max_rate, (long) Math.log(Math.E - 1D + radiation / RecipeStats.getBlockMutationThreshold()));
while (j > 0) { while (j > 0) {
j--; j--;
BlockPos randomChunkPos = newRandomPosInChunk(chunk); BlockPos randomChunkPos = newRandomPosInChunk(chunk);
@ -445,7 +449,7 @@ public class RadiationHandler {
} }
} }
j = radiation == 0D ? radiation_block_effect_max_rate : Math.min(radiation_block_effect_max_rate, (long) Math.log(Math.E - 1D + getBlockPurificationThreshold() / radiation)); j = radiation == 0D ? radiation_block_effect_max_rate : Math.min(radiation_block_effect_max_rate, (long) Math.log(Math.E - 1D + RecipeStats.getBlockPurificationThreshold() / radiation));
while (j > 0) { while (j > 0) {
j--; j--;
BlockPos randomChunkPos = newRandomPosInChunk(chunk); BlockPos randomChunkPos = newRandomPosInChunk(chunk);
@ -466,36 +470,6 @@ public class RadiationHandler {
} }
} }
private static Double block_mutation_threshold = null;
private static double getBlockMutationThreshold() {
if (block_mutation_threshold == null) {
double threshold = Double.MAX_VALUE;
for (ProcessorRecipe recipe : NCRecipes.radiation_block_mutation.getRecipeList()) {
if (recipe != null) {
threshold = Math.min(threshold, recipe.getBlockMutationThreshold());
}
}
block_mutation_threshold = new Double(threshold);
}
return block_mutation_threshold.doubleValue();
}
private static Double block_purification_threshold = null;
private static double getBlockPurificationThreshold() {
if (block_purification_threshold == null) {
double threshold = 0D;
for (ProcessorRecipe recipe : NCRecipes.radiation_block_purification.getRecipeList()) {
if (recipe != null) {
threshold = Math.max(threshold, recipe.getBlockMutationThreshold());
}
}
block_purification_threshold = new Double(threshold);
}
return block_purification_threshold.doubleValue();
}
public static void playGeigerSound(EntityPlayer player) { public static void playGeigerSound(EntityPlayer player) {
IEntityRads entityRads = RadiationHelper.getEntityRadiation(player); IEntityRads entityRads = RadiationHelper.getEntityRadiation(player);
if (entityRads == null || entityRads.isRawRadiationNegligible()) { if (entityRads == null || entityRads.isRawRadiationNegligible()) {

View File

@ -2,7 +2,7 @@ package nc.recipe;
import java.util.*; import java.util.*;
import javax.annotation.Nullable; import javax.annotation.*;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@ -23,9 +23,9 @@ import stanhebben.zenscript.annotations.*;
@ZenRegister @ZenRegister
public abstract class AbstractRecipeHandler<RECIPE extends IRecipe> { public abstract class AbstractRecipeHandler<RECIPE extends IRecipe> {
protected List<RECIPE> recipeList = new ArrayList<>(); protected @Nonnull List<RECIPE> recipeList = new ArrayList<>();
protected Long2ObjectMap<RECIPE> recipeCache = new Long2ObjectOpenHashMap<>(); protected @Nonnull Long2ObjectMap<RECIPE> recipeCache = new Long2ObjectOpenHashMap<>();
private static List<Class<?>> validItemInputs = Lists.newArrayList(IItemIngredient.class, ArrayList.class, String.class, Item.class, Block.class, ItemStack.class, ItemStack[].class); private static List<Class<?>> validItemInputs = Lists.newArrayList(IItemIngredient.class, ArrayList.class, String.class, Item.class, Block.class, ItemStack.class, ItemStack[].class);
private static List<Class<?>> validFluidInputs = Lists.newArrayList(IFluidIngredient.class, ArrayList.class, String.class, Fluid.class, FluidStack.class, FluidStack[].class); private static List<Class<?>> validFluidInputs = Lists.newArrayList(IFluidIngredient.class, ArrayList.class, String.class, Fluid.class, FluidStack.class, FluidStack[].class);

View File

@ -58,6 +58,8 @@ public class NCRecipes {
public static RadiationBlockMutation radiation_block_mutation; public static RadiationBlockMutation radiation_block_mutation;
public static RadiationBlockPurification radiation_block_purification; public static RadiationBlockPurification radiation_block_purification;
public static ProcessorRecipeHandler[] processor_recipe_handlers;
@SubscribeEvent(priority = EventPriority.LOW) @SubscribeEvent(priority = EventPriority.LOW)
public void registerRecipes(RegistryEvent.Register<IRecipe> event) { public void registerRecipes(RegistryEvent.Register<IRecipe> event) {
if (initialized) { if (initialized) {
@ -104,6 +106,8 @@ public class NCRecipes {
radiation_block_mutation = new RadiationBlockMutation(); radiation_block_mutation = new RadiationBlockMutation();
radiation_block_purification = new RadiationBlockPurification(); radiation_block_purification = new RadiationBlockPurification();
processor_recipe_handlers = new ProcessorRecipeHandler[] {manufactory, separator, decay_hastener, fuel_reprocessor, alloy_furnace, infuser, melter, supercooler, electrolyzer, assembler, ingot_former, pressurizer, chemical_reactor, salt_mixer, crystallizer, enricher, extractor, centrifuge, rock_crusher};
CraftingRecipeHandler.registerCraftingRecipes(); CraftingRecipeHandler.registerCraftingRecipes();
FurnaceRecipeHandler.registerFurnaceRecipes(); FurnaceRecipeHandler.registerFurnaceRecipes();
GameRegistry.registerFuelHandler(new FurnaceFuelHandler()); GameRegistry.registerFuelHandler(new FurnaceFuelHandler());

View File

@ -104,15 +104,15 @@ public class ProcessorRecipe implements IRecipe {
// Decay Generator // Decay Generator
public double getDecayLifetime() { public double getDecayGeneratorLifetime() {
return (double) extras.get(0); return (double) extras.get(0);
} }
public double getDecayPower() { public double getDecayGeneratorPower() {
return (double) extras.get(1); return (double) extras.get(1);
} }
public double getDecayRadiation() { public double getDecayGeneratorRadiation() {
return (double) extras.get(2); return (double) extras.get(2);
} }

View File

@ -0,0 +1,114 @@
package nc.recipe;
import static nc.config.NCConfig.machine_update_rate;
import nc.config.NCConfig;
import nc.util.NCMath;
public class RecipeStats {
private static double[] processor_max_base_process_time = new double[19];
private static double[] processor_max_base_process_power = new double[19];
private static int decay_generator_max_power;
private static int fission_max_moderator_line_flux;
private static int scrubber_max_process_power;
private static double block_mutation_threshold;
private static double block_purification_threshold;
public static void init() {
setProcessorMaxStats();
setDecayGeneratorMaxPower();
setFissionMaxModeratorLineFlux();
setScrubberMaxProcessPower();
setBlockMutationThreshold();
setBlockPurificationThreshold();
}
public static double getProcessorMaxBaseProcessTime(int i) {
return processor_max_base_process_time[i];
}
public static double getProcessorMaxBaseProcessPower(int i) {
return processor_max_base_process_power[i];
}
private static void setProcessorMaxStats() {
for (int i = 0; i < NCRecipes.processor_recipe_handlers.length; i++) {
processor_max_base_process_time[i] = 1D;
processor_max_base_process_power[i] = 0D;
for (ProcessorRecipe recipe : NCRecipes.processor_recipe_handlers[i].getRecipeList()) {
if (recipe != null) {
processor_max_base_process_time[i] = Math.max(processor_max_base_process_time[i], recipe.getBaseProcessTime(NCConfig.processor_time[i]));
processor_max_base_process_power[i] = Math.max(processor_max_base_process_power[i], recipe.getBaseProcessPower(NCConfig.processor_power[i]));
}
}
}
}
public static int getDecayGeneratorMaxPower() {
return decay_generator_max_power;
}
private static void setDecayGeneratorMaxPower() {
double max = 0D;
for (ProcessorRecipe recipe : NCRecipes.decay_generator.getRecipeList()) {
if (recipe != null) {
max = Math.max(max, recipe.getDecayGeneratorPower());
}
}
decay_generator_max_power = NCMath.toInt(machine_update_rate * max);
}
public static int getFissionMaxModeratorLineFlux() {
return fission_max_moderator_line_flux;
}
private static void setFissionMaxModeratorLineFlux() {
fission_max_moderator_line_flux = 0;
for (ProcessorRecipe recipe : NCRecipes.fission_moderator.getRecipeList()) {
if (recipe != null) {
fission_max_moderator_line_flux = Math.max(fission_max_moderator_line_flux, recipe.getFissionModeratorFluxFactor());
}
}
fission_max_moderator_line_flux *= NCConfig.fission_neutron_reach;
}
public static int getScrubberMaxProcessPower() {
return scrubber_max_process_power;
}
private static void setScrubberMaxProcessPower() {
scrubber_max_process_power = 0;
for (ProcessorRecipe recipe : NCRecipes.radiation_scrubber.getRecipeList()) {
if (recipe != null) {
scrubber_max_process_power = Math.max(scrubber_max_process_power, recipe.getScrubberProcessPower());
}
}
}
public static double getBlockMutationThreshold() {
return block_mutation_threshold;
}
private static void setBlockMutationThreshold() {
block_mutation_threshold = Double.MAX_VALUE;
for (ProcessorRecipe recipe : NCRecipes.radiation_block_mutation.getRecipeList()) {
if (recipe != null) {
block_mutation_threshold = Math.min(block_mutation_threshold, recipe.getBlockMutationThreshold());
}
}
}
public static double getBlockPurificationThreshold() {
return block_purification_threshold;
}
private static void setBlockPurificationThreshold() {
block_purification_threshold = 0D;
for (ProcessorRecipe recipe : NCRecipes.radiation_block_purification.getRecipeList()) {
if (recipe != null) {
block_purification_threshold = Math.max(block_purification_threshold, recipe.getBlockMutationThreshold());
}
}
}
}

View File

@ -54,12 +54,12 @@ public class FuelReprocessorRecipes extends ProcessorRecipeHandler {
addRecipe("depletedFuelIC2MOX", RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), emptyItemStack(), emptyItemStack(), emptyItemStack(), emptyItemStack(), 1D, 1D); addRecipe("depletedFuelIC2MOX", RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), RegistryHelper.itemStackFromRegistry("ic2:nuclear:7", 7), emptyItemStack(), emptyItemStack(), emptyItemStack(), emptyItemStack(), 1D, 1D);
} }
public void addReprocessingRecipes(String fuel, String out1, int n1, String out2, int n2, String out3, int n3, String out4, int n4, String waste1, String waste2, double w, int r) { public void addReprocessingRecipes(String fuel, String out1, int n1, String out2, int n2, String out3, int n3, String out4, int n4, String waste1, String waste2, double m, int r) {
int extraReturn = 9 - n1 - n2 - n3 - n4; int extraReturn = 9 - n1 - n2 - n3 - n4;
addRecipe(oreStack("ingotDepleted" + fuel + "TRISO", 9), oreStack("ingot" + out1 + "Carbide", n1), oreStack("ingot" + out2 + "Carbide", n2), chanceOreStack("dust" + waste1, 1, (int) (w * r)), oreStack("dustGraphite", extraReturn + 2), oreStack("ingot" + out3 + "Carbide", n3), oreStack("ingot" + out4 + "Carbide", n4), chanceOreStack("dust" + waste2, 1, (int) (w * (100 - r))), oreStack(OreDictHelper.oreExists("dustSiliconCarbide") ? "dustSiliconCarbide" : "ingotSiliconCarbide", 1), 1D, 1D); addRecipe(oreStack("ingotDepleted" + fuel + "TRISO", 9), oreStack("ingot" + out1 + "Carbide", n1), oreStack("ingot" + out2 + "Carbide", n2), chanceOreStack("dust" + waste1, 1, (int) (m * r)), oreStack("dustGraphite", extraReturn + 2), oreStack("ingot" + out3 + "Carbide", n3), oreStack("ingot" + out4 + "Carbide", n4), chanceOreStack("dust" + waste2, 1, (int) (m * (100 - r))), oreStack(OreDictHelper.oreExists("dustSiliconCarbide") ? "dustSiliconCarbide" : "ingotSiliconCarbide", 1), 1D, 1D);
addRecipe(oreStack("ingotDepleted" + fuel + "Oxide", 9), oreStack("ingot" + out1 + "Oxide", n1), oreStack("ingot" + out2 + "Oxide", n2), chanceOreStack("dust" + waste1, 1, (int) (w * r)), emptyItemStack(), oreStack("ingot" + out3 + "Oxide", n3), oreStack("ingot" + out4 + "Oxide", n4), chanceOreStack("dust" + waste2, 1, (int) (w * (100 - r))), emptyItemStack(), 1D, 1D); addRecipe(oreStack("ingotDepleted" + fuel + "Oxide", 9), oreStack("ingot" + out1 + "Oxide", n1), oreStack("ingot" + out2 + "Oxide", n2), chanceOreStack("dust" + waste1, 1, (int) (m * r)), emptyItemStack(), oreStack("ingot" + out3 + "Oxide", n3), oreStack("ingot" + out4 + "Oxide", n4), chanceOreStack("dust" + waste2, 1, (int) (m * (100 - r))), emptyItemStack(), 1D, 1D);
addRecipe(oreStack("ingotDepleted" + fuel + "Nitride", 9), oreStack("ingot" + out1 + "Nitride", n1), oreStack("ingot" + out2 + "Nitride", n2), chanceOreStack("dust" + waste1, 1, (int) (w * r)), emptyItemStack(), oreStack("ingot" + out3 + "Nitride", n3), oreStack("ingot" + out4 + "Nitride", n4), chanceOreStack("dust" + waste2, 1, (int) (w * (100 - r))), emptyItemStack(), 1D, 1D); addRecipe(oreStack("ingotDepleted" + fuel + "Nitride", 9), oreStack("ingot" + out1 + "Nitride", n1), oreStack("ingot" + out2 + "Nitride", n2), chanceOreStack("dust" + waste1, 1, (int) (m * r)), emptyItemStack(), oreStack("ingot" + out3 + "Nitride", n3), oreStack("ingot" + out4 + "Nitride", n4), chanceOreStack("dust" + waste2, 1, (int) (m * (100 - r))), emptyItemStack(), 1D, 1D);
addRecipe(oreStack("ingotDepleted" + fuel + "ZA", 9), oreStack("ingot" + out1 + "ZA", n1), oreStack("ingot" + out2 + "ZA", n2), chanceOreStack("dust" + waste1, 1, (int) (w * r)), oreStack("dustZirconium", extraReturn), oreStack("ingot" + out3 + "ZA", n3), oreStack("ingot" + out4 + "ZA", n4), chanceOreStack("dust" + waste2, 1, (int) (w * (100 - r))), emptyItemStack(), 1D, 1D); addRecipe(oreStack("ingotDepleted" + fuel + "ZA", 9), oreStack("ingot" + out1 + "ZA", n1), oreStack("ingot" + out2 + "ZA", n2), chanceOreStack("dust" + waste1, 1, (int) (m * r)), oreStack("dustZirconium", extraReturn), oreStack("ingot" + out3 + "ZA", n3), oreStack("ingot" + out4 + "ZA", n4), chanceOreStack("dust" + waste2, 1, (int) (m * (100 - r))), emptyItemStack(), 1D, 1D);
} }
@Override @Override

View File

@ -22,10 +22,14 @@ import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.*; import net.minecraft.util.*;
import net.minecraftforge.fml.common.registry.ForgeRegistries; import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.oredict.*; import net.minecraftforge.oredict.*;
import vazkii.patchouli.common.item.ItemModBook;
public class CraftingRecipeHandler { public class CraftingRecipeHandler {
public static void registerCraftingRecipes() { public static void registerCraftingRecipes() {
addShapelessOreRecipe(ItemModBook.forBook("nuclearcraft:guide"), new Object[] {Items.BOOK, "ingotUranium"});
addShapelessOreRecipe(Items.BOOK, new Object[] {ItemModBook.forBook("nuclearcraft:guide")});
for (int i = 0; i < IngotType.values().length; i++) { for (int i = 0; i < IngotType.values().length; i++) {
String type = StringHelper.capitalize(IngotType.values()[i].getName()); String type = StringHelper.capitalize(IngotType.values()[i].getName());
if (!ore_dict_raw_material_recipes) { if (!ore_dict_raw_material_recipes) {

View File

@ -2,7 +2,7 @@ package nc.tile.generator;
import static nc.config.NCConfig.machine_update_rate; import static nc.config.NCConfig.machine_update_rate;
import java.util.*; import java.util.Random;
import nc.recipe.*; import nc.recipe.*;
import nc.tile.dummy.IInterfaceable; import nc.tile.dummy.IInterfaceable;
@ -25,7 +25,7 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
protected int generatorCount; protected int generatorCount;
public TileDecayGenerator() { public TileDecayGenerator() {
super(maxPower(), ITileEnergy.energyConnectionAll(EnergyConnection.OUT)); super(2 * RecipeStats.getDecayGeneratorMaxPower(), ITileEnergy.energyConnectionAll(EnergyConnection.OUT));
} }
@Override @Override
@ -53,18 +53,6 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
generatorCount %= machine_update_rate; generatorCount %= machine_update_rate;
} }
private static int maxPower() {
double max = 0D;
List<ProcessorRecipe> recipes = NCRecipes.decay_generator.getRecipeList();
for (ProcessorRecipe recipe : recipes) {
if (recipe == null) {
continue;
}
max = Math.max(max, recipe.getDecayPower());
}
return (int) (machine_update_rate * max);
}
public int getGenerated() { public int getGenerated() {
double power = 0D; double power = 0D;
for (EnumFacing side : EnumFacing.VALUES) { for (EnumFacing side : EnumFacing.VALUES) {
@ -77,7 +65,7 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
double radiation = 0D; double radiation = 0D;
for (EnumFacing side : EnumFacing.VALUES) { for (EnumFacing side : EnumFacing.VALUES) {
if (getDecayRecipe(side) != null) { if (getDecayRecipe(side) != null) {
radiation += getDecayRecipe(side).getDecayRadiation(); radiation += getDecayRecipe(side).getDecayGeneratorRadiation();
} }
} }
return machine_update_rate * radiation; return machine_update_rate * radiation;
@ -123,7 +111,7 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
@Override @Override
public int getSourceTier() { public int getSourceTier() {
return EnergyHelper.getEUTier(maxPower()); return EnergyHelper.getEUTier(RecipeStats.getDecayGeneratorMaxPower());
} }
// Recipe from BlockPos // Recipe from BlockPos
@ -136,14 +124,14 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
if (getDecayRecipe(side) == null) { if (getDecayRecipe(side) == null) {
return 1200D; return 1200D;
} }
return getDecayRecipe(side).getDecayLifetime(); return getDecayRecipe(side).getDecayGeneratorLifetime();
} }
public double getRecipePower(EnumFacing side) { public double getRecipePower(EnumFacing side) {
if (getDecayRecipe(side) == null) { if (getDecayRecipe(side) == null) {
return 0D; return 0D;
} }
return getDecayRecipe(side).getDecayPower(); return getDecayRecipe(side).getDecayGeneratorPower();
} }
public ItemStack getOutput(EnumFacing side) { public ItemStack getOutput(EnumFacing side) {

View File

@ -1,8 +1,6 @@
package nc.tile.processor; package nc.tile.processor;
import java.util.List; import nc.recipe.RecipeStats;
import nc.recipe.*;
import nc.tile.dummy.IInterfaceable; import nc.tile.dummy.IInterfaceable;
import nc.util.NCMath; import nc.util.NCMath;
import net.minecraft.util.ITickable; import net.minecraft.util.ITickable;
@ -15,29 +13,7 @@ public abstract interface IProcessor extends ITickable, IInterfaceable {
public void refreshActivityOnProduction(); public void refreshActivityOnProduction();
public static double maxStat(ProcessorRecipeHandler recipeHandler, int extraIndex) { public static int getCapacity(int processorID, double speedMultiplier, double powerMultiplier) {
double max = 1D; return NCMath.toInt(Math.ceil(RecipeStats.getProcessorMaxBaseProcessTime(processorID) / speedMultiplier) * Math.ceil(RecipeStats.getProcessorMaxBaseProcessPower(processorID) * powerMultiplier));
List<ProcessorRecipe> recipes = recipeHandler.getRecipeList();
for (ProcessorRecipe recipe : recipes) {
if (recipe == null || recipe.getExtras().size() <= extraIndex) {
continue;
}
else if (recipe.getExtras().get(extraIndex) instanceof Double) {
max = Math.max(max, (double) recipe.getExtras().get(extraIndex));
}
}
return max;
}
public static double maxBaseProcessTime(ProcessorRecipeHandler recipeHandler, int defaultProcessTime) {
return Math.ceil(maxStat(recipeHandler, 0) * defaultProcessTime);
}
public static double maxBaseProcessPower(ProcessorRecipeHandler recipeHandler, int defaultProcessPower) {
return Math.ceil(maxStat(recipeHandler, 1) * defaultProcessPower);
}
public static int getCapacity(ProcessorRecipeHandler recipeHandler, int defaultProcessTime, double speedMultiplier, int defaultProcessPower, double powerMultiplier) {
return NCMath.toInt(Math.ceil(maxBaseProcessTime(recipeHandler, defaultProcessTime) / speedMultiplier) * Math.ceil(maxBaseProcessPower(recipeHandler, defaultProcessPower) * powerMultiplier));
} }
} }

View File

@ -48,7 +48,7 @@ public class TileFluidProcessor extends TileEnergyFluidSidedInventory implements
} }
public TileFluidProcessor(String name, int fluidInSize, int fluidOutSize, @Nonnull List<ItemSorption> itemSorptions, @Nonnull IntList fluidCapacity, @Nonnull List<TankSorption> tankSorptions, List<List<String>> allowedFluids, int time, int power, boolean shouldLoseProgress, boolean upgrades, @Nonnull ProcessorRecipeHandler recipeHandler, int processorID, int sideConfigYOffset) { public TileFluidProcessor(String name, int fluidInSize, int fluidOutSize, @Nonnull List<ItemSorption> itemSorptions, @Nonnull IntList fluidCapacity, @Nonnull List<TankSorption> tankSorptions, List<List<String>> allowedFluids, int time, int power, boolean shouldLoseProgress, boolean upgrades, @Nonnull ProcessorRecipeHandler recipeHandler, int processorID, int sideConfigYOffset) {
super(name, upgrades ? 2 : 0, ITileInventory.inventoryConnectionAll(itemSorptions), IProcessor.getCapacity(recipeHandler, time, 1D, power, 1D), power != 0 ? ITileEnergy.energyConnectionAll(EnergyConnection.IN) : ITileEnergy.energyConnectionAll(EnergyConnection.NON), fluidCapacity, allowedFluids, ITileFluid.fluidConnectionAll(tankSorptions)); super(name, upgrades ? 2 : 0, ITileInventory.inventoryConnectionAll(itemSorptions), IProcessor.getCapacity(processorID, 1D, 1D), power != 0 ? ITileEnergy.energyConnectionAll(EnergyConnection.IN) : ITileEnergy.energyConnectionAll(EnergyConnection.NON), fluidCapacity, allowedFluids, ITileFluid.fluidConnectionAll(tankSorptions));
fluidInputSize = fluidInSize; fluidInputSize = fluidInSize;
fluidOutputSize = fluidOutSize; fluidOutputSize = fluidOutSize;
@ -179,7 +179,7 @@ public class TileFluidProcessor extends TileEnergyFluidSidedInventory implements
} }
public void setCapacityFromSpeed() { public void setCapacityFromSpeed() {
int capacity = IProcessor.getCapacity(recipeHandler, defaultProcessTime, getSpeedMultiplier(), defaultProcessPower, getPowerMultiplier()); int capacity = IProcessor.getCapacity(processorID, getSpeedMultiplier(), getPowerMultiplier());
getEnergyStorage().setStorageCapacity(capacity); getEnergyStorage().setStorageCapacity(capacity);
getEnergyStorage().setMaxTransfer(capacity); getEnergyStorage().setMaxTransfer(capacity);
} }

View File

@ -49,7 +49,7 @@ public class TileItemFluidProcessor extends TileEnergyFluidSidedInventory implem
} }
public TileItemFluidProcessor(String name, int itemInSize, int fluidInSize, int itemOutSize, int fluidOutSize, @Nonnull List<ItemSorption> itemSorptions, @Nonnull IntList fluidCapacity, @Nonnull List<TankSorption> tankSorptions, List<List<String>> allowedFluids, int time, int power, boolean shouldLoseProgress, boolean upgrades, @Nonnull ProcessorRecipeHandler recipeHandler, int processorID, int sideConfigYOffset) { public TileItemFluidProcessor(String name, int itemInSize, int fluidInSize, int itemOutSize, int fluidOutSize, @Nonnull List<ItemSorption> itemSorptions, @Nonnull IntList fluidCapacity, @Nonnull List<TankSorption> tankSorptions, List<List<String>> allowedFluids, int time, int power, boolean shouldLoseProgress, boolean upgrades, @Nonnull ProcessorRecipeHandler recipeHandler, int processorID, int sideConfigYOffset) {
super(name, itemInSize + itemOutSize + (upgrades ? 2 : 0), ITileInventory.inventoryConnectionAll(itemSorptions), IProcessor.getCapacity(recipeHandler, time, 1D, power, 1D), power != 0 ? ITileEnergy.energyConnectionAll(EnergyConnection.IN) : ITileEnergy.energyConnectionAll(EnergyConnection.NON), fluidCapacity, allowedFluids, ITileFluid.fluidConnectionAll(tankSorptions)); super(name, itemInSize + itemOutSize + (upgrades ? 2 : 0), ITileInventory.inventoryConnectionAll(itemSorptions), IProcessor.getCapacity(processorID, 1D, 1D), power != 0 ? ITileEnergy.energyConnectionAll(EnergyConnection.IN) : ITileEnergy.energyConnectionAll(EnergyConnection.NON), fluidCapacity, allowedFluids, ITileFluid.fluidConnectionAll(tankSorptions));
itemInputSize = itemInSize; itemInputSize = itemInSize;
fluidInputSize = fluidInSize; fluidInputSize = fluidInSize;
itemOutputSize = itemOutSize; itemOutputSize = itemOutSize;
@ -188,7 +188,7 @@ public class TileItemFluidProcessor extends TileEnergyFluidSidedInventory implem
} }
public void setCapacityFromSpeed() { public void setCapacityFromSpeed() {
int capacity = IProcessor.getCapacity(recipeHandler, defaultProcessTime, getSpeedMultiplier(), defaultProcessPower, getPowerMultiplier()); int capacity = IProcessor.getCapacity(processorID, getSpeedMultiplier(), getPowerMultiplier());
getEnergyStorage().setStorageCapacity(capacity); getEnergyStorage().setStorageCapacity(capacity);
getEnergyStorage().setMaxTransfer(capacity); getEnergyStorage().setMaxTransfer(capacity);
} }

View File

@ -47,7 +47,7 @@ public class TileItemProcessor extends TileEnergySidedInventory implements IItem
} }
public TileItemProcessor(String name, int itemInSize, int itemOutSize, @Nonnull List<ItemSorption> itemSorptions, int time, int power, boolean shouldLoseProgress, boolean upgrades, @Nonnull ProcessorRecipeHandler recipeHandler, int processorID, int sideConfigYOffset) { public TileItemProcessor(String name, int itemInSize, int itemOutSize, @Nonnull List<ItemSorption> itemSorptions, int time, int power, boolean shouldLoseProgress, boolean upgrades, @Nonnull ProcessorRecipeHandler recipeHandler, int processorID, int sideConfigYOffset) {
super(name, itemInSize + itemOutSize + (upgrades ? 2 : 0), ITileInventory.inventoryConnectionAll(itemSorptions), IProcessor.getCapacity(recipeHandler, time, 1D, power, 1D), power != 0 ? ITileEnergy.energyConnectionAll(EnergyConnection.IN) : ITileEnergy.energyConnectionAll(EnergyConnection.NON)); super(name, itemInSize + itemOutSize + (upgrades ? 2 : 0), ITileInventory.inventoryConnectionAll(itemSorptions), IProcessor.getCapacity(processorID, 1D, 1D), power != 0 ? ITileEnergy.energyConnectionAll(EnergyConnection.IN) : ITileEnergy.energyConnectionAll(EnergyConnection.NON));
itemInputSize = itemInSize; itemInputSize = itemInSize;
itemOutputSize = itemOutSize; itemOutputSize = itemOutSize;
@ -164,7 +164,7 @@ public class TileItemProcessor extends TileEnergySidedInventory implements IItem
} }
public void setCapacityFromSpeed() { public void setCapacityFromSpeed() {
int capacity = IProcessor.getCapacity(recipeHandler, defaultProcessTime, getSpeedMultiplier(), defaultProcessPower, getPowerMultiplier()); int capacity = IProcessor.getCapacity(processorID, getSpeedMultiplier(), getPowerMultiplier());
getEnergyStorage().setStorageCapacity(capacity); getEnergyStorage().setStorageCapacity(capacity);
getEnergyStorage().setMaxTransfer(capacity); getEnergyStorage().setMaxTransfer(capacity);
} }

View File

@ -2,7 +2,7 @@ package nc.tile.radiation;
import static nc.config.NCConfig.*; import static nc.config.NCConfig.*;
import java.util.*; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.*; import java.util.concurrent.*;
@ -31,22 +31,10 @@ public class TileRadiationScrubber extends TileItemFluidGenerator implements ITi
private int radCheckCount = 0; private int radCheckCount = 0;
public TileRadiationScrubber() { public TileRadiationScrubber() {
super("radiation_scrubber", 1, 1, 1, 1, 0, defaultItemSorptions(1, 1), defaultTankCapacities(32000, 1, 1), defaultTankSorptions(1, 1), NCRecipes.radiation_scrubber_valid_fluids, maxPower(), NCRecipes.radiation_scrubber); super("radiation_scrubber", 1, 1, 1, 1, 0, defaultItemSorptions(1, 1), defaultTankCapacities(32000, 1, 1), defaultTankSorptions(1, 1), NCRecipes.radiation_scrubber_valid_fluids, NCMath.toInt(20 * RecipeStats.getScrubberMaxProcessPower()), NCRecipes.radiation_scrubber);
setEnergyConnectionAll(EnergyConnection.IN); setEnergyConnectionAll(EnergyConnection.IN);
} }
private static int maxPower() {
int max = 0;
List<ProcessorRecipe> recipes = NCRecipes.radiation_scrubber.getRecipeList();
for (ProcessorRecipe recipe : recipes) {
if (recipe == null) {
continue;
}
max = Math.max(max, recipe.getScrubberProcessPower());
}
return 20 * max;
}
@Override @Override
public void onLoad() { public void onLoad() {
super.onLoad(); super.onLoad();

View File

@ -1,6 +1,7 @@
package nc.util; package nc.util;
import java.io.*; import java.io.*;
import java.util.zip.*;
public class IOHelper { public class IOHelper {
@ -20,4 +21,49 @@ public class IOHelper {
writer.close(); writer.close();
reader.close(); reader.close();
} }
/** Modified from Fabian Braun's answer at https://stackoverflow.com/a/47595502 */
public static boolean isZip(File file) {
int signature = 0;
try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {
signature = raf.readInt();
}
catch (IOException e) {
}
return signature == 0x504B0304 || signature == 0x504B0506 || signature == 0x504B0708;
}
/** Modified from Nam Ha Minh's posts at https://www.codejava.net/file-io-tutorials */
public static void unzip(File zipFile, String dest) throws IOException {
File destDir = new File(dest);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipStream = new ZipInputStream(new FileInputStream(zipFile));
ZipEntry entry = zipStream.getNextEntry();
while (entry != null) {
String fileDest = dest + "/" + entry.getName();
if (!entry.isDirectory()) {
extract(zipStream, fileDest);
}
else {
new File(fileDest).mkdirs();
}
zipStream.closeEntry();
entry = zipStream.getNextEntry();
}
zipStream.close();
}
private static void extract(ZipInputStream zipStream, String fileDest) throws IOException {
BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(fileDest));
byte[] bytesIn = new byte[1024];
int read = 0;
while ((read = zipStream.read(bytesIn)) != -1) {
outStream.write(bytesIn, 0, read);
}
outStream.close();
}
} }

View File

@ -22,12 +22,10 @@ public class StringHelper {
} }
public static String removePrefix(String s, int length) { public static String removePrefix(String s, int length) {
// int fixedLength = Math.min(length, s.length());
return s.substring(length); return s.substring(length);
} }
public static String removeSuffix(String s, int length) { public static String removeSuffix(String s, int length) {
// int fixedLength = Math.min(length, s.length());
return s.substring(0, s.length() - length); return s.substring(0, s.length() - length);
} }

View File

@ -2247,6 +2247,7 @@ jei.nuclearcraft.collector_production_rate=Production rate:
jei.nuclearcraft.irradiator_flux_required=Flux required: jei.nuclearcraft.irradiator_flux_required=Flux required:
jei.nuclearcraft.irradiator_heat_per_flux=Heat gen per flux: jei.nuclearcraft.irradiator_heat_per_flux=Heat gen per flux:
jei.nuclearcraft.irradiator_process_efficiency=Efficiency contribution: jei.nuclearcraft.irradiator_process_efficiency=Efficiency contribution:
jei.nuclearcraft.radiation_per_flux=Radiation per flux:
jei.nuclearcraft.pebble_fuel_time=Base depletion time: jei.nuclearcraft.pebble_fuel_time=Base depletion time:
jei.nuclearcraft.pebble_fuel_heat=Base heat gen: jei.nuclearcraft.pebble_fuel_heat=Base heat gen:

View File

@ -436,7 +436,7 @@ fluid.deuterium=氘
tile.nuclearcraft.fluid_tritium.name=氚 tile.nuclearcraft.fluid_tritium.name=氚
fluid.tritium=氚 fluid.tritium=氚
tile.nuclearcraft.fluid_helium3.name=氦-3 tile.nuclearcraft.fluid_helium_3.name=氦-3
fluid.helium3=氦-3 fluid.helium3=氦-3
tile.nuclearcraft.fluid_helium.name=氦 tile.nuclearcraft.fluid_helium.name=氦
@ -488,17 +488,17 @@ tile.nuclearcraft.fluid_plasma.name=等离子体
tile.nuclearcraft.fluid_plasma.desc=从聚变反应堆中产生。当与未充能的聚变电磁铁发生接触时可能导致火焰与爆炸。 tile.nuclearcraft.fluid_plasma.desc=从聚变反应堆中产生。当与未充能的聚变电磁铁发生接触时可能导致火焰与爆炸。
fluid.plasma=等离子体 fluid.plasma=等离子体
tile.nuclearcraft.fluid_lithium6.name=熔融锂-6 tile.nuclearcraft.fluid_lithium_6.name=熔融锂-6
fluid.lithium6=熔融锂-6 fluid.lithium_6=熔融锂-6
tile.nuclearcraft.fluid_lithium7.name=熔融锂-7 tile.nuclearcraft.fluid_lithium_7.name=熔融锂-7
fluid.lithium7=熔融锂-7 fluid.lithium_7=熔融锂-7
tile.nuclearcraft.fluid_boron10.name=熔融硼-10 tile.nuclearcraft.fluid_boron_10.name=熔融硼-10
fluid.boron10=熔融硼-10 fluid.boron_10=熔融硼-10
tile.nuclearcraft.fluid_boron11.name=熔融硼-11 tile.nuclearcraft.fluid_boron_11.name=熔融硼-11
fluid.boron11=熔融硼-11 fluid.boron_11=熔融硼-11
tile.nuclearcraft.fluid_ferroboron.name=熔融硼铁合金 tile.nuclearcraft.fluid_ferroboron.name=熔融硼铁合金
fluid.ferroboron=熔融硼铁合金 fluid.ferroboron=熔融硼铁合金
@ -697,6 +697,24 @@ fluid.alugentum=熔融银铝
tile.nuclearcraft.fluid_alumina.name=熔融铁矾土 tile.nuclearcraft.fluid_alumina.name=熔融铁矾土
fluid.alumina=熔融铁矾土 fluid.alumina=熔融铁矾土
tile.nuclearcraft.fluid_strontium_90.name=熔融锶-90
fluid.strontium_90=熔融锶-90
tile.nuclearcraft.fluid_molybdenum.name=熔融钼
fluid.molybdenum=熔融钼
tile.nuclearcraft.fluid_ruthenium_106.name=熔融钌-106
fluid.ruthenium_106=熔融钌-106
tile.nuclearcraft.fluid_caesium_137.name=熔融铯-137
fluid.caesium_137=熔融铯-137
tile.nuclearcraft.fluid_promethium_147.name=熔融钷-147
fluid.promethium_147=熔融钷-147
tile.nuclearcraft.fluid_europium_155.name=熔融铕-155
fluid.europium_155=熔融铕-155
tile.nuclearcraft.fluid_thorium.name=熔融钍 tile.nuclearcraft.fluid_thorium.name=熔融钍
fluid.thorium=熔融钍 fluid.thorium=熔融钍
tile.nuclearcraft.fluid_uranium.name=熔融铀 tile.nuclearcraft.fluid_uranium.name=熔融铀
@ -1574,6 +1592,7 @@ item.nuclearcraft.alloy.zircaloy.name=锆锡合金锭
item.nuclearcraft.alloy.silicon_carbide.name=碳化硅锭 item.nuclearcraft.alloy.silicon_carbide.name=碳化硅锭
item.nuclearcraft.alloy.sic_sic_cmc.name=碳化硅纤维增韧型碳化硅陶瓷基复合材料 item.nuclearcraft.alloy.sic_sic_cmc.name=碳化硅纤维增韧型碳化硅陶瓷基复合材料
item.nuclearcraft.alloy.hsla_steel.name=高强度低合金钢锭 item.nuclearcraft.alloy.hsla_steel.name=高强度低合金钢锭
item.nuclearcraft.alloy.zirconium_molybdenum.name=锆钼合金锭
item.nuclearcraft.compound.calcium_sulfate.name=硫酸钙 item.nuclearcraft.compound.calcium_sulfate.name=硫酸钙
item.nuclearcraft.compound.crystal_binder.name=水晶粘合剂 item.nuclearcraft.compound.crystal_binder.name=水晶粘合剂
@ -1616,6 +1635,12 @@ item.nuclearcraft.fission_dust.radium.name=镭粉
item.nuclearcraft.fission_dust.polonium.name=钋粉 item.nuclearcraft.fission_dust.polonium.name=钋粉
item.nuclearcraft.fission_dust.tbp.name=镤-富集钍粉 item.nuclearcraft.fission_dust.tbp.name=镤-富集钍粉
item.nuclearcraft.fission_dust.protactinium_233.name=镤-233粉 item.nuclearcraft.fission_dust.protactinium_233.name=镤-233粉
item.nuclearcraft.fission_dust.strontium_90.name=锶-90粉
item.nuclearcraft.fission_dust.molybdenum.name=钼粉
item.nuclearcraft.fission_dust.ruthenium_106.name=钌-106粉
item.nuclearcraft.fission_dust.caesium_137.name=铯-137粉
item.nuclearcraft.fission_dust.promethium_147.name=钷-147粉
item.nuclearcraft.fission_dust.europium_155.name=铕-155粉
item.nuclearcraft.uranium.233.name=铀-233 item.nuclearcraft.uranium.233.name=铀-233
item.nuclearcraft.uranium.233_c.name=铀-233 碳化物 item.nuclearcraft.uranium.233_c.name=铀-233 碳化物
@ -2246,6 +2271,8 @@ jei.nuclearcraft.salt_fuel_criticality=燃料临界值:
jei.nuclearcraft.salt_fuel_radiation=燃料辐射: jei.nuclearcraft.salt_fuel_radiation=燃料辐射:
jei.nuclearcraft.salt_fuel_self_priming=强中子射源! jei.nuclearcraft.salt_fuel_self_priming=强中子射源!
jei.nuclearcraft.fission_emergency_cooling_per_mb=每mB输入提供冷却:
jei.nuclearcraft.fusion_time=基础连续时间: jei.nuclearcraft.fusion_time=基础连续时间:
jei.nuclearcraft.fusion_power=基础能量上限: jei.nuclearcraft.fusion_power=基础能量上限:
jei.nuclearcraft.fusion_temp=最佳温度: jei.nuclearcraft.fusion_temp=最佳温度:
@ -2343,7 +2370,9 @@ gui.nc.config.energy_upgrade_power_laws_fp.comment=能量升级的功率设定
gui.nc.config.energy_upgrade_multipliers_fp=能量升级倍率 gui.nc.config.energy_upgrade_multipliers_fp=能量升级倍率
gui.nc.config.energy_upgrade_multipliers_fp.comment=能量升级的基础倍率。顺序:功率。 gui.nc.config.energy_upgrade_multipliers_fp.comment=能量升级的基础倍率。顺序:功率。
gui.nc.config.rf_per_eu=[IC2]工业2的EU与RF的转换率 gui.nc.config.rf_per_eu=[IC2]工业2的EU与RF的转换率
gui.nc.config.rf_per_eu.comment=[IC2]工业2的能量单位与红石通量的比值。 gui.nc.config.rf_per_eu.comment=[IC2]工业2和[GTCE]格雷科技:社区版的能量单位与红石通量的比值。
gui.nc.config.enable_ic2_eu=启用[IC2]工业2的EU支持。
gui.nc.config.enable_ic2_eu.comment=若设定为真True[IC2]工业2的能量将会被核电工艺的机器接受或发出。
gui.nc.config.enable_gtce_eu=[GTCE]格雷科技社区版的EU支持 gui.nc.config.enable_gtce_eu=[GTCE]格雷科技社区版的EU支持
gui.nc.config.enable_gtce_eu.comment=如果设定为 (true) ,那么[GTCE]格雷科技社区版的EU可以被核电工艺的机器接收。 gui.nc.config.enable_gtce_eu.comment=如果设定为 (true) ,那么[GTCE]格雷科技社区版的EU可以被核电工艺的机器接收。
gui.nc.config.enable_mek_gas=启用[Mek]通用机械的气体 gui.nc.config.enable_mek_gas=启用[Mek]通用机械的气体
@ -2381,9 +2410,9 @@ gui.nc.config.rtg_power.comment=放射性热电发电机的能量产出(单位
gui.nc.config.solar_power=太阳能电池板能量产出 gui.nc.config.solar_power=太阳能电池板能量产出
gui.nc.config.solar_power.comment=太阳能电池板的能量产出单位RF/t。顺序基础高级贫铀精英。 gui.nc.config.solar_power.comment=太阳能电池板的能量产出单位RF/t。顺序基础高级贫铀精英。
gui.nc.config.decay_lifetime=衰变产能器平均寿命 gui.nc.config.decay_lifetime=衰变产能器平均寿命
gui.nc.config.decay_lifetime.comment=与衰变产能器接触的放射性方块的平均寿命。顺序:钍,铀,枯竭钍,枯竭铀,枯竭镎,枯竭钚,枯竭镅,枯竭锔,枯竭锫,枯竭锎。 gui.nc.config.decay_lifetime.comment=与衰变产能器接触的放射性方块的平均寿命。顺序:钍,铀,铀-238,镎-237,钚-242,镅-243,锔-246,锫-247,锎-252
gui.nc.config.decay_power=衰变产能器能量产出 gui.nc.config.decay_power=衰变产能器能量产出
gui.nc.config.decay_power.comment=与衰变产能器接触的放射性方块的能量产出。顺序:钍,铀,枯竭钍,枯竭铀,枯竭镎,枯竭钚,枯竭镅,枯竭锔,枯竭锫,枯竭锎。 gui.nc.config.decay_power.comment=与衰变产能器接触的放射性方块的能量产出。顺序:钍,铀,铀-238,镎-237,钚-242,镅-243,锔-246,锫-247,锎-252
gui.nc.config.category.energy_storage=能量储存配置 gui.nc.config.category.energy_storage=能量储存配置
gui.nc.config.category.energy_storage.tooltip=配置对能量的储存。 gui.nc.config.category.energy_storage.tooltip=配置对能量的储存。
@ -2760,7 +2789,7 @@ gui.nc.config.radiation_scrubber_radius.comment=The range of scrubbers' search f
gui.nc.config.radiation_scrubber_non_linear=Non-linear Scrubber Mechanics gui.nc.config.radiation_scrubber_non_linear=Non-linear Scrubber Mechanics
gui.nc.config.radiation_scrubber_non_linear.comment=Use a non-linear scrubbing rate equation instead of the linear behaviour? gui.nc.config.radiation_scrubber_non_linear.comment=Use a non-linear scrubbing rate equation instead of the linear behaviour?
gui.nc.config.radiation_scrubber_param=Non-linear Scrubber Parameters gui.nc.config.radiation_scrubber_param=Non-linear Scrubber Parameters
gui.nc.config.radiation_scrubber_param.comment=The four parameters a,b,c,d in the non-linear scrubbing rate equation 'F = a^[-(S/b)^(S/c + 1)^(1/d)]', where 'F' is the remaining fraction of radiation left in the chunk's update buffer after scrubbing and 'S' is the effective number of scrubbers in the chunk after accounting for inefficiencies. It is recommended that you only modify these if you know what you are doing. gui.nc.config.radiation_scrubber_param.comment=The four parameters a,b,c,d in the non-linear scrubbing rate equation 'F = a^[-(S/b)^(S/c + 1)^(1/d)]', where 'F' is the remaining fraction of radiation left in the chunk's update buffer after scrubbing and 'S' is the effective number of scrubbers in the chunk after accounting for their efficiencies. It is recommended that you only modify these if you know what you are doing.
gui.nc.config.radiation_scrubber_time=Scrubber Recipe Lifetime gui.nc.config.radiation_scrubber_time=Scrubber Recipe Lifetime
gui.nc.config.radiation_scrubber_time.comment=The lifetime in ticks of one item or 250 mB of fluid in an active scrubber. 顺序borax dust, RadAway, Slow-Acting RadAway gui.nc.config.radiation_scrubber_time.comment=The lifetime in ticks of one item or 250 mB of fluid in an active scrubber. 顺序borax dust, RadAway, Slow-Acting RadAway
gui.nc.config.radiation_scrubber_power=Scrubber Recipe Power Use gui.nc.config.radiation_scrubber_power=Scrubber Recipe Power Use
@ -2915,6 +2944,11 @@ nc.block.fission_vent_mode.input=输入
nc.block.fission_vent_mode.output=输出 nc.block.fission_vent_mode.output=输出
nc.block.vent_toggle.mode=模式! nc.block.vent_toggle.mode=模式!
nc.block.port_toggle=切换端口为
nc.block.fission_port_mode.input=输入
nc.block.fission_port_mode.output=输出
nc.block.port_toggle.mode=模式!
nc.block.fluid_toggle=将本面模式切换为: nc.block.fluid_toggle=将本面模式切换为:
nc.block.fluid_toggle_opposite=将反面模式切换为: nc.block.fluid_toggle_opposite=将反面模式切换为:
@ -3005,6 +3039,8 @@ gui.nc.container.salt_fission_vessel.heat_stored=集群热量等级:
gui.nc.container.salt_fission_heater.heater=裂变冷却液加热器 gui.nc.container.salt_fission_heater.heater=裂变冷却液加热器
gui.nc.container.salt_fission_heater.heat_stored=集群热量等级: gui.nc.container.salt_fission_heater.heat_stored=集群热量等级:
gui.nc.container.fission_heater_port.name=裂变冷却液加热器端口
gui.nc.container.fusion_core.reactor=聚变反应堆 gui.nc.container.fusion_core.reactor=聚变反应堆
gui.nc.container.fusion_core.ring_incomplete=磁环未完成 gui.nc.container.fusion_core.ring_incomplete=磁环未完成
gui.nc.container.fusion_core.ring_incomplete_at=磁环未完成 gui.nc.container.fusion_core.ring_incomplete_at=磁环未完成
@ -3115,6 +3151,7 @@ nuclearcraft.fission_moderator.jei_name=裂变减速剂
nuclearcraft.fission_reflector.jei_name=裂变反射器 nuclearcraft.fission_reflector.jei_name=裂变反射器
nuclearcraft.fission_heating.jei_name=固态燃料裂变加热 nuclearcraft.fission_heating.jei_name=固态燃料裂变加热
nuclearcraft.multiblock_gui.salt_fission.jei_name=熔盐裂变 nuclearcraft.multiblock_gui.salt_fission.jei_name=熔盐裂变
nuclearcraft.fission_emergency_cooling.jei_name=熔盐反应堆紧急冷却
nuclearcraft.multiblock_gui.coolant_heater.jei_name=熔盐冷却 nuclearcraft.multiblock_gui.coolant_heater.jei_name=熔盐冷却
nuclearcraft.multiblock_gui.heat_exchanger.jei_name=热交换管道 nuclearcraft.multiblock_gui.heat_exchanger.jei_name=热交换管道
nuclearcraft.multiblock_gui.condenser.jei_name=冷凝管道 nuclearcraft.multiblock_gui.condenser.jei_name=冷凝管道
@ -3373,6 +3410,10 @@ commands.nuclearcraft.set_chunk_radius_radiation.usage=/nc_set_chunk_radius_radi
commands.nuclearcraft.set_world_radiation.usage=/nc_set_world_radiation <辐射量> commands.nuclearcraft.set_world_radiation.usage=/nc_set_world_radiation <辐射量>
commands.nuclearcraft.set_player_radiation.usage=/nc_set_world_radiation <辐射量> [玩家] commands.nuclearcraft.set_player_radiation.usage=/nc_set_world_radiation <辐射量> [玩家]
commands.nuclearcraft.reconstruct_script_addons.usage=/nc_reload_script_addons ["syntax"]
commands.nuclearcraft.reconstruct_script_addons.success=重新构建脚本插件成功!
commands.nuclearcraft.reconstruct_script_addons.fail=在尝试重新构建脚本插件时出现了一个错误……
message.nuclearcraft.radiation_config_info=服务端启用了关于辐射的设定! message.nuclearcraft.radiation_config_info=服务端启用了关于辐射的设定!
message.nuclearcraft.radiation_config_info_jei=服务端启用了关于辐射的设定!建议客户端一并启用,以查看与辐射相关的全部内容! message.nuclearcraft.radiation_config_info_jei=服务端启用了关于辐射的设定!建议客户端一并启用,以查看与辐射相关的全部内容!
@ -3430,7 +3471,7 @@ nc.sf.placement_rule.adjacent.ambiguity0prev=!同一条线&&!同几条线&&!同
nc.sf.placement_rule.adjacent.ambiguity0last=同一条线||同几条线||同一个垂直处 nc.sf.placement_rule.adjacent.ambiguity0last=同一条线||同几条线||同一个垂直处
nc.sf.placement_rule.adjacent.ambiguity1prev=在同一||在同几 nc.sf.placement_rule.adjacent.ambiguity1prev=在同一||在同几
nc.sf.casing0=%s反应堆外壳 nc.sf.reactor_casing0=%s反应堆外壳
nc.sf.cell0=%s有效的燃料单元 nc.sf.cell0=%s有效的燃料单元
nc.sf.vessel0=%s有效的燃料容器 nc.sf.vessel0=%s有效的燃料容器
nc.sf.moderator0=%s可生效的且与有效单元相邻的减速剂 nc.sf.moderator0=%s可生效的且与有效单元相邻的减速剂
@ -3506,6 +3547,7 @@ nc.sf.liquid_helium_heater0=%s有效的液氦加热器
nc.sf.enderium_heater0=%s有效的末影加热器 nc.sf.enderium_heater0=%s有效的末影加热器
nc.sf.cryotheum_heater0=%s有效的凛冰加热器 nc.sf.cryotheum_heater0=%s有效的凛冰加热器
nc.sf.turbine_casing0=%s 涡轮机外壳
nc.sf.bearing0=%s有效的转子轴承 nc.sf.bearing0=%s有效的转子轴承
nc.sf.connector0=%s有效的线圈连接器 nc.sf.connector0=%s有效的线圈连接器

View File

@ -19,7 +19,7 @@
{ {
"anchor": "bin", "anchor": "bin",
"type": "blocks/1", "type": "blocks/1",
"header": "Universal Bin", "header": "通用垃圾桶",
"block": "nuclearcraft:bin", "block": "nuclearcraft:bin",
"text": "盒中黑洞,摧毁一切导入之物,包括但不限于:物品、流体、能量……" "text": "盒中黑洞,摧毁一切导入之物,包括但不限于:物品、流体、能量……"
} }

View File

@ -1,5 +1,3 @@
New turbine penalty: "So perhaps there should be a second part of the penalty, i.e. like the fission one as Quantum suggests, with the leniency based on how small the turbine can be given that minimum number of rows"
Adjacent MSR vessels with same filter form bundle to share flux, shared criticality factor is sum of single vessel criticality factors Adjacent MSR vessels with same filter form bundle to share flux, shared criticality factor is sum of single vessel criticality factors
Take number of available open faces of vessel bundle into account when calculating the heat multiplier (and efficiency) Take number of available open faces of vessel bundle into account when calculating the heat multiplier (and efficiency)