Skip to content

Commit d0bbed6

Browse files
committed
修复当玩家死亡时, 会导致粒子遗留的BUG
1 parent df69746 commit d0bbed6

20 files changed

Lines changed: 190 additions & 70 deletions

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
package cn.coostack.cooparticlesapi.mixin;
22

3-
import cn.coostack.cooparticlesapi.CooParticleAPI;
43
import cn.coostack.cooparticlesapi.utils.ParticleAsyncRenderHelper;
5-
import com.google.common.collect.EvictingQueue;
64
import com.llamalad7.mixinextras.sugar.Local;
75
import net.minecraft.client.particle.Particle;
86
import net.minecraft.client.particle.ParticleManager;
97
import net.minecraft.client.particle.ParticleTextureSheet;
108
import net.minecraft.client.render.*;
119
import net.minecraft.client.texture.TextureManager;
12-
import org.spongepowered.asm.mixin.Final;
1310
import org.spongepowered.asm.mixin.Mixin;
14-
import org.spongepowered.asm.mixin.Shadow;
1511
import org.spongepowered.asm.mixin.injection.At;
16-
import org.spongepowered.asm.mixin.injection.ModifyVariable;
1712
import org.spongepowered.asm.mixin.injection.Redirect;
1813

19-
import java.util.List;
14+
import java.util.Collection;
2015
import java.util.Queue;
2116

2217
/**

src/main/java/cn/coostack/cooparticlesapi/mixin/plugin/CooParticleMixinLoaderPlugin.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ public String getRefMapperConfig() {
2323

2424
@Override
2525
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
26-
if (!mixinClassName.equals("cn.coostack.cooparticlesapi.mixin.ParticleManagerMixin")) {
27-
return true;
26+
if ("cn.coostack.cooparticlesapi.mixin.ParticleManagerMixin".equals(mixinClassName)) {
27+
return APIConfigManager.getConfig().getEnabledParticleCountInject();
2828
}
29-
return APIConfigManager.getConfig().getEnabledParticleCountInject();
29+
if ("cn.coostack.cooparticlesapi.mixin.ParticleManagerRenderMixin".equals(mixinClassName)) {
30+
return APIConfigManager.getConfig().getEnabledParticleAsync();
31+
}
32+
return true;
3033
}
3134

3235
@Override

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import cn.coostack.cooparticlesapi.test.entity.CooParticleEntities
3434
import cn.coostack.cooparticlesapi.test.entity.TestEntity
3535
import cn.coostack.cooparticlesapi.test.entity.TestPlayerEntity
3636
import com.ezylang.evalex.Expression
37+
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents
3738
import net.fabricmc.fabric.api.`object`.builder.v1.entity.FabricDefaultAttributeRegistry
3839

3940
object CooParticleAPI : ModInitializer {
@@ -105,6 +106,7 @@ object CooParticleAPI : ModInitializer {
105106
testEntity()
106107
}
107108

109+
108110
private fun testEntity() {
109111
CooParticleEntities.init()
110112
FabricDefaultAttributeRegistry.register(

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,17 @@ import cn.coostack.cooparticlesapi.test.particle.style.RotateTestStyle
3939
import cn.coostack.cooparticlesapi.test.particle.style.TestShapeUtilStyle
4040
import cn.coostack.cooparticlesapi.utils.ParticleAsyncRenderHelper
4141
import net.fabricmc.api.ClientModInitializer
42+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents
4243
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
4344
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientWorldEvents
4445
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents
4546
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
4647
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry
4748
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry
4849
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry
50+
import net.fabricmc.fabric.api.event.client.player.ClientPlayerBlockBreakEvents
51+
import net.minecraft.client.MinecraftClient
52+
import net.minecraft.client.network.ClientPlayerEntity
4953

5054
object CooParticleAPIClient : ClientModInitializer {
5155
/**
@@ -141,6 +145,7 @@ object CooParticleAPIClient : ClientModInitializer {
141145
ParticleStyleManager.clearAllVisible()
142146
ClientParticleGroupManager.clearAllVisible()
143147
}
148+
MinecraftClient.getInstance().player?.isDead
144149
}
145150

146151
private fun testEntity() {

src/main/kotlin/cn/coostack/cooparticlesapi/config/APIConfig.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ class APIConfig {
88
* (对其他插件进行兼容)
99
*/
1010
var enabledParticleCountInject = true
11+
var enabledParticleAsync = true
1112

