forked from BetterMap/BetterMap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataLoader.js
147 lines (123 loc) · 5.71 KB
/
DataLoader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import { fetch } from "./networkUtils"
class DataLoader {
constructor() {
this.stats = {}
this.area = undefined
this.areaFine = undefined
this.bits = undefined
this.purse = undefined
this.dungeonFloor = undefined
this.isInDungeon = false
this.isInSkyblock = false
this.dungeonPercentCleared = 0
register("step", this.step.bind(this)).setFps(2)
register("worldLoad", this.worldLoad.bind(this))
this.currentMayorPerks = new Set()
this.partyMembers = new Set()
this.partyMembers.add(Player.getName())
this.firstLoaded = false;
["You are not currently in a party.", "You have been kicked from the party by ${*}", "You left the party.", "The party was disbanded because all invites expired and the party was empty", "${*} &r&ehas disbanded the party!&r"].forEach(m => this.registerChat(m, () => {
this.partyMembers.clear()
this.partyMembers.add(Player.getName())
}));
["${mem} &r&ejoined the party.&r", "${mem} &r&einvited &r${*} &r&eto the party! They have &r&c60 &r&eseconds to accept.&r", "&dDungeon Finder &r&f> &r${mem} &r&ejoined the dungeon group! (&r&b${*}&r&e)&r"].forEach(m => this.registerChat(m, (mem) => {
this.partyMembers.add(ChatLib.removeFormatting(mem.trim().split(" ").pop().trim()))
}));
["${mem} &r&ehas been removed from the party.&r", "${mem} &r&ehas left the party.&r", "${mem} &r&ewas removed from your party because they disconnected&r", "Kicked ${mem} because they were offline."].forEach(m => this.registerChat(m, (mem) => {
this.partyMembers.delete(ChatLib.removeFormatting(mem.trim().split(" ").pop().trim()))
}))
this.registerChat("&eYou have joined &r${mem}'s &r&eparty!&r", (mem) => {
this.partyMembers.clear()
this.partyMembers.add(Player.getName())
this.partyMembers.add(ChatLib.removeFormatting(p = mem.trim().split(" ").pop().trim()))
})
this.registerChat("&eYou have joined &r${mem}' &r&eparty!&r", (mem) => {
this.partyMembers.clear()
this.partyMembers.add(Player.getName())
this.partyMembers.add(ChatLib.removeFormatting(mem).trim())
})
this.registerChat("&eYou'll be partying with: ${mem}", (mem) => {
mem.split(",").forEach(p => {
this.partyMembers.add(ChatLib.removeFormatting(p.trim().split(" ").pop().trim()))
})
})
this.registerChat("&eParty ${type}: ${mem}", (type, mem) => {
if (type.toLowerCase().includes("leader")) this.partyMembers.clear()
ChatLib.removeFormatting(mem).split("●").forEach(p => {
if (!p.trim()) return
this.partyMembers.add(p.trim().split(" ").pop().trim())
})
})
}
registerChat(msg, fun) {
return register("chat", fun.bind(this)).setChatCriteria(msg)
}
worldLoad() {
this.area = undefined
this.areaFine = undefined
this.isInDungeon = false
this.dungeonFloor = undefined
fetch("https://soopy.dev/api/v2/mayor").json(data => {
if (!data.success) return
this.mayorData = data.data
this.currentMayorPerks = new Set(data.data.mayor.perks.map(a => a.name))
})
}
step() { // 2fps
this.isInSkyblock = Scoreboard.getTitle()?.removeFormatting().includes("SKYBLOCK") || Scoreboard.getTitle()?.removeFormatting().includes("SKIBLOCK")
if (!this.isInSkyblock) {
this.stats = {}
this.isInDungeon = false
this.dungeonFloor = undefined
return
}
this.stats["Area"] = undefined
this.stats["Dungeon"] = undefined
if (World.isLoaded() && TabList.getNames()) {
TabList.getNames().forEach(n => {
n = ChatLib.removeFormatting(n)
if (!n.includes(": ")) return
if (n.includes('Secrets Found')) {
if (n.includes('%')) {
this.stats["Secrets Found%"] = n.split(": ")[1]
} else {
this.stats["Secrets Found"] = n.split(": ")[1]
}
} else {
this.stats[n.split(": ")[0].trim()] = n.split(": ")[1].trim()
}
})
}
if (this.stats["Dungeon"]) {
this.stats["Area"] = this.stats["Dungeon"]
this.isInDungeon = true
}
Scoreboard.getLines().forEach(line => {
let name = ChatLib.removeFormatting(line.getName()).replace(/[^A-z0-9 \:\(\)\.]/g, "")
if (this.isInDungeon) {
if (name.includes("The Catacombs (")) {
this.dungeonFloor = name.split("(")[1].split(")")[0].toUpperCase()
}
}
if (ChatLib.removeFormatting(line).startsWith(" ⏣ ")) {
this.areaFine = ChatLib.removeFormatting(line).split(" ⏣ ")[1].replace(/[^A-z0-9 \:\(\)\.\-]/g, "")
}
if (name.startsWith("Purse: ")) {
this.purse = parseInt(name.split("Purse: ")[1].split(" ")[0])
}
if (name.startsWith("Bits: ")) {
this.bits = parseInt(name.split("Bits: ")[1].split(" ")[0])
}
if (name.startsWith("Cleared: ")) {
this.dungeonPercentCleared = parseInt(name.split(" ")[1]) / 100
}
})
this.area = this.stats["Area"]
}
}
if (!global.betterMapDataLoaderThing) {
global.betterMapDataLoaderThing = new DataLoader()
}
/**@type {DataLoader} */
let loader = global.betterMapDataLoaderThing
export default loader