Some checks failed
Deploy to Remote Server / deploy (push) Failing after 1m11s
123 lines
4.6 KiB
JavaScript
123 lines
4.6 KiB
JavaScript
const $ACEntityRegistry = Java.loadClass("com.github.alexmodguy.alexscaves.server.entity.ACEntityRegistry")
|
|
|
|
let ReactorUtil = {}
|
|
|
|
/**
|
|
* 在机器处创造核爆
|
|
* @param {Internal.MBDMachine} machine
|
|
*/
|
|
ReactorUtil.Bombbbb = function(machine) {
|
|
let assembly_count = machine.customData.getInt("assembly_count")
|
|
/** @type {Internal.NuclearExplosionEntity} */
|
|
let Bombbbb = $ACEntityRegistry.NUCLEAR_EXPLOSION.get().create(machine.level)
|
|
Bombbbb.setPos(machine.pos.center)
|
|
Bombbbb.setSize(Math.sqrt((assembly_count / 9 + 1)))
|
|
machine.level.addFreshEntity(Bombbbb)
|
|
}
|
|
|
|
/**
|
|
* 计算核反应堆产热
|
|
* @param {Internal.MBDMachine} machine
|
|
* @returns {number}
|
|
*/
|
|
ReactorUtil.heatProduced = function (machine) {
|
|
let temp = machine.customData.getDouble("temperature")
|
|
let burning_rate = machine.customData.getDouble("burning_rate")
|
|
let assembly_count = machine.customData.getInt("assembly_count") * burning_rate
|
|
let heatProduced = 0
|
|
const isActive = machine.recipeLogic && machine.recipeLogic.fuelTime > 0
|
|
const controlRodsOut = machine.customData.getDouble("burning_rate") != 0
|
|
if (isActive && controlRodsOut) {
|
|
let tempEfficiency = 1.0 - (temp - 298.15) * TEMP_MULTIPLIER
|
|
heatProduced = BASE_HEAT_RATE * assembly_count * Math.max(0.3, tempEfficiency)
|
|
}
|
|
return heatProduced
|
|
}
|
|
|
|
/**
|
|
* 计算核反应堆液冷散热及损坏度降低
|
|
* @param {Internal.MBDMachine} machine
|
|
* @returns {number[]} [0]散热,[1]损坏度降低
|
|
*/
|
|
ReactorUtil.cooling = function(machine) {
|
|
let cooling = 0
|
|
let damageReducecd = 0
|
|
let burning_rate = machine.customData.getDouble("burning_rate")
|
|
let assembly_count = machine.customData.getInt("assembly_count") * burning_rate
|
|
let fluidCap = machine.getCapability(ForgeCapabilities.FLUID_HANDLER).orElse(null)
|
|
if (fluidCap) {
|
|
let coolantEfficiency = 0
|
|
if(machine.machineStateName == "working" && machine.recipeLogic.lastRecipe.getId() != "createdelight:fission_react/empty") {
|
|
let fluid = fluidCap.getFluidInTank(0)
|
|
if (fluid.fluid.getFluidType().toString() == "minecraft:water") coolantEfficiency = 1.0
|
|
else if (fluid.fluid.getFluidType().toString() == "netherexp:ectoplasm") coolantEfficiency = 1.5
|
|
damageReducecd = coolantEfficiency * 0.005 * assembly_count
|
|
cooling = BASE_COOL_RATE * coolantEfficiency * assembly_count * 0.3
|
|
}
|
|
}
|
|
return [cooling, damageReducecd]
|
|
}
|
|
|
|
/**
|
|
* 计算核反应堆当前须输入流体
|
|
* @param {Internal.MBDMachine} machine
|
|
* @returns {number}
|
|
*/
|
|
ReactorUtil.inputFluid = function(machine) {
|
|
let multiplier = machine.customData.getDouble("multiplier")
|
|
let burning_rate = machine.customData.getDouble("burning_rate")
|
|
let assembly_count = machine.customData.getInt("assembly_count") * burning_rate
|
|
const isActive = machine.recipeLogic && machine.recipeLogic.fuelTime > 0
|
|
const controlRodsOut = machine.customData.getDouble("burning_rate") != 0
|
|
let inputFluid = 0
|
|
if (isActive && controlRodsOut) {
|
|
inputFluid = 20 * (multiplier == 0 ? 1 : multiplier) * Math.pow(1.0415, assembly_count)
|
|
}
|
|
return inputFluid
|
|
}
|
|
|
|
/**
|
|
* 计算核反应堆当前须输出流体
|
|
* @param {Internal.MBDMachine} machine
|
|
* @returns {number}
|
|
*/
|
|
ReactorUtil.outputFluid = function(machine) {
|
|
let multiplier = machine.customData.getDouble("multiplier")
|
|
let burning_rate = machine.customData.getDouble("burning_rate")
|
|
let assembly_count = machine.customData.getInt("assembly_count") * burning_rate
|
|
const isActive = machine.recipeLogic && machine.recipeLogic.fuelTime > 0
|
|
const controlRodsOut = machine.customData.getDouble("burning_rate") != 0
|
|
let outputFluid = 0
|
|
if (isActive && controlRodsOut) {
|
|
outputFluid = 20 * multiplier * Math.pow(1.0415, assembly_count)
|
|
}
|
|
return outputFluid
|
|
}
|
|
|
|
/**
|
|
* 计算核反应堆当前产出能量
|
|
* @param {Internal.MBDMachine} machine
|
|
* @returns {number}
|
|
*/
|
|
ReactorUtil.outputEnergy = function(machine) {
|
|
let multiplier = machine.customData.getDouble("multiplier")
|
|
let burning_rate = machine.customData.getDouble("burning_rate")
|
|
let assembly_count = machine.customData.getInt("assembly_count") * burning_rate
|
|
const isActive = machine.recipeLogic && machine.recipeLogic.fuelTime > 0
|
|
const controlRodsOut = machine.customData.getDouble("burning_rate") != 0
|
|
let outputEnergy = 0
|
|
if (isActive && controlRodsOut) {
|
|
outputEnergy = 40960 * multiplier * Math.pow(1.0415, assembly_count)
|
|
}
|
|
return outputEnergy
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {Internal.MBDMachine} machine
|
|
* @param {number} power
|
|
*/
|
|
ReactorUtil.outputSignal = function(machine, power) {
|
|
machine.setOutputSignal(power, machine.getFrontFacing().get())
|
|
machine.updateSignal()
|
|
} |