Envelope adds two events to KubeJS:
EnvelopeEvents.handleMailDropOff
handleMailDropOff fires every time the mail is dropped off by the courier, including returns to sender or replies.
This event fires before anything else and handling it prevents further logic from executing (mail would not be inserted into a mailbox, etc.)
server_scripts/server.js
// To reference a MailDropOffResult we need to load this java class first:const $MailDropOffResult = Java.loadClass('io.github.mortuusars.envelope.world.mail.dropoff.MailDropOffResult')EnvelopeEvents.handleMailDropOff(event => {console.info("Trying to drop off mail at " + event.getContext().getTarget())// Exclude returned mail or replies:if (event.getContext().getDelivery().getRecipient() != event.getContext().getTarget() ) {return // do nothing}// Prevent mail receiving at night:let time = event.getLevel().getDayTime()if (time > 13000 && time < 23000) {console.info("Mailboxes are closed at night.")// Because we do not check for the specific address or address type,// this will prevent all addresses from receiving mail at night.event.success($MailDropOffResult.returned(event.getContext().getMail()))}// If not night - we let usual logic handle the delivery.})
Relevant envelope classes:
EnvelopeEvents.registerServiceDropOffHandlers
registerServiceDropOffHandlers is a dedicated event for adding logic to custom service addresses.
Mailing recipes of a service address are processed before the handler.
startup_scripts/startup.js
// To reference a MailDropOffResult we need to load this java class first:const $MailDropOffResult = Java.loadClass('io.github.mortuusars.envelope.world.mail.dropoff.MailDropOffResult')EnvelopeEvents.registerServiceDropOffHandlers(event => {// Handler is registered for a specific address:event.register("namespace:test", context => {console.info("[Test Address] Received mail: " + context.getMail())let packageContents = context.getMail().get('envelope:package_contents')console.log(packageContents)if (packageContents) {let items = packageContents.getItems()let hasEmerald = falsefor (let index = 0; index < items.size(); index++) {if (items[index].getItem() == 'minecraft:emerald') {hasEmerald = true}}if (hasEmerald) {console.info("[Test Address] Sending a reply.")let replyLetter = Item.of('envelope:letter[envelope:letter_content={text:{text:\'Very nice emerald\'}}]')return $MailDropOffResult.reply(replyLetter);}}console.info("[Test Address] Passing. Mail will be returned to sender.")return $MailDropOffResult.PASS;})})
Relevant envelope classes: