- Версия(и) 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
}
}
}
}