Skip to content

Commit d8e0efd

Browse files
committed
修改按键 binding
修复通过 CooKeyBinding注册的按键再重启后恢复按键到默认值的问题
1 parent 0633e64 commit d8e0efd

39 files changed

Lines changed: 156 additions & 79 deletions

common/src/main/kotlin/cn/coostack/cooparticlesapi/CooParticlesAPI.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package cn.coostack.cooparticlesapi
22

33
import cn.coostack.cooparticlesapi.animation.AnimateManager
44
import cn.coostack.cooparticlesapi.barrages.BarrageManager
5-
import cn.coostack.cooparticlesapi.client.KeyBindingManager
65
import cn.coostack.cooparticlesapi.display.DisplayEntityManager
76
import cn.coostack.cooparticlesapi.event.CooEventBus
87
import cn.coostack.cooparticlesapi.reflect.CooAPIScanner

common/src/main/kotlin/cn/coostack/cooparticlesapi/display/DisplayEntityManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import cn.coostack.cooparticlesapi.CooParticlesAPI
44
import cn.coostack.cooparticlesapi.CooParticlesConstants
55
import cn.coostack.cooparticlesapi.annotations.CooAutoRegister
66
import cn.coostack.cooparticlesapi.extend.plus
7-
import cn.coostack.cooparticlesapi.network.packet.PacketDisplayEntityS2C
7+
import cn.coostack.cooparticlesapi.network.packet.server.PacketDisplayEntityS2C
88
import cn.coostack.cooparticlesapi.platform.CooParticlesServices
99
import cn.coostack.cooparticlesapi.reflect.CooAPIScanner
1010
import cn.coostack.cooparticlesapi.utils.MinecraftRendererUtil

common/src/main/kotlin/cn/coostack/cooparticlesapi/client/KeyBindingManager.kt renamed to common/src/main/kotlin/cn/coostack/cooparticlesapi/key/CooKeyBindingManager.kt

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
package cn.coostack.cooparticlesapi.client
1+
package cn.coostack.cooparticlesapi.key
22

33
import cn.coostack.cooparticlesapi.event.CooEventBus
44
import cn.coostack.cooparticlesapi.event.events.key.KeyActionEvent
55
import cn.coostack.cooparticlesapi.event.events.key.KeyActionType
6-
import cn.coostack.cooparticlesapi.network.packet.PacketKeyActionC2S
6+
import cn.coostack.cooparticlesapi.network.packet.client.PacketKeyActionC2S
7+
import cn.coostack.cooparticlesapi.network.packet.server.PacketKeyBindingCountdownS2C
78
import cn.coostack.cooparticlesapi.platform.CooParticlesServices
89
import com.mojang.blaze3d.platform.InputConstants
910
import net.minecraft.client.KeyMapping
1011
import net.minecraft.client.Minecraft
1112
import net.minecraft.resources.ResourceLocation
13+
import net.minecraft.server.level.ServerPlayer
1214

