LTDV10/packet/kubejs/server_scripts/mbd2/sprinkler.js
2026-04-14 18:20:56 +08:00

76 lines
3.1 KiB
JavaScript

MBDMachineEvents.onPlaced("createdelight:sprinkler", e => {
const { machine } = e.event
const {customData, level} = machine
let solidBlockPosY = SeasonUtil.belowSolidBlockY(level, machine.pos, 10)
customData.putInt("solidBlockPosY", solidBlockPosY)
})
MBDMachineEvents.onTick("createdelight:sprinkler", e => {
const { machine } = e.event
const {customData, level} = machine
if (level.time % 100 != 0) return
let manager = SeasonUtil.getSaveData(level)
if (machine.machineStateName == "working") {
let solidBlockPosY = customData.getInt("solidBlockPosY")
let solidBlockPos = [machine.pos.x, solidBlockPosY, machine.pos.z]
let nearHumidityControlProvider = manager.queryHumidityControlProvider(solidBlockPos)
if (nearHumidityControlProvider != null) {
if(nearHumidityControlProvider.getRemainTime <= 200) {
nearHumidityControlProvider.addRemainTime(100)
}
} else {
manager.addHumidityControlProvider(solidBlockPos, SeasonUtil.createHumidityControlProvider(1, 4, 500))
}
}
if (machine.machineStateName == "base") {
if (manager != null) {
let solidBlockPosY = customData.getInt("solidBlockPosY")
let solidBlockPos = [machine.pos.x, solidBlockPosY, machine.pos.z]
manager.removeHumidityControlProvider(solidBlockPos)
}
}
})
MBDMachineEvents.onRemoved("createdelight:sprinkler", e => {
const { machine } = e.event
const {customData, level} = machine
let manager = SeasonUtil.getSaveData(level)
if (manager != null) {
let solidBlockPosY = customData.getInt("solidBlockPosY")
let solidBlockPos = [machine.pos.x, solidBlockPosY, machine.pos.z]
manager.removeHumidityControlProvider(solidBlockPos)
}
})
MBDMachineEvents.onRecipeWorking("createdelight:sprinkler", e => {
const { machine } = e.event
const {level} = machine
if (level.time % 40 != 0) return
let fluid = machine.getCapability(ForgeCapabilities.FLUID_HANDLER).orElse(null)
if (fluid) {
let vec = Vec3d.atCenterOf(machine.pos)
.add([0.0, -0.6, 0.0])
// let aabb = AABB.ofSize(vec, 32, 32, 32) // 半径约 32 格
level.spawnParticles(
"minecraft:falling_water", true,
vec.x(), vec.y(), vec.z(),
Math.random() * 0.5, Math.random() * -0.5, Math.random() * 0.5,
20, 0.1
)
// level.getPlayers().forEach(player => {$FluidFX.getFluidParticle(Fluid.of("minecraft:water").fluidStack)
// if (aabb.contains(player.position())) {
// player.sendData("spawn_create_particle", {
// fluid: "minecraft:water",
// x: vec.x(),
// y: vec.y(),
// z: vec.z(),
// vx: Math.random() * 0.5,
// vy: Math.random() * -0.5,
// vz: Math.random() * 0.5,
// count: 20,
// speed: 0.1
// })
// }
// })
}
})