- 205
- 12
- 103
Ахой. Проблема заключается в следующем: накладываю на моба эффект, который должен наносить урон и спавнить вокруг него специальные партиклы - урон наносится, а партиклов нет. Накладываю на себя при помощи команды - всё работает. Подозреваю что косяк где-то в области применения !world.isRemote, но где именно - понять не могу.
Наложение эффекта:
Сам эффект:
Также не могу понять как убрать из эффекта рендер ванильных партиклов зелья, мне они вообще не нужны.
Наложение эффекта:
Java:
@Override
protected void onImpact(RayTraceResult rayTraceResult) {
if (!world.isRemote) {
switch (rayTraceResult.getType()) {
case BLOCK:
BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult) rayTraceResult;
if (world.getBlockState(blockRayTraceResult.getPos()).isSolid()) {
if (dataManager.get(IS_RETURNING) == 0) {
world.playSound((PlayerEntity) null, this.getPosX(), this.getPosY(), this.getPosZ(), ModSounds.DIG, SoundCategory.NEUTRAL, 1.0F, 1.0F / (new Random().nextFloat() * 0.4F + 0.8F));
Vec3d currentMovementVec = new Vec3d(getMotion().x, getMotion().y, getMotion().z);
Direction dir = blockRayTraceResult.getFace();
Vec3d normalVector = new Vec3d(-2 * dir.getXOffset(), -2 * dir.getYOffset(), -2 * dir.getZOffset()).normalize();
Vec3d movementVec = normalVector.mul(
-0.5 * currentMovementVec.dotProduct(normalVector),
-0.5 * currentMovementVec.dotProduct(normalVector),
-0.5 * currentMovementVec.dotProduct(normalVector))
.add(currentMovementVec);
setMotion(movementVec);
this.setIsReturning();
}
}
break;
case ENTITY:
EntityRayTraceResult entityRayTraceResult = (EntityRayTraceResult) rayTraceResult;
if (entityRayTraceResult.getEntity() instanceof LivingEntity && entityRayTraceResult.getEntity() != getThrower()) {
LivingEntity thrower = getThrower();
entityRayTraceResult.getEntity().attackEntityFrom(thrower != null
? thrower instanceof PlayerEntity
? DamageSource.causeThrownDamage(this, thrower)
: DamageSource.causeMobDamage(thrower)
: DamageSource.GENERIC, 8);
if (entityRayTraceResult.getEntity() != (LivingEntity) thrower) {
if (new Random().nextInt(3) == 0) {
((LivingEntity) entityRayTraceResult.getEntity()).addPotionEffect(new EffectInstance(ModEffects.Effects.on_fire, 60));
}
}
}
break;
default:
break;
}
}
}
Сам эффект:
Java:
public class OnFireEffect extends TerraEffect {
public OnFireEffect(String name, EffectType typeIn, int liquidColorIn) {
super(name, typeIn, liquidColorIn);
}
@Override
public boolean isReady(int duration, int amplifier) {
return true;
}
@Override
public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) {
entityLivingBaseIn.attackEntityFrom(DamageSource.GENERIC, 4 + new Random().nextInt(2));
TintParticleData tintParticleData = new TintParticleData(new Color(
1.0F,
0.7F * new Random().nextFloat(),
0.1F * new Random().nextFloat()),
0.2F * new Random().nextFloat(),
15 + new Random().nextInt(10));
for (int i = 0; i < 7; i++)
entityLivingBaseIn.world.addParticle(tintParticleData,
entityLivingBaseIn.getPosX() + 0.4F * (Math.random() - 0.5F),
entityLivingBaseIn.getPosY() + 1.5F * (Math.random() + 0.25F),
entityLivingBaseIn.getPosZ() + 0.4F * (Math.random() - 0.5F),
0.15F * (Math.random() - 0.5F),
0.15F * (Math.random() - 0.5F),
0.15F * (Math.random() - 0.5F));
}
}
Также не могу понять как убрать из эффекта рендер ванильных партиклов зелья, мне они вообще не нужны.