/// /// 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