From 4c78e4e6c61b326f1e1b669c577c66c12bcf8974 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 29 Jan 2023 00:02:41 +0700 Subject: [PATCH] Trick JVM into not validating hierarchy tree --- .../otm/menu/input/AbstractNetworkedInput.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractNetworkedInput.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractNetworkedInput.kt index 377828510..6ad53fa17 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractNetworkedInput.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractNetworkedInput.kt @@ -1,14 +1,26 @@ package ru.dbotthepony.mc.otm.menu.input +import net.minecraft.world.entity.player.Player import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.core.GetterSetter import ru.dbotthepony.mc.otm.menu.MatteryMenu import kotlin.reflect.KMutableProperty0 -abstract class AbstractNetworkedInput { +/** + * Getting and setting values should ONLY be done clientside + */ +abstract class AbstractNetworkedInput : GetterSetter { abstract val input: MatteryMenu.PlayerInput abstract val value: V + override fun get(): V { + return value + } + + override fun accept(t: V) { + input.checkedInput(t, minecraft.player as Player?) + } + var supplier: (() -> V)? = null var consumer: ((V) -> Unit)? = null @@ -44,13 +56,13 @@ abstract class AbstractNetworkedInput { * shortcut to checked input of [input] */ fun input(newValue: V) { - input.checkedInput(newValue, minecraft.player) + input.checkedInput(newValue, minecraft.player as Player?) } /** * checks if local (client) player can modify this input */ fun check(): Boolean { - return input.allowSpectators || minecraft.player?.isSpectator == false + return input.allowSpectators || (minecraft.player as Player?)?.isSpectator == false } }