aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
blob: 69fc0c83a99645ba7b24372b6366bd1d8409ff53 (plain)
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
package at.hannibal2.skyhanni.config.commands

import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.config.ConfigGuiManager
import at.hannibal2.skyhanni.config.commands.SimpleCommand.ProcessCommandRunnable
import at.hannibal2.skyhanni.data.ChatManager
import at.hannibal2.skyhanni.data.GuiEditManager
import at.hannibal2.skyhanni.features.bingo.BingoCardDisplay
import at.hannibal2.skyhanni.features.bingo.BingoNextStepHelper
import at.hannibal2.skyhanni.features.chat.Translator
import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper
import at.hannibal2.skyhanni.features.event.diana.InquisitorWaypointShare
import at.hannibal2.skyhanni.features.fame.AccountUpgradeReminder
import at.hannibal2.skyhanni.features.fame.CityProjectFeatures
import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.features.garden.GardenCropTimeCommand
import at.hannibal2.skyhanni.features.garden.GardenNextJacobContest
import at.hannibal2.skyhanni.features.garden.composter.ComposterOverlay
import at.hannibal2.skyhanni.features.garden.farming.CropMoneyDisplay
import at.hannibal2.skyhanni.features.garden.farming.CropSpeedMeter
import at.hannibal2.skyhanni.features.garden.farming.FarmingWeightDisplay
import at.hannibal2.skyhanni.features.garden.farming.GardenStartLocation
import at.hannibal2.skyhanni.features.garden.fortuneguide.CaptureFarmingGear
import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI
import at.hannibal2.skyhanni.features.minion.MinionFeatures
import at.hannibal2.skyhanni.features.misc.CollectionTracker
import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager
import at.hannibal2.skyhanni.features.misc.discordrpc.DiscordRPCManager
import at.hannibal2.skyhanni.features.misc.ghostcounter.GhostUtil
import at.hannibal2.skyhanni.features.misc.massconfiguration.DefaultConfigFeatures
import at.hannibal2.skyhanni.features.slayer.SlayerItemProfitTracker
import at.hannibal2.skyhanni.test.PacketTest
import at.hannibal2.skyhanni.test.SkyHanniConfigSearchResetCommand
import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests
import at.hannibal2.skyhanni.test.TestBingo
import at.hannibal2.skyhanni.test.command.*
import at.hannibal2.skyhanni.utils.APIUtil
import at.hannibal2.skyhanni.utils.LorenzUtils
import net.minecraft.client.Minecraft
import net.minecraft.command.ICommandSender
import net.minecraft.event.ClickEvent
import net.minecraft.event.HoverEvent
import net.minecraft.util.ChatComponentText
import net.minecraftforge.client.ClientCommandHandler

object Commands {

    private val openMainMenu: (Array<String>) -> Unit = {
        if (it.isNotEmpty()) {
            if (it[0].lowercase() == "gui") {
                GuiEditManager.openGuiPositionEditor()
            } else {
                ConfigGuiManager.openConfigGui(it.joinToString(" "))
            }
        } else {
            val arr = mutableListOf<String>()
            ConfigGuiManager.openConfigGui()
        }
    }

    // command -> description
    private val commands = mutableListOf<CommandInfo>()

    enum class CommandCategory(val color: String, val categoryName: String, val description: String) {
        MAIN("§6", "Main Command", "Most useful commands of SkyHanni"),
        USERS_NORMAL("§e", "Normal Command", "Normal Command for everyone to use"),
        USERS_BUG_FIX("§f", "User Bug Fix", "A Command to fix small bugs"),
        DEVELOPER_CODING_HELP(
            "§5", "Developer Coding Help",
            "A Command that can help with developing new features. §cIntended for developers only!"
        ),
        DEVELOPER_DEBUG_FEATURES(
            "§9", "Developer Debug Features",
            "A Command that is useful for monitoring/debugging existing features. §cIntended for developers only!"
        ),
        INTERNAL("§8", "Internal Command", "A Command that should §cnever §7be called manually!"),

    }

    class CommandInfo(val name: String, val description: String, val category: CommandCategory)

    private var currentCategory = CommandCategory.MAIN

    fun init() {
        currentCategory = CommandCategory.MAIN
        usersMain()

        currentCategory = CommandCategory.USERS_NORMAL
        usersNormal()

        currentCategory = CommandCategory.USERS_BUG_FIX
        usersBugFix()

        currentCategory = CommandCategory.DEVELOPER_CODING_HELP
        developersCodingHelp()

        currentCategory = CommandCategory.DEVELOPER_DEBUG_FEATURES
        developersDebugFeatures()

        currentCategory = CommandCategory.INTERNAL
        internalCommands()
    }

    private fun usersMain() {
        registerCommand("sh", "Opens the main SkyHanni config", openMainMenu)
        registerCommand("skyhanni", "Opens the main SkyHanni config", openMainMenu)
        registerCommand("ff", "Opens the Farming Fortune Guide") { openFortuneGuide() }
        registerCommand("shcommands", "Shows this list") { commandHelp(it) }
        registerCommand0("shdefaultoptions", "Select default options", {
            DefaultConfigFeatures.onCommand(
                it.getOrNull(0) ?: "null", it.getOrNull(1) ?: "null"
            )
        }, DefaultConfigFeatures::onComplete)
    }

