LTDV10Test/packet/kubejs/server_scripts/util/reactor.js
3944Realms 67a395b765
Some checks failed
Deploy to Remote Server / deploy (push) Failing after 1m11s
初始化
2026-04-14 18:20:56 +08:00

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()
}