Skip to content

Commit 0cdffd9

Browse files
committed
新增在客户端内的调度器
修复服务器抖动在客户端不生效的BUG 现在scheduler分为服务器和客户端 CooParticlesAPI内的为服务器调度器 CooParticlesAPIClient内的为客户端调度器 为了保证能够正确执行, 请在服务器环境执行服务器调度器, 在客户端环境执行客户端调度器
1 parent 526b80e commit 0cdffd9

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

src/main/java/cn/coostack/cooparticlesapi/mixin/CooParticleCameraMixin.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ public abstract class CooParticleCameraMixin {
1616

1717
@Shadow
1818
private float pitch;
19-
20-
2119
@Shadow
2220
protected abstract void setRotation(float yaw, float pitch);
2321

src/main/kotlin/cn/coostack/cooparticlesapi/CooParticleAPI.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ object CooParticleAPI : ModInitializer {
4242
const val MOD_ID = "cooparticlesapi"
4343
lateinit var server: MinecraftServer
4444

45+
/**
46+
* 只会在服务器运行的调度器
47+
* 请不要执行客户端操作
48+
*/
4549
@JvmField
4650
val scheduler = CooScheduler()
4751

src/main/kotlin/cn/coostack/cooparticlesapi/CooParticleAPIClient.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import cn.coostack.cooparticlesapi.particles.impl.ControlableEnchantmentParticle
1919
import cn.coostack.cooparticlesapi.particles.impl.ControlableFireworkParticle
2020
import cn.coostack.cooparticlesapi.particles.impl.ControlableFlashParticle
2121
import cn.coostack.cooparticlesapi.particles.impl.TestEndRodParticle
22+
import cn.coostack.cooparticlesapi.scheduler.CooScheduler
2223
import cn.coostack.cooparticlesapi.test.entity.CooParticleEntities
2324
import cn.coostack.cooparticlesapi.test.entity.CooParticlesEntityLayers
2425
import cn.coostack.cooparticlesapi.test.entity.TestEntity
@@ -45,7 +46,11 @@ import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry
4546
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry
4647

4748
object CooParticleAPIClient : ClientModInitializer {
48-
49+
/**
50+
* 只会在客户端运行的调度器, 请不要在这里执行服务器操作
51+
*/
52+
@JvmField
53+
val scheduler = CooScheduler()
4954
override fun onInitializeClient() {
5055
loadParticleGroupPacketListener()
5156
registerClientEvents()
@@ -81,7 +86,6 @@ object CooParticleAPIClient : ClientModInitializer {
8186
ClientParticleGroupManager.register(
8287
SequencedMagicCircleClient::class.java, SequencedMagicCircleClient.Provider()
8388
)
84-
8589
ParticleStyleManager.register(ExampleStyle::class.java, ExampleStyle.Provider())
8690
ParticleStyleManager.register(ExampleSequencedStyle::class.java, ExampleSequencedStyle.Provider())
8791
ParticleStyleManager.register(RomaMagicTestStyle::class.java, RomaMagicTestStyle.Provider())
@@ -123,6 +127,7 @@ object CooParticleAPIClient : ClientModInitializer {
123127
ClientParticleGroupManager.clearAllVisible()
124128
}
125129
ClientTickEvents.START_WORLD_TICK.register {
130+
scheduler.doTick()
126131
ClientParticleGroupManager.doClientTick()
127132
ParticleStyleManager.doTickClient()
128133
ParticleEmittersManager.doTickClient()

src/main/kotlin/cn/coostack/cooparticlesapi/items/TestParticleItem.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import cn.coostack.cooparticlesapi.test.particle.emitter.event.TestOnLiquidEvent
2323
import cn.coostack.cooparticlesapi.test.particle.style.RomaMagicTestStyle
2424
import cn.coostack.cooparticlesapi.test.particle.style.RotateTestStyle
2525
import cn.coostack.cooparticlesapi.utils.Math3DUtil
26+
import cn.coostack.cooparticlesapi.utils.ServerCameraUtil
2627
import net.minecraft.client.particle.ParticleTextureSheet
2728
import net.minecraft.entity.player.PlayerEntity
2829
import net.minecraft.item.Item
@@ -38,13 +39,19 @@ class TestParticleItem(settings: Settings) : Item(settings) {
3839
if (world.isClient) {
3940
return TypedActionResult.success(user.getStackInHand(hand))
4041
}
41-
testEvents(world, user)
42+
// testEvents(world, user)
43+
testShake(world, user)
4244
// CameraUtil.startShakeCamera(240, 0.25)
4345
// testRomaCircle(world, user)
4446
// 线性阻力
4547
return super.use(world, user, hand)
4648
}
4749

50+
private fun testShake(world: World, user: PlayerEntity) {
51+
if (world.isClient) return
52+
ServerCameraUtil.sendShake(world as ServerWorld, user.pos, 128.0, 0.5, 10)
53+
}
54+
4855
private fun testEvents(world: World, user: PlayerEntity) {
4956
val test = TestEventEmitter(user.eyePos, world)
5057
.apply {

src/main/kotlin/cn/coostack/cooparticlesapi/utils/ClientCameraUtil.kt

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

33
import cn.coostack.cooparticlesapi.CooParticleAPI
4+
import cn.coostack.cooparticlesapi.CooParticleAPIClient
45
import net.fabricmc.api.EnvType
56
import net.fabricmc.api.Environment
67
import kotlin.random.Random
@@ -22,7 +23,7 @@ object ClientCameraUtil {
2223
var currentAmplitude = amplitude
2324
val decreaseStep = amplitude / tick
2425
val random = Random(System.currentTimeMillis())
25-
CooParticleAPI.scheduler.runTaskTimerMaxTick(tick) {
26+
CooParticleAPIClient.scheduler.runTaskTimerMaxTick(tick) {
2627
currentXOffset = currentAmplitude * random.nextDouble(-0.5, 0.5)
2728
currentYOffset = currentAmplitude * random.nextDouble(-0.5, 0.5)
2829
currentZOffset = currentAmplitude * random.nextDouble(-0.5, 0.5)

0 commit comments

Comments
 (0)