I'm trying to prevent sleeping unless the chunk is 'protected' by an interdiction torch. The following code breaks the ability to right click into bed all together.
ForgeEvents.onEvent("net.minecraftforge.event.entity.player.PlayerSleepInBedEvent", event => {
var entity = event.getEntity()
var pos = event.pos
var level = entity.getLevel()
if (!global.getSafeAreas(level).chunks.some(safeChunk => pos.getRegionX() == safeChunk.getRegionX() && pos.getRegionZ() == safeChunk.getRegionZ())) {
entity.tell('You cannot sleep as the current chunk is not protected by an interdiction torch!')
event.setCanceled(true)
}
})
global.safeAreas = []
global.getSafeAreas = (level) => {
var area = null
global.safeAreas.forEach(safeArea => {
if (safeArea.dimension == level.dimension)
area = safeArea
})
if (area == null) {
area = {dimension: level.dimension, chunks: []}
global.safeAreas.push(area)
}
return area
}