1213
/**
1314
* 粒子数量上限
14-
* 原版上限为65536
15+
* 原版上限为16384
1516
*/
16-
var particleCountLimit = 65536
17+
var particleCountLimit = 65536 * 2
1718
get() = max(field, 1)
1819

1920
/**
2021
* Math3DUtil的 threadPool最大线程数
2122
*/
22-
var calculateThreadCount = 4
23+
var calculateThreadCount = 16
2324
get() = max(field, 1)
2425
}

src/main/kotlin/cn/coostack/cooparticlesapi/config/APIConfigManager.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,18 @@ import java.nio.file.Files
99
object APIConfigManager {
1010
private val gson = GsonBuilder().setPrettyPrinting().create()
1111
private val path = FabricLoader.getInstance().configDir.resolve("${CooParticleAPI.MOD_ID}.json")
12+
1213
@JvmStatic
1314
private var withConfig: APIConfig? = null
15+
1416
@JvmStatic
1517
fun getConfig(): APIConfig {
1618
return withConfig ?: let {
1719
loadConfig()
1820
withConfig!!
1921
}
2022
}
23+
2124
@JvmStatic
2225
fun loadConfig() {
2326
if (!Files.exists(path)) {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,6 @@ class TestParticleItem(settings: Settings) : Item(settings) {
8181
private fun testRomaCircle(world: World, user: PlayerEntity) {
8282
val style = RomaMagicTestStyle()
8383
ParticleStyleManager.spawnStyle(world as ServerWorld, user.pos, style)
84-
val motion = QuadraticStylePathMotion(style)
85-
PathMotionManager.applyMotion(motion)
8684
}
8785

8886
private fun testPresets(world: World, user: PlayerEntity) {

src/main/kotlin/cn/coostack/cooparticlesapi/network/particle/ServerParticleGroupManager.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import cn.coostack.cooparticlesapi.network.buffer.ParticleControlerDataBuffers
55
import cn.coostack.cooparticlesapi.network.packet.PacketParticleGroupS2C
66
import cn.coostack.cooparticlesapi.particles.control.ControlType
77
import cn.coostack.cooparticlesapi.network.packet.PacketParticleGroupS2C.PacketArgsType
8+
import cn.coostack.cooparticlesapi.network.particle.style.ParticleStyleManager
89
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
910
import net.minecraft.server.network.ServerPlayerEntity
1011
import net.minecraft.server.world.ServerWorld
@@ -91,6 +92,13 @@ object ServerParticleGroupManager {
9192
visibleSet!!.remove(value)
9293
return@forEach
9394
}
95+
if (p.isDead) {
96+
if (value in visibleSet) {
97+
removeGroupPlayerView(p, value)
98+
visibleSet!!.remove(value)
99+
}
100+
return@forEach
101+
}
94102
if (value.pos.distanceTo(p.pos) <= value.visibleRange) {
95103
// 防止重复添加(发包)
96104
if (value in visibleSet) {

src/main/kotlin/cn/coostack/cooparticlesapi/network/particle/emitters/ParticleEmittersManager.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,13 @@ object ParticleEmittersManager {
138138
}
139139
return@forEach
140140
}
141+
if (p.isDead) {
142+
if (emitters in visibleSet) {
143+
removeView(p, emitters)
144+
visibleSet!!.remove(emitters)
145+
}
146+
return@forEach
147+
}
141148
if (emitters in visibleSet) {
142149
return@forEach
143150
}

src/main/kotlin/cn/coostack/cooparticlesapi/network/particle/style/ParticleGroupStyle.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ abstract class ParticleGroupStyle(var visibleRange: Double = 32.0, val uuid: UUI
355355
if (len in -1e-3..1e-3) return@forEach
356356
value.multiply(len * scale / value.length())
357357
}
358+
toggleRelative()
358359
}
359360

360361
open fun preRotateTo(map: Map<StyleData, RelativeLocation>, to: RelativeLocation) {

0 commit comments

Comments
 (0)