1315
/**
1416
* keyName 默认使用 keyId
@@ -24,7 +26,7 @@ import net.minecraft.resources.ResourceLocation
2426
* )
2527
* ```
2628
*/
27-
object KeyBindingManager {
29+
object CooKeyBindingManager {
2830
private data class KeyState(
2931
val id: ResourceLocation,
3032
val mapping: KeyMapping,
@@ -38,6 +40,8 @@ object KeyBindingManager {
3840
private var registrar: ((KeyMapping) -> Unit)? = null
3941
private var tickCounter = 0L
4042

43+
// 服务器调用或者客户端调用, 设置countdown (在这期间不处理这个按键功能)
44+
private val keyCountDowns = mutableMapOf<ResourceLocation, Int>()
4145
var doubleClickWindowTicks = 6
4246

4347
fun setRegistrar(registerer: (KeyMapping) -> Unit) {
@@ -52,7 +56,7 @@ object KeyBindingManager {
5256
category: String
5357
): KeyMapping {
5458
require(keyId !in keyStates) { "key id already registered: $keyId" }
55-
val mapping = KeyMapping(keyId.toString(), keyType, defaultKey, category)
59+
val mapping = KeyMapping("key.${keyId.namespace}.${keyId.path}", keyType, defaultKey, category)
5660
val state = KeyState(keyId, mapping)
5761
keyStates[keyId] = state
5862
registerIfPossible(state)
@@ -63,12 +67,34 @@ object KeyBindingManager {
6367
return keyStates[keyId]?.mapping
6468
}
6569

70+
fun setCountdown(key: ResourceLocation, cd: Int) {
71+
keyCountDowns[key] = cd
72+
}
73+
74+
75+
fun sendCountdown(to: ServerPlayer, key: ResourceLocation, cd: Int) {
76+
val packet = PacketKeyBindingCountdownS2C(key, cd)
77+
CooParticlesServices.SERVER_NETWORK.send(packet, to)
78+
}
79+
6680
fun tick() {
6781
if (keyStates.isEmpty()) return
6882
tickCounter++
6983
val doubleInterval = doubleClickWindowTicks.coerceAtLeast(0).toLong()
7084
val states = keyStates.values.toList()
7185
states.forEach { state ->
86+
if (keyCountDowns.containsKey(state.id)) {
87+
val current = keyCountDowns[state.id]!!
88+
if (current > 0) {
89+
keyCountDowns[state.id] = current - 1
90+
state.wasDown = false
91+
state.pressTick = 0
92+
state.lastClickTick = tickCounter
93+
return@forEach
94+
} else {
95+
keyCountDowns.remove(state.id)
96+
}
97+
}
7298
val down = state.mapping.isDown
7399
if (down) {
74100
if (!state.wasDown) {
@@ -112,4 +138,4 @@ object KeyBindingManager {
112138
)
113139
CooParticlesServices.CLIENT_NETWORK.send(PacketKeyActionC2S(keyId, action, pressTick, isRelease))
114140
}
115-
}
141+
}

common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/PacketKeyActionC2S.kt renamed to common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/client/PacketKeyActionC2S.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cn.coostack.cooparticlesapi.network.packet
1+
package cn.coostack.cooparticlesapi.network.packet.client
22

33
import cn.coostack.cooparticlesapi.CooParticlesConstants
44
import cn.coostack.cooparticlesapi.event.events.key.KeyActionType
@@ -31,7 +31,7 @@ class PacketKeyActionC2S(
3131
buf.writeBoolean(packet.isRelease)
3232
}, { buf ->
3333
val keyId = buf.readResourceLocation()
34-
val action = KeyActionType.fromId(buf.readInt())
34+
val action = KeyActionType.Companion.fromId(buf.readInt())
3535
val pressTick = buf.readInt()
3636
val isRelease = buf.readBoolean()
3737
PacketKeyActionC2S(keyId, action, pressTick, isRelease)
@@ -41,4 +41,4 @@ class PacketKeyActionC2S(
4141
override fun type(): CustomPacketPayload.Type<out CustomPacketPayload> {
4242
return payloadID
4343
}
44-
}
44+
}

common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package cn.coostack.cooparticlesapi.network.packet.client.listener
22

3-
import cn.coostack.cooparticlesapi.network.packet.PacketCameraShakeS2C
3+
import cn.coostack.cooparticlesapi.network.packet.server.PacketCameraShakeS2C
44
import cn.coostack.cooparticlesapi.platform.network.ClientContext
55
import cn.coostack.cooparticlesapi.utils.ClientCameraUtil
66
object ClientCameraShakeHandler {

common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ package cn.coostack.cooparticlesapi.network.packet.client.listener
22

33
import cn.coostack.cooparticlesapi.display.DisplayEntity
44
import cn.coostack.cooparticlesapi.display.DisplayEntityManager
5-
import cn.coostack.cooparticlesapi.network.packet.PacketDisplayEntityS2C
6-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleEmittersS2C
5+
import cn.coostack.cooparticlesapi.network.packet.server.PacketDisplayEntityS2C
76
import cn.coostack.cooparticlesapi.platform.network.ClientContext
87
import io.netty.buffer.Unpooled
98
import net.minecraft.client.Minecraft
10-
import net.minecraft.network.FriendlyByteBuf
119
import net.minecraft.network.RegistryFriendlyByteBuf
1210

1311
object ClientDisplayEntityPacketHandler {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cn.coostack.cooparticlesapi.network.packet.client.listener
2+
3+
import cn.coostack.cooparticlesapi.key.CooKeyBindingManager
4+
import cn.coostack.cooparticlesapi.network.packet.server.PacketKeyBindingCountdownS2C
5+
import cn.coostack.cooparticlesapi.platform.network.ClientContext
6+
7+
object ClientKeyBindingCountdownHandler {
8+
fun receive(
9+
payload: PacketKeyBindingCountdownS2C,
10+
context: ClientContext
11+
) {
12+
CooKeyBindingManager.setCountdown(payload.key, payload.cd)
13+
}
14+
15+
}

common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package cn.coostack.cooparticlesapi.network.packet.client.listener
22

3-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleCompositionS2C
3+
import cn.coostack.cooparticlesapi.network.packet.server.PacketParticleCompositionS2C
44
import cn.coostack.cooparticlesapi.network.particle.composition.ParticleComposition
55
import cn.coostack.cooparticlesapi.network.particle.composition.manager.ParticleCompositionManager
66
import cn.coostack.cooparticlesapi.platform.network.ClientContext

common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cn.coostack.cooparticlesapi.network.packet.client.listener
22

3-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleEmittersS2C
4-
import cn.coostack.cooparticlesapi.network.particle.emitters.ParticleEmitters
3+
import cn.coostack.cooparticlesapi.network.packet.server.PacketParticleEmittersS2C
54
import cn.coostack.cooparticlesapi.network.particle.emitters.ParticleEmittersManager
65
import cn.coostack.cooparticlesapi.platform.network.ClientContext
76
import io.netty.buffer.Unpooled

common/src/main/kotlin/cn/coostack/cooparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cn.coostack.cooparticlesapi.network.packet.client.listener
22

33
import cn.coostack.cooparticlesapi.network.buffer.ParticleControlerDataBuffer
4-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleGroupS2C
4+
import cn.coostack.cooparticlesapi.network.packet.server.PacketParticleGroupS2C
55
import cn.coostack.cooparticlesapi.particles.control.ControlType
66
import cn.coostack.cooparticlesapi.particles.control.group.ClientParticleGroupManager
77
import cn.coostack.cooparticlesapi.particles.control.group.ControlableParticleGroup

0 commit comments

Comments
 (0)