Use menu inputs for inventory/exopack slot filter changes
This commit is contained in:
parent
092daf80d8
commit
651febed96
@ -50,10 +50,8 @@ import ru.dbotthepony.mc.otm.core.util.NullValueCodec
|
|||||||
import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec
|
import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec
|
||||||
import ru.dbotthepony.mc.otm.menu.input.InstantBooleanInput
|
import ru.dbotthepony.mc.otm.menu.input.InstantBooleanInput
|
||||||
import ru.dbotthepony.mc.otm.network.MatteryPacket
|
import ru.dbotthepony.mc.otm.network.MatteryPacket
|
||||||
import ru.dbotthepony.mc.otm.network.MatteryPlayerNetworkChannel
|
|
||||||
import ru.dbotthepony.mc.otm.network.MenuFieldPacket
|
import ru.dbotthepony.mc.otm.network.MenuFieldPacket
|
||||||
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel
|
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel
|
||||||
import ru.dbotthepony.mc.otm.network.SetInventoryFilterPacket
|
|
||||||
import ru.dbotthepony.mc.otm.network.enqueueWork
|
import ru.dbotthepony.mc.otm.network.enqueueWork
|
||||||
import ru.dbotthepony.mc.otm.network.packetHandled
|
import ru.dbotthepony.mc.otm.network.packetHandled
|
||||||
import ru.dbotthepony.mc.otm.network.sender
|
import ru.dbotthepony.mc.otm.network.sender
|
||||||
@ -179,6 +177,8 @@ abstract class MatteryMenu @JvmOverloads protected constructor(
|
|||||||
|
|
||||||
fun bigDecimalInput(allowSpectators: Boolean = false, handler: (BigDecimal) -> Unit) = PlayerInput(BigDecimalValueCodec, allowSpectators, handler)
|
fun bigDecimalInput(allowSpectators: Boolean = false, handler: (BigDecimal) -> Unit) = PlayerInput(BigDecimalValueCodec, allowSpectators, handler)
|
||||||
fun booleanInput(allowSpectators: Boolean = false, handler: (Boolean) -> Unit) = PlayerInput(BooleanValueCodec, allowSpectators, handler)
|
fun booleanInput(allowSpectators: Boolean = false, handler: (Boolean) -> Unit) = PlayerInput(BooleanValueCodec, allowSpectators, handler)
|
||||||
|
fun itemInput(allowSpectators: Boolean = false, handler: (Item) -> Unit) = PlayerInput(ItemValueCodec, allowSpectators, handler)
|
||||||
|
fun nullableItemInput(allowSpectators: Boolean = false, handler: (Item?) -> Unit) = PlayerInput(ItemValueCodec.nullable, allowSpectators, handler)
|
||||||
fun stringInput(allowSpectators: Boolean = false, handler: (String) -> Unit) = PlayerInput(BinaryStringCodec, allowSpectators, handler)
|
fun stringInput(allowSpectators: Boolean = false, handler: (String) -> Unit) = PlayerInput(BinaryStringCodec, allowSpectators, handler)
|
||||||
fun intInput(allowSpectators: Boolean = false, handler: (Int) -> Unit) = PlayerInput(VarIntValueCodec, allowSpectators, handler)
|
fun intInput(allowSpectators: Boolean = false, handler: (Int) -> Unit) = PlayerInput(VarIntValueCodec, allowSpectators, handler)
|
||||||
|
|
||||||
@ -270,11 +270,12 @@ abstract class MatteryMenu @JvmOverloads protected constructor(
|
|||||||
|
|
||||||
if (mattery != null) {
|
if (mattery != null) {
|
||||||
if (container === inventory) {
|
if (container === inventory) {
|
||||||
if (slotIndex in mattery.regularSlotFilters.indices)
|
if (slotIndex in mattery.regularSlotFilters.indices) {
|
||||||
filter = GetterSetter.of(
|
filter = GetterSetter.of(
|
||||||
getter = { mattery.regularSlotFilters[slotIndex].value },
|
getter = { mattery.regularSlotFilters[slotIndex].value },
|
||||||
setter = { MatteryPlayerNetworkChannel.sendToServer(SetInventoryFilterPacket(SetInventoryFilterPacket.Type.INVENTORY, slotIndex, it)) }
|
setter = nullableItemInput(true) { mattery.regularSlotFilters[slotIndex].value = it }::input
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if (slotIndex in mattery.regularSlotChargeFlag.indices) {
|
if (slotIndex in mattery.regularSlotChargeFlag.indices) {
|
||||||
val input = booleanInput(true) { mattery.regularSlotChargeFlag[slotIndex].boolean = it }
|
val input = booleanInput(true) { mattery.regularSlotChargeFlag[slotIndex].boolean = it }
|
||||||
@ -287,7 +288,7 @@ abstract class MatteryMenu @JvmOverloads protected constructor(
|
|||||||
} else if (container === mattery.exoPackContainer) {
|
} else if (container === mattery.exoPackContainer) {
|
||||||
filter = GetterSetter.of(
|
filter = GetterSetter.of(
|
||||||
getter = { mattery.exoPackContainer.getSlotFilter(slotIndex) },
|
getter = { mattery.exoPackContainer.getSlotFilter(slotIndex) },
|
||||||
setter = { MatteryPlayerNetworkChannel.sendToServer(SetInventoryFilterPacket(SetInventoryFilterPacket.Type.EXOPACK, slotIndex, it)) }
|
setter = nullableItemInput(true) { mattery.exoPackContainer.setSlotFilter(slotIndex, it) }::input
|
||||||
)
|
)
|
||||||
|
|
||||||
val input = booleanInput(true) { if (it) mattery.exoPackSlotsChargeFlag.add(slotIndex) else mattery.exoPackSlotsChargeFlag.remove(slotIndex) }
|
val input = booleanInput(true) { if (it) mattery.exoPackSlotsChargeFlag.add(slotIndex) else mattery.exoPackSlotsChargeFlag.remove(slotIndex) }
|
||||||
|
@ -561,52 +561,8 @@ data class SetExopackColorPacket(val color: RGBAColor) : MatteryPacket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SetInventoryFilterPacket(val type: Type, val slot: Int, val item: Item?) : MatteryPacket {
|
|
||||||
enum class Type {
|
|
||||||
INVENTORY,
|
|
||||||
EXOPACK
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun write(buff: FriendlyByteBuf) {
|
|
||||||
buff.writeEnum(type)
|
|
||||||
buff.writeVarInt(slot)
|
|
||||||
|
|
||||||
if (item == null) {
|
|
||||||
buff.writeByte(0)
|
|
||||||
} else {
|
|
||||||
buff.writeByte(1)
|
|
||||||
buff.writeItemType(item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun play(context: Supplier<NetworkEvent.Context>) {
|
|
||||||
context.packetHandled = true
|
|
||||||
val player = context.sender?.matteryPlayer ?: return
|
|
||||||
|
|
||||||
when (type) {
|
|
||||||
Type.INVENTORY -> {
|
|
||||||
if (slot in 0 until player.regularSlotFilters.size) {
|
|
||||||
player.regularSlotFilters[slot].value = item
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Type.EXOPACK -> {
|
|
||||||
if (slot in 0 until player.exoPackContainer.containerSize) {
|
|
||||||
player.exoPackContainer.setSlotFilter(slot, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun read(buff: FriendlyByteBuf): SetInventoryFilterPacket {
|
|
||||||
return SetInventoryFilterPacket(buff.readEnum(Type::class.java), buff.readVarInt(), if (buff.readByte() > 0) buff.readItemType() else null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
object MatteryPlayerNetworkChannel : MatteryNetworkChannel(
|
object MatteryPlayerNetworkChannel : MatteryNetworkChannel(
|
||||||
version = "4",
|
version = "5",
|
||||||
name = "player"
|
name = "player"
|
||||||
) {
|
) {
|
||||||
fun register() {
|
fun register() {
|
||||||
@ -643,7 +599,5 @@ object MatteryPlayerNetworkChannel : MatteryNetworkChannel(
|
|||||||
add(DisableExopackGlowPacket::class, { DisableExopackGlowPacket }, PLAY_TO_SERVER)
|
add(DisableExopackGlowPacket::class, { DisableExopackGlowPacket }, PLAY_TO_SERVER)
|
||||||
add(ResetExopackColorPacket::class, { ResetExopackColorPacket }, PLAY_TO_SERVER)
|
add(ResetExopackColorPacket::class, { ResetExopackColorPacket }, PLAY_TO_SERVER)
|
||||||
add(SetExopackColorPacket::class, SetExopackColorPacket.Companion::read, PLAY_TO_SERVER)
|
add(SetExopackColorPacket::class, SetExopackColorPacket.Companion::read, PLAY_TO_SERVER)
|
||||||
|
|
||||||
add(SetInventoryFilterPacket::class, SetInventoryFilterPacket.Companion::read, PLAY_TO_SERVER)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user