76 lines
3.1 KiB
JavaScript
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
|
|
// })
|
|
// }
|
|
// })
|
|
}
|
|
})
|