From 374a1f1bb7b884622824d804592b83bb7d4094bc Mon Sep 17 00:00:00 2001 From: Roman / Linnea Gräf Date: Thu, 8 Jun 2023 09:34:43 +0200 Subject: NEUConfig: Add manadatory IQ test to api tab (#703) --- .../notenoughupdates/miscfeatures/IQTest.kt | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/IQTest.kt (limited to 'src/main/kotlin/io') diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/IQTest.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/IQTest.kt new file mode 100644 index 00000000..157050b3 --- /dev/null +++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/IQTest.kt @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2023 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 + +import io.github.moulberry.notenoughupdates.NotEnoughUpdates +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorButton +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorFSR +import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorText +import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor.ProcessedOption +import io.github.moulberry.notenoughupdates.util.Calculator +import io.github.moulberry.notenoughupdates.util.Calculator.CalculatorException +import java.math.BigDecimal +import kotlin.random.Random + +object IQTest { + fun randOperator() = listOf("+", "*").random() + fun randNum() = Random.nextInt(1, 20) + val question = "${randNum()} ${randOperator()} ${randNum()} ${randOperator()} ${randNum()}" + + @JvmStatic + fun testIQ() { + val testedAnswer = try { + Calculator.calculate(answer) + } catch (e: CalculatorException) { + wrongAnswer() + return + } + val realAnswer = Calculator.calculate(question) + if (testedAnswer.subtract(realAnswer).abs() < BigDecimal.valueOf(0.1)) { + NotEnoughUpdates.INSTANCE.config.apiData.apiDataUnlocked = true + lastAnsweredTimestamp = 0L + } else { + wrongAnswer() + } + } + + private fun wrongAnswer() { + lastAnsweredTimestamp = System.currentTimeMillis() + } + + var lastAnsweredTimestamp = 0L + + @JvmField + @Suppress("UNUSED") + var buttonPlaceHolder = false + + @JvmField + var answer = "" + + val answerOption = ProcessedOption( + "IQ Test Question", + "Please type out the answer to §a$question", + -1, + javaClass.getField("answer"), + this, + arrayOf() + ).also { + it.editor = GuiOptionEditorText(it) + } + val warningOption = ProcessedOption( + "§4§lWARNING", + "§4§lThis page is dangerous. Please make sure you know what you are doing!", + -1, + javaClass.getField("buttonPlaceHolder"), + this, + arrayOf() + ).also { + it.editor = GuiOptionEditorButton(it, 27, "SUBMIT", NotEnoughUpdates.INSTANCE.config) + } + val wrongOption = ProcessedOption( + "§4Wrong Answer", + "§4Please think twice before accessing it.", + -1, + javaClass.getField("buttonPlaceHolder"), + this, + arrayOf() + ).also { + it.editor = GuiOptionEditorFSR(it, -1, "", NotEnoughUpdates.INSTANCE.config) + } + + + @get:JvmStatic + val options + get() = LinkedHashMap().also { + it["iqTestAnswer"] = answerOption + it["iqTestSubmit"] = warningOption + + if (System.currentTimeMillis() - lastAnsweredTimestamp < 10_000L) { + it["iqTestWrong"] = wrongOption + } + } +} -- cgit