    private fun usersNormal() {
        registerCommand(
            "shmarkplayer",
            "Add a highlight effect to a player for better visibility"
        ) { MarkedPlayerManager.command(it) }
        registerCommand("shtrackcollection", "Tracks your collection gain over time") { CollectionTracker.command(it) }
        registerCommand(
            "shcroptime",
            "Calculates with your current crop per second speed how long you need to farm a crop to collect this amount of items"
        ) { GardenCropTimeCommand.onCommand(it) }
        registerCommand(
            "shrpcstart",
            "Manually starts the Discord Rich Presence feature"
        ) { DiscordRPCManager.startCommand() }
        registerCommand(
            "shcropstartlocation",
            "Manually sets the crop start location"
        ) { GardenStartLocation.setLocationCommand() }
        registerCommand(
            "shclearslayerprofits",
            "Clearing the total slayer profit for the current slayer type"
        ) { SlayerItemProfitTracker.clearProfitCommand(it) }
        registerCommand(
            "shimportghostcounterdata",
            "Manually importing the ghost counter data from GhostCounterV3"
        ) { GhostUtil.importCTGhostCounterData() }
        registerCommand(
            "shclearfarmingitems",
            "Clear farming items saved for the Farming Fortune Guide"
        ) { clearFarmingItems() }
        registerCommand("shresetghostcounter", "Resets the ghost counter stats") { GhostUtil.reset() }
        registerCommand("shbingotoggle", "Toggle the bingo card display mode") { BingoCardDisplay.toggleCommand() }
        registerCommand(
            "shfarmingprofile",
            "Look up the farming profile from yourself or another player on elitebot.dev"
        ) { FarmingWeightDisplay.lookUpCommand(it) }
        registerCommand(
            "shcopytranslation",
            "<language code (2 letters)> <messsage to translate>\n" +
                    "Requires the Chat > Translator feature to be enabled.\n" +
                    "Copies the translation for a given message to your clipboard. " +
                    "Language codes are at the end of the translation when you click on a message."
        ) { Translator.fromEnglish(it) }
    }

    private fun usersBugFix() {
        registerCommand("shupdaterepo", "Download the Skyhanni repo again") { SkyHanniMod.repo.updateRepo() }
        registerCommand(
            "shresetburrowwarps",
            "Manually resetting disabled diana burrow warp points"
        ) { BurrowWarpHelper.resetDisabledWarps() }
        registerCommand(
            "shtogglehypixelapierrors",
            "Show/hide hypixel api error messages in chat"
        ) { APIUtil.toggleApiErrorMessages() }
        registerCommand(
            "shclearcropspeed",
            "Reset garden crop speed data and best crop time data"
        ) { GardenAPI.clearCropSpeed() }
        registerCommand(
            "shclearminiondata",
            "Reset data about minion profit and the name display on the private island"
        ) { MinionFeatures.clearMinionData() }
        registerCommand(
            "shconfig",
            "Search or reset config elements §c(warning, dangerous!)"
        ) { SkyHanniConfigSearchResetCommand.command(it) }
        registerCommand(
            "shdebugdata",
            "Prints debug data in the clipboard"
        ) { SkyHanniDebugsAndTests.debugData(it) }
        registerCommand(
            "shversion",
            "Prints the SkyHanni version in the chat"
        ) { SkyHanniDebugsAndTests.debugVersion() }
        registerCommand(
            "shcarrot",
            "Toggles receiving the 12 fortune from carrots"
        ) { CaptureFarmingGear.reverseCarrotFortune() }
    }

    private fun developersDebugFeatures() {
        registerCommand("shtestbingo", "dev command") { TestBingo.toggle() }
        registerCommand("shprintbingohelper", "dev command") { BingoNextStepHelper.command() }
        registerCommand("shreloadbingodata", "dev command") { BingoCardDisplay.command() }
        registerCommand("shtestgardenvisitors", "dev command") { SkyHanniDebugsAndTests.testGardenVisitors() }
        registerCommand("shtestcomposter", "dev command") { ComposterOverlay.onCommand(it) }
        registerCommand("shtestinquisitor", "dev command") { InquisitorWaypointShare.test() }
        registerCommand("shshowcropmoneycalculation", "dev command") { CropMoneyDisplay.toggleShowCalculation() }
        registerCommand("shcropspeedmeter", "Debugs how many crops you collect over time") { CropSpeedMeter.toggle() }
        registerCommand(
            "shconfigsave",
            "Manually saving the config"
        ) { SkyHanniMod.configManager.saveConfig("manual-command") }
    }

    private fun developersCodingHelp() {
        registerCommand("shtest", "Unused test command.") { SkyHanniDebugsAndTests.testCommand(it) }
        registerCommand("shreloadlocalrepo", "Reloading the local repo data") { SkyHanniMod.repo.reloadLocalRepo() }
        registerCommand("shchathistory", "Show the unfiltered chat history") { ChatManager.openChatFilterGUI() }
        registerCommand(
            "shstoplisteners",
            "Unregistering all loaded forge event listeners"
        ) { SkyHanniDebugsAndTests.stopListeners() }
        registerCommand(
            "shreloadlisteners",
            "Trying to load all forge event listeners again. Might not work at all"
        ) { SkyHanniDebugsAndTests.reloadListeners() }
        registerCommand(
            "shcopylocation",
            "Copies the player location as LorenzVec format to the clipboard"
        ) { SkyHanniDebugsAndTests.copyLocation(it) }
        registerCommand(
            "shcopyentities",
            "Copies entities in the specified radius around the player to the clipboard"
        ) { CopyNearbyEntitiesCommand.command(it