Skip to content

Commit 8c9857d

Browse files
authored
Merge pull request #2 from Harveykang/1.9/fixes
修复 ControlParticleManager 的内存泄漏问题,以及一处兼容性修改
2 parents 0d06481 + e2344ce commit 8c9857d

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import net.minecraft.client.particle.ParticleManager;
88
import net.minecraft.client.particle.ParticleTextureSheet;
99
import org.spongepowered.asm.mixin.Mixin;
10-
import org.spongepowered.asm.mixin.gen.Accessor;
10+
import org.spongepowered.asm.mixin.Shadow;
1111
import org.spongepowered.asm.mixin.injection.At;
1212
import org.spongepowered.asm.mixin.injection.Redirect;
1313

@@ -16,22 +16,21 @@
1616

1717
@Mixin(ParticleManager.class)
1818
public abstract class ParticleManagerMixin {
19-
@Accessor("newParticles")
20-
public abstract Queue<Particle> getNewParticles();
19+
@Shadow
20+
private Map<ParticleTextureSheet, Queue<Particle>> particles;
2121

22-
@Accessor("particles")
23-
public abstract Map<ParticleTextureSheet, Queue<Particle>> getParticles();
22+
@Shadow
23+
private Queue<Particle> newParticles;
2424

2525
@Redirect(method = "tick", at = @At(value = "INVOKE", target = "Ljava/util/Queue;poll()Ljava/lang/Object;"))
2626
public Object changeMaxParticles(Queue<Object> queue) {
2727
// 不需要判断 EnabledParticleCountInject 了,已在注入时判断,关这个一般都是因为会注入失败,所以不用担心
2828
Particle particle;
2929
int limit = APIConfigManager.getConfig().getParticleCountLimit();
30-
while ((particle = this.getNewParticles().poll()) != null) {
31-
Map<ParticleTextureSheet, Queue<Particle>> particles = this.getParticles();
30+
while ((particle = newParticles.poll()) != null) {
3231
Queue<Particle> queue1 = particles.computeIfAbsent(particle.getType(),
33-
sheet -> EvictingQueue.create(limit));
34-
// limit 不会改变,这里可以直接判断
32+
sheet -> EvictingQueue.create(limit));
33+
// limit 在程序生命周期内不会改变,这里可以直接判断
3534
if (queue1.size() < limit) {
3635
queue1.add(particle);
3736
} else {

0 commit comments

Comments
 (0)