Compare commits

..

No commits in common. "80961678c1a48a0226e32de5ccd90f5755c6fb8a" and "d8bc4b93038ef02cdc870be3fc257d376585918f" have entirely different histories.

60 changed files with 238 additions and 428 deletions

View File

@ -1,17 +1,3 @@
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
+ Added fission waste products

View File

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

View File

@ -211,7 +211,7 @@ public class NCConfig {
public static double[] turbine_power_per_mb;
public static double[] turbine_expansion_level;
public static int turbine_mb_per_blade;
public static double[] turbine_throughput_leniency_params;
public static double turbine_throughput_efficiency_leniency;
public static double turbine_tension_throughput_factor;
public static double turbine_power_bonus_multiplier;
public static double turbine_sound_volume;
@ -732,8 +732,8 @@ public class NCConfig {
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);
propertyTurbineMBPerBlade.setLanguageKey("gui.nc.config.turbine_mb_per_blade");
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);
propertyTurbineThroughputLeniencyParams.setLanguageKey("gui.nc.config.turbine_throughput_leniency_params");
Property propertyTurbineThroughputEfficiencyLeniency = config.get(CATEGORY_TURBINE, "turbine_throughput_efficiency_leniency", 1D, Lang.localise("gui.nc.config.turbine_throughput_efficiency_leniency.comment"), 0D, 255D);
propertyTurbineThroughputEfficiencyLeniency.setLanguageKey("gui.nc.config.turbine_throughput_efficiency_leniency");
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");
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(propertyTurbineExpansionLevel.getName());
propertyOrderTurbine.add(propertyTurbineMBPerBlade.getName());
propertyOrderTurbine.add(propertyTurbineThroughputLeniencyParams.getName());
propertyOrderTurbine.add(propertyTurbineThroughputEfficiencyLeniency.getName());
propertyOrderTurbine.add(propertyTurbineTensionThroughputFactor.getName());
propertyOrderTurbine.add(propertyTurbinePowerBonusMultiplier.getName());
propertyOrderTurbine.add(propertyTurbineSoundVolume.getName());
@ -1519,7 +1519,7 @@ public class NCConfig {
turbine_power_per_mb = readDoubleArrayFromConfig(propertyTurbinePowerPerMB);
turbine_expansion_level = readDoubleArrayFromConfig(propertyTurbineExpansionLevel);
turbine_mb_per_blade = propertyTurbineMBPerBlade.getInt();
turbine_throughput_leniency_params = readDoubleArrayFromConfig(propertyTurbineThroughputLeniencyParams);
turbine_throughput_efficiency_leniency = propertyTurbineThroughputEfficiencyLeniency.getDouble();
turbine_tension_throughput_factor = propertyTurbineTensionThroughputFactor.getDouble();
turbine_power_bonus_multiplier = propertyTurbinePowerBonusMultiplier.getDouble();
turbine_sound_volume = propertyTurbineSoundVolume.getDouble();
@ -1841,7 +1841,7 @@ public class NCConfig {
propertyTurbinePowerPerMB.set(turbine_power_per_mb);
propertyTurbineExpansionLevel.set(turbine_expansion_level);
propertyTurbineMBPerBlade.set(turbine_mb_per_blade);
propertyTurbineThroughputLeniencyParams.set(turbine_throughput_leniency_params);
propertyTurbineThroughputEfficiencyLeniency.set(turbine_throughput_efficiency_leniency);
propertyTurbineTensionThroughputFactor.set(turbine_tension_throughput_factor);
propertyTurbinePowerBonusMultiplier.set(turbine_power_bonus_multiplier);
propertyTurbineSoundVolume.set(turbine_sound_volume);
@ -2005,14 +2005,14 @@ public class NCConfig {
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<>();
for (Object2ObjectMap.Entry<String, String> entry : TurbinePlacement.RULE_MAP_RAW.object2ObjectEntrySet()) {
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()]));
propertyTurbinePlacement.setLanguageKey("gui.nc.config.turbine_placement");

View File

@ -9,15 +9,17 @@ import nc.util.*;
public class ScriptAddonHandler {
public static final ObjectSet<File> SCRIPT_ADDON_DIRS = new ObjectOpenHashSet<>();
public static void init() throws IOException {
NCUtil.getLogger().info("Constructing NuclearCraft Script Addons...");
new File("resources/nuclearcraft").mkdirs();
File nc = new File("resources/nuclearcraft");
if (!nc.exists()) {
nc.mkdirs();
}
for (String s : new String[] {"addons", "advancements", "blockstates", "lang", "loot_tables", "models/block", "models/item", "patchouli_books/guide", "textures/blocks", "textures/items"}) {
new File("resources/nuclearcraft/" + s).mkdirs();
File f = new File("resources/nuclearcraft/" + s);
if (!f.exists()) {
f.mkdirs();
}
}
File scripts = new File("scripts/nc_script_addons");
@ -30,45 +32,20 @@ public class ScriptAddonHandler {
legacy.delete();
}
File temp = new File("resources/nuclearcraft/addons/.temp");
temp.mkdirs();
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()) {
if (f.isDirectory()) {
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[] 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 {
String dirName = dir.getName();
String dirNameLowerCase = dirName.toLowerCase();
for (String suffix : IGNORE_SUFFIX) {
if (dirNameLowerCase.endsWith(suffix)) {
return;
}
if (dir.getName().toLowerCase().endsWith(".disabled")) {
return;
}
for (File f : dir.listFiles()) {
@ -76,29 +53,25 @@ public class ScriptAddonHandler {
for (String s : NC_ASSETS) {
if (f.getName().equals(s)) {
FileUtils.copyDirectory(f, new File("resources/nuclearcraft/" + s));
SCRIPT_ADDON_DIRS.add(dir);
break;
}
}
if (f.getName().equals("lang")) {
copyLangs(dir, f);
SCRIPT_ADDON_DIRS.add(dir);
}
else if (f.getName().equals("scripts")) {
File legacy = new File("scripts/nuclearcraft/" + dirName);
File legacy = new File("scripts/nuclearcraft/" + dir.getName());
if (legacy.exists()) {
FileUtils.deleteDirectory(legacy);
}
FileUtils.copyDirectory(f, new File("scripts/nc_script_addons/" + dirName));
SCRIPT_ADDON_DIRS.add(dir);
FileUtils.copyDirectory(f, new File("scripts/nc_script_addons/" + dir.getName()));
}
else if (f.getName().equals("contenttweaker")) {
FileUtils.copyDirectory(f, new File("resources/contenttweaker"));
SCRIPT_ADDON_DIRS.add(dir);
}
else {

View File

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

View File

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

View File

@ -63,7 +63,7 @@ public class GuiTurbineController extends GuiMultiblock<Turbine, ITurbineControl
else {
double rateRatio = multiblock.recipeInputRate / (double) multiblock.getLogic().getMaxRecipeRateMultiplier();
double rateRatioFP = multiblock.recipeInputRateFP / multiblock.getLogic().getMaxRecipeRateMultiplier();
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 ? "%] [!]" : "%]");
inputRate = Lang.localise("gui.nc.container.turbine_controller.fluid_rate") + " " + UnitHelper.prefix(multiblock.recipeInputRateFP, 6, "B/t", -1) + " [" + Math.round(100D * rateRatioFP) + (rateRatio > 1D ? "%] [!]" : "%]");
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));

View File

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

View File

@ -274,10 +274,8 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
getTurbine().angVel = getTurbine().rotorAngle = 0F;
getTurbine().flowDir = null;
getTurbine().shaftWidth = getTurbine().inertia = getTurbine().bladeLength = getTurbine().noBladeSets = getTurbine().recipeInputRate = 0;
getTurbine().totalExpansionLevel = getTurbine().idealTotalExpansionLevel = 1D;
getTurbine().totalExpansionLevel = getTurbine().idealTotalExpansionLevel = getTurbine().maxBladeExpansionCoefficient = getTurbine().minStatorExpansionCoefficient = 1D;
getTurbine().minBladeExpansionCoefficient = Double.MAX_VALUE;
getTurbine().maxBladeExpansionCoefficient = 1D;
getTurbine().minStatorExpansionCoefficient = 1D;
getTurbine().maxStatorExpansionCoefficient = Double.MIN_VALUE;
getTurbine().particleEffect = "cloud";
getTurbine().particleSpeedMult = 1D / 23.2D;
@ -850,7 +848,7 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
getTurbine().recipeInputRate = Math.min(getTurbine().tanks.get(0).getFluidAmount(), (int) (turbine_tension_throughput_factor * getMaxRecipeRateMultiplier()));
recipeInputRateDiff = Math.abs(recipeInputRateDiff - getTurbine().recipeInputRate);
double roundingFactor = Math.max(0D, 1.5D * Math.log1p(getTurbine().recipeInputRate / (1D + recipeInputRateDiff)));
double roundingFactor = Math.max(0D, 2D * Math.log1p(getTurbine().recipeInputRate / (1 + recipeInputRateDiff)));
getTurbine().recipeInputRateFP = (roundingFactor * getTurbine().recipeInputRateFP + getTurbine().recipeInputRate) / (1D + roundingFactor);
if (!getTurbine().tanks.get(1).isEmpty()) {
@ -945,18 +943,20 @@ public class TurbineLogic extends MultiblockLogic<Turbine, TurbineLogic, ITurbin
}
public double getThroughputEfficiency() {
double effectiveMinLength = getTurbine().idealTotalExpansionLevel <= 1D || getTurbine().maxBladeExpansionCoefficient <= 1D ? getMaximumInteriorLength() : Math.ceil(Math.log(getTurbine().idealTotalExpansionLevel) / Math.log(getTurbine().maxBladeExpansionCoefficient));
double absoluteLeniency = effectiveMinLength * getTurbine().getMinimumBladeArea() * turbine_mb_per_blade;
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];
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 absoluteLeniency = getTurbine().getBladeArea() * leniencyMult * turbine_mb_per_blade;
return getMaxRecipeRateMultiplier() == 0 ? 1D : Math.min(1D, (getTurbine().recipeInputRateFP + absoluteLeniency) / getMaxRecipeRateMultiplier());
}
public void setEffectiveMaxLength() {
if (getTurbine().minBladeExpansionCoefficient <= 1D || getTurbine().minStatorExpansionCoefficient >= 1D) {
if (getTurbine().minBladeExpansionCoefficient <= 1) {
getTurbine().effectiveMaxLength = getMaximumInteriorLength();
}
else if (getTurbine().minStatorExpansionCoefficient >= 1) {
getTurbine().effectiveMaxLength = NCMath.clamp(Math.log(getTurbine().idealTotalExpansionLevel) / Math.log(getTurbine().minBladeExpansionCoefficient), 1D, getMaximumInteriorLength());
}
else {
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())));
getTurbine().effectiveMaxLength = 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)) {
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 continually appear!");
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!");
return;
}

View File

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

View File

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

View File

@ -51,7 +51,11 @@ public class RadiationHandler {
@SubscribeEvent
public void updatePlayerRadiation(TickEvent.PlayerTickEvent event) {
if (radiation_enabled_public && !radiation_require_counter && event.phase == TickEvent.Phase.START && event.side == Side.CLIENT) {
if (!radiation_enabled_public) {
return;
}
if (!radiation_require_counter && event.phase == TickEvent.Phase.START && event.side == Side.CLIENT) {
playGeigerSound(event.player);
}
@ -74,10 +78,6 @@ public class RadiationHandler {
}
}
if (!radiation_enabled_public) {
return;
}
if (ModCheck.gameStagesLoaded()) {
playerRads.setRadiationImmunityStage(default_rad_immunity ^ GameStageHelper.hasAnyOf(player, rad_immunity_stages));
}
@ -201,10 +201,6 @@ public class RadiationHandler {
}
}
else {
if (!radiation_enabled_public) {
return;
}
EntityPlayer player = event.player;
IEntityRads playerRads = RadiationHelper.getEntityRadiation(player);
if (playerRads == null) {
@ -428,7 +424,7 @@ public class RadiationHandler {
}
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 / RecipeStats.getBlockMutationThreshold()));
long j = Math.min(radiation_block_effect_max_rate, (long) Math.log(Math.E - 1D + radiation / getBlockMutationThreshold()));
while (j > 0) {
j--;
BlockPos randomChunkPos = newRandomPosInChunk(chunk);
@ -449,7 +445,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 + RecipeStats.getBlockPurificationThreshold() / radiation));
j = radiation == 0D ? radiation_block_effect_max_rate : Math.min(radiation_block_effect_max_rate, (long) Math.log(Math.E - 1D + getBlockPurificationThreshold() / radiation));
while (j > 0) {
j--;
BlockPos randomChunkPos = newRandomPosInChunk(chunk);
@ -470,6 +466,36 @@ 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) {
IEntityRads entityRads = RadiationHelper.getEntityRadiation(player);
if (entityRads == null || entityRads.isRawRadiationNegligible()) {

View File

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

View File

@ -58,8 +58,6 @@ public class NCRecipes {
public static RadiationBlockMutation radiation_block_mutation;
public static RadiationBlockPurification radiation_block_purification;
public static ProcessorRecipeHandler[] processor_recipe_handlers;
@SubscribeEvent(priority = EventPriority.LOW)
public void registerRecipes(RegistryEvent.Register<IRecipe> event) {
if (initialized) {
@ -106,8 +104,6 @@ public class NCRecipes {
radiation_block_mutation = new RadiationBlockMutation();
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();
FurnaceRecipeHandler.registerFurnaceRecipes();
GameRegistry.registerFuelHandler(new FurnaceFuelHandler());

View File

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

View File

@ -1,114 +0,0 @@
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);
}
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) {
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) {
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) (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) (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) (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) (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);
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 + "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 + "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 + "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);
}
@Override

View File

@ -22,14 +22,10 @@ import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.*;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.oredict.*;
import vazkii.patchouli.common.item.ItemModBook;
public class CraftingRecipeHandler {
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++) {
String type = StringHelper.capitalize(IngotType.values()[i].getName());
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 java.util.Random;
import java.util.*;
import nc.recipe.*;
import nc.tile.dummy.IInterfaceable;
@ -25,7 +25,7 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
protected int generatorCount;
public TileDecayGenerator() {
super(2 * RecipeStats.getDecayGeneratorMaxPower(), ITileEnergy.energyConnectionAll(EnergyConnection.OUT));
super(maxPower(), ITileEnergy.energyConnectionAll(EnergyConnection.OUT));
}
@Override
@ -53,6 +53,18 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
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() {
double power = 0D;
for (EnumFacing side : EnumFacing.VALUES) {
@ -65,7 +77,7 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
double radiation = 0D;
for (EnumFacing side : EnumFacing.VALUES) {
if (getDecayRecipe(side) != null) {
radiation += getDecayRecipe(side).getDecayGeneratorRadiation();
radiation += getDecayRecipe(side).getDecayRadiation();
}
}
return machine_update_rate * radiation;
@ -111,7 +123,7 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
@Override
public int getSourceTier() {
return EnergyHelper.getEUTier(RecipeStats.getDecayGeneratorMaxPower());
return EnergyHelper.getEUTier(maxPower());
}
// Recipe from BlockPos
@ -124,14 +136,14 @@ public class TileDecayGenerator extends TileEnergy implements ITickable, IInterf
if (getDecayRecipe(side) == null) {
return 1200D;
}
return getDecayRecipe(side).getDecayGeneratorLifetime();
return getDecayRecipe(side).getDecayLifetime();
}
public double getRecipePower(EnumFacing side) {
if (getDecayRecipe(side) == null) {
return 0D;
}
return getDecayRecipe(side).getDecayGeneratorPower();
return getDecayRecipe(side).getDecayPower();
}
public ItemStack getOutput(EnumFacing side) {

View File

@ -1,6 +1,8 @@
package nc.tile.processor;
import nc.recipe.RecipeStats;
import java.util.List;
import nc.recipe.*;
import nc.tile.dummy.IInterfaceable;
import nc.util.NCMath;
import net.minecraft.util.ITickable;
@ -13,7 +15,29 @@ public abstract interface IProcessor extends ITickable, IInterfaceable {
public void refreshActivityOnProduction();
public static int getCapacity(int processorID, double speedMultiplier, double powerMultiplier) {
return NCMath.toInt(Math.ceil(RecipeStats.getProcessorMaxBaseProcessTime(processorID) / speedMultiplier) * Math.ceil(RecipeStats.getProcessorMaxBaseProcessPower(processorID) * powerMultiplier));
public static double maxStat(ProcessorRecipeHandler recipeHandler, int extraIndex) {
double max = 1D;
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) {
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));
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));
fluidInputSize = fluidInSize;
fluidOutputSize = fluidOutSize;
@ -179,7 +179,7 @@ public class TileFluidProcessor extends TileEnergyFluidSidedInventory implements
}
public void setCapacityFromSpeed() {
int capacity = IProcessor.getCapacity(processorID, getSpeedMultiplier(), getPowerMultiplier());
int capacity = IProcessor.getCapacity(recipeHandler, defaultProcessTime, getSpeedMultiplier(), defaultProcessPower, getPowerMultiplier());
getEnergyStorage().setStorageCapacity(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) {
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));
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));
itemInputSize = itemInSize;
fluidInputSize = fluidInSize;
itemOutputSize = itemOutSize;
@ -188,7 +188,7 @@ public class TileItemFluidProcessor extends TileEnergyFluidSidedInventory implem
}
public void setCapacityFromSpeed() {
int capacity = IProcessor.getCapacity(processorID, getSpeedMultiplier(), getPowerMultiplier());
int capacity = IProcessor.getCapacity(recipeHandler, defaultProcessTime, getSpeedMultiplier(), defaultProcessPower, getPowerMultiplier());
getEnergyStorage().setStorageCapacity(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) {
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));
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));
itemInputSize = itemInSize;
itemOutputSize = itemOutSize;
@ -164,7 +164,7 @@ public class TileItemProcessor extends TileEnergySidedInventory implements IItem
}
public void setCapacityFromSpeed() {
int capacity = IProcessor.getCapacity(processorID, getSpeedMultiplier(), getPowerMultiplier());
int capacity = IProcessor.getCapacity(recipeHandler, defaultProcessTime, getSpeedMultiplier(), defaultProcessPower, getPowerMultiplier());
getEnergyStorage().setStorageCapacity(capacity);
getEnergyStorage().setMaxTransfer(capacity);
}

View File

@ -2,7 +2,7 @@ package nc.tile.radiation;
import static nc.config.NCConfig.*;
import java.util.Iterator;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.*;
@ -31,10 +31,22 @@ public class TileRadiationScrubber extends TileItemFluidGenerator implements ITi
private int radCheckCount = 0;
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, NCMath.toInt(20 * RecipeStats.getScrubberMaxProcessPower()), 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, maxPower(), NCRecipes.radiation_scrubber);
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
public void onLoad() {
super.onLoad();

View File

@ -1,7 +1,6 @@
package nc.util;
import java.io.*;
import java.util.zip.*;
public class IOHelper {
@ -21,49 +20,4 @@ public class IOHelper {
writer.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,10 +22,12 @@ public class StringHelper {
}
public static String removePrefix(String s, int length) {
// int fixedLength = Math.min(length, s.length());
return s.substring(length);
}
public static String removeSuffix(String s, int length) {
// int fixedLength = Math.min(length, s.length());
return s.substring(0, s.length() - length);
}

View File

@ -2247,7 +2247,6 @@ jei.nuclearcraft.collector_production_rate=Production rate:
jei.nuclearcraft.irradiator_flux_required=Flux required:
jei.nuclearcraft.irradiator_heat_per_flux=Heat gen per flux:
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_heat=Base heat gen:

View File

@ -436,7 +436,7 @@ fluid.deuterium=氘
tile.nuclearcraft.fluid_tritium.name=氚
fluid.tritium=氚
tile.nuclearcraft.fluid_helium_3.name=氦-3
tile.nuclearcraft.fluid_helium3.name=氦-3
fluid.helium3=氦-3
tile.nuclearcraft.fluid_helium.name=氦
@ -488,17 +488,17 @@ tile.nuclearcraft.fluid_plasma.name=等离子体
tile.nuclearcraft.fluid_plasma.desc=从聚变反应堆中产生。当与未充能的聚变电磁铁发生接触时可能导致火焰与爆炸。
fluid.plasma=等离子体
tile.nuclearcraft.fluid_lithium_6.name=熔融锂-6
fluid.lithium_6=熔融锂-6
tile.nuclearcraft.fluid_lithium6.name=熔融锂-6
fluid.lithium6=熔融锂-6
tile.nuclearcraft.fluid_lithium_7.name=熔融锂-7
fluid.lithium_7=熔融锂-7
tile.nuclearcraft.fluid_lithium7.name=熔融锂-7
fluid.lithium7=熔融锂-7
tile.nuclearcraft.fluid_boron_10.name=熔融硼-10
fluid.boron_10=熔融硼-10
tile.nuclearcraft.fluid_boron10.name=熔融硼-10
fluid.boron10=熔融硼-10
tile.nuclearcraft.fluid_boron_11.name=熔融硼-11
fluid.boron_11=熔融硼-11
tile.nuclearcraft.fluid_boron11.name=熔融硼-11
fluid.boron11=熔融硼-11
tile.nuclearcraft.fluid_ferroboron.name=熔融硼铁合金
fluid.ferroboron=熔融硼铁合金
@ -697,24 +697,6 @@ fluid.alugentum=熔融银铝
tile.nuclearcraft.fluid_alumina.name=熔融铁矾土
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=熔融钍
fluid.thorium=熔融钍
tile.nuclearcraft.fluid_uranium.name=熔融铀
@ -1592,7 +1574,6 @@ item.nuclearcraft.alloy.zircaloy.name=锆锡合金锭
item.nuclearcraft.alloy.silicon_carbide.name=碳化硅锭
item.nuclearcraft.alloy.sic_sic_cmc.name=碳化硅纤维增韧型碳化硅陶瓷基复合材料
item.nuclearcraft.alloy.hsla_steel.name=高强度低合金钢锭
item.nuclearcraft.alloy.zirconium_molybdenum.name=锆钼合金锭
item.nuclearcraft.compound.calcium_sulfate.name=硫酸钙
item.nuclearcraft.compound.crystal_binder.name=水晶粘合剂
@ -1635,12 +1616,6 @@ item.nuclearcraft.fission_dust.radium.name=镭粉
item.nuclearcraft.fission_dust.polonium.name=钋粉
item.nuclearcraft.fission_dust.tbp.name=镤-富集钍粉
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_c.name=铀-233 碳化物
@ -2271,8 +2246,6 @@ jei.nuclearcraft.salt_fuel_criticality=燃料临界值:
jei.nuclearcraft.salt_fuel_radiation=燃料辐射:
jei.nuclearcraft.salt_fuel_self_priming=强中子射源!
jei.nuclearcraft.fission_emergency_cooling_per_mb=每mB输入提供冷却:
jei.nuclearcraft.fusion_time=基础连续时间:
jei.nuclearcraft.fusion_power=基础能量上限:
jei.nuclearcraft.fusion_temp=最佳温度:
@ -2370,9 +2343,7 @@ gui.nc.config.energy_upgrade_power_laws_fp.comment=能量升级的功率设定
gui.nc.config.energy_upgrade_multipliers_fp=能量升级倍率
gui.nc.config.energy_upgrade_multipliers_fp.comment=能量升级的基础倍率。顺序:功率。
gui.nc.config.rf_per_eu=[IC2]工业2的EU与RF的转换率
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.rf_per_eu.comment=[IC2]工业2的能量单位与红石通量的比值。
gui.nc.config.enable_gtce_eu=[GTCE]格雷科技社区版的EU支持
gui.nc.config.enable_gtce_eu.comment=如果设定为 (true) ,那么[GTCE]格雷科技社区版的EU可以被核电工艺的机器接收。
gui.nc.config.enable_mek_gas=启用[Mek]通用机械的气体
@ -2410,9 +2381,9 @@ gui.nc.config.rtg_power.comment=放射性热电发电机的能量产出(单位
gui.nc.config.solar_power=太阳能电池板能量产出
gui.nc.config.solar_power.comment=太阳能电池板的能量产出单位RF/t。顺序基础高级贫铀精英。
gui.nc.config.decay_lifetime=衰变产能器平均寿命
gui.nc.config.decay_lifetime.comment=与衰变产能器接触的放射性方块的平均寿命。顺序:钍,铀,铀-238,镎-237,钚-242,镅-243,锔-246,锫-247,锎-252
gui.nc.config.decay_lifetime.comment=与衰变产能器接触的放射性方块的平均寿命。顺序:钍,铀,枯竭钍,枯竭铀,枯竭镎,枯竭钚,枯竭镅,枯竭锔,枯竭锫,枯竭锎。
gui.nc.config.decay_power=衰变产能器能量产出
gui.nc.config.decay_power.comment=与衰变产能器接触的放射性方块的能量产出。顺序:钍,铀,铀-238,镎-237,钚-242,镅-243,锔-246,锫-247,锎-252
gui.nc.config.decay_power.comment=与衰变产能器接触的放射性方块的能量产出。顺序:钍,铀,枯竭钍,枯竭铀,枯竭镎,枯竭钚,枯竭镅,枯竭锔,枯竭锫,枯竭锎。
gui.nc.config.category.energy_storage=能量储存配置
gui.nc.config.category.energy_storage.tooltip=配置对能量的储存。
@ -2789,7 +2760,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.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.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_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_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_power=Scrubber Recipe Power Use
@ -2944,11 +2915,6 @@ nc.block.fission_vent_mode.input=输入
nc.block.fission_vent_mode.output=输出
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_opposite=将反面模式切换为:
@ -3039,8 +3005,6 @@ gui.nc.container.salt_fission_vessel.heat_stored=集群热量等级:
gui.nc.container.salt_fission_heater.heater=裂变冷却液加热器
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.ring_incomplete=磁环未完成
gui.nc.container.fusion_core.ring_incomplete_at=磁环未完成
@ -3151,7 +3115,6 @@ nuclearcraft.fission_moderator.jei_name=裂变减速剂
nuclearcraft.fission_reflector.jei_name=裂变反射器
nuclearcraft.fission_heating.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.heat_exchanger.jei_name=热交换管道
nuclearcraft.multiblock_gui.condenser.jei_name=冷凝管道
@ -3410,10 +3373,6 @@ 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_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_jei=服务端启用了关于辐射的设定!建议客户端一并启用,以查看与辐射相关的全部内容!
@ -3471,7 +3430,7 @@ nc.sf.placement_rule.adjacent.ambiguity0prev=!同一条线&&!同几条线&&!同
nc.sf.placement_rule.adjacent.ambiguity0last=同一条线||同几条线||同一个垂直处
nc.sf.placement_rule.adjacent.ambiguity1prev=在同一||在同几
nc.sf.reactor_casing0=%s反应堆外壳
nc.sf.casing0=%s反应堆外壳
nc.sf.cell0=%s有效的燃料单元
nc.sf.vessel0=%s有效的燃料容器
nc.sf.moderator0=%s可生效的且与有效单元相邻的减速剂
@ -3547,7 +3506,6 @@ nc.sf.liquid_helium_heater0=%s有效的液氦加热器
nc.sf.enderium_heater0=%s有效的末影加热器
nc.sf.cryotheum_heater0=%s有效的凛冰加热器
nc.sf.turbine_casing0=%s 涡轮机外壳
nc.sf.bearing0=%s有效的转子轴承
nc.sf.connector0=%s有效的线圈连接器

View File

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

View File

@ -1,3 +1,5 @@
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
Take number of available open faces of vessel bundle into account when calculating the heat multiplier (and efficiency)