aboutsummaryrefslogtreecommitdiff
path: root/featureClass
diff options
context:
space:
mode:
authorSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2022-04-18 00:25:15 +0800
committerSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2022-04-18 00:25:15 +0800
commit082d9cf4af63495a3d8709b0ee87dc935ed986dc (patch)
treee1da1a02907573f68c8052ec5a2a77366385361c /featureClass
parentf718bd5743701a7fb5f96e74a4df75145cc28789 (diff)
downloadSoopyV2-082d9cf4af63495a3d8709b0ee87dc935ed986dc.tar.gz
SoopyV2-082d9cf4af63495a3d8709b0ee87dc935ed986dc.tar.bz2
SoopyV2-082d9cf4af63495a3d8709b0ee87dc935ed986dc.zip
Many changes
Diffstat (limited to 'featureClass')
-rw-r--r--featureClass/class.js72
-rw-r--r--featureClass/featureManager.js399
2 files changed, 238 insertions, 233 deletions
diff --git a/featureClass/class.js b/featureClass/class.js
index d1ddbc6..bb438d9 100644
--- a/featureClass/class.js
+++ b/featureClass/class.js
@@ -2,7 +2,7 @@
/// <reference lib="es2015" />
class Feature {
- constructor(){
+ constructor() {
this.FeatureManager = undefined
this.events = {}
this.customEvents = {}
@@ -14,27 +14,27 @@ class Feature {
this.enabled = false
}
- setId(id){
+ setId(id) {
this.id = id
}
- getId(){
+ 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
+ _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){
+ _onEnable(parent) {
this.FeatureManager = parent
this.enabled = true
@@ -42,10 +42,10 @@ class Feature {
this.onEnable()
}
- onDisable(){}
- onEnable(){}
+ onDisable() { }
+ onEnable() { }
- registerEvent(event, func){
+ registerEvent(event, func) {
let theEvent = this.FeatureManager.registerEvent(event, func, this)
this.events[theEvent.id] = theEvent
@@ -53,12 +53,12 @@ class Feature {
return theEvent
}
- unregisterEvent(event){
+ unregisterEvent(event) {
this.FeatureManager.unregisterEvent(event)
delete this.events[event.id]
}
- registerSoopy(event, func){
+ registerSoopy(event, func) {
let theEvent = this.FeatureManager.registerSoopy(event, func, this)
this.soopyEvents[theEvent.id] = theEvent
@@ -66,48 +66,48 @@ class Feature {
return theEvent
}
- unregisterSoopy(event){
+ unregisterSoopy(event) {
this.FeatureManager.unregisterSoopy(event)
delete this.soopyEvents[event.id]
}
- registerForge(event, func, messageIfError){
+ registerForge(event, func, messageIfError) {
let theEvent
- try{
- theEvent = this.FeatureManager.registerForge(event, func, this)
- }catch(e){
- 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."
+ 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
+ if (theEvent) this.forgeEvents[theEvent.id] = theEvent
return theEvent
}
- unregisterForge(event){
- if(!event) return
-
+ unregisterForge(event) {
+ if (!event) return
+
this.FeatureManager.unregisterForge(event)
delete this.forgeEvents[event.id]
}
- registerChat(criteria, func){
+ registerChat(criteria, func) {
let theEvent = this.FeatureManager.registerChat(criteria, func, this)
this.customEvents[theEvent.id] = theEvent
return theEvent
}
- registerActionBar(criteria, func){
+ registerActionBar(criteria, func) {
let theEvent = this.FeatureManager.registerActionBar(criteria, func, this)
this.customEvents[theEvent.id] = theEvent
return theEvent
}
- registerStep(isFps, interval, func){
+ registerStep(isFps, interval, func) {
let theEvent = this.FeatureManager.registerStep(isFps, interval, func, this)
this.customEvents[theEvent.id] = theEvent
@@ -115,7 +115,7 @@ class Feature {
return theEvent
}
- registerCustom(event, func){
+ registerCustom(event, func) {
let theEvent = this.FeatureManager.registerCustom(event, func, this)
this.customEvents[theEvent.id] = theEvent
@@ -123,28 +123,28 @@ class Feature {
return theEvent
}
- registerCommand(name, func){
+ registerCommand(name, func) {
this.FeatureManager.commandFuncs[name] = func
- this.FeatureManager.registerCommand(name, (...args)=>{
- if(this.FeatureManager.commandFuncs[name]){
+ this.FeatureManager.registerCommand(name, (...args) => {
+ if (this.FeatureManager.commandFuncs[name]) {
this.FeatureManager.commandFuncs[name].call(this, ...(args || []))
- }else{
+ } else {
ChatLib.chat(this.FeatureManager.messagePrefix + "This command is not available atm")
}
}, this)
}
- unregisterCommand(name){
+ unregisterCommand(name) {
delete this.FeatureManager.commandFuncs[name]
}
- unregisterCustom(event){
+ unregisterCustom(event) {
this.FeatureManager.unregisterCustom(event)
delete this.customEvents[event.id]
}
- createCustomEvent(eventId){
+ createCustomEvent(eventId) {
return this.FeatureManager.createCustomEvent(eventId)
}
}
diff --git a/featureClass/featureManager.js b/featureClass/featureManager.js
index 809e608..78e06dd 100644
--- a/featureClass/featureManager.js
+++ b/featureClass/featureManager.js
@@ -6,7 +6,7 @@ const File = Java.type("java.io.File")
import metadata from "../metadata.js"
import soopyV2Server from "../socketConnection";
import { fetch } from "../utils/networkUtils";
-import { registerForge as registerForgeBase, unregisterForge as unregisterForgeBase} from "./forgeEvents.js"
+import { registerForge as registerForgeBase, unregisterForge as unregisterForgeBase } from "./forgeEvents.js"
const JSLoader = Java.type("com.chattriggers.ctjs.engine.langs.js.JSLoader")
const UrlModuleSourceProvider = Java.type("org.mozilla.javascript.commonjs.module.provider.UrlModuleSourceProvider")
@@ -15,22 +15,22 @@ const StrongCachingModuleScriptProviderClass = Java.type("org.mozilla.javascript
let StrongCachingModuleScriptProvider = new StrongCachingModuleScriptProviderClass(UrlModuleSourceProviderInstance)
let CTRequire = new JSLoader.CTRequire(StrongCachingModuleScriptProvider)
-let loadedModules = []
+let loadedModules = new Set()
-function RequireNoCache(place){
- if(loadedModules.includes(place)){
- loadedModules.push(place)
+function RequireNoCache(place) {
+ if (!logger.isDev) return require(place)
+ if (!loadedModules.has(place)) {
+ loadedModules.add(place)
return require(place) //performance optimisation
}
- if(!logger.isDev) return require(place)
-
+
StrongCachingModuleScriptProvider = new StrongCachingModuleScriptProviderClass(UrlModuleSourceProviderInstance)
CTRequire = new JSLoader.CTRequire(StrongCachingModuleScriptProvider)
return CTRequire(place)
}
class FeatureManager {
- constructor(){
+ constructor() {
this.isDev = logger.isDev
@@ -71,29 +71,29 @@ class FeatureManager {
this.featureSettingsData = {}
- let fetchD = fetch("http://soopymc.my.to/api/soopyv2/ping").async(d=>{
- if(fetchD.responseCode() >= 400 || fetchD.responseCode() === -1){
- ChatLib.chat(this.messagePrefix + "&cError: Could not connect to Soopy's server. This may cause issues with features breaking but will (hopefully) be back soon.")
+ let fetchD = fetch("http://soopymc.my.to/api/soopyv2/ping").async(d => {
+ if (fetchD.responseCode() >= 400 || fetchD.responseCode() === -1) {
+ ChatLib.chat(this.messagePrefix + "&cError: Could not connect to Soopy's server. This may cause issues with some features but will (hopefully) be back soon.")
}
-
- new Thread(()=>{
+
+ new Thread(() => {
this.loadFeatureMetas()
-
+
this.loadFeatureSettings()
-
- Object.keys(this.featureMetas).forEach((feature)=>{
- if(this.featureSettingsData[feature] && this.featureSettingsData[feature].enabled){
+
+ Object.keys(this.featureMetas).forEach((feature) => {
+ if (this.featureSettingsData[feature] && this.featureSettingsData[feature].enabled) {
this.loadFeature(feature)
}
})
-
+
this.finishedLoading = true
}).start()
}, true)
- this.registerStep(false, 30, ()=>{
- if(this.featureSettingsDataLastUpdated){
- new Thread(()=>{
+ this.registerStep(false, 30, () => {
+ if (this.featureSettingsDataLastUpdated) {
+ new Thread(() => {
this.saveFeatureSettings()
}).start()
}
@@ -101,69 +101,72 @@ class FeatureManager {
this.registerEvent("worldUnload", this.saveFeatureSettings, this)
- this.registerEvent("gameUnload", ()=>{
+ this.registerEvent("gameUnload", () => {
this.saveFeatureSettings()
this.unloadAllFeatures()
this.enabled = false
}, this)
- this.registerStep(true, 2, ()=>{
- if(this.reloadModuleTime!==0 && Date.now()-this.reloadModuleTime > 0){
- new Thread(()=>{
- this.reloadModuleTime = 0
- this.reloadingModules.forEach(m=>{
- this.unloadFeature(m)
- })
- this.reloadingModules.forEach(m=>{
- this.loadFeature(m)
- })
- this.reloadingModules = []
- }).start()
- }
- }, this)
- this.watches = {}
- this.addedWatches = []
- this.watchService = Java.type("java.nio.file.FileSystems").getDefault().newWatchService();
- this.reloadingModules = []
- this.reloadModuleTime = 0
- new Thread(()=>{
- while(this.enabled){
- key = this.watchService.take();
- let moduleToReload = this.watches[key]
- if(this.features[moduleToReload] && !this.reloadingModules.includes(moduleToReload)){ //if enabled && not alr in queue
- this.reloadingModules.push(moduleToReload)
- this.reloadModuleTime = Date.now()+5000
+ if (this.isDev) {
+ this.registerStep(true, 2, () => {
+ if (this.reloadModuleTime !== 0 && Date.now() - this.reloadModuleTime > 0) {
+ new Thread(() => {
+ this.reloadModuleTime = 0
+ this.reloadingModules.forEach(m => {
+ this.unloadFeature(m)
+ })
+ this.reloadingModules.forEach(m => {
+ this.loadFeature(m)
+ })
+ this.reloadingModules = []
+ }).start()
}
- key.pollEvents()/*.forEach(event=>{
+ }, this)
+
+ this.watches = {}
+ this.addedWatches = []
+ this.watchService = Java.type("java.nio.file.FileSystems").getDefault().newWatchService();
+ this.reloadingModules = []
+ this.reloadModuleTime = 0
+ new Thread(() => {
+ while (this.enabled) {
+ key = this.watchService.take();
+ let moduleToReload = this.watches[key]
+ if (this.features[moduleToReload] && !this.reloadingModules.includes(moduleToReload)) { //if enabled && not alr in queue
+ this.reloadingModules.push(moduleToReload)
+ this.reloadModuleTime = Date.now() + 5000
+ }
+ key.pollEvents()/*.forEach(event=>{
console.log(event.context().toString())
})*/
- key.reset();
- }
- }).start()
+ key.reset();
+ }
+ }).start()
+ }
- this.registerCommand("soopyunloadfeature", (args)=>{
- new Thread(()=>{
+ this.registerCommand("soopyunloadfeature", (args) => {
+ new Thread(() => {
this.unloadFeature(args)
}).start()
}, this)
- this.registerCommand("soopyloadfeature", (args)=>{
- new Thread(()=>{
+ this.registerCommand("soopyloadfeature", (args) => {
+ new Thread(() => {
this.loadFeature(args)
}).start()
}, this)
- this.registerCommand("soopyreloadfeature", (args)=>{
- new Thread(()=>{
+ this.registerCommand("soopyreloadfeature", (args) => {
+ new Thread(() => {
this.unloadFeature(args)
-
+
this.loadFeature(args)
}).start()
}, this)
- this.registerCommand("soopysetlongeventtime", (args)=>{
+ this.registerCommand("soopysetlongeventtime", (args) => {
this.longEventTime = parseInt(args)
}, this)
- this.registerCommand("soopylaginformation", (args)=>{ //TODO: make this a dedicated GUI
- new Thread(()=>{
+ this.registerCommand("soopylaginformation", (args) => { //TODO: make this a dedicated GUI
+ new Thread(() => {
this.recordingPerformanceUsage = true
this.performanceUsage = {}
ChatLib.chat(this.messagePrefix + "Recording performance impact, this will take 10 seconds to complete!")
@@ -173,21 +176,21 @@ class FeatureManager {
let totalMsGlobal = 0
this.recordingPerformanceUsage = false
ChatLib.chat(this.messagePrefix + "Performance impact:")
- Object.keys(this.performanceUsage).sort((a, b)=>{
+ Object.keys(this.performanceUsage).sort((a, b) => {
let totalMsA = 0
- Object.keys(this.performanceUsage[a]).forEach((event)=>{
+ Object.keys(this.performanceUsage[a]).forEach((event) => {
totalMsA += this.performanceUsage[a][event].time
})
let totalMsB = 0
- Object.keys(this.performanceUsage[b]).forEach((event)=>{
+ Object.keys(this.performanceUsage[b]).forEach((event) => {
totalMsB += this.performanceUsage[b][event].time
})
- return totalMsA-totalMsB
- }).forEach((moduleName)=>{
+ return totalMsA - totalMsB
+ }).forEach((moduleName) => {
let totalMs = 0
let totalCalls = 0
- Object.keys(this.performanceUsage[moduleName]).forEach((event)=>{
+ Object.keys(this.performanceUsage[moduleName]).forEach((event) => {
totalMs += this.performanceUsage[moduleName][event].time
totalCalls += this.performanceUsage[moduleName][event].count
})
@@ -196,8 +199,8 @@ class FeatureManager {
ChatLib.chat("&eModule: &7" + moduleName)
ChatLib.chat("&eTotal: &7" + totalMs.toFixed(2) + "ms (" + totalCalls + " calls)")
- Object.keys(this.performanceUsage[moduleName]).sort((a, b)=>{return this.performanceUsage[moduleName][a].time-this.performanceUsage[moduleName][b].time}).forEach((event)=>{
- ChatLib.chat(" &eEvent:&7 " + event + " - " + this.performanceUsage[moduleName][event].time.toFixed(2) + "ms (" + this.performanceUsage[moduleName][event].count + " calls) [" + ((this.performanceUsage[moduleName][event].time/this.performanceUsage[moduleName][event].count).toFixed(2)) + "ms avg]")
+ Object.keys(this.performanceUsage[moduleName]).sort((a, b) => { return this.performanceUsage[moduleName][a].time - this.performanceUsage[moduleName][b].time }).forEach((event) => {
+ ChatLib.chat(" &eEvent:&7 " + event + " - " + this.performanceUsage[moduleName][event].time.toFixed(2) + "ms (" + this.performanceUsage[moduleName][event].count + " calls) [" + ((this.performanceUsage[moduleName][event].time / this.performanceUsage[moduleName][event].count).toFixed(2)) + "ms avg]")
})
})
@@ -206,12 +209,12 @@ class FeatureManager {
}, this)
}
- loadFeatureSettings(){
+ loadFeatureSettings() {
logger.logMessage("Loading settings", 4)
let data = FileLib.read("soopyAddonsData", "soopyaddonsbetafeaturesdata.json")
- if(!data){
+ if (!data) {
this.loadDefaultFeatureSettings();
return;
}
@@ -223,44 +226,44 @@ class FeatureManager {
this.ensureNewSettingsExist()
}
- saveFeatureSettings(){
- if(!this.featureSettingsDataLastUpdated) return
-
+ saveFeatureSettings() {
+ if (!this.featureSettingsDataLastUpdated) return
+
FileLib.write("soopyAddonsData", "soopyaddonsbetafeaturesdata.json", JSON.stringify(this.featureSettingsData))
-
+
this.featureSettingsDataLastUpdated = false
logger.logMessage("Saved settings", 4)
}
- loadDefaultFeatureSettings(){
- Object.keys(this.featureMetas).forEach((feature)=>{
+ loadDefaultFeatureSettings() {
+ Object.keys(this.featureMetas).forEach((feature) => {
this.featureSettingsData[feature] = {
enabled: this.featureMetas[feature].defaultEnabled,
subSettings: {}
}
})
-
- this.featureSettingsDataLastUpdated= true
+
+ this.featureSettingsDataLastUpdated = true
logger.logMessage("Loaded default settings", 4)
}
- ensureNewSettingsExist(){
- Object.keys(this.featureMetas).forEach((feature)=>{
- if(!this.featureSettingsData[feature]){
+ ensureNewSettingsExist() {
+ Object.keys(this.featureMetas).forEach((feature) => {
+ if (!this.featureSettingsData[feature]) {
this.featureSettingsData[feature] = {
enabled: this.featureMetas[feature].defaultEnabled,
subSettings: {}
}
- this.featureSettingsDataLastUpdated= true
+ this.featureSettingsDataLastUpdated = true
logger.logMessage("Loaded default settings for " + feature, 4)
}
})
}
- startCatchingEvent(event){
- if(this.eventObjects[event]) return
+ startCatchingEvent(event) {
+ if (this.eventObjects[event]) return
//SBA compatability or something (removed)
// if(event === "renderOverlay"){
@@ -273,60 +276,62 @@ class FeatureManager {
// }
// })
// }else{
- this.eventObjects[event] = register(event, (...args)=>{
- // let start = Date.now()
- this.triggerEvent(event, args)
- // this.eventTimingData[event] = (this.eventTimingData[event] || 0)+(Date.now()-start)
- })
+ this.eventObjects[event] = register(event, (...args) => {
+ // let start = Date.now()
+ this.triggerEvent(event, args)
+ // this.eventTimingData[event] = (this.eventTimingData[event] || 0)+(Date.now()-start)
+ })
//}
logger.logMessage("Registered " + event + " event", 4)
}
- triggerEvent(event, args){
- if(this.events[event])
- try{
- for(Event of Object.values(this.events[event])){
- if(Event.context.enabled){
- this.startRecordingPerformance(Event.context.constructor.name, event)
- let start = Date.now()
- Event.func.call(Event.context, ...args)
- let time = Date.now()-start
- if(time > this.longEventTime){
- logger.logMessage("Long event triggered [" + time + "ms] (" + Event.context.constructor.name + "/" + event + ")", 3)
+ triggerEvent(event, args) {
+ if (this.events[event]) {
+ try {
+ for (Event of Object.values(this.events[event])) {
+ if (Event.context.enabled) {
+ this.startRecordingPerformance(Event.context.constructor.name, event)
+ let start = Date.now()
+ Event.func.call(Event.context, ...args)
+ let time = Date.now() - start
+ if (time > this.longEventTime) {
+ logger.logMessage("Long event triggered [" + time + "ms] (" + Event.context.constructor.name + "/" + event + ")", 3)
+ }
+ this.stopRecordingPerformance(Event.context.constructor.name, event)
}
- this.stopRecordingPerformance(Event.context.constructor.name, event)
}
+ } catch (e) {
+ logger.logMessage("Error in " + event + " event: " + JSON.stringify(e, undefined, 2), 2)
+
+ soopyV2Server.reportError(e, "Error in " + event + " event.")
}
- }catch(e){
- logger.logMessage("Error in " + event + " event: " + JSON.stringify(e, undefined, 2), 2)
-
- soopyV2Server.reportError(e, "Error in " + event + " event.")
}
}
- triggerSoopy(event, args){
- if(this.soopyEventHandlers[event])
- try{
- for(Event of Object.values(this.soopyEventHandlers[event])){
- if(Event.context.enabled){
- this.startRecordingPerformance(Event.context.constructor.name, event)
- let start = Date.now()
- Event.func.call(Event.context, ...args)
- let time = Date.now()-start
- if(time > this.longEventTime){
- logger.logMessage("Long event triggered [" + time + "ms] (" + Event.context.constructor.name + "/" + event + ")", 3)
+ triggerSoopy(event, args) {
+ if (this.soopyEventHandlers[event]) {
+ try {
+ for (Event of Object.values(this.soopyEventHandlers[event])) {
+ if (Event.context.enabled) {
+ this.startRecordingPerformance(Event.context.constructor.name, event)
+ let start = Date.now()
+ Event.func.call(Event.context, ...args)
+ let time = Date.now() - start
+ if (time > this.longEventTime) {
+ logger.logMessage("Long event triggered [" + time + "ms] (" + Event.context.constructor.name + "/" + event + ")", 3)
+ }
+ this.stopRecordingPerformance(Event.context.constructor.name, event)
}
- this.stopRecordingPerformance(Event.context.constructor.name, event)
}
+ } catch (e) {
+ logger.logMessage("Error in soopy " + event + " event: " + JSON.stringify(e, undefined, 2), 2)
+ soopyV2Server.reportError(e, "Error in soopy " + event + " event.")
}
- }catch(e){
- logger.logMessage("Error in soopy " + event + " event: " + JSON.stringify(e, undefined, 2), 2)
- soopyV2Server.reportError(e, "Error in soopy " + event + " event.")
}
}
- stopCatchingEvent(event){
- if(!this.eventObjects[event]) return
+ stopCatchingEvent(event) {
+ if (!this.eventObjects[event]) return
this.eventObjects[event].unregister()
delete this.eventObjects[event]
@@ -334,8 +339,8 @@ class FeatureManager {
logger.logMessage("Unregistered " + event + " event", 4)
}
- registerEvent(event, func, context){
- if(!this.events[event]){
+ registerEvent(event, func, context) {
+ if (!this.events[event]) {
this.events[event] = []
this.startCatchingEvent(event)
}
@@ -350,8 +355,8 @@ class FeatureManager {
return theEvent
}
- registerSoopy(event, func, context){
- if(!this.soopyEventHandlers[event]){
+ registerSoopy(event, func, context) {
+ if (!this.soopyEventHandlers[event]) {
this.soopyEventHandlers[event] = []
}
@@ -366,7 +371,7 @@ class FeatureManager {
return theEvent
}
- registerChat(criteria, func, context){
+ registerChat(criteria, func, context) {
let event = this.registerCustom("chat", func, context)
event.trigger.setChatCriteria(criteria)
@@ -374,7 +379,7 @@ class FeatureManager {
return event
}
- registerActionBar(criteria, func, context){
+ registerActionBar(criteria, func, context) {
let event = this.registerCustom("actionBar", func, context)
@@ -382,7 +387,7 @@ class FeatureManager {
return event
}
- registerCommand(commandName, func, context){
+ registerCommand(commandName, func, context) {
let event = this.registerCustom("command", func, context)
@@ -390,35 +395,35 @@ class FeatureManager {
return event
}
- registerStep(isFps, interval, func, context){
+ registerStep(isFps, interval, func, context) {
let event = this.registerCustom("step", func, context)
- event.trigger[isFps?"setFps":"setDelay"](interval)
+ event.trigger[isFps ? "setFps" : "setDelay"](interval)
return event
}
- registerCustom(type, func, context){
+ registerCustom(type, func, context) {
let id = this.lastChatEventId++
this.customEvents[id] = {
func: func,
context: context,
- trigger: register(type, (...args)=>{
- try{
- if(context.enabled){
+ trigger: register(type, (...args) => {
+ try {
+ if (context.enabled) {
this.startRecordingPerformance(context.constructor.name, type)
let start = Date.now()
func.call(context, ...(args || []))
- let time = Date.now()-start
- if(time > this.longEventTime){
+ let time = Date.now() - start
+ if (time > this.longEventTime) {
logger.logMessage("Long event triggered [" + time + "ms] (" + context.constructor.name + "/" + type + ")", 3)
}
this.stopRecordingPerformance(context.constructor.name, type)
}
- }catch(e){
+ } catch (e) {
logger.logMessage("Error in " + type + " event: " + JSON.stringify(e, undefined, 2), 2)
-
+
soopyV2Server.reportError(e, "Error in " + type + " event.")
}
}),
@@ -428,27 +433,27 @@ class FeatureManager {
return this.customEvents[id]
}
- registerForge(event, func, context){
+ registerForge(event, func, context) {
let id = this.lastForgeEventId++
this.forgeEvents[id] = {
func: func,
context: context,
- trigger: registerForgeBase(event, (...args)=>{
- try{
- if(context.enabled){
+ trigger: registerForgeBase(event, (...args) => {
+ try {
+ if (context.enabled) {
this.startRecordingPerformance(context.constructor.name, event.class.name)
let start = Date.now()
func.call(context, ...(args || []))
- let time = Date.now()-start
- if(time > this.longEventTime){
+ let time = Date.now() - start
+ if (time > this.longEventTime) {
logger.logMessage("Long (forge) event triggered (" + context.constructor.name + "/" + event.class.toString() + ")", 3)
}
this.stopRecordingPerformance(context.constructor.name, event.class.name)
}
- }catch(e){
+ } catch (e) {
logger.logMessage("Error in " + event.class.toString() + " (forge) event: " + JSON.stringify(e, undefined, 2), 2)
-
+
soopyV2Server.reportError(e, "Error in " + event.class.toString() + " (forge) event.")
}
}),
@@ -458,84 +463,84 @@ class FeatureManager {
return this.forgeEvents[id]
}
- unregisterForge(event){
+ unregisterForge(event) {
unregisterForgeBase(this.forgeEvents[event.id].trigger)
delete this.forgeEvents[event.id]
}
- unregisterCustom(event){
+ unregisterCustom(event) {
event.trigger.unregister()
delete this.customEvents[event.id]
}
- unregisterEvent(event){
- if(!this.events[event.event]) return
+ unregisterEvent(event) {
+ if (!this.events[event.event]) return
- this.events[event.event] = this.events[event.event].filter((e)=>{
+ this.events[event.event] = this.events[event.event].filter((e) => {
return e.id !== event.id
})
-
- if(this.events[event.event].length === 0){
+
+ if (this.events[event.event].length === 0) {
this.stopCatchingEvent(event.event)
delete this.events[event.event]
}
}
- unregisterSoopy(event){
- if(!this.soopyEventHandlers[event.event]) return
+ unregisterSoopy(event) {
+ if (!this.soopyEventHandlers[event.event]) return
- this.soopyEventHandlers[event.event] = this.soopyEventHandlers[event.event].filter((e)=>{
+ this.soopyEventHandlers[event.event] = this.soopyEventHandlers[event.event].filter((e) => {
return e.id !== event.id
})
-
- if(this.soopyEventHandlers[event.event].length === 0){
+
+ if (this.soopyEventHandlers[event.event].length === 0) {
delete this.events[event.event]
}
}
- loadFeatureMetas(){
+ loadFeatureMetas() {
let featuresDir = new File("./config/ChatTriggers/modules/" + metadata.name + "/features")
- featuresDir.list().forEach((pathName)=>{
- if(pathName.includes(".")) return;
+ featuresDir.list().forEach((pathName) => {
+ if (pathName.includes(".")) return;
- try{
- let data = JSON.parse(FileLib.read( metadata.name + "/features/" + pathName,"metadata.json"))
- if(data === null){
+ try {
+ let data = JSON.parse(FileLib.read(metadata.name + "/features/" + pathName, "metadata.json"))
+ if (data === null) {
return;
}
data.id = pathName
this.featureMetas[pathName] = data
- }catch(e){
+ } catch (e) {
console.log("Error loading feature metadata for " + pathName)
console.log(JSON.stringify(e, undefined, 2))
}
})
}
- loadFeature(feature){ //run in seperate thread so onenable can do network requests
- if(this.features[feature]) return
-
- try{
-
+ loadFeature(feature) { //run in seperate thread so onenable can do network requests
+ if (this.features[feature]) return
+
+ try {
+
let LoadedFeature = RequireNoCache("../features/" + feature + "/index.js")
// let LoadedFeature = RequireNoCache(new File("config/ChatTriggers/modules/" + metadata.name + "/features/" + feature + "/index.js"))
-
+
this.features[feature] = LoadedFeature
-
+
LoadedFeature.class.setId(feature)
-
+
LoadedFeature.class._onEnable(this)
-
+
logger.logMessage("Loaded feature " + feature, 3)
- if(this.isDev && !this.addedWatches.includes(feature)){
+ if (this.isDev && !this.addedWatches.includes(feature)) {
this.addedWatches.push(feature)
let path = Java.type("java.nio.file.Paths").get("./config/ChatTriggers/modules/SoopyV2/features/" + feature + "/");
this.watches[path.register(this.watchService, Java.type("java.nio.file.StandardWatchEventKinds").ENTRY_MODIFY)] = feature
}
- }catch(e){
+ } catch (e) {
logger.logMessage("Error loading feature " + feature, 1)
console.log(JSON.stringify(e, undefined, 2))
ChatLib.chat(this.messagePrefix + "Error loading feature " + feature)
@@ -546,8 +551,8 @@ class FeatureManager {
return this
}
- unloadFeature(feature){
- if(!this.features[feature]) return
+ unloadFeature(feature) {
+ if (!this.features[feature]) return
this.features[feature].class._onDisable()
@@ -558,55 +563,55 @@ class FeatureManager {
return this
}
- unloadAllFeatures(){
- Object.keys(this.features).forEach((feature)=>{
+ unloadAllFeatures() {
+ Object.keys(this.features).forEach((feature) => {
this.unloadFeature(feature)
})
}
- isFeatureLoaded(feature){
+ isFeatureLoaded(feature) {
return !!this.features[feature]
}
- getLoadedFeatures(){
+ getLoadedFeatures() {
return Object.keys(this.features)
}
- createCustomEvent(eventId){
+ createCustomEvent(eventId) {
logger.logMessage("Registered custom " + eventId + " event", 4)
return {
- trigger: (...args)=>{
+ trigger: (...args) => {
this.triggerSoopy(eventId, args)
}
}
}
- startRecordingPerformance(feature, event){
- if(!this.recordingPerformanceUsage) return
+ startRecordingPerformance(feature, event) {
+ if (!this.recordingPerformanceUsage) return
- if(!this.performanceUsage[feature]) this.performanceUsage[feature] = {}
- if(!this.performanceUsage[feature][event]) this.performanceUsage[feature][event] = {time: 0,count: 0}
+ if (!this.performanceUsage[feature]) this.performanceUsage[feature] = {}
+ if (!this.performanceUsage[feature][event]) this.performanceUsage[feature][event] = { time: 0, count: 0 }
let instant = Instant.now()
- let time = (instant.getEpochSecond() + (instant.getNano() / 1000000000))*1000;
+ let time = (instant.getEpochSecond() + (instant.getNano() / 1000000000)) * 1000;
this.performanceUsage[feature][event].startTime = time
}
- stopRecordingPerformance(feature, event){
- if(!this.recordingPerformanceUsage) return
+ stopRecordingPerformance(feature, event) {
+ if (!this.recordingPerformanceUsage) return
let instant = Instant.now()
- let time = (instant.getEpochSecond() + (instant.getNano() / 1000000000))*1000;
+ let time = (instant.getEpochSecond() + (instant.getNano() / 1000000000)) * 1000;
this.performanceUsage[feature][event].time += time - this.performanceUsage[feature][event].startTime
this.performanceUsage[feature][event].count++
}
}
-if(!global.soopyv2featuremanagerthing){
+if (!global.soopyv2featuremanagerthing) {
global.soopyv2featuremanagerthing = new FeatureManager()
- register("gameUnload", ()=>{
+ register("gameUnload", () => {
global.soopyv2featuremanagerthing = undefined
})
}