Иконка ресурса

Бот для арифметической викторины в чате

Версия(и) Minecraft
1.7.10
Кусок мода, автоматически пишет в чат ответы на арифметическую викторину
Scala:
package hohserg.math

import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.common.gameevent.TickEvent
import javax.script.ScriptEngineManager
import net.minecraft.client.Minecraft
import net.minecraftforge.client.event.ClientChatReceivedEvent

/**
*    @author hohserg
*/

class ChatHandler {

  def getExpr(text: String): Option[String] = {
    Some(text)
      .filter(_.startsWith("[ChatGame] Задача: "))
      .filter(i => i.contains("+") || i.contains("*") || i.contains(" - "))
      .map(i => i.substring("[ChatGame] Задача: ".length, i.indexOf('.')))
  }

  def printToChat(result: Any): Unit =
    Minecraft.getMinecraft.thePlayer.sendChatMessage(result.toString)

  @SubscribeEvent
  def onChatMsg(e: ClientChatReceivedEvent): Unit = {
    println(e.message.getUnformattedText)
    getExpr(e.message.getUnformattedText)
      .map { expr =>
        val mgr = new ScriptEngineManager(null)
        val engine = mgr.getEngineByName("JavaScript")
        engine.eval(expr)
      }
      .foreach { r =>
        val rand = Minecraft.getMinecraft.theWorld.rand
        delay = rand.nextInt(2003) + 2501
        taskStart = System.currentTimeMillis()
        task = Some(() => printToChat(r))
      }
  }

  var taskStart: Long = 0
  var delay: Long = 0
  var task: Option[() => Unit] = None

  @SubscribeEvent
  def onTick(e: TickEvent.PlayerTickEvent): Unit = {
    val current = System.currentTimeMillis()
    task.foreach { t =>
      if (taskStart + delay <= current) {
        t()
        task = None
        taskStart = 0
        delay = 0
      }
    }
  }

}
  • Like
Реакции: System_X и Undercat
Автор
hohserg
Просмотры
2,480
Первый выпуск
Обновление
Оценка
4.50 звёзд 2 оценок

Другие ресурсы пользователя hohserg

Последние рецензии

Ну это таки не серьезно. Поднимать целый JS движок для нихрена. Требую Scala Parser Combinators раз уж в скалу полезли или Antlr.
hohserg
hohserg
Зачем?
не знаю зачем это надо и кто вообще в эти викторины играет, но на всякий случай поставлю 5)
hohserg
hohserg
Типо на некоторых серверах за правильные ответы дают внутриигровые плюшки. Этот кусок кода позволяет делать получать плюшки не прилагая усилий
Сверху