From 7227b4d7309b71c43aba8d4c8a2bfba0fbd9a0ba Mon Sep 17 00:00:00 2001 From: Madeleaan <70163122+Madeleaan@users.noreply.github.com> Date: Fri, 31 May 2024 14:16:55 +0200 Subject: Add /neucheck command & check for enchant parsers (#1166) --- .../notenoughupdates/commands/dev/CheckCommand.kt | 45 ++++++++++++ .../miscfeatures/checks/EnchantsCheck.kt | 83 ++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/main/kotlin/io/github/moulberry/notenoughupdates/commands/dev/CheckCommand.kt create mode 100644 src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/checks/EnchantsCheck.kt diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/commands/dev/CheckCommand.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/commands/dev/CheckCommand.kt new file mode 100644 index 00000000..3452df5d --- /dev/null +++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/commands/dev/CheckCommand.kt @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.commands.dev + +import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe +import io.github.moulberry.notenoughupdates.events.RegisterBrigadierCommandEvent +import io.github.moulberry.notenoughupdates.miscfeatures.checks.EnchantsCheck +import io.github.moulberry.notenoughupdates.util.brigadier.reply +import io.github.moulberry.notenoughupdates.util.brigadier.thenLiteralExecute +import io.github.moulberry.notenoughupdates.util.brigadier.withHelp +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +@NEUAutoSubscribe +class CheckCommand { + + @SubscribeEvent + fun onCommands(event: RegisterBrigadierCommandEvent) { + event.command("neucheck") { + thenLiteralExecute("neuec") { + val check = EnchantsCheck() + val replies = check.getMessages() + replies.forEach { r -> + reply(r) + } + }.withHelp("Checks for /neuec incompatibilities") + } + } +} diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/checks/EnchantsCheck.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/checks/EnchantsCheck.kt new file mode 100644 index 00000000..8160fe7c --- /dev/null +++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/checks/EnchantsCheck.kt @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2024 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.miscfeatures.checks + +import net.minecraft.event.ClickEvent +import net.minecraft.event.HoverEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.EnumChatFormatting.* +import net.minecraft.util.IChatComponent +import net.minecraftforge.fml.common.Loader + +class EnchantsCheck { + + private val sbaMsg = "SkyblockAddons is installed and might break NEU enchants!" + private val shMsg = "SkyHanni is installed and might break NEU enchants!" + private val dsmMsg = "DSM is installed and might break NEU enchants!" + private val sbeMsg = "SBE is installed and might break NEU enchants!" + + private val sbaHelp = "${LIGHT_PURPLE}/sba${YELLOW} -> ${LIGHT_PURPLE}Parse Enchant Tooltips${YELLOW} -> " + + "${LIGHT_PURPLE}Second Page${YELLOW} -> ${LIGHT_PURPLE}Highlight Special Enchantments${YELLOW} -> ${RED}${BOLD}DISABLE" + private val shHelp = "${LIGHT_PURPLE}/sh enchant parsing${YELLOW} -> ${LIGHT_PURPLE}Inventory${YELLOW} -> " + + "${LIGHT_PURPLE}Enchant Parsing${YELLOW} -> ${RED}${BOLD}DISABLE" + private val dsmHelp = "${LIGHT_PURPLE}/dsm${YELLOW} -> ${LIGHT_PURPLE}General${YELLOW} -> " + + "${LIGHT_PURPLE}Golden ... Enchantments${YELLOW} -> ${RED}${BOLD}DISABLE" + private val sbeHelp = + "${LIGHT_PURPLE}/sbe${YELLOW} -> ${LIGHT_PURPLE}Color Enchants${YELLOW} -> ${RED}${BOLD}DISABLE" + + fun getMessages(): List { + val messages = mutableListOf() + if (Loader.isModLoaded("skyblockaddons")) messages.add(modMessage(sbaMsg, sbaHelp, "/sba")) + if (Loader.isModLoaded("skyhanni")) messages.add(modMessage(shMsg, shHelp, "/sh enchant parsing")) + if (Loader.isModLoaded("Danker's Skyblock Mod")) messages.add(modMessage(dsmMsg, dsmHelp, "/dsm")) + if (Loader.isModLoaded("SkyblockExtras")) messages.add(modMessage(sbeMsg, sbeHelp, "/sbe")) + if (messages.isNotEmpty()) { + messages.addAll( + listOf( + ChatComponentText(""), + ChatComponentText("${YELLOW}One or more mods conflicting with /neuec found!"), + ChatComponentText("${LIGHT_PURPLE}Hover${YELLOW} over the above messages to check the solutions."), + ChatComponentText("${LIGHT_PURPLE}Click${YELLOW} on the above messages to run the command mentioned.") + ) + ) + } else { + val discordHover = HoverEvent(HoverEvent.Action.SHOW_TEXT, ChatComponentText("${BLUE}discord.gg/moulberry")) + val discordClick = ClickEvent(ClickEvent.Action.OPEN_URL, "https://discord.gg/moulberry") + messages.addAll( + listOf( + ChatComponentText("${GREEN}Your enchant colors should not be overriden by any mods!"), + ChatComponentText("${YELLOW}If any of your mods override them, please let us know on ${BLUE}NEU Discord") + .also { it.chatStyle.setChatHoverEvent(discordHover).setChatClickEvent(discordClick) }) + ) + } + return messages + } + + private fun modMessage(msg: String, help: String, cmd: String): IChatComponent { + val mainComponent = ChatComponentText("$RED$msg") + val hoverComponent = ChatComponentText(help) + + val hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent) + val clickEvent = ClickEvent(ClickEvent.Action.RUN_COMMAND, cmd) + mainComponent.chatStyle.setChatHoverEvent(hoverEvent).setChatClickEvent(clickEvent) + + return mainComponent + } +} -- cgit