///
///
class Feature {
constructor() {
this.FeatureManager = undefined
this.events = {}
this.customEvents = {}
this.forgeEvents = {}
this.soopyEvents = {}
this.id = undefined
this.enabled = false
}
setId(id) {
this.id = id
}
getId() {
return this.id
}
_onDisable() {
Object.values(this.events).forEach(e => this.FeatureManager.unregisterEvent(e)) //calling parent unregister to avoid the set in unregister event
Object.values(this.customEvents).forEach(e => this.FeatureManager.unregisterCustom(e)) //calling parent unregister to avoid the set in unregister event
Object.values(this.forgeEvents).forEach(e => this.FeatureManager.unregisterForge(e)) //calling parent unregister to avoid the set in unregister event
Object.values(this.soopyEvents).forEach(e => this.FeatureManager.unregisterSoopy(e)) //calling parent unregister to avoid the set in unregister event
this.onDisable()
this.events = {}
this.customEvents = {}
this.enabled = false
}
_onEnable(parent) {
this.FeatureManager = parent
this.enabled = true
this.onEnable()
}
onDisable() { }
onEnable() { }
registerEvent(event, func) {
let theEvent = this.FeatureManager.registerEvent(event, func, this)
this.events[theEvent.id] = theEvent
return theEvent
}
unregisterEvent(event) {
this.FeatureManager.unregisterEvent(event)
delete this.events[event.id]
}
registerSoopy(event, func) {
let theEvent = this.FeatureManager.registerSoopy(event, func, this)
this.soopyEvents[theEvent.id] = theEvent
return theEvent
}
unregisterSoopy(event) {
this.FeatureManager.unregisterSoopy(event)
delete this.soopyEvents[event.id]
}
registerForge(event, func, messageIfError) {
let theEvent
try {
theEvent = this.FeatureManager.registerForge(event, func, this)
} catch (e) { //TODO: option to disable this chat message + fallback register for some that support (eg fallback of RenderWorldLastEvent to ct 'renderWorld')
if (!messageIfError) messageIfError = "An error occured while registering the event " + event.class.toString().split(".").pop() + ", this may cause " + this.constructor.name + " to not work properly."
ChatLib.chat(this.FeatureManager.messagePrefix + messageIfError)
}
if (theEvent) this.forgeEvents[theEvent.id] = theEvent
return theEvent
}
unregisterForge(event) {
if (!event) return
this.FeatureManager.unregisterForge(event)
delete this.forgeEvents[event.id]
}
registerChat(criteria, func) {
let theEvent = this.FeatureManager.registerChat(criteria, func, this)
this.customEvents[theEvent.id] = theEvent
return theEvent
}
registerActionBar(criteria, func) {
let theEvent = this.FeatureManager.registerActionBar(criteria, func, this)
this.customEvents[theEvent.id] = theEvent
return theEvent
}
registerStep(isFps, interval, func) {
let theEvent = this.FeatureManager.registerStep(isFps, interval, func, this)
this.customEvents[theEvent.id] = theEvent
return theEvent
}
registerCustom(event, func) {
let theEvent = this.FeatureManager.registerCustom(event, func, this)
this.customEvents[theEvent.id] = theEvent
return theEvent
}
registerCommand(name, func) {
this.FeatureManager.commandFuncs[name] = func
this.FeatureManager.registerCommand(name, (...args) => {
if (this.FeatureManager.commandFuncs[name]) {
this.FeatureManager.commandFuncs[name].call(this, ...(args || []))
} else {
ChatLib.chat(this.FeatureManager.messagePrefix + "This command is not available atm")
}
}, this)
}
unregisterCommand(name) {
delete this.FeatureManager.commandFuncs[name]
}
unregisterCustom(event) {
this.FeatureManager.unregisterCustom(event)
delete this.customEvents[event.id]
}
createCustomEvent(eventId) {
return this.FeatureManager.createCustomEvent(eventId)
}
}
export default Feature