Skip to content

Commit af8f9cc

Browse files
Hit Particle Issue Fixed.
1 parent b85239c commit af8f9cc

File tree

4 files changed

+31
-19
lines changed

4 files changed

+31
-19
lines changed

src/main/java/plus/dragons/visuality/config/EntityArmorParticleConfig.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import net.minecraft.world.item.Items;
2424
import net.minecraft.world.level.Level;
2525
import net.minecraft.world.phys.AABB;
26-
import net.neoforged.neoforge.common.NeoForge;
27-
import net.neoforged.neoforge.event.tick.EntityTickEvent;
2826
import org.jetbrains.annotations.Nullable;
2927
import plus.dragons.visuality.Visuality;
3028
import plus.dragons.visuality.data.ParticleWithVelocity;
@@ -49,15 +47,14 @@ public EntityArmorParticleConfig() {
4947
particles.put(armor, entry.particle);
5048
}
5149
}
52-
NeoForge.EVENT_BUS.addListener(this::spawnParticles);
5350
}
5451

55-
public void spawnParticles(EntityTickEvent.Post event) {
52+
public void spawnParticles(LivingEntity entity) {
5653
if (!enabled)
5754
return;
58-
if(!(event.getEntity() instanceof LivingEntity entity)) return;
55+
5956
Level level = entity.level();
60-
if(!level.isClientSide || !entity.isAlive())
57+
if(!entity.isAlive())
6158
return;
6259

6360
RandomSource random = entity.getRandom();

src/main/java/plus/dragons/visuality/config/EntityHitParticleConfig.java

+3-12
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@
2020
import net.minecraft.world.entity.ai.attributes.Attributes;
2121
import net.minecraft.world.entity.projectile.AbstractArrow;
2222
import net.minecraft.world.entity.projectile.ThrownTrident;
23-
import net.neoforged.bus.api.EventPriority;
24-
import net.neoforged.neoforge.common.NeoForge;
25-
import net.neoforged.neoforge.event.entity.living.LivingDamageEvent;
2623
import org.jetbrains.annotations.Nullable;
2724
import plus.dragons.visuality.Visuality;
2825
import plus.dragons.visuality.data.ParticleWithVelocity;
@@ -48,23 +45,17 @@ public EntityHitParticleConfig() {
4845
particles.put(type, entry.particle);
4946
}
5047
}
51-
NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, true, this::spawnParticles);
5248
}
5349

54-
public void spawnParticles(LivingDamageEvent.Post event) {
50+
public void spawnParticles(LivingEntity entity,DamageSource damageSource, double amount) {
51+
// Unfortunately LivingDamageEvent only calls in server side. So we use Mixin
5552
if (!this.enabled)
5653
return;
57-
58-
DamageSource damageSource = event.getSource();
59-
LivingEntity entity = event.getEntity();
60-
if (!entity.level().isClientSide)
61-
return;
6254

6355
EntityType<?> type = entity.getType();
6456
if (!particles.containsKey(type))
6557
return;
66-
67-
double amount = 0;
58+
6859
Entity sourceEntity = damageSource.getDirectEntity();
6960

7061
if (sourceEntity == null)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package plus.dragons.visuality.mixin;
2+
3+
import net.minecraft.world.damagesource.DamageSource;
4+
import net.minecraft.world.entity.LivingEntity;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
9+
import plus.dragons.visuality.config.Config;
10+
11+
@Mixin(LivingEntity.class)
12+
public class LivingEntityMixin {
13+
@Inject(method = "hurt", at = @At("HEAD"))
14+
private void handleParticle(DamageSource source, float amount, CallbackInfoReturnable<Boolean> cir) {
15+
var living = (LivingEntity) (Object) this;
16+
if(living.level().isClientSide){
17+
Config.ENTITY_HIT_PARTICLES.spawnParticles(living,source,amount);
18+
Config.ENTITY_ARMOR_PARTICLES.spawnParticles(living);
19+
}
20+
}
21+
}

src/main/resources/visuality.mixins.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,8 @@
1111
],
1212
"injectors": {
1313
"defaultRequire": 1
14-
}
14+
},
15+
"mixins": [
16+
"LivingEntityMixin"
17+
]
1518
}

0 commit comments

Comments
 (0)