diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt index 11666e212b0..313d17f174f 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt @@ -96,6 +96,7 @@ import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleAutoAccount import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleAutoChatGame import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleAutoConfig import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleAutoPearl +import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleAutoTPA import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleBetterTab import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleBookBot import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleEasyPearl @@ -545,6 +546,7 @@ object ModuleManager : EventListener, Collection by modules { ModuleDebugRecorder, ModuleAntiCheatDetect, ModuleEasyPearl, + ModuleAutoTPA, // Movement ModuleAirJump, diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleAutoTPA.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleAutoTPA.kt new file mode 100644 index 00000000000..9b56cdeb66d --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleAutoTPA.kt @@ -0,0 +1,96 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2026 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + */ + +package net.ccbluex.liquidbounce.features.module.modules.misc + +import net.ccbluex.liquidbounce.config.types.list.Tagged +import net.ccbluex.liquidbounce.event.events.PacketEvent +import net.ccbluex.liquidbounce.event.events.PlayerTickEvent +import net.ccbluex.liquidbounce.event.handler +import net.ccbluex.liquidbounce.features.misc.FriendManager +import net.ccbluex.liquidbounce.features.module.ClientModule +import net.ccbluex.liquidbounce.features.module.ModuleCategories +import net.ccbluex.liquidbounce.features.module.modules.misc.ModuleNotifier.sendNotifierMessage +import net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket + +object ModuleAutoTPA : ClientModule("AutoTPA", ModuleCategories.MISC) { + + private val mode by enumChoice("Command", Modes.TPACCEPT) + private val friendsOnly by boolean("OnlyFriends", true) + + private val teleportMessages = arrayOf( + "has requested teleport", "просит телепортироваться", "хочет телепортироваться к вам", + "просит к вам телепортироваться", "хочет телепортироваться к вам.", "отправил вам запрос на телепортацию", + "/tpyes", "/tpaccept", "/tpno", "/tpdeny", "Z Запрос на телепортацию от", "Z Принять - /tpyes", + "Z Отклонить - /tpno", "has requested to teleport to you", "To teleport, type /tpaccept", + "To deny, type /tpdeny", "wants to teleport to you", "[Accept]", "[Deny]", "Incoming teleport request from", + "Teleport to you", "has sent a TPA request", "sent a teleport request to you", "[Accept", "[Deny", "accept]", + "deny]" + ) + + private val blacklistMessages = arrayOf( + "✉", "[ЛС]", "You]", "Я]", "Вы]", "I]", "» You", "-> You","» I", "-> I", "» Я", "-> Я", + "» Вы", "-> Вы", "You)", "Я)", "Вы)", "I)", + ) + + private var canAccept = false + + @Suppress("unused") + private val onPacket = handler { e -> + val message = when (val packet = e.packet) { + is ClientboundSystemChatPacket -> packet.content().string + is ClientboundDisguisedChatPacket -> packet.message().string + else -> return@handler + } + + if (isTeleportMessage(message)) { + if (friendsOnly) { + val matchedTrigger = teleportMessages.firstOrNull { message.contains(it, ignoreCase = true) } ?: "" + val cleanMessage = message.replace(matchedTrigger, "", ignoreCase = true) + + canAccept = FriendManager.friends.any { cleanMessage.contains(it.name, ignoreCase = true) } + } else { + canAccept = true + } + } + } + + @Suppress("unused") + private val onTick = handler { + if (canAccept) { + canAccept = false + val player = mc.player ?: return@handler + + player.connection.sendCommand(mode.tag) + val canSendMessage = ModuleNotifier.enabled && ModuleNotifier.autotpaMessages + if (canSendMessage) sendNotifierMessage("Teleport request accepted") + } + } + + private fun isTeleportMessage(message: String): Boolean { + return teleportMessages.any { message.contains(it, ignoreCase = true) } + && !blacklistMessages.any { message.contains(it, ignoreCase = true) } + } + + private enum class Modes(override val tag: String) : Tagged { + TPACCEPT("tpaccept"), + TPYES("tpyes"), + } +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleNotifier.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleNotifier.kt index 8ddbaf83e42..58ce304eef6 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleNotifier.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleNotifier.kt @@ -21,6 +21,7 @@ package net.ccbluex.liquidbounce.features.module.modules.misc import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet +import joptsimple.internal.Messages import net.ccbluex.liquidbounce.event.events.NotificationEvent import net.ccbluex.liquidbounce.event.events.PacketEvent import net.ccbluex.liquidbounce.event.events.PlayerTickEvent @@ -73,6 +74,8 @@ object ModuleNotifier : ClientModule("Notifier", ModuleCategories.MISC) { private val itemConsumptionMessages by boolean("ItemConsumptionMessages", true) private val itemConsumptionMessageFormat by text("ItemConsumptionMessageFormat", $$"%1$s used %2$s") + val autotpaMessages by boolean("AutoTPAMessages", true) + private val heldItemMessages by boolean("HeldItemMessages", false) private val heldItemMessageFormat by text("HeldItemMessageFormat", $$"%1$s holds %2$s x%3$s in %4$s") private val heldItems by items("HeldItems", itemSortedSetOf(Items.END_CRYSTAL, Items.ENCHANTED_GOLDEN_APPLE)) @@ -320,7 +323,7 @@ object ModuleNotifier : ClientModule("Notifier", ModuleCategories.MISC) { ) } - private fun sendNotifierMessage(message: String) { + fun sendNotifierMessage(message: String) { if (useNotification) { notification(this.name, message, NotificationEvent.Severity.INFO) } else { diff --git a/src/main/resources/resources/liquidbounce/lang/de_de.json b/src/main/resources/resources/liquidbounce/lang/de_de.json index be168c20567..d9ca9af60af 100644 --- a/src/main/resources/resources/liquidbounce/lang/de_de.json +++ b/src/main/resources/resources/liquidbounce/lang/de_de.json @@ -274,6 +274,7 @@ "liquidbounce.module.antiStaff.messages.noStaffs": "Das Laden der Staff Liste für %s ist mit dem Code %s fehlgeschlagen.", "liquidbounce.module.antiStaff.messages.staffsFailed": "Das Laden der Staff Liste für %s ist mit dem Code %s fehlgeschlagen.", "liquidbounce.module.antiStaff.messages.staffsLoaded": "%s Moderatoren für %s geladen.", + "liquidbounce.module.autoTpa.description": "akzeptiert automatisch Teleportationsanfragen", "liquidbounce.module.autoAccount.description": "Authentifiziert dich automatisch auf cracked Servern.", "liquidbounce.module.autoArmor.description": "Rüstet automatisch die beste Rüstung in deinem Inventar aus.", "liquidbounce.module.autoArmor.value.delay.description": "Wartezeit zwischen dem Ausrüsten mehrerer Items.", diff --git a/src/main/resources/resources/liquidbounce/lang/en_pt.json b/src/main/resources/resources/liquidbounce/lang/en_pt.json index 6a244be22d5..e4a3bb6838d 100644 --- a/src/main/resources/resources/liquidbounce/lang/en_pt.json +++ b/src/main/resources/resources/liquidbounce/lang/en_pt.json @@ -113,6 +113,7 @@ "liquidbounce.liquidchat.states.loggedIn": "Wogged in >w<", "liquidbounce.liquidchat.writeMessage": "Wwite mwessage: %s", "liquidbounce.liquidchat.writePrivateMessage": "Wwite pwivate mwessage: %s", + "liquidbounce.module.autoTpa.description": "Autwomaticawwy accepts teweportation wequests (・`ω´・)", "liquidbounce.module.wings.description": "Render wings behind the cap'n's back.", "liquidbounce.module.autoArmor.description": "Autwomaticawwy put on teh best awmwow", "liquidbounce.module.autoArmor.value.delay.description": "Teh tim two wait between equipping an awmwow item", diff --git a/src/main/resources/resources/liquidbounce/lang/en_us.json b/src/main/resources/resources/liquidbounce/lang/en_us.json index 51c2b3d1efa..6b8ba35450e 100644 --- a/src/main/resources/resources/liquidbounce/lang/en_us.json +++ b/src/main/resources/resources/liquidbounce/lang/en_us.json @@ -449,6 +449,7 @@ "liquidbounce.module.logoffSpot.messages.disappeared": "%s disappeared at X: %s, Y: %s, Z: %s.", "liquidbounce.module.logoffSpot.messages.reappeared": "%s reappeared.", "liquidbounce.module.logoffSpot.messages.unloaded": "%s position was unloaded and is no longer visible.", + "liquidbounce.module.autoTpa.description": "Automatically accepts teleportation requests", "liquidbounce.module.tntTimer.description": "Highlight the active TNTs.", "liquidbounce.module.abortBreaking.description": "Allows you to abort breaking without losing progress.", "liquidbounce.module.aimbot.description": "Automatically faces targets nearby.", diff --git a/src/main/resources/resources/liquidbounce/lang/ja_jp.json b/src/main/resources/resources/liquidbounce/lang/ja_jp.json index 45982428ed5..a32f42939eb 100644 --- a/src/main/resources/resources/liquidbounce/lang/ja_jp.json +++ b/src/main/resources/resources/liquidbounce/lang/ja_jp.json @@ -242,6 +242,7 @@ "liquidbounce.liquidchat.writePrivateMessage": "プライベート メッセージを送信するには: %s", "liquidbounce.module.wings.description": "プレイヤーの後ろに羽を描画します。", "liquidbounce.module.ESP.description": "壁越しにターゲットを見ることができます。", + "liquidbounce.module.autoTpa.description": "テレポートリクエストを自動的に承認します", "liquidbounce.module.abortBreaking.description": "ブロック破壊の進行状況がリセットされることなくブロック破壊を中断できます。", "liquidbounce.module.aimbot.description": "自動的に近くのターゲットにエイムを合わせます。", "liquidbounce.module.airJump.description": "空中でジャンプできるようになります。", diff --git a/src/main/resources/resources/liquidbounce/lang/nl_be.json b/src/main/resources/resources/liquidbounce/lang/nl_be.json index b24a360bc8f..042de6a3e50 100644 --- a/src/main/resources/resources/liquidbounce/lang/nl_be.json +++ b/src/main/resources/resources/liquidbounce/lang/nl_be.json @@ -282,6 +282,7 @@ "liquidbounce.module.packetLogger.messages.send": "Versturen", "liquidbounce.module.packetLogger.messages.receive": "Ontvangen", "liquidbounce.module.packetLogger.messages.canceled": "geannuleerd", + "liquidbounce.module.autoTpa.description": "Accepteert automatisch teleportatieverzoeken", "liquidbounce.module.ESP.description": "Laat je doelwitten door muren zien.", "liquidbounce.module.tntTimer.description": "Markeert actieve TNT's.", "liquidbounce.module.abortBreaking.description": "Maakt het mogelijk het breken van een blok te annuleren zonder voortgang te verliezen.", diff --git a/src/main/resources/resources/liquidbounce/lang/nl_nl.json b/src/main/resources/resources/liquidbounce/lang/nl_nl.json index b24a360bc8f..7a179ed2eb1 100644 --- a/src/main/resources/resources/liquidbounce/lang/nl_nl.json +++ b/src/main/resources/resources/liquidbounce/lang/nl_nl.json @@ -282,6 +282,7 @@ "liquidbounce.module.packetLogger.messages.send": "Versturen", "liquidbounce.module.packetLogger.messages.receive": "Ontvangen", "liquidbounce.module.packetLogger.messages.canceled": "geannuleerd", + "liquidbounce.module.autoTpa.description": "Accepteert автоматически teleportatieverzoeken", "liquidbounce.module.ESP.description": "Laat je doelwitten door muren zien.", "liquidbounce.module.tntTimer.description": "Markeert actieve TNT's.", "liquidbounce.module.abortBreaking.description": "Maakt het mogelijk het breken van een blok te annuleren zonder voortgang te verliezen.", diff --git a/src/main/resources/resources/liquidbounce/lang/pt_br.json b/src/main/resources/resources/liquidbounce/lang/pt_br.json index 5d8ea03327a..cfb884a2719 100644 --- a/src/main/resources/resources/liquidbounce/lang/pt_br.json +++ b/src/main/resources/resources/liquidbounce/lang/pt_br.json @@ -161,6 +161,7 @@ "liquidbounce.module.autoLeave.description": "Automaticamente sai do servidor quando sua vida esta baixa.", "liquidbounce.module.criticals.description": "Automaticamente da criticos nos inimigos.", "liquidbounce.module.hitbox.description": "Deixa a hitbox dos inimigos maior.", + "liquidbounce.module.autoTpa.description": "Aceita automaticamente pedidos de teleporte", "liquidbounce.module.killAura.description": "Automaticamente ataca inimigos.", "liquidbounce.module.superKnockback.description": "Da mais knock-back.", "liquidbounce.module.trigger.description": "Automaticamente ataca quando olha para alguem.", diff --git a/src/main/resources/resources/liquidbounce/lang/ru_ru.json b/src/main/resources/resources/liquidbounce/lang/ru_ru.json index 4b442528e59..6c68c11cf80 100644 --- a/src/main/resources/resources/liquidbounce/lang/ru_ru.json +++ b/src/main/resources/resources/liquidbounce/lang/ru_ru.json @@ -315,6 +315,7 @@ "liquidbounce.liquidchat.states.loggedIn": "Авторизовано!", "liquidbounce.liquidchat.writeMessage": "Отправлено сообщение: %s", "liquidbounce.liquidchat.writePrivateMessage": "Отправляет приватное сообщение: %s", + "liquidbounce.module.autoTpa.description": "Автоматически принимает запросы на телепортацию", "liquidbounce.module.wings.description": "Рендерит крылья сзади игрока", "liquidbounce.module.ESP.description": "Позволяет видеть цели через стены.", "liquidbounce.module.abortBreaking.description": "Позволяет прервать ломание, сохраняя прогресс.", diff --git a/src/main/resources/resources/liquidbounce/lang/tr_tr.json b/src/main/resources/resources/liquidbounce/lang/tr_tr.json index f63a405aed2..a60359c701f 100644 --- a/src/main/resources/resources/liquidbounce/lang/tr_tr.json +++ b/src/main/resources/resources/liquidbounce/lang/tr_tr.json @@ -261,6 +261,7 @@ "liquidbounce.module.packetLogger.messages.send": "Gönderiliyor", "liquidbounce.module.packetLogger.messages.receive": "Alınıyor", "liquidbounce.module.packetLogger.messages.canceled": "iptal edildi", + "liquidbounce.module.autoTpa.description": "Işınlanma isteklerini otomatik olarak kabul eder", "liquidbounce.module.ESP.description": "Hedefleri duvarların içinden görmenizi sağlar.", "liquidbounce.module.tntTimer.description": "Aktif TNT’leri öne çıkarır.", "liquidbounce.module.abortBreaking.description": "Blok kırmayı ilerlemenizi kaybetmeden iptal etmenizi sağlar.", diff --git a/src/main/resources/resources/liquidbounce/lang/ua_ua.json b/src/main/resources/resources/liquidbounce/lang/ua_ua.json index fc6fe839a4d..2fbea155f8b 100644 --- a/src/main/resources/resources/liquidbounce/lang/ua_ua.json +++ b/src/main/resources/resources/liquidbounce/lang/ua_ua.json @@ -164,6 +164,7 @@ "liquidbounce.command.username.result.username": "Нікнейм: %s", "liquidbounce.command.chat.description": "Відправити повідомлення в LiquidChat.", "liquidbounce.command.chat.parameter.message.description": "Повідомлення для відправки.", + "liquidbounce.module.autoTpa.description": "Автоматично приймає запити на телепортацію", "liquidbounce.module.wings.description": "Відображає крила позаду гравця.", "liquidbounce.module.aimbot.description": "Автоматично наводиться на вибрані сутності навколо вас.", "liquidbounce.module.autoArmor.description": "Автоматично одягає найкращу броню.", diff --git a/src/main/resources/resources/liquidbounce/lang/zh_cn.json b/src/main/resources/resources/liquidbounce/lang/zh_cn.json index 6a744b51c6b..cd7d0b50123 100644 --- a/src/main/resources/resources/liquidbounce/lang/zh_cn.json +++ b/src/main/resources/resources/liquidbounce/lang/zh_cn.json @@ -425,6 +425,7 @@ "liquidbounce.module.packetLogger.messages.receive": "接收", "liquidbounce.module.packetLogger.messages.canceled": "已取消", "liquidbounce.module.potionSpoof.description": "让你凭空获得药水效果。", + "liquidbounce.module.autoTpa.description": "自动接受传送请求", "liquidbounce.module.ESP.description": "允许你透过墙看到你选中的目标实体。", "liquidbounce.module.logoffSpot.description": "允许您看到已退出服务器或超出可视范围的玩家。", "liquidbounce.module.logoffSpot.messages.disappeared": "%s 消失于 X: %s, Y: %s, Z: %s.", diff --git a/src/main/resources/resources/liquidbounce/lang/zh_tw.json b/src/main/resources/resources/liquidbounce/lang/zh_tw.json index c0370055744..12a4939b606 100644 --- a/src/main/resources/resources/liquidbounce/lang/zh_tw.json +++ b/src/main/resources/resources/liquidbounce/lang/zh_tw.json @@ -424,6 +424,7 @@ "liquidbounce.module.packetLogger.messages.send": "發送", "liquidbounce.module.packetLogger.messages.receive": "接收", "liquidbounce.module.packetLogger.messages.canceled": "已取消", + "liquidbounce.module.autoTpa.description": "自動接受傳送請求", "liquidbounce.module.potionSpoof.description": "讓玩家在沒有實際藥水效果的情況下獲得藥水效果。", "liquidbounce.module.ESP.description": "允許你透過牆看到你選中的目標實體。", "liquidbounce.module.logoffSpot.description": "允許您看到已退出伺服器或超出可視範圍的玩家。",