From bfa2b37155711e2a907f15d6e56d18378ae4f723 Mon Sep 17 00:00:00 2001 From: ingle Date: Fri, 28 Oct 2022 12:17:26 -0500 Subject: + Efficiency improvements + command for setting leap highlight + (I THINK) abiphone dnd (on by default) --- src/main/kotlin/dulkirmod/DulkirMod.kt | 4 ++ .../kotlin/dulkirmod/command/LeapNameCommand.kt | 25 +++++++++ src/main/kotlin/dulkirmod/config/Config.kt | 11 +++- src/main/kotlin/dulkirmod/events/ChatEvent.kt | 15 +++++- src/main/kotlin/dulkirmod/events/caller.txt | 4 ++ src/main/kotlin/dulkirmod/features/Croesus.kt | 59 ++++++++++++++++------ src/main/kotlin/dulkirmod/features/DungeonLeap.kt | 57 +++++++++++++++------ .../kotlin/dulkirmod/forge/FMLLoadingPlugin.kt | 28 ---------- .../kotlin/dulkirmod/utils/ContainerNameUtil.kt | 21 ++++++++ 9 files changed, 164 insertions(+), 60 deletions(-) create mode 100644 src/main/kotlin/dulkirmod/command/LeapNameCommand.kt create mode 100644 src/main/kotlin/dulkirmod/events/caller.txt delete mode 100644 src/main/kotlin/dulkirmod/forge/FMLLoadingPlugin.kt create mode 100644 src/main/kotlin/dulkirmod/utils/ContainerNameUtil.kt (limited to 'src/main/kotlin') diff --git a/src/main/kotlin/dulkirmod/DulkirMod.kt b/src/main/kotlin/dulkirmod/DulkirMod.kt index 0273af4..0291226 100644 --- a/src/main/kotlin/dulkirmod/DulkirMod.kt +++ b/src/main/kotlin/dulkirmod/DulkirMod.kt @@ -4,6 +4,7 @@ import dulkirmod.command.* import dulkirmod.config.Config import dulkirmod.events.ChatEvent import dulkirmod.features.* +import dulkirmod.utils.ContainerNameUtil import dulkirmod.utils.TitleUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -49,6 +50,7 @@ class DulkirMod { ClientCommandHandler.instance.registerCommand(FairyCommand()) ClientCommandHandler.instance.registerCommand(SettingsCommand()) ClientCommandHandler.instance.registerCommand(JoinDungeonCommand()) + ClientCommandHandler.instance.registerCommand(LeapNameCommand()) } @Mod.EventHandler @@ -62,6 +64,8 @@ class DulkirMod { MinecraftForge.EVENT_BUS.register(ArachneTimer()) MinecraftForge.EVENT_BUS.register(MatchoAlert()) MinecraftForge.EVENT_BUS.register(Croesus()) + MinecraftForge.EVENT_BUS.register(ContainerNameUtil()) + MinecraftForge.EVENT_BUS.register(DungeonLeap()) keyBinds.forEach(ClientRegistry::registerKeyBinding) } diff --git a/src/main/kotlin/dulkirmod/command/LeapNameCommand.kt b/src/main/kotlin/dulkirmod/command/LeapNameCommand.kt new file mode 100644 index 0000000..3d7b4f2 --- /dev/null +++ b/src/main/kotlin/dulkirmod/command/LeapNameCommand.kt @@ -0,0 +1,25 @@ +package dulkirmod.command + +import dulkirmod.DulkirMod +import dulkirmod.config.Config +import net.minecraft.command.CommandException +import net.minecraft.command.ICommandSender +import net.minecraft.util.ChatComponentText + +class LeapNameCommand : ClientCommandBase("hl") { + @Throws(CommandException::class) + override fun processCommand(sender: ICommandSender, args: Array) { + if (args.isEmpty()) { + DulkirMod.mc.thePlayer.addChatMessage( + ChatComponentText("${DulkirMod.CHAT_PREFIX} §6Please give a username argument (case sensitive) for who you want to be highlighted.") + ) + return + } + + val username = args[0] + Config.highlightLeapName = username + DulkirMod.mc.thePlayer.addChatMessage( + ChatComponentText("${DulkirMod.CHAT_PREFIX} §6Selected Leap Highlight for username: §f$username§6.") + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/config/Config.kt b/src/main/kotlin/dulkirmod/config/Config.kt index df69eca..d300b85 100644 --- a/src/main/kotlin/dulkirmod/config/Config.kt +++ b/src/main/kotlin/dulkirmod/config/Config.kt @@ -249,10 +249,18 @@ object Config : Vigilant(File("./config/dulkirmod/config.toml"), "DulkirMod", so ) var hideOpenedChests = false + @Property( + type = PropertyType.SWITCH, + name = "Highlight custom player for leap in menu", + description = "changes texture to green wool!", + category = "Dungeons" + ) + var highlightLeap = false + @Property( type = PropertyType.TEXT, name = "Highlighted player name", - description = "Not case-sensitive", + description = "case-sensitive", category = "Dungeons", placeholder = "Dilkur", protectedText = false @@ -460,6 +468,7 @@ object Config : Vigilant(File("./config/dulkirmod/config.toml"), "DulkirMod", so addDependency("throttleNotifierSpam", "throttleNotifier") addDependency("bestiaryNotifVol", "bestiaryAlertSounds") addDependency("demoVolume", "bestiaryAlertSounds") + addDependency("highlightLeapName", "highlightLeap") setCategoryDescription( "Custom Animations", diff --git a/src/main/kotlin/dulkirmod/events/ChatEvent.kt b/src/main/kotlin/dulkirmod/events/ChatEvent.kt index 290372a..3bddaea 100644 --- a/src/main/kotlin/dulkirmod/events/ChatEvent.kt +++ b/src/main/kotlin/dulkirmod/events/ChatEvent.kt @@ -13,7 +13,9 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class ChatEvent { private val guildFormat = "^(§2Guild|§3Officer) > (?:\\S+ )?([\\w§]{3,18})(?: §[a-z0-9]\\[[A-Z]+])?§f: (\\w+) > .+".toRegex() private val alternateFormat = "^(§2Guild|§3Officer) > (?:\\S+ )?([\\w§]{3,18})(?: §[a-z0-9]\\[[A-Z]+])?§f: (\\w+): .+".toRegex() - private var lastThrottle : Long = 0; + private var lastThrottle : Long = 0 + private var lastRing : Long = 0 + @SubscribeEvent(receiveCanceled = true, priority = EventPriority.LOW) fun onChat(event: ClientChatReceivedEvent) { if (event.type == 2.toByte()) { @@ -66,5 +68,16 @@ class ChatEvent { ).setChatStyle(event.message.siblings[1].chatStyle.createShallowCopy()) } } + + // DO NOT DISTURB FOR ABIPHONE + if (unformatted.equals("✆ \\w+ ✆".toRegex())) { + DulkirMod.mc.thePlayer.addChatMessage( + ChatComponentText("${DulkirMod.CHAT_PREFIX} §6Call blocked!") + ) + event.isCanceled = true; + lastRing = System.currentTimeMillis() + } + if (unformatted.startsWith("✆ Ring...") && unformatted.endsWith("[PICK UP]") && System.currentTimeMillis() - lastRing < 4000) + event.isCanceled = true; } } \ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/events/caller.txt b/src/main/kotlin/dulkirmod/events/caller.txt new file mode 100644 index 0000000..75ec9e9 --- /dev/null +++ b/src/main/kotlin/dulkirmod/events/caller.txt @@ -0,0 +1,4 @@ +✆ Aranya ✆ +§a✆ Ring... §2§l[PICK UP] +§a✆ Ring... Ring... §2§l[PICK UP] +§a✆ Ring... Ring... Ring... §2§l[PICK UP] \ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/Croesus.kt b/src/main/kotlin/dulkirmod/features/Croesus.kt index 0ddfe9e..188c6a9 100644 --- a/src/main/kotlin/dulkirmod/features/Croesus.kt +++ b/src/main/kotlin/dulkirmod/features/Croesus.kt @@ -2,31 +2,60 @@ package dulkirmod.features import dulkirmod.DulkirMod.Companion.mc import dulkirmod.config.Config +import dulkirmod.utils.ContainerNameUtil import net.minecraft.client.gui.inventory.GuiChest -import net.minecraft.inventory.ContainerChest import net.minecraft.inventory.Slot +import net.minecraft.nbt.NBTTagList +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent class Croesus { + + var lastGuiOpenEvent : Long = 0 + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + val lastInCroesus = inCroesusBool + + if (!Config.hideOpenedChests) return + if (mc.currentScreen == null || !(mc.currentScreen is GuiChest)) { + inCroesusBool = false + return + } + inCroesusBool = (ContainerNameUtil.currentGuiChestName == "Croesus") + + if (inCroesusBool && !lastInCroesus) { + lastGuiOpenEvent = System.currentTimeMillis() + } + + if (inCroesusBool && System.currentTimeMillis() - lastGuiOpenEvent < 300) { + for (i in 9..44) { + boolArray[i-9] = false + val slotIn = mc.thePlayer.openContainer.getSlot(i) + + if (slotIn.stack == null) continue + val stack = slotIn.stack + if (stack.getSubCompound("display", true)?.getTagList("Lore", 8) == null) continue + + val tagList: NBTTagList = stack.getSubCompound("display", true).getTagList("Lore", 8) + for (j in 0 until tagList.tagCount()) { + if (tagList.getStringTagAt(j) == "§aChests have been opened!") boolArray[i-9] = true + } + } + } + } companion object { - var currentlyOpenChestName = "" + var inCroesusBool : Boolean = false + var boolArray = BooleanArray(36) {false} fun inCroesus(): Boolean { - if (mc.currentScreen == null || !(mc.currentScreen is GuiChest)) return false - val chest = mc.currentScreen as GuiChest - val container = chest.inventorySlots as ContainerChest - currentlyOpenChestName = container.lowerChestInventory.displayName.unformattedText - if (currentlyOpenChestName == "Croesus") return true - return false + return inCroesusBool } fun isChestOpened(slotIn: Slot): Boolean { - if (!Config.hideOpenedChests) return false - if (slotIn.stack?.getTooltip(mc.thePlayer, false) == null) return false - - var tooltip = slotIn.stack.getTooltip(mc.thePlayer, false) - if (tooltip.contains("§5§o§aChests have been opened!")) return true - - return false + if (!inCroesusBool) return false + val slotindex = slotIn.slotIndex + if (slotindex !in 9..44) return false + return boolArray[slotindex - 9] } } } \ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/DungeonLeap.kt b/src/main/kotlin/dulkirmod/features/DungeonLeap.kt index 54a304c..b8ce75e 100644 --- a/src/main/kotlin/dulkirmod/features/DungeonLeap.kt +++ b/src/main/kotlin/dulkirmod/features/DungeonLeap.kt @@ -1,32 +1,59 @@ package dulkirmod.features import dulkirmod.DulkirMod +import dulkirmod.DulkirMod.Companion.mc import dulkirmod.config.Config +import dulkirmod.utils.ContainerNameUtil import dulkirmod.utils.Utils import net.minecraft.client.gui.inventory.GuiChest -import net.minecraft.inventory.ContainerChest import net.minecraft.inventory.Slot +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent class DungeonLeap { + + + private var lastGuiOpenEvent : Long = 0 + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + val lastInLeap = inLeapMenuBool + + if (!Config.highlightLeap) return + if (mc.currentScreen == null || !(mc.currentScreen is GuiChest)) { + inLeapMenuBool = false + return + } + inLeapMenuBool = (ContainerNameUtil.currentGuiChestName == "Spirit Leap") + + if (inLeapMenuBool && !lastInLeap) { + lastGuiOpenEvent = System.currentTimeMillis() + } + + if (inLeapMenuBool && System.currentTimeMillis() - lastGuiOpenEvent < 300) { + for (i in 11..15) { + boolArray[i-11] = false + val slotIn = DulkirMod.mc.thePlayer.openContainer.getSlot(i) + + if (slotIn.stack == null) continue + val stack = slotIn.stack + if (Utils.stripColorCodes(stack.displayName) == Config.highlightLeapName) boolArray[i-11] = true + } + } + } companion object { + var inLeapMenuBool : Boolean = false + var boolArray = BooleanArray(5) {false} + fun inLeapMenu(): Boolean { - if (DulkirMod.mc.currentScreen == null || !(DulkirMod.mc.currentScreen is GuiChest)) return false - val chest = DulkirMod.mc.currentScreen as GuiChest - val container = chest.inventorySlots as ContainerChest - Croesus.currentlyOpenChestName = container.lowerChestInventory.displayName.unformattedText - if (Croesus.currentlyOpenChestName == "Spirit Leap") return true - return false + return inLeapMenuBool } fun isHighlightedLeapPlayer(slotIn: Slot): Boolean { - if (slotIn.stack?.getTooltip(DulkirMod.mc.thePlayer, false) == null) return false - - val tooltip = slotIn.stack.getTooltip(DulkirMod.mc.thePlayer, false) - for (s in tooltip) { - var t = Utils.stripColorCodes(s) - if (t == Config.highlightLeapName) return true - } - return false + if (!inLeapMenuBool) return false + if(slotIn.inventory == mc.thePlayer.inventory) return false + val slotIndex = slotIn.slotIndex + if (slotIndex !in 11..15) return false + return boolArray[slotIndex - 11] } } } \ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/forge/FMLLoadingPlugin.kt b/src/main/kotlin/dulkirmod/forge/FMLLoadingPlugin.kt deleted file mode 100644 index ee21437..0000000 --- a/src/main/kotlin/dulkirmod/forge/FMLLoadingPlugin.kt +++ /dev/null @@ -1,28 +0,0 @@ -package dulkirmod.forge - -import net.minecraftforge.common.ForgeVersion -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.MCVersion -import org.spongepowered.asm.launch.MixinBootstrap -import org.spongepowered.asm.mixin.MixinEnvironment -import org.spongepowered.asm.mixin.Mixins - -@MCVersion(ForgeVersion.mcVersion) -class FMLLoadingPlugin : IFMLLoadingPlugin { - - override fun getASMTransformerClass(): Array = emptyArray() - - override fun getModContainerClass(): String? = null - - override fun getSetupClass(): String? = null - - override fun injectData(data: Map) {} - - override fun getAccessTransformerClass(): String? = null - - init { - MixinBootstrap.init() - Mixins.addConfiguration("mixins.dulkirmod.json") - MixinEnvironment.getCurrentEnvironment().obfuscationContext = "searge" - } -} diff --git a/src/main/kotlin/dulkirmod/utils/ContainerNameUtil.kt b/src/main/kotlin/dulkirmod/utils/ContainerNameUtil.kt new file mode 100644 index 0000000..706bcea --- /dev/null +++ b/src/main/kotlin/dulkirmod/utils/ContainerNameUtil.kt @@ -0,0 +1,21 @@ +package dulkirmod.utils + +import dulkirmod.DulkirMod.Companion.mc +import net.minecraft.client.gui.inventory.GuiChest +import net.minecraft.inventory.ContainerChest +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent + +class ContainerNameUtil { + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (mc.currentScreen !is GuiChest) return + val chest = mc.currentScreen as GuiChest + val container = chest.inventorySlots as ContainerChest + currentGuiChestName = container.lowerChestInventory.displayName.unformattedText + } + + companion object { + var currentGuiChestName = "" + } +} \ No newline at end of file -- cgit