Give player input classes better names

This commit is contained in:
DBotThePony 2023-01-29 14:23:17 +07:00
parent d49ec98d71
commit e505bce76d
Signed by: DBot
GPG Key ID: DCC23B5715498507
12 changed files with 47 additions and 39 deletions

View File

@ -3,12 +3,12 @@ package ru.dbotthepony.mc.otm.client.screen.panels.button
import net.minecraft.client.gui.screens.Screen import net.minecraft.client.gui.screens.Screen
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
open class CheckBoxInputPanel<out S : Screen> @JvmOverloads constructor( open class CheckBoxInputPanel<out S : Screen> @JvmOverloads constructor(
screen: S, screen: S,
parent: EditablePanel<*>?, parent: EditablePanel<*>?,
val widget: NetworkedBooleanInput, val widget: BooleanInputWithFeedback,
x: Float = 0f, x: Float = 0f,
y: Float = 0f, y: Float = 0f,
width: Float = REGULAR_DIMENSIONS + 120f, width: Float = REGULAR_DIMENSIONS + 120f,

View File

@ -4,12 +4,12 @@ import net.minecraft.client.gui.screens.Screen
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.client.screen.panels.Label import ru.dbotthepony.mc.otm.client.screen.panels.Label
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
open class CheckBoxLabelInputPanel<out S : Screen> @JvmOverloads constructor( open class CheckBoxLabelInputPanel<out S : Screen> @JvmOverloads constructor(
screen: S, screen: S,
parent: EditablePanel<*>?, parent: EditablePanel<*>?,
widget: NetworkedBooleanInput, widget: BooleanInputWithFeedback,
text: Component, text: Component,
x: Float = 0f, x: Float = 0f,
y: Float = 0f, y: Float = 0f,

View File

@ -2,13 +2,13 @@ package ru.dbotthepony.mc.otm.client.screen.panels.input
import net.minecraft.client.gui.screens.Screen import net.minecraft.client.gui.screens.Screen
import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.menu.input.AbstractNetworkedInput import ru.dbotthepony.mc.otm.menu.input.AbstractPlayerInputWithFeedback
import ru.dbotthepony.mc.otm.milliTime import ru.dbotthepony.mc.otm.milliTime
open class NetworkedStringInputPanel<out S : Screen>( open class NetworkedStringInputPanel<out S : Screen>(
screen: S, screen: S,
parent: EditablePanel<*>?, parent: EditablePanel<*>?,
val backend: AbstractNetworkedInput<String>, val backend: AbstractPlayerInputWithFeedback<String>,
x: Float = 0f, x: Float = 0f,
y: Float = 0f, y: Float = 0f,
width: Float = 60f, width: Float = 60f,

View File

@ -3,9 +3,8 @@ package ru.dbotthepony.mc.otm.menu.decorative
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.inventory.Slot import net.minecraft.world.inventory.Slot
import ru.dbotthepony.mc.otm.block.entity.decorative.HoloSignBlockEntity import ru.dbotthepony.mc.otm.block.entity.decorative.HoloSignBlockEntity
import ru.dbotthepony.mc.otm.client.screen.panels.input.TextInputPanel
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.input.NetworkedStringInput import ru.dbotthepony.mc.otm.menu.input.StringInputWithFeedback
import ru.dbotthepony.mc.otm.registry.MMenus import ru.dbotthepony.mc.otm.registry.MMenus
class HoloSignMenu @JvmOverloads constructor( class HoloSignMenu @JvmOverloads constructor(
@ -14,7 +13,7 @@ class HoloSignMenu @JvmOverloads constructor(
tile: HoloSignBlockEntity? = null tile: HoloSignBlockEntity? = null
) : MatteryMenu(MMenus.HOLO_SIGN, containerId, inventory, tile) { ) : MatteryMenu(MMenus.HOLO_SIGN, containerId, inventory, tile) {
val text = if (tile != null) val text = if (tile != null)
NetworkedStringInput(this).withConsumer { StringInputWithFeedback(this).withConsumer {
val lines = it.split(NEWLINES) val lines = it.split(NEWLINES)
val result = ArrayList<String>(lines.size.coerceAtMost(HoloSignBlockEntity.DEFAULT_MAX_NEWLINES)) val result = ArrayList<String>(lines.size.coerceAtMost(HoloSignBlockEntity.DEFAULT_MAX_NEWLINES))
@ -29,7 +28,7 @@ class HoloSignMenu @JvmOverloads constructor(
tile.text = result.joinToString("\n") tile.text = result.joinToString("\n")
}.withSupplier(tile::text) }.withSupplier(tile::text)
else else
NetworkedStringInput(this) StringInputWithFeedback(this)
override val storageSlots: Collection<Slot> override val storageSlots: Collection<Slot>
get() = listOf() get() = listOf()

View File

@ -9,7 +9,7 @@ import kotlin.reflect.KMutableProperty0
/** /**
* Getting and setting values should ONLY be done clientside * Getting and setting values should ONLY be done clientside
*/ */
abstract class AbstractNetworkedInput<V> : GetterSetter<V> { abstract class AbstractPlayerInputWithFeedback<V> : GetterSetter<V> {
abstract val input: MatteryMenu.PlayerInput<V> abstract val input: MatteryMenu.PlayerInput<V>
abstract val value: V abstract val value: V
@ -24,29 +24,29 @@ abstract class AbstractNetworkedInput<V> : GetterSetter<V> {
var supplier: (() -> V)? = null var supplier: (() -> V)? = null
var consumer: ((V) -> Unit)? = null var consumer: ((V) -> Unit)? = null
fun withSupplier(func: () -> V): AbstractNetworkedInput<V> { fun withSupplier(func: () -> V): AbstractPlayerInputWithFeedback<V> {
supplier = func supplier = func
return this return this
} }
fun withConsumer(func: (V) -> Unit): AbstractNetworkedInput<V> { fun withConsumer(func: (V) -> Unit): AbstractPlayerInputWithFeedback<V> {
consumer = func consumer = func
return this return this
} }
fun with(state: KMutableProperty0<V>): AbstractNetworkedInput<V> { fun with(state: KMutableProperty0<V>): AbstractPlayerInputWithFeedback<V> {
withConsumer { state.set(it) } withConsumer { state.set(it) }
withSupplier { state.get() } withSupplier { state.get() }
return this return this
} }
fun with(state: GetterSetter<V>): AbstractNetworkedInput<V> { fun with(state: GetterSetter<V>): AbstractPlayerInputWithFeedback<V> {
withConsumer(state::accept) withConsumer(state::accept)
withSupplier(state::get) withSupplier(state::get)
return this return this
} }
fun clear(): AbstractNetworkedInput<V> { fun clear(): AbstractPlayerInputWithFeedback<V> {
supplier = null supplier = null
consumer = null consumer = null
return this return this

View File

@ -1,10 +1,10 @@
package ru.dbotthepony.mc.otm.menu.input package ru.dbotthepony.mc.otm.menu.input
import net.minecraft.world.entity.player.Player import ru.dbotthepony.mc.otm.core.GetterSetter
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import kotlin.reflect.KMutableProperty0 import kotlin.reflect.KMutableProperty0
class NetworkedBooleanInput(menu: MatteryMenu) : AbstractNetworkedInput<Boolean>() { class BooleanInputWithFeedback(menu: MatteryMenu) : AbstractPlayerInputWithFeedback<Boolean>() {
override val input = menu.booleanInput { consumer?.invoke(it) } override val input = menu.booleanInput { consumer?.invoke(it) }
override val value by menu.mSynchronizer.bool(getter = { supplier?.invoke() ?: false }) override val value by menu.mSynchronizer.bool(getter = { supplier?.invoke() ?: false })
@ -12,6 +12,10 @@ class NetworkedBooleanInput(menu: MatteryMenu) : AbstractNetworkedInput<Boolean>
with(state) with(state)
} }
constructor(menu: MatteryMenu, state: GetterSetter<Boolean>) : this(menu) {
with(state)
}
fun switchValue() { fun switchValue() {
input(!value) input(!value)
} }

View File

@ -1,13 +1,18 @@
package ru.dbotthepony.mc.otm.menu.input package ru.dbotthepony.mc.otm.menu.input
import ru.dbotthepony.mc.otm.core.GetterSetter
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import kotlin.reflect.KMutableProperty0 import kotlin.reflect.KMutableProperty0
class NetworkedStringInput(menu: MatteryMenu) : AbstractNetworkedInput<String>() { class StringInputWithFeedback(menu: MatteryMenu) : AbstractPlayerInputWithFeedback<String>() {
override val input = menu.stringInput { consumer?.invoke(it.replace('\u0000', ' ')) } override val input = menu.stringInput { consumer?.invoke(it.replace('\u0000', ' ')) }
override val value by menu.mSynchronizer.string(getter = { supplier?.invoke() ?: "" }) override val value by menu.mSynchronizer.string(getter = { supplier?.invoke() ?: "" })
constructor(menu: MatteryMenu, state: KMutableProperty0<String>) : this(menu) { constructor(menu: MatteryMenu, state: KMutableProperty0<String>) : this(menu) {
with(state) with(state)
} }
constructor(menu: MatteryMenu, state: GetterSetter<String>) : this(menu) {
with(state)
}
} }

View File

@ -8,7 +8,7 @@ import ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.matter.canExtractMatter import ru.dbotthepony.mc.otm.capability.matter.canExtractMatter
import ru.dbotthepony.mc.otm.capability.matter.canReceiveMatter import ru.dbotthepony.mc.otm.capability.matter.canReceiveMatter
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import ru.dbotthepony.mc.otm.core.orNull import ru.dbotthepony.mc.otm.core.orNull
@ -23,7 +23,7 @@ class MatterBottlerMenu @JvmOverloads constructor(
) : MatteryPoweredMenu( ) : MatteryPoweredMenu(
MMenus.MATTER_BOTTLER, p_38852_, inventory, tile MMenus.MATTER_BOTTLER, p_38852_, inventory, tile
) { ) {
val workFlow: NetworkedBooleanInput val workFlow: BooleanInputWithFeedback
val progressWidget: ProgressGaugeWidget val progressWidget: ProgressGaugeWidget
val matterWidget: LevelGaugeWidget val matterWidget: LevelGaugeWidget
@ -36,11 +36,11 @@ class MatterBottlerMenu @JvmOverloads constructor(
if (tile == null) { if (tile == null) {
progressWidget = ProgressGaugeWidget(this) progressWidget = ProgressGaugeWidget(this)
matterWidget = LevelGaugeWidget(this) matterWidget = LevelGaugeWidget(this)
workFlow = NetworkedBooleanInput(this) workFlow = BooleanInputWithFeedback(this)
} else { } else {
progressWidget = ProgressGaugeWidget(this) { tile.getWorkProgress() } progressWidget = ProgressGaugeWidget(this) { tile.getWorkProgress() }
matterWidget = LevelGaugeWidget(this, tile.matter) matterWidget = LevelGaugeWidget(this, tile.matter)
workFlow = NetworkedBooleanInput(this, tile::isBottling) workFlow = BooleanInputWithFeedback(this, tile::isBottling)
} }
storageSlots = ImmutableList(6) { index -> storageSlots = ImmutableList(6) { index ->

View File

@ -17,7 +17,7 @@ import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatterySlot
import ru.dbotthepony.mc.otm.menu.data.INetworkedItemViewProvider import ru.dbotthepony.mc.otm.menu.data.INetworkedItemViewProvider
import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.registry.MMenus import ru.dbotthepony.mc.otm.registry.MMenus
import ru.dbotthepony.mc.otm.storage.ITEM_STORAGE import ru.dbotthepony.mc.otm.storage.ITEM_STORAGE
import ru.dbotthepony.mc.otm.storage.ItemStackWrapper import ru.dbotthepony.mc.otm.storage.ItemStackWrapper
@ -70,9 +70,9 @@ class DriveViewerMenu @JvmOverloads constructor(
val driveFilterSlots = addFilterSlots(driveFilter) val driveFilterSlots = addFilterSlots(driveFilter)
val isWhitelist = NetworkedBooleanInput(this) val isWhitelist = BooleanInputWithFeedback(this)
val matchTag = NetworkedBooleanInput(this) val matchTag = BooleanInputWithFeedback(this)
val matchNBT = NetworkedBooleanInput(this) val matchNBT = BooleanInputWithFeedback(this)
override fun broadcastChanges() { override fun broadcastChanges() {
super.broadcastChanges() super.broadcastChanges()

View File

@ -5,7 +5,7 @@ import net.minecraft.world.inventory.Slot
import ru.dbotthepony.mc.otm.block.entity.storage.StorageBusBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.StorageBusBlockEntity
import ru.dbotthepony.mc.otm.container.ItemFilterNetworkSlot import ru.dbotthepony.mc.otm.container.ItemFilterNetworkSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.registry.MMenus import ru.dbotthepony.mc.otm.registry.MMenus
class StorageBusMenu @JvmOverloads constructor( class StorageBusMenu @JvmOverloads constructor(
@ -16,15 +16,15 @@ class StorageBusMenu @JvmOverloads constructor(
MMenus.STORAGE_BUS, p_38852_, inventory, tile MMenus.STORAGE_BUS, p_38852_, inventory, tile
) { ) {
val busFilterSlots: List<ItemFilterNetworkSlot> val busFilterSlots: List<ItemFilterNetworkSlot>
val busFilterState: NetworkedBooleanInput val busFilterState: BooleanInputWithFeedback
init { init {
if (tile != null) { if (tile != null) {
busFilterSlots = addFilterSlots(tile.filter) busFilterSlots = addFilterSlots(tile.filter)
busFilterState = NetworkedBooleanInput(this, tile.filter::isWhitelist) busFilterState = BooleanInputWithFeedback(this, tile.filter::isWhitelist)
} else { } else {
busFilterSlots = addFilterSlots(StorageBusBlockEntity.MAX_FILTERS) busFilterSlots = addFilterSlots(StorageBusBlockEntity.MAX_FILTERS)
busFilterState = NetworkedBooleanInput(this) busFilterState = BooleanInputWithFeedback(this)
} }
addInventorySlots() addInventorySlots()

View File

@ -5,7 +5,7 @@ import net.minecraft.world.inventory.Slot
import ru.dbotthepony.mc.otm.block.entity.storage.StorageExporterBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.StorageExporterBlockEntity
import ru.dbotthepony.mc.otm.container.ItemFilterNetworkSlot import ru.dbotthepony.mc.otm.container.ItemFilterNetworkSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.registry.MMenus import ru.dbotthepony.mc.otm.registry.MMenus
class StorageExporterMenu @JvmOverloads constructor( class StorageExporterMenu @JvmOverloads constructor(
@ -16,15 +16,15 @@ class StorageExporterMenu @JvmOverloads constructor(
MMenus.STORAGE_EXPORTER, p_38852_, inventory, tile MMenus.STORAGE_EXPORTER, p_38852_, inventory, tile
) { ) {
val busFilterSlots: List<ItemFilterNetworkSlot> val busFilterSlots: List<ItemFilterNetworkSlot>
val busFilterState: NetworkedBooleanInput val busFilterState: BooleanInputWithFeedback
init { init {
if (tile != null) { if (tile != null) {
busFilterSlots = addFilterSlots(tile.filter) busFilterSlots = addFilterSlots(tile.filter)
busFilterState = NetworkedBooleanInput(this, tile.filter::isWhitelist) busFilterState = BooleanInputWithFeedback(this, tile.filter::isWhitelist)
} else { } else {
busFilterSlots = addFilterSlots(StorageExporterBlockEntity.MAX_FILTERS) busFilterSlots = addFilterSlots(StorageExporterBlockEntity.MAX_FILTERS)
busFilterState = NetworkedBooleanInput(this) busFilterState = BooleanInputWithFeedback(this)
} }
addInventorySlots() addInventorySlots()

View File

@ -5,7 +5,7 @@ import net.minecraft.world.inventory.Slot
import ru.dbotthepony.mc.otm.block.entity.storage.StorageImporterBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.StorageImporterBlockEntity
import ru.dbotthepony.mc.otm.container.ItemFilterNetworkSlot import ru.dbotthepony.mc.otm.container.ItemFilterNetworkSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.input.NetworkedBooleanInput import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.registry.MMenus import ru.dbotthepony.mc.otm.registry.MMenus
class StorageImporterMenu @JvmOverloads constructor( class StorageImporterMenu @JvmOverloads constructor(
@ -16,15 +16,15 @@ class StorageImporterMenu @JvmOverloads constructor(
MMenus.STORAGE_IMPORTER, p_38852_, inventory, tile MMenus.STORAGE_IMPORTER, p_38852_, inventory, tile
) { ) {
val busFilterSlots: List<ItemFilterNetworkSlot> val busFilterSlots: List<ItemFilterNetworkSlot>
val busFilterState: NetworkedBooleanInput val busFilterState: BooleanInputWithFeedback
init { init {
if (tile != null) { if (tile != null) {
busFilterSlots = addFilterSlots(tile.filter) busFilterSlots = addFilterSlots(tile.filter)
busFilterState = NetworkedBooleanInput(this, tile.filter::isWhitelist) busFilterState = BooleanInputWithFeedback(this, tile.filter::isWhitelist)
} else { } else {
busFilterSlots = addFilterSlots(StorageImporterBlockEntity.MAX_FILTERS) busFilterSlots = addFilterSlots(StorageImporterBlockEntity.MAX_FILTERS)
busFilterState = NetworkedBooleanInput(this) busFilterState = BooleanInputWithFeedback(this)
} }
addInventorySlots() addInventorySlots()